{
  "version": 3,
  "sources": ["../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/codegen/code.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/codegen/scope.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/codegen/index.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/util.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/names.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/errors.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/boolSchema.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/rules.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/applicability.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/dataType.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/defaults.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/code.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/keyword.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/subschema.ts", "../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js", "../node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/resolve.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/validate/index.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/runtime/validation_error.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/ref_error.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/compile/index.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/data.json", "../node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js", "../node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js", "../node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/runtime/uri.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/core.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/core/id.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/core/ref.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/core/index.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/limitNumber.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/multipleOf.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/runtime/ucs2length.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/limitLength.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/pattern.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/limitProperties.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/required.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/limitItems.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/runtime/equal.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/const.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/enum.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/validation/index.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/items.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/items2020.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/contains.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/dependencies.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/properties.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/not.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/anyOf.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/oneOf.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/allOf.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/if.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/thenElse.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/applicator/index.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/format/format.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/format/index.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/metadata.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/draft7.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/discriminator/types.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/vocabularies/discriminator/index.ts", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-draft-07.json", "../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/lib/ajv.ts", "../node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/src/formats.ts", "../node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/src/limit.ts", "../node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/src/index.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/version.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/errors.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/regex.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/formatAbiParameter.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/formatAbiParameters.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/formatAbiItem.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/runtime/signatures.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/errors/abiItem.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/errors/abiParameter.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/errors/signature.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/errors/struct.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/errors/splitParameters.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/runtime/cache.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/runtime/utils.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/runtime/structs.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/parseAbi.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/parseAbiItem.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/parseAbiParameters.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/exports/index.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/formatAbiItem.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/isHex.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/size.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/version.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/base.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/abi.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/data.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/pad.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/encoding.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/trim.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/encoding/fromHex.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/encoding/toHex.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/encoding/toBytes.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/_u64.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/cryptoNode.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/utils.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/sha3.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/keccak256.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/hashSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/normalizeSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/toSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/toSignatureHash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/toEventSelector.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/address.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/lru.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/address/getAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/address/isAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/concat.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/slice.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/regex.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodeAbiParameters.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/toFunctionSelector.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/getAbiItem.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/utils/parseAccount.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/prepareEncodeFunctionData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodeFunctionData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/solidity.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/cursor.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/cursor.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/encoding/fromBytes.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/decodeAbiParameters.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/decodeErrorResult.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/stringify.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/formatAbiItemWithArgs.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/unit.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/unit/formatUnits.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/unit/formatEther.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/unit/formatGwei.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/stateOverride.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/transaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/utils.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/contract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/request.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/rpc.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/_md.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/sha2.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/hmac.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/abstract/utils.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/abstract/modular.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/abstract/curve.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/_shortw_utils.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/secp256k1.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/node.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/errors/getNodeError.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/extract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/formatter.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/transactionRequest.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/stateOverride.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/number.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/transaction/assertRequest.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/address/isAddressEqual.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/decodeFunctionResult.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/version.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/errors.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Errors.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/bytes.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/hex.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Json.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Bytes.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Hex.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Withdrawal.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/BlockOverrides.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/abis.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/contract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/contracts.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/chain.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodeDeployData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/chain/getChainContractAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/errors/getCallError.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/promise/withResolvers.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/promise/createBatchScheduler.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/ccip.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/decodeFunctionData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodeErrorResult.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodeFunctionResult.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/localBatchGatewayRequest.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ccip.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/call.ts", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/usdc-registry.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/version.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/errors.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/narrow.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/regex.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/formatAbiParameter.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/formatAbiParameters.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/formatAbiItem.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/formatAbi.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/runtime/signatures.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/errors/abiItem.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/errors/abiParameter.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/errors/signature.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/errors/struct.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/errors/splitParameters.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/runtime/cache.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/runtime/utils.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/runtime/structs.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/parseAbi.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/parseAbiItem.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/parseAbiParameter.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/human-readable/parseAbiParameters.ts", "../node_modules/.pnpm/abitype@1.2.3_typescript@5.9.3_zod@3.25.76/node_modules/abitype/src/exports/index.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/getAction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/formatAbiItem.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/isHex.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/size.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/version.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/base.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/abi.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/log.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/data.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/pad.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/encoding.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/trim.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/encoding/fromHex.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/encoding/toHex.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/encoding/toBytes.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/_u64.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/cryptoNode.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/utils.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/sha3.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/keccak256.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/hashSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/normalizeSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/toSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/toSignatureHash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/toEventSelector.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/address.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/lru.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/address/getAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/address/isAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/concat.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/slice.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/regex.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodeAbiParameters.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/toFunctionSelector.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/getAbiItem.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodeEventTopics.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/filters/createFilterRequestScope.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/createContractEventFilter.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/utils/parseAccount.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/prepareEncodeFunctionData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodeFunctionData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/solidity.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/cursor.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/cursor.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/encoding/fromBytes.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/decodeAbiParameters.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/decodeErrorResult.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/stringify.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/formatAbiItemWithArgs.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/unit.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/unit/formatUnits.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/unit/formatEther.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/unit/formatGwei.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/stateOverride.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/transaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/utils.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/contract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/request.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/rpc.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/errors/getContractError.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/utils/publicKeyToAddress.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/_md.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/sha2.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/hmac.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/abstract/utils.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/abstract/modular.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/abstract/curve.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/_shortw_utils.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/src/secp256k1.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/recoverPublicKey.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/recoverAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/encoding/toRlp.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/authorization/hashAuthorization.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/authorization/recoverAuthorizationAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/estimateGas.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/node.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/errors/getNodeError.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/errors/getEstimateGasError.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/extract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/formatter.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/transactionRequest.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/stateOverride.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/number.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/transaction/assertRequest.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/fee.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/block.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/transaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/block.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getBlock.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getGasPrice.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/estimateMaxPriorityFeePerGas.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/estimateFeesPerGas.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getTransactionCount.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/blobsToCommitments.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/blobsToProofs.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/sha256.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/sha256.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/commitmentToVersionedHash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/commitmentsToVersionedHashes.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/blob.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/kzg.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/blob.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/toBlobs.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/toBlobSidecars.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/transaction/getTransactionType.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/errors/getTransactionError.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getChainId.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/fillTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/prepareTransactionRequest.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/estimateGas.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/estimateContractGas.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/address/isAddressEqual.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/log.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/decodeEventLog.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/parseEventLogs.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getLogs.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getContractEvents.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/decodeFunctionResult.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/version.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/errors.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Errors.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/bytes.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/hex.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Json.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Bytes.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Hex.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Withdrawal.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/BlockOverrides.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/abis.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/contract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/contracts.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/chain.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodeDeployData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/chain/getChainContractAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/errors/getCallError.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/promise/withResolvers.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/promise/createBatchScheduler.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/ccip.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/decodeFunctionData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodeErrorResult.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodeFunctionResult.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/localBatchGatewayRequest.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ccip.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/call.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/readContract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/simulateContract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/observe.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/wait.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/poll.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/promise/withCache.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getBlockNumber.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getFilterChanges.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/uninstallFilter.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/watchContractEvent.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/account.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/chain/assertCurrentChain.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/sendRawTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/sendTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/writeContract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/getContract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/calls.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/promise/withRetry.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/transactionReceipt.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/sendCalls.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/getCallsStatus.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/waitForCallsStatus.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/uid.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/createClient.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/errors.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/encodedLabelToLabelhash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/namehash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/encodeLabelhash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/labelhash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/packetToBytes.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/ens/getEnsAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/ens.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/avatar/utils.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/avatar/parseAvatarRecord.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/ens/getEnsText.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/ens/getEnsAvatar.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/ens/getEnsName.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/ens/getEnsResolver.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/createAccessList.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/createBlockFilter.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/createEventFilter.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/createPendingTransactionFilter.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getBalance.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getBlobBaseFee.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getBlockTransactionCount.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getCode.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getDelegation.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/eip712.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getEip712Domain.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/feeHistory.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getFeeHistory.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getFilterLogs.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodePacked.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/data/isBytes.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/address/getContractAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/transaction/assertTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/transaction/serializeAccessList.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/transaction/serializeTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/authorization/serializeAuthorizationList.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/authorization/verifyAuthorization.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/promise/withDedupe.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/buildRequest.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/chain/defineChain.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/chain/extractChain.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/encoding/fromRlp.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/isHash.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/legacy.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/ripemd160.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/ripemd160.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/toEventHash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/toEventSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/toFunctionHash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/toFunctionSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/nonceManager.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/promise/withTimeout.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/rpc/id.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/rpc/http.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/rpc/socket.ts", "../node_modules/.pnpm/isows@1.0.7_ws@8.18.3/node_modules/isows/utils.ts", "../node_modules/.pnpm/isows@1.0.7_ws@8.18.3/node_modules/isows/index.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/rpc/webSocket.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/rpc/compat.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/strings.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/toPrefixedMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/hashMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/typedData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/typedData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/hashTypedData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/bytes.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/isErc6492Signature.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/lru.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Caches.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Hash.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/PublicKey.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Address.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Solidity.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/abiParameters.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/cursor.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/AbiParameters.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Rlp.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Signature.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Authorization.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/entropy.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Secp256k1.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/erc8010/SignatureErc8010.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/erc8010/index.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/isErc8010Signature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/parseErc6492Signature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/parseErc8010Signature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/recoverMessageAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/recoverTypedDataAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/serializeErc6492Signature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/serializeErc8010Signature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/verifyHash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/verifyMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/verifyTypedData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/transaction/getSerializedTransactionType.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/transaction/parseTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/unit.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/unit/parseUnits.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/unit/parseEther.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/unit/parseGwei.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/index.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/proof.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getProof.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getStorageAt.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getTransactionConfirmations.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getTransactionReceipt.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/multicall.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/simulateBlocks.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/abiItem.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/AbiItem.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/AbiConstructor.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/AbiFunction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/address.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/simulateCalls.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/erc6492/SignatureErc6492.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/erc6492/index.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/serializeSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/verifyHash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/verifyMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/verifyTypedData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/watchBlockNumber.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/waitForTransactionReceipt.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/watchBlocks.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/watchEvent.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/watchPendingTransactions.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/siwe/parseSiweMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/siwe/validateSiweMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/siwe/verifySiweMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/sendRawTransactionSync.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/decorators/public.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/createPublicClient.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/dropTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/dumpState.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/getAutomine.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/getTxpoolContent.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/getTxpoolStatus.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/impersonateAccount.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/increaseTime.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/inspectTxpool.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/loadState.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/mine.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/removeBlockTimestampInterval.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/reset.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/revert.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/sendUnsignedTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setAutomine.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setBalance.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setBlockGasLimit.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setBlockTimestampInterval.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setCode.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setCoinbase.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setIntervalMining.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setLoggingEnabled.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setMinGasPrice.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setNextBlockBaseFeePerGas.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setNextBlockTimestamp.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setNonce.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setRpcUrl.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/setStorageAt.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/snapshot.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/test/stopImpersonatingAccount.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/decorators/test.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/createTestClient.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/addChain.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/deployContract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/getAddresses.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/getCapabilities.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/getPermissions.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/prepareAuthorization.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/requestAddresses.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/requestPermissions.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/sendCallsSync.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/sendTransactionSync.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/showCallsStatus.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/signAuthorization.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/signMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/signTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/signTypedData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/switchChain.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/watchAsset.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/writeContractSync.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/decorators/wallet.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/createWalletClient.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/transports/createTransport.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/transports/custom.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/transports/fallback.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/transport.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/transports/http.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/transports/webSocket.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/types/eip1193.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/decodeDeployData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/fromBlobs.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/sidecarsToVersionedHashes.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/toCoinType.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/kzg/defineKzg.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/kzg/setupKzg.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/compactSignatureToSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/parseCompactSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/parseSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/recoverTransactionAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/serializeCompactSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/signatureToCompactSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/index.ts", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/sas.ts", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/multisig-envelope.ts", "../node_modules/.pnpm/@noble+hashes@2.2.0/node_modules/@noble/hashes/src/utils.ts", "../node_modules/.pnpm/@noble+hashes@2.2.0/node_modules/@noble/hashes/src/_md.ts", "../node_modules/.pnpm/@noble+hashes@2.2.0/node_modules/@noble/hashes/src/_u64.ts", "../node_modules/.pnpm/@noble+hashes@2.2.0/node_modules/@noble/hashes/src/sha2.ts", "../node_modules/.pnpm/@noble+curves@2.2.0/node_modules/@noble/curves/src/utils.ts", "../node_modules/.pnpm/@noble+curves@2.2.0/node_modules/@noble/curves/src/abstract/modular.ts", "../node_modules/.pnpm/@noble+curves@2.2.0/node_modules/@noble/curves/src/abstract/curve.ts", "../node_modules/.pnpm/@noble+curves@2.2.0/node_modules/@noble/curves/src/abstract/fft.ts", "../node_modules/.pnpm/@noble+curves@2.2.0/node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../node_modules/.pnpm/@noble+curves@2.2.0/node_modules/@noble/curves/src/abstract/frost.ts", "../node_modules/.pnpm/@noble+curves@2.2.0/node_modules/@noble/curves/src/abstract/oprf.ts", "../node_modules/.pnpm/@noble+hashes@2.2.0/node_modules/@noble/hashes/src/hmac.ts", "../node_modules/.pnpm/@noble+curves@2.2.0/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../node_modules/.pnpm/@noble+curves@2.2.0/node_modules/@noble/curves/src/nist.ts", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/webauthn.ts", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/eip3009.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/experimental/erc7739/actions/signMessage.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/utils.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/abstract/modular.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/abstract/curve.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/_shortw_utils.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/secp256k1.ts", "../node_modules/.pnpm/@scure+base@1.2.6/node_modules/@scure/base/index.ts", "../node_modules/.pnpm/@scure+bip32@1.7.0/node_modules/@scure/bip32/index.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/pbkdf2.ts", "../node_modules/.pnpm/@scure+bip39@1.6.0/node_modules/@scure/bip39/index.js", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/generateMnemonic.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/generatePrivateKey.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/toAccount.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/utils/sign.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/utils/signAuthorization.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/utils/signMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/utils/signTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/utils/signTypedData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/privateKeyToAccount.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/hdKeyToAccount.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/mnemonicToAccount.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/utils/privateKeyToAddress.ts", "../node_modules/.pnpm/@scure+bip39@1.6.0/node_modules/@scure/bip39/wordlists/czech.js", "../node_modules/.pnpm/@scure+bip39@1.6.0/node_modules/@scure/bip39/wordlists/english.js", "../node_modules/.pnpm/@scure+bip39@1.6.0/node_modules/@scure/bip39/wordlists/french.js", "../node_modules/.pnpm/@scure+bip39@1.6.0/node_modules/@scure/bip39/wordlists/italian.js", "../node_modules/.pnpm/@scure+bip39@1.6.0/node_modules/@scure/bip39/wordlists/japanese.js", "../node_modules/.pnpm/@scure+bip39@1.6.0/node_modules/@scure/bip39/wordlists/korean.js", "../node_modules/.pnpm/@scure+bip39@1.6.0/node_modules/@scure/bip39/wordlists/portuguese.js", "../node_modules/.pnpm/@scure+bip39@1.6.0/node_modules/@scure/bip39/wordlists/simplified-chinese.js", "../node_modules/.pnpm/@scure+bip39@1.6.0/node_modules/@scure/bip39/wordlists/spanish.js", "../node_modules/.pnpm/@scure+bip39@1.6.0/node_modules/@scure/bip39/wordlists/traditional-chinese.js", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/wordlists.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/index.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/experimental/erc7739/utils/wrapTypedDataSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/experimental/erc7739/actions/signTypedData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/experimental/erc7739/decorators/erc7739.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/experimental/erc7739/utils/hashMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/experimental/erc7739/utils/hashTypedData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/experimental/erc7739/index.ts", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/erc7739.ts", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/relay.ts", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.cjs", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.cjs", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.cjs", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.cjs", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.cjs", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.cjs", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.cjs", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.cjs", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.cjs", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/http/index.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/utils/index.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/types/facilitator.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/index.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/http/x402HTTPResourceServer.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/schemas/index.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/http/httpFacilitatorClient.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/http/x402HTTPClient.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/schemas/index.ts", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/network.ts", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/x402.ts", "../node_modules/.pnpm/@noble+curves@2.2.0/node_modules/@noble/curves/src/secp256k1.ts", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/crypto/secp256k1.ts", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/crypto/frost.ts", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ar.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/az.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/be.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/bg.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ca.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/cs.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/da.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/de.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/en.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/eo.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/es.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fa.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fi.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr-CA.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/he.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hu.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hy.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/id.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/is.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/it.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ja.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ka.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/km.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/kh.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ko.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/lt.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/mk.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ms.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/nl.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/no.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ota.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ps.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pl.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pt.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ru.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sl.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sv.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ta.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/th.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/tr.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uk.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ua.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ur.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uz.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/vi.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-CN.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-TW.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/yo.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/index.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-generator.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/index.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/checks.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/compat.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/from-json-schema.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/coerce.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/external.cjs", "../node_modules/.pnpm/zod@4.3.6/node_modules/zod/index.cjs", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/wire-schemas.ts", "../node_modules/.pnpm/@keyban+agent-wallet-protocol@file+..+..+sdk+libs+keyban-agent-wallet-protocol_viem@2.4_9e26c1cba28519923d8db43db5c6d83c/node_modules/@keyban/agent-wallet-protocol/src/index.ts", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/core.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/util.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/errors.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/parse.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/regexes.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/checks.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/doc.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/versions.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/schemas.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/en.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/registries.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/api.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/to-json-schema.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/mini/schemas.js", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/server/zod-compat.ts", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/iso.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/errors.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/parse.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/schemas.js", "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/external.js", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/types.ts", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/interfaces.ts", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js", "../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/server/zod-json-schema-compat.ts", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/shared/protocol.ts", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/validation/ajv-provider.ts", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/server.ts", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/helpers.ts", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/server/index.ts", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/server/completable.ts", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/shared/toolNameValidation.ts", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/mcp-server.ts", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/server/mcp.ts", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/server/stdio.ts", "../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/src/shared/stdio.ts", "../src/lib/env-urls.ts", "../src/lib/logger.ts", "../src/lib/session.ts", "../src/lib/tool-registry.ts", "../src/lib/ensure-account.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/getAction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodeEventTopics.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/log.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/createContractEventFilter.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/filters/createFilterRequestScope.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/estimateContractGas.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/errors/getContractError.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/estimateGas.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/accounts/utils/publicKeyToAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/recoverPublicKey.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/recoverAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/authorization/hashAuthorization.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/encoding/toRlp.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/authorization/recoverAuthorizationAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/estimateGas.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/errors/getEstimateGasError.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/prepareTransactionRequest.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/fee.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/estimateMaxPriorityFeePerGas.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/block.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getBlock.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/block.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/transaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getGasPrice.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/estimateFeesPerGas.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getTransactionCount.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/blobsToCommitments.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/blobsToProofs.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/commitmentToVersionedHash.ts", "../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/sha256.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/hash/sha256.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/commitmentsToVersionedHashes.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/blob.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/kzg.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/blob.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/toBlobs.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/blob/toBlobSidecars.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/transaction/getTransactionType.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/fillTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/errors/getTransactionError.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getChainId.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getContractEvents.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/parseEventLogs.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/log.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/decodeEventLog.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getLogs.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/readContract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/simulateContract.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/watchContractEvent.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/observe.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/wait.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/poll.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/promise/withCache.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getBlockNumber.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getFilterChanges.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/uninstallFilter.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/sendRawTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/promise/withRetry.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/transactionReceipt.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/createClient.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/uid.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/ens/getEnsAddress.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/errors.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/namehash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/encodedLabelToLabelhash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/packetToBytes.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/encodeLabelhash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/labelhash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/ens.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/avatar/utils.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/ens/avatar/parseAvatarRecord.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/ens/getEnsText.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/ens/getEnsAvatar.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/ens/getEnsName.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/ens/getEnsResolver.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/decorators/public.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/createAccessList.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/createBlockFilter.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/createEventFilter.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/createPendingTransactionFilter.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getBalance.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getBlobBaseFee.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getBlockTransactionCount.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getCode.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getDelegation.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/eip712.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getEip712Domain.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getFeeHistory.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/feeHistory.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getFilterLogs.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getProof.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/abi/encodePacked.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/authorization/serializeAuthorizationList.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/transaction/serializeTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/transaction/assertTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/transaction/serializeAccessList.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/authorization/verifyAuthorization.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/buildRequest.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/promise/withDedupe.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/chain/defineChain.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/index.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/rpc/http.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/promise/withTimeout.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/rpc/id.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/hashMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/strings.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/toPrefixedMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/hashTypedData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/typedData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/typedData.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/erc8010/SignatureErc8010.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/AbiParameters.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Address.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/lru.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Caches.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Hash.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/PublicKey.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/abiParameters.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Solidity.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/cursor.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Authorization.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Rlp.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Signature.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/Secp256k1.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/unit.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/unit/parseUnits.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/formatters/proof.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getStorageAt.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getTransaction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getTransactionConfirmations.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/getTransactionReceipt.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/multicall.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/simulateBlocks.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/AbiItem.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/internal/abiItem.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/AbiConstructor.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/core/AbiFunction.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/simulateCalls.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/constants/address.ts", "../node_modules/.pnpm/ox@0.14.15_typescript@5.9.3_zod@3.25.76/node_modules/ox/erc6492/SignatureErc6492.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/verifyHash.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/signature/serializeSignature.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/verifyMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/verifyTypedData.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/waitForTransactionReceipt.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/watchBlockNumber.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/watchBlocks.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/watchEvent.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/public/watchPendingTransactions.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/siwe/parseSiweMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/utils/siwe/validateSiweMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/siwe/verifySiweMessage.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/actions/wallet/sendRawTransactionSync.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/createPublicClient.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/transports/createTransport.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/clients/transports/http.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/errors/transport.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/index.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/op-stack/contracts.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/op-stack/formatters.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/op-stack/serializers.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/op-stack/chainConfig.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/chains/definitions/anvil.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/chains/definitions/base.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/chains/definitions/baseSepolia.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/chains/definitions/xdc.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/chains/definitions/xdcTestnet.ts", "../src/lib/evm.ts", "../src/lib/invite-sign.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/secp256k1.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/utils.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/abstract/modular.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/abstract/curve.ts", "../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/src/_shortw_utils.ts", "../src/lib/node-api.ts", "../src/lib/http-failure.ts", "../src/lib/wasm-loader.ts", "../src/generated/abis.ts", "../src/tools/get-account-info.ts", "../src/tools/api-status.ts", "../src/tools/sign-message.ts", "../src/tools/transfer-usdc.ts", "../src/lib/relay.ts", "../src/lib/x402-diagnostics.ts", "../src/lib/balance.ts", "../src/tools/balance.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/schemas/index.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/utils/index.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/http/x402HTTPResourceServer.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/http/httpFacilitatorClient.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/http/x402HTTPClient.ts", "../node_modules/.pnpm/@x402+core@2.9.0/node_modules/@x402/core/src/http/index.ts", "../src/lib/x402-payment-header.ts", "../src/lib/x402-signer.ts", "../node_modules/.pnpm/viem@2.47.16_typescript@5.9.3_zod@3.25.76/node_modules/viem/experimental/erc7739/utils/wrapTypedDataSignature.ts", "../src/tools/x402-pay.ts", "../node_modules/.pnpm/@x402+evm@2.9.0_typescript@5.9.3/node_modules/@x402/evm/src/shared/defaultAssets.ts", "../node_modules/.pnpm/@x402+evm@2.9.0_typescript@5.9.3/node_modules/@x402/evm/src/exact/server/scheme.ts", "../node_modules/.pnpm/@x402+evm@2.9.0_typescript@5.9.3/node_modules/@x402/evm/src/exact/server/register.ts", "../src/tools/x402-info.ts", "../src/tools/cancel-intent.ts", "../src/tools/wait-for-intent.ts", "../src/tools/discover-x402-services.ts", "../src/tools/expense-stats.ts", "../src/tools/list-expense-transactions.ts", "../src/index.ts"],
  "sourcesContent": ["// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport abstract class _CodeOrName {\n  abstract readonly str: string\n  abstract readonly names: UsedNames\n  abstract toString(): string\n  abstract emptyStr(): boolean\n}\n\nexport const IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i\n\nexport class Name extends _CodeOrName {\n  readonly str: string\n  constructor(s: string) {\n    super()\n    if (!IDENTIFIER.test(s)) throw new Error(\"CodeGen: name must be a valid identifier\")\n    this.str = s\n  }\n\n  toString(): string {\n    return this.str\n  }\n\n  emptyStr(): boolean {\n    return false\n  }\n\n  get names(): UsedNames {\n    return {[this.str]: 1}\n  }\n}\n\nexport class _Code extends _CodeOrName {\n  readonly _items: readonly CodeItem[]\n  private _str?: string\n  private _names?: UsedNames\n\n  constructor(code: string | readonly CodeItem[]) {\n    super()\n    this._items = typeof code === \"string\" ? [code] : code\n  }\n\n  toString(): string {\n    return this.str\n  }\n\n  emptyStr(): boolean {\n    if (this._items.length > 1) return false\n    const item = this._items[0]\n    return item === \"\" || item === '\"\"'\n  }\n\n  get str(): string {\n    return (this._str ??= this._items.reduce((s: string, c: CodeItem) => `${s}${c}`, \"\"))\n  }\n\n  get names(): UsedNames {\n    return (this._names ??= this._items.reduce((names: UsedNames, c) => {\n      if (c instanceof Name) names[c.str] = (names[c.str] || 0) + 1\n      return names\n    }, {}))\n  }\n}\n\nexport type CodeItem = Name | string | number | boolean | null\n\nexport type UsedNames = Record<string, number | undefined>\n\nexport type Code = _Code | Name\n\nexport type SafeExpr = Code | number | boolean | null\n\nexport const nil = new _Code(\"\")\n\ntype CodeArg = SafeExpr | string | undefined\n\nexport function _(strs: TemplateStringsArray, ...args: CodeArg[]): _Code {\n  const code: CodeItem[] = [strs[0]]\n  let i = 0\n  while (i < args.length) {\n    addCodeArg(code, args[i])\n    code.push(strs[++i])\n  }\n  return new _Code(code)\n}\n\nconst plus = new _Code(\"+\")\n\nexport function str(strs: TemplateStringsArray, ...args: (CodeArg | string[])[]): _Code {\n  const expr: CodeItem[] = [safeStringify(strs[0])]\n  let i = 0\n  while (i < args.length) {\n    expr.push(plus)\n    addCodeArg(expr, args[i])\n    expr.push(plus, safeStringify(strs[++i]))\n  }\n  optimize(expr)\n  return new _Code(expr)\n}\n\nexport function addCodeArg(code: CodeItem[], arg: CodeArg | string[]): void {\n  if (arg instanceof _Code) code.push(...arg._items)\n  else if (arg instanceof Name) code.push(arg)\n  else code.push(interpolate(arg))\n}\n\nfunction optimize(expr: CodeItem[]): void {\n  let i = 1\n  while (i < expr.length - 1) {\n    if (expr[i] === plus) {\n      const res = mergeExprItems(expr[i - 1], expr[i + 1])\n      if (res !== undefined) {\n        expr.splice(i - 1, 3, res)\n        continue\n      }\n      expr[i++] = \"+\"\n    }\n    i++\n  }\n}\n\nfunction mergeExprItems(a: CodeItem, b: CodeItem): CodeItem | undefined {\n  if (b === '\"\"') return a\n  if (a === '\"\"') return b\n  if (typeof a == \"string\") {\n    if (b instanceof Name || a[a.length - 1] !== '\"') return\n    if (typeof b != \"string\") return `${a.slice(0, -1)}${b}\"`\n    if (b[0] === '\"') return a.slice(0, -1) + b.slice(1)\n    return\n  }\n  if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name)) return `\"${a}${b.slice(1)}`\n  return\n}\n\nexport function strConcat(c1: Code, c2: Code): Code {\n  return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`\n}\n\n// TODO do not allow arrays here\nfunction interpolate(x?: string | string[] | number | boolean | null): SafeExpr | string {\n  return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n    ? x\n    : safeStringify(Array.isArray(x) ? x.join(\",\") : x)\n}\n\nexport function stringify(x: unknown): Code {\n  return new _Code(safeStringify(x))\n}\n\nexport function safeStringify(x: unknown): string {\n  return JSON.stringify(x)\n    .replace(/\\u2028/g, \"\\\\u2028\")\n    .replace(/\\u2029/g, \"\\\\u2029\")\n}\n\nexport function getProperty(key: Code | string | number): Code {\n  return typeof key == \"string\" && IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`\n}\n\n//Does best effort to format the name properly\nexport function getEsmExportName(key: Code | string | number): Code {\n  if (typeof key == \"string\" && IDENTIFIER.test(key)) {\n    return new _Code(`${key}`)\n  }\n  throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)\n}\n\nexport function regexpCode(rx: RegExp): Code {\n  return new _Code(rx.toString())\n}\n", "import {_, nil, Code, Name} from \"./code\"\n\ninterface NameGroup {\n  prefix: string\n  index: number\n}\n\nexport interface NameValue {\n  ref: ValueReference // this is the reference to any value that can be referred to from generated code via `globals` var in the closure\n  key?: unknown // any key to identify a global to avoid duplicates, if not passed ref is used\n  code?: Code // this is the code creating the value needed for standalone code wit_out closure - can be a primitive value, function or import (`require`)\n}\n\nexport type ValueReference = unknown // possibly make CodeGen parameterized type on this type\n\nclass ValueError extends Error {\n  readonly value?: NameValue\n  constructor(name: ValueScopeName) {\n    super(`CodeGen: \"code\" for ${name} not defined`)\n    this.value = name.value\n  }\n}\n\ninterface ScopeOptions {\n  prefixes?: Set<string>\n  parent?: Scope\n}\n\ninterface ValueScopeOptions extends ScopeOptions {\n  scope: ScopeStore\n  es5?: boolean\n  lines?: boolean\n}\n\nexport type ScopeStore = Record<string, ValueReference[] | undefined>\n\ntype ScopeValues = {\n  [Prefix in string]?: Map<unknown, ValueScopeName>\n}\n\nexport type ScopeValueSets = {\n  [Prefix in string]?: Set<ValueScopeName>\n}\n\nexport enum UsedValueState {\n  Started,\n  Completed,\n}\n\nexport type UsedScopeValues = {\n  [Prefix in string]?: Map<ValueScopeName, UsedValueState | undefined>\n}\n\nexport const varKinds = {\n  const: new Name(\"const\"),\n  let: new Name(\"let\"),\n  var: new Name(\"var\"),\n}\n\nexport class Scope {\n  protected readonly _names: {[Prefix in string]?: NameGroup} = {}\n  protected readonly _prefixes?: Set<string>\n  protected readonly _parent?: Scope\n\n  constructor({prefixes, parent}: ScopeOptions = {}) {\n    this._prefixes = prefixes\n    this._parent = parent\n  }\n\n  toName(nameOrPrefix: Name | string): Name {\n    return nameOrPrefix instanceof Name ? nameOrPrefix : this.name(nameOrPrefix)\n  }\n\n  name(prefix: string): Name {\n    return new Name(this._newName(prefix))\n  }\n\n  protected _newName(prefix: string): string {\n    const ng = this._names[prefix] || this._nameGroup(prefix)\n    return `${prefix}${ng.index++}`\n  }\n\n  private _nameGroup(prefix: string): NameGroup {\n    if (this._parent?._prefixes?.has(prefix) || (this._prefixes && !this._prefixes.has(prefix))) {\n      throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`)\n    }\n    return (this._names[prefix] = {prefix, index: 0})\n  }\n}\n\ninterface ScopePath {\n  property: string\n  itemIndex: number\n}\n\nexport class ValueScopeName extends Name {\n  readonly prefix: string\n  value?: NameValue\n  scopePath?: Code\n\n  constructor(prefix: string, nameStr: string) {\n    super(nameStr)\n    this.prefix = prefix\n  }\n\n  setValue(value: NameValue, {property, itemIndex}: ScopePath): void {\n    this.value = value\n    this.scopePath = _`.${new Name(property)}[${itemIndex}]`\n  }\n}\n\ninterface VSOptions extends ValueScopeOptions {\n  _n: Code\n}\n\nconst line = _`\\n`\n\nexport class ValueScope extends Scope {\n  protected readonly _values: ScopeValues = {}\n  protected readonly _scope: ScopeStore\n  readonly opts: VSOptions\n\n  constructor(opts: ValueScopeOptions) {\n    super(opts)\n    this._scope = opts.scope\n    this.opts = {...opts, _n: opts.lines ? line : nil}\n  }\n\n  get(): ScopeStore {\n    return this._scope\n  }\n\n  name(prefix: string): ValueScopeName {\n    return new ValueScopeName(prefix, this._newName(prefix))\n  }\n\n  value(nameOrPrefix: ValueScopeName | string, value: NameValue): ValueScopeName {\n    if (value.ref === undefined) throw new Error(\"CodeGen: ref must be passed in value\")\n    const name = this.toName(nameOrPrefix) as ValueScopeName\n    const {prefix} = name\n    const valueKey = value.key ?? value.ref\n    let vs = this._values[prefix]\n    if (vs) {\n      const _name = vs.get(valueKey)\n      if (_name) return _name\n    } else {\n      vs = this._values[prefix] = new Map()\n    }\n    vs.set(valueKey, name)\n\n    const s = this._scope[prefix] || (this._scope[prefix] = [])\n    const itemIndex = s.length\n    s[itemIndex] = value.ref\n    name.setValue(value, {property: prefix, itemIndex})\n    return name\n  }\n\n  getValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n    const vs = this._values[prefix]\n    if (!vs) return\n    return vs.get(keyOrRef)\n  }\n\n  scopeRefs(scopeName: Name, values: ScopeValues | ScopeValueSets = this._values): Code {\n    return this._reduceValues(values, (name: ValueScopeName) => {\n      if (name.scopePath === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n      return _`${scopeName}${name.scopePath}`\n    })\n  }\n\n  scopeCode(\n    values: ScopeValues | ScopeValueSets = this._values,\n    usedValues?: UsedScopeValues,\n    getCode?: (n: ValueScopeName) => Code | undefined\n  ): Code {\n    return this._reduceValues(\n      values,\n      (name: ValueScopeName) => {\n        if (name.value === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n        return name.value.code\n      },\n      usedValues,\n      getCode\n    )\n  }\n\n  private _reduceValues(\n    values: ScopeValues | ScopeValueSets,\n    valueCode: (n: ValueScopeName) => Code | undefined,\n    usedValues: UsedScopeValues = {},\n    getCode?: (n: ValueScopeName) => Code | undefined\n  ): Code {\n    let code: Code = nil\n    for (const prefix in values) {\n      const vs = values[prefix]\n      if (!vs) continue\n      const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map())\n      vs.forEach((name: ValueScopeName) => {\n        if (nameSet.has(name)) return\n        nameSet.set(name, UsedValueState.Started)\n        let c = valueCode(name)\n        if (c) {\n          const def = this.opts.es5 ? varKinds.var : varKinds.const\n          code = _`${code}${def} ${name} = ${c};${this.opts._n}`\n        } else if ((c = getCode?.(name))) {\n          code = _`${code}${c}${this.opts._n}`\n        } else {\n          throw new ValueError(name)\n        }\n        nameSet.set(name, UsedValueState.Completed)\n      })\n    }\n    return code\n  }\n}\n", "import type {ScopeValueSets, NameValue, ValueScope, ValueScopeName} from \"./scope\"\nimport {_, nil, _Code, Code, Name, UsedNames, CodeItem, addCodeArg, _CodeOrName} from \"./code\"\nimport {Scope, varKinds} from \"./scope\"\n\nexport {_, str, strConcat, nil, getProperty, stringify, regexpCode, Name, Code} from \"./code\"\nexport {Scope, ScopeStore, ValueScope, ValueScopeName, ScopeValueSets, varKinds} from \"./scope\"\n\n// type for expressions that can be safely inserted in code without quotes\nexport type SafeExpr = Code | number | boolean | null\n\n// type that is either Code of function that adds code to CodeGen instance using its methods\nexport type Block = Code | (() => void)\n\nexport const operators = {\n  GT: new _Code(\">\"),\n  GTE: new _Code(\">=\"),\n  LT: new _Code(\"<\"),\n  LTE: new _Code(\"<=\"),\n  EQ: new _Code(\"===\"),\n  NEQ: new _Code(\"!==\"),\n  NOT: new _Code(\"!\"),\n  OR: new _Code(\"||\"),\n  AND: new _Code(\"&&\"),\n  ADD: new _Code(\"+\"),\n}\n\nabstract class Node {\n  abstract readonly names: UsedNames\n\n  optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n    return this\n  }\n\n  optimizeNames(_names: UsedNames, _constants: Constants): this | undefined {\n    return this\n  }\n\n  // get count(): number {\n  //   return 1\n  // }\n}\n\nclass Def extends Node {\n  constructor(\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private rhs?: SafeExpr\n  ) {\n    super()\n  }\n\n  render({es5, _n}: CGOptions): string {\n    const varKind = es5 ? varKinds.var : this.varKind\n    const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`\n    return `${varKind} ${this.name}${rhs};` + _n\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!names[this.name.str]) return\n    if (this.rhs) this.rhs = optimizeExpr(this.rhs, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return this.rhs instanceof _CodeOrName ? this.rhs.names : {}\n  }\n}\n\nclass Assign extends Node {\n  constructor(\n    readonly lhs: Code,\n    public rhs: SafeExpr,\n    private readonly sideEffects?: boolean\n  ) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.lhs} = ${this.rhs};` + _n\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (this.lhs instanceof Name && !names[this.lhs.str] && !this.sideEffects) return\n    this.rhs = optimizeExpr(this.rhs, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = this.lhs instanceof Name ? {} : {...this.lhs.names}\n    return addExprNames(names, this.rhs)\n  }\n}\n\nclass AssignOp extends Assign {\n  constructor(\n    lhs: Code,\n    private readonly op: Code,\n    rhs: SafeExpr,\n    sideEffects?: boolean\n  ) {\n    super(lhs, rhs, sideEffects)\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.lhs} ${this.op}= ${this.rhs};` + _n\n  }\n}\n\nclass Label extends Node {\n  readonly names: UsedNames = {}\n  constructor(readonly label: Name) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.label}:` + _n\n  }\n}\n\nclass Break extends Node {\n  readonly names: UsedNames = {}\n  constructor(readonly label?: Code) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    const label = this.label ? ` ${this.label}` : \"\"\n    return `break${label};` + _n\n  }\n}\n\nclass Throw extends Node {\n  constructor(readonly error: Code) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `throw ${this.error};` + _n\n  }\n\n  get names(): UsedNames {\n    return this.error.names\n  }\n}\n\nclass AnyCode extends Node {\n  constructor(private code: SafeExpr) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.code};` + _n\n  }\n\n  optimizeNodes(): this | undefined {\n    return `${this.code}` ? this : undefined\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this {\n    this.code = optimizeExpr(this.code, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return this.code instanceof _CodeOrName ? this.code.names : {}\n  }\n}\n\nabstract class ParentNode extends Node {\n  constructor(readonly nodes: ChildNode[] = []) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return this.nodes.reduce((code, n) => code + n.render(opts), \"\")\n  }\n\n  optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n    const {nodes} = this\n    let i = nodes.length\n    while (i--) {\n      const n = nodes[i].optimizeNodes()\n      if (Array.isArray(n)) nodes.splice(i, 1, ...n)\n      else if (n) nodes[i] = n\n      else nodes.splice(i, 1)\n    }\n    return nodes.length > 0 ? this : undefined\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    const {nodes} = this\n    let i = nodes.length\n    while (i--) {\n      // iterating backwards improves 1-pass optimization\n      const n = nodes[i]\n      if (n.optimizeNames(names, constants)) continue\n      subtractNames(names, n.names)\n      nodes.splice(i, 1)\n    }\n    return nodes.length > 0 ? this : undefined\n  }\n\n  get names(): UsedNames {\n    return this.nodes.reduce((names: UsedNames, n) => addNames(names, n.names), {})\n  }\n\n  // get count(): number {\n  //   return this.nodes.reduce((c, n) => c + n.count, 1)\n  // }\n}\n\nabstract class BlockNode extends ParentNode {\n  render(opts: CGOptions): string {\n    return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n\n  }\n}\n\nclass Root extends ParentNode {}\n\nclass Else extends BlockNode {\n  static readonly kind = \"else\"\n}\n\nclass If extends BlockNode {\n  static readonly kind = \"if\"\n  else?: If | Else\n  constructor(\n    private condition: Code | boolean,\n    nodes?: ChildNode[]\n  ) {\n    super(nodes)\n  }\n\n  render(opts: CGOptions): string {\n    let code = `if(${this.condition})` + super.render(opts)\n    if (this.else) code += \"else \" + this.else.render(opts)\n    return code\n  }\n\n  optimizeNodes(): If | ChildNode[] | undefined {\n    super.optimizeNodes()\n    const cond = this.condition\n    if (cond === true) return this.nodes // else is ignored here\n    let e = this.else\n    if (e) {\n      const ns = e.optimizeNodes()\n      e = this.else = Array.isArray(ns) ? new Else(ns) : (ns as Else | undefined)\n    }\n    if (e) {\n      if (cond === false) return e instanceof If ? e : e.nodes\n      if (this.nodes.length) return this\n      return new If(not(cond), e instanceof If ? [e] : e.nodes)\n    }\n    if (cond === false || !this.nodes.length) return undefined\n    return this\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    this.else = this.else?.optimizeNames(names, constants)\n    if (!(super.optimizeNames(names, constants) || this.else)) return\n    this.condition = optimizeExpr(this.condition, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = super.names\n    addExprNames(names, this.condition)\n    if (this.else) addNames(names, this.else.names)\n    return names\n  }\n\n  // get count(): number {\n  //   return super.count + (this.else?.count || 0)\n  // }\n}\n\nabstract class For extends BlockNode {\n  static readonly kind = \"for\"\n}\n\nclass ForLoop extends For {\n  constructor(private iteration: Code) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `for(${this.iteration})` + super.render(opts)\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!super.optimizeNames(names, constants)) return\n    this.iteration = optimizeExpr(this.iteration, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return addNames(super.names, this.iteration.names)\n  }\n}\n\nclass ForRange extends For {\n  constructor(\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private readonly from: SafeExpr,\n    private readonly to: SafeExpr\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    const varKind = opts.es5 ? varKinds.var : this.varKind\n    const {name, from, to} = this\n    return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts)\n  }\n\n  get names(): UsedNames {\n    const names = addExprNames(super.names, this.from)\n    return addExprNames(names, this.to)\n  }\n}\n\nclass ForIter extends For {\n  constructor(\n    private readonly loop: \"of\" | \"in\",\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private iterable: Code\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts)\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!super.optimizeNames(names, constants)) return\n    this.iterable = optimizeExpr(this.iterable, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return addNames(super.names, this.iterable.names)\n  }\n}\n\nclass Func extends BlockNode {\n  static readonly kind = \"func\"\n  constructor(\n    public name: Name,\n    public args: Code,\n    public async?: boolean\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    const _async = this.async ? \"async \" : \"\"\n    return `${_async}function ${this.name}(${this.args})` + super.render(opts)\n  }\n}\n\nclass Return extends ParentNode {\n  static readonly kind = \"return\"\n\n  render(opts: CGOptions): string {\n    return \"return \" + super.render(opts)\n  }\n}\n\nclass Try extends BlockNode {\n  catch?: Catch\n  finally?: Finally\n\n  render(opts: CGOptions): string {\n    let code = \"try\" + super.render(opts)\n    if (this.catch) code += this.catch.render(opts)\n    if (this.finally) code += this.finally.render(opts)\n    return code\n  }\n\n  optimizeNodes(): this {\n    super.optimizeNodes()\n    this.catch?.optimizeNodes() as Catch | undefined\n    this.finally?.optimizeNodes() as Finally | undefined\n    return this\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this {\n    super.optimizeNames(names, constants)\n    this.catch?.optimizeNames(names, constants)\n    this.finally?.optimizeNames(names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = super.names\n    if (this.catch) addNames(names, this.catch.names)\n    if (this.finally) addNames(names, this.finally.names)\n    return names\n  }\n\n  // get count(): number {\n  //   return super.count + (this.catch?.count || 0) + (this.finally?.count || 0)\n  // }\n}\n\nclass Catch extends BlockNode {\n  static readonly kind = \"catch\"\n  constructor(readonly error: Name) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `catch(${this.error})` + super.render(opts)\n  }\n}\n\nclass Finally extends BlockNode {\n  static readonly kind = \"finally\"\n  render(opts: CGOptions): string {\n    return \"finally\" + super.render(opts)\n  }\n}\n\ntype StartBlockNode = If | For | Func | Return | Try\n\ntype LeafNode = Def | Assign | Label | Break | Throw | AnyCode\n\ntype ChildNode = StartBlockNode | LeafNode\n\ntype EndBlockNodeType =\n  | typeof If\n  | typeof Else\n  | typeof For\n  | typeof Func\n  | typeof Return\n  | typeof Catch\n  | typeof Finally\n\ntype Constants = Record<string, SafeExpr | undefined>\n\nexport interface CodeGenOptions {\n  es5?: boolean\n  lines?: boolean\n  ownProperties?: boolean\n}\n\ninterface CGOptions extends CodeGenOptions {\n  _n: \"\\n\" | \"\"\n}\n\nexport class CodeGen {\n  readonly _scope: Scope\n  readonly _extScope: ValueScope\n  readonly _values: ScopeValueSets = {}\n  private readonly _nodes: ParentNode[]\n  private readonly _blockStarts: number[] = []\n  private readonly _constants: Constants = {}\n  private readonly opts: CGOptions\n\n  constructor(extScope: ValueScope, opts: CodeGenOptions = {}) {\n    this.opts = {...opts, _n: opts.lines ? \"\\n\" : \"\"}\n    this._extScope = extScope\n    this._scope = new Scope({parent: extScope})\n    this._nodes = [new Root()]\n  }\n\n  toString(): string {\n    return this._root.render(this.opts)\n  }\n\n  // returns unique name in the internal scope\n  name(prefix: string): Name {\n    return this._scope.name(prefix)\n  }\n\n  // reserves unique name in the external scope\n  scopeName(prefix: string): ValueScopeName {\n    return this._extScope.name(prefix)\n  }\n\n  // reserves unique name in the external scope and assigns value to it\n  scopeValue(prefixOrName: ValueScopeName | string, value: NameValue): Name {\n    const name = this._extScope.value(prefixOrName, value)\n    const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set())\n    vs.add(name)\n    return name\n  }\n\n  getScopeValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n    return this._extScope.getValue(prefix, keyOrRef)\n  }\n\n  // return code that assigns values in the external scope to the names that are used internally\n  // (same names that were returned by gen.scopeName or gen.scopeValue)\n  scopeRefs(scopeName: Name): Code {\n    return this._extScope.scopeRefs(scopeName, this._values)\n  }\n\n  scopeCode(): Code {\n    return this._extScope.scopeCode(this._values)\n  }\n\n  private _def(\n    varKind: Name,\n    nameOrPrefix: Name | string,\n    rhs?: SafeExpr,\n    constant?: boolean\n  ): Name {\n    const name = this._scope.toName(nameOrPrefix)\n    if (rhs !== undefined && constant) this._constants[name.str] = rhs\n    this._leafNode(new Def(varKind, name, rhs))\n    return name\n  }\n\n  // `const` declaration (`var` in es5 mode)\n  const(nameOrPrefix: Name | string, rhs: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.const, nameOrPrefix, rhs, _constant)\n  }\n\n  // `let` declaration with optional assignment (`var` in es5 mode)\n  let(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.let, nameOrPrefix, rhs, _constant)\n  }\n\n  // `var` declaration with optional assignment\n  var(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.var, nameOrPrefix, rhs, _constant)\n  }\n\n  // assignment code\n  assign(lhs: Code, rhs: SafeExpr, sideEffects?: boolean): CodeGen {\n    return this._leafNode(new Assign(lhs, rhs, sideEffects))\n  }\n\n  // `+=` code\n  add(lhs: Code, rhs: SafeExpr): CodeGen {\n    return this._leafNode(new AssignOp(lhs, operators.ADD, rhs))\n  }\n\n  // appends passed SafeExpr to code or executes Block\n  code(c: Block | SafeExpr): CodeGen {\n    if (typeof c == \"function\") c()\n    else if (c !== nil) this._leafNode(new AnyCode(c))\n    return this\n  }\n\n  // returns code for object literal for the passed argument list of key-value pairs\n  object(...keyValues: [Name | string, SafeExpr | string][]): _Code {\n    const code: CodeItem[] = [\"{\"]\n    for (const [key, value] of keyValues) {\n      if (code.length > 1) code.push(\",\")\n      code.push(key)\n      if (key !== value || this.opts.es5) {\n        code.push(\":\")\n        addCodeArg(code, value)\n      }\n    }\n    code.push(\"}\")\n    return new _Code(code)\n  }\n\n  // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n  if(condition: Code | boolean, thenBody?: Block, elseBody?: Block): CodeGen {\n    this._blockNode(new If(condition))\n\n    if (thenBody && elseBody) {\n      this.code(thenBody).else().code(elseBody).endIf()\n    } else if (thenBody) {\n      this.code(thenBody).endIf()\n    } else if (elseBody) {\n      throw new Error('CodeGen: \"else\" body without \"then\" body')\n    }\n    return this\n  }\n\n  // `else if` clause - invalid without `if` or after `else` clauses\n  elseIf(condition: Code | boolean): CodeGen {\n    return this._elseNode(new If(condition))\n  }\n\n  // `else` clause - only valid after `if` or `else if` clauses\n  else(): CodeGen {\n    return this._elseNode(new Else())\n  }\n\n  // end `if` statement (needed if gen.if was used only with condition)\n  endIf(): CodeGen {\n    return this._endBlockNode(If, Else)\n  }\n\n  private _for(node: For, forBody?: Block): CodeGen {\n    this._blockNode(node)\n    if (forBody) this.code(forBody).endFor()\n    return this\n  }\n\n  // a generic `for` clause (or statement if `forBody` is passed)\n  for(iteration: Code, forBody?: Block): CodeGen {\n    return this._for(new ForLoop(iteration), forBody)\n  }\n\n  // `for` statement for a range of values\n  forRange(\n    nameOrPrefix: Name | string,\n    from: SafeExpr,\n    to: SafeExpr,\n    forBody: (index: Name) => void,\n    varKind: Code = this.opts.es5 ? varKinds.var : varKinds.let\n  ): CodeGen {\n    const name = this._scope.toName(nameOrPrefix)\n    return this._for(new ForRange(varKind, name, from, to), () => forBody(name))\n  }\n\n  // `for-of` statement (in es5 mode replace with a normal for loop)\n  forOf(\n    nameOrPrefix: Name | string,\n    iterable: Code,\n    forBody: (item: Name) => void,\n    varKind: Code = varKinds.const\n  ): CodeGen {\n    const name = this._scope.toName(nameOrPrefix)\n    if (this.opts.es5) {\n      const arr = iterable instanceof Name ? iterable : this.var(\"_arr\", iterable)\n      return this.forRange(\"_i\", 0, _`${arr}.length`, (i) => {\n        this.var(name, _`${arr}[${i}]`)\n        forBody(name)\n      })\n    }\n    return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name))\n  }\n\n  // `for-in` statement.\n  // With option `ownProperties` replaced with a `for-of` loop for object keys\n  forIn(\n    nameOrPrefix: Name | string,\n    obj: Code,\n    forBody: (item: Name) => void,\n    varKind: Code = this.opts.es5 ? varKinds.var : varKinds.const\n  ): CodeGen {\n    if (this.opts.ownProperties) {\n      return this.forOf(nameOrPrefix, _`Object.keys(${obj})`, forBody)\n    }\n    const name = this._scope.toName(nameOrPrefix)\n    return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name))\n  }\n\n  // end `for` loop\n  endFor(): CodeGen {\n    return this._endBlockNode(For)\n  }\n\n  // `label` statement\n  label(label: Name): CodeGen {\n    return this._leafNode(new Label(label))\n  }\n\n  // `break` statement\n  break(label?: Code): CodeGen {\n    return this._leafNode(new Break(label))\n  }\n\n  // `return` statement\n  return(value: Block | SafeExpr): CodeGen {\n    const node = new Return()\n    this._blockNode(node)\n    this.code(value)\n    if (node.nodes.length !== 1) throw new Error('CodeGen: \"return\" should have one node')\n    return this._endBlockNode(Return)\n  }\n\n  // `try` statement\n  try(tryBody: Block, catchCode?: (e: Name) => void, finallyCode?: Block): CodeGen {\n    if (!catchCode && !finallyCode) throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"')\n    const node = new Try()\n    this._blockNode(node)\n    this.code(tryBody)\n    if (catchCode) {\n      const error = this.name(\"e\")\n      this._currNode = node.catch = new Catch(error)\n      catchCode(error)\n    }\n    if (finallyCode) {\n      this._currNode = node.finally = new Finally()\n      this.code(finallyCode)\n    }\n    return this._endBlockNode(Catch, Finally)\n  }\n\n  // `throw` statement\n  throw(error: Code): CodeGen {\n    return this._leafNode(new Throw(error))\n  }\n\n  // start self-balancing block\n  block(body?: Block, nodeCount?: number): CodeGen {\n    this._blockStarts.push(this._nodes.length)\n    if (body) this.code(body).endBlock(nodeCount)\n    return this\n  }\n\n  // end the current self-balancing block\n  endBlock(nodeCount?: number): CodeGen {\n    const len = this._blockStarts.pop()\n    if (len === undefined) throw new Error(\"CodeGen: not in self-balancing block\")\n    const toClose = this._nodes.length - len\n    if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n      throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`)\n    }\n    this._nodes.length = len\n    return this\n  }\n\n  // `function` heading (or definition if funcBody is passed)\n  func(name: Name, args: Code = nil, async?: boolean, funcBody?: Block): CodeGen {\n    this._blockNode(new Func(name, args, async))\n    if (funcBody) this.code(funcBody).endFunc()\n    return this\n  }\n\n  // end function definition\n  endFunc(): CodeGen {\n    return this._endBlockNode(Func)\n  }\n\n  optimize(n = 1): void {\n    while (n-- > 0) {\n      this._root.optimizeNodes()\n      this._root.optimizeNames(this._root.names, this._constants)\n    }\n  }\n\n  private _leafNode(node: LeafNode): CodeGen {\n    this._currNode.nodes.push(node)\n    return this\n  }\n\n  private _blockNode(node: StartBlockNode): void {\n    this._currNode.nodes.push(node)\n    this._nodes.push(node)\n  }\n\n  private _endBlockNode(N1: EndBlockNodeType, N2?: EndBlockNodeType): CodeGen {\n    const n = this._currNode\n    if (n instanceof N1 || (N2 && n instanceof N2)) {\n      this._nodes.pop()\n      return this\n    }\n    throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`)\n  }\n\n  private _elseNode(node: If | Else): CodeGen {\n    const n = this._currNode\n    if (!(n instanceof If)) {\n      throw new Error('CodeGen: \"else\" without \"if\"')\n    }\n    this._currNode = n.else = node\n    return this\n  }\n\n  private get _root(): Root {\n    return this._nodes[0] as Root\n  }\n\n  private get _currNode(): ParentNode {\n    const ns = this._nodes\n    return ns[ns.length - 1]\n  }\n\n  private set _currNode(node: ParentNode) {\n    const ns = this._nodes\n    ns[ns.length - 1] = node\n  }\n\n  // get nodeCount(): number {\n  //   return this._root.count\n  // }\n}\n\nfunction addNames(names: UsedNames, from: UsedNames): UsedNames {\n  for (const n in from) names[n] = (names[n] || 0) + (from[n] || 0)\n  return names\n}\n\nfunction addExprNames(names: UsedNames, from: SafeExpr): UsedNames {\n  return from instanceof _CodeOrName ? addNames(names, from.names) : names\n}\n\nfunction optimizeExpr<T extends SafeExpr | Code>(expr: T, names: UsedNames, constants: Constants): T\nfunction optimizeExpr(expr: SafeExpr, names: UsedNames, constants: Constants): SafeExpr {\n  if (expr instanceof Name) return replaceName(expr)\n  if (!canOptimize(expr)) return expr\n  return new _Code(\n    expr._items.reduce((items: CodeItem[], c: SafeExpr | string) => {\n      if (c instanceof Name) c = replaceName(c)\n      if (c instanceof _Code) items.push(...c._items)\n      else items.push(c)\n      return items\n    }, [])\n  )\n\n  function replaceName(n: Name): SafeExpr {\n    const c = constants[n.str]\n    if (c === undefined || names[n.str] !== 1) return n\n    delete names[n.str]\n    return c\n  }\n\n  function canOptimize(e: SafeExpr): e is _Code {\n    return (\n      e instanceof _Code &&\n      e._items.some(\n        (c) => c instanceof Name && names[c.str] === 1 && constants[c.str] !== undefined\n      )\n    )\n  }\n}\n\nfunction subtractNames(names: UsedNames, from: UsedNames): void {\n  for (const n in from) names[n] = (names[n] || 0) - (from[n] || 0)\n}\n\nexport function not<T extends Code | SafeExpr>(x: T): T\nexport function not(x: Code | SafeExpr): Code | SafeExpr {\n  return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : _`!${par(x)}`\n}\n\nconst andCode = mappend(operators.AND)\n\n// boolean AND (&&) expression with the passed arguments\nexport function and(...args: Code[]): Code {\n  return args.reduce(andCode)\n}\n\nconst orCode = mappend(operators.OR)\n\n// boolean OR (||) expression with the passed arguments\nexport function or(...args: Code[]): Code {\n  return args.reduce(orCode)\n}\n\ntype MAppend = (x: Code, y: Code) => Code\n\nfunction mappend(op: Code): MAppend {\n  return (x, y) => (x === nil ? y : y === nil ? x : _`${par(x)} ${op} ${par(y)}`)\n}\n\nfunction par(x: Code): Code {\n  return x instanceof Name ? x : _`(${x})`\n}\n", "import type {AnySchema, EvaluatedProperties, EvaluatedItems} from \"../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \".\"\nimport {_, getProperty, Code, Name, CodeGen} from \"./codegen\"\nimport {_Code} from \"./codegen/code\"\nimport type {Rule, ValidationRules} from \"./rules\"\n\n// TODO refactor to use Set\nexport function toHash<T extends string = string>(arr: T[]): {[K in T]?: true} {\n  const hash: {[K in T]?: true} = {}\n  for (const item of arr) hash[item] = true\n  return hash\n}\n\nexport function alwaysValidSchema(it: SchemaCxt, schema: AnySchema): boolean | void {\n  if (typeof schema == \"boolean\") return schema\n  if (Object.keys(schema).length === 0) return true\n  checkUnknownRules(it, schema)\n  return !schemaHasRules(schema, it.self.RULES.all)\n}\n\nexport function checkUnknownRules(it: SchemaCxt, schema: AnySchema = it.schema): void {\n  const {opts, self} = it\n  if (!opts.strictSchema) return\n  if (typeof schema === \"boolean\") return\n  const rules = self.RULES.keywords\n  for (const key in schema) {\n    if (!rules[key]) checkStrictMode(it, `unknown keyword: \"${key}\"`)\n  }\n}\n\nexport function schemaHasRules(\n  schema: AnySchema,\n  rules: {[Key in string]?: boolean | Rule}\n): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (rules[key]) return true\n  return false\n}\n\nexport function schemaHasRulesButRef(schema: AnySchema, RULES: ValidationRules): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (key !== \"$ref\" && RULES.all[key]) return true\n  return false\n}\n\nexport function schemaRefOrVal(\n  {topSchemaRef, schemaPath}: SchemaObjCxt,\n  schema: unknown,\n  keyword: string,\n  $data?: string | false\n): Code | number | boolean {\n  if (!$data) {\n    if (typeof schema == \"number\" || typeof schema == \"boolean\") return schema\n    if (typeof schema == \"string\") return _`${schema}`\n  }\n  return _`${topSchemaRef}${schemaPath}${getProperty(keyword)}`\n}\n\nexport function unescapeFragment(str: string): string {\n  return unescapeJsonPointer(decodeURIComponent(str))\n}\n\nexport function escapeFragment(str: string | number): string {\n  return encodeURIComponent(escapeJsonPointer(str))\n}\n\nexport function escapeJsonPointer(str: string | number): string {\n  if (typeof str == \"number\") return `${str}`\n  return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")\n}\n\nexport function unescapeJsonPointer(str: string): string {\n  return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\nexport function eachItem<T>(xs: T | T[], f: (x: T) => void): void {\n  if (Array.isArray(xs)) {\n    for (const x of xs) f(x)\n  } else {\n    f(xs)\n  }\n}\n\ntype SomeEvaluated = EvaluatedProperties | EvaluatedItems\n\ntype MergeEvaluatedFunc<T extends SomeEvaluated> = (\n  gen: CodeGen,\n  from: Name | T,\n  to: Name | Exclude<T, true> | undefined,\n  toName?: typeof Name\n) => Name | T\n\ninterface MakeMergeFuncArgs<T extends SomeEvaluated> {\n  mergeNames: (gen: CodeGen, from: Name, to: Name) => void\n  mergeToName: (gen: CodeGen, from: T, to: Name) => void\n  mergeValues: (from: T, to: Exclude<T, true>) => T\n  resultToName: (gen: CodeGen, res?: T) => Name\n}\n\nfunction makeMergeEvaluated<T extends SomeEvaluated>({\n  mergeNames,\n  mergeToName,\n  mergeValues,\n  resultToName,\n}: MakeMergeFuncArgs<T>): MergeEvaluatedFunc<T> {\n  return (gen, from, to, toName) => {\n    const res =\n      to === undefined\n        ? from\n        : to instanceof Name\n        ? (from instanceof Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n        : from instanceof Name\n        ? (mergeToName(gen, to, from), from)\n        : mergeValues(from, to)\n    return toName === Name && !(res instanceof Name) ? resultToName(gen, res) : res\n  }\n}\n\ninterface MergeEvaluated {\n  props: MergeEvaluatedFunc<EvaluatedProperties>\n  items: MergeEvaluatedFunc<EvaluatedItems>\n}\n\nexport const mergeEvaluated: MergeEvaluated = {\n  props: makeMergeEvaluated({\n    mergeNames: (gen, from, to) =>\n      gen.if(_`${to} !== true && ${from} !== undefined`, () => {\n        gen.if(\n          _`${from} === true`,\n          () => gen.assign(to, true),\n          () => gen.assign(to, _`${to} || {}`).code(_`Object.assign(${to}, ${from})`)\n        )\n      }),\n    mergeToName: (gen, from, to) =>\n      gen.if(_`${to} !== true`, () => {\n        if (from === true) {\n          gen.assign(to, true)\n        } else {\n          gen.assign(to, _`${to} || {}`)\n          setEvaluated(gen, to, from)\n        }\n      }),\n    mergeValues: (from, to) => (from === true ? true : {...from, ...to}),\n    resultToName: evaluatedPropsToName,\n  }),\n  items: makeMergeEvaluated({\n    mergeNames: (gen, from, to) =>\n      gen.if(_`${to} !== true && ${from} !== undefined`, () =>\n        gen.assign(to, _`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)\n      ),\n    mergeToName: (gen, from, to) =>\n      gen.if(_`${to} !== true`, () =>\n        gen.assign(to, from === true ? true : _`${to} > ${from} ? ${to} : ${from}`)\n      ),\n    mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n    resultToName: (gen, items) => gen.var(\"items\", items),\n  }),\n}\n\nexport function evaluatedPropsToName(gen: CodeGen, ps?: EvaluatedProperties): Name {\n  if (ps === true) return gen.var(\"props\", true)\n  const props = gen.var(\"props\", _`{}`)\n  if (ps !== undefined) setEvaluated(gen, props, ps)\n  return props\n}\n\nexport function setEvaluated(gen: CodeGen, props: Name, ps: {[K in string]?: true}): void {\n  Object.keys(ps).forEach((p) => gen.assign(_`${props}${getProperty(p)}`, true))\n}\n\nconst snippets: {[S in string]?: _Code} = {}\n\nexport function useFunc(gen: CodeGen, f: {code: string}): Name {\n  return gen.scopeValue(\"func\", {\n    ref: f,\n    code: snippets[f.code] || (snippets[f.code] = new _Code(f.code)),\n  })\n}\n\nexport enum Type {\n  Num,\n  Str,\n}\n\nexport function getErrorPath(\n  dataProp: Name | string | number,\n  dataPropType?: Type,\n  jsPropertySyntax?: boolean\n): Code | string {\n  // let path\n  if (dataProp instanceof Name) {\n    const isNumber = dataPropType === Type.Num\n    return jsPropertySyntax\n      ? isNumber\n        ? _`\"[\" + ${dataProp} + \"]\"`\n        : _`\"['\" + ${dataProp} + \"']\"`\n      : isNumber\n      ? _`\"/\" + ${dataProp}`\n      : _`\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")` // TODO maybe use global escapePointer\n  }\n  return jsPropertySyntax ? getProperty(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp)\n}\n\nexport function checkStrictMode(\n  it: SchemaCxt,\n  msg: string,\n  mode: boolean | \"log\" = it.opts.strictSchema\n): void {\n  if (!mode) return\n  msg = `strict mode: ${msg}`\n  if (mode === true) throw new Error(msg)\n  it.self.logger.warn(msg)\n}\n", "import {Name} from \"./codegen\"\n\nconst names = {\n  // validation function arguments\n  data: new Name(\"data\"), // data passed to validation function\n  // args passed from referencing schema\n  valCxt: new Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n  instancePath: new Name(\"instancePath\"),\n  parentData: new Name(\"parentData\"),\n  parentDataProperty: new Name(\"parentDataProperty\"),\n  rootData: new Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n  dynamicAnchors: new Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n  // function scoped variables\n  vErrors: new Name(\"vErrors\"), // null or array of validation errors\n  errors: new Name(\"errors\"), // counter of validation errors\n  this: new Name(\"this\"),\n  // \"globals\"\n  self: new Name(\"self\"),\n  scope: new Name(\"scope\"),\n  // JTD serialize/parse name for JSON string and position\n  json: new Name(\"json\"),\n  jsonPos: new Name(\"jsonPos\"),\n  jsonLen: new Name(\"jsonLen\"),\n  jsonPart: new Name(\"jsonPart\"),\n}\n\nexport default names\n", "import type {KeywordErrorCxt, KeywordErrorDefinition} from \"../types\"\nimport type {SchemaCxt} from \"./index\"\nimport {CodeGen, _, str, strConcat, Code, Name} from \"./codegen\"\nimport {SafeExpr} from \"./codegen/code\"\nimport {getErrorPath, Type} from \"./util\"\nimport N from \"./names\"\n\nexport const keywordError: KeywordErrorDefinition = {\n  message: ({keyword}) => str`must pass \"${keyword}\" keyword validation`,\n}\n\nexport const keyword$DataError: KeywordErrorDefinition = {\n  message: ({keyword, schemaType}) =>\n    schemaType\n      ? str`\"${keyword}\" keyword must be ${schemaType} ($data)`\n      : str`\"${keyword}\" keyword is invalid ($data)`,\n}\n\nexport interface ErrorPaths {\n  instancePath?: Code\n  schemaPath?: string\n  parentSchema?: boolean\n}\n\nexport function reportError(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition = keywordError,\n  errorPaths?: ErrorPaths,\n  overrideAllErrors?: boolean\n): void {\n  const {it} = cxt\n  const {gen, compositeRule, allErrors} = it\n  const errObj = errorObjectCode(cxt, error, errorPaths)\n  if (overrideAllErrors ?? (compositeRule || allErrors)) {\n    addError(gen, errObj)\n  } else {\n    returnErrors(it, _`[${errObj}]`)\n  }\n}\n\nexport function reportExtraError(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition = keywordError,\n  errorPaths?: ErrorPaths\n): void {\n  const {it} = cxt\n  const {gen, compositeRule, allErrors} = it\n  const errObj = errorObjectCode(cxt, error, errorPaths)\n  addError(gen, errObj)\n  if (!(compositeRule || allErrors)) {\n    returnErrors(it, N.vErrors)\n  }\n}\n\nexport function resetErrorsCount(gen: CodeGen, errsCount: Name): void {\n  gen.assign(N.errors, errsCount)\n  gen.if(_`${N.vErrors} !== null`, () =>\n    gen.if(\n      errsCount,\n      () => gen.assign(_`${N.vErrors}.length`, errsCount),\n      () => gen.assign(N.vErrors, null)\n    )\n  )\n}\n\nexport function extendErrors({\n  gen,\n  keyword,\n  schemaValue,\n  data,\n  errsCount,\n  it,\n}: KeywordErrorCxt): void {\n  /* istanbul ignore if */\n  if (errsCount === undefined) throw new Error(\"ajv implementation error\")\n  const err = gen.name(\"err\")\n  gen.forRange(\"i\", errsCount, N.errors, (i) => {\n    gen.const(err, _`${N.vErrors}[${i}]`)\n    gen.if(_`${err}.instancePath === undefined`, () =>\n      gen.assign(_`${err}.instancePath`, strConcat(N.instancePath, it.errorPath))\n    )\n    gen.assign(_`${err}.schemaPath`, str`${it.errSchemaPath}/${keyword}`)\n    if (it.opts.verbose) {\n      gen.assign(_`${err}.schema`, schemaValue)\n      gen.assign(_`${err}.data`, data)\n    }\n  })\n}\n\nfunction addError(gen: CodeGen, errObj: Code): void {\n  const err = gen.const(\"err\", errObj)\n  gen.if(\n    _`${N.vErrors} === null`,\n    () => gen.assign(N.vErrors, _`[${err}]`),\n    _`${N.vErrors}.push(${err})`\n  )\n  gen.code(_`${N.errors}++`)\n}\n\nfunction returnErrors(it: SchemaCxt, errs: Code): void {\n  const {gen, validateName, schemaEnv} = it\n  if (schemaEnv.$async) {\n    gen.throw(_`new ${it.ValidationError as Name}(${errs})`)\n  } else {\n    gen.assign(_`${validateName}.errors`, errs)\n    gen.return(false)\n  }\n}\n\nconst E = {\n  keyword: new Name(\"keyword\"),\n  schemaPath: new Name(\"schemaPath\"), // also used in JTD errors\n  params: new Name(\"params\"),\n  propertyName: new Name(\"propertyName\"),\n  message: new Name(\"message\"),\n  schema: new Name(\"schema\"),\n  parentSchema: new Name(\"parentSchema\"),\n}\n\nfunction errorObjectCode(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition,\n  errorPaths?: ErrorPaths\n): Code {\n  const {createErrors} = cxt.it\n  if (createErrors === false) return _`{}`\n  return errorObject(cxt, error, errorPaths)\n}\n\nfunction errorObject(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition,\n  errorPaths: ErrorPaths = {}\n): Code {\n  const {gen, it} = cxt\n  const keyValues: [Name, SafeExpr | string][] = [\n    errorInstancePath(it, errorPaths),\n    errorSchemaPath(cxt, errorPaths),\n  ]\n  extraErrorProps(cxt, error, keyValues)\n  return gen.object(...keyValues)\n}\n\nfunction errorInstancePath({errorPath}: SchemaCxt, {instancePath}: ErrorPaths): [Name, Code] {\n  const instPath = instancePath\n    ? str`${errorPath}${getErrorPath(instancePath, Type.Str)}`\n    : errorPath\n  return [N.instancePath, strConcat(N.instancePath, instPath)]\n}\n\nfunction errorSchemaPath(\n  {keyword, it: {errSchemaPath}}: KeywordErrorCxt,\n  {schemaPath, parentSchema}: ErrorPaths\n): [Name, string | Code] {\n  let schPath = parentSchema ? errSchemaPath : str`${errSchemaPath}/${keyword}`\n  if (schemaPath) {\n    schPath = str`${schPath}${getErrorPath(schemaPath, Type.Str)}`\n  }\n  return [E.schemaPath, schPath]\n}\n\nfunction extraErrorProps(\n  cxt: KeywordErrorCxt,\n  {params, message}: KeywordErrorDefinition,\n  keyValues: [Name, SafeExpr | string][]\n): void {\n  const {keyword, data, schemaValue, it} = cxt\n  const {opts, propertyName, topSchemaRef, schemaPath} = it\n  keyValues.push(\n    [E.keyword, keyword],\n    [E.params, typeof params == \"function\" ? params(cxt) : params || _`{}`]\n  )\n  if (opts.messages) {\n    keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message])\n  }\n  if (opts.verbose) {\n    keyValues.push(\n      [E.schema, schemaValue],\n      [E.parentSchema, _`${topSchemaRef}${schemaPath}`],\n      [N.data, data]\n    )\n  }\n  if (propertyName) keyValues.push([E.propertyName, propertyName])\n}\n", "import type {KeywordErrorDefinition, KeywordErrorCxt} from \"../../types\"\nimport type {SchemaCxt} from \"..\"\nimport {reportError} from \"../errors\"\nimport {_, Name} from \"../codegen\"\nimport N from \"../names\"\n\nconst boolError: KeywordErrorDefinition = {\n  message: \"boolean schema is false\",\n}\n\nexport function topBoolOrEmptySchema(it: SchemaCxt): void {\n  const {gen, schema, validateName} = it\n  if (schema === false) {\n    falseSchemaError(it, false)\n  } else if (typeof schema == \"object\" && schema.$async === true) {\n    gen.return(N.data)\n  } else {\n    gen.assign(_`${validateName}.errors`, null)\n    gen.return(true)\n  }\n}\n\nexport function boolOrEmptySchema(it: SchemaCxt, valid: Name): void {\n  const {gen, schema} = it\n  if (schema === false) {\n    gen.var(valid, false) // TODO var\n    falseSchemaError(it)\n  } else {\n    gen.var(valid, true) // TODO var\n  }\n}\n\nfunction falseSchemaError(it: SchemaCxt, overrideAllErrors?: boolean): void {\n  const {gen, data} = it\n  // TODO maybe some other interface should be used for non-keyword validation errors...\n  const cxt: KeywordErrorCxt = {\n    gen,\n    keyword: \"false schema\",\n    data,\n    schema: false,\n    schemaCode: false,\n    schemaValue: false,\n    params: {},\n    it,\n  }\n  reportError(cxt, boolError, undefined, overrideAllErrors)\n}\n", "import type {AddedKeywordDefinition} from \"../types\"\n\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"] as const\n\nexport type JSONType = (typeof _jsonTypes)[number]\n\nconst jsonTypes: Set<string> = new Set(_jsonTypes)\n\nexport function isJSONType(x: unknown): x is JSONType {\n  return typeof x == \"string\" && jsonTypes.has(x)\n}\n\ntype ValidationTypes = {\n  [K in JSONType]: boolean | RuleGroup | undefined\n}\n\nexport interface ValidationRules {\n  rules: RuleGroup[]\n  post: RuleGroup\n  all: {[Key in string]?: boolean | Rule} // rules that have to be validated\n  keywords: {[Key in string]?: boolean} // all known keywords (superset of \"all\")\n  types: ValidationTypes\n}\n\nexport interface RuleGroup {\n  type?: JSONType\n  rules: Rule[]\n}\n\n// This interface wraps KeywordDefinition because definition can have multiple keywords\nexport interface Rule {\n  keyword: string\n  definition: AddedKeywordDefinition\n}\n\nexport function getRules(): ValidationRules {\n  const groups: Record<\"number\" | \"string\" | \"array\" | \"object\", RuleGroup> = {\n    number: {type: \"number\", rules: []},\n    string: {type: \"string\", rules: []},\n    array: {type: \"array\", rules: []},\n    object: {type: \"object\", rules: []},\n  }\n  return {\n    types: {...groups, integer: true, boolean: true, null: true},\n    rules: [{rules: []}, groups.number, groups.string, groups.array, groups.object],\n    post: {rules: []},\n    all: {},\n    keywords: {},\n  }\n}\n", "import type {AnySchemaObject} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport type {JSONType, RuleGroup, Rule} from \"../rules\"\n\nexport function schemaHasRulesForType(\n  {schema, self}: SchemaObjCxt,\n  type: JSONType\n): boolean | undefined {\n  const group = self.RULES.types[type]\n  return group && group !== true && shouldUseGroup(schema, group)\n}\n\nexport function shouldUseGroup(schema: AnySchemaObject, group: RuleGroup): boolean {\n  return group.rules.some((rule) => shouldUseRule(schema, rule))\n}\n\nexport function shouldUseRule(schema: AnySchemaObject, rule: Rule): boolean | undefined {\n  return (\n    schema[rule.keyword] !== undefined ||\n    rule.definition.implements?.some((kwd) => schema[kwd] !== undefined)\n  )\n}\n", "import type {\n  KeywordErrorDefinition,\n  KeywordErrorCxt,\n  ErrorObject,\n  AnySchemaObject,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {isJSONType, JSONType} from \"../rules\"\nimport {schemaHasRulesForType} from \"./applicability\"\nimport {reportError} from \"../errors\"\nimport {_, nil, and, not, operators, Code, Name} from \"../codegen\"\nimport {toHash, schemaRefOrVal} from \"../util\"\n\nexport enum DataType {\n  Correct,\n  Wrong,\n}\n\nexport function getSchemaTypes(schema: AnySchemaObject): JSONType[] {\n  const types = getJSONTypes(schema.type)\n  const hasNull = types.includes(\"null\")\n  if (hasNull) {\n    if (schema.nullable === false) throw new Error(\"type: null contradicts nullable: false\")\n  } else {\n    if (!types.length && schema.nullable !== undefined) {\n      throw new Error('\"nullable\" cannot be used without \"type\"')\n    }\n    if (schema.nullable === true) types.push(\"null\")\n  }\n  return types\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport function getJSONTypes(ts: unknown | unknown[]): JSONType[] {\n  const types: unknown[] = Array.isArray(ts) ? ts : ts ? [ts] : []\n  if (types.every(isJSONType)) return types\n  throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"))\n}\n\nexport function coerceAndCheckDataType(it: SchemaObjCxt, types: JSONType[]): boolean {\n  const {gen, data, opts} = it\n  const coerceTo = coerceToTypes(types, opts.coerceTypes)\n  const checkTypes =\n    types.length > 0 &&\n    !(coerceTo.length === 0 && types.length === 1 && schemaHasRulesForType(it, types[0]))\n  if (checkTypes) {\n    const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong)\n    gen.if(wrongType, () => {\n      if (coerceTo.length) coerceData(it, types, coerceTo)\n      else reportTypeError(it)\n    })\n  }\n  return checkTypes\n}\n\nconst COERCIBLE: Set<JSONType> = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"])\nfunction coerceToTypes(types: JSONType[], coerceTypes?: boolean | \"array\"): JSONType[] {\n  return coerceTypes\n    ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n    : []\n}\n\nfunction coerceData(it: SchemaObjCxt, types: JSONType[], coerceTo: JSONType[]): void {\n  const {gen, data, opts} = it\n  const dataType = gen.let(\"dataType\", _`typeof ${data}`)\n  const coerced = gen.let(\"coerced\", _`undefined`)\n  if (opts.coerceTypes === \"array\") {\n    gen.if(_`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () =>\n      gen\n        .assign(data, _`${data}[0]`)\n        .assign(dataType, _`typeof ${data}`)\n        .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))\n    )\n  }\n  gen.if(_`${coerced} !== undefined`)\n  for (const t of coerceTo) {\n    if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n      coerceSpecificType(t)\n    }\n  }\n  gen.else()\n  reportTypeError(it)\n  gen.endIf()\n\n  gen.if(_`${coerced} !== undefined`, () => {\n    gen.assign(data, coerced)\n    assignParentData(it, coerced)\n  })\n\n  function coerceSpecificType(t: string): void {\n    switch (t) {\n      case \"string\":\n        gen\n          .elseIf(_`${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n          .assign(coerced, _`\"\" + ${data}`)\n          .elseIf(_`${data} === null`)\n          .assign(coerced, _`\"\"`)\n        return\n      case \"number\":\n        gen\n          .elseIf(\n            _`${dataType} == \"boolean\" || ${data} === null\n              || (${dataType} == \"string\" && ${data} && ${data} == +${data})`\n          )\n          .assign(coerced, _`+${data}`)\n        return\n      case \"integer\":\n        gen\n          .elseIf(\n            _`${dataType} === \"boolean\" || ${data} === null\n              || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`\n          )\n          .assign(coerced, _`+${data}`)\n        return\n      case \"boolean\":\n        gen\n          .elseIf(_`${data} === \"false\" || ${data} === 0 || ${data} === null`)\n          .assign(coerced, false)\n          .elseIf(_`${data} === \"true\" || ${data} === 1`)\n          .assign(coerced, true)\n        return\n      case \"null\":\n        gen.elseIf(_`${data} === \"\" || ${data} === 0 || ${data} === false`)\n        gen.assign(coerced, null)\n        return\n\n      case \"array\":\n        gen\n          .elseIf(\n            _`${dataType} === \"string\" || ${dataType} === \"number\"\n              || ${dataType} === \"boolean\" || ${data} === null`\n          )\n          .assign(coerced, _`[${data}]`)\n    }\n  }\n}\n\nfunction assignParentData({gen, parentData, parentDataProperty}: SchemaObjCxt, expr: Name): void {\n  // TODO use gen.property\n  gen.if(_`${parentData} !== undefined`, () =>\n    gen.assign(_`${parentData}[${parentDataProperty}]`, expr)\n  )\n}\n\nexport function checkDataType(\n  dataType: JSONType,\n  data: Name,\n  strictNums?: boolean | \"log\",\n  correct = DataType.Correct\n): Code {\n  const EQ = correct === DataType.Correct ? operators.EQ : operators.NEQ\n  let cond: Code\n  switch (dataType) {\n    case \"null\":\n      return _`${data} ${EQ} null`\n    case \"array\":\n      cond = _`Array.isArray(${data})`\n      break\n    case \"object\":\n      cond = _`${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`\n      break\n    case \"integer\":\n      cond = numCond(_`!(${data} % 1) && !isNaN(${data})`)\n      break\n    case \"number\":\n      cond = numCond()\n      break\n    default:\n      return _`typeof ${data} ${EQ} ${dataType}`\n  }\n  return correct === DataType.Correct ? cond : not(cond)\n\n  function numCond(_cond: Code = nil): Code {\n    return and(_`typeof ${data} == \"number\"`, _cond, strictNums ? _`isFinite(${data})` : nil)\n  }\n}\n\nexport function checkDataTypes(\n  dataTypes: JSONType[],\n  data: Name,\n  strictNums?: boolean | \"log\",\n  correct?: DataType\n): Code {\n  if (dataTypes.length === 1) {\n    return checkDataType(dataTypes[0], data, strictNums, correct)\n  }\n  let cond: Code\n  const types = toHash(dataTypes)\n  if (types.array && types.object) {\n    const notObj = _`typeof ${data} != \"object\"`\n    cond = types.null ? notObj : _`!${data} || ${notObj}`\n    delete types.null\n    delete types.array\n    delete types.object\n  } else {\n    cond = nil\n  }\n  if (types.number) delete types.integer\n  for (const t in types) cond = and(cond, checkDataType(t as JSONType, data, strictNums, correct))\n  return cond\n}\n\nexport type TypeError = ErrorObject<\"type\", {type: string}>\n\nconst typeError: KeywordErrorDefinition = {\n  message: ({schema}) => `must be ${schema}`,\n  params: ({schema, schemaValue}) =>\n    typeof schema == \"string\" ? _`{type: ${schema}}` : _`{type: ${schemaValue}}`,\n}\n\nexport function reportTypeError(it: SchemaObjCxt): void {\n  const cxt = getTypeErrorContext(it)\n  reportError(cxt, typeError)\n}\n\nfunction getTypeErrorContext(it: SchemaObjCxt): KeywordErrorCxt {\n  const {gen, data, schema} = it\n  const schemaCode = schemaRefOrVal(it, schema, \"type\")\n  return {\n    gen,\n    keyword: \"type\",\n    data,\n    schema: schema.type,\n    schemaCode,\n    schemaValue: schemaCode,\n    parentSchema: schema,\n    params: {},\n    it,\n  }\n}\n", "import type {SchemaObjCxt} from \"..\"\nimport {_, getProperty, stringify} from \"../codegen\"\nimport {checkStrictMode} from \"../util\"\n\nexport function assignDefaults(it: SchemaObjCxt, ty?: string): void {\n  const {properties, items} = it.schema\n  if (ty === \"object\" && properties) {\n    for (const key in properties) {\n      assignDefault(it, key, properties[key].default)\n    }\n  } else if (ty === \"array\" && Array.isArray(items)) {\n    items.forEach((sch, i: number) => assignDefault(it, i, sch.default))\n  }\n}\n\nfunction assignDefault(it: SchemaObjCxt, prop: string | number, defaultValue: unknown): void {\n  const {gen, compositeRule, data, opts} = it\n  if (defaultValue === undefined) return\n  const childData = _`${data}${getProperty(prop)}`\n  if (compositeRule) {\n    checkStrictMode(it, `default is ignored for: ${childData}`)\n    return\n  }\n\n  let condition = _`${childData} === undefined`\n  if (opts.useDefaults === \"empty\") {\n    condition = _`${condition} || ${childData} === null || ${childData} === \"\"`\n  }\n  // `${childData} === undefined` +\n  // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n  gen.if(condition, _`${childData} = ${stringify(defaultValue)}`)\n}\n", "import type {AnySchema, SchemaMap} from \"../types\"\nimport type {SchemaCxt} from \"../compile\"\nimport type {KeywordCxt} from \"../compile/validate\"\nimport {CodeGen, _, and, or, not, nil, strConcat, getProperty, Code, Name} from \"../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../compile/util\"\nimport N from \"../compile/names\"\nimport {useFunc} from \"../compile/util\"\nexport function checkReportMissingProp(cxt: KeywordCxt, prop: string): void {\n  const {gen, data, it} = cxt\n  gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n    cxt.setParams({missingProperty: _`${prop}`}, true)\n    cxt.error()\n  })\n}\n\nexport function checkMissingProp(\n  {gen, data, it: {opts}}: KeywordCxt,\n  properties: string[],\n  missing: Name\n): Code {\n  return or(\n    ...properties.map((prop) =>\n      and(noPropertyInData(gen, data, prop, opts.ownProperties), _`${missing} = ${prop}`)\n    )\n  )\n}\n\nexport function reportMissingProp(cxt: KeywordCxt, missing: Name): void {\n  cxt.setParams({missingProperty: missing}, true)\n  cxt.error()\n}\n\nexport function hasPropFunc(gen: CodeGen): Name {\n  return gen.scopeValue(\"func\", {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    ref: Object.prototype.hasOwnProperty,\n    code: _`Object.prototype.hasOwnProperty`,\n  })\n}\n\nexport function isOwnProperty(gen: CodeGen, data: Name, property: Name | string): Code {\n  return _`${hasPropFunc(gen)}.call(${data}, ${property})`\n}\n\nexport function propertyInData(\n  gen: CodeGen,\n  data: Name,\n  property: Name | string,\n  ownProperties?: boolean\n): Code {\n  const cond = _`${data}${getProperty(property)} !== undefined`\n  return ownProperties ? _`${cond} && ${isOwnProperty(gen, data, property)}` : cond\n}\n\nexport function noPropertyInData(\n  gen: CodeGen,\n  data: Name,\n  property: Name | string,\n  ownProperties?: boolean\n): Code {\n  const cond = _`${data}${getProperty(property)} === undefined`\n  return ownProperties ? or(cond, not(isOwnProperty(gen, data, property))) : cond\n}\n\nexport function allSchemaProperties(schemaMap?: SchemaMap): string[] {\n  return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : []\n}\n\nexport function schemaProperties(it: SchemaCxt, schemaMap: SchemaMap): string[] {\n  return allSchemaProperties(schemaMap).filter(\n    (p) => !alwaysValidSchema(it, schemaMap[p] as AnySchema)\n  )\n}\n\nexport function callValidateCode(\n  {schemaCode, data, it: {gen, topSchemaRef, schemaPath, errorPath}, it}: KeywordCxt,\n  func: Code,\n  context: Code,\n  passSchema?: boolean\n): Code {\n  const dataAndSchema = passSchema ? _`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data\n  const valCxt: [Name, Code | number][] = [\n    [N.instancePath, strConcat(N.instancePath, errorPath)],\n    [N.parentData, it.parentData],\n    [N.parentDataProperty, it.parentDataProperty],\n    [N.rootData, N.rootData],\n  ]\n  if (it.opts.dynamicRef) valCxt.push([N.dynamicAnchors, N.dynamicAnchors])\n  const args = _`${dataAndSchema}, ${gen.object(...valCxt)}`\n  return context !== nil ? _`${func}.call(${context}, ${args})` : _`${func}(${args})`\n}\n\nconst newRegExp = _`new RegExp`\n\nexport function usePattern({gen, it: {opts}}: KeywordCxt, pattern: string): Name {\n  const u = opts.unicodeRegExp ? \"u\" : \"\"\n  const {regExp} = opts.code\n  const rx = regExp(pattern, u)\n\n  return gen.scopeValue(\"pattern\", {\n    key: rx.toString(),\n    ref: rx,\n    code: _`${regExp.code === \"new RegExp\" ? newRegExp : useFunc(gen, regExp)}(${pattern}, ${u})`,\n  })\n}\n\nexport function validateArray(cxt: KeywordCxt): Name {\n  const {gen, data, keyword, it} = cxt\n  const valid = gen.name(\"valid\")\n  if (it.allErrors) {\n    const validArr = gen.let(\"valid\", true)\n    validateItems(() => gen.assign(validArr, false))\n    return validArr\n  }\n  gen.var(valid, true)\n  validateItems(() => gen.break())\n  return valid\n\n  function validateItems(notValid: () => void): void {\n    const len = gen.const(\"len\", _`${data}.length`)\n    gen.forRange(\"i\", 0, len, (i) => {\n      cxt.subschema(\n        {\n          keyword,\n          dataProp: i,\n          dataPropType: Type.Num,\n        },\n        valid\n      )\n      gen.if(not(valid), notValid)\n    })\n  }\n}\n\nexport function validateUnion(cxt: KeywordCxt): void {\n  const {gen, schema, keyword, it} = cxt\n  /* istanbul ignore if */\n  if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n  const alwaysValid = schema.some((sch: AnySchema) => alwaysValidSchema(it, sch))\n  if (alwaysValid && !it.opts.unevaluated) return\n\n  const valid = gen.let(\"valid\", false)\n  const schValid = gen.name(\"_valid\")\n\n  gen.block(() =>\n    schema.forEach((_sch: AnySchema, i: number) => {\n      const schCxt = cxt.subschema(\n        {\n          keyword,\n          schemaProp: i,\n          compositeRule: true,\n        },\n        schValid\n      )\n      gen.assign(valid, _`${valid} || ${schValid}`)\n      const merged = cxt.mergeValidEvaluated(schCxt, schValid)\n      // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n      // or if all properties and items were evaluated (it.props === true && it.items === true)\n      if (!merged) gen.if(not(valid))\n    })\n  )\n\n  cxt.result(\n    valid,\n    () => cxt.reset(),\n    () => cxt.error(true)\n  )\n}\n", "import type {KeywordCxt} from \".\"\nimport type {\n  AnySchema,\n  SchemaValidateFunction,\n  AnyValidateFunction,\n  AddedKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, nil, not, stringify, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport type {JSONType} from \"../rules\"\nimport {callValidateCode} from \"../../vocabularies/code\"\nimport {extendErrors} from \"../errors\"\n\ntype KeywordCompilationResult = AnySchema | SchemaValidateFunction | AnyValidateFunction\n\nexport function macroKeywordCode(cxt: KeywordCxt, def: MacroKeywordDefinition): void {\n  const {gen, keyword, schema, parentSchema, it} = cxt\n  const macroSchema = def.macro.call(it.self, schema, parentSchema, it)\n  const schemaRef = useKeyword(gen, keyword, macroSchema)\n  if (it.opts.validateSchema !== false) it.self.validateSchema(macroSchema, true)\n\n  const valid = gen.name(\"valid\")\n  cxt.subschema(\n    {\n      schema: macroSchema,\n      schemaPath: nil,\n      errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n      topSchemaRef: schemaRef,\n      compositeRule: true,\n    },\n    valid\n  )\n  cxt.pass(valid, () => cxt.error(true))\n}\n\nexport function funcKeywordCode(cxt: KeywordCxt, def: FuncKeywordDefinition): void {\n  const {gen, keyword, schema, parentSchema, $data, it} = cxt\n  checkAsyncKeyword(it, def)\n  const validate =\n    !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate\n  const validateRef = useKeyword(gen, keyword, validate)\n  const valid = gen.let(\"valid\")\n  cxt.block$data(valid, validateKeyword)\n  cxt.ok(def.valid ?? valid)\n\n  function validateKeyword(): void {\n    if (def.errors === false) {\n      assignValid()\n      if (def.modifying) modifyData(cxt)\n      reportErrs(() => cxt.error())\n    } else {\n      const ruleErrs = def.async ? validateAsync() : validateSync()\n      if (def.modifying) modifyData(cxt)\n      reportErrs(() => addErrs(cxt, ruleErrs))\n    }\n  }\n\n  function validateAsync(): Name {\n    const ruleErrs = gen.let(\"ruleErrs\", null)\n    gen.try(\n      () => assignValid(_`await `),\n      (e) =>\n        gen.assign(valid, false).if(\n          _`${e} instanceof ${it.ValidationError as Name}`,\n          () => gen.assign(ruleErrs, _`${e}.errors`),\n          () => gen.throw(e)\n        )\n    )\n    return ruleErrs\n  }\n\n  function validateSync(): Code {\n    const validateErrs = _`${validateRef}.errors`\n    gen.assign(validateErrs, null)\n    assignValid(nil)\n    return validateErrs\n  }\n\n  function assignValid(_await: Code = def.async ? _`await ` : nil): void {\n    const passCxt = it.opts.passContext ? N.this : N.self\n    const passSchema = !((\"compile\" in def && !$data) || def.schema === false)\n    gen.assign(\n      valid,\n      _`${_await}${callValidateCode(cxt, validateRef, passCxt, passSchema)}`,\n      def.modifying\n    )\n  }\n\n  function reportErrs(errors: () => void): void {\n    gen.if(not(def.valid ?? valid), errors)\n  }\n}\n\nfunction modifyData(cxt: KeywordCxt): void {\n  const {gen, data, it} = cxt\n  gen.if(it.parentData, () => gen.assign(data, _`${it.parentData}[${it.parentDataProperty}]`))\n}\n\nfunction addErrs(cxt: KeywordCxt, errs: Code): void {\n  const {gen} = cxt\n  gen.if(\n    _`Array.isArray(${errs})`,\n    () => {\n      gen\n        .assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`)\n        .assign(N.errors, _`${N.vErrors}.length`)\n      extendErrors(cxt)\n    },\n    () => cxt.error()\n  )\n}\n\nfunction checkAsyncKeyword({schemaEnv}: SchemaObjCxt, def: FuncKeywordDefinition): void {\n  if (def.async && !schemaEnv.$async) throw new Error(\"async keyword in sync schema\")\n}\n\nfunction useKeyword(gen: CodeGen, keyword: string, result?: KeywordCompilationResult): Name {\n  if (result === undefined) throw new Error(`keyword \"${keyword}\" failed to compile`)\n  return gen.scopeValue(\n    \"keyword\",\n    typeof result == \"function\" ? {ref: result} : {ref: result, code: stringify(result)}\n  )\n}\n\nexport function validSchemaType(\n  schema: unknown,\n  schemaType: JSONType[],\n  allowUndefined = false\n): boolean {\n  // TODO add tests\n  return (\n    !schemaType.length ||\n    schemaType.some((st) =>\n      st === \"array\"\n        ? Array.isArray(schema)\n        : st === \"object\"\n        ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n        : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")\n    )\n  )\n}\n\nexport function validateKeywordUsage(\n  {schema, opts, self, errSchemaPath}: SchemaObjCxt,\n  def: AddedKeywordDefinition,\n  keyword: string\n): void {\n  /* istanbul ignore if */\n  if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n    throw new Error(\"ajv implementation error\")\n  }\n\n  const deps = def.dependencies\n  if (deps?.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n    throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`)\n  }\n\n  if (def.validateSchema) {\n    const valid = def.validateSchema(schema[keyword])\n    if (!valid) {\n      const msg =\n        `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n        self.errorsText(def.validateSchema.errors)\n      if (opts.validateSchema === \"log\") self.logger.error(msg)\n      else throw new Error(msg)\n    }\n  }\n}\n", "import type {AnySchema} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, str, getProperty, Code, Name} from \"../codegen\"\nimport {escapeFragment, getErrorPath, Type} from \"../util\"\nimport type {JSONType} from \"../rules\"\n\nexport interface SubschemaContext {\n  // TODO use Optional? align with SchemCxt property types\n  schema: AnySchema\n  schemaPath: Code\n  errSchemaPath: string\n  topSchemaRef?: Code\n  errorPath?: Code\n  dataLevel?: number\n  dataTypes?: JSONType[]\n  data?: Name\n  parentData?: Name\n  parentDataProperty?: Code | number\n  dataNames?: Name[]\n  dataPathArr?: (Code | number)[]\n  propertyName?: Name\n  jtdDiscriminator?: string\n  jtdMetadata?: boolean\n  compositeRule?: true\n  createErrors?: boolean\n  allErrors?: boolean\n}\n\nexport type SubschemaArgs = Partial<{\n  keyword: string\n  schemaProp: string | number\n  schema: AnySchema\n  schemaPath: Code\n  errSchemaPath: string\n  topSchemaRef: Code\n  data: Name | Code\n  dataProp: Code | string | number\n  dataTypes: JSONType[]\n  definedProperties: Set<string>\n  propertyName: Name\n  dataPropType: Type\n  jtdDiscriminator: string\n  jtdMetadata: boolean\n  compositeRule: true\n  createErrors: boolean\n  allErrors: boolean\n}>\n\nexport function getSubschema(\n  it: SchemaObjCxt,\n  {keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef}: SubschemaArgs\n): SubschemaContext {\n  if (keyword !== undefined && schema !== undefined) {\n    throw new Error('both \"keyword\" and \"schema\" passed, only one allowed')\n  }\n\n  if (keyword !== undefined) {\n    const sch = it.schema[keyword]\n    return schemaProp === undefined\n      ? {\n          schema: sch,\n          schemaPath: _`${it.schemaPath}${getProperty(keyword)}`,\n          errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n        }\n      : {\n          schema: sch[schemaProp],\n          schemaPath: _`${it.schemaPath}${getProperty(keyword)}${getProperty(schemaProp)}`,\n          errSchemaPath: `${it.errSchemaPath}/${keyword}/${escapeFragment(schemaProp)}`,\n        }\n  }\n\n  if (schema !== undefined) {\n    if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n      throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"')\n    }\n    return {\n      schema,\n      schemaPath,\n      topSchemaRef,\n      errSchemaPath,\n    }\n  }\n\n  throw new Error('either \"keyword\" or \"schema\" must be passed')\n}\n\nexport function extendSubschemaData(\n  subschema: SubschemaContext,\n  it: SchemaObjCxt,\n  {dataProp, dataPropType: dpType, data, dataTypes, propertyName}: SubschemaArgs\n): void {\n  if (data !== undefined && dataProp !== undefined) {\n    throw new Error('both \"data\" and \"dataProp\" passed, only one allowed')\n  }\n\n  const {gen} = it\n\n  if (dataProp !== undefined) {\n    const {errorPath, dataPathArr, opts} = it\n    const nextData = gen.let(\"data\", _`${it.data}${getProperty(dataProp)}`, true)\n    dataContextProps(nextData)\n    subschema.errorPath = str`${errorPath}${getErrorPath(dataProp, dpType, opts.jsPropertySyntax)}`\n    subschema.parentDataProperty = _`${dataProp}`\n    subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]\n  }\n\n  if (data !== undefined) {\n    const nextData = data instanceof Name ? data : gen.let(\"data\", data, true) // replaceable if used once?\n    dataContextProps(nextData)\n    if (propertyName !== undefined) subschema.propertyName = propertyName\n    // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n  }\n\n  if (dataTypes) subschema.dataTypes = dataTypes\n\n  function dataContextProps(_nextData: Name): void {\n    subschema.data = _nextData\n    subschema.dataLevel = it.dataLevel + 1\n    subschema.dataTypes = []\n    it.definedProperties = new Set<string>()\n    subschema.parentData = it.data\n    subschema.dataNames = [...it.dataNames, _nextData]\n  }\n}\n\nexport function extendSubschemaMode(\n  subschema: SubschemaContext,\n  {jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors}: SubschemaArgs\n): void {\n  if (compositeRule !== undefined) subschema.compositeRule = compositeRule\n  if (createErrors !== undefined) subschema.createErrors = createErrors\n  if (allErrors !== undefined) subschema.allErrors = allErrors\n  subschema.jtdDiscriminator = jtdDiscriminator // not inherited\n  subschema.jtdMetadata = jtdMetadata // not inherited\n}\n", "'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n", "'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n  // Legacy support for v0.3.1 and earlier.\n  if (typeof opts == 'function') {\n    cb = opts;\n    opts = {};\n  }\n\n  cb = opts.cb || cb;\n  var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n  var post = cb.post || function() {};\n\n  _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n  additionalItems: true,\n  items: true,\n  contains: true,\n  additionalProperties: true,\n  propertyNames: true,\n  not: true,\n  if: true,\n  then: true,\n  else: true\n};\n\ntraverse.arrayKeywords = {\n  items: true,\n  allOf: true,\n  anyOf: true,\n  oneOf: true\n};\n\ntraverse.propsKeywords = {\n  $defs: true,\n  definitions: true,\n  properties: true,\n  patternProperties: true,\n  dependencies: true\n};\n\ntraverse.skipKeywords = {\n  default: true,\n  enum: true,\n  const: true,\n  required: true,\n  maximum: true,\n  minimum: true,\n  exclusiveMaximum: true,\n  exclusiveMinimum: true,\n  multipleOf: true,\n  maxLength: true,\n  minLength: true,\n  pattern: true,\n  format: true,\n  maxItems: true,\n  minItems: true,\n  uniqueItems: true,\n  maxProperties: true,\n  minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n  if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n    pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n    for (var key in schema) {\n      var sch = schema[key];\n      if (Array.isArray(sch)) {\n        if (key in traverse.arrayKeywords) {\n          for (var i=0; i<sch.length; i++)\n            _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n        }\n      } else if (key in traverse.propsKeywords) {\n        if (sch && typeof sch == 'object') {\n          for (var prop in sch)\n            _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n        }\n      } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n        _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n      }\n    }\n    post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n  }\n}\n\n\nfunction escapeJsonPtr(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n", "import type {AnySchema, AnySchemaObject, UriResolver} from \"../types\"\nimport type Ajv from \"../ajv\"\nimport type {URIComponent} from \"fast-uri\"\nimport {eachItem} from \"./util\"\nimport * as equal from \"fast-deep-equal\"\nimport * as traverse from \"json-schema-traverse\"\n\n// the hash of local references inside the schema (created by getSchemaRefs), used for inline resolution\nexport type LocalRefs = {[Ref in string]?: AnySchemaObject}\n\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n  \"type\",\n  \"format\",\n  \"pattern\",\n  \"maxLength\",\n  \"minLength\",\n  \"maxProperties\",\n  \"minProperties\",\n  \"maxItems\",\n  \"minItems\",\n  \"maximum\",\n  \"minimum\",\n  \"uniqueItems\",\n  \"multipleOf\",\n  \"required\",\n  \"enum\",\n  \"const\",\n])\n\nexport function inlineRef(schema: AnySchema, limit: boolean | number = true): boolean {\n  if (typeof schema == \"boolean\") return true\n  if (limit === true) return !hasRef(schema)\n  if (!limit) return false\n  return countKeys(schema) <= limit\n}\n\nconst REF_KEYWORDS = new Set([\n  \"$ref\",\n  \"$recursiveRef\",\n  \"$recursiveAnchor\",\n  \"$dynamicRef\",\n  \"$dynamicAnchor\",\n])\n\nfunction hasRef(schema: AnySchemaObject): boolean {\n  for (const key in schema) {\n    if (REF_KEYWORDS.has(key)) return true\n    const sch = schema[key]\n    if (Array.isArray(sch) && sch.some(hasRef)) return true\n    if (typeof sch == \"object\" && hasRef(sch)) return true\n  }\n  return false\n}\n\nfunction countKeys(schema: AnySchemaObject): number {\n  let count = 0\n  for (const key in schema) {\n    if (key === \"$ref\") return Infinity\n    count++\n    if (SIMPLE_INLINED.has(key)) continue\n    if (typeof schema[key] == \"object\") {\n      eachItem(schema[key], (sch) => (count += countKeys(sch)))\n    }\n    if (count === Infinity) return Infinity\n  }\n  return count\n}\n\nexport function getFullPath(resolver: UriResolver, id = \"\", normalize?: boolean): string {\n  if (normalize !== false) id = normalizeId(id)\n  const p = resolver.parse(id)\n  return _getFullPath(resolver, p)\n}\n\nexport function _getFullPath(resolver: UriResolver, p: URIComponent): string {\n  const serialized = resolver.serialize(p)\n  return serialized.split(\"#\")[0] + \"#\"\n}\n\nconst TRAILING_SLASH_HASH = /#\\/?$/\nexport function normalizeId(id: string | undefined): string {\n  return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\"\n}\n\nexport function resolveUrl(resolver: UriResolver, baseId: string, id: string): string {\n  id = normalizeId(id)\n  return resolver.resolve(baseId, id)\n}\n\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i\n\nexport function getSchemaRefs(this: Ajv, schema: AnySchema, baseId: string): LocalRefs {\n  if (typeof schema == \"boolean\") return {}\n  const {schemaId, uriResolver} = this.opts\n  const schId = normalizeId(schema[schemaId] || baseId)\n  const baseIds: {[JsonPtr in string]?: string} = {\"\": schId}\n  const pathPrefix = getFullPath(uriResolver, schId, false)\n  const localRefs: LocalRefs = {}\n  const schemaRefs: Set<string> = new Set()\n\n  traverse(schema, {allKeys: true}, (sch, jsonPtr, _, parentJsonPtr) => {\n    if (parentJsonPtr === undefined) return\n    const fullPath = pathPrefix + jsonPtr\n    let innerBaseId = baseIds[parentJsonPtr]\n    if (typeof sch[schemaId] == \"string\") innerBaseId = addRef.call(this, sch[schemaId])\n    addAnchor.call(this, sch.$anchor)\n    addAnchor.call(this, sch.$dynamicAnchor)\n    baseIds[jsonPtr] = innerBaseId\n\n    function addRef(this: Ajv, ref: string): string {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      const _resolve = this.opts.uriResolver.resolve\n      ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref)\n      if (schemaRefs.has(ref)) throw ambiguos(ref)\n      schemaRefs.add(ref)\n      let schOrRef = this.refs[ref]\n      if (typeof schOrRef == \"string\") schOrRef = this.refs[schOrRef]\n      if (typeof schOrRef == \"object\") {\n        checkAmbiguosRef(sch, schOrRef.schema, ref)\n      } else if (ref !== normalizeId(fullPath)) {\n        if (ref[0] === \"#\") {\n          checkAmbiguosRef(sch, localRefs[ref], ref)\n          localRefs[ref] = sch\n        } else {\n          this.refs[ref] = fullPath\n        }\n      }\n      return ref\n    }\n\n    function addAnchor(this: Ajv, anchor: unknown): void {\n      if (typeof anchor == \"string\") {\n        if (!ANCHOR.test(anchor)) throw new Error(`invalid anchor \"${anchor}\"`)\n        addRef.call(this, `#${anchor}`)\n      }\n    }\n  })\n\n  return localRefs\n\n  function checkAmbiguosRef(sch1: AnySchema, sch2: AnySchema | undefined, ref: string): void {\n    if (sch2 !== undefined && !equal(sch1, sch2)) throw ambiguos(ref)\n  }\n\n  function ambiguos(ref: string): Error {\n    return new Error(`reference \"${ref}\" resolves to more than one schema`)\n  }\n}\n", "import type {\n  AddedKeywordDefinition,\n  AnySchema,\n  AnySchemaObject,\n  KeywordErrorCxt,\n  KeywordCxtParams,\n} from \"../../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \"..\"\nimport type {InstanceOptions} from \"../../core\"\nimport {boolOrEmptySchema, topBoolOrEmptySchema} from \"./boolSchema\"\nimport {coerceAndCheckDataType, getSchemaTypes} from \"./dataType\"\nimport {shouldUseGroup, shouldUseRule} from \"./applicability\"\nimport {checkDataType, checkDataTypes, reportTypeError, DataType} from \"./dataType\"\nimport {assignDefaults} from \"./defaults\"\nimport {funcKeywordCode, macroKeywordCode, validateKeywordUsage, validSchemaType} from \"./keyword\"\nimport {getSubschema, extendSubschemaData, SubschemaArgs, extendSubschemaMode} from \"./subschema\"\nimport {_, nil, str, or, not, getProperty, Block, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport {resolveUrl} from \"../resolve\"\nimport {\n  schemaRefOrVal,\n  schemaHasRulesButRef,\n  checkUnknownRules,\n  checkStrictMode,\n  unescapeJsonPointer,\n  mergeEvaluated,\n} from \"../util\"\nimport type {JSONType, Rule, RuleGroup} from \"../rules\"\nimport {\n  ErrorPaths,\n  reportError,\n  reportExtraError,\n  resetErrorsCount,\n  keyword$DataError,\n} from \"../errors\"\n\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nexport function validateFunctionCode(it: SchemaCxt): void {\n  if (isSchemaObj(it)) {\n    checkKeywords(it)\n    if (schemaCxtHasRules(it)) {\n      topSchemaObjCode(it)\n      return\n    }\n  }\n  validateFunction(it, () => topBoolOrEmptySchema(it))\n}\n\nfunction validateFunction(\n  {gen, validateName, schema, schemaEnv, opts}: SchemaCxt,\n  body: Block\n): void {\n  if (opts.code.es5) {\n    gen.func(validateName, _`${N.data}, ${N.valCxt}`, schemaEnv.$async, () => {\n      gen.code(_`\"use strict\"; ${funcSourceUrl(schema, opts)}`)\n      destructureValCxtES5(gen, opts)\n      gen.code(body)\n    })\n  } else {\n    gen.func(validateName, _`${N.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () =>\n      gen.code(funcSourceUrl(schema, opts)).code(body)\n    )\n  }\n}\n\nfunction destructureValCxt(opts: InstanceOptions): Code {\n  return _`{${N.instancePath}=\"\", ${N.parentData}, ${N.parentDataProperty}, ${N.rootData}=${\n    N.data\n  }${opts.dynamicRef ? _`, ${N.dynamicAnchors}={}` : nil}}={}`\n}\n\nfunction destructureValCxtES5(gen: CodeGen, opts: InstanceOptions): void {\n  gen.if(\n    N.valCxt,\n    () => {\n      gen.var(N.instancePath, _`${N.valCxt}.${N.instancePath}`)\n      gen.var(N.parentData, _`${N.valCxt}.${N.parentData}`)\n      gen.var(N.parentDataProperty, _`${N.valCxt}.${N.parentDataProperty}`)\n      gen.var(N.rootData, _`${N.valCxt}.${N.rootData}`)\n      if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`${N.valCxt}.${N.dynamicAnchors}`)\n    },\n    () => {\n      gen.var(N.instancePath, _`\"\"`)\n      gen.var(N.parentData, _`undefined`)\n      gen.var(N.parentDataProperty, _`undefined`)\n      gen.var(N.rootData, N.data)\n      if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`{}`)\n    }\n  )\n}\n\nfunction topSchemaObjCode(it: SchemaObjCxt): void {\n  const {schema, opts, gen} = it\n  validateFunction(it, () => {\n    if (opts.$comment && schema.$comment) commentKeyword(it)\n    checkNoDefault(it)\n    gen.let(N.vErrors, null)\n    gen.let(N.errors, 0)\n    if (opts.unevaluated) resetEvaluated(it)\n    typeAndKeywords(it)\n    returnResults(it)\n  })\n  return\n}\n\nfunction resetEvaluated(it: SchemaObjCxt): void {\n  // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n  const {gen, validateName} = it\n  it.evaluated = gen.const(\"evaluated\", _`${validateName}.evaluated`)\n  gen.if(_`${it.evaluated}.dynamicProps`, () => gen.assign(_`${it.evaluated}.props`, _`undefined`))\n  gen.if(_`${it.evaluated}.dynamicItems`, () => gen.assign(_`${it.evaluated}.items`, _`undefined`))\n}\n\nfunction funcSourceUrl(schema: AnySchema, opts: InstanceOptions): Code {\n  const schId = typeof schema == \"object\" && schema[opts.schemaId]\n  return schId && (opts.code.source || opts.code.process) ? _`/*# sourceURL=${schId} */` : nil\n}\n\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it: SchemaCxt, valid: Name): void {\n  if (isSchemaObj(it)) {\n    checkKeywords(it)\n    if (schemaCxtHasRules(it)) {\n      subSchemaObjCode(it, valid)\n      return\n    }\n  }\n  boolOrEmptySchema(it, valid)\n}\n\nfunction schemaCxtHasRules({schema, self}: SchemaCxt): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (self.RULES.all[key]) return true\n  return false\n}\n\nfunction isSchemaObj(it: SchemaCxt): it is SchemaObjCxt {\n  return typeof it.schema != \"boolean\"\n}\n\nfunction subSchemaObjCode(it: SchemaObjCxt, valid: Name): void {\n  const {schema, gen, opts} = it\n  if (opts.$comment && schema.$comment) commentKeyword(it)\n  updateContext(it)\n  checkAsyncSchema(it)\n  const errsCount = gen.const(\"_errs\", N.errors)\n  typeAndKeywords(it, errsCount)\n  // TODO var\n  gen.var(valid, _`${errsCount} === ${N.errors}`)\n}\n\nfunction checkKeywords(it: SchemaObjCxt): void {\n  checkUnknownRules(it)\n  checkRefsAndKeywords(it)\n}\n\nfunction typeAndKeywords(it: SchemaObjCxt, errsCount?: Name): void {\n  if (it.opts.jtd) return schemaKeywords(it, [], false, errsCount)\n  const types = getSchemaTypes(it.schema)\n  const checkedTypes = coerceAndCheckDataType(it, types)\n  schemaKeywords(it, types, !checkedTypes, errsCount)\n}\n\nfunction checkRefsAndKeywords(it: SchemaObjCxt): void {\n  const {schema, errSchemaPath, opts, self} = it\n  if (schema.$ref && opts.ignoreKeywordsWithRef && schemaHasRulesButRef(schema, self.RULES)) {\n    self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`)\n  }\n}\n\nfunction checkNoDefault(it: SchemaObjCxt): void {\n  const {schema, opts} = it\n  if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n    checkStrictMode(it, \"default is ignored in the schema root\")\n  }\n}\n\nfunction updateContext(it: SchemaObjCxt): void {\n  const schId = it.schema[it.opts.schemaId]\n  if (schId) it.baseId = resolveUrl(it.opts.uriResolver, it.baseId, schId)\n}\n\nfunction checkAsyncSchema(it: SchemaObjCxt): void {\n  if (it.schema.$async && !it.schemaEnv.$async) throw new Error(\"async schema in sync schema\")\n}\n\nfunction commentKeyword({gen, schemaEnv, schema, errSchemaPath, opts}: SchemaObjCxt): void {\n  const msg = schema.$comment\n  if (opts.$comment === true) {\n    gen.code(_`${N.self}.logger.log(${msg})`)\n  } else if (typeof opts.$comment == \"function\") {\n    const schemaPath = str`${errSchemaPath}/$comment`\n    const rootName = gen.scopeValue(\"root\", {ref: schemaEnv.root})\n    gen.code(_`${N.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`)\n  }\n}\n\nfunction returnResults(it: SchemaCxt): void {\n  const {gen, schemaEnv, validateName, ValidationError, opts} = it\n  if (schemaEnv.$async) {\n    // TODO assign unevaluated\n    gen.if(\n      _`${N.errors} === 0`,\n      () => gen.return(N.data),\n      () => gen.throw(_`new ${ValidationError as Name}(${N.vErrors})`)\n    )\n  } else {\n    gen.assign(_`${validateName}.errors`, N.vErrors)\n    if (opts.unevaluated) assignEvaluated(it)\n    gen.return(_`${N.errors} === 0`)\n  }\n}\n\nfunction assignEvaluated({gen, evaluated, props, items}: SchemaCxt): void {\n  if (props instanceof Name) gen.assign(_`${evaluated}.props`, props)\n  if (items instanceof Name) gen.assign(_`${evaluated}.items`, items)\n}\n\nfunction schemaKeywords(\n  it: SchemaObjCxt,\n  types: JSONType[],\n  typeErrors: boolean,\n  errsCount?: Name\n): void {\n  const {gen, schema, data, allErrors, opts, self} = it\n  const {RULES} = self\n  if (schema.$ref && (opts.ignoreKeywordsWithRef || !schemaHasRulesButRef(schema, RULES))) {\n    gen.block(() => keywordCode(it, \"$ref\", (RULES.all.$ref as Rule).definition)) // TODO typecast\n    return\n  }\n  if (!opts.jtd) checkStrictTypes(it, types)\n  gen.block(() => {\n    for (const group of RULES.rules) groupKeywords(group)\n    groupKeywords(RULES.post)\n  })\n\n  function groupKeywords(group: RuleGroup): void {\n    if (!shouldUseGroup(schema, group)) return\n    if (group.type) {\n      gen.if(checkDataType(group.type, data, opts.strictNumbers))\n      iterateKeywords(it, group)\n      if (types.length === 1 && types[0] === group.type && typeErrors) {\n        gen.else()\n        reportTypeError(it)\n      }\n      gen.endIf()\n    } else {\n      iterateKeywords(it, group)\n    }\n    // TODO make it \"ok\" call?\n    if (!allErrors) gen.if(_`${N.errors} === ${errsCount || 0}`)\n  }\n}\n\nfunction iterateKeywords(it: SchemaObjCxt, group: RuleGroup): void {\n  const {\n    gen,\n    schema,\n    opts: {useDefaults},\n  } = it\n  if (useDefaults) assignDefaults(it, group.type)\n  gen.block(() => {\n    for (const rule of group.rules) {\n      if (shouldUseRule(schema, rule)) {\n        keywordCode(it, rule.keyword, rule.definition, group.type)\n      }\n    }\n  })\n}\n\nfunction checkStrictTypes(it: SchemaObjCxt, types: JSONType[]): void {\n  if (it.schemaEnv.meta || !it.opts.strictTypes) return\n  checkContextTypes(it, types)\n  if (!it.opts.allowUnionTypes) checkMultipleTypes(it, types)\n  checkKeywordTypes(it, it.dataTypes)\n}\n\nfunction checkContextTypes(it: SchemaObjCxt, types: JSONType[]): void {\n  if (!types.length) return\n  if (!it.dataTypes.length) {\n    it.dataTypes = types\n    return\n  }\n  types.forEach((t) => {\n    if (!includesType(it.dataTypes, t)) {\n      strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`)\n    }\n  })\n  narrowSchemaTypes(it, types)\n}\n\nfunction checkMultipleTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n  if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n    strictTypesError(it, \"use allowUnionTypes to allow union type keyword\")\n  }\n}\n\nfunction checkKeywordTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n  const rules = it.self.RULES.all\n  for (const keyword in rules) {\n    const rule = rules[keyword]\n    if (typeof rule == \"object\" && shouldUseRule(it.schema, rule)) {\n      const {type} = rule.definition\n      if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n        strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`)\n      }\n    }\n  }\n}\n\nfunction hasApplicableType(schTs: JSONType[], kwdT: JSONType): boolean {\n  return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"))\n}\n\nfunction includesType(ts: JSONType[], t: JSONType): boolean {\n  return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"))\n}\n\nfunction narrowSchemaTypes(it: SchemaObjCxt, withTypes: JSONType[]): void {\n  const ts: JSONType[] = []\n  for (const t of it.dataTypes) {\n    if (includesType(withTypes, t)) ts.push(t)\n    else if (withTypes.includes(\"integer\") && t === \"number\") ts.push(\"integer\")\n  }\n  it.dataTypes = ts\n}\n\nfunction strictTypesError(it: SchemaObjCxt, msg: string): void {\n  const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n  msg += ` at \"${schemaPath}\" (strictTypes)`\n  checkStrictMode(it, msg, it.opts.strictTypes)\n}\n\nexport class KeywordCxt implements KeywordErrorCxt {\n  readonly gen: CodeGen\n  readonly allErrors?: boolean\n  readonly keyword: string\n  readonly data: Name // Name referencing the current level of the data instance\n  readonly $data?: string | false\n  schema: any // keyword value in the schema\n  readonly schemaValue: Code | number | boolean // Code reference to keyword schema value or primitive value\n  readonly schemaCode: Code | number | boolean // Code reference to resolved schema value (different if schema is $data)\n  readonly schemaType: JSONType[] // allowed type(s) of keyword value in the schema\n  readonly parentSchema: AnySchemaObject\n  readonly errsCount?: Name // Name reference to the number of validation errors collected before this keyword,\n  // requires option trackErrors in keyword definition\n  params: KeywordCxtParams // object to pass parameters to error messages from keyword code\n  readonly it: SchemaObjCxt // schema compilation context (schema is guaranteed to be an object, not boolean)\n  readonly def: AddedKeywordDefinition\n\n  constructor(it: SchemaObjCxt, def: AddedKeywordDefinition, keyword: string) {\n    validateKeywordUsage(it, def, keyword)\n    this.gen = it.gen\n    this.allErrors = it.allErrors\n    this.keyword = keyword\n    this.data = it.data\n    this.schema = it.schema[keyword]\n    this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data\n    this.schemaValue = schemaRefOrVal(it, this.schema, keyword, this.$data)\n    this.schemaType = def.schemaType\n    this.parentSchema = it.schema\n    this.params = {}\n    this.it = it\n    this.def = def\n\n    if (this.$data) {\n      this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it))\n    } else {\n      this.schemaCode = this.schemaValue\n      if (!validSchemaType(this.schema, def.schemaType, def.allowUndefined)) {\n        throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`)\n      }\n    }\n\n    if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n      this.errsCount = it.gen.const(\"_errs\", N.errors)\n    }\n  }\n\n  result(condition: Code, successAction?: () => void, failAction?: () => void): void {\n    this.failResult(not(condition), successAction, failAction)\n  }\n\n  failResult(condition: Code, successAction?: () => void, failAction?: () => void): void {\n    this.gen.if(condition)\n    if (failAction) failAction()\n    else this.error()\n    if (successAction) {\n      this.gen.else()\n      successAction()\n      if (this.allErrors) this.gen.endIf()\n    } else {\n      if (this.allErrors) this.gen.endIf()\n      else this.gen.else()\n    }\n  }\n\n  pass(condition: Code, failAction?: () => void): void {\n    this.failResult(not(condition), undefined, failAction)\n  }\n\n  fail(condition?: Code): void {\n    if (condition === undefined) {\n      this.error()\n      if (!this.allErrors) this.gen.if(false) // this branch will be removed by gen.optimize\n      return\n    }\n    this.gen.if(condition)\n    this.error()\n    if (this.allErrors) this.gen.endIf()\n    else this.gen.else()\n  }\n\n  fail$data(condition: Code): void {\n    if (!this.$data) return this.fail(condition)\n    const {schemaCode} = this\n    this.fail(_`${schemaCode} !== undefined && (${or(this.invalid$data(), condition)})`)\n  }\n\n  error(append?: boolean, errorParams?: KeywordCxtParams, errorPaths?: ErrorPaths): void {\n    if (errorParams) {\n      this.setParams(errorParams)\n      this._error(append, errorPaths)\n      this.setParams({})\n      return\n    }\n    this._error(append, errorPaths)\n  }\n\n  private _error(append?: boolean, errorPaths?: ErrorPaths): void {\n    ;(append ? reportExtraError : reportError)(this, this.def.error, errorPaths)\n  }\n\n  $dataError(): void {\n    reportError(this, this.def.$dataError || keyword$DataError)\n  }\n\n  reset(): void {\n    if (this.errsCount === undefined) throw new Error('add \"trackErrors\" to keyword definition')\n    resetErrorsCount(this.gen, this.errsCount)\n  }\n\n  ok(cond: Code | boolean): void {\n    if (!this.allErrors) this.gen.if(cond)\n  }\n\n  setParams(obj: KeywordCxtParams, assign?: true): void {\n    if (assign) Object.assign(this.params, obj)\n    else this.params = obj\n  }\n\n  block$data(valid: Name, codeBlock: () => void, $dataValid: Code = nil): void {\n    this.gen.block(() => {\n      this.check$data(valid, $dataValid)\n      codeBlock()\n    })\n  }\n\n  check$data(valid: Name = nil, $dataValid: Code = nil): void {\n    if (!this.$data) return\n    const {gen, schemaCode, schemaType, def} = this\n    gen.if(or(_`${schemaCode} === undefined`, $dataValid))\n    if (valid !== nil) gen.assign(valid, true)\n    if (schemaType.length || def.validateSchema) {\n      gen.elseIf(this.invalid$data())\n      this.$dataError()\n      if (valid !== nil) gen.assign(valid, false)\n    }\n    gen.else()\n  }\n\n  invalid$data(): Code {\n    const {gen, schemaCode, schemaType, def, it} = this\n    return or(wrong$DataType(), invalid$DataSchema())\n\n    function wrong$DataType(): Code {\n      if (schemaType.length) {\n        /* istanbul ignore if */\n        if (!(schemaCode instanceof Name)) throw new Error(\"ajv implementation error\")\n        const st = Array.isArray(schemaType) ? schemaType : [schemaType]\n        return _`${checkDataTypes(st, schemaCode, it.opts.strictNumbers, DataType.Wrong)}`\n      }\n      return nil\n    }\n\n    function invalid$DataSchema(): Code {\n      if (def.validateSchema) {\n        const validateSchemaRef = gen.scopeValue(\"validate$data\", {ref: def.validateSchema}) // TODO value.code for standalone\n        return _`!${validateSchemaRef}(${schemaCode})`\n      }\n      return nil\n    }\n  }\n\n  subschema(appl: SubschemaArgs, valid: Name): SchemaCxt {\n    const subschema = getSubschema(this.it, appl)\n    extendSubschemaData(subschema, this.it, appl)\n    extendSubschemaMode(subschema, appl)\n    const nextContext = {...this.it, ...subschema, items: undefined, props: undefined}\n    subschemaCode(nextContext, valid)\n    return nextContext\n  }\n\n  mergeEvaluated(schemaCxt: SchemaCxt, toName?: typeof Name): void {\n    const {it, gen} = this\n    if (!it.opts.unevaluated) return\n    if (it.props !== true && schemaCxt.props !== undefined) {\n      it.props = mergeEvaluated.props(gen, schemaCxt.props, it.props, toName)\n    }\n    if (it.items !== true && schemaCxt.items !== undefined) {\n      it.items = mergeEvaluated.items(gen, schemaCxt.items, it.items, toName)\n    }\n  }\n\n  mergeValidEvaluated(schemaCxt: SchemaCxt, valid: Name): boolean | void {\n    const {it, gen} = this\n    if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n      gen.if(valid, () => this.mergeEvaluated(schemaCxt, Name))\n      return true\n    }\n  }\n}\n\nfunction keywordCode(\n  it: SchemaObjCxt,\n  keyword: string,\n  def: AddedKeywordDefinition,\n  ruleType?: JSONType\n): void {\n  const cxt = new KeywordCxt(it, def, keyword)\n  if (\"code\" in def) {\n    def.code(cxt, ruleType)\n  } else if (cxt.$data && def.validate) {\n    funcKeywordCode(cxt, def)\n  } else if (\"macro\" in def) {\n    macroKeywordCode(cxt, def)\n  } else if (def.compile || def.validate) {\n    funcKeywordCode(cxt, def)\n  }\n}\n\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/\nexport function getData(\n  $data: string,\n  {dataLevel, dataNames, dataPathArr}: SchemaCxt\n): Code | number {\n  let jsonPointer\n  let data: Code\n  if ($data === \"\") return N.rootData\n  if ($data[0] === \"/\") {\n    if (!JSON_POINTER.test($data)) throw new Error(`Invalid JSON-pointer: ${$data}`)\n    jsonPointer = $data\n    data = N.rootData\n  } else {\n    const matches = RELATIVE_JSON_POINTER.exec($data)\n    if (!matches) throw new Error(`Invalid JSON-pointer: ${$data}`)\n    const up: number = +matches[1]\n    jsonPointer = matches[2]\n    if (jsonPointer === \"#\") {\n      if (up >= dataLevel) throw new Error(errorMsg(\"property/index\", up))\n      return dataPathArr[dataLevel - up]\n    }\n    if (up > dataLevel) throw new Error(errorMsg(\"data\", up))\n    data = dataNames[dataLevel - up]\n    if (!jsonPointer) return data\n  }\n\n  let expr = data\n  const segments = jsonPointer.split(\"/\")\n  for (const segment of segments) {\n    if (segment) {\n      data = _`${data}${getProperty(unescapeJsonPointer(segment))}`\n      expr = _`${expr} && ${data}`\n    }\n  }\n  return expr\n\n  function errorMsg(pointerType: string, up: number): string {\n    return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`\n  }\n}\n", "import type {ErrorObject} from \"../types\"\n\nexport default class ValidationError extends Error {\n  readonly errors: Partial<ErrorObject>[]\n  readonly ajv: true\n  readonly validation: true\n\n  constructor(errors: Partial<ErrorObject>[]) {\n    super(\"validation failed\")\n    this.errors = errors\n    this.ajv = this.validation = true\n  }\n}\n", "import {resolveUrl, normalizeId, getFullPath} from \"./resolve\"\nimport type {UriResolver} from \"../types\"\n\nexport default class MissingRefError extends Error {\n  readonly missingRef: string\n  readonly missingSchema: string\n\n  constructor(resolver: UriResolver, baseId: string, ref: string, msg?: string) {\n    super(msg || `can't resolve reference ${ref} from id ${baseId}`)\n    this.missingRef = resolveUrl(resolver, baseId, ref)\n    this.missingSchema = normalizeId(getFullPath(resolver, this.missingRef))\n  }\n}\n", "import type {\n  AnySchema,\n  AnySchemaObject,\n  AnyValidateFunction,\n  AsyncValidateFunction,\n  EvaluatedProperties,\n  EvaluatedItems,\n} from \"../types\"\nimport type Ajv from \"../core\"\nimport type {InstanceOptions} from \"../core\"\nimport {CodeGen, _, nil, stringify, Name, Code, ValueScopeName} from \"./codegen\"\nimport ValidationError from \"../runtime/validation_error\"\nimport N from \"./names\"\nimport {LocalRefs, getFullPath, _getFullPath, inlineRef, normalizeId, resolveUrl} from \"./resolve\"\nimport {schemaHasRulesButRef, unescapeFragment} from \"./util\"\nimport {validateFunctionCode} from \"./validate\"\nimport {URIComponent} from \"fast-uri\"\nimport {JSONType} from \"./rules\"\n\nexport type SchemaRefs = {\n  [Ref in string]?: SchemaEnv | AnySchema\n}\n\nexport interface SchemaCxt {\n  readonly gen: CodeGen\n  readonly allErrors?: boolean // validation mode - whether to collect all errors or break on error\n  readonly data: Name // Name with reference to the current part of data instance\n  readonly parentData: Name // should be used in keywords modifying data\n  readonly parentDataProperty: Code | number // should be used in keywords modifying data\n  readonly dataNames: Name[]\n  readonly dataPathArr: (Code | number)[]\n  readonly dataLevel: number // the level of the currently validated data,\n  // it can be used to access both the property names and the data on all levels from the top.\n  dataTypes: JSONType[] // data types applied to the current part of data instance\n  definedProperties: Set<string> // set of properties to keep track of for required checks\n  readonly topSchemaRef: Code\n  readonly validateName: Name\n  evaluated?: Name\n  readonly ValidationError?: Name\n  readonly schema: AnySchema // current schema object - equal to parentSchema passed via KeywordCxt\n  readonly schemaEnv: SchemaEnv\n  readonly rootId: string\n  baseId: string // the current schema base URI that should be used as the base for resolving URIs in references (\\$ref)\n  readonly schemaPath: Code // the run-time expression that evaluates to the property name of the current schema\n  readonly errSchemaPath: string // this is actual string, should not be changed to Code\n  readonly errorPath: Code\n  readonly propertyName?: Name\n  readonly compositeRule?: boolean // true indicates that the current schema is inside the compound keyword,\n  // where failing some rule doesn't mean validation failure (`anyOf`, `oneOf`, `not`, `if`).\n  // This flag is used to determine whether you can return validation result immediately after any error in case the option `allErrors` is not `true.\n  // You only need to use it if you have many steps in your keywords and potentially can define multiple errors.\n  props?: EvaluatedProperties | Name // properties evaluated by this schema - used by parent schema or assigned to validation function\n  items?: EvaluatedItems | Name // last item evaluated by this schema - used by parent schema or assigned to validation function\n  jtdDiscriminator?: string\n  jtdMetadata?: boolean\n  readonly createErrors?: boolean\n  readonly opts: InstanceOptions // Ajv instance option.\n  readonly self: Ajv // current Ajv instance\n}\n\nexport interface SchemaObjCxt extends SchemaCxt {\n  readonly schema: AnySchemaObject\n}\ninterface SchemaEnvArgs {\n  readonly schema: AnySchema\n  readonly schemaId?: \"$id\" | \"id\"\n  readonly root?: SchemaEnv\n  readonly baseId?: string\n  readonly schemaPath?: string\n  readonly localRefs?: LocalRefs\n  readonly meta?: boolean\n}\n\nexport class SchemaEnv implements SchemaEnvArgs {\n  readonly schema: AnySchema\n  readonly schemaId?: \"$id\" | \"id\"\n  readonly root: SchemaEnv\n  baseId: string // TODO possibly, it should be readonly\n  schemaPath?: string\n  localRefs?: LocalRefs\n  readonly meta?: boolean\n  readonly $async?: boolean // true if the current schema is asynchronous.\n  readonly refs: SchemaRefs = {}\n  readonly dynamicAnchors: {[Ref in string]?: true} = {}\n  validate?: AnyValidateFunction\n  validateName?: ValueScopeName\n  serialize?: (data: unknown) => string\n  serializeName?: ValueScopeName\n  parse?: (data: string) => unknown\n  parseName?: ValueScopeName\n\n  constructor(env: SchemaEnvArgs) {\n    let schema: AnySchemaObject | undefined\n    if (typeof env.schema == \"object\") schema = env.schema\n    this.schema = env.schema\n    this.schemaId = env.schemaId\n    this.root = env.root || this\n    this.baseId = env.baseId ?? normalizeId(schema?.[env.schemaId || \"$id\"])\n    this.schemaPath = env.schemaPath\n    this.localRefs = env.localRefs\n    this.meta = env.meta\n    this.$async = schema?.$async\n    this.refs = {}\n  }\n}\n\n// let codeSize = 0\n// let nodeCount = 0\n\n// Compiles schema in SchemaEnv\nexport function compileSchema(this: Ajv, sch: SchemaEnv): SchemaEnv {\n  // TODO refactor - remove compilations\n  const _sch = getCompilingSchema.call(this, sch)\n  if (_sch) return _sch\n  const rootId = getFullPath(this.opts.uriResolver, sch.root.baseId) // TODO if getFullPath removed 1 tests fails\n  const {es5, lines} = this.opts.code\n  const {ownProperties} = this.opts\n  const gen = new CodeGen(this.scope, {es5, lines, ownProperties})\n  let _ValidationError\n  if (sch.$async) {\n    _ValidationError = gen.scopeValue(\"Error\", {\n      ref: ValidationError,\n      code: _`require(\"ajv/dist/runtime/validation_error\").default`,\n    })\n  }\n\n  const validateName = gen.scopeName(\"validate\")\n  sch.validateName = validateName\n\n  const schemaCxt: SchemaCxt = {\n    gen,\n    allErrors: this.opts.allErrors,\n    data: N.data,\n    parentData: N.parentData,\n    parentDataProperty: N.parentDataProperty,\n    dataNames: [N.data],\n    dataPathArr: [nil], // TODO can its length be used as dataLevel if nil is removed?\n    dataLevel: 0,\n    dataTypes: [],\n    definedProperties: new Set<string>(),\n    topSchemaRef: gen.scopeValue(\n      \"schema\",\n      this.opts.code.source === true\n        ? {ref: sch.schema, code: stringify(sch.schema)}\n        : {ref: sch.schema}\n    ),\n    validateName,\n    ValidationError: _ValidationError,\n    schema: sch.schema,\n    schemaEnv: sch,\n    rootId,\n    baseId: sch.baseId || rootId,\n    schemaPath: nil,\n    errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n    errorPath: _`\"\"`,\n    opts: this.opts,\n    self: this,\n  }\n\n  let sourceCode: string | undefined\n  try {\n    this._compilations.add(sch)\n    validateFunctionCode(schemaCxt)\n    gen.optimize(this.opts.code.optimize)\n    // gen.optimize(1)\n    const validateCode = gen.toString()\n    sourceCode = `${gen.scopeRefs(N.scope)}return ${validateCode}`\n    // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n    if (this.opts.code.process) sourceCode = this.opts.code.process(sourceCode, sch)\n    // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n    const makeValidate = new Function(`${N.self}`, `${N.scope}`, sourceCode)\n    const validate: AnyValidateFunction = makeValidate(this, this.scope.get())\n    this.scope.value(validateName, {ref: validate})\n\n    validate.errors = null\n    validate.schema = sch.schema\n    validate.schemaEnv = sch\n    if (sch.$async) (validate as AsyncValidateFunction).$async = true\n    if (this.opts.code.source === true) {\n      validate.source = {validateName, validateCode, scopeValues: gen._values}\n    }\n    if (this.opts.unevaluated) {\n      const {props, items} = schemaCxt\n      validate.evaluated = {\n        props: props instanceof Name ? undefined : props,\n        items: items instanceof Name ? undefined : items,\n        dynamicProps: props instanceof Name,\n        dynamicItems: items instanceof Name,\n      }\n      if (validate.source) validate.source.evaluated = stringify(validate.evaluated)\n    }\n    sch.validate = validate\n    return sch\n  } catch (e) {\n    delete sch.validate\n    delete sch.validateName\n    if (sourceCode) this.logger.error(\"Error compiling schema, function code:\", sourceCode)\n    // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n    throw e\n  } finally {\n    this._compilations.delete(sch)\n  }\n}\n\nexport function resolveRef(\n  this: Ajv,\n  root: SchemaEnv,\n  baseId: string,\n  ref: string\n): AnySchema | SchemaEnv | undefined {\n  ref = resolveUrl(this.opts.uriResolver, baseId, ref)\n  const schOrFunc = root.refs[ref]\n  if (schOrFunc) return schOrFunc\n\n  let _sch = resolve.call(this, root, ref)\n  if (_sch === undefined) {\n    const schema = root.localRefs?.[ref] // TODO maybe localRefs should hold SchemaEnv\n    const {schemaId} = this.opts\n    if (schema) _sch = new SchemaEnv({schema, schemaId, root, baseId})\n  }\n\n  if (_sch === undefined) return\n  return (root.refs[ref] = inlineOrCompile.call(this, _sch))\n}\n\nfunction inlineOrCompile(this: Ajv, sch: SchemaEnv): AnySchema | SchemaEnv {\n  if (inlineRef(sch.schema, this.opts.inlineRefs)) return sch.schema\n  return sch.validate ? sch : compileSchema.call(this, sch)\n}\n\n// Index of schema compilation in the currently compiled list\nexport function getCompilingSchema(this: Ajv, schEnv: SchemaEnv): SchemaEnv | void {\n  for (const sch of this._compilations) {\n    if (sameSchemaEnv(sch, schEnv)) return sch\n  }\n}\n\nfunction sameSchemaEnv(s1: SchemaEnv, s2: SchemaEnv): boolean {\n  return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId\n}\n\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(\n  this: Ajv,\n  root: SchemaEnv, // information about the root schema for the current schema\n  ref: string // reference to resolve\n): SchemaEnv | undefined {\n  let sch\n  while (typeof (sch = this.refs[ref]) == \"string\") ref = sch\n  return sch || this.schemas[ref] || resolveSchema.call(this, root, ref)\n}\n\n// Resolve schema, its root and baseId\nexport function resolveSchema(\n  this: Ajv,\n  root: SchemaEnv, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\n  ref: string // reference to resolve\n): SchemaEnv | undefined {\n  const p = this.opts.uriResolver.parse(ref)\n  const refPath = _getFullPath(this.opts.uriResolver, p)\n  let baseId = getFullPath(this.opts.uriResolver, root.baseId, undefined)\n  // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n  if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n    return getJsonPointer.call(this, p, root)\n  }\n\n  const id = normalizeId(refPath)\n  const schOrRef = this.refs[id] || this.schemas[id]\n  if (typeof schOrRef == \"string\") {\n    const sch = resolveSchema.call(this, root, schOrRef)\n    if (typeof sch?.schema !== \"object\") return\n    return getJsonPointer.call(this, p, sch)\n  }\n\n  if (typeof schOrRef?.schema !== \"object\") return\n  if (!schOrRef.validate) compileSchema.call(this, schOrRef)\n  if (id === normalizeId(ref)) {\n    const {schema} = schOrRef\n    const {schemaId} = this.opts\n    const schId = schema[schemaId]\n    if (schId) baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n    return new SchemaEnv({schema, schemaId, root, baseId})\n  }\n  return getJsonPointer.call(this, p, schOrRef)\n}\n\nconst PREVENT_SCOPE_CHANGE = new Set([\n  \"properties\",\n  \"patternProperties\",\n  \"enum\",\n  \"dependencies\",\n  \"definitions\",\n])\n\nfunction getJsonPointer(\n  this: Ajv,\n  parsedRef: URIComponent,\n  {baseId, schema, root}: SchemaEnv\n): SchemaEnv | undefined {\n  if (parsedRef.fragment?.[0] !== \"/\") return\n  for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n    if (typeof schema === \"boolean\") return\n    const partSchema = schema[unescapeFragment(part)]\n    if (partSchema === undefined) return\n    schema = partSchema\n    // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n    const schId = typeof schema === \"object\" && schema[this.opts.schemaId]\n    if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n      baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n    }\n  }\n  let env: SchemaEnv | undefined\n  if (typeof schema != \"boolean\" && schema.$ref && !schemaHasRulesButRef(schema, this.RULES)) {\n    const $ref = resolveUrl(this.opts.uriResolver, baseId, schema.$ref)\n    env = resolveSchema.call(this, root, $ref)\n  }\n  // even though resolution failed we need to return SchemaEnv to throw exception\n  // so that compileAsync loads missing schema.\n  const {schemaId} = this.opts\n  env = env || new SchemaEnv({schema, schemaId, root, baseId})\n  if (env.schema !== env.root.schema) return env\n  return undefined\n}\n", "{\n  \"$id\": \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n  \"description\": \"Meta-schema for $data reference (JSON AnySchema extension proposal)\",\n  \"type\": \"object\",\n  \"required\": [\"$data\"],\n  \"properties\": {\n    \"$data\": {\n      \"type\": \"string\",\n      \"anyOf\": [{\"format\": \"relative-json-pointer\"}, {\"format\": \"json-pointer\"}]\n    }\n  },\n  \"additionalProperties\": false\n}\n", "'use strict'\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/**\n * @param {Array<string>} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n  let acc = ''\n  let code = 0\n  let i = 0\n\n  for (i = 0; i < input.length; i++) {\n    code = input[i].charCodeAt(0)\n    if (code === 48) {\n      continue\n    }\n    if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n      return ''\n    }\n    acc += input[i]\n    break\n  }\n\n  for (i += 1; i < input.length; i++) {\n    code = input[i].charCodeAt(0)\n    if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n      return ''\n    }\n    acc += input[i]\n  }\n  return acc\n}\n\n/**\n * @typedef {Object} GetIPV6Result\n * @property {boolean} error - Indicates if there was an error parsing the IPv6 address.\n * @property {string} address - The parsed IPv6 address.\n * @property {string} [zone] - The zone identifier, if present.\n */\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/**\n * @param {Array<string>} buffer\n * @returns {boolean}\n */\nfunction consumeIsZone (buffer) {\n  buffer.length = 0\n  return true\n}\n\n/**\n * @param {Array<string>} buffer\n * @param {Array<string>} address\n * @param {GetIPV6Result} output\n * @returns {boolean}\n */\nfunction consumeHextets (buffer, address, output) {\n  if (buffer.length) {\n    const hex = stringArrayToHexStripped(buffer)\n    if (hex !== '') {\n      address.push(hex)\n    } else {\n      output.error = true\n      return false\n    }\n    buffer.length = 0\n  }\n  return true\n}\n\n/**\n * @param {string} input\n * @returns {GetIPV6Result}\n */\nfunction getIPV6 (input) {\n  let tokenCount = 0\n  const output = { error: false, address: '', zone: '' }\n  /** @type {Array<string>} */\n  const address = []\n  /** @type {Array<string>} */\n  const buffer = []\n  let endipv6Encountered = false\n  let endIpv6 = false\n\n  let consume = consumeHextets\n\n  for (let i = 0; i < input.length; i++) {\n    const cursor = input[i]\n    if (cursor === '[' || cursor === ']') { continue }\n    if (cursor === ':') {\n      if (endipv6Encountered === true) {\n        endIpv6 = true\n      }\n      if (!consume(buffer, address, output)) { break }\n      if (++tokenCount > 7) {\n        // not valid\n        output.error = true\n        break\n      }\n      if (i > 0 && input[i - 1] === ':') {\n        endipv6Encountered = true\n      }\n      address.push(':')\n      continue\n    } else if (cursor === '%') {\n      if (!consume(buffer, address, output)) { break }\n      // switch to zone detection\n      consume = consumeIsZone\n    } else {\n      buffer.push(cursor)\n      continue\n    }\n  }\n  if (buffer.length) {\n    if (consume === consumeIsZone) {\n      output.zone = buffer.join('')\n    } else if (endIpv6) {\n      address.push(buffer.join(''))\n    } else {\n      address.push(stringArrayToHexStripped(buffer))\n    }\n  }\n  output.address = address.join('')\n  return output\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n */\n\n/**\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n  if (findToken(host, ':') < 2) { return { host, isIPV6: false } }\n  const ipv6 = getIPV6(host)\n\n  if (!ipv6.error) {\n    let newHost = ipv6.address\n    let escapedHost = ipv6.address\n    if (ipv6.zone) {\n      newHost += '%' + ipv6.zone\n      escapedHost += '%25' + ipv6.zone\n    }\n    return { host: newHost, isIPV6: true, escapedHost }\n  } else {\n    return { host, isIPV6: false }\n  }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n  let ind = 0\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === token) ind++\n  }\n  return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n  let input = path\n  const output = []\n  let nextSlash = -1\n  let len = 0\n\n  // eslint-disable-next-line no-cond-assign\n  while (len = input.length) {\n    if (len === 1) {\n      if (input === '.') {\n        break\n      } else if (input === '/') {\n        output.push('/')\n        break\n      } else {\n        output.push(input)\n        break\n      }\n    } else if (len === 2) {\n      if (input[0] === '.') {\n        if (input[1] === '.') {\n          break\n        } else if (input[1] === '/') {\n          input = input.slice(2)\n          continue\n        }\n      } else if (input[0] === '/') {\n        if (input[1] === '.' || input[1] === '/') {\n          output.push('/')\n          break\n        }\n      }\n    } else if (len === 3) {\n      if (input === '/..') {\n        if (output.length !== 0) {\n          output.pop()\n        }\n        output.push('/')\n        break\n      }\n    }\n    if (input[0] === '.') {\n      if (input[1] === '.') {\n        if (input[2] === '/') {\n          input = input.slice(3)\n          continue\n        }\n      } else if (input[1] === '/') {\n        input = input.slice(2)\n        continue\n      }\n    } else if (input[0] === '/') {\n      if (input[1] === '.') {\n        if (input[2] === '/') {\n          input = input.slice(2)\n          continue\n        } else if (input[2] === '.') {\n          if (input[3] === '/') {\n            input = input.slice(3)\n            if (output.length !== 0) {\n              output.pop()\n            }\n            continue\n          }\n        }\n      }\n    }\n\n    // Rule 2E: Move normal path segment to output\n    if ((nextSlash = input.indexOf('/', 1)) === -1) {\n      output.push(input)\n      break\n    } else {\n      output.push(input.slice(0, nextSlash))\n      input = input.slice(nextSlash)\n    }\n  }\n\n  return output.join('')\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @param {boolean} esc\n * @returns {import('../types/index').URIComponent}\n */\nfunction normalizeComponentEncoding (component, esc) {\n  const func = esc !== true ? escape : unescape\n  if (component.scheme !== undefined) {\n    component.scheme = func(component.scheme)\n  }\n  if (component.userinfo !== undefined) {\n    component.userinfo = func(component.userinfo)\n  }\n  if (component.host !== undefined) {\n    component.host = func(component.host)\n  }\n  if (component.path !== undefined) {\n    component.path = func(component.path)\n  }\n  if (component.query !== undefined) {\n    component.query = func(component.query)\n  }\n  if (component.fragment !== undefined) {\n    component.fragment = func(component.fragment)\n  }\n  return component\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n  const uriTokens = []\n\n  if (component.userinfo !== undefined) {\n    uriTokens.push(component.userinfo)\n    uriTokens.push('@')\n  }\n\n  if (component.host !== undefined) {\n    let host = unescape(component.host)\n    if (!isIPv4(host)) {\n      const ipV6res = normalizeIPv6(host)\n      if (ipV6res.isIPV6 === true) {\n        host = `[${ipV6res.escapedHost}]`\n      } else {\n        host = component.host\n      }\n    }\n    uriTokens.push(host)\n  }\n\n  if (typeof component.port === 'number' || typeof component.port === 'string') {\n    uriTokens.push(':')\n    uriTokens.push(String(component.port))\n  }\n\n  return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n  nonSimpleDomain,\n  recomposeAuthority,\n  normalizeComponentEncoding,\n  removeDotSegments,\n  isIPv4,\n  isUUID,\n  normalizeIPv6,\n  stringArrayToHexStripped\n}\n", "'use strict'\n\nconst { isUUID } = require('./utils')\nconst URN_REG = /([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-.:;=@]|%[\\da-f]{2})+)/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n  'wss', 'urn', 'urn:uuid'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n  return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n  if (wsComponent.secure === true) {\n    return true\n  } else if (wsComponent.secure === false) {\n    return false\n  } else if (wsComponent.scheme) {\n    return (\n      wsComponent.scheme.length === 3 &&\n      (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n      (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n      (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n    )\n  } else {\n    return false\n  }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n  if (!component.host) {\n    component.error = component.error || 'HTTP URIs must have a host.'\n  }\n\n  return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n  const secure = String(component.scheme).toLowerCase() === 'https'\n\n  // normalize the default port\n  if (component.port === (secure ? 443 : 80) || component.port === '') {\n    component.port = undefined\n  }\n\n  // normalize the empty path\n  if (!component.path) {\n    component.path = '/'\n  }\n\n  // NOTE: We do not parse query strings for HTTP URIs\n  // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n  // and not the HTTP spec.\n\n  return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n  wsComponent.secure = wsIsSecure(wsComponent)\n\n  // construct resouce name\n  wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n  wsComponent.path = undefined\n  wsComponent.query = undefined\n\n  return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n  if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n    wsComponent.port = undefined\n  }\n\n  // ensure scheme matches secure flag\n  if (typeof wsComponent.secure === 'boolean') {\n    wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n    wsComponent.secure = undefined\n  }\n\n  // reconstruct path from resource name\n  if (wsComponent.resourceName) {\n    const [path, query] = wsComponent.resourceName.split('?')\n    wsComponent.path = (path && path !== '/' ? path : undefined)\n    wsComponent.query = query\n    wsComponent.resourceName = undefined\n  }\n\n  // forbid fragment component\n  wsComponent.fragment = undefined\n\n  return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n  if (!urnComponent.path) {\n    urnComponent.error = 'URN can not be parsed'\n    return urnComponent\n  }\n  const matches = urnComponent.path.match(URN_REG)\n  if (matches) {\n    const scheme = options.scheme || urnComponent.scheme || 'urn'\n    urnComponent.nid = matches[1].toLowerCase()\n    urnComponent.nss = matches[2]\n    const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n    const schemeHandler = getSchemeHandler(urnScheme)\n    urnComponent.path = undefined\n\n    if (schemeHandler) {\n      urnComponent = schemeHandler.parse(urnComponent, options)\n    }\n  } else {\n    urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n  }\n\n  return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n  if (urnComponent.nid === undefined) {\n    throw new Error('URN without nid cannot be serialized')\n  }\n  const scheme = options.scheme || urnComponent.scheme || 'urn'\n  const nid = urnComponent.nid.toLowerCase()\n  const urnScheme = `${scheme}:${options.nid || nid}`\n  const schemeHandler = getSchemeHandler(urnScheme)\n\n  if (schemeHandler) {\n    urnComponent = schemeHandler.serialize(urnComponent, options)\n  }\n\n  const uriComponent = urnComponent\n  const nss = urnComponent.nss\n  uriComponent.path = `${nid || options.nid}:${nss}`\n\n  options.skipEscape = true\n  return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n  const uuidComponent = urnComponent\n  uuidComponent.uuid = uuidComponent.nss\n  uuidComponent.nss = undefined\n\n  if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n    uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n  }\n\n  return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n  const urnComponent = uuidComponent\n  // normalize UUID\n  urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n  return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n  scheme: 'http',\n  domainHost: true,\n  parse: httpParse,\n  serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n  scheme: 'https',\n  domainHost: http.domainHost,\n  parse: httpParse,\n  serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n  scheme: 'ws',\n  domainHost: true,\n  parse: wsParse,\n  serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n  scheme: 'wss',\n  domainHost: ws.domainHost,\n  parse: ws.parse,\n  serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n  scheme: 'urn',\n  parse: urnParse,\n  serialize: urnSerialize,\n  skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n  scheme: 'urn:uuid',\n  parse: urnuuidParse,\n  serialize: urnuuidSerialize,\n  skipNormalize: true\n})\n\nconst SCHEMES = /** @type {Record<SchemeName, SchemeHandler>} */ ({\n  http,\n  https,\n  ws,\n  wss,\n  urn,\n  'urn:uuid': urnuuid\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n  return (\n    scheme && (\n      SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n      SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n  ) ||\n    undefined\n}\n\nmodule.exports = {\n  wsIsSecure,\n  SCHEMES,\n  isValidSchemeName,\n  getSchemeHandler,\n}\n", "'use strict'\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = require('./lib/utils')\nconst { SCHEMES, getSchemeHandler } = require('./lib/schemes')\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n  if (typeof uri === 'string') {\n    uri = /** @type {T} */ (serialize(parse(uri, options), options))\n  } else if (typeof uri === 'object') {\n    uri = /** @type {T} */ (parse(serialize(uri, options), options))\n  }\n  return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n  const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n  const resolved = resolveComponent(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true)\n  schemelessOptions.skipEscape = true\n  return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n  /** @type {import('./types/index').URIComponent} */\n  const target = {}\n  if (!skipNormalization) {\n    base = parse(serialize(base, options), options) // normalize base component\n    relative = parse(serialize(relative, options), options) // normalize relative component\n  }\n  options = options || {}\n\n  if (!options.tolerant && relative.scheme) {\n    target.scheme = relative.scheme\n    // target.authority = relative.authority;\n    target.userinfo = relative.userinfo\n    target.host = relative.host\n    target.port = relative.port\n    target.path = removeDotSegments(relative.path || '')\n    target.query = relative.query\n  } else {\n    if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n      // target.authority = relative.authority;\n      target.userinfo = relative.userinfo\n      target.host = relative.host\n      target.port = relative.port\n      target.path = removeDotSegments(relative.path || '')\n      target.query = relative.query\n    } else {\n      if (!relative.path) {\n        target.path = base.path\n        if (relative.query !== undefined) {\n          target.query = relative.query\n        } else {\n          target.query = base.query\n        }\n      } else {\n        if (relative.path[0] === '/') {\n          target.path = removeDotSegments(relative.path)\n        } else {\n          if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n            target.path = '/' + relative.path\n          } else if (!base.path) {\n            target.path = relative.path\n          } else {\n            target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n          }\n          target.path = removeDotSegments(target.path)\n        }\n        target.query = relative.query\n      }\n      // target.authority = base.authority;\n      target.userinfo = base.userinfo\n      target.host = base.host\n      target.port = base.port\n    }\n    target.scheme = base.scheme\n  }\n\n  target.fragment = relative.fragment\n\n  return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n  if (typeof uriA === 'string') {\n    uriA = unescape(uriA)\n    uriA = serialize(normalizeComponentEncoding(parse(uriA, options), true), { ...options, skipEscape: true })\n  } else if (typeof uriA === 'object') {\n    uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true })\n  }\n\n  if (typeof uriB === 'string') {\n    uriB = unescape(uriB)\n    uriB = serialize(normalizeComponentEncoding(parse(uriB, options), true), { ...options, skipEscape: true })\n  } else if (typeof uriB === 'object') {\n    uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true })\n  }\n\n  return uriA.toLowerCase() === uriB.toLowerCase()\n}\n\n/**\n * @param {Readonly<import('./types/index').URIComponent>} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n  const component = {\n    host: cmpts.host,\n    scheme: cmpts.scheme,\n    userinfo: cmpts.userinfo,\n    port: cmpts.port,\n    path: cmpts.path,\n    query: cmpts.query,\n    nid: cmpts.nid,\n    nss: cmpts.nss,\n    uuid: cmpts.uuid,\n    fragment: cmpts.fragment,\n    reference: cmpts.reference,\n    resourceName: cmpts.resourceName,\n    secure: cmpts.secure,\n    error: ''\n  }\n  const options = Object.assign({}, opts)\n  const uriTokens = []\n\n  // find scheme handler\n  const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n  // perform scheme specific serialization\n  if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n  if (component.path !== undefined) {\n    if (!options.skipEscape) {\n      component.path = escape(component.path)\n\n      if (component.scheme !== undefined) {\n        component.path = component.path.split('%3A').join(':')\n      }\n    } else {\n      component.path = unescape(component.path)\n    }\n  }\n\n  if (options.reference !== 'suffix' && component.scheme) {\n    uriTokens.push(component.scheme, ':')\n  }\n\n  const authority = recomposeAuthority(component)\n  if (authority !== undefined) {\n    if (options.reference !== 'suffix') {\n      uriTokens.push('//')\n    }\n\n    uriTokens.push(authority)\n\n    if (component.path && component.path[0] !== '/') {\n      uriTokens.push('/')\n    }\n  }\n  if (component.path !== undefined) {\n    let s = component.path\n\n    if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n      s = removeDotSegments(s)\n    }\n\n    if (\n      authority === undefined &&\n      s[0] === '/' &&\n      s[1] === '/'\n    ) {\n      // don't allow the path to start with \"//\"\n      s = '/%2F' + s.slice(2)\n    }\n\n    uriTokens.push(s)\n  }\n\n  if (component.query !== undefined) {\n    uriTokens.push('?', component.query)\n  }\n\n  if (component.fragment !== undefined) {\n    uriTokens.push('#', component.fragment)\n  }\n  return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n  const options = Object.assign({}, opts)\n  /** @type {import('./types/index').URIComponent} */\n  const parsed = {\n    scheme: undefined,\n    userinfo: undefined,\n    host: '',\n    port: undefined,\n    path: '',\n    query: undefined,\n    fragment: undefined\n  }\n\n  let isIP = false\n  if (options.reference === 'suffix') {\n    if (options.scheme) {\n      uri = options.scheme + ':' + uri\n    } else {\n      uri = '//' + uri\n    }\n  }\n\n  const matches = uri.match(URI_PARSE)\n\n  if (matches) {\n    // store each component\n    parsed.scheme = matches[1]\n    parsed.userinfo = matches[3]\n    parsed.host = matches[4]\n    parsed.port = parseInt(matches[5], 10)\n    parsed.path = matches[6] || ''\n    parsed.query = matches[7]\n    parsed.fragment = matches[8]\n\n    // fix port number\n    if (isNaN(parsed.port)) {\n      parsed.port = matches[5]\n    }\n    if (parsed.host) {\n      const ipv4result = isIPv4(parsed.host)\n      if (ipv4result === false) {\n        const ipv6result = normalizeIPv6(parsed.host)\n        parsed.host = ipv6result.host.toLowerCase()\n        isIP = ipv6result.isIPV6\n      } else {\n        isIP = true\n      }\n    }\n    if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n      parsed.reference = 'same-document'\n    } else if (parsed.scheme === undefined) {\n      parsed.reference = 'relative'\n    } else if (parsed.fragment === undefined) {\n      parsed.reference = 'absolute'\n    } else {\n      parsed.reference = 'uri'\n    }\n\n    // check for reference errors\n    if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n      parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n    }\n\n    // find scheme handler\n    const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n    // check if scheme can't handle IRIs\n    if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n      // if host component is a domain name\n      if (parsed.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost)) && isIP === false && nonSimpleDomain(parsed.host)) {\n        // convert Unicode IDN -> ASCII IDN\n        try {\n          parsed.host = URL.domainToASCII(parsed.host.toLowerCase())\n        } catch (e) {\n          parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n        }\n      }\n      // convert IRI -> URI\n    }\n\n    if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n      if (uri.indexOf('%') !== -1) {\n        if (parsed.scheme !== undefined) {\n          parsed.scheme = unescape(parsed.scheme)\n        }\n        if (parsed.host !== undefined) {\n          parsed.host = unescape(parsed.host)\n        }\n      }\n      if (parsed.path) {\n        parsed.path = escape(unescape(parsed.path))\n      }\n      if (parsed.fragment) {\n        parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment))\n      }\n    }\n\n    // perform scheme specific parsing\n    if (schemeHandler && schemeHandler.parse) {\n      schemeHandler.parse(parsed, options)\n    }\n  } else {\n    parsed.error = parsed.error || 'URI can not be parsed.'\n  }\n  return parsed\n}\n\nconst fastUri = {\n  SCHEMES,\n  normalize,\n  resolve,\n  resolveComponent,\n  equal,\n  serialize,\n  parse\n}\n\nmodule.exports = fastUri\nmodule.exports.default = fastUri\nmodule.exports.fastUri = fastUri\n", "import * as uri from \"fast-uri\"\n\ntype URI = typeof uri & {code: string}\n;(uri as URI).code = 'require(\"ajv/dist/runtime/uri\").default'\n\nexport default uri as URI\n", "export {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  AnyValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n} from \"./types\"\n\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport interface Plugin<Opts> {\n  (ajv: Ajv, options?: Opts): Ajv\n  [prop: string]: any\n}\n\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\n\nimport type {\n  Schema,\n  AnySchema,\n  AnySchemaObject,\n  SchemaObject,\n  AsyncSchema,\n  Vocabulary,\n  KeywordDefinition,\n  AddedKeywordDefinition,\n  AnyValidateFunction,\n  ValidateFunction,\n  AsyncValidateFunction,\n  ErrorObject,\n  Format,\n  AddedFormat,\n  RegExpEngine,\n  UriResolver,\n} from \"./types\"\nimport type {JSONSchemaType} from \"./types/json-schema\"\nimport type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nimport ValidationError from \"./runtime/validation_error\"\nimport MissingRefError from \"./compile/ref_error\"\nimport {getRules, ValidationRules, Rule, RuleGroup, JSONType} from \"./compile/rules\"\nimport {SchemaEnv, compileSchema, resolveSchema} from \"./compile\"\nimport {Code, ValueScope} from \"./compile/codegen\"\nimport {normalizeId, getSchemaRefs} from \"./compile/resolve\"\nimport {getJSONTypes} from \"./compile/validate/dataType\"\nimport {eachItem} from \"./compile/util\"\nimport * as $dataRefSchema from \"./refs/data.json\"\n\nimport DefaultUriResolver from \"./runtime/uri\"\n\nconst defaultRegExp: RegExpEngine = (str, flags) => new RegExp(str, flags)\ndefaultRegExp.code = \"new RegExp\"\n\nconst META_IGNORE_OPTIONS: (keyof Options)[] = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"]\nconst EXT_SCOPE_NAMES = new Set([\n  \"validate\",\n  \"serialize\",\n  \"parse\",\n  \"wrapper\",\n  \"root\",\n  \"schema\",\n  \"keyword\",\n  \"pattern\",\n  \"formats\",\n  \"validate$data\",\n  \"func\",\n  \"obj\",\n  \"Error\",\n])\n\nexport type Options = CurrentOptions & DeprecatedOptions\n\nexport interface CurrentOptions {\n  // strict mode options (NEW)\n  strict?: boolean | \"log\"\n  strictSchema?: boolean | \"log\"\n  strictNumbers?: boolean | \"log\"\n  strictTypes?: boolean | \"log\"\n  strictTuples?: boolean | \"log\"\n  strictRequired?: boolean | \"log\"\n  allowMatchingProperties?: boolean // disables a strict mode restriction\n  allowUnionTypes?: boolean\n  validateFormats?: boolean\n  // validation and reporting options:\n  $data?: boolean\n  allErrors?: boolean\n  verbose?: boolean\n  discriminator?: boolean\n  unicodeRegExp?: boolean\n  timestamp?: \"string\" | \"date\" // JTD only\n  parseDate?: boolean // JTD only\n  allowDate?: boolean // JTD only\n  specialNumbers?: \"fast\" | \"null\" // JTD only\n  $comment?:\n    | true\n    | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown)\n  formats?: {[Name in string]?: Format}\n  keywords?: Vocabulary\n  schemas?: AnySchema[] | {[Key in string]?: AnySchema}\n  logger?: Logger | false\n  loadSchema?: (uri: string) => Promise<AnySchemaObject>\n  // options to modify validated data:\n  removeAdditional?: boolean | \"all\" | \"failing\"\n  useDefaults?: boolean | \"empty\"\n  coerceTypes?: boolean | \"array\"\n  // advanced options:\n  next?: boolean // NEW\n  unevaluated?: boolean // NEW\n  dynamicRef?: boolean // NEW\n  schemaId?: \"id\" | \"$id\"\n  jtd?: boolean // NEW\n  meta?: SchemaObject | boolean\n  defaultMeta?: string | AnySchemaObject\n  validateSchema?: boolean | \"log\"\n  addUsedSchema?: boolean\n  inlineRefs?: boolean | number\n  passContext?: boolean\n  loopRequired?: number\n  loopEnum?: number // NEW\n  ownProperties?: boolean\n  multipleOfPrecision?: number\n  int32range?: boolean // JTD only\n  messages?: boolean\n  code?: CodeOptions // NEW\n  uriResolver?: UriResolver\n}\n\nexport interface CodeOptions {\n  es5?: boolean\n  esm?: boolean\n  lines?: boolean\n  optimize?: boolean | number\n  formats?: Code // code to require (or construct) map of available formats - for standalone code\n  source?: boolean\n  process?: (code: string, schema?: SchemaEnv) => string\n  regExp?: RegExpEngine\n}\n\ninterface InstanceCodeOptions extends CodeOptions {\n  regExp: RegExpEngine\n  optimize: number\n}\n\ninterface DeprecatedOptions {\n  /** @deprecated */\n  ignoreKeywordsWithRef?: boolean\n  /** @deprecated */\n  jsPropertySyntax?: boolean // added instead of jsonPointers\n  /** @deprecated */\n  unicode?: boolean\n}\n\ninterface RemovedOptions {\n  format?: boolean\n  errorDataPath?: \"object\" | \"property\"\n  nullable?: boolean // \"nullable\" keyword is supported by default\n  jsonPointers?: boolean\n  extendRefs?: true | \"ignore\" | \"fail\"\n  missingRefs?: true | \"ignore\" | \"fail\"\n  processCode?: (code: string, schema?: SchemaEnv) => string\n  sourceCode?: boolean\n  strictDefaults?: boolean\n  strictKeywords?: boolean\n  uniqueItems?: boolean\n  unknownFormats?: true | string[] | \"ignore\"\n  cache?: any\n  serialize?: (schema: AnySchema) => unknown\n  ajvErrors?: boolean\n}\n\ntype OptionsInfo<T extends RemovedOptions | DeprecatedOptions> = {\n  [K in keyof T]-?: string | undefined\n}\n\nconst removedOptions: OptionsInfo<RemovedOptions> = {\n  errorDataPath: \"\",\n  format: \"`validateFormats: false` can be used instead.\",\n  nullable: '\"nullable\" keyword is supported by default.',\n  jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n  extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n  missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n  processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n  sourceCode: \"Use option `code: {source: true}`\",\n  strictDefaults: \"It is default now, see option `strict`.\",\n  strictKeywords: \"It is default now, see option `strict`.\",\n  uniqueItems: '\"uniqueItems\" keyword is always validated.',\n  unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n  cache: \"Map is used as cache, schema object as key.\",\n  serialize: \"Map is used as cache, schema object as key.\",\n  ajvErrors: \"It is default now.\",\n}\n\nconst deprecatedOptions: OptionsInfo<DeprecatedOptions> = {\n  ignoreKeywordsWithRef: \"\",\n  jsPropertySyntax: \"\",\n  unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n}\n\ntype RequiredInstanceOptions = {\n  [K in\n    | \"strictSchema\"\n    | \"strictNumbers\"\n    | \"strictTypes\"\n    | \"strictTuples\"\n    | \"strictRequired\"\n    | \"inlineRefs\"\n    | \"loopRequired\"\n    | \"loopEnum\"\n    | \"meta\"\n    | \"messages\"\n    | \"schemaId\"\n    | \"addUsedSchema\"\n    | \"validateSchema\"\n    | \"validateFormats\"\n    | \"int32range\"\n    | \"unicodeRegExp\"\n    | \"uriResolver\"]: NonNullable<Options[K]>\n} & {code: InstanceCodeOptions}\n\nexport type InstanceOptions = Options & RequiredInstanceOptions\n\nconst MAX_EXPRESSION = 200\n\n// eslint-disable-next-line complexity\nfunction requiredOptions(o: Options): RequiredInstanceOptions {\n  const s = o.strict\n  const _optz = o.code?.optimize\n  const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0\n  const regExp = o.code?.regExp ?? defaultRegExp\n  const uriResolver = o.uriResolver ?? DefaultUriResolver\n  return {\n    strictSchema: o.strictSchema ?? s ?? true,\n    strictNumbers: o.strictNumbers ?? s ?? true,\n    strictTypes: o.strictTypes ?? s ?? \"log\",\n    strictTuples: o.strictTuples ?? s ?? \"log\",\n    strictRequired: o.strictRequired ?? s ?? false,\n    code: o.code ? {...o.code, optimize, regExp} : {optimize, regExp},\n    loopRequired: o.loopRequired ?? MAX_EXPRESSION,\n    loopEnum: o.loopEnum ?? MAX_EXPRESSION,\n    meta: o.meta ?? true,\n    messages: o.messages ?? true,\n    inlineRefs: o.inlineRefs ?? true,\n    schemaId: o.schemaId ?? \"$id\",\n    addUsedSchema: o.addUsedSchema ?? true,\n    validateSchema: o.validateSchema ?? true,\n    validateFormats: o.validateFormats ?? true,\n    unicodeRegExp: o.unicodeRegExp ?? true,\n    int32range: o.int32range ?? true,\n    uriResolver: uriResolver,\n  }\n}\n\nexport interface Logger {\n  log(...args: unknown[]): unknown\n  warn(...args: unknown[]): unknown\n  error(...args: unknown[]): unknown\n}\n\nexport default class Ajv {\n  opts: InstanceOptions\n  errors?: ErrorObject[] | null // errors from the last validation\n  logger: Logger\n  // shared external scope values for compiled functions\n  readonly scope: ValueScope\n  readonly schemas: {[Key in string]?: SchemaEnv} = {}\n  readonly refs: {[Ref in string]?: SchemaEnv | string} = {}\n  readonly formats: {[Name in string]?: AddedFormat} = {}\n  readonly RULES: ValidationRules\n  readonly _compilations: Set<SchemaEnv> = new Set()\n  private readonly _loading: {[Ref in string]?: Promise<AnySchemaObject>} = {}\n  private readonly _cache: Map<AnySchema, SchemaEnv> = new Map()\n  private readonly _metaOpts: InstanceOptions\n\n  static ValidationError = ValidationError\n  static MissingRefError = MissingRefError\n\n  constructor(opts: Options = {}) {\n    opts = this.opts = {...opts, ...requiredOptions(opts)}\n    const {es5, lines} = this.opts.code\n\n    this.scope = new ValueScope({scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines})\n    this.logger = getLogger(opts.logger)\n    const formatOpt = opts.validateFormats\n    opts.validateFormats = false\n\n    this.RULES = getRules()\n    checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\")\n    checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\")\n    this._metaOpts = getMetaSchemaOptions.call(this)\n\n    if (opts.formats) addInitialFormats.call(this)\n    this._addVocabularies()\n    this._addDefaultMetaSchema()\n    if (opts.keywords) addInitialKeywords.call(this, opts.keywords)\n    if (typeof opts.meta == \"object\") this.addMetaSchema(opts.meta)\n    addInitialSchemas.call(this)\n    opts.validateFormats = formatOpt\n  }\n\n  _addVocabularies(): void {\n    this.addKeyword(\"$async\")\n  }\n\n  _addDefaultMetaSchema(): void {\n    const {$data, meta, schemaId} = this.opts\n    let _dataRefSchema: SchemaObject = $dataRefSchema\n    if (schemaId === \"id\") {\n      _dataRefSchema = {...$dataRefSchema}\n      _dataRefSchema.id = _dataRefSchema.$id\n      delete _dataRefSchema.$id\n    }\n    if (meta && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false)\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    const {meta, schemaId} = this.opts\n    return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined)\n  }\n\n  // Validate data using schema\n  // AnySchema will be compiled and cached using schema itself as a key for Map\n  validate(schema: Schema | string, data: unknown): boolean\n  validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>\n  validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T\n  // This overload is only intended for typescript inference, the first\n  // argument prevents manual type annotation from matching this overload\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  validate<N extends never, T extends SomeJTDSchemaType>(\n    schema: T,\n    data: unknown\n  ): data is JTDDataType<T>\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>\n  validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>\n  validate<T>(\n    schemaKeyRef: AnySchema | string, // key, ref or schema object\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    data: unknown | T // to be validated\n  ): boolean | Promise<T> {\n    let v: AnyValidateFunction | undefined\n    if (typeof schemaKeyRef == \"string\") {\n      v = this.getSchema<T>(schemaKeyRef)\n      if (!v) throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`)\n    } else {\n      v = this.compile<T>(schemaKeyRef)\n    }\n\n    const valid = v(data)\n    if (!(\"$async\" in v)) this.errors = v.errors\n    return valid\n  }\n\n  // Create validation function for passed schema\n  // _meta: true if schema is a meta-schema. Used internally to compile meta schemas of user-defined keywords.\n  compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n  // This overload is only intended for typescript inference, the first\n  // argument prevents manual type annotation from matching this overload\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  compile<N extends never, T extends SomeJTDSchemaType>(\n    schema: T,\n    _meta?: boolean\n  ): ValidateFunction<JTDDataType<T>>\n  compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>\n  compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>\n  compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T> {\n    const sch = this._addSchema(schema, _meta)\n    return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T>\n  }\n\n  // Creates validating function for passed schema with asynchronous loading of missing schemas.\n  // `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n  // TODO allow passing schema URI\n  // meta - optional true to compile meta-schema\n  compileAsync<T = unknown>(\n    schema: SchemaObject | JSONSchemaType<T>,\n    _meta?: boolean\n  ): Promise<ValidateFunction<T>>\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>\n  compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compileAsync<T = unknown>(\n    schema: AnySchemaObject,\n    meta?: boolean\n  ): Promise<AnyValidateFunction<T>>\n  compileAsync<T = unknown>(\n    schema: AnySchemaObject,\n    meta?: boolean\n  ): Promise<AnyValidateFunction<T>> {\n    if (typeof this.opts.loadSchema != \"function\") {\n      throw new Error(\"options.loadSchema should be a function\")\n    }\n    const {loadSchema} = this.opts\n    return runCompileAsync.call(this, schema, meta)\n\n    async function runCompileAsync(\n      this: Ajv,\n      _schema: AnySchemaObject,\n      _meta?: boolean\n    ): Promise<AnyValidateFunction> {\n      await loadMetaSchema.call(this, _schema.$schema)\n      const sch = this._addSchema(_schema, _meta)\n      return sch.validate || _compileAsync.call(this, sch)\n    }\n\n    async function loadMetaSchema(this: Ajv, $ref?: string): Promise<void> {\n      if ($ref && !this.getSchema($ref)) {\n        await runCompileAsync.call(this, {$ref}, true)\n      }\n    }\n\n    async function _compileAsync(this: Ajv, sch: SchemaEnv): Promise<AnyValidateFunction> {\n      try {\n        return this._compileSchemaEnv(sch)\n      } catch (e) {\n        if (!(e instanceof MissingRefError)) throw e\n        checkLoaded.call(this, e)\n        await loadMissingSchema.call(this, e.missingSchema)\n        return _compileAsync.call(this, sch)\n      }\n    }\n\n    function checkLoaded(this: Ajv, {missingSchema: ref, missingRef}: MissingRefError): void {\n      if (this.refs[ref]) {\n        throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`)\n      }\n    }\n\n    async function loadMissingSchema(this: Ajv, ref: string): Promise<void> {\n      const _schema = await _loadSchema.call(this, ref)\n      if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema)\n      if (!this.refs[ref]) this.addSchema(_schema, ref, meta)\n    }\n\n    async function _loadSchema(this: Ajv, ref: string): Promise<AnySchemaObject> {\n      const p = this._loading[ref]\n      if (p) return p\n      try {\n        return await (this._loading[ref] = loadSchema(ref))\n      } finally {\n        delete this._loading[ref]\n      }\n    }\n  }\n\n  // Adds schema to the instance\n  addSchema(\n    schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored\n    key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n    _meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n    _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n  ): Ajv {\n    if (Array.isArray(schema)) {\n      for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema)\n      return this\n    }\n    let id: string | undefined\n    if (typeof schema === \"object\") {\n      const {schemaId} = this.opts\n      id = schema[schemaId]\n      if (id !== undefined && typeof id != \"string\") {\n        throw new Error(`schema ${schemaId} must be string`)\n      }\n    }\n    key = normalizeId(key || id)\n    this._checkUnique(key)\n    this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true)\n    return this\n  }\n\n  // Add schema that will be used to validate other schemas\n  // options in META_IGNORE_OPTIONS are alway set to false\n  addMetaSchema(\n    schema: AnySchemaObject,\n    key?: string, // schema key\n    _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n  ): Ajv {\n    this.addSchema(schema, key, true, _validateSchema)\n    return this\n  }\n\n  //  Validate schema against its meta-schema\n  validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown> {\n    if (typeof schema == \"boolean\") return true\n    let $schema: string | AnySchemaObject | undefined\n    $schema = schema.$schema\n    if ($schema !== undefined && typeof $schema != \"string\") {\n      throw new Error(\"$schema must be a string\")\n    }\n    $schema = $schema || this.opts.defaultMeta || this.defaultMeta()\n    if (!$schema) {\n      this.logger.warn(\"meta-schema not available\")\n      this.errors = null\n      return true\n    }\n    const valid = this.validate($schema, schema)\n    if (!valid && throwOrLogError) {\n      const message = \"schema is invalid: \" + this.errorsText()\n      if (this.opts.validateSchema === \"log\") this.logger.error(message)\n      else throw new Error(message)\n    }\n    return valid\n  }\n\n  // Get compiled schema by `key` or `ref`.\n  // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n  getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined {\n    let sch\n    while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\") keyRef = sch\n    if (sch === undefined) {\n      const {schemaId} = this.opts\n      const root = new SchemaEnv({schema: {}, schemaId})\n      sch = resolveSchema.call(this, root, keyRef)\n      if (!sch) return\n      this.refs[keyRef] = sch\n    }\n    return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T> | undefined\n  }\n\n  // Remove cached schema(s).\n  // If no parameter is passed all schemas but meta-schemas are removed.\n  // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n  // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n  removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv {\n    if (schemaKeyRef instanceof RegExp) {\n      this._removeAllSchemas(this.schemas, schemaKeyRef)\n      this._removeAllSchemas(this.refs, schemaKeyRef)\n      return this\n    }\n    switch (typeof schemaKeyRef) {\n      case \"undefined\":\n        this._removeAllSchemas(this.schemas)\n        this._removeAllSchemas(this.refs)\n        this._cache.clear()\n        return this\n      case \"string\": {\n        const sch = getSchEnv.call(this, schemaKeyRef)\n        if (typeof sch == \"object\") this._cache.delete(sch.schema)\n        delete this.schemas[schemaKeyRef]\n        delete this.refs[schemaKeyRef]\n        return this\n      }\n      case \"object\": {\n        const cacheKey = schemaKeyRef\n        this._cache.delete(cacheKey)\n        let id = schemaKeyRef[this.opts.schemaId]\n        if (id) {\n          id = normalizeId(id)\n          delete this.schemas[id]\n          delete this.refs[id]\n        }\n        return this\n      }\n      default:\n        throw new Error(\"ajv.removeSchema: invalid parameter\")\n    }\n  }\n\n  // add \"vocabulary\" - a collection of keywords\n  addVocabulary(definitions: Vocabulary): Ajv {\n    for (const def of definitions) this.addKeyword(def)\n    return this\n  }\n\n  addKeyword(\n    kwdOrDef: string | KeywordDefinition,\n    def?: KeywordDefinition // deprecated\n  ): Ajv {\n    let keyword: string | string[]\n    if (typeof kwdOrDef == \"string\") {\n      keyword = kwdOrDef\n      if (typeof def == \"object\") {\n        this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\")\n        def.keyword = keyword\n      }\n    } else if (typeof kwdOrDef == \"object\" && def === undefined) {\n      def = kwdOrDef\n      keyword = def.keyword\n      if (Array.isArray(keyword) && !keyword.length) {\n        throw new Error(\"addKeywords: keyword must be string or non-empty array\")\n      }\n    } else {\n      throw new Error(\"invalid addKeywords parameters\")\n    }\n\n    checkKeyword.call(this, keyword, def)\n    if (!def) {\n      eachItem(keyword, (kwd) => addRule.call(this, kwd))\n      return this\n    }\n    keywordMetaschema.call(this, def)\n    const definition: AddedKeywordDefinition = {\n      ...def,\n      type: getJSONTypes(def.type),\n      schemaType: getJSONTypes(def.schemaType),\n    }\n    eachItem(\n      keyword,\n      definition.type.length === 0\n        ? (k) => addRule.call(this, k, definition)\n        : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))\n    )\n    return this\n  }\n\n  getKeyword(keyword: string): AddedKeywordDefinition | boolean {\n    const rule = this.RULES.all[keyword]\n    return typeof rule == \"object\" ? rule.definition : !!rule\n  }\n\n  // Remove keyword\n  removeKeyword(keyword: string): Ajv {\n    // TODO return type should be Ajv\n    const {RULES} = this\n    delete RULES.keywords[keyword]\n    delete RULES.all[keyword]\n    for (const group of RULES.rules) {\n      const i = group.rules.findIndex((rule) => rule.keyword === keyword)\n      if (i >= 0) group.rules.splice(i, 1)\n    }\n    return this\n  }\n\n  // Add format\n  addFormat(name: string, format: Format): Ajv {\n    if (typeof format == \"string\") format = new RegExp(format)\n    this.formats[name] = format\n    return this\n  }\n\n  errorsText(\n    errors: ErrorObject[] | null | undefined = this.errors, // optional array of validation errors\n    {separator = \", \", dataVar = \"data\"}: ErrorsTextOptions = {} // optional options with properties `separator` and `dataVar`\n  ): string {\n    if (!errors || errors.length === 0) return \"No errors\"\n    return errors\n      .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n      .reduce((text, msg) => text + separator + msg)\n  }\n\n  $dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject {\n    const rules = this.RULES.all\n    metaSchema = JSON.parse(JSON.stringify(metaSchema))\n    for (const jsonPointer of keywordsJsonPointers) {\n      const segments = jsonPointer.split(\"/\").slice(1) // first segment is an empty string\n      let keywords = metaSchema\n      for (const seg of segments) keywords = keywords[seg] as AnySchemaObject\n\n      for (const key in rules) {\n        const rule = rules[key]\n        if (typeof rule != \"object\") continue\n        const {$data} = rule.definition\n        const schema = keywords[key] as AnySchemaObject | undefined\n        if ($data && schema) keywords[key] = schemaOrData(schema)\n      }\n    }\n\n    return metaSchema\n  }\n\n  private _removeAllSchemas(schemas: {[Ref in string]?: SchemaEnv | string}, regex?: RegExp): void {\n    for (const keyRef in schemas) {\n      const sch = schemas[keyRef]\n      if (!regex || regex.test(keyRef)) {\n        if (typeof sch == \"string\") {\n          delete schemas[keyRef]\n        } else if (sch && !sch.meta) {\n          this._cache.delete(sch.schema)\n          delete schemas[keyRef]\n        }\n      }\n    }\n  }\n\n  _addSchema(\n    schema: AnySchema,\n    meta?: boolean,\n    baseId?: string,\n    validateSchema = this.opts.validateSchema,\n    addSchema = this.opts.addUsedSchema\n  ): SchemaEnv {\n    let id: string | undefined\n    const {schemaId} = this.opts\n    if (typeof schema == \"object\") {\n      id = schema[schemaId]\n    } else {\n      if (this.opts.jtd) throw new Error(\"schema must be object\")\n      else if (typeof schema != \"boolean\") throw new Error(\"schema must be object or boolean\")\n    }\n    let sch = this._cache.get(schema)\n    if (sch !== undefined) return sch\n\n    baseId = normalizeId(id || baseId)\n    const localRefs = getSchemaRefs.call(this, schema, baseId)\n    sch = new SchemaEnv({schema, schemaId, meta, baseId, localRefs})\n    this._cache.set(sch.schema, sch)\n    if (addSchema && !baseId.startsWith(\"#\")) {\n      // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n      if (baseId) this._checkUnique(baseId)\n      this.refs[baseId] = sch\n    }\n    if (validateSchema) this.validateSchema(schema, true)\n    return sch\n  }\n\n  private _checkUnique(id: string): void {\n    if (this.schemas[id] || this.refs[id]) {\n      throw new Error(`schema with key or id \"${id}\" already exists`)\n    }\n  }\n\n  private _compileSchemaEnv(sch: SchemaEnv): AnyValidateFunction {\n    if (sch.meta) this._compileMetaSchema(sch)\n    else compileSchema.call(this, sch)\n\n    /* istanbul ignore if */\n    if (!sch.validate) throw new Error(\"ajv implementation error\")\n    return sch.validate\n  }\n\n  private _compileMetaSchema(sch: SchemaEnv): void {\n    const currentOpts = this.opts\n    this.opts = this._metaOpts\n    try {\n      compileSchema.call(this, sch)\n    } finally {\n      this.opts = currentOpts\n    }\n  }\n}\n\nexport interface ErrorsTextOptions {\n  separator?: string\n  dataVar?: string\n}\n\nfunction checkOptions(\n  this: Ajv,\n  checkOpts: OptionsInfo<RemovedOptions | DeprecatedOptions>,\n  options: Options & RemovedOptions,\n  msg: string,\n  log: \"warn\" | \"error\" = \"error\"\n): void {\n  for (const key in checkOpts) {\n    const opt = key as keyof typeof checkOpts\n    if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`)\n  }\n}\n\nfunction getSchEnv(this: Ajv, keyRef: string): SchemaEnv | string | undefined {\n  keyRef = normalizeId(keyRef) // TODO tests fail without this line\n  return this.schemas[keyRef] || this.refs[keyRef]\n}\n\nfunction addInitialSchemas(this: Ajv): void {\n  const optsSchemas = this.opts.schemas\n  if (!optsSchemas) return\n  if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas)\n  else for (const key in optsSchemas) this.addSchema(optsSchemas[key] as AnySchema, key)\n}\n\nfunction addInitialFormats(this: Ajv): void {\n  for (const name in this.opts.formats) {\n    const format = this.opts.formats[name]\n    if (format) this.addFormat(name, format)\n  }\n}\n\nfunction addInitialKeywords(\n  this: Ajv,\n  defs: Vocabulary | {[K in string]?: KeywordDefinition}\n): void {\n  if (Array.isArray(defs)) {\n    this.addVocabulary(defs)\n    return\n  }\n  this.logger.warn(\"keywords option as map is deprecated, pass array\")\n  for (const keyword in defs) {\n    const def = defs[keyword] as KeywordDefinition\n    if (!def.keyword) def.keyword = keyword\n    this.addKeyword(def)\n  }\n}\n\nfunction getMetaSchemaOptions(this: Ajv): InstanceOptions {\n  const metaOpts = {...this.opts}\n  for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]\n  return metaOpts\n}\n\nconst noLogs = {log() {}, warn() {}, error() {}}\n\nfunction getLogger(logger?: Partial<Logger> | false): Logger {\n  if (logger === false) return noLogs\n  if (logger === undefined) return console\n  if (logger.log && logger.warn && logger.error) return logger as Logger\n  throw new Error(\"logger must implement log, warn and error methods\")\n}\n\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i\n\nfunction checkKeyword(this: Ajv, keyword: string | string[], def?: KeywordDefinition): void {\n  const {RULES} = this\n  eachItem(keyword, (kwd) => {\n    if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`)\n    if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`)\n  })\n  if (!def) return\n  if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n    throw new Error('$data keyword must have \"code\" or \"validate\" function')\n  }\n}\n\nfunction addRule(\n  this: Ajv,\n  keyword: string,\n  definition?: AddedKeywordDefinition,\n  dataType?: JSONType\n): void {\n  const post = definition?.post\n  if (dataType && post) throw new Error('keyword with \"post\" flag cannot have \"type\"')\n  const {RULES} = this\n  let ruleGroup = post ? RULES.post : RULES.rules.find(({type: t}) => t === dataType)\n  if (!ruleGroup) {\n    ruleGroup = {type: dataType, rules: []}\n    RULES.rules.push(ruleGroup)\n  }\n  RULES.keywords[keyword] = true\n  if (!definition) return\n\n  const rule: Rule = {\n    keyword,\n    definition: {\n      ...definition,\n      type: getJSONTypes(definition.type),\n      schemaType: getJSONTypes(definition.schemaType),\n    },\n  }\n  if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before)\n  else ruleGroup.rules.push(rule)\n  RULES.all[keyword] = rule\n  definition.implements?.forEach((kwd) => this.addKeyword(kwd))\n}\n\nfunction addBeforeRule(this: Ajv, ruleGroup: RuleGroup, rule: Rule, before: string): void {\n  const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before)\n  if (i >= 0) {\n    ruleGroup.rules.splice(i, 0, rule)\n  } else {\n    ruleGroup.rules.push(rule)\n    this.logger.warn(`rule ${before} is not defined`)\n  }\n}\n\nfunction keywordMetaschema(this: Ajv, def: KeywordDefinition): void {\n  let {metaSchema} = def\n  if (metaSchema === undefined) return\n  if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema)\n  def.validateSchema = this.compile(metaSchema, true)\n}\n\nconst $dataRef = {\n  $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n}\n\nfunction schemaOrData(schema: AnySchema): AnySchemaObject {\n  return {anyOf: [schema, $dataRef]}\n}\n", "import type {CodeKeywordDefinition} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"id\",\n  code() {\n    throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID')\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {callValidateCode} from \"../code\"\nimport {_, nil, stringify, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {SchemaEnv, resolveRef} from \"../../compile\"\nimport {mergeEvaluated} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$ref\",\n  schemaType: \"string\",\n  code(cxt: KeywordCxt): void {\n    const {gen, schema: $ref, it} = cxt\n    const {baseId, schemaEnv: env, validateName, opts, self} = it\n    const {root} = env\n    if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId) return callRootRef()\n    const schOrEnv = resolveRef.call(self, root, baseId, $ref)\n    if (schOrEnv === undefined) throw new MissingRefError(it.opts.uriResolver, baseId, $ref)\n    if (schOrEnv instanceof SchemaEnv) return callValidate(schOrEnv)\n    return inlineRefSchema(schOrEnv)\n\n    function callRootRef(): void {\n      if (env === root) return callRef(cxt, validateName, env, env.$async)\n      const rootName = gen.scopeValue(\"root\", {ref: root})\n      return callRef(cxt, _`${rootName}.validate`, root, root.$async)\n    }\n\n    function callValidate(sch: SchemaEnv): void {\n      const v = getValidate(cxt, sch)\n      callRef(cxt, v, sch, sch.$async)\n    }\n\n    function inlineRefSchema(sch: AnySchema): void {\n      const schName = gen.scopeValue(\n        \"schema\",\n        opts.code.source === true ? {ref: sch, code: stringify(sch)} : {ref: sch}\n      )\n      const valid = gen.name(\"valid\")\n      const schCxt = cxt.subschema(\n        {\n          schema: sch,\n          dataTypes: [],\n          schemaPath: nil,\n          topSchemaRef: schName,\n          errSchemaPath: $ref,\n        },\n        valid\n      )\n      cxt.mergeEvaluated(schCxt)\n      cxt.ok(valid)\n    }\n  },\n}\n\nexport function getValidate(cxt: KeywordCxt, sch: SchemaEnv): Code {\n  const {gen} = cxt\n  return sch.validate\n    ? gen.scopeValue(\"validate\", {ref: sch.validate})\n    : _`${gen.scopeValue(\"wrapper\", {ref: sch})}.validate`\n}\n\nexport function callRef(cxt: KeywordCxt, v: Code, sch?: SchemaEnv, $async?: boolean): void {\n  const {gen, it} = cxt\n  const {allErrors, schemaEnv: env, opts} = it\n  const passCxt = opts.passContext ? N.this : nil\n  if ($async) callAsyncRef()\n  else callSyncRef()\n\n  function callAsyncRef(): void {\n    if (!env.$async) throw new Error(\"async schema referenced by sync schema\")\n    const valid = gen.let(\"valid\")\n    gen.try(\n      () => {\n        gen.code(_`await ${callValidateCode(cxt, v, passCxt)}`)\n        addEvaluatedFrom(v) // TODO will not work with async, it has to be returned with the result\n        if (!allErrors) gen.assign(valid, true)\n      },\n      (e) => {\n        gen.if(_`!(${e} instanceof ${it.ValidationError as Name})`, () => gen.throw(e))\n        addErrorsFrom(e)\n        if (!allErrors) gen.assign(valid, false)\n      }\n    )\n    cxt.ok(valid)\n  }\n\n  function callSyncRef(): void {\n    cxt.result(\n      callValidateCode(cxt, v, passCxt),\n      () => addEvaluatedFrom(v),\n      () => addErrorsFrom(v)\n    )\n  }\n\n  function addErrorsFrom(source: Code): void {\n    const errs = _`${source}.errors`\n    gen.assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`) // TODO tagged\n    gen.assign(N.errors, _`${N.vErrors}.length`)\n  }\n\n  function addEvaluatedFrom(source: Code): void {\n    if (!it.opts.unevaluated) return\n    const schEvaluated = sch?.validate?.evaluated\n    // TODO refactor\n    if (it.props !== true) {\n      if (schEvaluated && !schEvaluated.dynamicProps) {\n        if (schEvaluated.props !== undefined) {\n          it.props = mergeEvaluated.props(gen, schEvaluated.props, it.props)\n        }\n      } else {\n        const props = gen.var(\"props\", _`${source}.evaluated.props`)\n        it.props = mergeEvaluated.props(gen, props, it.props, Name)\n      }\n    }\n    if (it.items !== true) {\n      if (schEvaluated && !schEvaluated.dynamicItems) {\n        if (schEvaluated.items !== undefined) {\n          it.items = mergeEvaluated.items(gen, schEvaluated.items, it.items)\n        }\n      } else {\n        const items = gen.var(\"items\", _`${source}.evaluated.items`)\n        it.items = mergeEvaluated.items(gen, items, it.items, Name)\n      }\n    }\n  }\n}\n\nexport default def\n", "import type {Vocabulary} from \"../../types\"\nimport idKeyword from \"./id\"\nimport refKeyword from \"./ref\"\n\nconst core: Vocabulary = [\n  \"$schema\",\n  \"$id\",\n  \"$defs\",\n  \"$vocabulary\",\n  {keyword: \"$comment\"},\n  \"definitions\",\n  idKeyword,\n  refKeyword,\n]\n\nexport default core\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators, Code} from \"../../compile/codegen\"\n\nconst ops = operators\n\ntype Kwd = \"maximum\" | \"minimum\" | \"exclusiveMaximum\" | \"exclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n  maximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n  minimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n  exclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n  exclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitNumberError = ErrorObject<\n  Kwd,\n  {limit: number; comparison: Comparison},\n  number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({keyword, schemaCode}) => str`must be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n  params: ({keyword, schemaCode}) =>\n    _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: Object.keys(KWDs),\n  type: \"number\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    cxt.fail$data(_`${data} ${KWDs[keyword as Kwd].fail} ${schemaCode} || isNaN(${data})`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type MultipleOfError = ErrorObject<\n  \"multipleOf\",\n  {multipleOf: number},\n  number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must be multiple of ${schemaCode}`,\n  params: ({schemaCode}) => _`{multipleOf: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"multipleOf\",\n  type: \"number\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, schemaCode, it} = cxt\n    // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n    const prec = it.opts.multipleOfPrecision\n    const res = gen.let(\"res\")\n    const invalid = prec\n      ? _`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n      : _`${res} !== parseInt(${res})`\n    cxt.fail$data(_`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`)\n  },\n}\n\nexport default def\n", "// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nexport default function ucs2length(str: string): number {\n  const len = str.length\n  let length = 0\n  let pos = 0\n  let value: number\n  while (pos < len) {\n    length++\n    value = str.charCodeAt(pos++)\n    if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n      // high surrogate, and there is a next character\n      value = str.charCodeAt(pos)\n      if ((value & 0xfc00) === 0xdc00) pos++ // low surrogate\n    }\n  }\n  return length\n}\n\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default'\n", "import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport ucs2length from \"../../runtime/ucs2length\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} characters`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxLength\", \"minLength\"],\n  type: \"string\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode, it} = cxt\n    const op = keyword === \"maxLength\" ? operators.GT : operators.LT\n    const len =\n      it.opts.unicode === false ? _`${data}.length` : _`${useFunc(cxt.gen, ucs2length)}(${data})`\n    cxt.fail$data(_`${len} ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {usePattern} from \"../code\"\nimport {useFunc} from \"../../compile/util\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type PatternError = ErrorObject<\"pattern\", {pattern: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must match pattern \"${schemaCode}\"`,\n  params: ({schemaCode}) => _`{pattern: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"pattern\",\n  type: \"string\",\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    const u = it.opts.unicodeRegExp ? \"u\" : \"\"\n    if ($data) {\n      const {regExp} = it.opts.code\n      const regExpCode = regExp.code === \"new RegExp\" ? _`new RegExp` : useFunc(gen, regExp)\n      const valid = gen.let(\"valid\")\n      gen.try(\n        () => gen.assign(valid, _`${regExpCode}(${schemaCode}, ${u}).test(${data})`),\n        () => gen.assign(valid, false)\n      )\n      cxt.fail$data(_`!${valid}`)\n    } else {\n      const regExp = usePattern(cxt, schema)\n      cxt.fail$data(_`!${regExp}.test(${data})`)\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} properties`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxProperties\", \"minProperties\"],\n  type: \"object\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    const op = keyword === \"maxProperties\" ? operators.GT : operators.LT\n    cxt.fail$data(_`Object.keys(${data}).length ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {\n  checkReportMissingProp,\n  checkMissingProp,\n  reportMissingProp,\n  propertyInData,\n  noPropertyInData,\n} from \"../code\"\nimport {_, str, nil, not, Name, Code} from \"../../compile/codegen\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nexport type RequiredError = ErrorObject<\n  \"required\",\n  {missingProperty: string},\n  string[] | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {missingProperty}}) => str`must have required property '${missingProperty}'`,\n  params: ({params: {missingProperty}}) => _`{missingProperty: ${missingProperty}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"required\",\n  type: \"object\",\n  schemaType: \"array\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, schemaCode, data, $data, it} = cxt\n    const {opts} = it\n    if (!$data && schema.length === 0) return\n    const useLoop = schema.length >= opts.loopRequired\n    if (it.allErrors) allErrorsMode()\n    else exitOnErrorMode()\n\n    if (opts.strictRequired) {\n      const props = cxt.parentSchema.properties\n      const {definedProperties} = cxt.it\n      for (const requiredKey of schema) {\n        if (props?.[requiredKey] === undefined && !definedProperties.has(requiredKey)) {\n          const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n          const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`\n          checkStrictMode(it, msg, it.opts.strictRequired)\n        }\n      }\n    }\n\n    function allErrorsMode(): void {\n      if (useLoop || $data) {\n        cxt.block$data(nil, loopAllRequired)\n      } else {\n        for (const prop of schema) {\n          checkReportMissingProp(cxt, prop)\n        }\n      }\n    }\n\n    function exitOnErrorMode(): void {\n      const missing = gen.let(\"missing\")\n      if (useLoop || $data) {\n        const valid = gen.let(\"valid\", true)\n        cxt.block$data(valid, () => loopUntilMissing(missing, valid))\n        cxt.ok(valid)\n      } else {\n        gen.if(checkMissingProp(cxt, schema, missing))\n        reportMissingProp(cxt, missing)\n        gen.else()\n      }\n    }\n\n    function loopAllRequired(): void {\n      gen.forOf(\"prop\", schemaCode as Code, (prop) => {\n        cxt.setParams({missingProperty: prop})\n        gen.if(noPropertyInData(gen, data, prop, opts.ownProperties), () => cxt.error())\n      })\n    }\n\n    function loopUntilMissing(missing: Name, valid: Name): void {\n      cxt.setParams({missingProperty: missing})\n      gen.forOf(\n        missing,\n        schemaCode as Code,\n        () => {\n          gen.assign(valid, propertyInData(gen, data, missing, opts.ownProperties))\n          gen.if(not(valid), () => {\n            cxt.error()\n            gen.break()\n          })\n        },\n        nil\n      )\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} items`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxItems\", \"minItems\"],\n  type: \"array\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    const op = keyword === \"maxItems\" ? operators.GT : operators.LT\n    cxt.fail$data(_`${data}.length ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n", "// https://github.com/ajv-validator/ajv/issues/889\nimport * as equal from \"fast-deep-equal\"\n\ntype Equal = typeof equal & {code: string}\n;(equal as Equal).code = 'require(\"ajv/dist/runtime/equal\").default'\n\nexport default equal as Equal\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkDataTypes, getSchemaTypes, DataType} from \"../../compile/validate/dataType\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type UniqueItemsError = ErrorObject<\n  \"uniqueItems\",\n  {i: number; j: number},\n  boolean | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {i, j}}) =>\n    str`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n  params: ({params: {i, j}}) => _`{i: ${i}, j: ${j}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"uniqueItems\",\n  type: \"array\",\n  schemaType: \"boolean\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, parentSchema, schemaCode, it} = cxt\n    if (!$data && !schema) return\n    const valid = gen.let(\"valid\")\n    const itemTypes = parentSchema.items ? getSchemaTypes(parentSchema.items) : []\n    cxt.block$data(valid, validateUniqueItems, _`${schemaCode} === false`)\n    cxt.ok(valid)\n\n    function validateUniqueItems(): void {\n      const i = gen.let(\"i\", _`${data}.length`)\n      const j = gen.let(\"j\")\n      cxt.setParams({i, j})\n      gen.assign(valid, true)\n      gen.if(_`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j))\n    }\n\n    function canOptimize(): boolean {\n      return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\")\n    }\n\n    function loopN(i: Name, j: Name): void {\n      const item = gen.name(\"item\")\n      const wrongType = checkDataTypes(itemTypes, item, it.opts.strictNumbers, DataType.Wrong)\n      const indices = gen.const(\"indices\", _`{}`)\n      gen.for(_`;${i}--;`, () => {\n        gen.let(item, _`${data}[${i}]`)\n        gen.if(wrongType, _`continue`)\n        if (itemTypes.length > 1) gen.if(_`typeof ${item} == \"string\"`, _`${item} += \"_\"`)\n        gen\n          .if(_`typeof ${indices}[${item}] == \"number\"`, () => {\n            gen.assign(j, _`${indices}[${item}]`)\n            cxt.error()\n            gen.assign(valid, false).break()\n          })\n          .code(_`${indices}[${item}] = ${i}`)\n      })\n    }\n\n    function loopN2(i: Name, j: Name): void {\n      const eql = useFunc(gen, equal)\n      const outer = gen.name(\"outer\")\n      gen.label(outer).for(_`;${i}--;`, () =>\n        gen.for(_`${j} = ${i}; ${j}--;`, () =>\n          gen.if(_`${eql}(${data}[${i}], ${data}[${j}])`, () => {\n            cxt.error()\n            gen.assign(valid, false).break(outer)\n          })\n        )\n      )\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type ConstError = ErrorObject<\"const\", {allowedValue: any}>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must be equal to constant\",\n  params: ({schemaCode}) => _`{allowedValue: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"const\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schemaCode, schema} = cxt\n    if ($data || (schema && typeof schema == \"object\")) {\n      cxt.fail$data(_`!${useFunc(gen, equal)}(${data}, ${schemaCode})`)\n    } else {\n      cxt.fail(_`${schema} !== ${data}`)\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, or, Name, Code} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type EnumError = ErrorObject<\"enum\", {allowedValues: any[]}, any[] | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must be equal to one of the allowed values\",\n  params: ({schemaCode}) => _`{allowedValues: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"enum\",\n  schemaType: \"array\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    if (!$data && schema.length === 0) throw new Error(\"enum must have non-empty array\")\n    const useLoop = schema.length >= it.opts.loopEnum\n    let eql: Name | undefined\n    const getEql = (): Name => (eql ??= useFunc(gen, equal))\n\n    let valid: Code\n    if (useLoop || $data) {\n      valid = gen.let(\"valid\")\n      cxt.block$data(valid, loopEnum)\n    } else {\n      /* istanbul ignore if */\n      if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n      const vSchema = gen.const(\"vSchema\", schemaCode)\n      valid = or(...schema.map((_x: unknown, i: number) => equalCode(vSchema, i)))\n    }\n    cxt.pass(valid)\n\n    function loopEnum(): void {\n      gen.assign(valid, false)\n      gen.forOf(\"v\", schemaCode as Code, (v) =>\n        gen.if(_`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())\n      )\n    }\n\n    function equalCode(vSchema: Name, i: number): Code {\n      const sch = schema[i]\n      return typeof sch === \"object\" && sch !== null\n        ? _`${getEql()}(${data}, ${vSchema}[${i}])`\n        : _`${data} === ${sch}`\n    }\n  },\n}\n\nexport default def\n", "import type {ErrorObject, Vocabulary} from \"../../types\"\nimport limitNumber, {LimitNumberError} from \"./limitNumber\"\nimport multipleOf, {MultipleOfError} from \"./multipleOf\"\nimport limitLength from \"./limitLength\"\nimport pattern, {PatternError} from \"./pattern\"\nimport limitProperties from \"./limitProperties\"\nimport required, {RequiredError} from \"./required\"\nimport limitItems from \"./limitItems\"\nimport uniqueItems, {UniqueItemsError} from \"./uniqueItems\"\nimport constKeyword, {ConstError} from \"./const\"\nimport enumKeyword, {EnumError} from \"./enum\"\n\nconst validation: Vocabulary = [\n  // number\n  limitNumber,\n  multipleOf,\n  // string\n  limitLength,\n  pattern,\n  // object\n  limitProperties,\n  required,\n  // array\n  limitItems,\n  uniqueItems,\n  // any\n  {keyword: \"type\", schemaType: [\"string\", \"array\"]},\n  {keyword: \"nullable\", schemaType: \"boolean\"},\n  constKeyword,\n  enumKeyword,\n]\n\nexport default validation\n\ntype LimitError = ErrorObject<\n  \"maxItems\" | \"minItems\" | \"minProperties\" | \"maxProperties\" | \"minLength\" | \"maxLength\",\n  {limit: number},\n  number | {$data: string}\n>\n\nexport type ValidationKeywordError =\n  | LimitError\n  | LimitNumberError\n  | MultipleOfError\n  | PatternError\n  | RequiredError\n  | UniqueItemsError\n  | ConstError\n  | EnumError\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type AdditionalItemsError = ErrorObject<\"additionalItems\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n  params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"additionalItems\" as const,\n  type: \"array\",\n  schemaType: [\"boolean\", \"object\"],\n  before: \"uniqueItems\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {parentSchema, it} = cxt\n    const {items} = parentSchema\n    if (!Array.isArray(items)) {\n      checkStrictMode(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas')\n      return\n    }\n    validateAdditionalItems(cxt, items)\n  },\n}\n\nexport function validateAdditionalItems(cxt: KeywordCxt, items: AnySchema[]): void {\n  const {gen, schema, data, keyword, it} = cxt\n  it.items = true\n  const len = gen.const(\"len\", _`${data}.length`)\n  if (schema === false) {\n    cxt.setParams({len: items.length})\n    cxt.pass(_`${len} <= ${items.length}`)\n  } else if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n    const valid = gen.var(\"valid\", _`${len} <= ${items.length}`) // TODO var\n    gen.if(not(valid), () => validateItems(valid))\n    cxt.ok(valid)\n  }\n\n  function validateItems(valid: Name): void {\n    gen.forRange(\"i\", items.length, len, (i) => {\n      cxt.subschema({keyword, dataProp: i, dataPropType: Type.Num}, valid)\n      if (!it.allErrors) gen.if(not(valid), () => gen.break())\n    })\n  }\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, AnySchema, AnySchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {alwaysValidSchema, mergeEvaluated, checkStrictMode} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"items\",\n  type: \"array\",\n  schemaType: [\"object\", \"array\", \"boolean\"],\n  before: \"uniqueItems\",\n  code(cxt: KeywordCxt) {\n    const {schema, it} = cxt\n    if (Array.isArray(schema)) return validateTuple(cxt, \"additionalItems\", schema)\n    it.items = true\n    if (alwaysValidSchema(it, schema)) return\n    cxt.ok(validateArray(cxt))\n  },\n}\n\nexport function validateTuple(\n  cxt: KeywordCxt,\n  extraItems: string,\n  schArr: AnySchema[] = cxt.schema\n): void {\n  const {gen, parentSchema, data, keyword, it} = cxt\n  checkStrictTuple(parentSchema)\n  if (it.opts.unevaluated && schArr.length && it.items !== true) {\n    it.items = mergeEvaluated.items(gen, schArr.length, it.items)\n  }\n  const valid = gen.name(\"valid\")\n  const len = gen.const(\"len\", _`${data}.length`)\n  schArr.forEach((sch: AnySchema, i: number) => {\n    if (alwaysValidSchema(it, sch)) return\n    gen.if(_`${len} > ${i}`, () =>\n      cxt.subschema(\n        {\n          keyword,\n          schemaProp: i,\n          dataProp: i,\n        },\n        valid\n      )\n    )\n    cxt.ok(valid)\n  })\n\n  function checkStrictTuple(sch: AnySchemaObject): void {\n    const {opts, errSchemaPath} = it\n    const l = schArr.length\n    const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false)\n    if (opts.strictTuples && !fullTuple) {\n      const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`\n      checkStrictMode(it, msg, opts.strictTuples)\n    }\n  }\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateTuple} from \"./items\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"prefixItems\",\n  type: \"array\",\n  schemaType: [\"array\"],\n  before: \"uniqueItems\",\n  code: (cxt) => validateTuple(cxt, \"items\"),\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\nimport {validateAdditionalItems} from \"./additionalItems\"\n\nexport type ItemsError = ErrorObject<\"items\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n  params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"items\",\n  type: \"array\",\n  schemaType: [\"object\", \"boolean\"],\n  before: \"uniqueItems\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {schema, parentSchema, it} = cxt\n    const {prefixItems} = parentSchema\n    it.items = true\n    if (alwaysValidSchema(it, schema)) return\n    if (prefixItems) validateAdditionalItems(cxt, prefixItems)\n    else cxt.ok(validateArray(cxt))\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type ContainsError = ErrorObject<\n  \"contains\",\n  {minContains: number; maxContains?: number},\n  AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {min, max}}) =>\n    max === undefined\n      ? str`must contain at least ${min} valid item(s)`\n      : str`must contain at least ${min} and no more than ${max} valid item(s)`,\n  params: ({params: {min, max}}) =>\n    max === undefined ? _`{minContains: ${min}}` : _`{minContains: ${min}, maxContains: ${max}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"contains\",\n  type: \"array\",\n  schemaType: [\"object\", \"boolean\"],\n  before: \"uniqueItems\",\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, data, it} = cxt\n    let min: number\n    let max: number | undefined\n    const {minContains, maxContains} = parentSchema\n    if (it.opts.next) {\n      min = minContains === undefined ? 1 : minContains\n      max = maxContains\n    } else {\n      min = 1\n    }\n    const len = gen.const(\"len\", _`${data}.length`)\n    cxt.setParams({min, max})\n    if (max === undefined && min === 0) {\n      checkStrictMode(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`)\n      return\n    }\n    if (max !== undefined && min > max) {\n      checkStrictMode(it, `\"minContains\" > \"maxContains\" is always invalid`)\n      cxt.fail()\n      return\n    }\n    if (alwaysValidSchema(it, schema)) {\n      let cond = _`${len} >= ${min}`\n      if (max !== undefined) cond = _`${cond} && ${len} <= ${max}`\n      cxt.pass(cond)\n      return\n    }\n\n    it.items = true\n    const valid = gen.name(\"valid\")\n    if (max === undefined && min === 1) {\n      validateItems(valid, () => gen.if(valid, () => gen.break()))\n    } else if (min === 0) {\n      gen.let(valid, true)\n      if (max !== undefined) gen.if(_`${data}.length > 0`, validateItemsWithCount)\n    } else {\n      gen.let(valid, false)\n      validateItemsWithCount()\n    }\n    cxt.result(valid, () => cxt.reset())\n\n    function validateItemsWithCount(): void {\n      const schValid = gen.name(\"_valid\")\n      const count = gen.let(\"count\", 0)\n      validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)))\n    }\n\n    function validateItems(_valid: Name, block: () => void): void {\n      gen.forRange(\"i\", 0, len, (i) => {\n        cxt.subschema(\n          {\n            keyword: \"contains\",\n            dataProp: i,\n            dataPropType: Type.Num,\n            compositeRule: true,\n          },\n          _valid\n        )\n        block()\n      })\n    }\n\n    function checkLimits(count: Name): void {\n      gen.code(_`${count}++`)\n      if (max === undefined) {\n        gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true).break())\n      } else {\n        gen.if(_`${count} > ${max}`, () => gen.assign(valid, false).break())\n        if (min === 1) gen.assign(valid, true)\n        else gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true))\n      }\n    }\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  SchemaMap,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {checkReportMissingProp, checkMissingProp, reportMissingProp, propertyInData} from \"../code\"\n\nexport type PropertyDependencies = {[K in string]?: string[]}\n\nexport interface DependenciesErrorParams {\n  property: string\n  missingProperty: string\n  depsCount: number\n  deps: string // TODO change to string[]\n}\n\ntype SchemaDependencies = SchemaMap\n\nexport type DependenciesError = ErrorObject<\n  \"dependencies\",\n  DependenciesErrorParams,\n  {[K in string]?: string[] | AnySchema}\n>\n\nexport const error: KeywordErrorDefinition = {\n  message: ({params: {property, depsCount, deps}}) => {\n    const property_ies = depsCount === 1 ? \"property\" : \"properties\"\n    return str`must have ${property_ies} ${deps} when property ${property} is present`\n  },\n  params: ({params: {property, depsCount, deps, missingProperty}}) =>\n    _`{property: ${property},\n    missingProperty: ${missingProperty},\n    depsCount: ${depsCount},\n    deps: ${deps}}`, // TODO change to reference\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"dependencies\",\n  type: \"object\",\n  schemaType: \"object\",\n  error,\n  code(cxt: KeywordCxt) {\n    const [propDeps, schDeps] = splitDependencies(cxt)\n    validatePropertyDeps(cxt, propDeps)\n    validateSchemaDeps(cxt, schDeps)\n  },\n}\n\nfunction splitDependencies({schema}: KeywordCxt): [PropertyDependencies, SchemaDependencies] {\n  const propertyDeps: PropertyDependencies = {}\n  const schemaDeps: SchemaDependencies = {}\n  for (const key in schema) {\n    if (key === \"__proto__\") continue\n    const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps\n    deps[key] = schema[key]\n  }\n  return [propertyDeps, schemaDeps]\n}\n\nexport function validatePropertyDeps(\n  cxt: KeywordCxt,\n  propertyDeps: {[K in string]?: string[]} = cxt.schema\n): void {\n  const {gen, data, it} = cxt\n  if (Object.keys(propertyDeps).length === 0) return\n  const missing = gen.let(\"missing\")\n  for (const prop in propertyDeps) {\n    const deps = propertyDeps[prop] as string[]\n    if (deps.length === 0) continue\n    const hasProperty = propertyInData(gen, data, prop, it.opts.ownProperties)\n    cxt.setParams({\n      property: prop,\n      depsCount: deps.length,\n      deps: deps.join(\", \"),\n    })\n    if (it.allErrors) {\n      gen.if(hasProperty, () => {\n        for (const depProp of deps) {\n          checkReportMissingProp(cxt, depProp)\n        }\n      })\n    } else {\n      gen.if(_`${hasProperty} && (${checkMissingProp(cxt, deps, missing)})`)\n      reportMissingProp(cxt, missing)\n      gen.else()\n    }\n  }\n}\n\nexport function validateSchemaDeps(cxt: KeywordCxt, schemaDeps: SchemaMap = cxt.schema): void {\n  const {gen, data, keyword, it} = cxt\n  const valid = gen.name(\"valid\")\n  for (const prop in schemaDeps) {\n    if (alwaysValidSchema(it, schemaDeps[prop] as AnySchema)) continue\n    gen.if(\n      propertyInData(gen, data, prop, it.opts.ownProperties),\n      () => {\n        const schCxt = cxt.subschema({keyword, schemaProp: prop}, valid)\n        cxt.mergeValidEvaluated(schCxt, valid)\n      },\n      () => gen.var(valid, true) // TODO var\n    )\n    cxt.ok(valid)\n  }\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, not} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type PropertyNamesError = ErrorObject<\"propertyNames\", {propertyName: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: \"property name must be valid\",\n  params: ({params}) => _`{propertyName: ${params.propertyName}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"propertyNames\",\n  type: \"object\",\n  schemaType: [\"object\", \"boolean\"],\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, data, it} = cxt\n    if (alwaysValidSchema(it, schema)) return\n    const valid = gen.name(\"valid\")\n\n    gen.forIn(\"key\", data, (key) => {\n      cxt.setParams({propertyName: key})\n      cxt.subschema(\n        {\n          keyword: \"propertyNames\",\n          data: key,\n          dataTypes: [\"string\"],\n          propertyName: key,\n          compositeRule: true,\n        },\n        valid\n      )\n      gen.if(not(valid), () => {\n        cxt.error(true)\n        if (!it.allErrors) gen.break()\n      })\n    })\n\n    cxt.ok(valid)\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  AddedKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport {allSchemaProperties, usePattern, isOwnProperty} from \"../code\"\nimport {_, nil, or, not, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport type {SubschemaArgs} from \"../../compile/validate/subschema\"\nimport {alwaysValidSchema, schemaRefOrVal, Type} from \"../../compile/util\"\n\nexport type AdditionalPropertiesError = ErrorObject<\n  \"additionalProperties\",\n  {additionalProperty: string},\n  AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must NOT have additional properties\",\n  params: ({params}) => _`{additionalProperty: ${params.additionalProperty}}`,\n}\n\nconst def: CodeKeywordDefinition & AddedKeywordDefinition = {\n  keyword: \"additionalProperties\",\n  type: [\"object\"],\n  schemaType: [\"boolean\", \"object\"],\n  allowUndefined: true,\n  trackErrors: true,\n  error,\n  code(cxt) {\n    const {gen, schema, parentSchema, data, errsCount, it} = cxt\n    /* istanbul ignore if */\n    if (!errsCount) throw new Error(\"ajv implementation error\")\n    const {allErrors, opts} = it\n    it.props = true\n    if (opts.removeAdditional !== \"all\" && alwaysValidSchema(it, schema)) return\n    const props = allSchemaProperties(parentSchema.properties)\n    const patProps = allSchemaProperties(parentSchema.patternProperties)\n    checkAdditionalProperties()\n    cxt.ok(_`${errsCount} === ${N.errors}`)\n\n    function checkAdditionalProperties(): void {\n      gen.forIn(\"key\", data, (key: Name) => {\n        if (!props.length && !patProps.length) additionalPropertyCode(key)\n        else gen.if(isAdditional(key), () => additionalPropertyCode(key))\n      })\n    }\n\n    function isAdditional(key: Name): Code {\n      let definedProp: Code\n      if (props.length > 8) {\n        // TODO maybe an option instead of hard-coded 8?\n        const propsSchema = schemaRefOrVal(it, parentSchema.properties, \"properties\")\n        definedProp = isOwnProperty(gen, propsSchema as Code, key)\n      } else if (props.length) {\n        definedProp = or(...props.map((p) => _`${key} === ${p}`))\n      } else {\n        definedProp = nil\n      }\n      if (patProps.length) {\n        definedProp = or(definedProp, ...patProps.map((p) => _`${usePattern(cxt, p)}.test(${key})`))\n      }\n      return not(definedProp)\n    }\n\n    function deleteAdditional(key: Name): void {\n      gen.code(_`delete ${data}[${key}]`)\n    }\n\n    function additionalPropertyCode(key: Name): void {\n      if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n        deleteAdditional(key)\n        return\n      }\n\n      if (schema === false) {\n        cxt.setParams({additionalProperty: key})\n        cxt.error()\n        if (!allErrors) gen.break()\n        return\n      }\n\n      if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n        const valid = gen.name(\"valid\")\n        if (opts.removeAdditional === \"failing\") {\n          applyAdditionalSchema(key, valid, false)\n          gen.if(not(valid), () => {\n            cxt.reset()\n            deleteAdditional(key)\n          })\n        } else {\n          applyAdditionalSchema(key, valid)\n          if (!allErrors) gen.if(not(valid), () => gen.break())\n        }\n      }\n    }\n\n    function applyAdditionalSchema(key: Name, valid: Name, errors?: false): void {\n      const subschema: SubschemaArgs = {\n        keyword: \"additionalProperties\",\n        dataProp: key,\n        dataPropType: Type.Str,\n      }\n      if (errors === false) {\n        Object.assign(subschema, {\n          compositeRule: true,\n          createErrors: false,\n          allErrors: false,\n        })\n      }\n      cxt.subschema(subschema, valid)\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport {KeywordCxt} from \"../../compile/validate\"\nimport {propertyInData, allSchemaProperties} from \"../code\"\nimport {alwaysValidSchema, toHash, mergeEvaluated} from \"../../compile/util\"\nimport apDef from \"./additionalProperties\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"properties\",\n  type: \"object\",\n  schemaType: \"object\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, data, it} = cxt\n    if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n      apDef.code(new KeywordCxt(it, apDef, \"additionalProperties\"))\n    }\n    const allProps = allSchemaProperties(schema)\n    for (const prop of allProps) {\n      it.definedProperties.add(prop)\n    }\n    if (it.opts.unevaluated && allProps.length && it.props !== true) {\n      it.props = mergeEvaluated.props(gen, toHash(allProps), it.props)\n    }\n    const properties = allProps.filter((p) => !alwaysValidSchema(it, schema[p]))\n    if (properties.length === 0) return\n    const valid = gen.name(\"valid\")\n\n    for (const prop of properties) {\n      if (hasDefault(prop)) {\n        applyPropertySchema(prop)\n      } else {\n        gen.if(propertyInData(gen, data, prop, it.opts.ownProperties))\n        applyPropertySchema(prop)\n        if (!it.allErrors) gen.else().var(valid, true)\n        gen.endIf()\n      }\n      cxt.it.definedProperties.add(prop)\n      cxt.ok(valid)\n    }\n\n    function hasDefault(prop: string): boolean | undefined {\n      return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined\n    }\n\n    function applyPropertySchema(prop: string): void {\n      cxt.subschema(\n        {\n          keyword: \"properties\",\n          schemaProp: prop,\n          dataProp: prop,\n        },\n        valid\n      )\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {allSchemaProperties, usePattern} from \"../code\"\nimport {_, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\nimport {evaluatedPropsToName, Type} from \"../../compile/util\"\nimport {AnySchema} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"patternProperties\",\n  type: \"object\",\n  schemaType: \"object\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, data, parentSchema, it} = cxt\n    const {opts} = it\n    const patterns = allSchemaProperties(schema)\n    const alwaysValidPatterns = patterns.filter((p) =>\n      alwaysValidSchema(it, schema[p] as AnySchema)\n    )\n\n    if (\n      patterns.length === 0 ||\n      (alwaysValidPatterns.length === patterns.length &&\n        (!it.opts.unevaluated || it.props === true))\n    ) {\n      return\n    }\n\n    const checkProperties =\n      opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties\n    const valid = gen.name(\"valid\")\n    if (it.props !== true && !(it.props instanceof Name)) {\n      it.props = evaluatedPropsToName(gen, it.props)\n    }\n    const {props} = it\n    validatePatternProperties()\n\n    function validatePatternProperties(): void {\n      for (const pat of patterns) {\n        if (checkProperties) checkMatchingProperties(pat)\n        if (it.allErrors) {\n          validateProperties(pat)\n        } else {\n          gen.var(valid, true) // TODO var\n          validateProperties(pat)\n          gen.if(valid)\n        }\n      }\n    }\n\n    function checkMatchingProperties(pat: string): void {\n      for (const prop in checkProperties) {\n        if (new RegExp(pat).test(prop)) {\n          checkStrictMode(\n            it,\n            `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`\n          )\n        }\n      }\n    }\n\n    function validateProperties(pat: string): void {\n      gen.forIn(\"key\", data, (key) => {\n        gen.if(_`${usePattern(cxt, pat)}.test(${key})`, () => {\n          const alwaysValid = alwaysValidPatterns.includes(pat)\n          if (!alwaysValid) {\n            cxt.subschema(\n              {\n                keyword: \"patternProperties\",\n                schemaProp: pat,\n                dataProp: key,\n                dataPropType: Type.Str,\n              },\n              valid\n            )\n          }\n\n          if (it.opts.unevaluated && props !== true) {\n            gen.assign(_`${props}[${key}]`, true)\n          } else if (!alwaysValid && !it.allErrors) {\n            // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n            // or if all properties were evaluated (props === true)\n            gen.if(not(valid), () => gen.break())\n          }\n        })\n      })\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type NotKeywordError = ErrorNoParams<\"not\", AnySchema>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"not\",\n  schemaType: [\"object\", \"boolean\"],\n  trackErrors: true,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, it} = cxt\n    if (alwaysValidSchema(it, schema)) {\n      cxt.fail()\n      return\n    }\n\n    const valid = gen.name(\"valid\")\n    cxt.subschema(\n      {\n        keyword: \"not\",\n        compositeRule: true,\n        createErrors: false,\n        allErrors: false,\n      },\n      valid\n    )\n\n    cxt.failResult(\n      valid,\n      () => cxt.reset(),\n      () => cxt.error()\n    )\n  },\n  error: {message: \"must NOT be valid\"},\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport {validateUnion} from \"../code\"\n\nexport type AnyOfError = ErrorNoParams<\"anyOf\", AnySchema[]>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"anyOf\",\n  schemaType: \"array\",\n  trackErrors: true,\n  code: validateUnion,\n  error: {message: \"must match a schema in anyOf\"},\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {SchemaCxt} from \"../../compile\"\n\nexport type OneOfError = ErrorObject<\n  \"oneOf\",\n  {passingSchemas: [number, number] | null},\n  AnySchema[]\n>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must match exactly one schema in oneOf\",\n  params: ({params}) => _`{passingSchemas: ${params.passing}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"oneOf\",\n  schemaType: \"array\",\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, it} = cxt\n    /* istanbul ignore if */\n    if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n    if (it.opts.discriminator && parentSchema.discriminator) return\n    const schArr: AnySchema[] = schema\n    const valid = gen.let(\"valid\", false)\n    const passing = gen.let(\"passing\", null)\n    const schValid = gen.name(\"_valid\")\n    cxt.setParams({passing})\n    // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n\n    gen.block(validateOneOf)\n\n    cxt.result(\n      valid,\n      () => cxt.reset(),\n      () => cxt.error(true)\n    )\n\n    function validateOneOf(): void {\n      schArr.forEach((sch: AnySchema, i: number) => {\n        let schCxt: SchemaCxt | undefined\n        if (alwaysValidSchema(it, sch)) {\n          gen.var(schValid, true)\n        } else {\n          schCxt = cxt.subschema(\n            {\n              keyword: \"oneOf\",\n              schemaProp: i,\n              compositeRule: true,\n            },\n            schValid\n          )\n        }\n\n        if (i > 0) {\n          gen\n            .if(_`${schValid} && ${valid}`)\n            .assign(valid, false)\n            .assign(passing, _`[${passing}, ${i}]`)\n            .else()\n        }\n\n        gen.if(schValid, () => {\n          gen.assign(valid, true)\n          gen.assign(passing, i)\n          if (schCxt) cxt.mergeEvaluated(schCxt, Name)\n        })\n      })\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"allOf\",\n  schemaType: \"array\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, it} = cxt\n    /* istanbul ignore if */\n    if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n    const valid = gen.name(\"valid\")\n    schema.forEach((sch: AnySchema, i: number) => {\n      if (alwaysValidSchema(it, sch)) return\n      const schCxt = cxt.subschema({keyword: \"allOf\", schemaProp: i}, valid)\n      cxt.ok(valid)\n      cxt.mergeEvaluated(schCxt)\n    })\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"../../compile\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\n\nexport type IfKeywordError = ErrorObject<\"if\", {failingKeyword: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params}) => str`must match \"${params.ifClause}\" schema`,\n  params: ({params}) => _`{failingKeyword: ${params.ifClause}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"if\",\n  schemaType: [\"object\", \"boolean\"],\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, parentSchema, it} = cxt\n    if (parentSchema.then === undefined && parentSchema.else === undefined) {\n      checkStrictMode(it, '\"if\" without \"then\" and \"else\" is ignored')\n    }\n    const hasThen = hasSchema(it, \"then\")\n    const hasElse = hasSchema(it, \"else\")\n    if (!hasThen && !hasElse) return\n\n    const valid = gen.let(\"valid\", true)\n    const schValid = gen.name(\"_valid\")\n    validateIf()\n    cxt.reset()\n\n    if (hasThen && hasElse) {\n      const ifClause = gen.let(\"ifClause\")\n      cxt.setParams({ifClause})\n      gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause))\n    } else if (hasThen) {\n      gen.if(schValid, validateClause(\"then\"))\n    } else {\n      gen.if(not(schValid), validateClause(\"else\"))\n    }\n\n    cxt.pass(valid, () => cxt.error(true))\n\n    function validateIf(): void {\n      const schCxt = cxt.subschema(\n        {\n          keyword: \"if\",\n          compositeRule: true,\n          createErrors: false,\n          allErrors: false,\n        },\n        schValid\n      )\n      cxt.mergeEvaluated(schCxt)\n    }\n\n    function validateClause(keyword: string, ifClause?: Name): () => void {\n      return () => {\n        const schCxt = cxt.subschema({keyword}, schValid)\n        gen.assign(valid, schValid)\n        cxt.mergeValidEvaluated(schCxt, valid)\n        if (ifClause) gen.assign(ifClause, _`${keyword}`)\n        else cxt.setParams({ifClause: keyword})\n      }\n    }\n  },\n}\n\nfunction hasSchema(it: SchemaObjCxt, keyword: string): boolean {\n  const schema = it.schema[keyword]\n  return schema !== undefined && !alwaysValidSchema(it, schema)\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"then\", \"else\"],\n  schemaType: [\"object\", \"boolean\"],\n  code({keyword, parentSchema, it}: KeywordCxt) {\n    if (parentSchema.if === undefined) checkStrictMode(it, `\"${keyword}\" without \"if\" is ignored`)\n  },\n}\n\nexport default def\n", "import type {ErrorNoParams, Vocabulary} from \"../../types\"\nimport additionalItems, {AdditionalItemsError} from \"./additionalItems\"\nimport prefixItems from \"./prefixItems\"\nimport items from \"./items\"\nimport items2020, {ItemsError} from \"./items2020\"\nimport contains, {ContainsError} from \"./contains\"\nimport dependencies, {DependenciesError} from \"./dependencies\"\nimport propertyNames, {PropertyNamesError} from \"./propertyNames\"\nimport additionalProperties, {AdditionalPropertiesError} from \"./additionalProperties\"\nimport properties from \"./properties\"\nimport patternProperties from \"./patternProperties\"\nimport notKeyword, {NotKeywordError} from \"./not\"\nimport anyOf, {AnyOfError} from \"./anyOf\"\nimport oneOf, {OneOfError} from \"./oneOf\"\nimport allOf from \"./allOf\"\nimport ifKeyword, {IfKeywordError} from \"./if\"\nimport thenElse from \"./thenElse\"\n\nexport default function getApplicator(draft2020 = false): Vocabulary {\n  const applicator = [\n    // any\n    notKeyword,\n    anyOf,\n    oneOf,\n    allOf,\n    ifKeyword,\n    thenElse,\n    // object\n    propertyNames,\n    additionalProperties,\n    dependencies,\n    properties,\n    patternProperties,\n  ]\n  // array\n  if (draft2020) applicator.push(prefixItems, items2020)\n  else applicator.push(additionalItems, items)\n  applicator.push(contains)\n  return applicator\n}\n\nexport type ApplicatorKeywordError =\n  | ErrorNoParams<\"false schema\">\n  | AdditionalItemsError\n  | ItemsError\n  | ContainsError\n  | AdditionalPropertiesError\n  | DependenciesError\n  | IfKeywordError\n  | AnyOfError\n  | OneOfError\n  | NotKeywordError\n  | PropertyNamesError\n", "import type {\n  AddedFormat,\n  FormatValidator,\n  AsyncFormatValidator,\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, nil, or, Code, getProperty, regexpCode} from \"../../compile/codegen\"\n\ntype FormatValidate =\n  | FormatValidator<string>\n  | FormatValidator<number>\n  | AsyncFormatValidator<string>\n  | AsyncFormatValidator<number>\n  | RegExp\n  | string\n  | true\n\nexport type FormatError = ErrorObject<\"format\", {format: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must match format \"${schemaCode}\"`,\n  params: ({schemaCode}) => _`{format: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"format\",\n  type: [\"number\", \"string\"],\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt, ruleType?: string) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    const {opts, errSchemaPath, schemaEnv, self} = it\n    if (!opts.validateFormats) return\n\n    if ($data) validate$DataFormat()\n    else validateFormat()\n\n    function validate$DataFormat(): void {\n      const fmts = gen.scopeValue(\"formats\", {\n        ref: self.formats,\n        code: opts.code.formats,\n      })\n      const fDef = gen.const(\"fDef\", _`${fmts}[${schemaCode}]`)\n      const fType = gen.let(\"fType\")\n      const format = gen.let(\"format\")\n      // TODO simplify\n      gen.if(\n        _`typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`,\n        () => gen.assign(fType, _`${fDef}.type || \"string\"`).assign(format, _`${fDef}.validate`),\n        () => gen.assign(fType, _`\"string\"`).assign(format, fDef)\n      )\n      cxt.fail$data(or(unknownFmt(), invalidFmt()))\n\n      function unknownFmt(): Code {\n        if (opts.strictSchema === false) return nil\n        return _`${schemaCode} && !${format}`\n      }\n\n      function invalidFmt(): Code {\n        const callFormat = schemaEnv.$async\n          ? _`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n          : _`${format}(${data})`\n        const validData = _`(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`\n        return _`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`\n      }\n    }\n\n    function validateFormat(): void {\n      const formatDef: AddedFormat | undefined = self.formats[schema]\n      if (!formatDef) {\n        unknownFormat()\n        return\n      }\n      if (formatDef === true) return\n      const [fmtType, format, fmtRef] = getFormat(formatDef)\n      if (fmtType === ruleType) cxt.pass(validCondition())\n\n      function unknownFormat(): void {\n        if (opts.strictSchema === false) {\n          self.logger.warn(unknownMsg())\n          return\n        }\n        throw new Error(unknownMsg())\n\n        function unknownMsg(): string {\n          return `unknown format \"${schema as string}\" ignored in schema at path \"${errSchemaPath}\"`\n        }\n      }\n\n      function getFormat(fmtDef: AddedFormat): [string, FormatValidate, Code] {\n        const code =\n          fmtDef instanceof RegExp\n            ? regexpCode(fmtDef)\n            : opts.code.formats\n            ? _`${opts.code.formats}${getProperty(schema)}`\n            : undefined\n        const fmt = gen.scopeValue(\"formats\", {key: schema, ref: fmtDef, code})\n        if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n          return [fmtDef.type || \"string\", fmtDef.validate, _`${fmt}.validate`]\n        }\n\n        return [\"string\", fmtDef, fmt]\n      }\n\n      function validCondition(): Code {\n        if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n          if (!schemaEnv.$async) throw new Error(\"async format in sync schema\")\n          return _`await ${fmtRef}(${data})`\n        }\n        return typeof format == \"function\" ? _`${fmtRef}(${data})` : _`${fmtRef}.test(${data})`\n      }\n    }\n  },\n}\n\nexport default def\n", "import type {Vocabulary} from \"../../types\"\nimport formatKeyword from \"./format\"\n\nconst format: Vocabulary = [formatKeyword]\n\nexport default format\n", "import type {Vocabulary} from \"../types\"\n\nexport const metadataVocabulary: Vocabulary = [\n  \"title\",\n  \"description\",\n  \"default\",\n  \"deprecated\",\n  \"readOnly\",\n  \"writeOnly\",\n  \"examples\",\n]\n\nexport const contentVocabulary: Vocabulary = [\n  \"contentMediaType\",\n  \"contentEncoding\",\n  \"contentSchema\",\n]\n", "import type {Vocabulary} from \"../types\"\nimport coreVocabulary from \"./core\"\nimport validationVocabulary from \"./validation\"\nimport getApplicatorVocabulary from \"./applicator\"\nimport formatVocabulary from \"./format\"\nimport {metadataVocabulary, contentVocabulary} from \"./metadata\"\n\nconst draft7Vocabularies: Vocabulary[] = [\n  coreVocabulary,\n  validationVocabulary,\n  getApplicatorVocabulary(),\n  formatVocabulary,\n  metadataVocabulary,\n  contentVocabulary,\n]\n\nexport default draft7Vocabularies\n", "import type {ErrorObject} from \"../../types\"\n\nexport enum DiscrError {\n  Tag = \"tag\",\n  Mapping = \"mapping\",\n}\n\nexport type DiscrErrorObj<E extends DiscrError> = ErrorObject<\n  \"discriminator\",\n  {error: E; tag: string; tagValue: unknown},\n  string\n>\n", "import type {CodeKeywordDefinition, AnySchemaObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Name} from \"../../compile/codegen\"\nimport {DiscrError, DiscrErrorObj} from \"../discriminator/types\"\nimport {resolveRef, SchemaEnv} from \"../../compile\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {schemaHasRulesButRef} from \"../../compile/util\"\n\nexport type DiscriminatorError = DiscrErrorObj<DiscrError.Tag> | DiscrErrorObj<DiscrError.Mapping>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {discrError, tagName}}) =>\n    discrError === DiscrError.Tag\n      ? `tag \"${tagName}\" must be string`\n      : `value of tag \"${tagName}\" must be in oneOf`,\n  params: ({params: {discrError, tag, tagName}}) =>\n    _`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"discriminator\",\n  type: \"object\",\n  schemaType: \"object\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, schema, parentSchema, it} = cxt\n    const {oneOf} = parentSchema\n    if (!it.opts.discriminator) {\n      throw new Error(\"discriminator: requires discriminator option\")\n    }\n    const tagName = schema.propertyName\n    if (typeof tagName != \"string\") throw new Error(\"discriminator: requires propertyName\")\n    if (schema.mapping) throw new Error(\"discriminator: mapping is not supported\")\n    if (!oneOf) throw new Error(\"discriminator: requires oneOf keyword\")\n    const valid = gen.let(\"valid\", false)\n    const tag = gen.const(\"tag\", _`${data}${getProperty(tagName)}`)\n    gen.if(\n      _`typeof ${tag} == \"string\"`,\n      () => validateMapping(),\n      () => cxt.error(false, {discrError: DiscrError.Tag, tag, tagName})\n    )\n    cxt.ok(valid)\n\n    function validateMapping(): void {\n      const mapping = getMapping()\n      gen.if(false)\n      for (const tagValue in mapping) {\n        gen.elseIf(_`${tag} === ${tagValue}`)\n        gen.assign(valid, applyTagSchema(mapping[tagValue]))\n      }\n      gen.else()\n      cxt.error(false, {discrError: DiscrError.Mapping, tag, tagName})\n      gen.endIf()\n    }\n\n    function applyTagSchema(schemaProp?: number): Name {\n      const _valid = gen.name(\"valid\")\n      const schCxt = cxt.subschema({keyword: \"oneOf\", schemaProp}, _valid)\n      cxt.mergeEvaluated(schCxt, Name)\n      return _valid\n    }\n\n    function getMapping(): {[T in string]?: number} {\n      const oneOfMapping: {[T in string]?: number} = {}\n      const topRequired = hasRequired(parentSchema)\n      let tagRequired = true\n      for (let i = 0; i < oneOf.length; i++) {\n        let sch = oneOf[i]\n        if (sch?.$ref && !schemaHasRulesButRef(sch, it.self.RULES)) {\n          const ref = sch.$ref\n          sch = resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref)\n          if (sch instanceof SchemaEnv) sch = sch.schema\n          if (sch === undefined) throw new MissingRefError(it.opts.uriResolver, it.baseId, ref)\n        }\n        const propSch = sch?.properties?.[tagName]\n        if (typeof propSch != \"object\") {\n          throw new Error(\n            `discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`\n          )\n        }\n        tagRequired = tagRequired && (topRequired || hasRequired(sch))\n        addMappings(propSch, i)\n      }\n      if (!tagRequired) throw new Error(`discriminator: \"${tagName}\" must be required`)\n      return oneOfMapping\n\n      function hasRequired({required}: AnySchemaObject): boolean {\n        return Array.isArray(required) && required.includes(tagName)\n      }\n\n      function addMappings(sch: AnySchemaObject, i: number): void {\n        if (sch.const) {\n          addMapping(sch.const, i)\n        } else if (sch.enum) {\n          for (const tagValue of sch.enum) {\n            addMapping(tagValue, i)\n          }\n        } else {\n          throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`)\n        }\n      }\n\n      function addMapping(tagValue: unknown, i: number): void {\n        if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n          throw new Error(`discriminator: \"${tagName}\" values must be unique strings`)\n        }\n        oneOfMapping[tagValue] = i\n      }\n    }\n  },\n}\n\nexport default def\n", "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"$id\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Core schema meta-schema\",\n  \"definitions\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$ref\": \"#\"}\n    },\n    \"nonNegativeInteger\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"nonNegativeIntegerDefault0\": {\n      \"allOf\": [{\"$ref\": \"#/definitions/nonNegativeInteger\"}, {\"default\": 0}]\n    },\n    \"simpleTypes\": {\n      \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n    },\n    \"stringArray\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"uniqueItems\": true,\n      \"default\": []\n    }\n  },\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"$id\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$schema\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"$ref\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$comment\": {\n      \"type\": \"string\"\n    },\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"default\": true,\n    \"readOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": true\n    },\n    \"multipleOf\": {\n      \"type\": \"number\",\n      \"exclusiveMinimum\": 0\n    },\n    \"maximum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMaximum\": {\n      \"type\": \"number\"\n    },\n    \"minimum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMinimum\": {\n      \"type\": \"number\"\n    },\n    \"maxLength\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minLength\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"pattern\": {\n      \"type\": \"string\",\n      \"format\": \"regex\"\n    },\n    \"additionalItems\": {\"$ref\": \"#\"},\n    \"items\": {\n      \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/schemaArray\"}],\n      \"default\": true\n    },\n    \"maxItems\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minItems\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"uniqueItems\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"contains\": {\"$ref\": \"#\"},\n    \"maxProperties\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minProperties\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"required\": {\"$ref\": \"#/definitions/stringArray\"},\n    \"additionalProperties\": {\"$ref\": \"#\"},\n    \"definitions\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"propertyNames\": {\"format\": \"regex\"},\n      \"default\": {}\n    },\n    \"dependencies\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/stringArray\"}]\n      }\n    },\n    \"propertyNames\": {\"$ref\": \"#\"},\n    \"const\": true,\n    \"enum\": {\n      \"type\": \"array\",\n      \"items\": true,\n      \"minItems\": 1,\n      \"uniqueItems\": true\n    },\n    \"type\": {\n      \"anyOf\": [\n        {\"$ref\": \"#/definitions/simpleTypes\"},\n        {\n          \"type\": \"array\",\n          \"items\": {\"$ref\": \"#/definitions/simpleTypes\"},\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        }\n      ]\n    },\n    \"format\": {\"type\": \"string\"},\n    \"contentMediaType\": {\"type\": \"string\"},\n    \"contentEncoding\": {\"type\": \"string\"},\n    \"if\": {\"$ref\": \"#\"},\n    \"then\": {\"$ref\": \"#\"},\n    \"else\": {\"$ref\": \"#\"},\n    \"allOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"not\": {\"$ref\": \"#\"}\n  },\n  \"default\": true\n}\n", "import type {AnySchemaObject} from \"./types\"\nimport AjvCore from \"./core\"\nimport draft7Vocabularies from \"./vocabularies/draft7\"\nimport discriminator from \"./vocabularies/discriminator\"\nimport * as draft7MetaSchema from \"./refs/json-schema-draft-07.json\"\n\nconst META_SUPPORT_DATA = [\"/properties\"]\n\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\"\n\nexport class Ajv extends AjvCore {\n  _addVocabularies(): void {\n    super._addVocabularies()\n    draft7Vocabularies.forEach((v) => this.addVocabulary(v))\n    if (this.opts.discriminator) this.addKeyword(discriminator)\n  }\n\n  _addDefaultMetaSchema(): void {\n    super._addDefaultMetaSchema()\n    if (!this.opts.meta) return\n    const metaSchema = this.opts.$data\n      ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n      : draft7MetaSchema\n    this.addMetaSchema(metaSchema, META_SCHEMA_ID, false)\n    this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    return (this.opts.defaultMeta =\n      super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n  }\n}\n\nmodule.exports = exports = Ajv\nmodule.exports.Ajv = Ajv\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv\n\nexport {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  SchemaValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n", "import type {Format, FormatDefinition} from \"ajv\"\nimport type {FormatValidator, FormatCompare} from \"ajv/dist/types\"\n\nexport type FormatMode = \"fast\" | \"full\"\n\nexport type FormatName =\n  | \"date\"\n  | \"time\"\n  | \"date-time\"\n  | \"iso-time\"\n  | \"iso-date-time\"\n  | \"duration\"\n  | \"uri\"\n  | \"uri-reference\"\n  | \"uri-template\"\n  | \"url\"\n  | \"email\"\n  | \"hostname\"\n  | \"ipv4\"\n  | \"ipv6\"\n  | \"regex\"\n  | \"uuid\"\n  | \"json-pointer\"\n  | \"json-pointer-uri-fragment\"\n  | \"relative-json-pointer\"\n  | \"byte\"\n  | \"int32\"\n  | \"int64\"\n  | \"float\"\n  | \"double\"\n  | \"password\"\n  | \"binary\"\n\nexport type DefinedFormats = {\n  [key in FormatName]: Format\n}\n\nfunction fmtDef(\n  validate: RegExp | FormatValidator<string>,\n  compare: FormatCompare<string>\n): FormatDefinition<string> {\n  return {validate, compare}\n}\n\nexport const fullFormats: DefinedFormats = {\n  // date: http://tools.ietf.org/html/rfc3339#section-5.6\n  date: fmtDef(date, compareDate),\n  // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n  time: fmtDef(getTime(true), compareTime),\n  \"date-time\": fmtDef(getDateTime(true), compareDateTime),\n  \"iso-time\": fmtDef(getTime(), compareIsoTime),\n  \"iso-date-time\": fmtDef(getDateTime(), compareIsoDateTime),\n  // duration: https://tools.ietf.org/html/rfc3339#appendix-A\n  duration: /^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$/,\n  uri,\n  \"uri-reference\":\n    /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,\n  // uri-template: https://tools.ietf.org/html/rfc6570\n  \"uri-template\":\n    /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i,\n  // For the source: https://gist.github.com/dperini/729294\n  // For test cases: https://mathiasbynens.be/demo/url-regex\n  url: /^(?:https?|ftp):\\/\\/(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)(?:\\.(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu,\n  email:\n    /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n  hostname:\n    /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i,\n  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n  ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/,\n  ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))$/i,\n  regex,\n  // uuid: http://tools.ietf.org/html/rfc4122\n  uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\n  // JSON-pointer: https://tools.ietf.org/html/rfc6901\n  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n  \"json-pointer\": /^(?:\\/(?:[^~/]|~0|~1)*)*$/,\n  \"json-pointer-uri-fragment\": /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\n  // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n  \"relative-json-pointer\": /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,\n  // the following formats are used by the openapi specification: https://spec.openapis.org/oas/v3.0.0#data-types\n  // byte: https://github.com/miguelmota/is-base64\n  byte,\n  // signed 32 bit integer\n  int32: {type: \"number\", validate: validateInt32},\n  // signed 64 bit integer\n  int64: {type: \"number\", validate: validateInt64},\n  // C-type float\n  float: {type: \"number\", validate: validateNumber},\n  // C-type double\n  double: {type: \"number\", validate: validateNumber},\n  // hint to the UI to hide input strings\n  password: true,\n  // unchecked string payload\n  binary: true,\n}\n\nexport const fastFormats: DefinedFormats = {\n  ...fullFormats,\n  date: fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/, compareDate),\n  time: fmtDef(\n    /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n    compareTime\n  ),\n  \"date-time\": fmtDef(\n    /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\dt(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n    compareDateTime\n  ),\n  \"iso-time\": fmtDef(\n    /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n    compareIsoTime\n  ),\n  \"iso-date-time\": fmtDef(\n    /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n    compareIsoDateTime\n  ),\n  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n  uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n  \"uri-reference\": /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n  // email (sources from jsen validator):\n  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'wilful violation')\n  email:\n    /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n}\n\nexport const formatNames = Object.keys(fullFormats) as FormatName[]\n\nfunction isLeapYear(year: number): boolean {\n  // https://tools.ietf.org/html/rfc3339#appendix-C\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)\n}\n\nconst DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction date(str: string): boolean {\n  // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n  const matches: string[] | null = DATE.exec(str)\n  if (!matches) return false\n  const year: number = +matches[1]\n  const month: number = +matches[2]\n  const day: number = +matches[3]\n  return (\n    month >= 1 &&\n    month <= 12 &&\n    day >= 1 &&\n    day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month])\n  )\n}\n\nfunction compareDate(d1: string, d2: string): number | undefined {\n  if (!(d1 && d2)) return undefined\n  if (d1 > d2) return 1\n  if (d1 < d2) return -1\n  return 0\n}\n\nconst TIME = /^(\\d\\d):(\\d\\d):(\\d\\d(?:\\.\\d+)?)(z|([+-])(\\d\\d)(?::?(\\d\\d))?)?$/i\n\nfunction getTime(strictTimeZone?: boolean): (str: string) => boolean {\n  return function time(str: string): boolean {\n    const matches: string[] | null = TIME.exec(str)\n    if (!matches) return false\n    const hr: number = +matches[1]\n    const min: number = +matches[2]\n    const sec: number = +matches[3]\n    const tz: string | undefined = matches[4]\n    const tzSign: number = matches[5] === \"-\" ? -1 : 1\n    const tzH: number = +(matches[6] || 0)\n    const tzM: number = +(matches[7] || 0)\n    if (tzH > 23 || tzM > 59 || (strictTimeZone && !tz)) return false\n    if (hr <= 23 && min <= 59 && sec < 60) return true\n    // leap second\n    const utcMin = min - tzM * tzSign\n    const utcHr = hr - tzH * tzSign - (utcMin < 0 ? 1 : 0)\n    return (utcHr === 23 || utcHr === -1) && (utcMin === 59 || utcMin === -1) && sec < 61\n  }\n}\n\nfunction compareTime(s1: string, s2: string): number | undefined {\n  if (!(s1 && s2)) return undefined\n  const t1 = new Date(\"2020-01-01T\" + s1).valueOf()\n  const t2 = new Date(\"2020-01-01T\" + s2).valueOf()\n  if (!(t1 && t2)) return undefined\n  return t1 - t2\n}\n\nfunction compareIsoTime(t1: string, t2: string): number | undefined {\n  if (!(t1 && t2)) return undefined\n  const a1 = TIME.exec(t1)\n  const a2 = TIME.exec(t2)\n  if (!(a1 && a2)) return undefined\n  t1 = a1[1] + a1[2] + a1[3]\n  t2 = a2[1] + a2[2] + a2[3]\n  if (t1 > t2) return 1\n  if (t1 < t2) return -1\n  return 0\n}\n\nconst DATE_TIME_SEPARATOR = /t|\\s/i\nfunction getDateTime(strictTimeZone?: boolean): (str: string) => boolean {\n  const time = getTime(strictTimeZone)\n\n  return function date_time(str: string): boolean {\n    // http://tools.ietf.org/html/rfc3339#section-5.6\n    const dateTime: string[] = str.split(DATE_TIME_SEPARATOR)\n    return dateTime.length === 2 && date(dateTime[0]) && time(dateTime[1])\n  }\n}\n\nfunction compareDateTime(dt1: string, dt2: string): number | undefined {\n  if (!(dt1 && dt2)) return undefined\n  const d1 = new Date(dt1).valueOf()\n  const d2 = new Date(dt2).valueOf()\n  if (!(d1 && d2)) return undefined\n  return d1 - d2\n}\n\nfunction compareIsoDateTime(dt1: string, dt2: string): number | undefined {\n  if (!(dt1 && dt2)) return undefined\n  const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR)\n  const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR)\n  const res = compareDate(d1, d2)\n  if (res === undefined) return undefined\n  return res || compareTime(t1, t2)\n}\n\nconst NOT_URI_FRAGMENT = /\\/|:/\nconst URI =\n  /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i\n\nfunction uri(str: string): boolean {\n  // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n  return NOT_URI_FRAGMENT.test(str) && URI.test(str)\n}\n\nconst BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm\n\nfunction byte(str: string): boolean {\n  BYTE.lastIndex = 0\n  return BYTE.test(str)\n}\n\nconst MIN_INT32 = -(2 ** 31)\nconst MAX_INT32 = 2 ** 31 - 1\n\nfunction validateInt32(value: number): boolean {\n  return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32\n}\n\nfunction validateInt64(value: number): boolean {\n  // JSON and javascript max Int is 2**53, so any int that passes isInteger is valid for Int64\n  return Number.isInteger(value)\n}\n\nfunction validateNumber(): boolean {\n  return true\n}\n\nconst Z_ANCHOR = /[^\\\\]\\\\Z/\nfunction regex(str: string): boolean {\n  if (Z_ANCHOR.test(str)) return false\n  try {\n    new RegExp(str)\n    return true\n  } catch (e) {\n    return false\n  }\n}\n", "import type Ajv from \"ajv\"\nimport type {\n  Plugin,\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  Code,\n  Name,\n  ErrorObject,\n} from \"ajv\"\nimport type {AddedFormat} from \"ajv/dist/types\"\nimport type {Rule} from \"ajv/dist/compile/rules\"\nimport {KeywordCxt} from \"ajv\"\nimport {_, str, or, getProperty, operators} from \"ajv/dist/compile/codegen\"\n\ntype Kwd = \"formatMaximum\" | \"formatMinimum\" | \"formatExclusiveMaximum\" | \"formatExclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst ops = operators\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n  formatMaximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n  formatMinimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n  formatExclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n  formatExclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitFormatError = ErrorObject<Kwd, {limit: string; comparison: Comparison}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({keyword, schemaCode}) => str`should be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n  params: ({keyword, schemaCode}) =>\n    _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nexport const formatLimitDefinition: CodeKeywordDefinition = {\n  keyword: Object.keys(KWDs),\n  type: \"string\",\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt) {\n    const {gen, data, schemaCode, keyword, it} = cxt\n    const {opts, self} = it\n    if (!opts.validateFormats) return\n\n    const fCxt = new KeywordCxt(it, (self.RULES.all.format as Rule).definition, \"format\")\n    if (fCxt.$data) validate$DataFormat()\n    else validateFormat()\n\n    function validate$DataFormat(): void {\n      const fmts = gen.scopeValue(\"formats\", {\n        ref: self.formats,\n        code: opts.code.formats,\n      })\n      const fmt = gen.const(\"fmt\", _`${fmts}[${fCxt.schemaCode}]`)\n      cxt.fail$data(\n        or(\n          _`typeof ${fmt} != \"object\"`,\n          _`${fmt} instanceof RegExp`,\n          _`typeof ${fmt}.compare != \"function\"`,\n          compareCode(fmt)\n        )\n      )\n    }\n\n    function validateFormat(): void {\n      const format = fCxt.schema as string\n      const fmtDef: AddedFormat | undefined = self.formats[format]\n      if (!fmtDef || fmtDef === true) return\n      if (\n        typeof fmtDef != \"object\" ||\n        fmtDef instanceof RegExp ||\n        typeof fmtDef.compare != \"function\"\n      ) {\n        throw new Error(`\"${keyword}\": format \"${format}\" does not define \"compare\" function`)\n      }\n      const fmt = gen.scopeValue(\"formats\", {\n        key: format,\n        ref: fmtDef,\n        code: opts.code.formats ? _`${opts.code.formats}${getProperty(format)}` : undefined,\n      })\n\n      cxt.fail$data(compareCode(fmt))\n    }\n\n    function compareCode(fmt: Name): Code {\n      return _`${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword as Kwd].fail} 0`\n    }\n  },\n  dependencies: [\"format\"],\n}\n\nconst formatLimitPlugin: Plugin<undefined> = (ajv: Ajv): Ajv => {\n  ajv.addKeyword(formatLimitDefinition)\n  return ajv\n}\n\nexport default formatLimitPlugin\n", "import {\n  DefinedFormats,\n  FormatMode,\n  FormatName,\n  formatNames,\n  fastFormats,\n  fullFormats,\n} from \"./formats\"\nimport formatLimit from \"./limit\"\nimport type Ajv from \"ajv\"\nimport type {Plugin, Format} from \"ajv\"\nimport {_, Name} from \"ajv/dist/compile/codegen\"\n\nexport {FormatMode, FormatName} from \"./formats\"\nexport {LimitFormatError} from \"./limit\"\nexport interface FormatOptions {\n  mode?: FormatMode\n  formats?: FormatName[]\n  keywords?: boolean\n}\n\nexport type FormatsPluginOptions = FormatName[] | FormatOptions\n\nexport interface FormatsPlugin extends Plugin<FormatsPluginOptions> {\n  get: (format: FormatName, mode?: FormatMode) => Format\n}\n\nconst fullName = new Name(\"fullFormats\")\nconst fastName = new Name(\"fastFormats\")\n\nconst formatsPlugin: FormatsPlugin = (\n  ajv: Ajv,\n  opts: FormatsPluginOptions = {keywords: true}\n): Ajv => {\n  if (Array.isArray(opts)) {\n    addFormats(ajv, opts, fullFormats, fullName)\n    return ajv\n  }\n  const [formats, exportName] =\n    opts.mode === \"fast\" ? [fastFormats, fastName] : [fullFormats, fullName]\n  const list = opts.formats || formatNames\n  addFormats(ajv, list, formats, exportName)\n  if (opts.keywords) formatLimit(ajv)\n  return ajv\n}\n\nformatsPlugin.get = (name: FormatName, mode: FormatMode = \"full\"): Format => {\n  const formats = mode === \"fast\" ? fastFormats : fullFormats\n  const f = formats[name]\n  if (!f) throw new Error(`Unknown format \"${name}\"`)\n  return f\n}\n\nfunction addFormats(ajv: Ajv, list: FormatName[], fs: DefinedFormats, exportName: Name): void {\n  ajv.opts.code.formats ??= _`require(\"ajv-formats/dist/formats\").${exportName}`\n  for (const f of list) ajv.addFormat(f, fs[f])\n}\n\nmodule.exports = exports = formatsPlugin\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default formatsPlugin\n", "export const version = '1.2.3'\n", "import type { OneOf, Pretty } from './types.js'\nimport { version } from './version.js'\n\ntype BaseErrorArgs = Pretty<\n  {\n    docsPath?: string | undefined\n    metaMessages?: string[] | undefined\n  } & OneOf<{ details?: string | undefined } | { cause?: BaseError | Error }>\n>\n\nexport class BaseError extends Error {\n  details: string\n  docsPath?: string | undefined\n  metaMessages?: string[] | undefined\n  shortMessage: string\n\n  override name = 'AbiTypeError'\n\n  constructor(shortMessage: string, args: BaseErrorArgs = {}) {\n    const details =\n      args.cause instanceof BaseError\n        ? args.cause.details\n        : args.cause?.message\n          ? args.cause.message\n          : args.details!\n    const docsPath =\n      args.cause instanceof BaseError\n        ? args.cause.docsPath || args.docsPath\n        : args.docsPath\n    const message = [\n      shortMessage || 'An error occurred.',\n      '',\n      ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n      ...(docsPath ? [`Docs: https://abitype.dev${docsPath}`] : []),\n      ...(details ? [`Details: ${details}`] : []),\n      `Version: abitype@${version}`,\n    ].join('\\n')\n\n    super(message)\n\n    if (args.cause) this.cause = args.cause\n    this.details = details\n    this.docsPath = docsPath\n    this.metaMessages = args.metaMessages\n    this.shortMessage = shortMessage\n  }\n}\n", "// TODO: This looks cool. Need to check the performance of `new RegExp` versus defined inline though.\n// https://twitter.com/GabrielVergnaud/status/1622906834343366657\nexport function execTyped<type>(regex: RegExp, string: string) {\n  const match = regex.exec(string)\n  return match?.groups as type | undefined\n}\n\n// `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n// https://regexr.com/6va55\nexport const bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/\n\n// `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nexport const integerRegex =\n  /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/\n\nexport const isTupleRegex = /^\\(.+?\\).*?$/\n", "import type { AbiEventParameter, AbiParameter } from '../abi.js'\nimport { execTyped } from '../regex.js'\nimport type { IsNarrowable, Join } from '../types.js'\nimport type { AssertName } from './types/signatures.js'\n\n/**\n * Formats {@link AbiParameter} to human-readable ABI parameter.\n *\n * @param abiParameter - ABI parameter\n * @returns Human-readable ABI parameter\n *\n * @example\n * type Result = FormatAbiParameter<{ type: 'address'; name: 'from'; }>\n * //   ^? type Result = 'address from'\n */\nexport type FormatAbiParameter<\n  abiParameter extends AbiParameter | AbiEventParameter,\n> = abiParameter extends {\n  name?: infer name extends string\n  type: `tuple${infer array}`\n  components: infer components extends readonly AbiParameter[]\n  indexed?: infer indexed extends boolean\n}\n  ? FormatAbiParameter<\n      {\n        type: `(${Join<\n          {\n            [key in keyof components]: FormatAbiParameter<\n              {\n                type: components[key]['type']\n              } & (IsNarrowable<components[key]['name'], string> extends true\n                ? { name: components[key]['name'] }\n                : unknown) &\n                (components[key] extends { components: readonly AbiParameter[] }\n                  ? { components: components[key]['components'] }\n                  : unknown)\n            >\n          },\n          ', '\n        >})${array}`\n      } & (IsNarrowable<name, string> extends true ? { name: name } : unknown) &\n        (IsNarrowable<indexed, boolean> extends true\n          ? { indexed: indexed }\n          : unknown)\n    >\n  : `${abiParameter['type']}${abiParameter extends { indexed: true }\n      ? ' indexed'\n      : ''}${abiParameter['name'] extends infer name extends string\n      ? name extends ''\n        ? ''\n        : ` ${AssertName<name>}`\n      : ''}`\n\n// https://regexr.com/7f7rv\nconst tupleRegex = /^tuple(?<array>(\\[(\\d*)\\])*)$/\n\n/**\n * Formats {@link AbiParameter} to human-readable ABI parameter.\n *\n * @param abiParameter - ABI parameter\n * @returns Human-readable ABI parameter\n *\n * @example\n * const result = formatAbiParameter({ type: 'address', name: 'from' })\n * //    ^? const result: 'address from'\n */\nexport function formatAbiParameter<\n  const abiParameter extends AbiParameter | AbiEventParameter,\n>(abiParameter: abiParameter): FormatAbiParameter<abiParameter> {\n  type Result = FormatAbiParameter<abiParameter>\n\n  let type = abiParameter.type\n  if (tupleRegex.test(abiParameter.type) && 'components' in abiParameter) {\n    type = '('\n    const length = abiParameter.components.length as number\n    for (let i = 0; i < length; i++) {\n      const component = abiParameter.components[i]!\n      type += formatAbiParameter(component)\n      if (i < length - 1) type += ', '\n    }\n    const result = execTyped<{ array?: string }>(tupleRegex, abiParameter.type)\n    type += `)${result?.array || ''}`\n    return formatAbiParameter({\n      ...abiParameter,\n      type,\n    }) as Result\n  }\n  // Add `indexed` to type if in `abiParameter`\n  if ('indexed' in abiParameter && abiParameter.indexed)\n    type = `${type} indexed`\n  // Return human-readable ABI parameter\n  if (abiParameter.name) return `${type} ${abiParameter.name}` as Result\n  return type as Result\n}\n", "import type { AbiEventParameter, AbiParameter } from '../abi.js'\nimport type { Join } from '../types.js'\nimport {\n  type FormatAbiParameter,\n  formatAbiParameter,\n} from './formatAbiParameter.js'\n\n/**\n * Formats {@link AbiParameter}s to human-readable ABI parameter.\n *\n * @param abiParameters - ABI parameters\n * @returns Human-readable ABI parameters\n *\n * @example\n * type Result = FormatAbiParameters<[\n *   // ^? type Result = 'address from, uint256 tokenId'\n *   { type: 'address'; name: 'from'; },\n *   { type: 'uint256'; name: 'tokenId'; },\n * ]>\n */\nexport type FormatAbiParameters<\n  abiParameters extends readonly [\n    AbiParameter | AbiEventParameter,\n    ...(readonly (AbiParameter | AbiEventParameter)[]),\n  ],\n> = Join<\n  {\n    [key in keyof abiParameters]: FormatAbiParameter<abiParameters[key]>\n  },\n  ', '\n>\n\n/**\n * Formats {@link AbiParameter}s to human-readable ABI parameters.\n *\n * @param abiParameters - ABI parameters\n * @returns Human-readable ABI parameters\n *\n * @example\n * const result = formatAbiParameters([\n *   //  ^? const result: 'address from, uint256 tokenId'\n *   { type: 'address', name: 'from' },\n *   { type: 'uint256', name: 'tokenId' },\n * ])\n */\nexport function formatAbiParameters<\n  const abiParameters extends readonly [\n    AbiParameter | AbiEventParameter,\n    ...(readonly (AbiParameter | AbiEventParameter)[]),\n  ],\n>(abiParameters: abiParameters): FormatAbiParameters<abiParameters> {\n  let params = ''\n  const length = abiParameters.length\n  for (let i = 0; i < length; i++) {\n    const abiParameter = abiParameters[i]!\n    params += formatAbiParameter(abiParameter)\n    if (i !== length - 1) params += ', '\n  }\n  return params as FormatAbiParameters<abiParameters>\n}\n", "import type {\n  Abi,\n  AbiConstructor,\n  AbiError,\n  AbiEvent,\n  AbiEventParameter,\n  AbiFallback,\n  AbiFunction,\n  AbiParameter,\n  AbiReceive,\n  AbiStateMutability,\n} from '../abi.js'\nimport {\n  type FormatAbiParameters as FormatAbiParameters_,\n  formatAbiParameters,\n} from './formatAbiParameters.js'\nimport type { AssertName } from './types/signatures.js'\n\n/**\n * Formats ABI item (e.g. error, event, function) into human-readable ABI item\n *\n * @param abiItem - ABI item\n * @returns Human-readable ABI item\n */\nexport type FormatAbiItem<abiItem extends Abi[number]> =\n  Abi[number] extends abiItem\n    ? string\n    :\n        | (abiItem extends AbiFunction\n            ? AbiFunction extends abiItem\n              ? string\n              : `function ${AssertName<abiItem['name']>}(${FormatAbiParameters<\n                  abiItem['inputs']\n                >})${abiItem['stateMutability'] extends Exclude<\n                  AbiStateMutability,\n                  'nonpayable'\n                >\n                  ? ` ${abiItem['stateMutability']}`\n                  : ''}${abiItem['outputs']['length'] extends 0\n                  ? ''\n                  : ` returns (${FormatAbiParameters<abiItem['outputs']>})`}`\n            : never)\n        | (abiItem extends AbiEvent\n            ? AbiEvent extends abiItem\n              ? string\n              : `event ${AssertName<abiItem['name']>}(${FormatAbiParameters<\n                  abiItem['inputs']\n                >})`\n            : never)\n        | (abiItem extends AbiError\n            ? AbiError extends abiItem\n              ? string\n              : `error ${AssertName<abiItem['name']>}(${FormatAbiParameters<\n                  abiItem['inputs']\n                >})`\n            : never)\n        | (abiItem extends AbiConstructor\n            ? AbiConstructor extends abiItem\n              ? string\n              : `constructor(${FormatAbiParameters<\n                  abiItem['inputs']\n                >})${abiItem['stateMutability'] extends 'payable'\n                  ? ' payable'\n                  : ''}`\n            : never)\n        | (abiItem extends AbiFallback\n            ? AbiFallback extends abiItem\n              ? string\n              : `fallback() external${abiItem['stateMutability'] extends 'payable'\n                  ? ' payable'\n                  : ''}`\n            : never)\n        | (abiItem extends AbiReceive\n            ? AbiReceive extends abiItem\n              ? string\n              : 'receive() external payable'\n            : never)\n\ntype FormatAbiParameters<\n  abiParameters extends readonly (AbiParameter | AbiEventParameter)[],\n> = abiParameters['length'] extends 0\n  ? ''\n  : FormatAbiParameters_<\n      abiParameters extends readonly [\n        AbiParameter | AbiEventParameter,\n        ...(readonly (AbiParameter | AbiEventParameter)[]),\n      ]\n        ? abiParameters\n        : never\n    >\n\n/**\n * Formats ABI item (e.g. error, event, function) into human-readable ABI item\n *\n * @param abiItem - ABI item\n * @returns Human-readable ABI item\n */\nexport function formatAbiItem<const abiItem extends Abi[number]>(\n  abiItem: abiItem,\n): FormatAbiItem<abiItem> {\n  type Result = FormatAbiItem<abiItem>\n  type Params = readonly [\n    AbiParameter | AbiEventParameter,\n    ...(readonly (AbiParameter | AbiEventParameter)[]),\n  ]\n\n  if (abiItem.type === 'function')\n    return `function ${abiItem.name}(${formatAbiParameters(\n      abiItem.inputs as Params,\n    )})${\n      abiItem.stateMutability && abiItem.stateMutability !== 'nonpayable'\n        ? ` ${abiItem.stateMutability}`\n        : ''\n    }${\n      abiItem.outputs?.length\n        ? ` returns (${formatAbiParameters(abiItem.outputs as Params)})`\n        : ''\n    }`\n  if (abiItem.type === 'event')\n    return `event ${abiItem.name}(${formatAbiParameters(\n      abiItem.inputs as Params,\n    )})`\n  if (abiItem.type === 'error')\n    return `error ${abiItem.name}(${formatAbiParameters(\n      abiItem.inputs as Params,\n    )})`\n  if (abiItem.type === 'constructor')\n    return `constructor(${formatAbiParameters(abiItem.inputs as Params)})${\n      abiItem.stateMutability === 'payable' ? ' payable' : ''\n    }`\n  if (abiItem.type === 'fallback')\n    return `fallback() external${\n      abiItem.stateMutability === 'payable' ? ' payable' : ''\n    }` as Result\n  return 'receive() external payable' as Result\n}\n", "import type { AbiStateMutability } from '../../abi.js'\nimport { execTyped } from '../../regex.js'\nimport type {\n  EventModifier,\n  FunctionModifier,\n  Modifier,\n} from '../types/signatures.js'\n\n// https://regexr.com/7gmok\nconst errorSignatureRegex =\n  /^error (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\\((?<parameters>.*?)\\)$/\nexport function isErrorSignature(signature: string) {\n  return errorSignatureRegex.test(signature)\n}\nexport function execErrorSignature(signature: string) {\n  return execTyped<{ name: string; parameters: string }>(\n    errorSignatureRegex,\n    signature,\n  )\n}\n\n// https://regexr.com/7gmoq\nconst eventSignatureRegex =\n  /^event (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\\((?<parameters>.*?)\\)$/\nexport function isEventSignature(signature: string) {\n  return eventSignatureRegex.test(signature)\n}\nexport function execEventSignature(signature: string) {\n  return execTyped<{ name: string; parameters: string }>(\n    eventSignatureRegex,\n    signature,\n  )\n}\n\n// https://regexr.com/7gmot\nconst functionSignatureRegex =\n  /^function (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\\((?<parameters>.*?)\\)(?: (?<scope>external|public{1}))?(?: (?<stateMutability>pure|view|nonpayable|payable{1}))?(?: returns\\s?\\((?<returns>.*?)\\))?$/\nexport function isFunctionSignature(signature: string) {\n  return functionSignatureRegex.test(signature)\n}\nexport function execFunctionSignature(signature: string) {\n  return execTyped<{\n    name: string\n    parameters: string\n    stateMutability?: AbiStateMutability\n    returns?: string\n  }>(functionSignatureRegex, signature)\n}\n\n// https://regexr.com/7gmp3\nconst structSignatureRegex =\n  /^struct (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*) \\{(?<properties>.*?)\\}$/\nexport function isStructSignature(signature: string) {\n  return structSignatureRegex.test(signature)\n}\nexport function execStructSignature(signature: string) {\n  return execTyped<{ name: string; properties: string }>(\n    structSignatureRegex,\n    signature,\n  )\n}\n\n// https://regexr.com/78u01\nconst constructorSignatureRegex =\n  /^constructor\\((?<parameters>.*?)\\)(?:\\s(?<stateMutability>payable{1}))?$/\nexport function isConstructorSignature(signature: string) {\n  return constructorSignatureRegex.test(signature)\n}\nexport function execConstructorSignature(signature: string) {\n  return execTyped<{\n    parameters: string\n    stateMutability?: Extract<AbiStateMutability, 'payable'>\n  }>(constructorSignatureRegex, signature)\n}\n\n// https://regexr.com/7srtn\nconst fallbackSignatureRegex =\n  /^fallback\\(\\) external(?:\\s(?<stateMutability>payable{1}))?$/\nexport function isFallbackSignature(signature: string) {\n  return fallbackSignatureRegex.test(signature)\n}\nexport function execFallbackSignature(signature: string) {\n  return execTyped<{\n    parameters: string\n    stateMutability?: Extract<AbiStateMutability, 'payable'>\n  }>(fallbackSignatureRegex, signature)\n}\n\n// https://regexr.com/78u1k\nconst receiveSignatureRegex = /^receive\\(\\) external payable$/\nexport function isReceiveSignature(signature: string) {\n  return receiveSignatureRegex.test(signature)\n}\n\nexport const modifiers = new Set<Modifier>([\n  'memory',\n  'indexed',\n  'storage',\n  'calldata',\n])\nexport const eventModifiers = new Set<EventModifier>(['indexed'])\nexport const functionModifiers = new Set<FunctionModifier>([\n  'calldata',\n  'memory',\n  'storage',\n])\n", "import { BaseError } from '../../errors.js'\n\nexport class InvalidAbiItemError extends BaseError {\n  override name = 'InvalidAbiItemError'\n\n  constructor({ signature }: { signature: string | object }) {\n    super('Failed to parse ABI item.', {\n      details: `parseAbiItem(${JSON.stringify(signature, null, 2)})`,\n      docsPath: '/api/human#parseabiitem-1',\n    })\n  }\n}\n\nexport class UnknownTypeError extends BaseError {\n  override name = 'UnknownTypeError'\n\n  constructor({ type }: { type: string }) {\n    super('Unknown type.', {\n      metaMessages: [\n        `Type \"${type}\" is not a valid ABI type. Perhaps you forgot to include a struct signature?`,\n      ],\n    })\n  }\n}\n\nexport class UnknownSolidityTypeError extends BaseError {\n  override name = 'UnknownSolidityTypeError'\n\n  constructor({ type }: { type: string }) {\n    super('Unknown type.', {\n      metaMessages: [`Type \"${type}\" is not a valid ABI type.`],\n    })\n  }\n}\n", "import type { AbiItemType, AbiParameter } from '../../abi.js'\nimport { BaseError } from '../../errors.js'\nimport type { Modifier } from '../types/signatures.js'\n\nexport class InvalidAbiParameterError extends BaseError {\n  override name = 'InvalidAbiParameterError'\n\n  constructor({ param }: { param: string | object }) {\n    super('Failed to parse ABI parameter.', {\n      details: `parseAbiParameter(${JSON.stringify(param, null, 2)})`,\n      docsPath: '/api/human#parseabiparameter-1',\n    })\n  }\n}\n\nexport class InvalidAbiParametersError extends BaseError {\n  override name = 'InvalidAbiParametersError'\n\n  constructor({ params }: { params: string | object }) {\n    super('Failed to parse ABI parameters.', {\n      details: `parseAbiParameters(${JSON.stringify(params, null, 2)})`,\n      docsPath: '/api/human#parseabiparameters-1',\n    })\n  }\n}\n\nexport class InvalidParameterError extends BaseError {\n  override name = 'InvalidParameterError'\n\n  constructor({ param }: { param: string }) {\n    super('Invalid ABI parameter.', {\n      details: param,\n    })\n  }\n}\n\nexport class SolidityProtectedKeywordError extends BaseError {\n  override name = 'SolidityProtectedKeywordError'\n\n  constructor({ param, name }: { param: string; name: string }) {\n    super('Invalid ABI parameter.', {\n      details: param,\n      metaMessages: [\n        `\"${name}\" is a protected Solidity keyword. More info: https://docs.soliditylang.org/en/latest/cheatsheet.html`,\n      ],\n    })\n  }\n}\n\nexport class InvalidModifierError extends BaseError {\n  override name = 'InvalidModifierError'\n\n  constructor({\n    param,\n    type,\n    modifier,\n  }: {\n    param: string\n    type?: AbiItemType | 'struct' | undefined\n    modifier: Modifier\n  }) {\n    super('Invalid ABI parameter.', {\n      details: param,\n      metaMessages: [\n        `Modifier \"${modifier}\" not allowed${\n          type ? ` in \"${type}\" type` : ''\n        }.`,\n      ],\n    })\n  }\n}\n\nexport class InvalidFunctionModifierError extends BaseError {\n  override name = 'InvalidFunctionModifierError'\n\n  constructor({\n    param,\n    type,\n    modifier,\n  }: {\n    param: string\n    type?: AbiItemType | 'struct' | undefined\n    modifier: Modifier\n  }) {\n    super('Invalid ABI parameter.', {\n      details: param,\n      metaMessages: [\n        `Modifier \"${modifier}\" not allowed${\n          type ? ` in \"${type}\" type` : ''\n        }.`,\n        `Data location can only be specified for array, struct, or mapping types, but \"${modifier}\" was given.`,\n      ],\n    })\n  }\n}\n\nexport class InvalidAbiTypeParameterError extends BaseError {\n  override name = 'InvalidAbiTypeParameterError'\n\n  constructor({\n    abiParameter,\n  }: {\n    abiParameter: AbiParameter & { indexed?: boolean | undefined }\n  }) {\n    super('Invalid ABI parameter.', {\n      details: JSON.stringify(abiParameter, null, 2),\n      metaMessages: ['ABI parameter type is invalid.'],\n    })\n  }\n}\n", "import type { AbiItemType } from '../../abi.js'\nimport { BaseError } from '../../errors.js'\n\nexport class InvalidSignatureError extends BaseError {\n  override name = 'InvalidSignatureError'\n\n  constructor({\n    signature,\n    type,\n  }: {\n    signature: string\n    type: AbiItemType | 'struct'\n  }) {\n    super(`Invalid ${type} signature.`, {\n      details: signature,\n    })\n  }\n}\n\nexport class UnknownSignatureError extends BaseError {\n  override name = 'UnknownSignatureError'\n\n  constructor({ signature }: { signature: string }) {\n    super('Unknown signature.', {\n      details: signature,\n    })\n  }\n}\n\nexport class InvalidStructSignatureError extends BaseError {\n  override name = 'InvalidStructSignatureError'\n\n  constructor({ signature }: { signature: string }) {\n    super('Invalid struct signature.', {\n      details: signature,\n      metaMessages: ['No properties exist.'],\n    })\n  }\n}\n", "import { BaseError } from '../../errors.js'\n\nexport class CircularReferenceError extends BaseError {\n  override name = 'CircularReferenceError'\n\n  constructor({ type }: { type: string }) {\n    super('Circular reference detected.', {\n      metaMessages: [`Struct \"${type}\" is a circular reference.`],\n    })\n  }\n}\n", "import { BaseError } from '../../errors.js'\n\nexport class InvalidParenthesisError extends BaseError {\n  override name = 'InvalidParenthesisError'\n\n  constructor({ current, depth }: { current: string; depth: number }) {\n    super('Unbalanced parentheses.', {\n      metaMessages: [\n        `\"${current.trim()}\" has too many ${\n          depth > 0 ? 'opening' : 'closing'\n        } parentheses.`,\n      ],\n      details: `Depth \"${depth}\"`,\n    })\n  }\n}\n", "import type { AbiItemType, AbiParameter } from '../../abi.js'\nimport type { StructLookup } from '../types/structs.js'\n\n/**\n * Gets {@link parameterCache} cache key namespaced by {@link type} and {@link structs}. This prevents parameters from being accessible to types that don't allow them (e.g. `string indexed foo` not allowed outside of `type: 'event'`) and ensures different struct definitions with the same name are cached separately.\n * @param param ABI parameter string\n * @param type ABI parameter type\n * @param structs Struct definitions to include in cache key\n * @returns Cache key for {@link parameterCache}\n */\nexport function getParameterCacheKey(\n  param: string,\n  type?: AbiItemType | 'struct',\n  structs?: StructLookup,\n) {\n  let structKey = ''\n  if (structs)\n    for (const struct of Object.entries(structs)) {\n      if (!struct) continue\n      let propertyKey = ''\n      for (const property of struct[1]) {\n        propertyKey += `[${property.type}${property.name ? `:${property.name}` : ''}]`\n      }\n      structKey += `(${struct[0]}{${propertyKey}})`\n    }\n  if (type) return `${type}:${param}${structKey}`\n  return `${param}${structKey}`\n}\n\n/**\n * Basic cache seeded with common ABI parameter strings.\n *\n * **Note: When seeding more parameters, make sure you benchmark performance. The current number is the ideal balance between performance and having an already existing cache.**\n */\nexport const parameterCache = new Map<\n  string,\n  AbiParameter & { indexed?: boolean }\n>([\n  // Unnamed\n  ['address', { type: 'address' }],\n  ['bool', { type: 'bool' }],\n  ['bytes', { type: 'bytes' }],\n  ['bytes32', { type: 'bytes32' }],\n  ['int', { type: 'int256' }],\n  ['int256', { type: 'int256' }],\n  ['string', { type: 'string' }],\n  ['uint', { type: 'uint256' }],\n  ['uint8', { type: 'uint8' }],\n  ['uint16', { type: 'uint16' }],\n  ['uint24', { type: 'uint24' }],\n  ['uint32', { type: 'uint32' }],\n  ['uint64', { type: 'uint64' }],\n  ['uint96', { type: 'uint96' }],\n  ['uint112', { type: 'uint112' }],\n  ['uint160', { type: 'uint160' }],\n  ['uint192', { type: 'uint192' }],\n  ['uint256', { type: 'uint256' }],\n\n  // Named\n  ['address owner', { type: 'address', name: 'owner' }],\n  ['address to', { type: 'address', name: 'to' }],\n  ['bool approved', { type: 'bool', name: 'approved' }],\n  ['bytes _data', { type: 'bytes', name: '_data' }],\n  ['bytes data', { type: 'bytes', name: 'data' }],\n  ['bytes signature', { type: 'bytes', name: 'signature' }],\n  ['bytes32 hash', { type: 'bytes32', name: 'hash' }],\n  ['bytes32 r', { type: 'bytes32', name: 'r' }],\n  ['bytes32 root', { type: 'bytes32', name: 'root' }],\n  ['bytes32 s', { type: 'bytes32', name: 's' }],\n  ['string name', { type: 'string', name: 'name' }],\n  ['string symbol', { type: 'string', name: 'symbol' }],\n  ['string tokenURI', { type: 'string', name: 'tokenURI' }],\n  ['uint tokenId', { type: 'uint256', name: 'tokenId' }],\n  ['uint8 v', { type: 'uint8', name: 'v' }],\n  ['uint256 balance', { type: 'uint256', name: 'balance' }],\n  ['uint256 tokenId', { type: 'uint256', name: 'tokenId' }],\n  ['uint256 value', { type: 'uint256', name: 'value' }],\n\n  // Indexed\n  [\n    'event:address indexed from',\n    { type: 'address', name: 'from', indexed: true },\n  ],\n  ['event:address indexed to', { type: 'address', name: 'to', indexed: true }],\n  [\n    'event:uint indexed tokenId',\n    { type: 'uint256', name: 'tokenId', indexed: true },\n  ],\n  [\n    'event:uint256 indexed tokenId',\n    { type: 'uint256', name: 'tokenId', indexed: true },\n  ],\n])\n", "import type {\n  AbiItemType,\n  AbiType,\n  SolidityArray,\n  SolidityBytes,\n  SolidityString,\n  SolidityTuple,\n} from '../../abi.js'\nimport {\n  bytesRegex,\n  execTyped,\n  integerRegex,\n  isTupleRegex,\n} from '../../regex.js'\nimport { UnknownSolidityTypeError } from '../errors/abiItem.js'\nimport {\n  InvalidFunctionModifierError,\n  InvalidModifierError,\n  InvalidParameterError,\n  SolidityProtectedKeywordError,\n} from '../errors/abiParameter.js'\nimport {\n  InvalidSignatureError,\n  UnknownSignatureError,\n} from '../errors/signature.js'\nimport { InvalidParenthesisError } from '../errors/splitParameters.js'\nimport type { FunctionModifier, Modifier } from '../types/signatures.js'\nimport type { StructLookup } from '../types/structs.js'\nimport { getParameterCacheKey, parameterCache } from './cache.js'\nimport {\n  eventModifiers,\n  execConstructorSignature,\n  execErrorSignature,\n  execEventSignature,\n  execFallbackSignature,\n  execFunctionSignature,\n  functionModifiers,\n  isConstructorSignature,\n  isErrorSignature,\n  isEventSignature,\n  isFallbackSignature,\n  isFunctionSignature,\n  isReceiveSignature,\n} from './signatures.js'\n\nexport function parseSignature(signature: string, structs: StructLookup = {}) {\n  if (isFunctionSignature(signature))\n    return parseFunctionSignature(signature, structs)\n\n  if (isEventSignature(signature))\n    return parseEventSignature(signature, structs)\n\n  if (isErrorSignature(signature))\n    return parseErrorSignature(signature, structs)\n\n  if (isConstructorSignature(signature))\n    return parseConstructorSignature(signature, structs)\n\n  if (isFallbackSignature(signature)) return parseFallbackSignature(signature)\n\n  if (isReceiveSignature(signature))\n    return {\n      type: 'receive',\n      stateMutability: 'payable',\n    }\n\n  throw new UnknownSignatureError({ signature })\n}\n\nexport function parseFunctionSignature(\n  signature: string,\n  structs: StructLookup = {},\n) {\n  const match = execFunctionSignature(signature)\n  if (!match) throw new InvalidSignatureError({ signature, type: 'function' })\n\n  const inputParams = splitParameters(match.parameters)\n  const inputs = []\n  const inputLength = inputParams.length\n  for (let i = 0; i < inputLength; i++) {\n    inputs.push(\n      parseAbiParameter(inputParams[i]!, {\n        modifiers: functionModifiers,\n        structs,\n        type: 'function',\n      }),\n    )\n  }\n\n  const outputs = []\n  if (match.returns) {\n    const outputParams = splitParameters(match.returns)\n    const outputLength = outputParams.length\n    for (let i = 0; i < outputLength; i++) {\n      outputs.push(\n        parseAbiParameter(outputParams[i]!, {\n          modifiers: functionModifiers,\n          structs,\n          type: 'function',\n        }),\n      )\n    }\n  }\n\n  return {\n    name: match.name,\n    type: 'function',\n    stateMutability: match.stateMutability ?? 'nonpayable',\n    inputs,\n    outputs,\n  }\n}\n\nexport function parseEventSignature(\n  signature: string,\n  structs: StructLookup = {},\n) {\n  const match = execEventSignature(signature)\n  if (!match) throw new InvalidSignatureError({ signature, type: 'event' })\n\n  const params = splitParameters(match.parameters)\n  const abiParameters = []\n  const length = params.length\n  for (let i = 0; i < length; i++)\n    abiParameters.push(\n      parseAbiParameter(params[i]!, {\n        modifiers: eventModifiers,\n        structs,\n        type: 'event',\n      }),\n    )\n  return { name: match.name, type: 'event', inputs: abiParameters }\n}\n\nexport function parseErrorSignature(\n  signature: string,\n  structs: StructLookup = {},\n) {\n  const match = execErrorSignature(signature)\n  if (!match) throw new InvalidSignatureError({ signature, type: 'error' })\n\n  const params = splitParameters(match.parameters)\n  const abiParameters = []\n  const length = params.length\n  for (let i = 0; i < length; i++)\n    abiParameters.push(\n      parseAbiParameter(params[i]!, { structs, type: 'error' }),\n    )\n  return { name: match.name, type: 'error', inputs: abiParameters }\n}\n\nexport function parseConstructorSignature(\n  signature: string,\n  structs: StructLookup = {},\n) {\n  const match = execConstructorSignature(signature)\n  if (!match)\n    throw new InvalidSignatureError({ signature, type: 'constructor' })\n\n  const params = splitParameters(match.parameters)\n  const abiParameters = []\n  const length = params.length\n  for (let i = 0; i < length; i++)\n    abiParameters.push(\n      parseAbiParameter(params[i]!, { structs, type: 'constructor' }),\n    )\n  return {\n    type: 'constructor',\n    stateMutability: match.stateMutability ?? 'nonpayable',\n    inputs: abiParameters,\n  }\n}\n\nexport function parseFallbackSignature(signature: string) {\n  const match = execFallbackSignature(signature)\n  if (!match) throw new InvalidSignatureError({ signature, type: 'fallback' })\n\n  return {\n    type: 'fallback',\n    stateMutability: match.stateMutability ?? 'nonpayable',\n  }\n}\n\nconst abiParameterWithoutTupleRegex =\n  /^(?<type>[a-zA-Z$_][a-zA-Z0-9$_]*(?:\\spayable)?)(?<array>(?:\\[\\d*?\\])+?)?(?:\\s(?<modifier>calldata|indexed|memory|storage{1}))?(?:\\s(?<name>[a-zA-Z$_][a-zA-Z0-9$_]*))?$/\nconst abiParameterWithTupleRegex =\n  /^\\((?<type>.+?)\\)(?<array>(?:\\[\\d*?\\])+?)?(?:\\s(?<modifier>calldata|indexed|memory|storage{1}))?(?:\\s(?<name>[a-zA-Z$_][a-zA-Z0-9$_]*))?$/\nconst dynamicIntegerRegex = /^u?int$/\n\ntype ParseOptions = {\n  modifiers?: Set<Modifier>\n  structs?: StructLookup\n  type?: AbiItemType | 'struct'\n}\n\nexport function parseAbiParameter(param: string, options?: ParseOptions) {\n  // optional namespace cache by `type`\n  const parameterCacheKey = getParameterCacheKey(\n    param,\n    options?.type,\n    options?.structs,\n  )\n  if (parameterCache.has(parameterCacheKey))\n    return parameterCache.get(parameterCacheKey)!\n\n  const isTuple = isTupleRegex.test(param)\n  const match = execTyped<{\n    array?: string\n    modifier?: Modifier\n    name?: string\n    type: string\n  }>(\n    isTuple ? abiParameterWithTupleRegex : abiParameterWithoutTupleRegex,\n    param,\n  )\n  if (!match) throw new InvalidParameterError({ param })\n\n  if (match.name && isSolidityKeyword(match.name))\n    throw new SolidityProtectedKeywordError({ param, name: match.name })\n\n  const name = match.name ? { name: match.name } : {}\n  const indexed = match.modifier === 'indexed' ? { indexed: true } : {}\n  const structs = options?.structs ?? {}\n  let type: string\n  let components = {}\n  if (isTuple) {\n    type = 'tuple'\n    const params = splitParameters(match.type)\n    const components_ = []\n    const length = params.length\n    for (let i = 0; i < length; i++) {\n      // remove `modifiers` from `options` to prevent from being added to tuple components\n      components_.push(parseAbiParameter(params[i]!, { structs }))\n    }\n    components = { components: components_ }\n  } else if (match.type in structs) {\n    type = 'tuple'\n    components = { components: structs[match.type] }\n  } else if (dynamicIntegerRegex.test(match.type)) {\n    type = `${match.type}256`\n  } else if (match.type === 'address payable') {\n    type = 'address'\n  } else {\n    type = match.type\n    if (!(options?.type === 'struct') && !isSolidityType(type))\n      throw new UnknownSolidityTypeError({ type })\n  }\n\n  if (match.modifier) {\n    // Check if modifier exists, but is not allowed (e.g. `indexed` in `functionModifiers`)\n    if (!options?.modifiers?.has?.(match.modifier))\n      throw new InvalidModifierError({\n        param,\n        type: options?.type,\n        modifier: match.modifier,\n      })\n\n    // Check if resolved `type` is valid if there is a function modifier\n    if (\n      functionModifiers.has(match.modifier as FunctionModifier) &&\n      !isValidDataLocation(type, !!match.array)\n    )\n      throw new InvalidFunctionModifierError({\n        param,\n        type: options?.type,\n        modifier: match.modifier,\n      })\n  }\n\n  const abiParameter = {\n    type: `${type}${match.array ?? ''}`,\n    ...name,\n    ...indexed,\n    ...components,\n  }\n  parameterCache.set(parameterCacheKey, abiParameter)\n  return abiParameter\n}\n\n// s/o latika for this\nexport function splitParameters(\n  params: string,\n  result: string[] = [],\n  current = '',\n  depth = 0,\n): readonly string[] {\n  const length = params.trim().length\n  // biome-ignore lint/correctness/noUnreachable: recursive\n  for (let i = 0; i < length; i++) {\n    const char = params[i]\n    const tail = params.slice(i + 1)\n    switch (char) {\n      case ',':\n        return depth === 0\n          ? splitParameters(tail, [...result, current.trim()])\n          : splitParameters(tail, result, `${current}${char}`, depth)\n      case '(':\n        return splitParameters(tail, result, `${current}${char}`, depth + 1)\n      case ')':\n        return splitParameters(tail, result, `${current}${char}`, depth - 1)\n      default:\n        return splitParameters(tail, result, `${current}${char}`, depth)\n    }\n  }\n\n  if (current === '') return result\n  if (depth !== 0) throw new InvalidParenthesisError({ current, depth })\n\n  result.push(current.trim())\n  return result\n}\n\nexport function isSolidityType(\n  type: string,\n): type is Exclude<AbiType, SolidityTuple | SolidityArray> {\n  return (\n    type === 'address' ||\n    type === 'bool' ||\n    type === 'function' ||\n    type === 'string' ||\n    bytesRegex.test(type) ||\n    integerRegex.test(type)\n  )\n}\n\nconst protectedKeywordsRegex =\n  /^(?:after|alias|anonymous|apply|auto|byte|calldata|case|catch|constant|copyof|default|defined|error|event|external|false|final|function|immutable|implements|in|indexed|inline|internal|let|mapping|match|memory|mutable|null|of|override|partial|private|promise|public|pure|reference|relocatable|return|returns|sizeof|static|storage|struct|super|supports|switch|this|true|try|typedef|typeof|var|view|virtual)$/\n\n/** @internal */\nexport function isSolidityKeyword(name: string) {\n  return (\n    name === 'address' ||\n    name === 'bool' ||\n    name === 'function' ||\n    name === 'string' ||\n    name === 'tuple' ||\n    bytesRegex.test(name) ||\n    integerRegex.test(name) ||\n    protectedKeywordsRegex.test(name)\n  )\n}\n\n/** @internal */\nexport function isValidDataLocation(\n  type: string,\n  isArray: boolean,\n): type is Exclude<\n  AbiType,\n  SolidityString | Extract<SolidityBytes, 'bytes'> | SolidityArray\n> {\n  return isArray || type === 'bytes' || type === 'string' || type === 'tuple'\n}\n", "import type { AbiParameter } from '../../abi.js'\nimport { execTyped, isTupleRegex } from '../../regex.js'\nimport { UnknownTypeError } from '../errors/abiItem.js'\nimport { InvalidAbiTypeParameterError } from '../errors/abiParameter.js'\nimport {\n  InvalidSignatureError,\n  InvalidStructSignatureError,\n} from '../errors/signature.js'\nimport { CircularReferenceError } from '../errors/struct.js'\nimport type { StructLookup } from '../types/structs.js'\nimport { execStructSignature, isStructSignature } from './signatures.js'\nimport { isSolidityType, parseAbiParameter } from './utils.js'\n\nexport function parseStructs(signatures: readonly string[]) {\n  // Create \"shallow\" version of each struct (and filter out non-structs or invalid structs)\n  const shallowStructs: StructLookup = {}\n  const signaturesLength = signatures.length\n  for (let i = 0; i < signaturesLength; i++) {\n    const signature = signatures[i]!\n    if (!isStructSignature(signature)) continue\n\n    const match = execStructSignature(signature)\n    if (!match) throw new InvalidSignatureError({ signature, type: 'struct' })\n\n    const properties = match.properties.split(';')\n\n    const components: AbiParameter[] = []\n    const propertiesLength = properties.length\n    for (let k = 0; k < propertiesLength; k++) {\n      const property = properties[k]!\n      const trimmed = property.trim()\n      if (!trimmed) continue\n      const abiParameter = parseAbiParameter(trimmed, {\n        type: 'struct',\n      })\n      components.push(abiParameter)\n    }\n\n    if (!components.length) throw new InvalidStructSignatureError({ signature })\n    shallowStructs[match.name] = components\n  }\n\n  // Resolve nested structs inside each parameter\n  const resolvedStructs: StructLookup = {}\n  const entries = Object.entries(shallowStructs)\n  const entriesLength = entries.length\n  for (let i = 0; i < entriesLength; i++) {\n    const [name, parameters] = entries[i]!\n    resolvedStructs[name] = resolveStructs(parameters, shallowStructs)\n  }\n\n  return resolvedStructs\n}\n\nconst typeWithoutTupleRegex =\n  /^(?<type>[a-zA-Z$_][a-zA-Z0-9$_]*)(?<array>(?:\\[\\d*?\\])+?)?$/\n\nfunction resolveStructs(\n  abiParameters: readonly (AbiParameter & { indexed?: true })[] = [],\n  structs: StructLookup = {},\n  ancestors = new Set<string>(),\n) {\n  const components: AbiParameter[] = []\n  const length = abiParameters.length\n  for (let i = 0; i < length; i++) {\n    const abiParameter = abiParameters[i]!\n    const isTuple = isTupleRegex.test(abiParameter.type)\n    if (isTuple) components.push(abiParameter)\n    else {\n      const match = execTyped<{ array?: string; type: string }>(\n        typeWithoutTupleRegex,\n        abiParameter.type,\n      )\n      if (!match?.type) throw new InvalidAbiTypeParameterError({ abiParameter })\n\n      const { array, type } = match\n      if (type in structs) {\n        if (ancestors.has(type)) throw new CircularReferenceError({ type })\n\n        components.push({\n          ...abiParameter,\n          type: `tuple${array ?? ''}`,\n          components: resolveStructs(\n            structs[type],\n            structs,\n            new Set([...ancestors, type]),\n          ),\n        })\n      } else {\n        if (isSolidityType(type)) components.push(abiParameter)\n        else throw new UnknownTypeError({ type })\n      }\n    }\n  }\n\n  return components\n}\n", "import type { Abi } from '../abi.js'\nimport type { Error, Filter } from '../types.js'\nimport { isStructSignature } from './runtime/signatures.js'\nimport { parseStructs } from './runtime/structs.js'\nimport { parseSignature } from './runtime/utils.js'\nimport type { Signatures } from './types/signatures.js'\nimport type { ParseStructs } from './types/structs.js'\nimport type { ParseSignature } from './types/utils.js'\n\n/**\n * Parses human-readable ABI into JSON {@link Abi}\n *\n * @param signatures - Human-readable ABI\n * @returns Parsed {@link Abi}\n *\n * @example\n * type Result = ParseAbi<\n *   // ^? type Result = readonly [{ name: \"balanceOf\"; type: \"function\"; stateMutability:...\n *   [\n *     'function balanceOf(address owner) view returns (uint256)',\n *     'event Transfer(address indexed from, address indexed to, uint256 amount)',\n *   ]\n * >\n */\nexport type ParseAbi<signatures extends readonly string[]> =\n  string[] extends signatures\n    ? Abi // If `T` was not able to be inferred (e.g. just `string[]`), return `Abi`\n    : signatures extends readonly string[]\n      ? signatures extends Signatures<signatures> // Validate signatures\n        ? ParseStructs<signatures> extends infer structs\n          ? {\n              [key in keyof signatures]: signatures[key] extends string\n                ? ParseSignature<signatures[key], structs>\n                : never\n            } extends infer mapped extends readonly unknown[]\n            ? Filter<mapped, never> extends infer result\n              ? result extends readonly []\n                ? never\n                : result\n              : never\n            : never\n          : never\n        : never\n      : never\n\n/**\n * Parses human-readable ABI into JSON {@link Abi}\n *\n * @param signatures - Human-Readable ABI\n * @returns Parsed {@link Abi}\n *\n * @example\n * const abi = parseAbi([\n *   //  ^? const abi: readonly [{ name: \"balanceOf\"; type: \"function\"; stateMutability:...\n *   'function balanceOf(address owner) view returns (uint256)',\n *   'event Transfer(address indexed from, address indexed to, uint256 amount)',\n * ])\n */\nexport function parseAbi<const signatures extends readonly string[]>(\n  signatures: signatures['length'] extends 0\n    ? Error<'At least one signature required'>\n    : Signatures<signatures> extends signatures\n      ? signatures\n      : Signatures<signatures>,\n): ParseAbi<signatures> {\n  const structs = parseStructs(signatures as readonly string[])\n  const abi = []\n  const length = signatures.length as number\n  for (let i = 0; i < length; i++) {\n    const signature = (signatures as readonly string[])[i]!\n    if (isStructSignature(signature)) continue\n    abi.push(parseSignature(signature, structs))\n  }\n  return abi as unknown as ParseAbi<signatures>\n}\n", "import type { Abi } from '../abi.js'\nimport type { Narrow } from '../narrow.js'\nimport type { Error, Filter } from '../types.js'\nimport { InvalidAbiItemError } from './errors/abiItem.js'\nimport { isStructSignature } from './runtime/signatures.js'\nimport { parseStructs } from './runtime/structs.js'\nimport { parseSignature } from './runtime/utils.js'\nimport type { Signature, Signatures } from './types/signatures.js'\nimport type { ParseStructs } from './types/structs.js'\nimport type { ParseSignature } from './types/utils.js'\n\n/**\n * Parses human-readable ABI item (e.g. error, event, function) into {@link Abi} item\n *\n * @param signature - Human-readable ABI item\n * @returns Parsed {@link Abi} item\n *\n * @example\n * type Result = ParseAbiItem<'function balanceOf(address owner) view returns (uint256)'>\n * //   ^? type Result = { name: \"balanceOf\"; type: \"function\"; stateMutability: \"view\";...\n *\n * @example\n * type Result = ParseAbiItem<\n *   // ^? type Result = { name: \"foo\"; type: \"function\"; stateMutability: \"view\"; inputs:...\n *   ['function foo(Baz bar) view returns (string)', 'struct Baz { string name; }']\n * >\n */\nexport type ParseAbiItem<\n  signature extends string | readonly string[] | readonly unknown[],\n> =\n  | (signature extends string\n      ? string extends signature\n        ? Abi[number]\n        : signature extends Signature<signature> // Validate signature\n          ? ParseSignature<signature>\n          : never\n      : never)\n  | (signature extends readonly string[]\n      ? string[] extends signature\n        ? Abi[number] // Return generic Abi item since type was no inferrable\n        : signature extends Signatures<signature> // Validate signature\n          ? ParseStructs<signature> extends infer structs\n            ? {\n                [key in keyof signature]: ParseSignature<\n                  signature[key] extends string ? signature[key] : never,\n                  structs\n                >\n              } extends infer mapped extends readonly unknown[]\n              ? // Filter out `never` since those are structs\n                Filter<mapped, never>[0] extends infer result\n                ? result extends undefined // convert `undefined` to `never` (e.g. `ParseAbiItem<['struct Foo { string name; }']>`)\n                  ? never\n                  : result\n                : never\n              : never\n            : never\n          : never\n      : never)\n\n/**\n * Parses human-readable ABI item (e.g. error, event, function) into {@link Abi} item\n *\n * @param signature - Human-readable ABI item\n * @returns Parsed {@link Abi} item\n *\n * @example\n * const abiItem = parseAbiItem('function balanceOf(address owner) view returns (uint256)')\n * //    ^? const abiItem: { name: \"balanceOf\"; type: \"function\"; stateMutability: \"view\";...\n *\n * @example\n * const abiItem = parseAbiItem([\n *   //  ^? const abiItem: { name: \"foo\"; type: \"function\"; stateMutability: \"view\"; inputs:...\n *   'function foo(Baz bar) view returns (string)',\n *   'struct Baz { string name; }',\n * ])\n */\nexport function parseAbiItem<\n  signature extends string | readonly string[] | readonly unknown[],\n>(\n  signature: Narrow<signature> &\n    (\n      | (signature extends string\n          ? string extends signature\n            ? unknown\n            : Signature<signature>\n          : never)\n      | (signature extends readonly string[]\n          ? signature extends readonly [] // empty array\n            ? Error<'At least one signature required.'>\n            : string[] extends signature\n              ? unknown\n              : Signatures<signature>\n          : never)\n    ),\n): ParseAbiItem<signature> {\n  let abiItem: ParseAbiItem<signature> | undefined\n  if (typeof signature === 'string')\n    abiItem = parseSignature(signature) as ParseAbiItem<signature>\n  else {\n    const structs = parseStructs(signature as readonly string[])\n    const length = signature.length as number\n    for (let i = 0; i < length; i++) {\n      const signature_ = (signature as readonly string[])[i]!\n      if (isStructSignature(signature_)) continue\n      abiItem = parseSignature(signature_, structs) as ParseAbiItem<signature>\n      break\n    }\n  }\n\n  if (!abiItem) throw new InvalidAbiItemError({ signature })\n  return abiItem as ParseAbiItem<signature>\n}\n", "import type { AbiParameter } from '../abi.js'\nimport type { Narrow } from '../narrow.js'\nimport type { Error, Filter } from '../types.js'\nimport { InvalidAbiParametersError } from './errors/abiParameter.js'\nimport { isStructSignature, modifiers } from './runtime/signatures.js'\nimport { parseStructs } from './runtime/structs.js'\nimport { splitParameters } from './runtime/utils.js'\nimport { parseAbiParameter as parseAbiParameter_ } from './runtime/utils.js'\nimport type { IsStructSignature, Modifier } from './types/signatures.js'\nimport type { ParseStructs } from './types/structs.js'\nimport type { SplitParameters } from './types/utils.js'\nimport type { ParseAbiParameters as ParseAbiParameters_ } from './types/utils.js'\n\n/**\n * Parses human-readable ABI parameters into {@link AbiParameter}s\n *\n * @param params - Human-readable ABI parameters\n * @returns Parsed {@link AbiParameter}s\n *\n * @example\n * type Result = ParseAbiParameters('address from, address to, uint256 amount')\n * //   ^? type Result: [{ type: \"address\"; name: \"from\"; }, { type: \"address\";...\n *\n * @example\n * type Result = ParseAbiParameters<\n *   // ^? type Result: [{ type: \"tuple\"; components: [{ type: \"string\"; name:...\n *   ['Baz bar', 'struct Baz { string name; }']\n * >\n */\nexport type ParseAbiParameters<\n  params extends string | readonly string[] | readonly unknown[],\n> =\n  | (params extends string\n      ? params extends ''\n        ? never\n        : string extends params\n          ? readonly AbiParameter[]\n          : ParseAbiParameters_<SplitParameters<params>, { modifier: Modifier }>\n      : never)\n  | (params extends readonly string[]\n      ? string[] extends params\n        ? AbiParameter // Return generic AbiParameter item since type was no inferrable\n        : ParseStructs<params> extends infer structs\n          ? {\n              [key in keyof params]: params[key] extends string\n                ? IsStructSignature<params[key]> extends true\n                  ? never\n                  : ParseAbiParameters_<\n                      SplitParameters<params[key]>,\n                      { modifier: Modifier; structs: structs }\n                    >\n                : never\n            } extends infer mapped extends readonly unknown[]\n            ? Filter<mapped, never> extends readonly [...infer content]\n              ? content['length'] extends 0\n                ? never\n                : DeepFlatten<content>\n              : never\n            : never\n          : never\n      : never)\n\n/**\n * Flatten all members of {@link T}\n *\n * @param T - List of items to flatten\n * @param Acc - The accumulator used while recursing\n * @returns The flattened array\n *\n * @example\n * type Result = DeepFlatten<[['a', 'b'], [['c']]]>\n * //   ^? type Result = ['a', 'b', 'c']\n */\ntype DeepFlatten<\n  T extends readonly unknown[],\n  Acc extends readonly unknown[] = readonly [],\n> = T extends readonly [infer head, ...infer tail]\n  ? tail extends undefined\n    ? never\n    : head extends readonly unknown[]\n      ? DeepFlatten<tail, readonly [...Acc, ...DeepFlatten<head>]>\n      : DeepFlatten<tail, readonly [...Acc, head]>\n  : Acc\n\n/**\n * Parses human-readable ABI parameters into {@link AbiParameter}s\n *\n * @param params - Human-readable ABI parameters\n * @returns Parsed {@link AbiParameter}s\n *\n * @example\n * const abiParameters = parseAbiParameters('address from, address to, uint256 amount')\n * //    ^? const abiParameters: [{ type: \"address\"; name: \"from\"; }, { type: \"address\";...\n *\n * @example\n * const abiParameters = parseAbiParameters([\n *   //  ^? const abiParameters: [{ type: \"tuple\"; components: [{ type: \"string\"; name:...\n *   'Baz bar',\n *   'struct Baz { string name; }',\n * ])\n */\nexport function parseAbiParameters<\n  params extends string | readonly string[] | readonly unknown[],\n>(\n  params: Narrow<params> &\n    (\n      | (params extends string\n          ? params extends ''\n            ? Error<'Empty string is not allowed.'>\n            : unknown\n          : never)\n      | (params extends readonly string[]\n          ? params extends readonly [] // empty array\n            ? Error<'At least one parameter required.'>\n            : string[] extends params\n              ? unknown\n              : unknown // TODO: Validate param string\n          : never)\n    ),\n): ParseAbiParameters<params> {\n  const abiParameters: AbiParameter[] = []\n  if (typeof params === 'string') {\n    const parameters = splitParameters(params)\n    const length = parameters.length\n    for (let i = 0; i < length; i++) {\n      abiParameters.push(parseAbiParameter_(parameters[i]!, { modifiers }))\n    }\n  } else {\n    const structs = parseStructs(params as readonly string[])\n    const length = params.length as number\n    for (let i = 0; i < length; i++) {\n      const signature = (params as readonly string[])[i]!\n      if (isStructSignature(signature)) continue\n      const parameters = splitParameters(signature)\n      const length = parameters.length\n      for (let k = 0; k < length; k++) {\n        abiParameters.push(\n          parseAbiParameter_(parameters[k]!, { modifiers, structs }),\n        )\n      }\n    }\n  }\n\n  if (abiParameters.length === 0)\n    throw new InvalidAbiParametersError({ params })\n\n  return abiParameters as ParseAbiParameters<params>\n}\n", "export type {\n  Abi,\n  AbiConstructor,\n  AbiError,\n  AbiEvent,\n  AbiEventParameter,\n  AbiFallback,\n  AbiFunction,\n  AbiInternalType,\n  AbiItemType,\n  AbiParameter,\n  AbiParameterKind,\n  AbiReceive,\n  AbiStateMutability,\n  AbiType,\n  Address,\n  SolidityAddress,\n  SolidityArray,\n  SolidityArrayWithoutTuple,\n  SolidityArrayWithTuple,\n  SolidityBool,\n  SolidityBytes,\n  SolidityFixedArrayRange,\n  SolidityFixedArraySizeLookup,\n  SolidityFunction,\n  SolidityInt,\n  SolidityString,\n  SolidityTuple,\n  TypedData,\n  TypedDataDomain,\n  TypedDataParameter,\n  TypedDataType,\n} from '../abi.js'\n\n// biome-ignore lint/performance/noBarrelFile: <explanation>\nexport { BaseError } from '../errors.js'\n\nexport type { Narrow } from '../narrow.js'\nexport { narrow } from '../narrow.js'\n\nexport type {\n  Register,\n  DefaultRegister,\n  ResolvedRegister,\n} from '../register.js'\n\nexport type {\n  AbiParameterToPrimitiveType,\n  AbiParametersToPrimitiveTypes,\n  AbiTypeToPrimitiveType,\n  ExtractAbiError,\n  ExtractAbiErrorNames,\n  ExtractAbiErrors,\n  ExtractAbiEvent,\n  ExtractAbiEventNames,\n  ExtractAbiEvents,\n  ExtractAbiFunction,\n  ExtractAbiFunctionNames,\n  ExtractAbiFunctions,\n  IsAbi,\n  IsTypedData,\n  TypedDataToPrimitiveTypes,\n} from '../utils.js'\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n// Human-Readable\n\nexport {\n  formatAbi,\n  type FormatAbi,\n} from '../human-readable/formatAbi.js'\n\nexport {\n  formatAbiItem,\n  type FormatAbiItem,\n} from '../human-readable/formatAbiItem.js'\n\nexport {\n  formatAbiParameter,\n  type FormatAbiParameter,\n} from '../human-readable/formatAbiParameter.js'\n\nexport {\n  formatAbiParameters,\n  type FormatAbiParameters,\n} from '../human-readable/formatAbiParameters.js'\n\nexport { parseAbi, type ParseAbi } from '../human-readable/parseAbi.js'\n\nexport {\n  parseAbiItem,\n  type ParseAbiItem,\n} from '../human-readable/parseAbiItem.js'\n\nexport {\n  parseAbiParameter,\n  type ParseAbiParameter,\n} from '../human-readable/parseAbiParameter.js'\n\nexport {\n  parseAbiParameters,\n  type ParseAbiParameters,\n} from '../human-readable/parseAbiParameters.js'\n\nexport {\n  UnknownTypeError,\n  InvalidAbiItemError,\n  UnknownSolidityTypeError,\n} from '../human-readable/errors/abiItem.js'\n\nexport {\n  InvalidAbiTypeParameterError,\n  InvalidFunctionModifierError,\n  InvalidModifierError,\n  SolidityProtectedKeywordError,\n  InvalidParameterError,\n  InvalidAbiParametersError,\n  InvalidAbiParameterError,\n} from '../human-readable/errors/abiParameter.js'\n\nexport {\n  InvalidStructSignatureError,\n  InvalidSignatureError,\n  UnknownSignatureError,\n} from '../human-readable/errors/signature.js'\n\nexport { InvalidParenthesisError } from '../human-readable/errors/splitParameters.js'\n\nexport { CircularReferenceError } from '../human-readable/errors/struct.js'\n", "import type { AbiParameter } from 'abitype'\n\nimport {\n  InvalidDefinitionTypeError,\n  type InvalidDefinitionTypeErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { AbiItem } from '../../types/contract.js'\n\nexport type FormatAbiItemErrorType =\n  | FormatAbiParamsErrorType\n  | InvalidDefinitionTypeErrorType\n  | ErrorType\n\nexport function formatAbiItem(\n  abiItem: AbiItem,\n  { includeName = false }: { includeName?: boolean | undefined } = {},\n) {\n  if (\n    abiItem.type !== 'function' &&\n    abiItem.type !== 'event' &&\n    abiItem.type !== 'error'\n  )\n    throw new InvalidDefinitionTypeError(abiItem.type)\n\n  return `${abiItem.name}(${formatAbiParams(abiItem.inputs, { includeName })})`\n}\n\nexport type FormatAbiParamsErrorType = ErrorType\n\nexport function formatAbiParams(\n  params: readonly AbiParameter[] | undefined,\n  { includeName = false }: { includeName?: boolean | undefined } = {},\n): string {\n  if (!params) return ''\n  return params\n    .map((param) => formatAbiParam(param, { includeName }))\n    .join(includeName ? ', ' : ',')\n}\n\nexport type FormatAbiParamErrorType = ErrorType\n\nfunction formatAbiParam(\n  param: AbiParameter,\n  { includeName }: { includeName: boolean },\n): string {\n  if (param.type.startsWith('tuple')) {\n    return `(${formatAbiParams(\n      (param as unknown as { components: AbiParameter[] }).components,\n      { includeName },\n    )})${param.type.slice('tuple'.length)}`\n  }\n  return param.type + (includeName && param.name ? ` ${param.name}` : '')\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\n\nexport type IsHexErrorType = ErrorType\n\nexport function isHex(\n  value: unknown,\n  { strict = true }: { strict?: boolean | undefined } = {},\n): value is Hex {\n  if (!value) return false\n  if (typeof value !== 'string') return false\n  return strict ? /^0x[0-9a-fA-F]*$/.test(value) : value.startsWith('0x')\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\nimport { type IsHexErrorType, isHex } from './isHex.js'\n\nexport type SizeErrorType = IsHexErrorType | ErrorType\n\n/**\n * @description Retrieves the size of the value (in bytes).\n *\n * @param value The value (hex or byte array) to retrieve the size of.\n * @returns The size of the value (in bytes).\n */\nexport function size(value: Hex | ByteArray) {\n  if (isHex(value, { strict: false })) return Math.ceil((value.length - 2) / 2)\n  return value.length\n}\n", "export const version = '2.47.16'\n", "import { version } from './version.js'\n\ntype ErrorConfig = {\n  getDocsUrl?: ((args: BaseErrorParameters) => string | undefined) | undefined\n  version?: string | undefined\n}\n\nlet errorConfig: ErrorConfig = {\n  getDocsUrl: ({\n    docsBaseUrl,\n    docsPath = '',\n    docsSlug,\n  }: BaseErrorParameters) =>\n    docsPath\n      ? `${docsBaseUrl ?? 'https://viem.sh'}${docsPath}${\n          docsSlug ? `#${docsSlug}` : ''\n        }`\n      : undefined,\n  version: `viem@${version}`,\n}\n\nexport function setErrorConfig(config: ErrorConfig) {\n  errorConfig = config\n}\n\ntype BaseErrorParameters = {\n  cause?: BaseError | Error | undefined\n  details?: string | undefined\n  docsBaseUrl?: string | undefined\n  docsPath?: string | undefined\n  docsSlug?: string | undefined\n  metaMessages?: string[] | undefined\n  name?: string | undefined\n}\n\nexport type BaseErrorType = BaseError & { name: 'BaseError' }\nexport class BaseError extends Error {\n  details: string\n  docsPath?: string | undefined\n  metaMessages?: string[] | undefined\n  shortMessage: string\n  version: string\n\n  override name = 'BaseError'\n\n  constructor(shortMessage: string, args: BaseErrorParameters = {}) {\n    const details = (() => {\n      if (args.cause instanceof BaseError) return args.cause.details\n      if (args.cause?.message) return args.cause.message\n      return args.details!\n    })()\n    const docsPath = (() => {\n      if (args.cause instanceof BaseError)\n        return args.cause.docsPath || args.docsPath\n      return args.docsPath\n    })()\n    const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath })\n\n    const message = [\n      shortMessage || 'An error occurred.',\n      '',\n      ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n      ...(docsUrl ? [`Docs: ${docsUrl}`] : []),\n      ...(details ? [`Details: ${details}`] : []),\n      ...(errorConfig.version ? [`Version: ${errorConfig.version}`] : []),\n    ].join('\\n')\n\n    super(message, args.cause ? { cause: args.cause } : undefined)\n\n    this.details = details\n    this.docsPath = docsPath\n    this.metaMessages = args.metaMessages\n    this.name = args.name ?? this.name\n    this.shortMessage = shortMessage\n    this.version = version\n  }\n\n  walk(): Error\n  walk(fn: (err: unknown) => boolean): Error | null\n  walk(fn?: any): any {\n    return walk(this, fn)\n  }\n}\n\nfunction walk(\n  err: unknown,\n  fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n  if (fn?.(err)) return err\n  if (\n    err &&\n    typeof err === 'object' &&\n    'cause' in err &&\n    err.cause !== undefined\n  )\n    return walk(err.cause, fn)\n  return fn ? null : err\n}\n", "import type { Abi, AbiEvent, AbiParameter } from 'abitype'\n\nimport type { Hex } from '../types/misc.js'\nimport { formatAbiItem, formatAbiParams } from '../utils/abi/formatAbiItem.js'\nimport { size } from '../utils/data/size.js'\n\nimport { BaseError } from './base.js'\n\nexport type AbiConstructorNotFoundErrorType = AbiConstructorNotFoundError & {\n  name: 'AbiConstructorNotFoundError'\n}\nexport class AbiConstructorNotFoundError extends BaseError {\n  constructor({ docsPath }: { docsPath: string }) {\n    super(\n      [\n        'A constructor was not found on the ABI.',\n        'Make sure you are using the correct ABI and that the constructor exists on it.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiConstructorNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiConstructorParamsNotFoundErrorType =\n  AbiConstructorParamsNotFoundError & {\n    name: 'AbiConstructorParamsNotFoundError'\n  }\n\nexport class AbiConstructorParamsNotFoundError extends BaseError {\n  constructor({ docsPath }: { docsPath: string }) {\n    super(\n      [\n        'Constructor arguments were provided (`args`), but a constructor parameters (`inputs`) were not found on the ABI.',\n        'Make sure you are using the correct ABI, and that the `inputs` attribute on the constructor exists.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiConstructorParamsNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiDecodingDataSizeInvalidErrorType =\n  AbiDecodingDataSizeInvalidError & {\n    name: 'AbiDecodingDataSizeInvalidError'\n  }\nexport class AbiDecodingDataSizeInvalidError extends BaseError {\n  constructor({ data, size }: { data: Hex; size: number }) {\n    super(\n      [\n        `Data size of ${size} bytes is invalid.`,\n        'Size must be in increments of 32 bytes (size % 32 === 0).',\n      ].join('\\n'),\n      {\n        metaMessages: [`Data: ${data} (${size} bytes)`],\n        name: 'AbiDecodingDataSizeInvalidError',\n      },\n    )\n  }\n}\n\nexport type AbiDecodingDataSizeTooSmallErrorType =\n  AbiDecodingDataSizeTooSmallError & {\n    name: 'AbiDecodingDataSizeTooSmallError'\n  }\nexport class AbiDecodingDataSizeTooSmallError extends BaseError {\n  data: Hex\n  params: readonly AbiParameter[]\n  size: number\n\n  constructor({\n    data,\n    params,\n    size,\n  }: { data: Hex; params: readonly AbiParameter[]; size: number }) {\n    super(\n      [`Data size of ${size} bytes is too small for given parameters.`].join(\n        '\\n',\n      ),\n      {\n        metaMessages: [\n          `Params: (${formatAbiParams(params, { includeName: true })})`,\n          `Data:   ${data} (${size} bytes)`,\n        ],\n        name: 'AbiDecodingDataSizeTooSmallError',\n      },\n    )\n\n    this.data = data\n    this.params = params\n    this.size = size\n  }\n}\n\nexport type AbiDecodingZeroDataErrorType = AbiDecodingZeroDataError & {\n  name: 'AbiDecodingZeroDataError'\n}\nexport class AbiDecodingZeroDataError extends BaseError {\n  constructor({ cause }: { cause?: BaseError | Error | undefined } = {}) {\n    super('Cannot decode zero data (\"0x\") with ABI parameters.', {\n      name: 'AbiDecodingZeroDataError',\n      cause,\n    })\n  }\n}\n\nexport type AbiEncodingArrayLengthMismatchErrorType =\n  AbiEncodingArrayLengthMismatchError & {\n    name: 'AbiEncodingArrayLengthMismatchError'\n  }\nexport class AbiEncodingArrayLengthMismatchError extends BaseError {\n  constructor({\n    expectedLength,\n    givenLength,\n    type,\n  }: { expectedLength: number; givenLength: number; type: string }) {\n    super(\n      [\n        `ABI encoding array length mismatch for type ${type}.`,\n        `Expected length: ${expectedLength}`,\n        `Given length: ${givenLength}`,\n      ].join('\\n'),\n      { name: 'AbiEncodingArrayLengthMismatchError' },\n    )\n  }\n}\n\nexport type AbiEncodingBytesSizeMismatchErrorType =\n  AbiEncodingBytesSizeMismatchError & {\n    name: 'AbiEncodingBytesSizeMismatchError'\n  }\nexport class AbiEncodingBytesSizeMismatchError extends BaseError {\n  constructor({ expectedSize, value }: { expectedSize: number; value: Hex }) {\n    super(\n      `Size of bytes \"${value}\" (bytes${size(\n        value,\n      )}) does not match expected size (bytes${expectedSize}).`,\n      { name: 'AbiEncodingBytesSizeMismatchError' },\n    )\n  }\n}\n\nexport type AbiEncodingLengthMismatchErrorType =\n  AbiEncodingLengthMismatchError & {\n    name: 'AbiEncodingLengthMismatchError'\n  }\nexport class AbiEncodingLengthMismatchError extends BaseError {\n  constructor({\n    expectedLength,\n    givenLength,\n  }: { expectedLength: number; givenLength: number }) {\n    super(\n      [\n        'ABI encoding params/values length mismatch.',\n        `Expected length (params): ${expectedLength}`,\n        `Given length (values): ${givenLength}`,\n      ].join('\\n'),\n      { name: 'AbiEncodingLengthMismatchError' },\n    )\n  }\n}\n\nexport type AbiErrorInputsNotFoundErrorType = AbiErrorInputsNotFoundError & {\n  name: 'AbiErrorInputsNotFoundError'\n}\nexport class AbiErrorInputsNotFoundError extends BaseError {\n  constructor(errorName: string, { docsPath }: { docsPath: string }) {\n    super(\n      [\n        `Arguments (\\`args\\`) were provided to \"${errorName}\", but \"${errorName}\" on the ABI does not contain any parameters (\\`inputs\\`).`,\n        'Cannot encode error result without knowing what the parameter types are.',\n        'Make sure you are using the correct ABI and that the inputs exist on it.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiErrorInputsNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiErrorNotFoundErrorType = AbiErrorNotFoundError & {\n  name: 'AbiErrorNotFoundError'\n}\nexport class AbiErrorNotFoundError extends BaseError {\n  constructor(\n    errorName?: string | undefined,\n    { docsPath }: { docsPath?: string | undefined } = {},\n  ) {\n    super(\n      [\n        `Error ${errorName ? `\"${errorName}\" ` : ''}not found on ABI.`,\n        'Make sure you are using the correct ABI and that the error exists on it.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiErrorNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiErrorSignatureNotFoundErrorType =\n  AbiErrorSignatureNotFoundError & {\n    name: 'AbiErrorSignatureNotFoundError'\n  }\nexport class AbiErrorSignatureNotFoundError extends BaseError {\n  signature: Hex\n\n  constructor(\n    signature: Hex,\n    {\n      docsPath,\n      cause,\n    }: { docsPath: string; cause?: BaseError | Error | undefined },\n  ) {\n    super(\n      [\n        `Encoded error signature \"${signature}\" not found on ABI.`,\n        'Make sure you are using the correct ABI and that the error exists on it.',\n        `You can look up the decoded signature here: https://4byte.sourcify.dev/?q=${signature}.`,\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiErrorSignatureNotFoundError',\n        cause,\n      },\n    )\n    this.signature = signature\n  }\n}\n\nexport type AbiEventSignatureEmptyTopicsErrorType =\n  AbiEventSignatureEmptyTopicsError & {\n    name: 'AbiEventSignatureEmptyTopicsError'\n  }\nexport class AbiEventSignatureEmptyTopicsError extends BaseError {\n  constructor({ docsPath }: { docsPath: string }) {\n    super('Cannot extract event signature from empty topics.', {\n      docsPath,\n      name: 'AbiEventSignatureEmptyTopicsError',\n    })\n  }\n}\n\nexport type AbiEventSignatureNotFoundErrorType =\n  AbiEventSignatureNotFoundError & {\n    name: 'AbiEventSignatureNotFoundError'\n  }\nexport class AbiEventSignatureNotFoundError extends BaseError {\n  constructor(signature: Hex, { docsPath }: { docsPath: string }) {\n    super(\n      [\n        `Encoded event signature \"${signature}\" not found on ABI.`,\n        'Make sure you are using the correct ABI and that the event exists on it.',\n        `You can look up the signature here: https://4byte.sourcify.dev/?q=${signature}.`,\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiEventSignatureNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiEventNotFoundErrorType = AbiEventNotFoundError & {\n  name: 'AbiEventNotFoundError'\n}\nexport class AbiEventNotFoundError extends BaseError {\n  constructor(\n    eventName?: string | undefined,\n    { docsPath }: { docsPath?: string | undefined } = {},\n  ) {\n    super(\n      [\n        `Event ${eventName ? `\"${eventName}\" ` : ''}not found on ABI.`,\n        'Make sure you are using the correct ABI and that the event exists on it.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiEventNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiFunctionNotFoundErrorType = AbiFunctionNotFoundError & {\n  name: 'AbiFunctionNotFoundError'\n}\nexport class AbiFunctionNotFoundError extends BaseError {\n  constructor(\n    functionName?: string | undefined,\n    { docsPath }: { docsPath?: string | undefined } = {},\n  ) {\n    super(\n      [\n        `Function ${functionName ? `\"${functionName}\" ` : ''}not found on ABI.`,\n        'Make sure you are using the correct ABI and that the function exists on it.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiFunctionNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiFunctionOutputsNotFoundErrorType =\n  AbiFunctionOutputsNotFoundError & {\n    name: 'AbiFunctionOutputsNotFoundError'\n  }\nexport class AbiFunctionOutputsNotFoundError extends BaseError {\n  constructor(functionName: string, { docsPath }: { docsPath: string }) {\n    super(\n      [\n        `Function \"${functionName}\" does not contain any \\`outputs\\` on ABI.`,\n        'Cannot decode function result without knowing what the parameter types are.',\n        'Make sure you are using the correct ABI and that the function exists on it.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiFunctionOutputsNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiFunctionSignatureNotFoundErrorType =\n  AbiFunctionSignatureNotFoundError & {\n    name: 'AbiFunctionSignatureNotFoundError'\n  }\nexport class AbiFunctionSignatureNotFoundError extends BaseError {\n  constructor(signature: Hex, { docsPath }: { docsPath: string }) {\n    super(\n      [\n        `Encoded function signature \"${signature}\" not found on ABI.`,\n        'Make sure you are using the correct ABI and that the function exists on it.',\n        `You can look up the signature here: https://4byte.sourcify.dev/?q=${signature}.`,\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiFunctionSignatureNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiItemAmbiguityErrorType = AbiItemAmbiguityError & {\n  name: 'AbiItemAmbiguityError'\n}\nexport class AbiItemAmbiguityError extends BaseError {\n  constructor(\n    x: { abiItem: Abi[number]; type: string },\n    y: { abiItem: Abi[number]; type: string },\n  ) {\n    super('Found ambiguous types in overloaded ABI items.', {\n      metaMessages: [\n        `\\`${x.type}\\` in \\`${formatAbiItem(x.abiItem)}\\`, and`,\n        `\\`${y.type}\\` in \\`${formatAbiItem(y.abiItem)}\\``,\n        '',\n        'These types encode differently and cannot be distinguished at runtime.',\n        'Remove one of the ambiguous items in the ABI.',\n      ],\n      name: 'AbiItemAmbiguityError',\n    })\n  }\n}\n\nexport type BytesSizeMismatchErrorType = BytesSizeMismatchError & {\n  name: 'BytesSizeMismatchError'\n}\nexport class BytesSizeMismatchError extends BaseError {\n  constructor({\n    expectedSize,\n    givenSize,\n  }: { expectedSize: number; givenSize: number }) {\n    super(`Expected bytes${expectedSize}, got bytes${givenSize}.`, {\n      name: 'BytesSizeMismatchError',\n    })\n  }\n}\n\nexport type DecodeLogDataMismatchErrorType = DecodeLogDataMismatch & {\n  name: 'DecodeLogDataMismatch'\n}\nexport class DecodeLogDataMismatch extends BaseError {\n  abiItem: AbiEvent\n  data: Hex\n  params: readonly AbiParameter[]\n  size: number\n\n  constructor({\n    abiItem,\n    data,\n    params,\n    size,\n  }: {\n    abiItem: AbiEvent\n    data: Hex\n    params: readonly AbiParameter[]\n    size: number\n  }) {\n    super(\n      [\n        `Data size of ${size} bytes is too small for non-indexed event parameters.`,\n      ].join('\\n'),\n      {\n        metaMessages: [\n          `Params: (${formatAbiParams(params, { includeName: true })})`,\n          `Data:   ${data} (${size} bytes)`,\n        ],\n        name: 'DecodeLogDataMismatch',\n      },\n    )\n\n    this.abiItem = abiItem\n    this.data = data\n    this.params = params\n    this.size = size\n  }\n}\n\nexport type DecodeLogTopicsMismatchErrorType = DecodeLogTopicsMismatch & {\n  name: 'DecodeLogTopicsMismatch'\n}\nexport class DecodeLogTopicsMismatch extends BaseError {\n  abiItem: AbiEvent\n\n  constructor({\n    abiItem,\n    param,\n  }: {\n    abiItem: AbiEvent\n    param: AbiParameter & { indexed: boolean }\n  }) {\n    super(\n      [\n        `Expected a topic for indexed event parameter${\n          param.name ? ` \"${param.name}\"` : ''\n        } on event \"${formatAbiItem(abiItem, { includeName: true })}\".`,\n      ].join('\\n'),\n      { name: 'DecodeLogTopicsMismatch' },\n    )\n\n    this.abiItem = abiItem\n  }\n}\n\nexport type InvalidAbiEncodingTypeErrorType = InvalidAbiEncodingTypeError & {\n  name: 'InvalidAbiEncodingTypeError'\n}\nexport class InvalidAbiEncodingTypeError extends BaseError {\n  constructor(type: string, { docsPath }: { docsPath: string }) {\n    super(\n      [\n        `Type \"${type}\" is not a valid encoding type.`,\n        'Please provide a valid ABI type.',\n      ].join('\\n'),\n      { docsPath, name: 'InvalidAbiEncodingType' },\n    )\n  }\n}\n\nexport type InvalidAbiDecodingTypeErrorType = InvalidAbiDecodingTypeError & {\n  name: 'InvalidAbiDecodingTypeError'\n}\nexport class InvalidAbiDecodingTypeError extends BaseError {\n  constructor(type: string, { docsPath }: { docsPath: string }) {\n    super(\n      [\n        `Type \"${type}\" is not a valid decoding type.`,\n        'Please provide a valid ABI type.',\n      ].join('\\n'),\n      { docsPath, name: 'InvalidAbiDecodingType' },\n    )\n  }\n}\n\nexport type InvalidArrayErrorType = InvalidArrayError & {\n  name: 'InvalidArrayError'\n}\nexport class InvalidArrayError extends BaseError {\n  constructor(value: unknown) {\n    super([`Value \"${value}\" is not a valid array.`].join('\\n'), {\n      name: 'InvalidArrayError',\n    })\n  }\n}\n\nexport type InvalidDefinitionTypeErrorType = InvalidDefinitionTypeError & {\n  name: 'InvalidDefinitionTypeError'\n}\nexport class InvalidDefinitionTypeError extends BaseError {\n  constructor(type: string) {\n    super(\n      [\n        `\"${type}\" is not a valid definition type.`,\n        'Valid types: \"function\", \"event\", \"error\"',\n      ].join('\\n'),\n      { name: 'InvalidDefinitionTypeError' },\n    )\n  }\n}\n\nexport type UnsupportedPackedAbiTypeErrorType = UnsupportedPackedAbiType & {\n  name: 'UnsupportedPackedAbiType'\n}\nexport class UnsupportedPackedAbiType extends BaseError {\n  constructor(type: unknown) {\n    super(`Type \"${type}\" is not supported for packed encoding.`, {\n      name: 'UnsupportedPackedAbiType',\n    })\n  }\n}\n", "import { BaseError } from './base.js'\n\nexport type SliceOffsetOutOfBoundsErrorType = SliceOffsetOutOfBoundsError & {\n  name: 'SliceOffsetOutOfBoundsError'\n}\nexport class SliceOffsetOutOfBoundsError extends BaseError {\n  constructor({\n    offset,\n    position,\n    size,\n  }: { offset: number; position: 'start' | 'end'; size: number }) {\n    super(\n      `Slice ${\n        position === 'start' ? 'starting' : 'ending'\n      } at offset \"${offset}\" is out-of-bounds (size: ${size}).`,\n      { name: 'SliceOffsetOutOfBoundsError' },\n    )\n  }\n}\n\nexport type SizeExceedsPaddingSizeErrorType = SizeExceedsPaddingSizeError & {\n  name: 'SizeExceedsPaddingSizeError'\n}\nexport class SizeExceedsPaddingSizeError extends BaseError {\n  constructor({\n    size,\n    targetSize,\n    type,\n  }: {\n    size: number\n    targetSize: number\n    type: 'hex' | 'bytes'\n  }) {\n    super(\n      `${type.charAt(0).toUpperCase()}${type\n        .slice(1)\n        .toLowerCase()} size (${size}) exceeds padding size (${targetSize}).`,\n      { name: 'SizeExceedsPaddingSizeError' },\n    )\n  }\n}\n\nexport type InvalidBytesLengthErrorType = InvalidBytesLengthError & {\n  name: 'InvalidBytesLengthError'\n}\nexport class InvalidBytesLengthError extends BaseError {\n  constructor({\n    size,\n    targetSize,\n    type,\n  }: {\n    size: number\n    targetSize: number\n    type: 'hex' | 'bytes'\n  }) {\n    super(\n      `${type.charAt(0).toUpperCase()}${type\n        .slice(1)\n        .toLowerCase()} is expected to be ${targetSize} ${type} long, but is ${size} ${type} long.`,\n      { name: 'InvalidBytesLengthError' },\n    )\n  }\n}\n", "import {\n  SizeExceedsPaddingSizeError,\n  type SizeExceedsPaddingSizeErrorType,\n} from '../../errors/data.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\ntype PadOptions = {\n  dir?: 'left' | 'right' | undefined\n  size?: number | null | undefined\n}\nexport type PadReturnType<value extends ByteArray | Hex> = value extends Hex\n  ? Hex\n  : ByteArray\n\nexport type PadErrorType = PadHexErrorType | PadBytesErrorType | ErrorType\n\nexport function pad<value extends ByteArray | Hex>(\n  hexOrBytes: value,\n  { dir, size = 32 }: PadOptions = {},\n): PadReturnType<value> {\n  if (typeof hexOrBytes === 'string')\n    return padHex(hexOrBytes, { dir, size }) as PadReturnType<value>\n  return padBytes(hexOrBytes, { dir, size }) as PadReturnType<value>\n}\n\nexport type PadHexErrorType = SizeExceedsPaddingSizeErrorType | ErrorType\n\nexport function padHex(hex_: Hex, { dir, size = 32 }: PadOptions = {}) {\n  if (size === null) return hex_\n  const hex = hex_.replace('0x', '')\n  if (hex.length > size * 2)\n    throw new SizeExceedsPaddingSizeError({\n      size: Math.ceil(hex.length / 2),\n      targetSize: size,\n      type: 'hex',\n    })\n\n  return `0x${hex[dir === 'right' ? 'padEnd' : 'padStart'](\n    size * 2,\n    '0',\n  )}` as Hex\n}\n\nexport type PadBytesErrorType = SizeExceedsPaddingSizeErrorType | ErrorType\n\nexport function padBytes(\n  bytes: ByteArray,\n  { dir, size = 32 }: PadOptions = {},\n) {\n  if (size === null) return bytes\n  if (bytes.length > size)\n    throw new SizeExceedsPaddingSizeError({\n      size: bytes.length,\n      targetSize: size,\n      type: 'bytes',\n    })\n  const paddedBytes = new Uint8Array(size)\n  for (let i = 0; i < size; i++) {\n    const padEnd = dir === 'right'\n    paddedBytes[padEnd ? i : size - i - 1] =\n      bytes[padEnd ? i : bytes.length - i - 1]\n  }\n  return paddedBytes\n}\n", "import type { ByteArray, Hex } from '../types/misc.js'\n\nimport { BaseError } from './base.js'\n\nexport type IntegerOutOfRangeErrorType = IntegerOutOfRangeError & {\n  name: 'IntegerOutOfRangeError'\n}\nexport class IntegerOutOfRangeError extends BaseError {\n  constructor({\n    max,\n    min,\n    signed,\n    size,\n    value,\n  }: {\n    max?: string | undefined\n    min: string\n    signed?: boolean | undefined\n    size?: number | undefined\n    value: string\n  }) {\n    super(\n      `Number \"${value}\" is not in safe ${\n        size ? `${size * 8}-bit ${signed ? 'signed' : 'unsigned'} ` : ''\n      }integer range ${max ? `(${min} to ${max})` : `(above ${min})`}`,\n      { name: 'IntegerOutOfRangeError' },\n    )\n  }\n}\n\nexport type InvalidBytesBooleanErrorType = InvalidBytesBooleanError & {\n  name: 'InvalidBytesBooleanError'\n}\nexport class InvalidBytesBooleanError extends BaseError {\n  constructor(bytes: ByteArray) {\n    super(\n      `Bytes value \"${bytes}\" is not a valid boolean. The bytes array must contain a single byte of either a 0 or 1 value.`,\n      {\n        name: 'InvalidBytesBooleanError',\n      },\n    )\n  }\n}\n\nexport type InvalidHexBooleanErrorType = InvalidHexBooleanError & {\n  name: 'InvalidHexBooleanError'\n}\nexport class InvalidHexBooleanError extends BaseError {\n  constructor(hex: Hex) {\n    super(\n      `Hex value \"${hex}\" is not a valid boolean. The hex value must be \"0x0\" (false) or \"0x1\" (true).`,\n      { name: 'InvalidHexBooleanError' },\n    )\n  }\n}\n\nexport type InvalidHexValueErrorType = InvalidHexValueError & {\n  name: 'InvalidHexValueError'\n}\nexport class InvalidHexValueError extends BaseError {\n  constructor(value: Hex) {\n    super(\n      `Hex value \"${value}\" is an odd length (${value.length}). It must be an even length.`,\n      { name: 'InvalidHexValueError' },\n    )\n  }\n}\n\nexport type SizeOverflowErrorType = SizeOverflowError & {\n  name: 'SizeOverflowError'\n}\nexport class SizeOverflowError extends BaseError {\n  constructor({ givenSize, maxSize }: { givenSize: number; maxSize: number }) {\n    super(\n      `Size cannot exceed ${maxSize} bytes. Given size: ${givenSize} bytes.`,\n      { name: 'SizeOverflowError' },\n    )\n  }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\ntype TrimOptions = {\n  dir?: 'left' | 'right' | undefined\n}\nexport type TrimReturnType<value extends ByteArray | Hex> = value extends Hex\n  ? Hex\n  : ByteArray\n\nexport type TrimErrorType = ErrorType\n\nexport function trim<value extends ByteArray | Hex>(\n  hexOrBytes: value,\n  { dir = 'left' }: TrimOptions = {},\n): TrimReturnType<value> {\n  let data: any =\n    typeof hexOrBytes === 'string' ? hexOrBytes.replace('0x', '') : hexOrBytes\n\n  let sliceLength = 0\n  for (let i = 0; i < data.length - 1; i++) {\n    if (data[dir === 'left' ? i : data.length - i - 1].toString() === '0')\n      sliceLength++\n    else break\n  }\n  data =\n    dir === 'left'\n      ? data.slice(sliceLength)\n      : data.slice(0, data.length - sliceLength)\n\n  if (typeof hexOrBytes === 'string') {\n    if (data.length === 1 && dir === 'right') data = `${data}0`\n    return `0x${\n      data.length % 2 === 1 ? `0${data}` : data\n    }` as TrimReturnType<value>\n  }\n  return data as TrimReturnType<value>\n}\n", "import {\n  IntegerOutOfRangeError,\n  type IntegerOutOfRangeErrorType,\n  InvalidHexBooleanError,\n  type InvalidHexBooleanErrorType,\n  SizeOverflowError,\n  type SizeOverflowErrorType,\n} from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type SizeErrorType, size as size_ } from '../data/size.js'\nimport { type TrimErrorType, trim } from '../data/trim.js'\n\nimport { type HexToBytesErrorType, hexToBytes } from './toBytes.js'\n\nexport type AssertSizeErrorType =\n  | SizeOverflowErrorType\n  | SizeErrorType\n  | ErrorType\n\nexport function assertSize(\n  hexOrBytes: Hex | ByteArray,\n  { size }: { size: number },\n): void {\n  if (size_(hexOrBytes) > size)\n    throw new SizeOverflowError({\n      givenSize: size_(hexOrBytes),\n      maxSize: size,\n    })\n}\n\nexport type FromHexParameters<\n  to extends 'string' | 'bigint' | 'number' | 'bytes' | 'boolean',\n> =\n  | to\n  | {\n      /** Size (in bytes) of the hex value. */\n      size?: number | undefined\n      /** Type to convert to. */\n      to: to\n    }\n\nexport type FromHexReturnType<to> = to extends 'string'\n  ? string\n  : to extends 'bigint'\n    ? bigint\n    : to extends 'number'\n      ? number\n      : to extends 'bytes'\n        ? ByteArray\n        : to extends 'boolean'\n          ? boolean\n          : never\n\nexport type FromHexErrorType =\n  | HexToNumberErrorType\n  | HexToBigIntErrorType\n  | HexToBoolErrorType\n  | HexToStringErrorType\n  | HexToBytesErrorType\n  | ErrorType\n\n/**\n * Decodes a hex string into a string, number, bigint, boolean, or byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex\n * - Example: https://viem.sh/docs/utilities/fromHex#usage\n *\n * @param hex Hex string to decode.\n * @param toOrOpts Type to convert to or options.\n * @returns Decoded value.\n *\n * @example\n * import { fromHex } from 'viem'\n * const data = fromHex('0x1a4', 'number')\n * // 420\n *\n * @example\n * import { fromHex } from 'viem'\n * const data = fromHex('0x48656c6c6f20576f726c6421', 'string')\n * // 'Hello world'\n *\n * @example\n * import { fromHex } from 'viem'\n * const data = fromHex('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n *   size: 32,\n *   to: 'string'\n * })\n * // 'Hello world'\n */\nexport function fromHex<\n  to extends 'string' | 'bigint' | 'number' | 'bytes' | 'boolean',\n>(hex: Hex, toOrOpts: FromHexParameters<to>): FromHexReturnType<to> {\n  const opts = typeof toOrOpts === 'string' ? { to: toOrOpts } : toOrOpts\n  const to = opts.to\n\n  if (to === 'number') return hexToNumber(hex, opts) as FromHexReturnType<to>\n  if (to === 'bigint') return hexToBigInt(hex, opts) as FromHexReturnType<to>\n  if (to === 'string') return hexToString(hex, opts) as FromHexReturnType<to>\n  if (to === 'boolean') return hexToBool(hex, opts) as FromHexReturnType<to>\n  return hexToBytes(hex, opts) as FromHexReturnType<to>\n}\n\nexport type HexToBigIntOpts = {\n  /** Whether or not the number of a signed representation. */\n  signed?: boolean | undefined\n  /** Size (in bytes) of the hex value. */\n  size?: number | undefined\n}\n\nexport type HexToBigIntErrorType = AssertSizeErrorType | ErrorType\n\n/**\n * Decodes a hex value into a bigint.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextobigint\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns BigInt value.\n *\n * @example\n * import { hexToBigInt } from 'viem'\n * const data = hexToBigInt('0x1a4', { signed: true })\n * // 420n\n *\n * @example\n * import { hexToBigInt } from 'viem'\n * const data = hexToBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // 420n\n */\nexport function hexToBigInt(hex: Hex, opts: HexToBigIntOpts = {}): bigint {\n  const { signed } = opts\n\n  if (opts.size) assertSize(hex, { size: opts.size })\n\n  const value = BigInt(hex)\n  if (!signed) return value\n\n  const size = (hex.length - 2) / 2\n  const max = (1n << (BigInt(size) * 8n - 1n)) - 1n\n  if (value <= max) return value\n\n  return value - BigInt(`0x${'f'.padStart(size * 2, 'f')}`) - 1n\n}\n\nexport type HexToBoolOpts = {\n  /** Size (in bytes) of the hex value. */\n  size?: number | undefined\n}\n\nexport type HexToBoolErrorType =\n  | AssertSizeErrorType\n  | InvalidHexBooleanErrorType\n  | TrimErrorType\n  | ErrorType\n\n/**\n * Decodes a hex value into a boolean.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextobool\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns Boolean value.\n *\n * @example\n * import { hexToBool } from 'viem'\n * const data = hexToBool('0x01')\n * // true\n *\n * @example\n * import { hexToBool } from 'viem'\n * const data = hexToBool('0x0000000000000000000000000000000000000000000000000000000000000001', { size: 32 })\n * // true\n */\nexport function hexToBool(hex_: Hex, opts: HexToBoolOpts = {}): boolean {\n  let hex = hex_\n  if (opts.size) {\n    assertSize(hex, { size: opts.size })\n    hex = trim(hex)\n  }\n  if (trim(hex) === '0x00') return false\n  if (trim(hex) === '0x01') return true\n  throw new InvalidHexBooleanError(hex)\n}\n\nexport type HexToNumberOpts = HexToBigIntOpts\n\nexport type HexToNumberErrorType =\n  | HexToBigIntErrorType\n  | IntegerOutOfRangeErrorType\n  | ErrorType\n\n/**\n * Decodes a hex string into a number.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextonumber\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns Number value.\n *\n * @example\n * import { hexToNumber } from 'viem'\n * const data = hexToNumber('0x1a4')\n * // 420\n *\n * @example\n * import { hexToNumber } from 'viem'\n * const data = hexToBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // 420\n */\nexport function hexToNumber(hex: Hex, opts: HexToNumberOpts = {}): number {\n  const value = hexToBigInt(hex, opts)\n  const number = Number(value)\n  if (!Number.isSafeInteger(number))\n    throw new IntegerOutOfRangeError({\n      max: `${Number.MAX_SAFE_INTEGER}`,\n      min: `${Number.MIN_SAFE_INTEGER}`,\n      signed: opts.signed,\n      size: opts.size,\n      value: `${value}n`,\n    })\n  return number\n}\n\nexport type HexToStringOpts = {\n  /** Size (in bytes) of the hex value. */\n  size?: number | undefined\n}\n\nexport type HexToStringErrorType =\n  | AssertSizeErrorType\n  | HexToBytesErrorType\n  | TrimErrorType\n  | ErrorType\n\n/**\n * Decodes a hex value into a UTF-8 string.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextostring\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns String value.\n *\n * @example\n * import { hexToString } from 'viem'\n * const data = hexToString('0x48656c6c6f20576f726c6421')\n * // 'Hello world!'\n *\n * @example\n * import { hexToString } from 'viem'\n * const data = hexToString('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n *  size: 32,\n * })\n * // 'Hello world'\n */\nexport function hexToString(hex: Hex, opts: HexToStringOpts = {}): string {\n  let bytes = hexToBytes(hex)\n  if (opts.size) {\n    assertSize(bytes, { size: opts.size })\n    bytes = trim(bytes, { dir: 'right' })\n  }\n  return new TextDecoder().decode(bytes)\n}\n", "import {\n  IntegerOutOfRangeError,\n  type IntegerOutOfRangeErrorType,\n} from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type PadErrorType, pad } from '../data/pad.js'\n\nimport { type AssertSizeErrorType, assertSize } from './fromHex.js'\n\nconst hexes = /*#__PURE__*/ Array.from({ length: 256 }, (_v, i) =>\n  i.toString(16).padStart(2, '0'),\n)\n\nexport type ToHexParameters = {\n  /** The size (in bytes) of the output hex value. */\n  size?: number | undefined\n}\n\nexport type ToHexErrorType =\n  | BoolToHexErrorType\n  | BytesToHexErrorType\n  | NumberToHexErrorType\n  | StringToHexErrorType\n  | ErrorType\n\n/**\n * Encodes a string, number, bigint, or ByteArray into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex\n * - Example: https://viem.sh/docs/utilities/toHex#usage\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { toHex } from 'viem'\n * const data = toHex('Hello world')\n * // '0x48656c6c6f20776f726c6421'\n *\n * @example\n * import { toHex } from 'viem'\n * const data = toHex(420)\n * // '0x1a4'\n *\n * @example\n * import { toHex } from 'viem'\n * const data = toHex('Hello world', { size: 32 })\n * // '0x48656c6c6f20776f726c64210000000000000000000000000000000000000000'\n */\nexport function toHex(\n  value: string | number | bigint | boolean | ByteArray,\n  opts: ToHexParameters = {},\n): Hex {\n  if (typeof value === 'number' || typeof value === 'bigint')\n    return numberToHex(value, opts)\n  if (typeof value === 'string') {\n    return stringToHex(value, opts)\n  }\n  if (typeof value === 'boolean') return boolToHex(value, opts)\n  return bytesToHex(value, opts)\n}\n\nexport type BoolToHexOpts = {\n  /** The size (in bytes) of the output hex value. */\n  size?: number | undefined\n}\n\nexport type BoolToHexErrorType = AssertSizeErrorType | PadErrorType | ErrorType\n\n/**\n * Encodes a boolean into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#booltohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { boolToHex } from 'viem'\n * const data = boolToHex(true)\n * // '0x1'\n *\n * @example\n * import { boolToHex } from 'viem'\n * const data = boolToHex(false)\n * // '0x0'\n *\n * @example\n * import { boolToHex } from 'viem'\n * const data = boolToHex(true, { size: 32 })\n * // '0x0000000000000000000000000000000000000000000000000000000000000001'\n */\nexport function boolToHex(value: boolean, opts: BoolToHexOpts = {}): Hex {\n  const hex: Hex = `0x${Number(value)}`\n  if (typeof opts.size === 'number') {\n    assertSize(hex, { size: opts.size })\n    return pad(hex, { size: opts.size })\n  }\n  return hex\n}\n\nexport type BytesToHexOpts = {\n  /** The size (in bytes) of the output hex value. */\n  size?: number | undefined\n}\n\nexport type BytesToHexErrorType = AssertSizeErrorType | PadErrorType | ErrorType\n\n/**\n * Encodes a bytes array into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#bytestohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { bytesToHex } from 'viem'\n * const data = bytesToHex(Uint8Array.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * // '0x48656c6c6f20576f726c6421'\n *\n * @example\n * import { bytesToHex } from 'viem'\n * const data = bytesToHex(Uint8Array.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]), { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n */\nexport function bytesToHex(value: ByteArray, opts: BytesToHexOpts = {}): Hex {\n  let string = ''\n  for (let i = 0; i < value.length; i++) {\n    string += hexes[value[i]]\n  }\n  const hex = `0x${string}` as const\n\n  if (typeof opts.size === 'number') {\n    assertSize(hex, { size: opts.size })\n    return pad(hex, { dir: 'right', size: opts.size })\n  }\n  return hex\n}\n\nexport type NumberToHexOpts =\n  | {\n      /** Whether or not the number of a signed representation. */\n      signed?: boolean | undefined\n      /** The size (in bytes) of the output hex value. */\n      size: number\n    }\n  | {\n      signed?: undefined\n      /** The size (in bytes) of the output hex value. */\n      size?: number | undefined\n    }\n\nexport type NumberToHexErrorType =\n  | IntegerOutOfRangeErrorType\n  | PadErrorType\n  | ErrorType\n\n/**\n * Encodes a number or bigint into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#numbertohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { numberToHex } from 'viem'\n * const data = numberToHex(420)\n * // '0x1a4'\n *\n * @example\n * import { numberToHex } from 'viem'\n * const data = numberToHex(420, { size: 32 })\n * // '0x00000000000000000000000000000000000000000000000000000000000001a4'\n */\nexport function numberToHex(\n  value_: number | bigint,\n  opts: NumberToHexOpts = {},\n): Hex {\n  const { signed, size } = opts\n\n  const value = BigInt(value_)\n\n  let maxValue: bigint | number | undefined\n  if (size) {\n    if (signed) maxValue = (1n << (BigInt(size) * 8n - 1n)) - 1n\n    else maxValue = 2n ** (BigInt(size) * 8n) - 1n\n  } else if (typeof value_ === 'number') {\n    maxValue = BigInt(Number.MAX_SAFE_INTEGER)\n  }\n\n  const minValue = typeof maxValue === 'bigint' && signed ? -maxValue - 1n : 0\n\n  if ((maxValue && value > maxValue) || value < minValue) {\n    const suffix = typeof value_ === 'bigint' ? 'n' : ''\n    throw new IntegerOutOfRangeError({\n      max: maxValue ? `${maxValue}${suffix}` : undefined,\n      min: `${minValue}${suffix}`,\n      signed,\n      size,\n      value: `${value_}${suffix}`,\n    })\n  }\n\n  const hex = `0x${(\n    signed && value < 0 ? (1n << BigInt(size * 8)) + BigInt(value) : value\n  ).toString(16)}` as Hex\n  if (size) return pad(hex, { size }) as Hex\n  return hex\n}\n\nexport type StringToHexOpts = {\n  /** The size (in bytes) of the output hex value. */\n  size?: number | undefined\n}\n\nexport type StringToHexErrorType = BytesToHexErrorType | ErrorType\n\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\n/**\n * Encodes a UTF-8 string into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#stringtohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { stringToHex } from 'viem'\n * const data = stringToHex('Hello World!')\n * // '0x48656c6c6f20576f726c6421'\n *\n * @example\n * import { stringToHex } from 'viem'\n * const data = stringToHex('Hello World!', { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n */\nexport function stringToHex(value_: string, opts: StringToHexOpts = {}): Hex {\n  const value = encoder.encode(value_)\n  return bytesToHex(value, opts)\n}\n", "import { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type PadErrorType, pad } from '../data/pad.js'\n\nimport { type AssertSizeErrorType, assertSize } from './fromHex.js'\nimport {\n  type NumberToHexErrorType,\n  type NumberToHexOpts,\n  numberToHex,\n} from './toHex.js'\n\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\nexport type ToBytesParameters = {\n  /** Size of the output bytes. */\n  size?: number | undefined\n}\n\nexport type ToBytesErrorType =\n  | NumberToBytesErrorType\n  | BoolToBytesErrorType\n  | HexToBytesErrorType\n  | StringToBytesErrorType\n  | IsHexErrorType\n  | ErrorType\n\n/**\n * Encodes a UTF-8 string, hex value, bigint, number or boolean to a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes\n * - Example: https://viem.sh/docs/utilities/toBytes#usage\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { toBytes } from 'viem'\n * const data = toBytes('Hello world')\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n *\n * @example\n * import { toBytes } from 'viem'\n * const data = toBytes(420)\n * // Uint8Array([1, 164])\n *\n * @example\n * import { toBytes } from 'viem'\n * const data = toBytes(420, { size: 4 })\n * // Uint8Array([0, 0, 1, 164])\n */\nexport function toBytes(\n  value: string | bigint | number | boolean | Hex,\n  opts: ToBytesParameters = {},\n): ByteArray {\n  if (typeof value === 'number' || typeof value === 'bigint')\n    return numberToBytes(value, opts)\n  if (typeof value === 'boolean') return boolToBytes(value, opts)\n  if (isHex(value)) return hexToBytes(value, opts)\n  return stringToBytes(value, opts)\n}\n\nexport type BoolToBytesOpts = {\n  /** Size of the output bytes. */\n  size?: number | undefined\n}\n\nexport type BoolToBytesErrorType =\n  | AssertSizeErrorType\n  | PadErrorType\n  | ErrorType\n\n/**\n * Encodes a boolean into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#booltobytes\n *\n * @param value Boolean value to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { boolToBytes } from 'viem'\n * const data = boolToBytes(true)\n * // Uint8Array([1])\n *\n * @example\n * import { boolToBytes } from 'viem'\n * const data = boolToBytes(true, { size: 32 })\n * // Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])\n */\nexport function boolToBytes(value: boolean, opts: BoolToBytesOpts = {}) {\n  const bytes = new Uint8Array(1)\n  bytes[0] = Number(value)\n  if (typeof opts.size === 'number') {\n    assertSize(bytes, { size: opts.size })\n    return pad(bytes, { size: opts.size })\n  }\n  return bytes\n}\n\n// We use very optimized technique to convert hex string to byte array\nconst charCodeMap = {\n  zero: 48,\n  nine: 57,\n  A: 65,\n  F: 70,\n  a: 97,\n  f: 102,\n} as const\n\nfunction charCodeToBase16(char: number) {\n  if (char >= charCodeMap.zero && char <= charCodeMap.nine)\n    return char - charCodeMap.zero\n  if (char >= charCodeMap.A && char <= charCodeMap.F)\n    return char - (charCodeMap.A - 10)\n  if (char >= charCodeMap.a && char <= charCodeMap.f)\n    return char - (charCodeMap.a - 10)\n  return undefined\n}\n\nexport type HexToBytesOpts = {\n  /** Size of the output bytes. */\n  size?: number | undefined\n}\n\nexport type HexToBytesErrorType = AssertSizeErrorType | PadErrorType | ErrorType\n\n/**\n * Encodes a hex string into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#hextobytes\n *\n * @param hex Hex string to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { hexToBytes } from 'viem'\n * const data = hexToBytes('0x48656c6c6f20776f726c6421')\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n *\n * @example\n * import { hexToBytes } from 'viem'\n * const data = hexToBytes('0x48656c6c6f20776f726c6421', { size: 32 })\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n */\nexport function hexToBytes(hex_: Hex, opts: HexToBytesOpts = {}): ByteArray {\n  let hex = hex_\n  if (opts.size) {\n    assertSize(hex, { size: opts.size })\n    hex = pad(hex, { dir: 'right', size: opts.size })\n  }\n\n  let hexString = hex.slice(2) as string\n  if (hexString.length % 2) hexString = `0${hexString}`\n\n  const length = hexString.length / 2\n  const bytes = new Uint8Array(length)\n  for (let index = 0, j = 0; index < length; index++) {\n    const nibbleLeft = charCodeToBase16(hexString.charCodeAt(j++))\n    const nibbleRight = charCodeToBase16(hexString.charCodeAt(j++))\n    if (nibbleLeft === undefined || nibbleRight === undefined) {\n      throw new BaseError(\n        `Invalid byte sequence (\"${hexString[j - 2]}${\n          hexString[j - 1]\n        }\" in \"${hexString}\").`,\n      )\n    }\n    bytes[index] = nibbleLeft * 16 + nibbleRight\n  }\n  return bytes\n}\n\nexport type NumberToBytesErrorType =\n  | NumberToHexErrorType\n  | HexToBytesErrorType\n  | ErrorType\n\n/**\n * Encodes a number into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#numbertobytes\n *\n * @param value Number to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { numberToBytes } from 'viem'\n * const data = numberToBytes(420)\n * // Uint8Array([1, 164])\n *\n * @example\n * import { numberToBytes } from 'viem'\n * const data = numberToBytes(420, { size: 4 })\n * // Uint8Array([0, 0, 1, 164])\n */\nexport function numberToBytes(\n  value: bigint | number,\n  opts?: NumberToHexOpts | undefined,\n) {\n  const hex = numberToHex(value, opts)\n  return hexToBytes(hex)\n}\n\nexport type StringToBytesOpts = {\n  /** Size of the output bytes. */\n  size?: number | undefined\n}\n\nexport type StringToBytesErrorType =\n  | AssertSizeErrorType\n  | PadErrorType\n  | ErrorType\n\n/**\n * Encodes a UTF-8 string into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#stringtobytes\n *\n * @param value String to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { stringToBytes } from 'viem'\n * const data = stringToBytes('Hello world!')\n * // Uint8Array([72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33])\n *\n * @example\n * import { stringToBytes } from 'viem'\n * const data = stringToBytes('Hello world!', { size: 32 })\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n */\nexport function stringToBytes(\n  value: string,\n  opts: StringToBytesOpts = {},\n): ByteArray {\n  const bytes = encoder.encode(value)\n  if (typeof opts.size === 'number') {\n    assertSize(bytes, { size: opts.size })\n    return pad(bytes, { dir: 'right', size: opts.size })\n  }\n  return bytes\n}\n", "/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n  n: bigint,\n  le = false\n): {\n  h: number;\n  l: number;\n} {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n  const len = lst.length;\n  let Ah = new Uint32Array(len);\n  let Al = new Uint32Array(len);\n  for (let i = 0; i < len; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n  Ah: number,\n  Al: number,\n  Bh: number,\n  Bl: number\n): {\n  h: number;\n  l: number;\n} {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n  add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "/**\n * Internal webcrypto alias.\n * We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.\n * Falls back to Node.js built-in crypto for Node.js <=v14.\n * See utils.ts for details.\n * @module\n */\n// @ts-ignore\nimport * as nc from 'node:crypto';\nexport const crypto: any =\n  nc && typeof nc === 'object' && 'webcrypto' in nc\n    ? (nc.webcrypto as any)\n    : nc && typeof nc === 'object' && 'randomBytes' in nc\n      ? nc\n      : undefined;\n", "/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n  return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number): void {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n  if (!isBytes(b)) throw new Error('Uint8Array expected');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n\n/** Asserts something is hash */\nexport function ahash(h: IHash): void {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.createHasher');\n  anumber(h.outputLen);\n  anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n  abytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error('digestInto() expects output buffer of length at least ' + min);\n  }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n  return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n  return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n  for (let i = 0; i < arrays.length; i++) {\n    arrays[i].fill(0);\n  }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n  return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n  return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n  return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n  new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n  return (\n    ((word << 24) & 0xff000000) |\n    ((word << 8) & 0xff0000) |\n    ((word >>> 8) & 0xff00) |\n    ((word >>> 24) & 0xff)\n  );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n  ? (n: number) => n\n  : (n: number) => byteSwap(n);\n\n/** @deprecated */\nexport const byteSwapIfBE: typeof swap8IfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n  return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n  ? (u: Uint32Array) => u\n  : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n  // @ts-ignore\n  typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // @ts-ignore\n  if (hasHexBuiltin) return bytes.toHex();\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n  if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n  if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n  if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n  return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // @ts-ignore\n  if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n  }\n  return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n  iters: number,\n  tick: number,\n  cb: (i: number) => void\n): Promise<void> {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error('string expected');\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes: Uint8Array): string {\n  return new TextDecoder().decode(bytes);\n}\n\n/** Accepted input of hash functions. Strings are converted to byte arrays. */\nexport type Input = string | Uint8Array;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n    throw new Error('options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\n/** Hash interface. */\nexport type IHash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\n\n/** For runtime check if class implements interface */\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  abstract clone(): T;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash function */\nexport type CHash = ReturnType<typeof createHasher>;\n/** Hash function with output */\nexport type CHashO = ReturnType<typeof createOptHasher>;\n/** XOF with output */\nexport type CHashXO = ReturnType<typeof createXOFer>;\n\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher<T extends Hash<T>>(\n  hashCons: () => Hash<T>\n): {\n  (msg: Input): Uint8Array;\n  outputLen: number;\n  blockLen: number;\n  create(): Hash<T>;\n} {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function createOptHasher<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n): {\n  (msg: Input, opts?: T): Uint8Array;\n  outputLen: number;\n  blockLen: number;\n  create(opts?: T): Hash<H>;\n} {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts?: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function createXOFer<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n): {\n  (msg: Input, opts?: T): Uint8Array;\n  outputLen: number;\n  blockLen: number;\n  create(opts?: T): HashXOF<H>;\n} {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts?: T) => hashCons(opts);\n  return hashC;\n}\nexport const wrapConstructor: typeof createHasher = createHasher;\nexport const wrapConstructorWithOpts: typeof createOptHasher = createOptHasher;\nexport const wrapXOFConstructorWithOpts: typeof createXOFer = createXOFer;\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  // Legacy Node.js compatibility\n  if (crypto && typeof crypto.randomBytes === 'function') {\n    return Uint8Array.from(crypto.randomBytes(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "/**\n * SHA3 (keccak) hash function, based on a new \"Sponge function\" design.\n * Different from older hashes, the internal state is bigger than output size.\n *\n * Check out [FIPS-202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf),\n * [Website](https://keccak.team/keccak.html),\n * [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub).\n *\n * Check out `sha3-addons` module for cSHAKE, k12, and others.\n * @module\n */\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.ts';\n// prettier-ignore\nimport {\n  abytes, aexists, anumber, aoutput,\n  clean, createHasher, createXOFer, Hash,\n  swap32IfBE,\n  toBytes, u32,\n  type CHash, type CHashXO, type HashXOF, type Input\n} from './utils.ts';\n\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI: number[] = [];\nconst SHA3_ROTL: number[] = [];\nconst _SHA3_IOTA: bigint[] = [];\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n  // Pi\n  [x, y] = [y, (2 * x + 3 * y) % 5];\n  SHA3_PI.push(2 * (5 * y + x));\n  // Rotational\n  SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n  // Iota\n  let t = _0n;\n  for (let j = 0; j < 7; j++) {\n    R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n    if (R & _2n) t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n  }\n  _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n/** `keccakf1600` internal function, additionally allows to adjust round count. */\nexport function keccakP(s: Uint32Array, rounds: number = 24): void {\n  const B = new Uint32Array(5 * 2);\n  // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n  for (let round = 24 - rounds; round < 24; round++) {\n    // Theta \u03B8\n    for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n    for (let x = 0; x < 10; x += 2) {\n      const idx1 = (x + 8) % 10;\n      const idx0 = (x + 2) % 10;\n      const B0 = B[idx0];\n      const B1 = B[idx0 + 1];\n      const Th = rotlH(B0, B1, 1) ^ B[idx1];\n      const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n      for (let y = 0; y < 50; y += 10) {\n        s[x + y] ^= Th;\n        s[x + y + 1] ^= Tl;\n      }\n    }\n    // Rho (\u03C1) and Pi (\u03C0)\n    let curH = s[2];\n    let curL = s[3];\n    for (let t = 0; t < 24; t++) {\n      const shift = SHA3_ROTL[t];\n      const Th = rotlH(curH, curL, shift);\n      const Tl = rotlL(curH, curL, shift);\n      const PI = SHA3_PI[t];\n      curH = s[PI];\n      curL = s[PI + 1];\n      s[PI] = Th;\n      s[PI + 1] = Tl;\n    }\n    // Chi (\u03C7)\n    for (let y = 0; y < 50; y += 10) {\n      for (let x = 0; x < 10; x++) B[x] = s[y + x];\n      for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n    }\n    // Iota (\u03B9)\n    s[0] ^= SHA3_IOTA_H[round];\n    s[1] ^= SHA3_IOTA_L[round];\n  }\n  clean(B);\n}\n\n/** Keccak sponge function. */\nexport class Keccak extends Hash<Keccak> implements HashXOF<Keccak> {\n  protected state: Uint8Array;\n  protected pos = 0;\n  protected posOut = 0;\n  protected finished = false;\n  protected state32: Uint32Array;\n  protected destroyed = false;\n\n  public blockLen: number;\n  public suffix: number;\n  public outputLen: number;\n  protected enableXOF = false;\n  protected rounds: number;\n\n  // NOTE: we accept arguments in bytes instead of bits here.\n  constructor(\n    blockLen: number,\n    suffix: number,\n    outputLen: number,\n    enableXOF = false,\n    rounds: number = 24\n  ) {\n    super();\n    this.blockLen = blockLen;\n    this.suffix = suffix;\n    this.outputLen = outputLen;\n    this.enableXOF = enableXOF;\n    this.rounds = rounds;\n    // Can be passed from user as dkLen\n    anumber(outputLen);\n    // 1600 = 5x5 matrix of 64bit.  1600 bits === 200 bytes\n    // 0 < blockLen < 200\n    if (!(0 < blockLen && blockLen < 200))\n      throw new Error('only keccak-f1600 function is supported');\n    this.state = new Uint8Array(200);\n    this.state32 = u32(this.state);\n  }\n  clone(): Keccak {\n    return this._cloneInto();\n  }\n  protected keccak(): void {\n    swap32IfBE(this.state32);\n    keccakP(this.state32, this.rounds);\n    swap32IfBE(this.state32);\n    this.posOut = 0;\n    this.pos = 0;\n  }\n  update(data: Input): this {\n    aexists(this);\n    data = toBytes(data);\n    abytes(data);\n    const { blockLen, state } = this;\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n      if (this.pos === blockLen) this.keccak();\n    }\n    return this;\n  }\n  protected finish(): void {\n    if (this.finished) return;\n    this.finished = true;\n    const { state, suffix, pos, blockLen } = this;\n    // Do the padding\n    state[pos] ^= suffix;\n    if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n    state[blockLen - 1] ^= 0x80;\n    this.keccak();\n  }\n  protected writeInto(out: Uint8Array): Uint8Array {\n    aexists(this, false);\n    abytes(out);\n    this.finish();\n    const bufferOut = this.state;\n    const { blockLen } = this;\n    for (let pos = 0, len = out.length; pos < len; ) {\n      if (this.posOut >= blockLen) this.keccak();\n      const take = Math.min(blockLen - this.posOut, len - pos);\n      out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n      this.posOut += take;\n      pos += take;\n    }\n    return out;\n  }\n  xofInto(out: Uint8Array): Uint8Array {\n    // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n    if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n    return this.writeInto(out);\n  }\n  xof(bytes: number): Uint8Array {\n    anumber(bytes);\n    return this.xofInto(new Uint8Array(bytes));\n  }\n  digestInto(out: Uint8Array): Uint8Array {\n    aoutput(out, this);\n    if (this.finished) throw new Error('digest() was already called');\n    this.writeInto(out);\n    this.destroy();\n    return out;\n  }\n  digest(): Uint8Array {\n    return this.digestInto(new Uint8Array(this.outputLen));\n  }\n  destroy(): void {\n    this.destroyed = true;\n    clean(this.state);\n  }\n  _cloneInto(to?: Keccak): Keccak {\n    const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n    to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n    to.state32.set(this.state32);\n    to.pos = this.pos;\n    to.posOut = this.posOut;\n    to.finished = this.finished;\n    to.rounds = rounds;\n    // Suffix can change in cSHAKE\n    to.suffix = suffix;\n    to.outputLen = outputLen;\n    to.enableXOF = enableXOF;\n    to.destroyed = this.destroyed;\n    return to;\n  }\n}\n\nconst gen = (suffix: number, blockLen: number, outputLen: number) =>\n  createHasher(() => new Keccak(blockLen, suffix, outputLen));\n\n/** SHA3-224 hash function. */\nexport const sha3_224: CHash = /* @__PURE__ */ (() => gen(0x06, 144, 224 / 8))();\n/** SHA3-256 hash function. Different from keccak-256. */\nexport const sha3_256: CHash = /* @__PURE__ */ (() => gen(0x06, 136, 256 / 8))();\n/** SHA3-384 hash function. */\nexport const sha3_384: CHash = /* @__PURE__ */ (() => gen(0x06, 104, 384 / 8))();\n/** SHA3-512 hash function. */\nexport const sha3_512: CHash = /* @__PURE__ */ (() => gen(0x06, 72, 512 / 8))();\n\n/** keccak-224 hash function. */\nexport const keccak_224: CHash = /* @__PURE__ */ (() => gen(0x01, 144, 224 / 8))();\n/** keccak-256 hash function. Different from SHA3-256. */\nexport const keccak_256: CHash = /* @__PURE__ */ (() => gen(0x01, 136, 256 / 8))();\n/** keccak-384 hash function. */\nexport const keccak_384: CHash = /* @__PURE__ */ (() => gen(0x01, 104, 384 / 8))();\n/** keccak-512 hash function. */\nexport const keccak_512: CHash = /* @__PURE__ */ (() => gen(0x01, 72, 512 / 8))();\n\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number) =>\n  createXOFer<HashXOF<Keccak>, ShakeOpts>(\n    (opts: ShakeOpts = {}) =>\n      new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)\n  );\n\n/** SHAKE128 XOF with 128-bit security. */\nexport const shake128: CHashXO = /* @__PURE__ */ (() => genShake(0x1f, 168, 128 / 8))();\n/** SHAKE256 XOF with 256-bit security. */\nexport const shake256: CHashXO = /* @__PURE__ */ (() => genShake(0x1f, 136, 256 / 8))();\n", "import { keccak_256 } from '@noble/hashes/sha3'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type ToHexErrorType, toHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type Keccak256Hash<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type Keccak256ErrorType =\n  | IsHexErrorType\n  | ToBytesErrorType\n  | ToHexErrorType\n  | ErrorType\n\nexport function keccak256<to extends To = 'hex'>(\n  value: Hex | ByteArray,\n  to_?: to | undefined,\n): Keccak256Hash<to> {\n  const to = to_ || 'hex'\n  const bytes = keccak_256(\n    isHex(value, { strict: false }) ? toBytes(value) : value,\n  )\n  if (to === 'bytes') return bytes as Keccak256Hash<to>\n  return toHex(bytes) as Keccak256Hash<to>\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type Keccak256ErrorType, keccak256 } from './keccak256.js'\n\nconst hash = (value: string) => keccak256(toBytes(value))\n\nexport type HashSignatureErrorType =\n  | Keccak256ErrorType\n  | ToBytesErrorType\n  | ErrorType\n\nexport function hashSignature(sig: string) {\n  return hash(sig)\n}\n", "import { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\ntype NormalizeSignatureParameters = string\ntype NormalizeSignatureReturnType = string\nexport type NormalizeSignatureErrorType = ErrorType\n\nexport function normalizeSignature(\n  signature: NormalizeSignatureParameters,\n): NormalizeSignatureReturnType {\n  let active = true\n  let current = ''\n  let level = 0\n  let result = ''\n  let valid = false\n\n  for (let i = 0; i < signature.length; i++) {\n    const char = signature[i]\n\n    // If the character is a separator, we want to reactivate.\n    if (['(', ')', ','].includes(char)) active = true\n\n    // If the character is a \"level\" token, we want to increment/decrement.\n    if (char === '(') level++\n    if (char === ')') level--\n\n    // If we aren't active, we don't want to mutate the result.\n    if (!active) continue\n\n    // If level === 0, we are at the definition level.\n    if (level === 0) {\n      if (char === ' ' && ['event', 'function', ''].includes(result))\n        result = ''\n      else {\n        result += char\n\n        // If we are at the end of the definition, we must be finished.\n        if (char === ')') {\n          valid = true\n          break\n        }\n      }\n\n      continue\n    }\n\n    // Ignore spaces\n    if (char === ' ') {\n      // If the previous character is a separator, and the current section isn't empty, we want to deactivate.\n      if (signature[i - 1] !== ',' && current !== ',' && current !== ',(') {\n        current = ''\n        active = false\n      }\n      continue\n    }\n\n    result += char\n    current += char\n  }\n\n  if (!valid) throw new BaseError('Unable to normalize signature.')\n\n  return result\n}\n", "import { type AbiEvent, type AbiFunction, formatAbiItem } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport {\n  type NormalizeSignatureErrorType,\n  normalizeSignature,\n} from './normalizeSignature.js'\n\nexport type ToSignatureErrorType = NormalizeSignatureErrorType | ErrorType\n\n/**\n * Returns the signature for a given function or event definition.\n *\n * @example\n * const signature = toSignature('function ownerOf(uint256 tokenId)')\n * // 'ownerOf(uint256)'\n *\n * @example\n * const signature_3 = toSignature({\n *   name: 'ownerOf',\n *   type: 'function',\n *   inputs: [{ name: 'tokenId', type: 'uint256' }],\n *   outputs: [],\n *   stateMutability: 'view',\n * })\n * // 'ownerOf(uint256)'\n */\nexport const toSignature = (def: string | AbiFunction | AbiEvent) => {\n  const def_ = (() => {\n    if (typeof def === 'string') return def\n    return formatAbiItem(def)\n  })()\n  return normalizeSignature(def_)\n}\n", "import type { AbiEvent, AbiFunction } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport { type HashSignatureErrorType, hashSignature } from './hashSignature.js'\nimport { type ToSignatureErrorType, toSignature } from './toSignature.js'\n\nexport type ToSignatureHashErrorType =\n  | HashSignatureErrorType\n  | ToSignatureErrorType\n  | ErrorType\n\n/**\n * Returns the hash (of the function/event signature) for a given event or function definition.\n */\nexport function toSignatureHash(fn: string | AbiFunction | AbiEvent) {\n  return hashSignature(toSignature(fn))\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport {\n  type ToSignatureHashErrorType,\n  toSignatureHash,\n} from './toSignatureHash.js'\n\nexport type ToEventSelectorErrorType = ToSignatureHashErrorType | ErrorType\n\n/**\n * Returns the event selector for a given event definition.\n *\n * @example\n * const selector = toEventSelector('Transfer(address indexed from, address indexed to, uint256 amount)')\n * // 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n */\nexport const toEventSelector = toSignatureHash\n", "import { BaseError } from './base.js'\n\nexport type InvalidAddressErrorType = InvalidAddressError & {\n  name: 'InvalidAddressError'\n}\nexport class InvalidAddressError extends BaseError {\n  constructor({ address }: { address: string }) {\n    super(`Address \"${address}\" is invalid.`, {\n      metaMessages: [\n        '- Address must be a hex value of 20 bytes (40 hex characters).',\n        '- Address must match its checksum counterpart.',\n      ],\n      name: 'InvalidAddressError',\n    })\n  }\n}\n", "/**\n * Map with a LRU (Least recently used) policy.\n *\n * @link https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU\n */\nexport class LruMap<value = unknown> extends Map<string, value> {\n  maxSize: number\n\n  constructor(size: number) {\n    super()\n    this.maxSize = size\n  }\n\n  override get(key: string) {\n    const value = super.get(key)\n\n    if (super.has(key)) {\n      super.delete(key)\n      super.set(key, value as value)\n    }\n\n    return value\n  }\n\n  override set(key: string, value: value) {\n    if (super.has(key)) super.delete(key)\n    super.set(key, value)\n    if (this.maxSize && this.size > this.maxSize) {\n      const firstKey = super.keys().next().value\n      if (firstKey !== undefined) super.delete(firstKey)\n    }\n    return this\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport { InvalidAddressError } from '../../errors/address.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport {\n  type StringToBytesErrorType,\n  stringToBytes,\n} from '../encoding/toBytes.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport { LruMap } from '../lru.js'\nimport { type IsAddressErrorType, isAddress } from './isAddress.js'\n\nconst checksumAddressCache = /*#__PURE__*/ new LruMap<Address>(8192)\n\nexport type ChecksumAddressErrorType =\n  | Keccak256ErrorType\n  | StringToBytesErrorType\n  | ErrorType\n\nexport function checksumAddress(\n  address_: Address,\n  /**\n   * Warning: EIP-1191 checksum addresses are generally not backwards compatible with the\n   * wider Ethereum ecosystem, meaning it will break when validated against an application/tool\n   * that relies on EIP-55 checksum encoding (checksum without chainId).\n   *\n   * It is highly recommended to not use this feature unless you\n   * know what you are doing.\n   *\n   * See more: https://github.com/ethereum/EIPs/issues/1121\n   */\n  chainId?: number | undefined,\n): Address {\n  if (checksumAddressCache.has(`${address_}.${chainId}`))\n    return checksumAddressCache.get(`${address_}.${chainId}`)!\n\n  const hexAddress = chainId\n    ? `${chainId}${address_.toLowerCase()}`\n    : address_.substring(2).toLowerCase()\n  const hash = keccak256(stringToBytes(hexAddress), 'bytes')\n\n  const address = (\n    chainId ? hexAddress.substring(`${chainId}0x`.length) : hexAddress\n  ).split('')\n  for (let i = 0; i < 40; i += 2) {\n    if (hash[i >> 1] >> 4 >= 8 && address[i]) {\n      address[i] = address[i].toUpperCase()\n    }\n    if ((hash[i >> 1] & 0x0f) >= 8 && address[i + 1]) {\n      address[i + 1] = address[i + 1].toUpperCase()\n    }\n  }\n\n  const result = `0x${address.join('')}` as const\n  checksumAddressCache.set(`${address_}.${chainId}`, result)\n  return result\n}\n\nexport type GetAddressErrorType =\n  | ChecksumAddressErrorType\n  | IsAddressErrorType\n  | ErrorType\n\nexport function getAddress(\n  address: string,\n  /**\n   * Warning: EIP-1191 checksum addresses are generally not backwards compatible with the\n   * wider Ethereum ecosystem, meaning it will break when validated against an application/tool\n   * that relies on EIP-55 checksum encoding (checksum without chainId).\n   *\n   * It is highly recommended to not use this feature unless you\n   * know what you are doing.\n   *\n   * See more: https://github.com/ethereum/EIPs/issues/1121\n   */\n  chainId?: number,\n): Address {\n  if (!isAddress(address, { strict: false }))\n    throw new InvalidAddressError({ address })\n  return checksumAddress(address, chainId)\n}\n", "import type { Address } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport { LruMap } from '../lru.js'\nimport { checksumAddress } from './getAddress.js'\n\nconst addressRegex = /^0x[a-fA-F0-9]{40}$/\n\n/** @internal */\nexport const isAddressCache = /*#__PURE__*/ new LruMap<boolean>(8192)\n\nexport type IsAddressOptions = {\n  /**\n   * Enables strict mode. Whether or not to compare the address against its checksum.\n   *\n   * @default true\n   */\n  strict?: boolean | undefined\n}\n\nexport type IsAddressErrorType = ErrorType\n\nexport function isAddress(\n  address: string,\n  options?: IsAddressOptions | undefined,\n): address is Address {\n  const { strict = true } = options ?? {}\n  const cacheKey = `${address}.${strict}`\n\n  if (isAddressCache.has(cacheKey)) return isAddressCache.get(cacheKey)!\n\n  const result = (() => {\n    if (!addressRegex.test(address)) return false\n    if (address.toLowerCase() === address) return true\n    if (strict) return checksumAddress(address as Address) === address\n    return true\n  })()\n  isAddressCache.set(cacheKey, result)\n  return result\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\nexport type ConcatReturnType<value extends Hex | ByteArray> = value extends Hex\n  ? Hex\n  : ByteArray\n\nexport type ConcatErrorType =\n  | ConcatBytesErrorType\n  | ConcatHexErrorType\n  | ErrorType\n\nexport function concat<value extends Hex | ByteArray>(\n  values: readonly value[],\n): ConcatReturnType<value> {\n  if (typeof values[0] === 'string')\n    return concatHex(values as readonly Hex[]) as ConcatReturnType<value>\n  return concatBytes(values as readonly ByteArray[]) as ConcatReturnType<value>\n}\n\nexport type ConcatBytesErrorType = ErrorType\n\nexport function concatBytes(values: readonly ByteArray[]): ByteArray {\n  let length = 0\n  for (const arr of values) {\n    length += arr.length\n  }\n  const result = new Uint8Array(length)\n  let offset = 0\n  for (const arr of values) {\n    result.set(arr, offset)\n    offset += arr.length\n  }\n  return result\n}\n\nexport type ConcatHexErrorType = ErrorType\n\nexport function concatHex(values: readonly Hex[]): Hex {\n  return `0x${(values as Hex[]).reduce(\n    (acc, x) => acc + x.replace('0x', ''),\n    '',\n  )}`\n}\n", "import {\n  SliceOffsetOutOfBoundsError,\n  type SliceOffsetOutOfBoundsErrorType,\n} from '../../errors/data.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\nimport { type IsHexErrorType, isHex } from './isHex.js'\nimport { type SizeErrorType, size } from './size.js'\n\nexport type SliceReturnType<value extends ByteArray | Hex> = value extends Hex\n  ? Hex\n  : ByteArray\n\nexport type SliceErrorType =\n  | IsHexErrorType\n  | SliceBytesErrorType\n  | SliceHexErrorType\n  | ErrorType\n\n/**\n * @description Returns a section of the hex or byte array given a start/end bytes offset.\n *\n * @param value The hex or byte array to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nexport function slice<value extends ByteArray | Hex>(\n  value: value,\n  start?: number | undefined,\n  end?: number | undefined,\n  { strict }: { strict?: boolean | undefined } = {},\n): SliceReturnType<value> {\n  if (isHex(value, { strict: false }))\n    return sliceHex(value as Hex, start, end, {\n      strict,\n    }) as SliceReturnType<value>\n  return sliceBytes(value as ByteArray, start, end, {\n    strict,\n  }) as SliceReturnType<value>\n}\n\nexport type AssertStartOffsetErrorType =\n  | SliceOffsetOutOfBoundsErrorType\n  | SizeErrorType\n  | ErrorType\n\nfunction assertStartOffset(value: Hex | ByteArray, start?: number | undefined) {\n  if (typeof start === 'number' && start > 0 && start > size(value) - 1)\n    throw new SliceOffsetOutOfBoundsError({\n      offset: start,\n      position: 'start',\n      size: size(value),\n    })\n}\n\nexport type AssertEndOffsetErrorType =\n  | SliceOffsetOutOfBoundsErrorType\n  | SizeErrorType\n  | ErrorType\n\nfunction assertEndOffset(\n  value: Hex | ByteArray,\n  start?: number | undefined,\n  end?: number | undefined,\n) {\n  if (\n    typeof start === 'number' &&\n    typeof end === 'number' &&\n    size(value) !== end - start\n  ) {\n    throw new SliceOffsetOutOfBoundsError({\n      offset: end,\n      position: 'end',\n      size: size(value),\n    })\n  }\n}\n\nexport type SliceBytesErrorType =\n  | AssertStartOffsetErrorType\n  | AssertEndOffsetErrorType\n  | ErrorType\n\n/**\n * @description Returns a section of the byte array given a start/end bytes offset.\n *\n * @param value The byte array to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nexport function sliceBytes(\n  value_: ByteArray,\n  start?: number | undefined,\n  end?: number | undefined,\n  { strict }: { strict?: boolean | undefined } = {},\n): ByteArray {\n  assertStartOffset(value_, start)\n  const value = value_.slice(start, end)\n  if (strict) assertEndOffset(value, start, end)\n  return value\n}\n\nexport type SliceHexErrorType =\n  | AssertStartOffsetErrorType\n  | AssertEndOffsetErrorType\n  | ErrorType\n\n/**\n * @description Returns a section of the hex value given a start/end bytes offset.\n *\n * @param value The hex value to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nexport function sliceHex(\n  value_: Hex,\n  start?: number | undefined,\n  end?: number | undefined,\n  { strict }: { strict?: boolean | undefined } = {},\n): Hex {\n  assertStartOffset(value_, start)\n  const value = `0x${value_\n    .replace('0x', '')\n    .slice((start ?? 0) * 2, (end ?? value_.length) * 2)}` as const\n  if (strict) assertEndOffset(value, start, end)\n  return value\n}\n", "export const arrayRegex = /^(.*)\\[([0-9]*)\\]$/\n\n// `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n// https://regexr.com/6va55\nexport const bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/\n\n// `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nexport const integerRegex =\n  /^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/\n", "import type {\n  AbiParameter,\n  AbiParameterKind,\n  AbiParametersToPrimitiveTypes,\n  AbiParameterToPrimitiveType,\n} from 'abitype'\n\nimport {\n  AbiEncodingArrayLengthMismatchError,\n  type AbiEncodingArrayLengthMismatchErrorType,\n  AbiEncodingBytesSizeMismatchError,\n  type AbiEncodingBytesSizeMismatchErrorType,\n  AbiEncodingLengthMismatchError,\n  type AbiEncodingLengthMismatchErrorType,\n  InvalidAbiEncodingTypeError,\n  type InvalidAbiEncodingTypeErrorType,\n  InvalidArrayError,\n  type InvalidArrayErrorType,\n} from '../../errors/abi.js'\nimport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport { BaseError } from '../../errors/base.js'\nimport { IntegerOutOfRangeError } from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport { type ConcatErrorType, concat } from '../data/concat.js'\nimport { type PadHexErrorType, padHex } from '../data/pad.js'\nimport { type SizeErrorType, size } from '../data/size.js'\nimport { type SliceErrorType, slice } from '../data/slice.js'\nimport {\n  type BoolToHexErrorType,\n  boolToHex,\n  type NumberToHexErrorType,\n  numberToHex,\n  type StringToHexErrorType,\n  stringToHex,\n} from '../encoding/toHex.js'\nimport { integerRegex } from '../regex.js'\n\nexport type EncodeAbiParametersReturnType = Hex\n\nexport type EncodeAbiParametersErrorType =\n  | AbiEncodingLengthMismatchErrorType\n  | PrepareParamsErrorType\n  | EncodeParamsErrorType\n  | ErrorType\n\n/**\n * @description Encodes a list of primitive values into an ABI-encoded hex value.\n *\n * - Docs: https://viem.sh/docs/abi/encodeAbiParameters#encodeabiparameters\n *\n *   Generates ABI encoded data using the [ABI specification](https://docs.soliditylang.org/en/latest/abi-spec), given a set of ABI parameters (inputs/outputs) and their corresponding values.\n *\n * @param params - a set of ABI Parameters (params), that can be in the shape of the inputs or outputs attribute of an ABI Item.\n * @param values - a set of values (values) that correspond to the given params.\n * @example\n * ```typescript\n * import { encodeAbiParameters } from 'viem'\n *\n * const encodedData = encodeAbiParameters(\n *   [\n *     { name: 'x', type: 'string' },\n *     { name: 'y', type: 'uint' },\n *     { name: 'z', type: 'bool' }\n *   ],\n *   ['wagmi', 420n, true]\n * )\n * ```\n *\n * You can also pass in Human Readable parameters with the parseAbiParameters utility.\n *\n * @example\n * ```typescript\n * import { encodeAbiParameters, parseAbiParameters } from 'viem'\n *\n * const encodedData = encodeAbiParameters(\n *   parseAbiParameters('string x, uint y, bool z'),\n *   ['wagmi', 420n, true]\n * )\n * ```\n */\nexport function encodeAbiParameters<\n  const params extends readonly AbiParameter[] | readonly unknown[],\n>(\n  params: params,\n  values: params extends readonly AbiParameter[]\n    ? AbiParametersToPrimitiveTypes<params, AbiParameterKind, true>\n    : never,\n): EncodeAbiParametersReturnType {\n  if (params.length !== values.length)\n    throw new AbiEncodingLengthMismatchError({\n      expectedLength: params.length as number,\n      givenLength: values.length as any,\n    })\n  // Prepare the parameters to determine dynamic types to encode.\n  const preparedParams = prepareParams({\n    params: params as readonly AbiParameter[],\n    values: values as any,\n  })\n  const data = encodeParams(preparedParams)\n  if (data.length === 0) return '0x'\n  return data\n}\n\n/////////////////////////////////////////////////////////////////\n\ntype PreparedParam = { dynamic: boolean; encoded: Hex }\n\ntype TupleAbiParameter = AbiParameter & { components: readonly AbiParameter[] }\ntype Tuple = AbiParameterToPrimitiveType<TupleAbiParameter>\n\ntype PrepareParamsErrorType = PrepareParamErrorType | ErrorType\n\nfunction prepareParams<const params extends readonly AbiParameter[]>({\n  params,\n  values,\n}: {\n  params: params\n  values: AbiParametersToPrimitiveTypes<params>\n}) {\n  const preparedParams: PreparedParam[] = []\n  for (let i = 0; i < params.length; i++) {\n    preparedParams.push(prepareParam({ param: params[i], value: values[i] }))\n  }\n  return preparedParams\n}\n\ntype PrepareParamErrorType =\n  | EncodeAddressErrorType\n  | EncodeArrayErrorType\n  | EncodeBytesErrorType\n  | EncodeBoolErrorType\n  | EncodeNumberErrorType\n  | EncodeStringErrorType\n  | EncodeTupleErrorType\n  | GetArrayComponentsErrorType\n  | InvalidAbiEncodingTypeErrorType\n  | ErrorType\n\nfunction prepareParam<const param extends AbiParameter>({\n  param,\n  value,\n}: {\n  param: param\n  value: AbiParameterToPrimitiveType<param>\n}): PreparedParam {\n  const arrayComponents = getArrayComponents(param.type)\n  if (arrayComponents) {\n    const [length, type] = arrayComponents\n    return encodeArray(value, { length, param: { ...param, type } })\n  }\n  if (param.type === 'tuple') {\n    return encodeTuple(value as unknown as Tuple, {\n      param: param as TupleAbiParameter,\n    })\n  }\n  if (param.type === 'address') {\n    return encodeAddress(value as unknown as Hex)\n  }\n  if (param.type === 'bool') {\n    return encodeBool(value as unknown as boolean)\n  }\n  if (param.type.startsWith('uint') || param.type.startsWith('int')) {\n    const signed = param.type.startsWith('int')\n    const [, , size = '256'] = integerRegex.exec(param.type) ?? []\n    return encodeNumber(value as unknown as number, {\n      signed,\n      size: Number(size),\n    })\n  }\n  if (param.type.startsWith('bytes')) {\n    return encodeBytes(value as unknown as Hex, { param })\n  }\n  if (param.type === 'string') {\n    return encodeString(value as unknown as string)\n  }\n  throw new InvalidAbiEncodingTypeError(param.type, {\n    docsPath: '/docs/contract/encodeAbiParameters',\n  })\n}\n\n/////////////////////////////////////////////////////////////////\n\ntype EncodeParamsErrorType = NumberToHexErrorType | SizeErrorType | ErrorType\n\nfunction encodeParams(preparedParams: PreparedParam[]): Hex {\n  // 1. Compute the size of the static part of the parameters.\n  let staticSize = 0\n  for (let i = 0; i < preparedParams.length; i++) {\n    const { dynamic, encoded } = preparedParams[i]\n    if (dynamic) staticSize += 32\n    else staticSize += size(encoded)\n  }\n\n  // 2. Split the parameters into static and dynamic parts.\n  const staticParams: Hex[] = []\n  const dynamicParams: Hex[] = []\n  let dynamicSize = 0\n  for (let i = 0; i < preparedParams.length; i++) {\n    const { dynamic, encoded } = preparedParams[i]\n    if (dynamic) {\n      staticParams.push(numberToHex(staticSize + dynamicSize, { size: 32 }))\n      dynamicParams.push(encoded)\n      dynamicSize += size(encoded)\n    } else {\n      staticParams.push(encoded)\n    }\n  }\n\n  // 3. Concatenate static and dynamic parts.\n  return concat([...staticParams, ...dynamicParams])\n}\n\n/////////////////////////////////////////////////////////////////\n\ntype EncodeAddressErrorType =\n  | InvalidAddressErrorType\n  | IsAddressErrorType\n  | ErrorType\n\nfunction encodeAddress(value: Hex): PreparedParam {\n  if (!isAddress(value)) throw new InvalidAddressError({ address: value })\n  return { dynamic: false, encoded: padHex(value.toLowerCase() as Hex) }\n}\n\ntype EncodeArrayErrorType =\n  | AbiEncodingArrayLengthMismatchErrorType\n  | ConcatErrorType\n  | EncodeParamsErrorType\n  | InvalidArrayErrorType\n  | NumberToHexErrorType\n  // TODO: Add back once circular type reference is resolved\n  // | PrepareParamErrorType\n  | ErrorType\n\nfunction encodeArray<const param extends AbiParameter>(\n  value: AbiParameterToPrimitiveType<param>,\n  {\n    length,\n    param,\n  }: {\n    length: number | null\n    param: param\n  },\n): PreparedParam {\n  const dynamic = length === null\n\n  if (!Array.isArray(value)) throw new InvalidArrayError(value)\n  if (!dynamic && value.length !== length)\n    throw new AbiEncodingArrayLengthMismatchError({\n      expectedLength: length!,\n      givenLength: value.length,\n      type: `${param.type}[${length}]`,\n    })\n\n  let dynamicChild = false\n  const preparedParams: PreparedParam[] = []\n  for (let i = 0; i < value.length; i++) {\n    const preparedParam = prepareParam({ param, value: value[i] })\n    if (preparedParam.dynamic) dynamicChild = true\n    preparedParams.push(preparedParam)\n  }\n\n  if (dynamic || dynamicChild) {\n    const data = encodeParams(preparedParams)\n    if (dynamic) {\n      const length = numberToHex(preparedParams.length, { size: 32 })\n      return {\n        dynamic: true,\n        encoded: preparedParams.length > 0 ? concat([length, data]) : length,\n      }\n    }\n    if (dynamicChild) return { dynamic: true, encoded: data }\n  }\n  return {\n    dynamic: false,\n    encoded: concat(preparedParams.map(({ encoded }) => encoded)),\n  }\n}\n\ntype EncodeBytesErrorType =\n  | AbiEncodingBytesSizeMismatchErrorType\n  | ConcatErrorType\n  | PadHexErrorType\n  | NumberToHexErrorType\n  | SizeErrorType\n  | ErrorType\n\nfunction encodeBytes<const param extends AbiParameter>(\n  value: Hex,\n  { param }: { param: param },\n): PreparedParam {\n  const [, paramSize] = param.type.split('bytes')\n  const bytesSize = size(value)\n  if (!paramSize) {\n    let value_ = value\n    // If the size is not divisible by 32 bytes, pad the end\n    // with empty bytes to the ceiling 32 bytes.\n    if (bytesSize % 32 !== 0)\n      value_ = padHex(value_, {\n        dir: 'right',\n        size: Math.ceil((value.length - 2) / 2 / 32) * 32,\n      })\n    return {\n      dynamic: true,\n      encoded: concat([padHex(numberToHex(bytesSize, { size: 32 })), value_]),\n    }\n  }\n  if (bytesSize !== Number.parseInt(paramSize, 10))\n    throw new AbiEncodingBytesSizeMismatchError({\n      expectedSize: Number.parseInt(paramSize, 10),\n      value,\n    })\n  return { dynamic: false, encoded: padHex(value, { dir: 'right' }) }\n}\n\ntype EncodeBoolErrorType = PadHexErrorType | BoolToHexErrorType | ErrorType\n\nfunction encodeBool(value: boolean): PreparedParam {\n  if (typeof value !== 'boolean')\n    throw new BaseError(\n      `Invalid boolean value: \"${value}\" (type: ${typeof value}). Expected: \\`true\\` or \\`false\\`.`,\n    )\n  return { dynamic: false, encoded: padHex(boolToHex(value)) }\n}\n\ntype EncodeNumberErrorType = NumberToHexErrorType | ErrorType\n\nfunction encodeNumber(\n  value: number,\n  { signed, size = 256 }: { signed: boolean; size?: number | undefined },\n): PreparedParam {\n  if (typeof size === 'number') {\n    const max = 2n ** (BigInt(size) - (signed ? 1n : 0n)) - 1n\n    const min = signed ? -max - 1n : 0n\n    if (value > max || value < min)\n      throw new IntegerOutOfRangeError({\n        max: max.toString(),\n        min: min.toString(),\n        signed,\n        size: size / 8,\n        value: value.toString(),\n      })\n  }\n  return {\n    dynamic: false,\n    encoded: numberToHex(value, {\n      size: 32,\n      signed,\n    }),\n  }\n}\n\ntype EncodeStringErrorType =\n  | ConcatErrorType\n  | NumberToHexErrorType\n  | PadHexErrorType\n  | SizeErrorType\n  | SliceErrorType\n  | StringToHexErrorType\n  | ErrorType\n\nfunction encodeString(value: string): PreparedParam {\n  const hexValue = stringToHex(value)\n  const partsLength = Math.ceil(size(hexValue) / 32)\n  const parts: Hex[] = []\n  for (let i = 0; i < partsLength; i++) {\n    parts.push(\n      padHex(slice(hexValue, i * 32, (i + 1) * 32), {\n        dir: 'right',\n      }),\n    )\n  }\n  return {\n    dynamic: true,\n    encoded: concat([\n      padHex(numberToHex(size(hexValue), { size: 32 })),\n      ...parts,\n    ]),\n  }\n}\n\ntype EncodeTupleErrorType =\n  | ConcatErrorType\n  | EncodeParamsErrorType\n  // TODO: Add back once circular type reference is resolved\n  // | PrepareParamErrorType\n  | ErrorType\n\nfunction encodeTuple<\n  const param extends AbiParameter & { components: readonly AbiParameter[] },\n>(\n  value: AbiParameterToPrimitiveType<param>,\n  { param }: { param: param },\n): PreparedParam {\n  let dynamic = false\n  const preparedParams: PreparedParam[] = []\n  for (let i = 0; i < param.components.length; i++) {\n    const param_ = param.components[i]\n    const index = Array.isArray(value) ? i : param_.name\n    const preparedParam = prepareParam({\n      param: param_,\n      value: (value as any)[index!] as readonly unknown[],\n    })\n    preparedParams.push(preparedParam)\n    if (preparedParam.dynamic) dynamic = true\n  }\n  return {\n    dynamic,\n    encoded: dynamic\n      ? encodeParams(preparedParams)\n      : concat(preparedParams.map(({ encoded }) => encoded)),\n  }\n}\n\ntype GetArrayComponentsErrorType = ErrorType\n\nexport function getArrayComponents(\n  type: string,\n): [length: number | null, innerType: string] | undefined {\n  const matches = type.match(/^(.*)\\[(\\d+)?\\]$/)\n  return matches\n    ? // Return `null` if the array is dynamic.\n      [matches[2] ? Number(matches[2]) : null, matches[1]]\n    : undefined\n}\n", "import type { AbiFunction } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport { type SliceErrorType, slice } from '../data/slice.js'\nimport {\n  type ToSignatureHashErrorType,\n  toSignatureHash,\n} from './toSignatureHash.js'\n\nexport type ToFunctionSelectorErrorType =\n  | ToSignatureHashErrorType\n  | SliceErrorType\n  | ErrorType\n\n/**\n * Returns the function selector for a given function definition.\n *\n * @example\n * const selector = toFunctionSelector('function ownerOf(uint256 tokenId)')\n * // 0x6352211e\n */\nexport const toFunctionSelector = (fn: string | AbiFunction) =>\n  slice(toSignatureHash(fn), 0, 4)\n", "import type { Abi, AbiParameter, Address } from 'abitype'\n\nimport {\n  AbiItemAmbiguityError,\n  type AbiItemAmbiguityErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  AbiItem,\n  AbiItemArgs,\n  AbiItemName,\n  ExtractAbiItemForArgs,\n  Widen,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { UnionEvaluate } from '../../types/utils.js'\nimport { type IsHexErrorType, isHex } from '../../utils/data/isHex.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport { toEventSelector } from '../hash/toEventSelector.js'\nimport {\n  type ToFunctionSelectorErrorType,\n  toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\n\nexport type GetAbiItemParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  name extends AbiItemName<abi> = AbiItemName<abi>,\n  args extends AbiItemArgs<abi, name> | undefined = AbiItemArgs<abi, name>,\n  ///\n  allArgs = AbiItemArgs<abi, name>,\n  allNames = AbiItemName<abi>,\n> = {\n  abi: abi\n  name:\n    | allNames // show all options\n    | (name extends allNames ? name : never) // infer value\n    | Hex // function selector\n} & UnionEvaluate<\n  readonly [] extends allArgs\n    ? {\n        args?:\n          | allArgs // show all options\n          // infer value, widen inferred value of `args` conditionally to match `allArgs`\n          | (abi extends Abi\n              ? args extends allArgs\n                ? Widen<args>\n                : never\n              : never)\n          | undefined\n      }\n    : {\n        args?:\n          | allArgs // show all options\n          | (Widen<args> & (args extends allArgs ? unknown : never)) // infer value, widen inferred value of `args` match `allArgs` (e.g. avoid union `args: readonly [123n] | readonly [bigint]`)\n          | undefined\n      }\n>\n\nexport type GetAbiItemErrorType =\n  | IsArgOfTypeErrorType\n  | IsHexErrorType\n  | ToFunctionSelectorErrorType\n  | AbiItemAmbiguityErrorType\n  | ErrorType\n\nexport type GetAbiItemReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  name extends AbiItemName<abi> = AbiItemName<abi>,\n  args extends AbiItemArgs<abi, name> | undefined = AbiItemArgs<abi, name>,\n> = abi extends Abi\n  ? Abi extends abi\n    ? AbiItem | undefined\n    : ExtractAbiItemForArgs<\n        abi,\n        name,\n        args extends AbiItemArgs<abi, name> ? args : AbiItemArgs<abi, name>\n      >\n  : AbiItem | undefined\n\nexport function getAbiItem<\n  const abi extends Abi | readonly unknown[],\n  name extends AbiItemName<abi>,\n  const args extends AbiItemArgs<abi, name> | undefined = undefined,\n>(\n  parameters: GetAbiItemParameters<abi, name, args>,\n): GetAbiItemReturnType<abi, name, args> {\n  const { abi, args = [], name } = parameters as unknown as GetAbiItemParameters\n\n  const isSelector = isHex(name, { strict: false })\n  const abiItems = (abi as Abi).filter((abiItem) => {\n    if (isSelector) {\n      if (abiItem.type === 'function')\n        return toFunctionSelector(abiItem) === name\n      if (abiItem.type === 'event') return toEventSelector(abiItem) === name\n      return false\n    }\n    return 'name' in abiItem && abiItem.name === name\n  })\n\n  if (abiItems.length === 0)\n    return undefined as GetAbiItemReturnType<abi, name, args>\n  if (abiItems.length === 1)\n    return abiItems[0] as GetAbiItemReturnType<abi, name, args>\n\n  let matchedAbiItem: AbiItem | undefined\n  for (const abiItem of abiItems) {\n    if (!('inputs' in abiItem)) continue\n    if (!args || args.length === 0) {\n      if (!abiItem.inputs || abiItem.inputs.length === 0)\n        return abiItem as GetAbiItemReturnType<abi, name, args>\n      continue\n    }\n    if (!abiItem.inputs) continue\n    if (abiItem.inputs.length === 0) continue\n    if (abiItem.inputs.length !== args.length) continue\n    const matched = args.every((arg, index) => {\n      const abiParameter = 'inputs' in abiItem && abiItem.inputs![index]\n      if (!abiParameter) return false\n      return isArgOfType(arg, abiParameter)\n    })\n    if (matched) {\n      // Check for ambiguity against already matched parameters (e.g. `address` vs `bytes20`).\n      if (\n        matchedAbiItem &&\n        'inputs' in matchedAbiItem &&\n        matchedAbiItem.inputs\n      ) {\n        const ambiguousTypes = getAmbiguousTypes(\n          abiItem.inputs,\n          matchedAbiItem.inputs,\n          args as readonly unknown[],\n        )\n        if (ambiguousTypes)\n          throw new AbiItemAmbiguityError(\n            {\n              abiItem,\n              type: ambiguousTypes[0],\n            },\n            {\n              abiItem: matchedAbiItem,\n              type: ambiguousTypes[1],\n            },\n          )\n      }\n\n      matchedAbiItem = abiItem\n    }\n  }\n\n  if (matchedAbiItem)\n    return matchedAbiItem as GetAbiItemReturnType<abi, name, args>\n  return abiItems[0] as GetAbiItemReturnType<abi, name, args>\n}\n\ntype IsArgOfTypeErrorType = IsAddressErrorType | ErrorType\n\n/** @internal */\nexport function isArgOfType(arg: unknown, abiParameter: AbiParameter): boolean {\n  const argType = typeof arg\n  const abiParameterType = abiParameter.type\n  switch (abiParameterType) {\n    case 'address':\n      return isAddress(arg as Address, { strict: false })\n    case 'bool':\n      return argType === 'boolean'\n    case 'function':\n      return argType === 'string'\n    case 'string':\n      return argType === 'string'\n    default: {\n      if (abiParameterType === 'tuple' && 'components' in abiParameter)\n        return Object.values(abiParameter.components).every(\n          (component, index) => {\n            return (\n              argType === 'object' &&\n              isArgOfType(\n                Object.values(arg as unknown[] | Record<string, unknown>)[\n                  index\n                ],\n                component as AbiParameter,\n              )\n            )\n          },\n        )\n\n      // `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n      // https://regexr.com/6v8hp\n      if (\n        /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(\n          abiParameterType,\n        )\n      )\n        return argType === 'number' || argType === 'bigint'\n\n      // `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n      // https://regexr.com/6va55\n      if (/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(abiParameterType))\n        return argType === 'string' || arg instanceof Uint8Array\n\n      // fixed-length (`<type>[M]`) and dynamic (`<type>[]`) arrays\n      // https://regexr.com/6va6i\n      if (/[a-z]+[1-9]{0,3}(\\[[0-9]{0,}\\])+$/.test(abiParameterType)) {\n        return (\n          Array.isArray(arg) &&\n          arg.every((x: unknown) =>\n            isArgOfType(x, {\n              ...abiParameter,\n              // Pop off `[]` or `[M]` from end of type\n              type: abiParameterType.replace(/(\\[[0-9]{0,}\\])$/, ''),\n            } as AbiParameter),\n          )\n        )\n      }\n\n      return false\n    }\n  }\n}\n\n/** @internal */\nexport function getAmbiguousTypes(\n  sourceParameters: readonly AbiParameter[],\n  targetParameters: readonly AbiParameter[],\n  args: AbiItemArgs,\n): AbiParameter['type'][] | undefined {\n  for (const parameterIndex in sourceParameters) {\n    const sourceParameter = sourceParameters[parameterIndex]\n    const targetParameter = targetParameters[parameterIndex]\n\n    if (\n      sourceParameter.type === 'tuple' &&\n      targetParameter.type === 'tuple' &&\n      'components' in sourceParameter &&\n      'components' in targetParameter\n    )\n      return getAmbiguousTypes(\n        sourceParameter.components,\n        targetParameter.components,\n        (args as any)[parameterIndex],\n      )\n\n    const types = [sourceParameter.type, targetParameter.type]\n\n    const ambiguous = (() => {\n      if (types.includes('address') && types.includes('bytes20')) return true\n      if (types.includes('address') && types.includes('string'))\n        return isAddress(args[parameterIndex] as Address, { strict: false })\n      if (types.includes('address') && types.includes('bytes'))\n        return isAddress(args[parameterIndex] as Address, { strict: false })\n      return false\n    })()\n\n    if (ambiguous) return types\n  }\n\n  return\n}\n", "import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../types.js'\n\nexport type ParseAccountErrorType = ErrorType\n\nexport function parseAccount<accountOrAddress extends Address | Account>(\n  account: accountOrAddress,\n): accountOrAddress extends Address ? Account : accountOrAddress {\n  if (typeof account === 'string')\n    return { address: account, type: 'json-rpc' } as any\n  return account as any\n}\n", "import type {\n  Abi,\n  AbiStateMutability,\n  ExtractAbiFunction,\n  ExtractAbiFunctions,\n} from 'abitype'\n\nimport {\n  AbiFunctionNotFoundError,\n  type AbiFunctionNotFoundErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport type { ConcatHexErrorType } from '../data/concat.js'\nimport {\n  type ToFunctionSelectorErrorType,\n  toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeFunctionData'\n\nexport type PrepareEncodeFunctionDataParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends\n    | ContractFunctionName<abi>\n    | undefined = ContractFunctionName<abi>,\n  ///\n  hasFunctions = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [ExtractAbiFunctions<abi>] extends [never]\n        ? false\n        : true\n    : true,\n  allArgs = ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  >,\n  allFunctionNames = ContractFunctionName<abi>,\n> = {\n  abi: abi\n} & UnionEvaluate<\n  IsNarrowable<abi, Abi> extends true\n    ? abi['length'] extends 1\n      ? { functionName?: functionName | allFunctionNames | Hex | undefined }\n      : { functionName: functionName | allFunctionNames | Hex }\n    : { functionName?: functionName | allFunctionNames | Hex | undefined }\n> &\n  UnionEvaluate<{ args?: allArgs | undefined }> &\n  (hasFunctions extends true ? unknown : never)\n\nexport type PrepareEncodeFunctionDataReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends\n    | ContractFunctionName<abi>\n    | undefined = ContractFunctionName<abi>,\n> = {\n  abi: abi extends Abi\n    ? functionName extends ContractFunctionName<abi>\n      ? [ExtractAbiFunction<abi, functionName>]\n      : abi\n    : Abi\n  functionName: Hex\n}\n\nexport type PrepareEncodeFunctionDataErrorType =\n  | AbiFunctionNotFoundErrorType\n  | ConcatHexErrorType\n  | FormatAbiItemErrorType\n  | GetAbiItemErrorType\n  | ToFunctionSelectorErrorType\n  | ErrorType\n\nexport function prepareEncodeFunctionData<\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi> | undefined = undefined,\n>(\n  parameters: PrepareEncodeFunctionDataParameters<abi, functionName>,\n): PrepareEncodeFunctionDataReturnType<abi, functionName> {\n  const { abi, args, functionName } =\n    parameters as PrepareEncodeFunctionDataParameters\n\n  let abiItem = abi[0]\n  if (functionName) {\n    const item = getAbiItem({\n      abi,\n      args,\n      name: functionName,\n    })\n    if (!item) throw new AbiFunctionNotFoundError(functionName, { docsPath })\n    abiItem = item\n  }\n\n  if (abiItem.type !== 'function')\n    throw new AbiFunctionNotFoundError(undefined, { docsPath })\n\n  return {\n    abi: [abiItem],\n    functionName: toFunctionSelector(formatAbiItem(abiItem)),\n  } as unknown as PrepareEncodeFunctionDataReturnType<abi, functionName>\n}\n", "import type { Abi, AbiStateMutability, ExtractAbiFunctions } from 'abitype'\n\nimport type { AbiFunctionNotFoundErrorType } from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport type { ToFunctionSelectorErrorType } from '../hash/toFunctionSelector.js'\nimport {\n  type EncodeAbiParametersErrorType,\n  encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport type { FormatAbiItemErrorType } from './formatAbiItem.js'\nimport type { GetAbiItemErrorType } from './getAbiItem.js'\nimport { prepareEncodeFunctionData } from './prepareEncodeFunctionData.js'\n\nexport type EncodeFunctionDataParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends\n    | ContractFunctionName<abi>\n    | Hex\n    | undefined = ContractFunctionName<abi>,\n  ///\n  hasFunctions = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [ExtractAbiFunctions<abi>] extends [never]\n        ? false\n        : true\n    : true,\n  allArgs = ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  >,\n  allFunctionNames = ContractFunctionName<abi>,\n> = {\n  abi: abi\n} & UnionEvaluate<\n  IsNarrowable<abi, Abi> extends true\n    ? abi['length'] extends 1\n      ? { functionName?: functionName | allFunctionNames | Hex | undefined }\n      : { functionName: functionName | allFunctionNames | Hex }\n    : { functionName?: functionName | allFunctionNames | Hex | undefined }\n> &\n  UnionEvaluate<\n    readonly [] extends allArgs\n      ? { args?: allArgs | undefined }\n      : { args: allArgs }\n  > &\n  (hasFunctions extends true ? unknown : never)\n\nexport type EncodeFunctionDataReturnType = Hex\n\nexport type EncodeFunctionDataErrorType =\n  | AbiFunctionNotFoundErrorType\n  | ConcatHexErrorType\n  | EncodeAbiParametersErrorType\n  | FormatAbiItemErrorType\n  | GetAbiItemErrorType\n  | ToFunctionSelectorErrorType\n  | ErrorType\n\nexport function encodeFunctionData<\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi> | undefined = undefined,\n>(\n  parameters: EncodeFunctionDataParameters<abi, functionName>,\n): EncodeFunctionDataReturnType {\n  const { args } = parameters as EncodeFunctionDataParameters\n\n  const { abi, functionName } = (() => {\n    if (\n      parameters.abi.length === 1 &&\n      parameters.functionName?.startsWith('0x')\n    )\n      return parameters as { abi: Abi; functionName: Hex }\n    return prepareEncodeFunctionData(parameters)\n  })()\n\n  const abiItem = abi[0]\n  const signature = functionName\n\n  const data =\n    'inputs' in abiItem && abiItem.inputs\n      ? encodeAbiParameters(abiItem.inputs, args ?? [])\n      : undefined\n  return concatHex([signature, data ?? '0x'])\n}\n", "import type { AbiError } from 'abitype'\n\n// https://docs.soliditylang.org/en/v0.8.16/control-structures.html#panic-via-assert-and-error-via-require\nexport const panicReasons = {\n  1: 'An `assert` condition failed.',\n  17: 'Arithmetic operation resulted in underflow or overflow.',\n  18: 'Division or modulo by zero (e.g. `5 / 0` or `23 % 0`).',\n  33: 'Attempted to convert to an invalid type.',\n  34: 'Attempted to access a storage byte array that is incorrectly encoded.',\n  49: 'Performed `.pop()` on an empty array',\n  50: 'Array index is out of bounds.',\n  65: 'Allocated too much memory or created an array which is too large.',\n  81: 'Attempted to call a zero-initialized variable of internal function type.',\n} as const\n\nexport const solidityError: AbiError = {\n  inputs: [\n    {\n      name: 'message',\n      type: 'string',\n    },\n  ],\n  name: 'Error',\n  type: 'error',\n}\nexport const solidityPanic: AbiError = {\n  inputs: [\n    {\n      name: 'reason',\n      type: 'uint256',\n    },\n  ],\n  name: 'Panic',\n  type: 'error',\n}\n", "import { BaseError } from './base.js'\n\nexport type NegativeOffsetErrorType = NegativeOffsetError & {\n  name: 'NegativeOffsetError'\n}\nexport class NegativeOffsetError extends BaseError {\n  constructor({ offset }: { offset: number }) {\n    super(`Offset \\`${offset}\\` cannot be negative.`, {\n      name: 'NegativeOffsetError',\n    })\n  }\n}\n\nexport type PositionOutOfBoundsErrorType = PositionOutOfBoundsError & {\n  name: 'PositionOutOfBoundsError'\n}\nexport class PositionOutOfBoundsError extends BaseError {\n  constructor({ length, position }: { length: number; position: number }) {\n    super(\n      `Position \\`${position}\\` is out of bounds (\\`0 < position < ${length}\\`).`,\n      { name: 'PositionOutOfBoundsError' },\n    )\n  }\n}\n\nexport type RecursiveReadLimitExceededErrorType =\n  RecursiveReadLimitExceededError & {\n    name: 'RecursiveReadLimitExceededError'\n  }\nexport class RecursiveReadLimitExceededError extends BaseError {\n  constructor({ count, limit }: { count: number; limit: number }) {\n    super(\n      `Recursive read limit of \\`${limit}\\` exceeded (recursive read count: \\`${count}\\`).`,\n      { name: 'RecursiveReadLimitExceededError' },\n    )\n  }\n}\n", "import {\n  NegativeOffsetError,\n  type NegativeOffsetErrorType,\n  PositionOutOfBoundsError,\n  type PositionOutOfBoundsErrorType,\n  RecursiveReadLimitExceededError,\n  type RecursiveReadLimitExceededErrorType,\n} from '../errors/cursor.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { ByteArray } from '../types/misc.js'\n\nexport type Cursor = {\n  bytes: ByteArray\n  dataView: DataView\n  position: number\n  positionReadCount: Map<number, number>\n  recursiveReadCount: number\n  recursiveReadLimit: number\n  remaining: number\n  assertReadLimit(position?: number): void\n  assertPosition(position: number): void\n  decrementPosition(offset: number): void\n  getReadCount(position?: number): number\n  incrementPosition(offset: number): void\n  inspectByte(position?: number): ByteArray[number]\n  inspectBytes(length: number, position?: number): ByteArray\n  inspectUint8(position?: number): number\n  inspectUint16(position?: number): number\n  inspectUint24(position?: number): number\n  inspectUint32(position?: number): number\n  pushByte(byte: ByteArray[number]): void\n  pushBytes(bytes: ByteArray): void\n  pushUint8(value: number): void\n  pushUint16(value: number): void\n  pushUint24(value: number): void\n  pushUint32(value: number): void\n  readByte(): ByteArray[number]\n  readBytes(length: number, size?: number): ByteArray\n  readUint8(): number\n  readUint16(): number\n  readUint24(): number\n  readUint32(): number\n  setPosition(position: number): () => void\n  _touch(): void\n}\n\ntype CursorErrorType =\n  | CursorAssertPositionErrorType\n  | CursorDecrementPositionErrorType\n  | CursorIncrementPositionErrorType\n  | ErrorType\n\ntype CursorAssertPositionErrorType = PositionOutOfBoundsErrorType | ErrorType\n\ntype CursorDecrementPositionErrorType = NegativeOffsetErrorType | ErrorType\n\ntype CursorIncrementPositionErrorType = NegativeOffsetErrorType | ErrorType\n\ntype StaticCursorErrorType =\n  | NegativeOffsetErrorType\n  | RecursiveReadLimitExceededErrorType\n\nconst staticCursor: Cursor = {\n  bytes: new Uint8Array(),\n  dataView: new DataView(new ArrayBuffer(0)),\n  position: 0,\n  positionReadCount: new Map(),\n  recursiveReadCount: 0,\n  recursiveReadLimit: Number.POSITIVE_INFINITY,\n  assertReadLimit() {\n    if (this.recursiveReadCount >= this.recursiveReadLimit)\n      throw new RecursiveReadLimitExceededError({\n        count: this.recursiveReadCount + 1,\n        limit: this.recursiveReadLimit,\n      })\n  },\n  assertPosition(position) {\n    if (position < 0 || position > this.bytes.length - 1)\n      throw new PositionOutOfBoundsError({\n        length: this.bytes.length,\n        position,\n      })\n  },\n  decrementPosition(offset) {\n    if (offset < 0) throw new NegativeOffsetError({ offset })\n    const position = this.position - offset\n    this.assertPosition(position)\n    this.position = position\n  },\n  getReadCount(position) {\n    return this.positionReadCount.get(position || this.position) || 0\n  },\n  incrementPosition(offset) {\n    if (offset < 0) throw new NegativeOffsetError({ offset })\n    const position = this.position + offset\n    this.assertPosition(position)\n    this.position = position\n  },\n  inspectByte(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position)\n    return this.bytes[position]\n  },\n  inspectBytes(length, position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + length - 1)\n    return this.bytes.subarray(position, position + length)\n  },\n  inspectUint8(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position)\n    return this.bytes[position]\n  },\n  inspectUint16(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + 1)\n    return this.dataView.getUint16(position)\n  },\n  inspectUint24(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + 2)\n    return (\n      (this.dataView.getUint16(position) << 8) +\n      this.dataView.getUint8(position + 2)\n    )\n  },\n  inspectUint32(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + 3)\n    return this.dataView.getUint32(position)\n  },\n  pushByte(byte: ByteArray[number]) {\n    this.assertPosition(this.position)\n    this.bytes[this.position] = byte\n    this.position++\n  },\n  pushBytes(bytes: ByteArray) {\n    this.assertPosition(this.position + bytes.length - 1)\n    this.bytes.set(bytes, this.position)\n    this.position += bytes.length\n  },\n  pushUint8(value: number) {\n    this.assertPosition(this.position)\n    this.bytes[this.position] = value\n    this.position++\n  },\n  pushUint16(value: number) {\n    this.assertPosition(this.position + 1)\n    this.dataView.setUint16(this.position, value)\n    this.position += 2\n  },\n  pushUint24(value: number) {\n    this.assertPosition(this.position + 2)\n    this.dataView.setUint16(this.position, value >> 8)\n    this.dataView.setUint8(this.position + 2, value & ~4294967040)\n    this.position += 3\n  },\n  pushUint32(value: number) {\n    this.assertPosition(this.position + 3)\n    this.dataView.setUint32(this.position, value)\n    this.position += 4\n  },\n  readByte() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectByte()\n    this.position++\n    return value\n  },\n  readBytes(length, size) {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectBytes(length)\n    this.position += size ?? length\n    return value\n  },\n  readUint8() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint8()\n    this.position += 1\n    return value\n  },\n  readUint16() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint16()\n    this.position += 2\n    return value\n  },\n  readUint24() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint24()\n    this.position += 3\n    return value\n  },\n  readUint32() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint32()\n    this.position += 4\n    return value\n  },\n  get remaining() {\n    return this.bytes.length - this.position\n  },\n  setPosition(position) {\n    const oldPosition = this.position\n    this.assertPosition(position)\n    this.position = position\n    return () => (this.position = oldPosition)\n  },\n  _touch() {\n    if (this.recursiveReadLimit === Number.POSITIVE_INFINITY) return\n    const count = this.getReadCount()\n    this.positionReadCount.set(this.position, count + 1)\n    if (count > 0) this.recursiveReadCount++\n  },\n}\n\ntype CursorConfig = { recursiveReadLimit?: number | undefined }\n\nexport type CreateCursorErrorType =\n  | CursorErrorType\n  | StaticCursorErrorType\n  | ErrorType\n\nexport function createCursor(\n  bytes: ByteArray,\n  { recursiveReadLimit = 8_192 }: CursorConfig = {},\n): Cursor {\n  const cursor: Cursor = Object.create(staticCursor)\n  cursor.bytes = bytes\n  cursor.dataView = new DataView(\n    bytes.buffer ?? bytes,\n    bytes.byteOffset,\n    bytes.byteLength,\n  )\n  cursor.positionReadCount = new Map()\n  cursor.recursiveReadLimit = recursiveReadLimit\n  return cursor\n}\n", "import { InvalidBytesBooleanError } from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type TrimErrorType, trim } from '../data/trim.js'\n\nimport {\n  type AssertSizeErrorType,\n  assertSize,\n  type HexToBigIntErrorType,\n  type HexToNumberErrorType,\n  hexToBigInt,\n  hexToNumber,\n} from './fromHex.js'\nimport { type BytesToHexErrorType, bytesToHex } from './toHex.js'\n\nexport type FromBytesParameters<\n  to extends 'string' | 'hex' | 'bigint' | 'number' | 'boolean',\n> =\n  | to\n  | {\n      /** Size of the bytes. */\n      size?: number | undefined\n      /** Type to convert to. */\n      to: to\n    }\n\nexport type FromBytesReturnType<to> = to extends 'string'\n  ? string\n  : to extends 'hex'\n    ? Hex\n    : to extends 'bigint'\n      ? bigint\n      : to extends 'number'\n        ? number\n        : to extends 'boolean'\n          ? boolean\n          : never\n\nexport type FromBytesErrorType =\n  | BytesToHexErrorType\n  | BytesToBigIntErrorType\n  | BytesToBoolErrorType\n  | BytesToNumberErrorType\n  | BytesToStringErrorType\n  | ErrorType\n\n/**\n * Decodes a byte array into a UTF-8 string, hex value, number, bigint or boolean.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes\n * - Example: https://viem.sh/docs/utilities/fromBytes#usage\n *\n * @param bytes Byte array to decode.\n * @param toOrOpts Type to convert to or options.\n * @returns Decoded value.\n *\n * @example\n * import { fromBytes } from 'viem'\n * const data = fromBytes(new Uint8Array([1, 164]), 'number')\n * // 420\n *\n * @example\n * import { fromBytes } from 'viem'\n * const data = fromBytes(\n *   new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]),\n *   'string'\n * )\n * // 'Hello world'\n */\nexport function fromBytes<\n  to extends 'string' | 'hex' | 'bigint' | 'number' | 'boolean',\n>(\n  bytes: ByteArray,\n  toOrOpts: FromBytesParameters<to>,\n): FromBytesReturnType<to> {\n  const opts = typeof toOrOpts === 'string' ? { to: toOrOpts } : toOrOpts\n  const to = opts.to\n\n  if (to === 'number')\n    return bytesToNumber(bytes, opts) as FromBytesReturnType<to>\n  if (to === 'bigint')\n    return bytesToBigInt(bytes, opts) as FromBytesReturnType<to>\n  if (to === 'boolean')\n    return bytesToBool(bytes, opts) as FromBytesReturnType<to>\n  if (to === 'string')\n    return bytesToString(bytes, opts) as FromBytesReturnType<to>\n  return bytesToHex(bytes, opts) as FromBytesReturnType<to>\n}\n\nexport type BytesToBigIntOpts = {\n  /** Whether or not the number of a signed representation. */\n  signed?: boolean | undefined\n  /** Size of the bytes. */\n  size?: number | undefined\n}\n\nexport type BytesToBigIntErrorType =\n  | BytesToHexErrorType\n  | HexToBigIntErrorType\n  | ErrorType\n\n/**\n * Decodes a byte array into a bigint.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes#bytestobigint\n *\n * @param bytes Byte array to decode.\n * @param opts Options.\n * @returns BigInt value.\n *\n * @example\n * import { bytesToBigInt } from 'viem'\n * const data = bytesToBigInt(new Uint8Array([1, 164]))\n * // 420n\n */\nexport function bytesToBigInt(\n  bytes: ByteArray,\n  opts: BytesToBigIntOpts = {},\n): bigint {\n  if (typeof opts.size !== 'undefined') assertSize(bytes, { size: opts.size })\n  const hex = bytesToHex(bytes, opts)\n  return hexToBigInt(hex, opts)\n}\n\nexport type BytesToBoolOpts = {\n  /** Size of the bytes. */\n  size?: number | undefined\n}\n\nexport type BytesToBoolErrorType =\n  | AssertSizeErrorType\n  | TrimErrorType\n  | ErrorType\n\n/**\n * Decodes a byte array into a boolean.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes#bytestobool\n *\n * @param bytes Byte array to decode.\n * @param opts Options.\n * @returns Boolean value.\n *\n * @example\n * import { bytesToBool } from 'viem'\n * const data = bytesToBool(new Uint8Array([1]))\n * // true\n */\nexport function bytesToBool(\n  bytes_: ByteArray,\n  opts: BytesToBoolOpts = {},\n): boolean {\n  let bytes = bytes_\n  if (typeof opts.size !== 'undefined') {\n    assertSize(bytes, { size: opts.size })\n    bytes = trim(bytes)\n  }\n  if (bytes.length > 1 || bytes[0] > 1)\n    throw new InvalidBytesBooleanError(bytes)\n  return Boolean(bytes[0])\n}\n\nexport type BytesToNumberOpts = BytesToBigIntOpts\n\nexport type BytesToNumberErrorType =\n  | BytesToHexErrorType\n  | HexToNumberErrorType\n  | ErrorType\n\n/**\n * Decodes a byte array into a number.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes#bytestonumber\n *\n * @param bytes Byte array to decode.\n * @param opts Options.\n * @returns Number value.\n *\n * @example\n * import { bytesToNumber } from 'viem'\n * const data = bytesToNumber(new Uint8Array([1, 164]))\n * // 420\n */\nexport function bytesToNumber(\n  bytes: ByteArray,\n  opts: BytesToNumberOpts = {},\n): number {\n  if (typeof opts.size !== 'undefined') assertSize(bytes, { size: opts.size })\n  const hex = bytesToHex(bytes, opts)\n  return hexToNumber(hex, opts)\n}\n\nexport type BytesToStringOpts = {\n  /** Size of the bytes. */\n  size?: number | undefined\n}\n\nexport type BytesToStringErrorType =\n  | AssertSizeErrorType\n  | TrimErrorType\n  | ErrorType\n\n/**\n * Decodes a byte array into a UTF-8 string.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes#bytestostring\n *\n * @param bytes Byte array to decode.\n * @param opts Options.\n * @returns String value.\n *\n * @example\n * import { bytesToString } from 'viem'\n * const data = bytesToString(new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // 'Hello world'\n */\nexport function bytesToString(\n  bytes_: ByteArray,\n  opts: BytesToStringOpts = {},\n): string {\n  let bytes = bytes_\n  if (typeof opts.size !== 'undefined') {\n    assertSize(bytes, { size: opts.size })\n    bytes = trim(bytes, { dir: 'right' })\n  }\n  return new TextDecoder().decode(bytes)\n}\n", "import type {\n  AbiParameter,\n  AbiParameterKind,\n  AbiParametersToPrimitiveTypes,\n} from 'abitype'\nimport {\n  AbiDecodingDataSizeTooSmallError,\n  AbiDecodingZeroDataError,\n  InvalidAbiDecodingTypeError,\n  type InvalidAbiDecodingTypeErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n  type ChecksumAddressErrorType,\n  checksumAddress,\n} from '../address/getAddress.js'\nimport {\n  type CreateCursorErrorType,\n  type Cursor,\n  createCursor,\n} from '../cursor.js'\nimport { type SizeErrorType, size } from '../data/size.js'\nimport { type SliceBytesErrorType, sliceBytes } from '../data/slice.js'\nimport { type TrimErrorType, trim } from '../data/trim.js'\nimport {\n  type BytesToBigIntErrorType,\n  type BytesToBoolErrorType,\n  type BytesToNumberErrorType,\n  type BytesToStringErrorType,\n  bytesToBigInt,\n  bytesToBool,\n  bytesToNumber,\n  bytesToString,\n} from '../encoding/fromBytes.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { getArrayComponents } from './encodeAbiParameters.js'\n\nexport type DecodeAbiParametersReturnType<\n  params extends readonly AbiParameter[] = readonly AbiParameter[],\n> = AbiParametersToPrimitiveTypes<\n  params extends readonly AbiParameter[] ? params : AbiParameter[],\n  AbiParameterKind,\n  true\n>\n\nexport type DecodeAbiParametersErrorType =\n  | HexToBytesErrorType\n  | BytesToHexErrorType\n  | DecodeParameterErrorType\n  | SizeErrorType\n  | CreateCursorErrorType\n  | ErrorType\n\nexport function decodeAbiParameters<\n  const params extends readonly AbiParameter[],\n>(\n  params: params,\n  data: ByteArray | Hex,\n): DecodeAbiParametersReturnType<params> {\n  const bytes = typeof data === 'string' ? hexToBytes(data) : data\n  const cursor = createCursor(bytes)\n\n  if (size(bytes) === 0 && params.length > 0)\n    throw new AbiDecodingZeroDataError()\n  if (size(data) && size(data) < 32)\n    throw new AbiDecodingDataSizeTooSmallError({\n      data: typeof data === 'string' ? data : bytesToHex(data),\n      params: params as readonly AbiParameter[],\n      size: size(data),\n    })\n\n  let consumed = 0\n  const values = []\n  for (let i = 0; i < params.length; ++i) {\n    const param = params[i]\n    cursor.setPosition(consumed)\n    const [data, consumed_] = decodeParameter(cursor, param, {\n      staticPosition: 0,\n    })\n    consumed += consumed_\n    values.push(data)\n  }\n  return values as never\n}\n\ntype DecodeParameterErrorType =\n  | DecodeArrayErrorType\n  | DecodeTupleErrorType\n  | DecodeAddressErrorType\n  | DecodeBoolErrorType\n  | DecodeBytesErrorType\n  | DecodeNumberErrorType\n  | DecodeStringErrorType\n  | InvalidAbiDecodingTypeErrorType\n\nfunction decodeParameter(\n  cursor: Cursor,\n  param: AbiParameter,\n  { staticPosition }: { staticPosition: number },\n) {\n  const arrayComponents = getArrayComponents(param.type)\n  if (arrayComponents) {\n    const [length, type] = arrayComponents\n    return decodeArray(cursor, { ...param, type }, { length, staticPosition })\n  }\n  if (param.type === 'tuple')\n    return decodeTuple(cursor, param as TupleAbiParameter, { staticPosition })\n\n  if (param.type === 'address') return decodeAddress(cursor)\n  if (param.type === 'bool') return decodeBool(cursor)\n  if (param.type.startsWith('bytes'))\n    return decodeBytes(cursor, param, { staticPosition })\n  if (param.type.startsWith('uint') || param.type.startsWith('int'))\n    return decodeNumber(cursor, param)\n  if (param.type === 'string') return decodeString(cursor, { staticPosition })\n  throw new InvalidAbiDecodingTypeError(param.type, {\n    docsPath: '/docs/contract/decodeAbiParameters',\n  })\n}\n\n////////////////////////////////////////////////////////////////////\n// Type Decoders\n\nconst sizeOfLength = 32\nconst sizeOfOffset = 32\n\ntype DecodeAddressErrorType =\n  | ChecksumAddressErrorType\n  | BytesToHexErrorType\n  | SliceBytesErrorType\n  | ErrorType\n\nfunction decodeAddress(cursor: Cursor) {\n  const value = cursor.readBytes(32)\n  return [checksumAddress(bytesToHex(sliceBytes(value, -20))), 32]\n}\n\ntype DecodeArrayErrorType = BytesToNumberErrorType | ErrorType\n\nfunction decodeArray(\n  cursor: Cursor,\n  param: AbiParameter,\n  { length, staticPosition }: { length: number | null; staticPosition: number },\n) {\n  // If the length of the array is not known in advance (dynamic array),\n  // this means we will need to wonder off to the pointer and decode.\n  if (!length) {\n    // Dealing with a dynamic type, so get the offset of the array data.\n    const offset = bytesToNumber(cursor.readBytes(sizeOfOffset))\n\n    // Start is the static position of current slot + offset.\n    const start = staticPosition + offset\n    const startOfData = start + sizeOfLength\n\n    // Get the length of the array from the offset.\n    cursor.setPosition(start)\n    const length = bytesToNumber(cursor.readBytes(sizeOfLength))\n\n    // Check if the array has any dynamic children.\n    const dynamicChild = hasDynamicChild(param)\n\n    let consumed = 0\n    const value: unknown[] = []\n    for (let i = 0; i < length; ++i) {\n      // If any of the children is dynamic, then all elements will be offset pointer, thus size of one slot (32 bytes).\n      // Otherwise, elements will be the size of their encoding (consumed bytes).\n      cursor.setPosition(startOfData + (dynamicChild ? i * 32 : consumed))\n      const [data, consumed_] = decodeParameter(cursor, param, {\n        staticPosition: startOfData,\n      })\n      consumed += consumed_\n      value.push(data)\n    }\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [value, 32]\n  }\n\n  // If the length of the array is known in advance,\n  // and the length of an element deeply nested in the array is not known,\n  // we need to decode the offset of the array data.\n  if (hasDynamicChild(param)) {\n    // Dealing with dynamic types, so get the offset of the array data.\n    const offset = bytesToNumber(cursor.readBytes(sizeOfOffset))\n\n    // Start is the static position of current slot + offset.\n    const start = staticPosition + offset\n\n    const value: unknown[] = []\n    for (let i = 0; i < length; ++i) {\n      // Move cursor along to the next slot (next offset pointer).\n      cursor.setPosition(start + i * 32)\n      const [data] = decodeParameter(cursor, param, {\n        staticPosition: start,\n      })\n      value.push(data)\n    }\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [value, 32]\n  }\n\n  // If the length of the array is known in advance and the array is deeply static,\n  // then we can just decode each element in sequence.\n  let consumed = 0\n  const value: unknown[] = []\n  for (let i = 0; i < length; ++i) {\n    const [data, consumed_] = decodeParameter(cursor, param, {\n      staticPosition: staticPosition + consumed,\n    })\n    consumed += consumed_\n    value.push(data)\n  }\n  return [value, consumed]\n}\n\ntype DecodeBoolErrorType = BytesToBoolErrorType | ErrorType\n\nfunction decodeBool(cursor: Cursor) {\n  return [bytesToBool(cursor.readBytes(32), { size: 32 }), 32]\n}\n\ntype DecodeBytesErrorType =\n  | BytesToNumberErrorType\n  | BytesToHexErrorType\n  | ErrorType\n\nfunction decodeBytes(\n  cursor: Cursor,\n  param: AbiParameter,\n  { staticPosition }: { staticPosition: number },\n) {\n  const [_, size] = param.type.split('bytes')\n  if (!size) {\n    // Dealing with dynamic types, so get the offset of the bytes data.\n    const offset = bytesToNumber(cursor.readBytes(32))\n\n    // Set position of the cursor to start of bytes data.\n    cursor.setPosition(staticPosition + offset)\n\n    const length = bytesToNumber(cursor.readBytes(32))\n\n    // If there is no length, we have zero data.\n    if (length === 0) {\n      // As we have gone wondering, restore to the original position + next slot.\n      cursor.setPosition(staticPosition + 32)\n      return ['0x', 32]\n    }\n\n    const data = cursor.readBytes(length)\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [bytesToHex(data), 32]\n  }\n\n  const value = bytesToHex(cursor.readBytes(Number.parseInt(size, 10), 32))\n  return [value, 32]\n}\n\ntype DecodeNumberErrorType =\n  | BytesToNumberErrorType\n  | BytesToBigIntErrorType\n  | ErrorType\n\nfunction decodeNumber(cursor: Cursor, param: AbiParameter) {\n  const signed = param.type.startsWith('int')\n  const size = Number.parseInt(param.type.split('int')[1] || '256', 10)\n  const value = cursor.readBytes(32)\n  return [\n    size > 48\n      ? bytesToBigInt(value, { signed })\n      : bytesToNumber(value, { signed }),\n    32,\n  ]\n}\n\ntype TupleAbiParameter = AbiParameter & { components: readonly AbiParameter[] }\n\ntype DecodeTupleErrorType = BytesToNumberErrorType | ErrorType\n\nfunction decodeTuple(\n  cursor: Cursor,\n  param: TupleAbiParameter,\n  { staticPosition }: { staticPosition: number },\n) {\n  // Tuples can have unnamed components (i.e. they are arrays), so we must\n  // determine whether the tuple is named or unnamed. In the case of a named\n  // tuple, the value will be an object where each property is the name of the\n  // component. In the case of an unnamed tuple, the value will be an array.\n  const hasUnnamedChild =\n    param.components.length === 0 || param.components.some(({ name }) => !name)\n\n  // Initialize the value to an object or an array, depending on whether the\n  // tuple is named or unnamed.\n  const value: any = hasUnnamedChild ? [] : {}\n  let consumed = 0\n\n  // If the tuple has a dynamic child, we must first decode the offset to the\n  // tuple data.\n  if (hasDynamicChild(param)) {\n    // Dealing with dynamic types, so get the offset of the tuple data.\n    const offset = bytesToNumber(cursor.readBytes(sizeOfOffset))\n\n    // Start is the static position of referencing slot + offset.\n    const start = staticPosition + offset\n\n    for (let i = 0; i < param.components.length; ++i) {\n      const component = param.components[i]\n      cursor.setPosition(start + consumed)\n      const [data, consumed_] = decodeParameter(cursor, component, {\n        staticPosition: start,\n      })\n      consumed += consumed_\n      value[hasUnnamedChild ? i : component?.name!] = data\n    }\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [value, 32]\n  }\n\n  // If the tuple has static children, we can just decode each component\n  // in sequence.\n  for (let i = 0; i < param.components.length; ++i) {\n    const component = param.components[i]\n    const [data, consumed_] = decodeParameter(cursor, component, {\n      staticPosition,\n    })\n    value[hasUnnamedChild ? i : component?.name!] = data\n    consumed += consumed_\n  }\n  return [value, consumed]\n}\n\ntype DecodeStringErrorType =\n  | BytesToNumberErrorType\n  | BytesToStringErrorType\n  | TrimErrorType\n  | ErrorType\n\nfunction decodeString(\n  cursor: Cursor,\n  { staticPosition }: { staticPosition: number },\n) {\n  // Get offset to start of string data.\n  const offset = bytesToNumber(cursor.readBytes(32))\n\n  // Start is the static position of current slot + offset.\n  const start = staticPosition + offset\n  cursor.setPosition(start)\n\n  const length = bytesToNumber(cursor.readBytes(32))\n\n  // If there is no length, we have zero data (empty string).\n  if (length === 0) {\n    cursor.setPosition(staticPosition + 32)\n    return ['', 32]\n  }\n\n  const data = cursor.readBytes(length, 32)\n  const value = bytesToString(trim(data))\n\n  // As we have gone wondering, restore to the original position + next slot.\n  cursor.setPosition(staticPosition + 32)\n\n  return [value, 32]\n}\n\nfunction hasDynamicChild(param: AbiParameter) {\n  const { type } = param\n  if (type === 'string') return true\n  if (type === 'bytes') return true\n  if (type.endsWith('[]')) return true\n\n  if (type === 'tuple') return (param as any).components?.some(hasDynamicChild)\n\n  const arrayComponents = getArrayComponents(param.type)\n  if (\n    arrayComponents &&\n    hasDynamicChild({ ...param, type: arrayComponents[1] } as AbiParameter)\n  )\n    return true\n\n  return false\n}\n", "import type { Abi, ExtractAbiError } from 'abitype'\n\nimport { solidityError, solidityPanic } from '../../constants/solidity.js'\nimport {\n  AbiDecodingZeroDataError,\n  type AbiDecodingZeroDataErrorType,\n  AbiErrorSignatureNotFoundError,\n  type AbiErrorSignatureNotFoundErrorType,\n} from '../../errors/abi.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  AbiItem,\n  ContractErrorArgs,\n  ContractErrorName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { slice } from '../data/slice.js'\nimport {\n  type ToFunctionSelectorErrorType,\n  toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\nimport {\n  type DecodeAbiParametersErrorType,\n  decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\n\nexport type DecodeErrorResultParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n> = { abi?: abi | undefined; data: Hex; cause?: BaseError | Error | undefined }\n\nexport type DecodeErrorResultReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  ///\n  allErrorNames extends ContractErrorName<abi> = ContractErrorName<abi>,\n> = IsNarrowable<abi, Abi> extends true\n  ? UnionEvaluate<\n      {\n        [errorName in allErrorNames]: {\n          abiItem: abi extends Abi\n            ? Abi extends abi\n              ? AbiItem\n              : ExtractAbiError<abi, errorName>\n            : AbiItem\n          args: ContractErrorArgs<abi, errorName>\n          errorName: errorName\n        }\n      }[allErrorNames]\n    >\n  : {\n      abiItem: AbiItem\n      args: readonly unknown[] | undefined\n      errorName: string\n    }\n\nexport type DecodeErrorResultErrorType =\n  | AbiDecodingZeroDataErrorType\n  | AbiErrorSignatureNotFoundErrorType\n  | DecodeAbiParametersErrorType\n  | FormatAbiItemErrorType\n  | ToFunctionSelectorErrorType\n  | ErrorType\n\nexport function decodeErrorResult<const abi extends Abi | readonly unknown[]>(\n  parameters: DecodeErrorResultParameters<abi>,\n): DecodeErrorResultReturnType<abi> {\n  const { abi, data, cause } = parameters as DecodeErrorResultParameters\n\n  const signature = slice(data, 0, 4)\n  if (signature === '0x') throw new AbiDecodingZeroDataError({ cause })\n\n  const abi_ = [...(abi || []), solidityError, solidityPanic]\n  const abiItem = abi_.find(\n    (x) =>\n      x.type === 'error' && signature === toFunctionSelector(formatAbiItem(x)),\n  )\n  if (!abiItem)\n    throw new AbiErrorSignatureNotFoundError(signature, {\n      docsPath: '/docs/contract/decodeErrorResult',\n      cause,\n    })\n  return {\n    abiItem,\n    args:\n      'inputs' in abiItem && abiItem.inputs && abiItem.inputs.length > 0\n        ? decodeAbiParameters(abiItem.inputs, slice(data, 4))\n        : undefined,\n    errorName: (abiItem as { name: string }).name,\n  } as DecodeErrorResultReturnType<abi>\n}\n", "import type { ErrorType } from '../errors/utils.js'\n\nexport type StringifyErrorType = ErrorType\n\nexport const stringify: typeof JSON.stringify = (value, replacer, space) =>\n  JSON.stringify(\n    value,\n    (key, value_) => {\n      const value = typeof value_ === 'bigint' ? value_.toString() : value_\n      return typeof replacer === 'function' ? replacer(key, value) : value\n    },\n    space,\n  )\n", "import type { AbiParameter } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { AbiItem } from '../../types/contract.js'\nimport { stringify } from '../stringify.js'\n\nexport type FormatAbiItemWithArgsErrorType = ErrorType\n\nexport function formatAbiItemWithArgs({\n  abiItem,\n  args,\n  includeFunctionName = true,\n  includeName = false,\n}: {\n  abiItem: AbiItem\n  args: readonly unknown[]\n  includeFunctionName?: boolean | undefined\n  includeName?: boolean | undefined\n}) {\n  if (!('name' in abiItem)) return\n  if (!('inputs' in abiItem)) return\n  if (!abiItem.inputs) return\n  return `${includeFunctionName ? abiItem.name : ''}(${abiItem.inputs\n    .map(\n      (input: AbiParameter, i: number) =>\n        `${includeName && input.name ? `${input.name}: ` : ''}${\n          typeof args[i] === 'object' ? stringify(args[i]) : args[i]\n        }`,\n    )\n    .join(', ')})`\n}\n", "export const etherUnits = {\n  gwei: 9,\n  wei: 18,\n}\nexport const gweiUnits = {\n  ether: -9,\n  wei: 9,\n}\nexport const weiUnits = {\n  ether: -18,\n  gwei: -9,\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\nexport type FormatUnitsErrorType = ErrorType\n\n/**\n *  Divides a number by a given exponent of base 10 (10exponent), and formats it into a string representation of the number..\n *\n * - Docs: https://viem.sh/docs/utilities/formatUnits\n *\n * @example\n * import { formatUnits } from 'viem'\n *\n * formatUnits(420000000000n, 9)\n * // '420'\n */\nexport function formatUnits(value: bigint, decimals: number) {\n  let display = value.toString()\n\n  const negative = display.startsWith('-')\n  if (negative) display = display.slice(1)\n\n  display = display.padStart(decimals, '0')\n\n  let [integer, fraction] = [\n    display.slice(0, display.length - decimals),\n    display.slice(display.length - decimals),\n  ]\n  fraction = fraction.replace(/(0+)$/, '')\n  return `${negative ? '-' : ''}${integer || '0'}${\n    fraction ? `.${fraction}` : ''\n  }`\n}\n", "import { etherUnits } from '../../constants/unit.js'\n\nimport { type FormatUnitsErrorType, formatUnits } from './formatUnits.js'\n\nexport type FormatEtherErrorType = FormatUnitsErrorType\n\n/**\n * Converts numerical wei to a string representation of ether.\n *\n * - Docs: https://viem.sh/docs/utilities/formatEther\n *\n * @example\n * import { formatEther } from 'viem'\n *\n * formatEther(1000000000000000000n)\n * // '1'\n */\nexport function formatEther(wei: bigint, unit: 'wei' | 'gwei' = 'wei') {\n  return formatUnits(wei, etherUnits[unit])\n}\n", "import { gweiUnits } from '../../constants/unit.js'\n\nimport { type FormatUnitsErrorType, formatUnits } from './formatUnits.js'\n\nexport type FormatGweiErrorType = FormatUnitsErrorType\n\n/**\n * Converts numerical wei to a string representation of gwei.\n *\n * - Docs: https://viem.sh/docs/utilities/formatGwei\n *\n * @example\n * import { formatGwei } from 'viem'\n *\n * formatGwei(1000000000n)\n * // '1'\n */\nexport function formatGwei(wei: bigint, unit: 'wei' = 'wei') {\n  return formatUnits(wei, gweiUnits[unit])\n}\n", "import type { StateMapping, StateOverride } from '../types/stateOverride.js'\nimport { BaseError } from './base.js'\n\nexport type AccountStateConflictErrorType = AccountStateConflictError & {\n  name: 'AccountStateConflictError'\n}\n\nexport class AccountStateConflictError extends BaseError {\n  constructor({ address }: { address: string }) {\n    super(`State for account \"${address}\" is set multiple times.`, {\n      name: 'AccountStateConflictError',\n    })\n  }\n}\n\nexport type StateAssignmentConflictErrorType = StateAssignmentConflictError & {\n  name: 'StateAssignmentConflictError'\n}\n\nexport class StateAssignmentConflictError extends BaseError {\n  constructor() {\n    super('state and stateDiff are set on the same account.', {\n      name: 'StateAssignmentConflictError',\n    })\n  }\n}\n\n/** @internal */\nexport function prettyStateMapping(stateMapping: StateMapping) {\n  return stateMapping.reduce((pretty, { slot, value }) => {\n    return `${pretty}        ${slot}: ${value}\\n`\n  }, '')\n}\n\nexport function prettyStateOverride(stateOverride: StateOverride) {\n  return stateOverride\n    .reduce((pretty, { address, ...state }) => {\n      let val = `${pretty}    ${address}:\\n`\n      if (state.nonce) val += `      nonce: ${state.nonce}\\n`\n      if (state.balance) val += `      balance: ${state.balance}\\n`\n      if (state.code) val += `      code: ${state.code}\\n`\n      if (state.state) {\n        val += '      state:\\n'\n        val += prettyStateMapping(state.state)\n      }\n      if (state.stateDiff) {\n        val += '      stateDiff:\\n'\n        val += prettyStateMapping(state.stateDiff)\n      }\n      return val\n    }, '  State Override:\\n')\n    .slice(0, -1)\n}\n", "import type { Account } from '../accounts/types.js'\nimport type { SendTransactionParameters } from '../actions/wallet/sendTransaction.js'\nimport type { BlockTag } from '../types/block.js'\nimport type { Chain } from '../types/chain.js'\nimport type { Hash, Hex } from '../types/misc.js'\nimport type {\n  TransactionReceipt,\n  TransactionType,\n} from '../types/transaction.js'\nimport { formatEther } from '../utils/unit/formatEther.js'\nimport { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { BaseError } from './base.js'\n\nexport function prettyPrint(\n  args: Record<string, bigint | number | string | undefined | false | unknown>,\n) {\n  const entries = Object.entries(args)\n    .map(([key, value]) => {\n      if (value === undefined || value === false) return null\n      return [key, value]\n    })\n    .filter(Boolean) as [string, string][]\n  const maxLength = entries.reduce((acc, [key]) => Math.max(acc, key.length), 0)\n  return entries\n    .map(([key, value]) => `  ${`${key}:`.padEnd(maxLength + 1)}  ${value}`)\n    .join('\\n')\n}\n\nexport type FeeConflictErrorType = FeeConflictError & {\n  name: 'FeeConflictError'\n}\nexport class FeeConflictError extends BaseError {\n  constructor() {\n    super(\n      [\n        'Cannot specify both a `gasPrice` and a `maxFeePerGas`/`maxPriorityFeePerGas`.',\n        'Use `maxFeePerGas`/`maxPriorityFeePerGas` for EIP-1559 compatible networks, and `gasPrice` for others.',\n      ].join('\\n'),\n      { name: 'FeeConflictError' },\n    )\n  }\n}\n\nexport type InvalidLegacyVErrorType = InvalidLegacyVError & {\n  name: 'InvalidLegacyVError'\n}\nexport class InvalidLegacyVError extends BaseError {\n  constructor({ v }: { v: bigint }) {\n    super(`Invalid \\`v\\` value \"${v}\". Expected 27 or 28.`, {\n      name: 'InvalidLegacyVError',\n    })\n  }\n}\n\nexport type InvalidSerializableTransactionErrorType =\n  InvalidSerializableTransactionError & {\n    name: 'InvalidSerializableTransactionError'\n  }\nexport class InvalidSerializableTransactionError extends BaseError {\n  constructor({ transaction }: { transaction: Record<string, unknown> }) {\n    super('Cannot infer a transaction type from provided transaction.', {\n      metaMessages: [\n        'Provided Transaction:',\n        '{',\n        prettyPrint(transaction),\n        '}',\n        '',\n        'To infer the type, either provide:',\n        '- a `type` to the Transaction, or',\n        '- an EIP-1559 Transaction with `maxFeePerGas`, or',\n        '- an EIP-2930 Transaction with `gasPrice` & `accessList`, or',\n        '- an EIP-4844 Transaction with `blobs`, `blobVersionedHashes`, `sidecars`, or',\n        '- an EIP-7702 Transaction with `authorizationList`, or',\n        '- a Legacy Transaction with `gasPrice`',\n      ],\n      name: 'InvalidSerializableTransactionError',\n    })\n  }\n}\n\nexport type InvalidSerializedTransactionTypeErrorType =\n  InvalidSerializedTransactionTypeError & {\n    name: 'InvalidSerializedTransactionTypeError'\n  }\nexport class InvalidSerializedTransactionTypeError extends BaseError {\n  serializedType: Hex\n\n  constructor({ serializedType }: { serializedType: Hex }) {\n    super(`Serialized transaction type \"${serializedType}\" is invalid.`, {\n      name: 'InvalidSerializedTransactionType',\n    })\n\n    this.serializedType = serializedType\n  }\n}\n\nexport type InvalidSerializedTransactionErrorType =\n  InvalidSerializedTransactionError & {\n    name: 'InvalidSerializedTransactionError'\n  }\nexport class InvalidSerializedTransactionError extends BaseError {\n  serializedTransaction: Hex\n  type: TransactionType\n\n  constructor({\n    attributes,\n    serializedTransaction,\n    type,\n  }: {\n    attributes: Record<string, unknown>\n    serializedTransaction: Hex\n    type: TransactionType\n  }) {\n    const missing = Object.entries(attributes)\n      .map(([key, value]) => (typeof value === 'undefined' ? key : undefined))\n      .filter(Boolean)\n    super(`Invalid serialized transaction of type \"${type}\" was provided.`, {\n      metaMessages: [\n        `Serialized Transaction: \"${serializedTransaction}\"`,\n        missing.length > 0 ? `Missing Attributes: ${missing.join(', ')}` : '',\n      ].filter(Boolean),\n      name: 'InvalidSerializedTransactionError',\n    })\n\n    this.serializedTransaction = serializedTransaction\n    this.type = type\n  }\n}\n\nexport type InvalidStorageKeySizeErrorType = InvalidStorageKeySizeError & {\n  name: 'InvalidStorageKeySizeError'\n}\nexport class InvalidStorageKeySizeError extends BaseError {\n  constructor({ storageKey }: { storageKey: Hex }) {\n    super(\n      `Size for storage key \"${storageKey}\" is invalid. Expected 32 bytes. Got ${Math.floor(\n        (storageKey.length - 2) / 2,\n      )} bytes.`,\n      { name: 'InvalidStorageKeySizeError' },\n    )\n  }\n}\n\nexport type TransactionExecutionErrorType = TransactionExecutionError & {\n  name: 'TransactionExecutionError'\n}\nexport class TransactionExecutionError extends BaseError {\n  override cause: BaseError\n\n  constructor(\n    cause: BaseError,\n    {\n      account,\n      docsPath,\n      chain,\n      data,\n      gas,\n      gasPrice,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      nonce,\n      to,\n      value,\n    }: Omit<SendTransactionParameters, 'account' | 'chain'> & {\n      account: Account | null\n      chain?: Chain | undefined\n      docsPath?: string | undefined\n    },\n  ) {\n    const prettyArgs = prettyPrint({\n      chain: chain && `${chain?.name} (id: ${chain?.id})`,\n      from: account?.address,\n      to,\n      value:\n        typeof value !== 'undefined' &&\n        `${formatEther(value)} ${chain?.nativeCurrency?.symbol || 'ETH'}`,\n      data,\n      gas,\n      gasPrice:\n        typeof gasPrice !== 'undefined' && `${formatGwei(gasPrice)} gwei`,\n      maxFeePerGas:\n        typeof maxFeePerGas !== 'undefined' &&\n        `${formatGwei(maxFeePerGas)} gwei`,\n      maxPriorityFeePerGas:\n        typeof maxPriorityFeePerGas !== 'undefined' &&\n        `${formatGwei(maxPriorityFeePerGas)} gwei`,\n      nonce,\n    })\n\n    super(cause.shortMessage, {\n      cause,\n      docsPath,\n      metaMessages: [\n        ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n        'Request Arguments:',\n        prettyArgs,\n      ].filter(Boolean) as string[],\n      name: 'TransactionExecutionError',\n    })\n    this.cause = cause\n  }\n}\n\nexport type TransactionNotFoundErrorType = TransactionNotFoundError & {\n  name: 'TransactionNotFoundError'\n}\nexport class TransactionNotFoundError extends BaseError {\n  constructor({\n    blockHash,\n    blockNumber,\n    blockTag,\n    hash,\n    index,\n  }: {\n    blockHash?: Hash | undefined\n    blockNumber?: bigint | undefined\n    blockTag?: BlockTag | undefined\n    hash?: Hash | undefined\n    index?: number | undefined\n  }) {\n    let identifier = 'Transaction'\n    if (blockTag && index !== undefined)\n      identifier = `Transaction at block time \"${blockTag}\" at index \"${index}\"`\n    if (blockHash && index !== undefined)\n      identifier = `Transaction at block hash \"${blockHash}\" at index \"${index}\"`\n    if (blockNumber && index !== undefined)\n      identifier = `Transaction at block number \"${blockNumber}\" at index \"${index}\"`\n    if (hash) identifier = `Transaction with hash \"${hash}\"`\n    super(`${identifier} could not be found.`, {\n      name: 'TransactionNotFoundError',\n    })\n  }\n}\n\nexport type TransactionReceiptNotFoundErrorType =\n  TransactionReceiptNotFoundError & {\n    name: 'TransactionReceiptNotFoundError'\n  }\nexport class TransactionReceiptNotFoundError extends BaseError {\n  constructor({ hash }: { hash: Hash }) {\n    super(\n      `Transaction receipt with hash \"${hash}\" could not be found. The Transaction may not be processed on a block yet.`,\n      {\n        name: 'TransactionReceiptNotFoundError',\n      },\n    )\n  }\n}\n\nexport type TransactionReceiptRevertedErrorType =\n  TransactionReceiptRevertedError & {\n    name: 'TransactionReceiptRevertedError'\n  }\nexport class TransactionReceiptRevertedError extends BaseError {\n  receipt: TransactionReceipt\n\n  constructor({ receipt }: { receipt: TransactionReceipt }) {\n    super(`Transaction with hash \"${receipt.transactionHash}\" reverted.`, {\n      metaMessages: [\n        'The receipt marked the transaction as \"reverted\". This could mean that the function on the contract you are trying to call threw an error.',\n        ' ',\n        'You can attempt to extract the revert reason by:',\n        '- calling the `simulateContract` or `simulateCalls` Action with the `abi` and `functionName` of the contract',\n        '- using the `call` Action with raw `data`',\n      ],\n      name: 'TransactionReceiptRevertedError',\n    })\n\n    this.receipt = receipt\n  }\n}\n\nexport type WaitForTransactionReceiptTimeoutErrorType =\n  WaitForTransactionReceiptTimeoutError & {\n    name: 'WaitForTransactionReceiptTimeoutError'\n  }\nexport class WaitForTransactionReceiptTimeoutError extends BaseError {\n  constructor({ hash }: { hash: Hash }) {\n    super(\n      `Timed out while waiting for transaction with hash \"${hash}\" to be confirmed.`,\n      { name: 'WaitForTransactionReceiptTimeoutError' },\n    )\n  }\n}\n", "import type { Address } from 'abitype'\n\nexport type ErrorType<name extends string = 'Error'> = Error & { name: name }\n\nexport const getContractAddress = (address: Address) => address\nexport const getUrl = (url: string) => url\n", "import type { Abi, Address } from 'abitype'\n\nimport { parseAccount } from '../accounts/utils/parseAccount.js'\nimport type { CallParameters } from '../actions/public/call.js'\nimport { panicReasons } from '../constants/solidity.js'\nimport type { Chain } from '../types/chain.js'\nimport type { Hex } from '../types/misc.js'\nimport {\n  type DecodeErrorResultReturnType,\n  decodeErrorResult,\n} from '../utils/abi/decodeErrorResult.js'\nimport { formatAbiItem } from '../utils/abi/formatAbiItem.js'\nimport { formatAbiItemWithArgs } from '../utils/abi/formatAbiItemWithArgs.js'\nimport { getAbiItem } from '../utils/abi/getAbiItem.js'\nimport { formatEther } from '../utils/unit/formatEther.js'\nimport { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { AbiErrorSignatureNotFoundError } from './abi.js'\nimport { BaseError } from './base.js'\nimport { prettyStateOverride } from './stateOverride.js'\nimport { prettyPrint } from './transaction.js'\nimport { getContractAddress } from './utils.js'\n\nexport type CallExecutionErrorType = CallExecutionError & {\n  name: 'CallExecutionError'\n}\nexport class CallExecutionError extends BaseError {\n  override cause: BaseError\n\n  constructor(\n    cause: BaseError,\n    {\n      account: account_,\n      docsPath,\n      chain,\n      data,\n      gas,\n      gasPrice,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      nonce,\n      to,\n      value,\n      stateOverride,\n    }: CallParameters & {\n      chain?: Chain | undefined\n      docsPath?: string | undefined\n    },\n  ) {\n    const account = account_ ? parseAccount(account_) : undefined\n    let prettyArgs = prettyPrint({\n      from: account?.address,\n      to,\n      value:\n        typeof value !== 'undefined' &&\n        `${formatEther(value)} ${chain?.nativeCurrency?.symbol || 'ETH'}`,\n      data,\n      gas,\n      gasPrice:\n        typeof gasPrice !== 'undefined' && `${formatGwei(gasPrice)} gwei`,\n      maxFeePerGas:\n        typeof maxFeePerGas !== 'undefined' &&\n        `${formatGwei(maxFeePerGas)} gwei`,\n      maxPriorityFeePerGas:\n        typeof maxPriorityFeePerGas !== 'undefined' &&\n        `${formatGwei(maxPriorityFeePerGas)} gwei`,\n      nonce,\n    })\n\n    if (stateOverride) {\n      prettyArgs += `\\n${prettyStateOverride(stateOverride)}`\n    }\n\n    super(cause.shortMessage, {\n      cause,\n      docsPath,\n      metaMessages: [\n        ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n        'Raw Call Arguments:',\n        prettyArgs,\n      ].filter(Boolean) as string[],\n      name: 'CallExecutionError',\n    })\n    this.cause = cause\n  }\n}\n\nexport type ContractFunctionExecutionErrorType =\n  ContractFunctionExecutionError & {\n    name: 'ContractFunctionExecutionError'\n  }\nexport class ContractFunctionExecutionError extends BaseError {\n  abi: Abi\n  args?: unknown[] | undefined\n  override cause: BaseError\n  contractAddress?: Address | undefined\n  formattedArgs?: string | undefined\n  functionName: string\n  sender?: Address | undefined\n\n  constructor(\n    cause: BaseError,\n    {\n      abi,\n      args,\n      contractAddress,\n      docsPath,\n      functionName,\n      sender,\n    }: {\n      abi: Abi\n      args?: any | undefined\n      contractAddress?: Address | undefined\n      docsPath?: string | undefined\n      functionName: string\n      sender?: Address | undefined\n    },\n  ) {\n    const abiItem = getAbiItem({ abi, args, name: functionName })\n    const formattedArgs = abiItem\n      ? formatAbiItemWithArgs({\n          abiItem,\n          args,\n          includeFunctionName: false,\n          includeName: false,\n        })\n      : undefined\n    const functionWithParams = abiItem\n      ? formatAbiItem(abiItem, { includeName: true })\n      : undefined\n\n    const prettyArgs = prettyPrint({\n      address: contractAddress && getContractAddress(contractAddress),\n      function: functionWithParams,\n      args:\n        formattedArgs &&\n        formattedArgs !== '()' &&\n        `${[...Array(functionName?.length ?? 0).keys()]\n          .map(() => ' ')\n          .join('')}${formattedArgs}`,\n      sender,\n    })\n\n    super(\n      cause.shortMessage ||\n        `An unknown error occurred while executing the contract function \"${functionName}\".`,\n      {\n        cause,\n        docsPath,\n        metaMessages: [\n          ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n          prettyArgs && 'Contract Call:',\n          prettyArgs,\n        ].filter(Boolean) as string[],\n        name: 'ContractFunctionExecutionError',\n      },\n    )\n    this.abi = abi\n    this.args = args\n    this.cause = cause\n    this.contractAddress = contractAddress\n    this.functionName = functionName\n    this.sender = sender\n  }\n}\n\nexport type ContractFunctionRevertedErrorType =\n  ContractFunctionRevertedError & {\n    name: 'ContractFunctionRevertedError'\n  }\nexport class ContractFunctionRevertedError extends BaseError {\n  data?: DecodeErrorResultReturnType | undefined\n  raw?: Hex | undefined\n  reason?: string | undefined\n  signature?: Hex | undefined\n\n  constructor({\n    abi,\n    data,\n    functionName,\n    message,\n    cause: error,\n  }: {\n    abi: Abi\n    data?: Hex | undefined\n    functionName: string\n    message?: string | undefined\n    cause?: BaseError | Error | undefined\n  }) {\n    let cause: Error | undefined\n    let decodedData: DecodeErrorResultReturnType | undefined\n    let metaMessages: string[] | undefined\n    let reason: string | undefined\n    if (data && data !== '0x') {\n      try {\n        decodedData = decodeErrorResult({ abi, data, cause: error })\n        const { abiItem, errorName, args: errorArgs } = decodedData\n        if (errorName === 'Error') {\n          reason = (errorArgs as [string])[0]\n        } else if (errorName === 'Panic') {\n          const [firstArg] = errorArgs as [number]\n          reason = panicReasons[firstArg as keyof typeof panicReasons]\n        } else {\n          const errorWithParams = abiItem\n            ? formatAbiItem(abiItem, { includeName: true })\n            : undefined\n          const formattedArgs =\n            abiItem && errorArgs\n              ? formatAbiItemWithArgs({\n                  abiItem,\n                  args: errorArgs,\n                  includeFunctionName: false,\n                  includeName: false,\n                })\n              : undefined\n\n          metaMessages = [\n            errorWithParams ? `Error: ${errorWithParams}` : '',\n            formattedArgs && formattedArgs !== '()'\n              ? `       ${[...Array(errorName?.length ?? 0).keys()]\n                  .map(() => ' ')\n                  .join('')}${formattedArgs}`\n              : '',\n          ]\n        }\n      } catch (err) {\n        cause = err as Error\n      }\n    } else if (message) reason = message\n\n    let signature: Hex | undefined\n    if (cause instanceof AbiErrorSignatureNotFoundError) {\n      signature = cause.signature\n      metaMessages = [\n        `Unable to decode signature \"${signature}\" as it was not found on the provided ABI.`,\n        'Make sure you are using the correct ABI and that the error exists on it.',\n        `You can look up the decoded signature here: https://4byte.sourcify.dev/?q=${signature}.`,\n      ]\n    }\n\n    super(\n      (reason && reason !== 'execution reverted') || signature\n        ? [\n            `The contract function \"${functionName}\" reverted with the following ${\n              signature ? 'signature' : 'reason'\n            }:`,\n            reason || signature,\n          ].join('\\n')\n        : `The contract function \"${functionName}\" reverted.`,\n      {\n        cause: cause ?? error,\n        metaMessages,\n        name: 'ContractFunctionRevertedError',\n      },\n    )\n\n    this.data = decodedData\n    this.raw = data\n    this.reason = reason\n    this.signature = signature\n  }\n}\n\nexport type ContractFunctionZeroDataErrorType =\n  ContractFunctionZeroDataError & {\n    name: 'ContractFunctionZeroDataError'\n  }\nexport class ContractFunctionZeroDataError extends BaseError {\n  constructor({\n    functionName,\n    cause,\n  }: {\n    functionName: string\n    cause?: BaseError | Error | undefined\n  }) {\n    super(`The contract function \"${functionName}\" returned no data (\"0x\").`, {\n      metaMessages: [\n        'This could be due to any of the following:',\n        `  - The contract does not have the function \"${functionName}\",`,\n        '  - The parameters passed to the contract function may be invalid, or',\n        '  - The address is not a contract.',\n      ],\n      name: 'ContractFunctionZeroDataError',\n      cause,\n    })\n  }\n}\n\nexport type CounterfactualDeploymentFailedErrorType =\n  CounterfactualDeploymentFailedError & {\n    name: 'CounterfactualDeploymentFailedError'\n  }\nexport class CounterfactualDeploymentFailedError extends BaseError {\n  constructor({ factory }: { factory?: Address | undefined }) {\n    super(\n      `Deployment for counterfactual contract call failed${\n        factory ? ` for factory \"${factory}\".` : ''\n      }`,\n      {\n        metaMessages: [\n          'Please ensure:',\n          '- The `factory` is a valid contract deployment factory (ie. Create2 Factory, ERC-4337 Factory, etc).',\n          '- The `factoryData` is a valid encoded function call for contract deployment function on the factory.',\n        ],\n        name: 'CounterfactualDeploymentFailedError',\n      },\n    )\n  }\n}\n\nexport type RawContractErrorType = RawContractError & {\n  name: 'RawContractError'\n}\nexport class RawContractError extends BaseError {\n  code = 3\n\n  data?: Hex | { data?: Hex | undefined } | undefined\n\n  constructor({\n    data,\n    message,\n  }: {\n    data?: Hex | { data?: Hex | undefined } | undefined\n    message?: string | undefined\n  }) {\n    super(message || '', { name: 'RawContractError' })\n    this.data = data\n  }\n}\n", "import { stringify } from '../utils/stringify.js'\n\nimport { BaseError } from './base.js'\nimport { getUrl } from './utils.js'\n\nexport type HttpRequestErrorType = HttpRequestError & {\n  name: 'HttpRequestError'\n}\nexport class HttpRequestError extends BaseError {\n  body?: { [x: string]: unknown } | { [y: string]: unknown }[] | undefined\n  headers?: Headers | undefined\n  status?: number | undefined\n  url: string\n\n  constructor({\n    body,\n    cause,\n    details,\n    headers,\n    status,\n    url,\n  }: {\n    body?: { [x: string]: unknown } | { [y: string]: unknown }[] | undefined\n    cause?: Error | undefined\n    details?: string | undefined\n    headers?: Headers | undefined\n    status?: number | undefined\n    url: string\n  }) {\n    super('HTTP request failed.', {\n      cause,\n      details,\n      metaMessages: [\n        status && `Status: ${status}`,\n        `URL: ${getUrl(url)}`,\n        body && `Request body: ${stringify(body)}`,\n      ].filter(Boolean) as string[],\n      name: 'HttpRequestError',\n    })\n    this.body = body\n    this.headers = headers\n    this.status = status\n    this.url = url\n  }\n}\n\nexport type WebSocketRequestErrorType = WebSocketRequestError & {\n  name: 'WebSocketRequestError'\n}\nexport class WebSocketRequestError extends BaseError {\n  url: string\n  constructor({\n    body,\n    cause,\n    details,\n    url,\n  }: {\n    body?: { [key: string]: unknown } | undefined\n    cause?: Error | undefined\n    details?: string | undefined\n    url: string\n  }) {\n    super('WebSocket request failed.', {\n      cause,\n      details,\n      metaMessages: [\n        `URL: ${getUrl(url)}`,\n        body && `Request body: ${stringify(body)}`,\n      ].filter(Boolean) as string[],\n      name: 'WebSocketRequestError',\n    })\n    this.url = url\n  }\n}\n\nexport type RpcRequestErrorType = RpcRequestError & {\n  name: 'RpcRequestError'\n}\nexport class RpcRequestError extends BaseError {\n  code: number\n  data?: unknown\n  url: string\n  constructor({\n    body,\n    error,\n    url,\n  }: {\n    body: { [x: string]: unknown } | { [y: string]: unknown }[]\n    error: { code: number; data?: unknown; message: string }\n    url: string\n  }) {\n    super('RPC Request failed.', {\n      cause: error as any,\n      details: error.message,\n      metaMessages: [`URL: ${getUrl(url)}`, `Request body: ${stringify(body)}`],\n      name: 'RpcRequestError',\n    })\n    this.code = error.code\n    this.data = error.data\n    this.url = url\n  }\n}\n\nexport type SocketClosedErrorType = SocketClosedError & {\n  name: 'SocketClosedError'\n}\nexport class SocketClosedError extends BaseError {\n  url: string | undefined\n  constructor({\n    url,\n  }: {\n    url?: string | undefined\n  } = {}) {\n    super('The socket has been closed.', {\n      metaMessages: [url && `URL: ${getUrl(url)}`].filter(Boolean) as string[],\n      name: 'SocketClosedError',\n    })\n    this.url = url\n  }\n}\n\nexport type TimeoutErrorType = TimeoutError & {\n  name: 'TimeoutError'\n}\nexport class TimeoutError extends BaseError {\n  url: string\n  constructor({\n    body,\n    url,\n  }: {\n    body: { [x: string]: unknown } | { [y: string]: unknown }[]\n    url: string\n  }) {\n    super('The request took too long to respond.', {\n      details: 'The request timed out.',\n      metaMessages: [`URL: ${getUrl(url)}`, `Request body: ${stringify(body)}`],\n      name: 'TimeoutError',\n    })\n    this.url = url\n  }\n}\n", "import type { Prettify } from '../types/utils.js'\nimport { BaseError } from './base.js'\nimport { RpcRequestError } from './request.js'\n\nconst unknownErrorCode = -1\n\nexport type RpcErrorCode =\n  | -1\n  | -32700 // Parse error\n  | -32600 // Invalid request\n  | -32601 // Method not found\n  | -32602 // Invalid params\n  | -32603 // Internal error\n  | -32000 // Invalid input\n  | -32001 // Resource not found\n  | -32002 // Resource unavailable\n  | -32003 // Transaction rejected\n  | -32004 // Method not supported\n  | -32005 // Limit exceeded\n  | -32006 // JSON-RPC version not supported\n  | -32042 // Method not found\n\ntype RpcErrorOptions<code extends number = RpcErrorCode> = {\n  code?: code | (number & {}) | undefined\n  docsPath?: string | undefined\n  metaMessages?: string[] | undefined\n  name?: string | undefined\n  shortMessage: string\n}\n\n/**\n * Error subclass implementing JSON RPC 2.0 errors and Ethereum RPC errors per EIP-1474.\n *\n * - EIP https://eips.ethereum.org/EIPS/eip-1474\n */\nexport type RpcErrorType = RpcError & { name: 'RpcError' }\nexport class RpcError<code_ extends number = RpcErrorCode> extends BaseError {\n  code: code_ | (number & {})\n\n  constructor(\n    cause: Error,\n    {\n      code,\n      docsPath,\n      metaMessages,\n      name,\n      shortMessage,\n    }: RpcErrorOptions<code_>,\n  ) {\n    super(shortMessage, {\n      cause,\n      docsPath,\n      metaMessages:\n        metaMessages || (cause as { metaMessages?: string[] })?.metaMessages,\n      name: name || 'RpcError',\n    })\n    this.name = name || cause.name\n    this.code = (\n      cause instanceof RpcRequestError ? cause.code : (code ?? unknownErrorCode)\n    ) as code_\n  }\n}\n\nexport type ProviderRpcErrorCode =\n  | 4001 // User Rejected Request\n  | 4100 // Unauthorized\n  | 4200 // Unsupported Method\n  | 4900 // Disconnected\n  | 4901 // Chain Disconnected\n  | 4902 // Chain Not Recognized\n  | 5700 // Unsupported non-optional capability\n  | 5710 // Unsupported chain id\n  | 5720 // Duplicate ID\n  | 5730 // Unknown bundle id\n  | 5740 // Bundle too large\n  | 5750 // Atomic-ready wallet rejected upgrade\n  | 5760 // Atomicity not supported\n  | 7000 // WalletConnect Session Settlement Failed\n\n/**\n * Error subclass implementing Ethereum Provider errors per EIP-1193.\n *\n * - EIP https://eips.ethereum.org/EIPS/eip-1193\n */\nexport type ProviderRpcErrorType = ProviderRpcError & {\n  name: 'ProviderRpcError'\n}\nexport class ProviderRpcError<\n  T = undefined,\n> extends RpcError<ProviderRpcErrorCode> {\n  data?: T | undefined\n\n  constructor(\n    cause: Error,\n    options: Prettify<\n      RpcErrorOptions<ProviderRpcErrorCode> & {\n        data?: T | undefined\n      }\n    >,\n  ) {\n    super(cause, options)\n\n    this.data = options.data\n  }\n}\n\n/**\n * Subclass for a \"Parse error\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type ParseRpcErrorType = ParseRpcError & {\n  code: -32700\n  name: 'ParseRpcError'\n}\nexport class ParseRpcError extends RpcError {\n  static code = -32700 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: ParseRpcError.code,\n      name: 'ParseRpcError',\n      shortMessage:\n        'Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"Invalid request\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type InvalidRequestRpcErrorType = InvalidRequestRpcError & {\n  code: -32600\n  name: 'InvalidRequestRpcError'\n}\nexport class InvalidRequestRpcError extends RpcError {\n  static code = -32600 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: InvalidRequestRpcError.code,\n      name: 'InvalidRequestRpcError',\n      shortMessage: 'JSON is not a valid request object.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"Method not found\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type MethodNotFoundRpcErrorType = MethodNotFoundRpcError & {\n  code: -32601\n  name: 'MethodNotFoundRpcError'\n}\nexport class MethodNotFoundRpcError extends RpcError {\n  static code = -32601 as const\n\n  constructor(cause: Error, { method }: { method?: string } = {}) {\n    super(cause, {\n      code: MethodNotFoundRpcError.code,\n      name: 'MethodNotFoundRpcError',\n      shortMessage: `The method${method ? ` \"${method}\"` : ''} does not exist / is not available.`,\n    })\n  }\n}\n\n/**\n * Subclass for an \"Invalid params\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type InvalidParamsRpcErrorType = InvalidParamsRpcError & {\n  code: -32602\n  name: 'InvalidParamsRpcError'\n}\nexport class InvalidParamsRpcError extends RpcError {\n  static code = -32602 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: InvalidParamsRpcError.code,\n      name: 'InvalidParamsRpcError',\n      shortMessage: [\n        'Invalid parameters were provided to the RPC method.',\n        'Double check you have provided the correct parameters.',\n      ].join('\\n'),\n    })\n  }\n}\n\n/**\n * Subclass for an \"Internal error\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type InternalRpcErrorType = InternalRpcError & {\n  code: -32603\n  name: 'InternalRpcError'\n}\nexport class InternalRpcError extends RpcError {\n  static code = -32603 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: InternalRpcError.code,\n      name: 'InternalRpcError',\n      shortMessage: 'An internal error was received.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Invalid input\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type InvalidInputRpcErrorType = InvalidInputRpcError & {\n  code: -32000\n  name: 'InvalidInputRpcError'\n}\nexport class InvalidInputRpcError extends RpcError {\n  static code = -32000 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: InvalidInputRpcError.code,\n      name: 'InvalidInputRpcError',\n      shortMessage: [\n        'Missing or invalid parameters.',\n        'Double check you have provided the correct parameters.',\n      ].join('\\n'),\n    })\n  }\n}\n\n/**\n * Subclass for a \"Resource not found\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type ResourceNotFoundRpcErrorType = ResourceNotFoundRpcError & {\n  code: -32001\n  name: 'ResourceNotFoundRpcError'\n}\nexport class ResourceNotFoundRpcError extends RpcError {\n  override name = 'ResourceNotFoundRpcError'\n  static code = -32001 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: ResourceNotFoundRpcError.code,\n      name: 'ResourceNotFoundRpcError',\n      shortMessage: 'Requested resource not found.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"Resource unavailable\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type ResourceUnavailableRpcErrorType = ResourceUnavailableRpcError & {\n  code: -32002\n  name: 'ResourceUnavailableRpcError'\n}\nexport class ResourceUnavailableRpcError extends RpcError {\n  static code = -32002 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: ResourceUnavailableRpcError.code,\n      name: 'ResourceUnavailableRpcError',\n      shortMessage: 'Requested resource not available.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"Transaction rejected\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type TransactionRejectedRpcErrorType = TransactionRejectedRpcError & {\n  code: -32003\n  name: 'TransactionRejectedRpcError'\n}\nexport class TransactionRejectedRpcError extends RpcError {\n  static code = -32003 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: TransactionRejectedRpcError.code,\n      name: 'TransactionRejectedRpcError',\n      shortMessage: 'Transaction creation failed.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"Method not supported\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type MethodNotSupportedRpcErrorType = MethodNotSupportedRpcError & {\n  code: -32004\n  name: 'MethodNotSupportedRpcError'\n}\nexport class MethodNotSupportedRpcError extends RpcError {\n  static code = -32004 as const\n\n  constructor(cause: Error, { method }: { method?: string } = {}) {\n    super(cause, {\n      code: MethodNotSupportedRpcError.code,\n      name: 'MethodNotSupportedRpcError',\n      shortMessage: `Method${method ? ` \"${method}\"` : ''} is not supported.`,\n    })\n  }\n}\n\n/**\n * Subclass for a \"Limit exceeded\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type LimitExceededRpcErrorType = LimitExceededRpcError & {\n  code: -32005\n  name: 'LimitExceededRpcError'\n}\nexport class LimitExceededRpcError extends RpcError {\n  static code = -32005 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: LimitExceededRpcError.code,\n      name: 'LimitExceededRpcError',\n      shortMessage: 'Request exceeds defined limit.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"JSON-RPC version not supported\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type JsonRpcVersionUnsupportedErrorType =\n  JsonRpcVersionUnsupportedError & {\n    code: -32006\n    name: 'JsonRpcVersionUnsupportedError'\n  }\nexport class JsonRpcVersionUnsupportedError extends RpcError {\n  static code = -32006 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: JsonRpcVersionUnsupportedError.code,\n      name: 'JsonRpcVersionUnsupportedError',\n      shortMessage: 'Version of JSON-RPC protocol is not supported.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"User Rejected Request\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type UserRejectedRequestErrorType = UserRejectedRequestError & {\n  code: 4001\n  name: 'UserRejectedRequestError'\n}\nexport class UserRejectedRequestError extends ProviderRpcError {\n  static code = 4001 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: UserRejectedRequestError.code,\n      name: 'UserRejectedRequestError',\n      shortMessage: 'User rejected the request.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Unauthorized\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type UnauthorizedProviderErrorType = UnauthorizedProviderError & {\n  code: 4100\n  name: 'UnauthorizedProviderError'\n}\nexport class UnauthorizedProviderError extends ProviderRpcError {\n  static code = 4100 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: UnauthorizedProviderError.code,\n      name: 'UnauthorizedProviderError',\n      shortMessage:\n        'The requested method and/or account has not been authorized by the user.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Unsupported Method\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type UnsupportedProviderMethodErrorType =\n  UnsupportedProviderMethodError & {\n    code: 4200\n    name: 'UnsupportedProviderMethodError'\n  }\nexport class UnsupportedProviderMethodError extends ProviderRpcError {\n  static code = 4200 as const\n\n  constructor(cause: Error, { method }: { method?: string } = {}) {\n    super(cause, {\n      code: UnsupportedProviderMethodError.code,\n      name: 'UnsupportedProviderMethodError',\n      shortMessage: `The Provider does not support the requested method${method ? ` \" ${method}\"` : ''}.`,\n    })\n  }\n}\n\n/**\n * Subclass for an \"Disconnected\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type ProviderDisconnectedErrorType = ProviderDisconnectedError & {\n  code: 4900\n  name: 'ProviderDisconnectedError'\n}\nexport class ProviderDisconnectedError extends ProviderRpcError {\n  static code = 4900 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: ProviderDisconnectedError.code,\n      name: 'ProviderDisconnectedError',\n      shortMessage: 'The Provider is disconnected from all chains.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Chain Disconnected\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type ChainDisconnectedErrorType = ChainDisconnectedError & {\n  code: 4901\n  name: 'ChainDisconnectedError'\n}\nexport class ChainDisconnectedError extends ProviderRpcError {\n  static code = 4901 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: ChainDisconnectedError.code,\n      name: 'ChainDisconnectedError',\n      shortMessage: 'The Provider is not connected to the requested chain.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Switch Chain\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type SwitchChainErrorType = SwitchChainError & {\n  code: 4902\n  name: 'SwitchChainError'\n}\nexport class SwitchChainError extends ProviderRpcError {\n  static code = 4902 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: SwitchChainError.code,\n      name: 'SwitchChainError',\n      shortMessage: 'An error occurred when attempting to switch chain.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Unsupported non-optional capability\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type UnsupportedNonOptionalCapabilityErrorType =\n  UnsupportedNonOptionalCapabilityError & {\n    code: 5700\n    name: 'UnsupportedNonOptionalCapabilityError'\n  }\nexport class UnsupportedNonOptionalCapabilityError extends ProviderRpcError {\n  static code = 5700 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: UnsupportedNonOptionalCapabilityError.code,\n      name: 'UnsupportedNonOptionalCapabilityError',\n      shortMessage:\n        'This Wallet does not support a capability that was not marked as optional.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Unsupported chain id\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type UnsupportedChainIdErrorType = UnsupportedChainIdError & {\n  code: 5710\n  name: 'UnsupportedChainIdError'\n}\nexport class UnsupportedChainIdError extends ProviderRpcError {\n  static code = 5710 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: UnsupportedChainIdError.code,\n      name: 'UnsupportedChainIdError',\n      shortMessage: 'This Wallet does not support the requested chain ID.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Duplicate ID\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type DuplicateIdErrorType = DuplicateIdError & {\n  code: 5720\n  name: 'DuplicateIdError'\n}\nexport class DuplicateIdError extends ProviderRpcError {\n  static code = 5720 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: DuplicateIdError.code,\n      name: 'DuplicateIdError',\n      shortMessage: 'There is already a bundle submitted with this ID.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Unknown bundle ID\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type UnknownBundleIdErrorType = UnknownBundleIdError & {\n  code: 5730\n  name: 'UnknownBundleIdError'\n}\nexport class UnknownBundleIdError extends ProviderRpcError {\n  static code = 5730 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: UnknownBundleIdError.code,\n      name: 'UnknownBundleIdError',\n      shortMessage: 'This bundle id is unknown / has not been submitted',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Bundle too large\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type BundleTooLargeErrorType = BundleTooLargeError & {\n  code: 5740\n  name: 'BundleTooLargeError'\n}\nexport class BundleTooLargeError extends ProviderRpcError {\n  static code = 5740 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: BundleTooLargeError.code,\n      name: 'BundleTooLargeError',\n      shortMessage: 'The call bundle is too large for the Wallet to process.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Atomic-ready wallet rejected upgrade\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type AtomicReadyWalletRejectedUpgradeErrorType =\n  AtomicReadyWalletRejectedUpgradeError & {\n    code: 5750\n    name: 'AtomicReadyWalletRejectedUpgradeError'\n  }\nexport class AtomicReadyWalletRejectedUpgradeError extends ProviderRpcError {\n  static code = 5750 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: AtomicReadyWalletRejectedUpgradeError.code,\n      name: 'AtomicReadyWalletRejectedUpgradeError',\n      shortMessage:\n        'The Wallet can support atomicity after an upgrade, but the user rejected the upgrade.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Atomicity not supported\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type AtomicityNotSupportedErrorType = AtomicityNotSupportedError & {\n  code: 5760\n  name: 'AtomicityNotSupportedError'\n}\nexport class AtomicityNotSupportedError extends ProviderRpcError {\n  static code = 5760 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: AtomicityNotSupportedError.code,\n      name: 'AtomicityNotSupportedError',\n      shortMessage:\n        'The wallet does not support atomic execution but the request requires it.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"Session Settlement Failed\" WalletConnect error.\n *\n * WalletConnect https://docs.walletconnect.com/2.0/specs/clients/sign/error-codes\n */\nexport type WalletConnectSessionSettlementErrorType =\n  WalletConnectSessionSettlementError & {\n    code: 7000\n    name: 'WalletConnectSessionSettlementError'\n  }\nexport class WalletConnectSessionSettlementError extends ProviderRpcError {\n  static code = 7000 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: WalletConnectSessionSettlementError.code,\n      name: 'WalletConnectSessionSettlementError',\n      shortMessage: 'WalletConnect session settlement failed.',\n    })\n  }\n}\n\n/**\n * Subclass for an unknown RPC error.\n */\nexport type UnknownRpcErrorType = UnknownRpcError & {\n  name: 'UnknownRpcError'\n}\nexport class UnknownRpcError extends RpcError {\n  constructor(cause: Error) {\n    super(cause, {\n      name: 'UnknownRpcError',\n      shortMessage: 'An unknown RPC error occurred.',\n    })\n  }\n}\n", "/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { type Input, Hash, abytes, aexists, aoutput, clean, createView, toBytes } from './utils.ts';\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(\n  view: DataView,\n  byteOffset: number,\n  value: bigint,\n  isLE: boolean\n): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n  return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n  return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n\n  readonly blockLen: number;\n  readonly outputLen: number;\n  readonly padOffset: number;\n  readonly isLE: boolean;\n\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n    super();\n    this.blockLen = blockLen;\n    this.outputLen = outputLen;\n    this.padOffset = padOffset;\n    this.isLE = isLE;\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    aexists(this);\n    data = toBytes(data);\n    abytes(data);\n    const { view, buffer, blockLen } = this;\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input, cast it to view and process\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out: Uint8Array): void {\n    aexists(this);\n    aoutput(out, this);\n    this.finished = true;\n    // Padding\n    // We can avoid allocation of buffer for padding completely if it\n    // was previously not allocated here. But it won't change performance.\n    const { buffer, view, blockLen, isLE } = this;\n    let { pos } = this;\n    // append the bit '1' to the message\n    buffer[pos++] = 0b10000000;\n    clean(this.buffer.subarray(pos));\n    // we have less than padOffset left in buffer, so we cannot put length in\n    // current block, need process it and pad again\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    // Pad until full block byte with zeros\n    for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n    // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n    // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n    // So we just write lowest 64 bits of that value.\n    setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n  }\n  digest(): Uint8Array {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n  _cloneInto(to?: T): T {\n    to ||= new (this.constructor as any)() as T;\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.destroyed = destroyed;\n    to.finished = finished;\n    to.length = length;\n    to.pos = pos;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to;\n  }\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n  0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n  0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n", "/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  protected A: number = SHA256_IV[0] | 0;\n  protected B: number = SHA256_IV[1] | 0;\n  protected C: number = SHA256_IV[2] | 0;\n  protected D: number = SHA256_IV[3] | 0;\n  protected E: number = SHA256_IV[4] | 0;\n  protected F: number = SHA256_IV[5] | 0;\n  protected G: number = SHA256_IV[6] | 0;\n  protected H: number = SHA256_IV[7] | 0;\n\n  constructor(outputLen: number = 32) {\n    super(64, outputLen, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ): void {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 64; i++) {\n      const W15 = SHA256_W[i - 15];\n      const W2 = SHA256_W[i - 2];\n      const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n      const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n      SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n    }\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let i = 0; i < 64; i++) {\n      const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n      const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n      const T2 = (sigma0 + Maj(A, B, C)) | 0;\n      H = G;\n      G = F;\n      F = E;\n      E = (D + T1) | 0;\n      D = C;\n      C = B;\n      B = A;\n      A = (T1 + T2) | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    F = (F + this.F) | 0;\n    G = (G + this.G) | 0;\n    H = (H + this.H) | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  protected roundClean(): void {\n    clean(SHA256_W);\n  }\n  destroy(): void {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    clean(this.buffer);\n  }\n}\n\nexport class SHA224 extends SHA256 {\n  protected A: number = SHA224_IV[0] | 0;\n  protected B: number = SHA224_IV[1] | 0;\n  protected C: number = SHA224_IV[2] | 0;\n  protected D: number = SHA224_IV[3] | 0;\n  protected E: number = SHA224_IV[4] | 0;\n  protected F: number = SHA224_IV[5] | 0;\n  protected G: number = SHA224_IV[6] | 0;\n  protected H: number = SHA224_IV[7] | 0;\n  constructor() {\n    super(28);\n  }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n  '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n  '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n  '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n  '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n  '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n  '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n  '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n  '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n  '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n  '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n  '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n  '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n  '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n  '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n  '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n  '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n  '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n  '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n  '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n  '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\nexport class SHA512 extends HashMD<SHA512> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  // h -- high 32 bits, l -- low 32 bits\n  protected Ah: number = SHA512_IV[0] | 0;\n  protected Al: number = SHA512_IV[1] | 0;\n  protected Bh: number = SHA512_IV[2] | 0;\n  protected Bl: number = SHA512_IV[3] | 0;\n  protected Ch: number = SHA512_IV[4] | 0;\n  protected Cl: number = SHA512_IV[5] | 0;\n  protected Dh: number = SHA512_IV[6] | 0;\n  protected Dl: number = SHA512_IV[7] | 0;\n  protected Eh: number = SHA512_IV[8] | 0;\n  protected El: number = SHA512_IV[9] | 0;\n  protected Fh: number = SHA512_IV[10] | 0;\n  protected Fl: number = SHA512_IV[11] | 0;\n  protected Gh: number = SHA512_IV[12] | 0;\n  protected Gl: number = SHA512_IV[13] | 0;\n  protected Hh: number = SHA512_IV[14] | 0;\n  protected Hl: number = SHA512_IV[15] | 0;\n\n  constructor(outputLen: number = 64) {\n    super(128, outputLen, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n  }\n  // prettier-ignore\n  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ): void {\n    this.Ah = Ah | 0;\n    this.Al = Al | 0;\n    this.Bh = Bh | 0;\n    this.Bl = Bl | 0;\n    this.Ch = Ch | 0;\n    this.Cl = Cl | 0;\n    this.Dh = Dh | 0;\n    this.Dl = Dl | 0;\n    this.Eh = Eh | 0;\n    this.El = El | 0;\n    this.Fh = Fh | 0;\n    this.Fl = Fl | 0;\n    this.Gh = Gh | 0;\n    this.Gl = Gl | 0;\n    this.Hh = Hh | 0;\n    this.Hl = Hl | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) {\n      SHA512_W_H[i] = view.getUint32(offset);\n      SHA512_W_L[i] = view.getUint32((offset += 4));\n    }\n    for (let i = 16; i < 80; i++) {\n      // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n      const W15h = SHA512_W_H[i - 15] | 0;\n      const W15l = SHA512_W_L[i - 15] | 0;\n      const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n      const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n      // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n      const W2h = SHA512_W_H[i - 2] | 0;\n      const W2l = SHA512_W_L[i - 2] | 0;\n      const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n      const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n      // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n      const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n      const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n      SHA512_W_H[i] = SUMh | 0;\n      SHA512_W_L[i] = SUMl | 0;\n    }\n    let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    // Compression function main loop, 80 rounds\n    for (let i = 0; i < 80; i++) {\n      // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n      const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n      const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n      //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n      const CHIl = (El & Fl) ^ (~El & Gl);\n      // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n      // prettier-ignore\n      const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n      const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n      const T1l = T1ll | 0;\n      // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n      const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n      const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n      const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n      const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n      Hh = Gh | 0;\n      Hl = Gl | 0;\n      Gh = Fh | 0;\n      Gl = Fl | 0;\n      Fh = Eh | 0;\n      Fl = El | 0;\n      ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n      Dh = Ch | 0;\n      Dl = Cl | 0;\n      Ch = Bh | 0;\n      Cl = Bl | 0;\n      Bh = Ah | 0;\n      Bl = Al | 0;\n      const All = u64.add3L(T1l, sigma0l, MAJl);\n      Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n      Al = All | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n    ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n    ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n    ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n    ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n    ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n    ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n    ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n    this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n  }\n  protected roundClean(): void {\n    clean(SHA512_W_H, SHA512_W_L);\n  }\n  destroy(): void {\n    clean(this.buffer);\n    this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n  }\n}\n\nexport class SHA384 extends SHA512 {\n  protected Ah: number = SHA384_IV[0] | 0;\n  protected Al: number = SHA384_IV[1] | 0;\n  protected Bh: number = SHA384_IV[2] | 0;\n  protected Bl: number = SHA384_IV[3] | 0;\n  protected Ch: number = SHA384_IV[4] | 0;\n  protected Cl: number = SHA384_IV[5] | 0;\n  protected Dh: number = SHA384_IV[6] | 0;\n  protected Dl: number = SHA384_IV[7] | 0;\n  protected Eh: number = SHA384_IV[8] | 0;\n  protected El: number = SHA384_IV[9] | 0;\n  protected Fh: number = SHA384_IV[10] | 0;\n  protected Fl: number = SHA384_IV[11] | 0;\n  protected Gh: number = SHA384_IV[12] | 0;\n  protected Gl: number = SHA384_IV[13] | 0;\n  protected Hh: number = SHA384_IV[14] | 0;\n  protected Hl: number = SHA384_IV[15] | 0;\n\n  constructor() {\n    super(48);\n  }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n  0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n  0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n  0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n  0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\nexport class SHA512_224 extends SHA512 {\n  protected Ah: number = T224_IV[0] | 0;\n  protected Al: number = T224_IV[1] | 0;\n  protected Bh: number = T224_IV[2] | 0;\n  protected Bl: number = T224_IV[3] | 0;\n  protected Ch: number = T224_IV[4] | 0;\n  protected Cl: number = T224_IV[5] | 0;\n  protected Dh: number = T224_IV[6] | 0;\n  protected Dl: number = T224_IV[7] | 0;\n  protected Eh: number = T224_IV[8] | 0;\n  protected El: number = T224_IV[9] | 0;\n  protected Fh: number = T224_IV[10] | 0;\n  protected Fl: number = T224_IV[11] | 0;\n  protected Gh: number = T224_IV[12] | 0;\n  protected Gl: number = T224_IV[13] | 0;\n  protected Hh: number = T224_IV[14] | 0;\n  protected Hl: number = T224_IV[15] | 0;\n\n  constructor() {\n    super(28);\n  }\n}\n\nexport class SHA512_256 extends SHA512 {\n  protected Ah: number = T256_IV[0] | 0;\n  protected Al: number = T256_IV[1] | 0;\n  protected Bh: number = T256_IV[2] | 0;\n  protected Bl: number = T256_IV[3] | 0;\n  protected Ch: number = T256_IV[4] | 0;\n  protected Cl: number = T256_IV[5] | 0;\n  protected Dh: number = T256_IV[6] | 0;\n  protected Dl: number = T256_IV[7] | 0;\n  protected Eh: number = T256_IV[8] | 0;\n  protected El: number = T256_IV[9] | 0;\n  protected Fh: number = T256_IV[10] | 0;\n  protected Fl: number = T256_IV[11] | 0;\n  protected Gh: number = T256_IV[12] | 0;\n  protected Gl: number = T256_IV[13] | 0;\n  protected Hh: number = T256_IV[14] | 0;\n  protected Hl: number = T256_IV[15] | 0;\n\n  constructor() {\n    super(32);\n  }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256: CHash = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash = /* @__PURE__ */ createHasher(() => new SHA224());\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash = /* @__PURE__ */ createHasher(() => new SHA384());\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash = /* @__PURE__ */ createHasher(() => new SHA512_224());\n", "/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, Hash, toBytes, type CHash, type Input } from './utils.ts';\n\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, _key: Input) {\n    super();\n    ahash(hash);\n    const key = toBytes(_key);\n    this.iHash = hash.create() as T;\n    if (typeof this.iHash.update !== 'function')\n      throw new Error('Expected instance of class which extends utils.Hash');\n    this.blockLen = this.iHash.blockLen;\n    this.outputLen = this.iHash.outputLen;\n    const blockLen = this.blockLen;\n    const pad = new Uint8Array(blockLen);\n    // blockLen can be bigger than outputLen\n    pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n    this.iHash.update(pad);\n    // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n    this.oHash = hash.create() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    clean(pad);\n  }\n  update(buf: Input): this {\n    aexists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array): void {\n    aexists(this);\n    abytes(out, this.outputLen);\n    this.finished = true;\n    this.iHash.digestInto(out);\n    this.oHash.update(out);\n    this.oHash.digestInto(out);\n    this.destroy();\n  }\n  digest(): Uint8Array {\n    const out = new Uint8Array(this.oHash.outputLen);\n    this.digestInto(out);\n    return out;\n  }\n  _cloneInto(to?: HMAC<T>): HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    to.blockLen = blockLen;\n    to.outputLen = outputLen;\n    to.oHash = oHash._cloneInto(to.oHash);\n    to.iHash = iHash._cloneInto(to.iHash);\n    return to;\n  }\n  clone(): HMAC<T> {\n    return this._cloneInto();\n  }\n  destroy(): void {\n    this.destroyed = true;\n    this.oHash.destroy();\n    this.iHash.destroy();\n  }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n  (hash: CHash, key: Input, message: Input): Uint8Array;\n  create(hash: CHash, key: Input): HMAC<any>;\n} = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\nexport function abytes(item: unknown): void {\n  if (!isBytes(item)) throw new Error('Uint8Array expected');\n}\n\nexport function abool(title: string, value: boolean): void {\n  if (typeof value !== 'boolean') throw new Error(title + ' boolean expected, got ' + value);\n}\n\n// Used in weierstrass, der\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? '0' + hex : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean =\n  // @ts-ignore\n  typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function';\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // @ts-ignore\n  if (hasHexBuiltin) return bytes.toHex();\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n  if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n  if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n  if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n  return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // @ts-ignore\n  if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  abytes(bytes);\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);\n    }\n  } else if (isBytes(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(title + ' must be hex string or Uint8Array');\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error('string expected');\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint): boolean {\n  return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint): void {\n  // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n  // consider P=256n, min=0n, max=P\n  // - a for min=0 would require -1:          `inRange('x', x, -1n, P)`\n  // - b would commonly require subtraction:  `inRange('x', x, 0n, P - 1n)`\n  // - our way is the cleanest:               `inRange('x', x, 0n, P)\n  if (!inRange(n, min, max))\n    throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nexport function bitLen(n: bigint): number {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number): bigint {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean): bigint {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number): bigint => (_1n << BigInt(n)) - _1n;\n\n// DRBG\n\nconst u8n = (len: number) => new Uint8Array(len); // creates Uint8Array\nconst u8fr = (arr: ArrayLike<number>) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n(0)) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any): boolean => typeof val === 'bigint',\n  function: (val: any): boolean => typeof val === 'function',\n  boolean: (val: any): boolean => typeof val === 'boolean',\n  string: (val: any): boolean => typeof val === 'string',\n  stringOrUint8Array: (val: any): boolean => typeof val === 'string' || isBytes(val),\n  isSafeInteger: (val: any): boolean => Number.isSafeInteger(val),\n  array: (val: any): boolean => Array.isArray(val),\n  field: (val: any, object: any): any => (object as any).Fp.isValid(val),\n  hash: (val: any): boolean => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n): T {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function') throw new Error('invalid validator function');\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        'param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = (): never => {\n  throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized<T extends object, R, O extends any[]>(\n  fn: (arg: T, ...args: O) => R\n): (arg: T, ...args: O) => R {\n  const map = new WeakMap<T, R>();\n  return (arg: T, ...args: O): R => {\n    const val = map.get(arg);\n    if (val !== undefined) return val;\n    const computed = fn(arg, ...args);\n    map.set(arg, computed);\n    return computed;\n  };\n}\n", "/**\n * Utils for modular division and finite fields.\n * A finite field over 11 is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { anumber } from '@noble/hashes/utils';\nimport {\n  bitMask,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  numberToBytesBE,\n  numberToBytesLE,\n  validateObject,\n} from './utils.ts';\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3);\n// prettier-ignore\nconst _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _8n = /* @__PURE__ */ BigInt(8);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * TODO: remove.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  return FpPow(Field(modulo), num, power);\n}\n\n/** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n/**\n * Inverses number over modulo.\n * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).\n */\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n) throw new Error('invert: expected non-zero number');\n  if (modulo <= _0n) throw new Error('invert: expected positive modulus, got ' + modulo);\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n// Not all roots are possible! Example which will throw:\n// const NUM =\n// n = 72057594037927816n;\n// Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));\nfunction sqrt3mod4<T>(Fp: IField<T>, n: T) {\n  const p1div4 = (Fp.ORDER + _1n) / _4n;\n  const root = Fp.pow(n, p1div4);\n  // Throw if root^2 != n\n  if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n  return root;\n}\n\nfunction sqrt5mod8<T>(Fp: IField<T>, n: T) {\n  const p5div8 = (Fp.ORDER - _5n) / _8n;\n  const n2 = Fp.mul(n, _2n);\n  const v = Fp.pow(n2, p5div8);\n  const nv = Fp.mul(n, v);\n  const i = Fp.mul(Fp.mul(nv, _2n), v);\n  const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n  if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n  return root;\n}\n\n// TODO: Commented-out for now. Provide test vectors.\n// Tonelli is too slow for extension fields Fp2.\n// That means we can't use sqrt (c1, c2...) even for initialization constants.\n// if (P % _16n === _9n) return sqrt9mod16;\n// // prettier-ignore\n// function sqrt9mod16<T>(Fp: IField<T>, n: T, p7div16?: bigint) {\n//   if (p7div16 === undefined) p7div16 = (Fp.ORDER + BigInt(7)) / _16n;\n//   const c1 = Fp.sqrt(Fp.neg(Fp.ONE)); //  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n//   const c2 = Fp.sqrt(c1);             //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n//   const c3 = Fp.sqrt(Fp.neg(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n//   const c4 = p7div16;                 //  4. c4 = (q + 7) / 16        # Integer arithmetic\n//   let tv1 = Fp.pow(n, c4);            //  1. tv1 = x^c4\n//   let tv2 = Fp.mul(c1, tv1);          //  2. tv2 = c1 * tv1\n//   const tv3 = Fp.mul(c2, tv1);        //  3. tv3 = c2 * tv1\n//   let tv4 = Fp.mul(c3, tv1);          //  4. tv4 = c3 * tv1\n//   const e1 = Fp.eql(Fp.sqr(tv2), n);  //  5.  e1 = (tv2^2) == x\n//   const e2 = Fp.eql(Fp.sqr(tv3), n);  //  6.  e2 = (tv3^2) == x\n//   tv1 = Fp.cmov(tv1, tv2, e1); //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n//   tv2 = Fp.cmov(tv4, tv3, e2); //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n//   const e3 = Fp.eql(Fp.sqr(tv2), n);  //  9.  e3 = (tv2^2) == x\n//   return Fp.cmov(tv1, tv2, e3); // 10.  z = CMOV(tv1, tv2, e3) # Select the sqrt from tv1 and tv2\n// }\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  // Initialization (precomputation).\n  if (P < BigInt(3)) throw new Error('sqrt is not defined for small field');\n  // Factor P - 1 = Q * 2^S, where Q is odd\n  let Q = P - _1n;\n  let S = 0;\n  while (Q % _2n === _0n) {\n    Q /= _2n;\n    S++;\n  }\n\n  // Find the first quadratic non-residue Z >= 2\n  let Z = _2n;\n  const _Fp = Field(P);\n  while (FpLegendre(_Fp, Z) === 1) {\n    // Basic primality test for P. After x iterations, chance of\n    // not finding quadratic non-residue is 2^x, so 2^1000.\n    if (Z++ > 1000) throw new Error('Cannot find square root: probably non-prime P');\n  }\n  // Fast-path; usually done before Z, but we do \"primality test\".\n  if (S === 1) return sqrt3mod4;\n\n  // Slow-path\n  // TODO: test on Fp2 and others\n  let cc = _Fp.pow(Z, Q); // c = z^Q\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    if (Fp.is0(n)) return n;\n    // Check if n is a quadratic residue using Legendre symbol\n    if (FpLegendre(Fp, n) !== 1) throw new Error('Cannot find square root');\n\n    // Initialize variables for the main loop\n    let M = S;\n    let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp\n    let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor\n    let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root\n\n    // Main loop\n    // while t != 1\n    while (!Fp.eql(t, Fp.ONE)) {\n      if (Fp.is0(t)) return Fp.ZERO; // if t=0 return R=0\n      let i = 1;\n\n      // Find the smallest i >= 1 such that t^(2^i) \u2261 1 (mod P)\n      let t_tmp = Fp.sqr(t); // t^(2^1)\n      while (!Fp.eql(t_tmp, Fp.ONE)) {\n        i++;\n        t_tmp = Fp.sqr(t_tmp); // t^(2^2)...\n        if (i === M) throw new Error('Cannot find square root');\n      }\n\n      // Calculate the exponent for b: 2^(M - i - 1)\n      const exponent = _1n << BigInt(M - i - 1); // bigint is important\n      const b = Fp.pow(c, exponent); // b = 2^(M - i - 1)\n\n      // Update variables\n      M = i;\n      c = Fp.sqr(b); // c = b^2\n      t = Fp.mul(t, c); // t = (t * b^2)\n      R = Fp.mul(R, b); // R = R*b\n    }\n    return R;\n  };\n}\n\n/**\n * Square root for a finite field. Will try optimized versions first:\n *\n * 1. P \u2261 3 (mod 4)\n * 2. P \u2261 5 (mod 8)\n * 3. Tonelli-Shanks algorithm\n *\n * Different algorithms can give different roots, it is up to user to decide which one they want.\n * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n */\nexport function FpSqrt(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  // P \u2261 3 (mod 4) => \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) return sqrt3mod4;\n  // P \u2261 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf\n  if (P % _8n === _5n) return sqrt5mod8;\n  // P \u2261 9 (mod 16) not implemented, see above\n  // Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint): boolean =>\n  (mod(num, modulo) & _1n) === _1n;\n\n/** Field is not always over prime: for example, Fp2 has ORDER(q)=p^m. */\nexport interface IField<T> {\n  ORDER: bigint;\n  isLE: boolean;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>): IField<T> {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(Fp: IField<T>, num: T, power: bigint): T {\n  if (power < _0n) throw new Error('invalid exponent, negatives unsupported');\n  if (power === _0n) return Fp.ONE;\n  if (power === _1n) return num;\n  let p = Fp.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = Fp.mul(p, d);\n    d = Fp.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * Exception-free. Will return `undefined` for 0 elements.\n * @param passZero map 0 to 0 (instead of undefined)\n */\nexport function FpInvertBatch<T>(Fp: IField<T>, nums: T[], passZero = false): T[] {\n  const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined);\n  // Walk from first to last, multiply them by each other MOD p\n  const multipliedAcc = nums.reduce((acc, num, i) => {\n    if (Fp.is0(num)) return acc;\n    inverted[i] = acc;\n    return Fp.mul(acc, num);\n  }, Fp.ONE);\n  // Invert last element\n  const invertedAcc = Fp.inv(multipliedAcc);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (Fp.is0(num)) return acc;\n    inverted[i] = Fp.mul(acc, inverted[i]);\n    return Fp.mul(acc, num);\n  }, invertedAcc);\n  return inverted;\n}\n\n// TODO: remove\nexport function FpDiv<T>(Fp: IField<T>, lhs: T, rhs: T | bigint): T {\n  return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs));\n}\n\n/**\n * Legendre symbol.\n * Legendre constant is used to calculate Legendre symbol (a | p)\n * which denotes the value of a^((p-1)/2) (mod p).\n *\n * * (a | p) \u2261 1    if a is a square (mod p), quadratic residue\n * * (a | p) \u2261 -1   if a is not a square (mod p), quadratic non residue\n * * (a | p) \u2261 0    if a \u2261 0 (mod p)\n */\nexport function FpLegendre<T>(Fp: IField<T>, n: T): -1 | 0 | 1 {\n  // We can use 3rd argument as optional cache of this value\n  // but seems unneeded for now. The operation is very fast.\n  const p1mod2 = (Fp.ORDER - _1n) / _2n;\n  const powered = Fp.pow(n, p1mod2);\n  const yes = Fp.eql(powered, Fp.ONE);\n  const zero = Fp.eql(powered, Fp.ZERO);\n  const no = Fp.eql(powered, Fp.neg(Fp.ONE));\n  if (!yes && !zero && !no) throw new Error('invalid Legendre symbol result');\n  return yes ? 1 : zero ? 0 : -1;\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(Fp: IField<T>, n: T): boolean {\n  const l = FpLegendre(Fp, n);\n  return l === 1;\n}\n\n// CURVE.n lengths\nexport function nLength(\n  n: bigint,\n  nBitLength?: number\n): {\n  nBitLength: number;\n  nByteLength: number;\n} {\n  // Bit size, byte size of CURVE.n\n  if (nBitLength !== undefined) anumber(nBitLength);\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a finite field over prime.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * Fragile: always run a benchmark on a change.\n * Security note: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you're doing.\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n  let sqrtP: ReturnType<typeof FpSqrt>; // cached sqrtP\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    isLE,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error('invalid field element: expected bigint, got ' + typeof num);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt:\n      redef.sqrt ||\n      ((n) => {\n        if (!sqrtP) sqrtP = FpSqrt(ORDER);\n        return sqrtP(f, n);\n      }),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes) => {\n      if (bytes.length !== BYTES)\n        throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n    // TODO: we don't need it here, move out to separate fn\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // We can't move this out because Fp6, Fp12 implement it\n    // and it's unclear what to return in there.\n    cmov: (a, b, c) => (c ? b : a),\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T): T {\n  if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T): T {\n  if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use `mapKeyToField` instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(\n      'hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen\n    );\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n  const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { type IField, nLength, validateField } from './modular.ts';\nimport { bitLen, bitMask, validateObject } from './utils.ts';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\nfunction constTimeNegate<T extends Group<T>>(condition: boolean, item: T): T {\n  const neg = item.negate();\n  return condition ? neg : item;\n}\n\nfunction validateW(W: number, bits: number) {\n  if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n    throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\n\n/** Internal wNAF opts for specific W and scalarBits */\nexport type WOpts = {\n  windows: number;\n  windowSize: number;\n  mask: bigint;\n  maxNumber: number;\n  shiftBy: bigint;\n};\n\nfunction calcWOpts(W: number, scalarBits: number): WOpts {\n  validateW(W, scalarBits);\n  const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero\n  const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero\n  const maxNumber = 2 ** W; // W=8 256\n  const mask = bitMask(W); // W=8 255 == mask 0b11111111\n  const shiftBy = BigInt(W); // W=8 8\n  return { windows, windowSize, mask, maxNumber, shiftBy };\n}\n\nfunction calcOffsets(n: bigint, window: number, wOpts: WOpts) {\n  const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n  let wbits = Number(n & mask); // extract W bits.\n  let nextN = n >> shiftBy; // shift number by W bits.\n\n  // What actually happens here:\n  // const highestBit = Number(mask ^ (mask >> 1n));\n  // let wbits2 = wbits - 1; // skip zero\n  // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~);\n\n  // split if bits > max: +224 => 256-32\n  if (wbits > windowSize) {\n    // we skip zero, which means instead of `>= size-1`, we do `> size`\n    wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here.\n    nextN += _1n; // +256 (carry)\n  }\n  const offsetStart = window * windowSize;\n  const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero\n  const isZero = wbits === 0; // is current window slice a 0?\n  const isNeg = wbits < 0; // is current window slice negative?\n  const isNegF = window % 2 !== 0; // fake random statement for noise\n  const offsetF = offsetStart; // fake offset for noise\n  return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\n\nfunction validateMSMPoints(points: any[], c: any) {\n  if (!Array.isArray(points)) throw new Error('array expected');\n  points.forEach((p, i) => {\n    if (!(p instanceof c)) throw new Error('invalid point at index ' + i);\n  });\n}\nfunction validateMSMScalars(scalars: any[], field: any) {\n  if (!Array.isArray(scalars)) throw new Error('array of scalars expected');\n  scalars.forEach((s, i) => {\n    if (!field.isValid(s)) throw new Error('invalid scalar at index ' + i);\n  });\n}\n\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes.\n// Allows to make points frozen / immutable.\nconst pointPrecomputes = new WeakMap<any, any[]>();\nconst pointWindowSizes = new WeakMap<any, number>();\n\nfunction getW(P: any): number {\n  return pointWindowSizes.get(P) || 1;\n}\n\nexport type IWNAF<T extends Group<T>> = {\n  constTimeNegate: <T extends Group<T>>(condition: boolean, item: T) => T;\n  hasPrecomputes(elm: T): boolean;\n  unsafeLadder(elm: T, n: bigint, p?: T): T;\n  precomputeWindow(elm: T, W: number): Group<T>[];\n  getPrecomputes(W: number, P: T, transform: Mapper<T>): T[];\n  wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T };\n  wNAFUnsafe(W: number, precomputes: T[], n: bigint, acc?: T): T;\n  wNAFCached(P: T, n: bigint, transform: Mapper<T>): { p: T; f: T };\n  wNAFCachedUnsafe(P: T, n: bigint, transform: Mapper<T>, prev?: T): T;\n  setWindowSize(P: T, W: number): void;\n};\n\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Scalars should always be less than curve order: this should be checked inside of a curve itself.\n * Creates precomputation tables for fast multiplication:\n * - private scalar is split by fixed size windows of W bits\n * - every window point is collected from window's table & added to accumulator\n * - since windows are different, same point inside tables won't be accessed more than once per calc\n * - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n * - +1 window is neccessary for wNAF\n * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n *\n * @todo Research returning 2d JS array of windows, instead of a single window.\n * This would allow windows to be in different memory locations\n */\nexport function wNAF<T extends Group<T>>(c: GroupConstructor<T>, bits: number): IWNAF<T> {\n  return {\n    constTimeNegate,\n\n    hasPrecomputes(elm: T) {\n      return getW(elm) !== 1;\n    },\n\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint, p = c.ZERO) {\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\n\n    /**\n     * Creates a wNAF precomputation window. Used for caching.\n     * Default window size is set by `utils.precompute()` and is equal to 8.\n     * Number of precomputed points depends on the curve size:\n     * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B is the bitlength of the curve order.\n     * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n     * @param elm Point instance\n     * @param W window size\n     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = calcWOpts(W, bits);\n      const points: T[] = [];\n      let p: T = elm;\n      let base = p;\n      for (let window = 0; window < windows; window++) {\n        base = p;\n        points.push(base);\n        // i=1, bc we skip 0\n        for (let i = 1; i < windowSize; i++) {\n          base = base.add(p);\n          points.push(base);\n        }\n        p = base.double();\n      }\n      return points;\n    },\n\n    /**\n     * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @returns real and fake (for const-time) points\n     */\n    wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n      // Smaller version:\n      // https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n      // TODO: check the scalar is less than group order?\n      // wNAF behavior is undefined otherwise. But have to carefully remove\n      // other checks before wNAF. ORDER == bits here.\n      // Accumulators\n      let p = c.ZERO;\n      let f = c.BASE;\n      // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n      // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n      // there is negate now: it is possible that negated element from low value\n      // would be the same as high element, which will create carry into next window.\n      // It's not obvious how this can fail, but still worth investigating later.\n      const wo = calcWOpts(W, bits);\n      for (let window = 0; window < wo.windows; window++) {\n        // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise\n        const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo);\n        n = nextN;\n        if (isZero) {\n          // bits are 0: add garbage to fake point\n          // Important part for const-time getPublicKey: add random \"noise\" point to f.\n          f = f.add(constTimeNegate(isNegF, precomputes[offsetF]));\n        } else {\n          // bits are 1: add to result point\n          p = p.add(constTimeNegate(isNeg, precomputes[offset]));\n        }\n      }\n      // Return both real and fake points: JIT won't eliminate f.\n      // At this point there is a way to F be infinity-point even if p is not,\n      // which makes it less const-time: around 1 bigint multiply.\n      return { p, f };\n    },\n\n    /**\n     * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @param acc accumulator point to add result of multiplication\n     * @returns point\n     */\n    wNAFUnsafe(W: number, precomputes: T[], n: bigint, acc: T = c.ZERO): T {\n      const wo = calcWOpts(W, bits);\n      for (let window = 0; window < wo.windows; window++) {\n        if (n === _0n) break; // Early-exit, skip 0 value\n        const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo);\n        n = nextN;\n        if (isZero) {\n          // Window bits are 0: skip processing.\n          // Move to next window.\n          continue;\n        } else {\n          const item = precomputes[offset];\n          acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM\n        }\n      }\n      return acc;\n    },\n\n    getPrecomputes(W: number, P: T, transform: Mapper<T>): T[] {\n      // Calculate precomputes on a first run, reuse them after\n      let comp = pointPrecomputes.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) pointPrecomputes.set(P, transform(comp));\n      }\n      return comp;\n    },\n\n    wNAFCached(P: T, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      const W = getW(P);\n      return this.wNAF(W, this.getPrecomputes(W, P, transform), n);\n    },\n\n    wNAFCachedUnsafe(P: T, n: bigint, transform: Mapper<T>, prev?: T): T {\n      const W = getW(P);\n      if (W === 1) return this.unsafeLadder(P, n, prev); // For W=1 ladder is ~x2 faster\n      return this.wNAFUnsafe(W, this.getPrecomputes(W, P, transform), n, prev);\n    },\n\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n\n    setWindowSize(P: T, W: number) {\n      validateW(W, bits);\n      pointWindowSizes.set(P, W);\n      pointPrecomputes.delete(P);\n    },\n  };\n}\n\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster than precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka private keys / bigints)\n */\nexport function pippenger<T extends Group<T>>(\n  c: GroupConstructor<T>,\n  fieldN: IField<bigint>,\n  points: T[],\n  scalars: bigint[]\n): T {\n  // If we split scalars by some window (let's say 8 bits), every chunk will only\n  // take 256 buckets even if there are 4096 scalars, also re-uses double.\n  // TODO:\n  // - https://eprint.iacr.org/2024/750.pdf\n  // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n  // 0 is accepted in scalars\n  validateMSMPoints(points, c);\n  validateMSMScalars(scalars, fieldN);\n  const plength = points.length;\n  const slength = scalars.length;\n  if (plength !== slength) throw new Error('arrays of points and scalars must have equal length');\n  // if (plength === 0) throw new Error('array must be of length >= 2');\n  const zero = c.ZERO;\n  const wbits = bitLen(BigInt(plength));\n  let windowSize = 1; // bits\n  if (wbits > 12) windowSize = wbits - 3;\n  else if (wbits > 4) windowSize = wbits - 2;\n  else if (wbits > 0) windowSize = 2;\n  const MASK = bitMask(windowSize);\n  const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array\n  const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n  let sum = zero;\n  for (let i = lastBits; i >= 0; i -= windowSize) {\n    buckets.fill(zero);\n    for (let j = 0; j < slength; j++) {\n      const scalar = scalars[j];\n      const wbits = Number((scalar >> BigInt(i)) & MASK);\n      buckets[wbits] = buckets[wbits].add(points[j]);\n    }\n    let resI = zero; // not using this will do small speed-up, but will lose ct\n    // Skip first bucket, because it is zero\n    for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n      sumI = sumI.add(buckets[j]);\n      resI = resI.add(sumI);\n    }\n    sum = sum.add(resI);\n    if (i !== 0) for (let j = 0; j < windowSize; j++) sum = sum.double();\n  }\n  return sum as T;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nexport function precomputeMSMUnsafe<T extends Group<T>>(\n  c: GroupConstructor<T>,\n  fieldN: IField<bigint>,\n  points: T[],\n  windowSize: number\n): (scalars: bigint[]) => T {\n  /**\n   * Performance Analysis of Window-based Precomputation\n   *\n   * Base Case (256-bit scalar, 8-bit window):\n   * - Standard precomputation requires:\n   *   - 31 additions per scalar \u00D7 256 scalars = 7,936 ops\n   *   - Plus 255 summary additions = 8,191 total ops\n   *   Note: Summary additions can be optimized via accumulator\n   *\n   * Chunked Precomputation Analysis:\n   * - Using 32 chunks requires:\n   *   - 255 additions per chunk\n   *   - 256 doublings\n   *   - Total: (255 \u00D7 32) + 256 = 8,416 ops\n   *\n   * Memory Usage Comparison:\n   * Window Size | Standard Points | Chunked Points\n   * ------------|-----------------|---------------\n   *     4-bit   |     520         |      15\n   *     8-bit   |    4,224        |     255\n   *    10-bit   |   13,824        |   1,023\n   *    16-bit   |  557,056        |  65,535\n   *\n   * Key Advantages:\n   * 1. Enables larger window sizes due to reduced memory overhead\n   * 2. More efficient for smaller scalar counts:\n   *    - 16 chunks: (16 \u00D7 255) + 256 = 4,336 ops\n   *    - ~2x faster than standard 8,191 ops\n   *\n   * Limitations:\n   * - Not suitable for plain precomputes (requires 256 constant doublings)\n   * - Performance degrades with larger scalar counts:\n   *   - Optimal for ~256 scalars\n   *   - Less efficient for 4096+ scalars (Pippenger preferred)\n   */\n  validateW(windowSize, fieldN.BITS);\n  validateMSMPoints(points, c);\n  const zero = c.ZERO;\n  const tableSize = 2 ** windowSize - 1; // table size (without zero)\n  const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n  const MASK = bitMask(windowSize);\n  const tables = points.map((p: T) => {\n    const res = [];\n    for (let i = 0, acc = p; i < tableSize; i++) {\n      res.push(acc);\n      acc = acc.add(p);\n    }\n    return res;\n  });\n  return (scalars: bigint[]): T => {\n    validateMSMScalars(scalars, fieldN);\n    if (scalars.length > points.length)\n      throw new Error('array of scalars must be smaller than array of points');\n    let res = zero;\n    for (let i = 0; i < chunks; i++) {\n      // No need to double if accumulator is still zero.\n      if (res !== zero) for (let j = 0; j < windowSize; j++) res = res.double();\n      const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n      for (let j = 0; j < scalars.length; j++) {\n        const n = scalars[j];\n        const curr = Number((n >> shiftBy) & MASK);\n        if (!curr) continue; // skip zero scalars chunks\n        res = res.add(tables[j][curr - 1]);\n      }\n    }\n    return res;\n  };\n}\n\n/**\n * Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n * Though generator can be different (Fp2 / Fp6 for BLS).\n */\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(\n  curve: BasicCurve<FP> & T\n): Readonly<\n  {\n    readonly nBitLength: number;\n    readonly nByteLength: number;\n  } & BasicCurve<FP> &\n    T & {\n      p: bigint;\n    }\n> {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/**\n * Short Weierstrass curve methods. The formula is: y\u00B2 = x\u00B3 + ax + b.\n *\n * ### Parameters\n *\n * To initialize a weierstrass curve, one needs to pass following params:\n *\n * * a: formula param\n * * b: formula param\n * * Fp: finite field of prime characteristic P; may be complex (Fp2). Arithmetics is done in field\n * * n: order of prime subgroup a.k.a total amount of valid curve points\n * * Gx: Base point (x, y) aka generator point. Gx = x coordinate\n * * Gy: ...y coordinate\n * * h: cofactor, usually 1. h*n = curve group order (n is only subgroup order)\n * * lowS: whether to enable (default) or disable \"low-s\" non-malleable signatures\n *\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance\n * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create\n * unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * @todo https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// prettier-ignore\nimport {\n  pippenger, validateBasic, wNAF,\n  type AffinePoint, type BasicCurve, type Group, type GroupConstructor\n} from './curve.ts';\n// prettier-ignore\nimport {\n  Field,\n  FpInvertBatch,\n  getMinHashLength, invert, mapHashToField, mod, validateField,\n  type IField\n} from './modular.ts';\n// prettier-ignore\nimport {\n  aInRange, abool,\n  bitMask,\n  bytesToHex, bytesToNumberBE, concatBytes, createHmacDrbg, ensureBytes, hexToBytes,\n  inRange, isBytes, memoized, numberToBytesBE, numberToHexUnpadded, validateObject,\n  type CHash, type Hex, type PrivKey\n} from './utils.ts';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\n/**\n * When Weierstrass curve has `a=0`, it becomes Koblitz curve.\n * Koblitz curves allow using **efficiently-computable GLV endomorphism \u03C8**.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n *\n * Endomorphism consists of beta, lambda and splitScalar:\n *\n * 1. GLV endomorphism \u03C8 transforms a point: `P = (x, y) \u21A6 \u03C8(P) = (\u03B2\u00B7x mod p, y)`\n * 2. GLV scalar decomposition transforms a scalar: `k \u2261 k\u2081 + k\u2082\u00B7\u03BB (mod n)`\n * 3. Then these are combined: `k\u00B7P = k\u2081\u00B7P + k\u2082\u00B7\u03C8(P)`\n * 4. Two 128-bit point-by-scalar multiplications + one point addition is faster than\n *    one 256-bit multiplication.\n *\n * where\n * * beta: \u03B2 \u2208 F\u209A with \u03B2\u00B3 = 1, \u03B2 \u2260 1\n * * lambda: \u03BB \u2208 F\u2099 with \u03BB\u00B3 = 1, \u03BB \u2260 1\n * * splitScalar decomposes k \u21A6 k\u2081, k\u2082, by using reduced basis vectors.\n *   Gauss lattice reduction calculates them from initial basis vectors `(n, 0), (-\u03BB, 0)`\n *\n * Check out `test/misc/endomorphism.js` and\n * [gist](https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066).\n */\nexport type EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts;\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\nexport type Entropy = Hex | boolean;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean; format?: 'compact' | 'der' | undefined };\n\nfunction validateSigVerOpts(opts: SignOpts | VerOpts) {\n  if (opts.lowS !== undefined) abool('lowS', opts.lowS);\n  if (opts.prehash !== undefined) abool('prehash', opts.prehash);\n}\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  toAffine(iz?: T): AffinePoint<T>;\n  toHex(isCompressed?: boolean): string;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n  msm(points: ProjPointType<T>[], scalars: bigint[]): ProjPointType<T>;\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nexport type CurvePointsTypeWithLength<T> = Readonly<\n  CurvePointsType<T> & { nByteLength: number; nBitLength: number }\n>;\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>): CurvePointsTypeWithLength<T> {\n  const opts = validateBasic(curve);\n  validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowInfinityPoint: 'boolean',\n      allowedPrivateKeyLengths: 'array',\n      clearCofactor: 'function',\n      fromBytes: 'function',\n      isTorsionFree: 'function',\n      toBytes: 'function',\n      wrapPrivateKey: 'boolean',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('invalid endo: CURVE.a must be 0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('invalid endo: expected \"beta\": bigint and \"splitScalar\": function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  CURVE: ReturnType<typeof validatePointOpts<T>>;\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\nexport class DERErr extends Error {\n  constructor(m = '') {\n    super(m);\n  }\n}\nexport type IDER = {\n  // asn.1 DER encoding utils\n  Err: typeof DERErr;\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string) => string;\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array };\n  };\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint): string;\n    decode(data: Uint8Array): bigint;\n  };\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint };\n  hexFromSig(sig: { r: bigint; s: bigint }): string;\n};\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n *     [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexport const DER: IDER = {\n  // asn.1 DER encoding utils\n  Err: DERErr,\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string): string => {\n      const { Err: E } = DER;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length & 1) throw new E('tlv.encode: unpadded data');\n      const dataLen = data.length / 2;\n      const len = numberToHexUnpadded(dataLen);\n      if ((len.length / 2) & 0b1000_0000) throw new E('tlv.encode: long form length too big');\n      // length of length with long form flag\n      const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) | 0b1000_0000) : '';\n      const t = numberToHexUnpadded(tag);\n      return t + lenLen + len + data;\n    },\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array } {\n      const { Err: E } = DER;\n      let pos = 0;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length < 2 || data[pos++] !== tag) throw new E('tlv.decode: wrong tlv');\n      const first = data[pos++];\n      const isLong = !!(first & 0b1000_0000); // First bit of first length byte is flag for short/long form\n      let length = 0;\n      if (!isLong) length = first;\n      else {\n        // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n        const lenLen = first & 0b0111_1111;\n        if (!lenLen) throw new E('tlv.decode(long): indefinite length not supported');\n        if (lenLen > 4) throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n        const lengthBytes = data.subarray(pos, pos + lenLen);\n        if (lengthBytes.length !== lenLen) throw new E('tlv.decode: length bytes not complete');\n        if (lengthBytes[0] === 0) throw new E('tlv.decode(long): zero leftmost byte');\n        for (const b of lengthBytes) length = (length << 8) | b;\n        pos += lenLen;\n        if (length < 128) throw new E('tlv.decode(long): not minimal encoding');\n      }\n      const v = data.subarray(pos, pos + length);\n      if (v.length !== length) throw new E('tlv.decode: wrong value length');\n      return { v, l: data.subarray(pos + length) };\n    },\n  },\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint): string {\n      const { Err: E } = DER;\n      if (num < _0n) throw new E('integer: negative integers are not allowed');\n      let hex = numberToHexUnpadded(num);\n      // Pad with zero byte if negative flag is present\n      if (Number.parseInt(hex[0], 16) & 0b1000) hex = '00' + hex;\n      if (hex.length & 1) throw new E('unexpected DER parsing assertion: unpadded hex');\n      return hex;\n    },\n    decode(data: Uint8Array): bigint {\n      const { Err: E } = DER;\n      if (data[0] & 0b1000_0000) throw new E('invalid signature integer: negative');\n      if (data[0] === 0x00 && !(data[1] & 0b1000_0000))\n        throw new E('invalid signature integer: unnecessary leading zero');\n      return bytesToNumberBE(data);\n    },\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E, _int: int, _tlv: tlv } = DER;\n    const data = ensureBytes('signature', hex);\n    const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n    if (seqLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n    const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n    const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n    if (sLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n    return { r: int.decode(rBytes), s: int.decode(sBytes) };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    const { _tlv: tlv, _int: int } = DER;\n    const rs = tlv.encode(0x02, int.encode(sig.r));\n    const ss = tlv.encode(0x02, int.encode(sig.s));\n    const seq = rs + ss;\n    return tlv.encode(0x30, seq);\n  },\n};\n\nfunction numToSizedHex(num: bigint, size: number): string {\n  return bytesToHex(numberToBytesBE(num, size));\n}\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>): CurvePointsRes<T> {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n  const Fn = Field(CURVE.n, CURVE.nBitLength);\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((_c: ProjConstructor<T>, point: ProjPointType<T>, _isCompressed: boolean) => {\n      const a = point.toAffine();\n      return concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\n      // const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n      const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n      const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n      return { x, y };\n    });\n\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula. Takes x, returns y\u00B2.\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const { a, b } = CURVE;\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x\u00B2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x\u00B3 + a * x + b\n  }\n\n  function isValidXY(x: T, y: T): boolean {\n    const left = Fp.sqr(y); // y\u00B2\n    const right = weierstrassEquation(x); // x\u00B3 + ax + b\n    return Fp.eql(left, right);\n  }\n\n  // Validate whether the passed curve params are valid.\n  // Test 1: equation y\u00B2 = x\u00B3 + ax + b should work for generator point.\n  if (!isValidXY(CURVE.Gx, CURVE.Gy)) throw new Error('bad curve params: generator point');\n\n  // Test 2: discriminant \u0394 part should be non-zero: 4a\u00B3 + 27b\u00B2 != 0.\n  // Guarantees curve is genus-1, smooth (non-singular).\n  const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n), _4n);\n  const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27));\n  if (Fp.is0(Fp.add(_4a3, _27b2))) throw new Error('bad curve params: a or b');\n\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return inRange(num, _1n, CURVE.n);\n  }\n  // Validates if priv key is valid and converts it to bigint.\n  // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n  function normPrivateKeyToScalar(key: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n: N } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (isBytes(key)) key = bytesToHex(key);\n      // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n      if (typeof key !== 'string' || !lengths.includes(key.length))\n        throw new Error('invalid private key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(\n        'invalid private key, expected hex or ' + nByteLength + ' bytes, got ' + typeof key\n      );\n    }\n    if (wrapPrivateKey) num = mod(num, N); // disabled by default, enabled for BLS\n    aInRange('private key', num, _1n, N); // num in range [1..N-1]\n    return num;\n  }\n\n  function aprjpoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n\n  // Memoized toAffine / validity check. They are heavy. Points are immutable.\n\n  // Converts Projective point to affine (x, y) coordinates.\n  // Can accept precomputed Z^-1 - for example, from invertBatch.\n  // (X, Y, Z) \u220B (x=X/Z, y=Y/Z)\n  const toAffineMemo = memoized((p: Point, iz?: T): AffinePoint<T> => {\n    const { px: x, py: y, pz: z } = p;\n    // Fast-path for normalized points\n    if (Fp.eql(z, Fp.ONE)) return { x, y };\n    const is0 = p.is0();\n    // If invZ was 0, we return zero point. However we still want to execute\n    // all operations, so we replace invZ with a random number, 1.\n    if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n    const ax = Fp.mul(x, iz);\n    const ay = Fp.mul(y, iz);\n    const zz = Fp.mul(z, iz);\n    if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n    if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n    return { x: ax, y: ay };\n  });\n  // NOTE: on exception this will crash 'cached' and no value will be set.\n  // Otherwise true will be return\n  const assertValidMemo = memoized((p: Point) => {\n    if (p.is0()) {\n      // (0, 1, 0) aka ZERO is invalid in most contexts.\n      // In BLS, ZERO can be serialized, so we allow it.\n      // (0, 0, 0) is invalid representation of ZERO.\n      if (CURVE.allowInfinityPoint && !Fp.is0(p.py)) return;\n      throw new Error('bad point: ZERO');\n    }\n    // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n    const { x, y } = p.toAffine();\n    // Check if x, y are valid field elements\n    if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n    if (!isValidXY(x, y)) throw new Error('bad point: equation left != right');\n    if (!p.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    return true;\n  });\n\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (X, Y, Z) \u220B (x=X/Z, y=Y/Z)\n   * Default Point works in 2d / affine coordinates: (x, y)\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements ProjPointType<T> {\n    // base / generator point\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    // zero / infinity / identity point\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0\n    readonly px: T;\n    readonly py: T;\n    readonly pz: T;\n\n    constructor(px: T, py: T, pz: T) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py) || Fp.is0(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n      this.px = px;\n      this.py = py;\n      this.pz = pz;\n      Object.freeze(this);\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n      // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n      if (is0(x) && is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     * Takes a bunch of Projective Points but executes only one\n     * inversion on all of them. Inversion is very slow operation,\n     * so this improves performance massively.\n     * Optimization: converts a list of projective points to a list of identical points with Z=1.\n     */\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = FpInvertBatch(\n        Fp,\n        points.map((p) => p.pz)\n      );\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\n\n    // Multiscalar Multiplication\n    static msm(points: Point[], scalars: bigint[]): Point {\n      return pippenger(Point, Fn, points, scalars);\n    }\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      wnaf.setWindowSize(this, windowSize);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      assertValidMemo(this);\n    }\n\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\n      aprjpoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      aprjpoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    is0() {\n      return this.equals(Point.ZERO);\n    }\n\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, n, Point.normalizeZ);\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed private key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(sc: bigint): Point {\n      const { endo, n: N } = CURVE;\n      aInRange('scalar', sc, _0n, N);\n      const I = Point.ZERO;\n      if (sc === _0n) return I;\n      if (this.is0() || sc === _1n) return this;\n\n      // Case a: no endomorphism. Case b: has precomputes.\n      if (!endo || wnaf.hasPrecomputes(this))\n        return wnaf.wNAFCachedUnsafe(this, sc, Point.normalizeZ);\n\n      // Case c: endomorphism\n      /** See docs for {@link EndomorphismOpts} */\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(sc);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) k2p = k2p.negate();\n      k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n      return k1p.add(k2p);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      const { endo, n: N } = CURVE;\n      aInRange('scalar', scalar, _1n, N);\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      /** See docs for {@link EndomorphismOpts} */\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(scalar);\n        let { p: k1p, f: f1p } = this.wNAF(k1);\n        let { p: k2p, f: f2p } = this.wNAF(k2);\n        k1p = wnaf.constTimeNegate(k1neg, k1p);\n        k2p = wnaf.constTimeNegate(k2neg, k2p);\n        k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n        point = k1p.add(k2p);\n        fake = f1p.add(f2p);\n      } else {\n        const { p, f } = this.wNAF(scalar);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return Point.normalizeZ([point, fake])[0];\n    }\n\n    /**\n     * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n     * Not using Strauss-Shamir trick: precomputation tables are faster.\n     * The trick could be useful if both P and Q are not G (not in our case).\n     * @returns non-zero affine point\n     */\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // Select faster multiply() method\n      ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n      const sum = mul(this, a).add(mul(Q, b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      return toAffineMemo(this, iz);\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      abool('isCompressed', isCompressed);\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      abool('isCompressed', isCompressed);\n      return bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\n  const { endo, nBitLength } = CURVE;\n  const wnaf = wNAF(Point, endo ? Math.ceil(nBitLength / 2) : nBitLength);\n  return {\n    CURVE,\n    ProjectivePoint: Point as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(\n  curve: CurveType\n): Readonly<CurveType & { nByteLength: number; nBitLength: number }> {\n  const opts = validateBasic(curve);\n  validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\n/**\n * Creates short weierstrass curve and ECDSA signature methods for it.\n * @example\n * import { Field } from '@noble/curves/abstract/modular';\n * // Before that, define BigInt-s: a, b, p, n, Gx, Gy\n * const curve = weierstrass({ a, b, Fp: Field(p), n, Gx, Gy, h: 1n })\n */\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const { Fp, n: CURVE_ORDER, nByteLength, nBitLength } = CURVE;\n  const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n  const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n  function modN(a: bigint) {\n    return mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(_c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = concatBytes;\n      abool('isCompressed', isCompressed);\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\n      const len = bytes.length;\n      const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // this.assertValidity() is done inside of fromHex\n      if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n        const x = bytesToNumberBE(tail);\n        if (!inRange(x, _1n, Fp.ORDER)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y: bigint;\n        try {\n          y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        } catch (sqrtError) {\n          const suffix = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n          throw new Error('Point is not on curve' + suffix);\n        }\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\n      } else if (len === uncompressedLen && head === 0x04) {\n        const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n        const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n        return { x, y };\n      } else {\n        const cl = compressedLen;\n        const ul = uncompressedLen;\n        throw new Error(\n          'invalid Point, expected length of ' + cl + ', or uncompressed ' + ul + ', got ' + len\n        );\n      }\n    },\n  });\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    readonly r: bigint;\n    readonly s: bigint;\n    readonly recovery?: number;\n    constructor(r: bigint, s: bigint, recovery?: number) {\n      aInRange('r', r, _1n, CURVE_ORDER); // r in [1..N]\n      aInRange('s', s, _1n, CURVE_ORDER); // s in [1..N]\n      this.r = r;\n      this.s = s;\n      if (recovery != null) this.recovery = recovery;\n      Object.freeze(this);\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: Hex) {\n      const l = nByteLength;\n      hex = ensureBytes('compactSignature', hex, l * 2);\n      return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n    }\n\n    // DER encoded ECDSA signature\n    // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n    static fromDER(hex: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    /**\n     * @todo remove\n     * @deprecated\n     */\n    assertValidity(): void {}\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n      const { r, s, recovery: rec } = this;\n      const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n      const prefix = (rec & 1) === 0 ? '02' : '03';\n      const R = Point.fromHex(prefix + numToSizedHex(radj, Fp.BYTES));\n      const ir = invN(radj); // r^-1\n      const u1 = modN(-h * ir); // -hr^-1\n      const u2 = modN(s * ir); // sr^-1\n      const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n      if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\n\n    // DER-encoded\n    toDERRawBytes() {\n      return hexToBytes(this.toDERHex());\n    }\n    toDERHex() {\n      return DER.hexFromSig(this);\n    }\n\n    // padded bytes of r, then padded bytes of s\n    toCompactRawBytes() {\n      return hexToBytes(this.toCompactHex());\n    }\n    toCompactHex() {\n      const l = nByteLength;\n      return numToSizedHex(this.r, l) + numToSizedHex(this.s, l);\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size\n     * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const length = getMinHashLength(CURVE.n);\n      return mapHashToField(CURVE.randomBytes(length), CURVE.n);\n    },\n\n    /**\n     * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n     * Allows to massively speed-up `point.multiply(scalar)`.\n     * @returns cached point\n     * @example\n     * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n     * fast.multiply(privKey); // much faster ECDH now\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n      return point;\n    },\n  };\n\n  /**\n   * Computes public key for a private key. Checks for validity of the private key.\n   * @param privateKey private key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean | undefined {\n    if (typeof item === 'bigint') return false;\n    if (item instanceof Point) return true;\n    const arr = ensureBytes('key', item);\n    const len = arr.length;\n    const fpl = Fp.BYTES;\n    const compLen = fpl + 1; // e.g. 33 for 32\n    const uncompLen = 2 * fpl + 1; // e.g. 65 for 32\n    if (CURVE.allowedPrivateKeyLengths || nByteLength === compLen) {\n      return undefined;\n    } else {\n      return len === compLen || len === uncompLen;\n    }\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from private key and public key.\n   * Checks: 1) private key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param privateA private key\n   * @param publicB different public key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA) === true) throw new Error('first arg must be private key');\n    if (isProbPub(publicB) === false) throw new Error('second arg must be public key');\n    const b = Point.fromHex(publicB); // check for being on-curve\n    return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n  }\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\n      // Our custom check \"just in case\", for protection against DoS\n      if (bytes.length > 8192) throw new Error('input is too large');\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - nBitLength; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\n      return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // NOTE: pads output with zero as per spec\n  const ORDER_MASK = bitMask(nBitLength);\n  /**\n   * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n   */\n  function int2octets(num: bigint): Uint8Array {\n    aInRange('num < 2^' + nBitLength, num, _0n, ORDER_MASK);\n    // works with order, can have different size than numToField!\n    return numberToBytesBE(num, nByteLength);\n  }\n\n  // Steps A, D of RFC6979 3.2\n  // Creates RFC6979 seed; converts msg/privKey to numbers.\n  // Used only in sign, not in verify.\n  // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order,\n  // this will be invalid at least for P521. Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { hash, randomBytes } = CURVE;\n    let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n    if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    validateSigVerOpts(opts);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(msgHash);\n    const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (ent != null && ent !== false) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n      const ik = invN(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n      const r = modN(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n      // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n      // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n      const s = modN(ik * modN(m + r * d)); // Not using blinding here\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = normalizeS(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr)/k mod n\n   * ```\n   * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n   * @param privKey private key\n   * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n   * @returns signature with recovery param\n   */\n  function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\n  /**\n   * Verifies a signature against message hash and public key.\n   * Rejects lowS signatures by default: to override,\n   * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   U1 = hs^-1 mod n\n   *   U2 = rs^-1 mod n\n   *   R = U1\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    const { lowS, prehash, format } = opts;\n\n    // Verify opts, deduce signature format\n    validateSigVerOpts(opts);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    if (format !== undefined && format !== 'compact' && format !== 'der')\n      throw new Error('format must be compact or der');\n    const isHex = typeof sg === 'string' || isBytes(sg);\n    const isObj =\n      !isHex &&\n      !format &&\n      typeof sg === 'object' &&\n      sg !== null &&\n      typeof sg.r === 'bigint' &&\n      typeof sg.s === 'bigint';\n    if (!isHex && !isObj)\n      throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance');\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (isObj) _sig = new Signature(sg.r, sg.s);\n      if (isHex) {\n        // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n        // Since DER can also be 2*nByteLength bytes, we check for it first.\n        try {\n          if (format !== 'compact') _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n        }\n        if (!_sig && format !== 'der') _sig = Signature.fromCompact(sg);\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      return false;\n    }\n    if (!_sig) return false;\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) msgHash = CURVE.hash(msgHash);\n    const { r, s } = _sig;\n    const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n    const is = invN(s); // s^-1\n    const u1 = modN(h * is); // u1 = hs^-1 mod n\n    const u2 = modN(r * is); // u2 = rs^-1 mod n\n    const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n    if (!R) return false;\n    const v = modN(R.x);\n    return v === r;\n  }\n  return {\n    CURVE,\n    getPublicKey,\n    getSharedSecret,\n    sign,\n    verify,\n    ProjectivePoint: Point,\n    Signature,\n    utils,\n  };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(\n  Fp: IField<T>,\n  Z: T\n): (u: T, v: T) => { isValid: boolean; value: T } {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n): (u: T) => { x: T; y: T } {\n  validateField(Fp);\n  if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n  if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, opts.Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, opts.B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, opts.A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    const tv4_inv = FpInvertBatch(Fp, [tv4], true)[0];\n    x = Fp.mul(x, tv4_inv); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n", "/**\n * Utilities for short weierstrass curves, combined with noble-hashes.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport type { CHash } from './abstract/utils.ts';\nimport { type CurveFn, type CurveType, weierstrass } from './abstract/weierstrass.ts';\n\n/** connects noble-curves to noble-hashes */\nexport function getHash(hash: CHash): {\n  hash: CHash;\n  hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => Uint8Array;\n  randomBytes: typeof randomBytes;\n} {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n/** Same API as @noble/hashes, with ability to create curve with custom hash */\nexport type CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport type CurveFnWithCreate = CurveFn & { create: (hash: CHash) => CurveFn };\n\nexport function createCurve(curveDef: CurveDef, defHash: CHash): CurveFnWithCreate {\n  const create = (hash: CHash): CurveFn => weierstrass({ ...curveDef, ...getHash(hash) });\n  return { ...create(defHash), create };\n}\n", "/**\n * hash-to-curve from RFC 9380.\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * https://www.rfc-editor.org/rfc/rfc9380\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { AffinePoint, Group, GroupConstructor } from './curve.ts';\nimport { FpInvertBatch, type IField, mod } from './modular.ts';\nimport type { CHash } from './utils.ts';\nimport { abytes, bytesToNumberBE, concatBytes, utf8ToBytes, validateObject } from './utils.ts';\n\nexport type UnicodeOrBytes = string | Uint8Array;\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\nexport type Opts = {\n  DST: UnicodeOrBytes;\n  p: bigint;\n  m: number;\n  k: number;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n};\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n  anum(value);\n  anum(length);\n  if (value < 0 || value >= 1 << (8 * length)) throw new Error('invalid I2OSP input: ' + value);\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr;\n}\n\nfunction anum(item: unknown): void {\n  if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\n/**\n * Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits.\n * [RFC 9380 5.3.1](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1).\n */\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  anum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (lenInBytes > 65535 || ell > 255) throw new Error('expand_message_xmd: invalid lenInBytes');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = i2osp(0, r_in_bytes);\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  for (let i = 1; i <= ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\n/**\n * Produces a uniformly random byte string using an extendable-output function (XOF) H.\n * 1. The collision resistance of H MUST be at least k bits.\n * 2. H MUST be an XOF that has been proved indifferentiable from\n *    a random oracle under a reasonable cryptographic assumption.\n * [RFC 9380 5.3.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2).\n */\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  anum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * [RFC 9380 5.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.2).\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {\n  validateObject(options, {\n    DST: 'stringOrUint8Array',\n    p: 'bigint',\n    m: 'isSafeInteger',\n    k: 'isSafeInteger',\n    hash: 'hash',\n  });\n  const { p, k, m, hash, expand, DST: _DST } = options;\n  abytes(msg);\n  anum(count);\n  const DST = typeof _DST === 'string' ? utf8ToBytes(_DST) : _DST;\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\nexport type XY<T> = (x: T, y: T) => { x: T; y: T };\nexport type XYRatio<T> = [T[], T[], T[], T[]]; // xn/xd, yn/yd\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: XYRatio<T>): XY<T> {\n  // Make same order as in spec\n  const coeff = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xn, xd, yn, yd] = coeff.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    // 6.6.3\n    // Exceptional cases of iso_map are inputs that cause the denominator of\n    // either rational function to evaluate to zero; such cases MUST return\n    // the identity point on E.\n    const [xd_inv, yd_inv] = FpInvertBatch(field, [xd, yd], true);\n    x = field.mul(xn, xd_inv); // xNum / xDen\n    y = field.mul(y, field.mul(yn, yd_inv)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\n/** Point interface, which curves must implement to work correctly with the module. */\nexport interface H2CPoint<T> extends Group<H2CPoint<T>> {\n  add(rhs: H2CPoint<T>): H2CPoint<T>;\n  toAffine(iz?: bigint): AffinePoint<T>;\n  clearCofactor(): H2CPoint<T>;\n  assertValidity(): void;\n}\n\nexport interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {\n  fromAffine(ap: AffinePoint<T>): H2CPoint<T>;\n}\n\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\nexport type HTFMethod<T> = (msg: Uint8Array, options?: htfBasicOpts) => H2CPoint<T>;\nexport type MapMethod<T> = (scalars: bigint[]) => H2CPoint<T>;\nexport type Hasher<T> = {\n  hashToCurve: HTFMethod<T>;\n  encodeToCurve: HTFMethod<T>;\n  mapToCurve: MapMethod<T>;\n  defaults: Opts & { encodeDST?: UnicodeOrBytes };\n};\n\n/** Creates hash-to-curve methods from EC Point and mapToCurve function. */\nexport function createHasher<T>(\n  Point: H2CPointConstructor<T>,\n  mapToCurve: MapToCurve<T>,\n  defaults: Opts & { encodeDST?: UnicodeOrBytes }\n): Hasher<T> {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  function map(num: bigint[]) {\n    return Point.fromAffine(mapToCurve(num));\n  }\n  function clear(initial: H2CPoint<T>) {\n    const P = initial.clearCofactor();\n    if (P.equals(Point.ZERO)) return Point.ZERO; // zero will throw in assert\n    P.assertValidity();\n    return P;\n  }\n\n  return {\n    defaults,\n\n    // Encodes byte string to elliptic curve.\n    // hash_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    hashToCurve(msg: Uint8Array, options?: htfBasicOpts): H2CPoint<T> {\n      const u = hash_to_field(msg, 2, { ...defaults, DST: defaults.DST, ...options } as Opts);\n      const u0 = map(u[0]);\n      const u1 = map(u[1]);\n      return clear(u0.add(u1));\n    },\n\n    // Encodes byte string to elliptic curve.\n    // encode_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    encodeToCurve(msg: Uint8Array, options?: htfBasicOpts): H2CPoint<T> {\n      const u = hash_to_field(msg, 1, { ...defaults, DST: defaults.encodeDST, ...options } as Opts);\n      return clear(map(u[0]));\n    },\n\n    // Same as encodeToCurve, but without hash\n    mapToCurve(scalars: bigint[]): H2CPoint<T> {\n      if (!Array.isArray(scalars)) throw new Error('expected array of bigints');\n      for (const i of scalars)\n        if (typeof i !== 'bigint') throw new Error('expected array of bigints');\n      return clear(map(scalars));\n    },\n  };\n}\n", "/**\n * NIST secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf).\n *\n * Seems to be rigid (not backdoored)\n * [as per discussion](https://bitcointalk.org/index.php?topic=289795.msg3183975#msg3183975).\n *\n * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n * [See explanation](https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066).\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha2';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { createCurve, type CurveFnWithCreate } from './_shortw_utils.ts';\nimport { createHasher, type Hasher, type HTFMethod, isogenyMap } from './abstract/hash-to-curve.ts';\nimport { Field, mod, pow2 } from './abstract/modular.ts';\nimport type { Hex, PrivKey } from './abstract/utils.ts';\nimport {\n  aInRange,\n  bytesToNumberBE,\n  concatBytes,\n  ensureBytes,\n  inRange,\n  numberToBytesBE,\n} from './abstract/utils.ts';\nimport { mapToCurveSimpleSWU, type ProjPointType as PointType } from './abstract/weierstrass.ts';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y: bigint): bigint {\n  const P = secp256k1P;\n  // prettier-ignore\n  const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n  // prettier-ignore\n  const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n  const b2 = (y * y * y) % P; // x^3, 11\n  const b3 = (b2 * b2 * y) % P; // x^7\n  const b6 = (pow2(b3, _3n, P) * b3) % P;\n  const b9 = (pow2(b6, _3n, P) * b3) % P;\n  const b11 = (pow2(b9, _2n, P) * b2) % P;\n  const b22 = (pow2(b11, _11n, P) * b11) % P;\n  const b44 = (pow2(b22, _22n, P) * b22) % P;\n  const b88 = (pow2(b44, _44n, P) * b44) % P;\n  const b176 = (pow2(b88, _88n, P) * b88) % P;\n  const b220 = (pow2(b176, _44n, P) * b44) % P;\n  const b223 = (pow2(b220, _3n, P) * b3) % P;\n  const t1 = (pow2(b223, _23n, P) * b22) % P;\n  const t2 = (pow2(t1, _6n, P) * b2) % P;\n  const root = pow2(t2, _2n, P);\n  if (!Fpk1.eql(Fpk1.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fpk1 = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\n/**\n * secp256k1 curve, ECDSA and ECDH methods.\n *\n * Field: `2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n`\n *\n * @example\n * ```js\n * import { secp256k1 } from '@noble/curves/secp256k1';\n * const priv = secp256k1.utils.randomPrivateKey();\n * const pub = secp256k1.getPublicKey(priv);\n * const msg = new Uint8Array(32).fill(1); // message hash (not message) in ecdsa\n * const sig = secp256k1.sign(msg, priv); // `{prehash: true}` option is available\n * const isValid = secp256k1.verify(sig, msg, pub) === true;\n * ```\n */\nexport const secp256k1: CurveFnWithCreate = createCurve(\n  {\n    a: _0n,\n    b: BigInt(7),\n    Fp: Fpk1,\n    n: secp256k1N,\n    Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n    Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n    h: BigInt(1),\n    lowS: true, // Allow only low-S signatures by default in sign() and verify()\n    endo: {\n      // Endomorphism, see above\n      beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n      splitScalar: (k: bigint) => {\n        const n = secp256k1N;\n        const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n        const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n        const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n        const b2 = a1;\n        const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n\n        const c1 = divNearest(b2 * k, n);\n        const c2 = divNearest(-b1 * k, n);\n        let k1 = mod(k - c1 * a1 - c2 * a2, n);\n        let k2 = mod(-c1 * b1 - c2 * b2, n);\n        const k1neg = k1 > POW_2_128;\n        const k2neg = k2 > POW_2_128;\n        if (k1neg) k1 = n - k1;\n        if (k2neg) k2 = n - k2;\n        if (k1 > POW_2_128 || k2 > POW_2_128) {\n          throw new Error('splitScalar: Endomorphism failed, k=' + k);\n        }\n        return { k1neg, k1, k2neg, k2 };\n      },\n    },\n  },\n  sha256\n);\n\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\n  let tagP = TAGGED_HASH_PREFIXES[tag];\n  if (tagP === undefined) {\n    const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n    tagP = concatBytes(tagH, tagH);\n    TAGGED_HASH_PREFIXES[tag] = tagP;\n  }\n  return sha256(concatBytes(tagP, ...messages));\n}\n\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = /* @__PURE__ */ (() => secp256k1.ProjectivePoint)();\nconst GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>\n  Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n  let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 0 < d' < n check is done inside\n  const scalar = p.hasEvenY() ? d_ : modN(-d_);\n  return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x: bigint): PointType<bigint> {\n  aInRange('x', x, _1n, secp256k1P); // Fail if x \u2265 p.\n  const xx = modP(x * x);\n  const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n  if (y % _2n !== _0n) y = modP(-y); // Return the unique point P such that x(P) = x and\n  const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n  p.assertValidity();\n  return p;\n}\nconst num = bytesToNumberBE;\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return modN(num(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\n\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(\n  message: Hex,\n  privateKey: PrivKey,\n  auxRand: Hex = randomBytes(32)\n): Uint8Array {\n  const m = ensureBytes('message', message);\n  const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n  const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n  const t = numTo32b(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n  const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n  const k_ = modN(num(rand)); // Let k' = int(rand) mod n\n  if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\n  const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n  const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n  sig.set(rx, 0);\n  sig.set(numTo32b(modN(k + e * d)), 32);\n  // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n  if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\n  const sig = ensureBytes('signature', signature, 64);\n  const m = ensureBytes('message', message);\n  const pub = ensureBytes('publicKey', publicKey, 32);\n  try {\n    const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!inRange(r, _1n, secp256k1P)) return false;\n    const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!inRange(s, _1n, secp256k1N)) return false;\n    const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n    const R = GmulAdd(P, s, modN(-e)); // R = s\u22C5G - e\u22C5P\n    if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n    return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n  } catch (error) {\n    return false;\n  }\n}\n\nexport type SecpSchnorr = {\n  getPublicKey: typeof schnorrGetPublicKey;\n  sign: typeof schnorrSign;\n  verify: typeof schnorrVerify;\n  utils: {\n    randomPrivateKey: () => Uint8Array;\n    lift_x: typeof lift_x;\n    pointToBytes: (point: PointType<bigint>) => Uint8Array;\n    numberToBytesBE: typeof numberToBytesBE;\n    bytesToNumberBE: typeof bytesToNumberBE;\n    taggedHash: typeof taggedHash;\n    mod: typeof mod;\n  };\n};\n/**\n * Schnorr signatures over secp256k1.\n * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n * @example\n * ```js\n * import { schnorr } from '@noble/curves/secp256k1';\n * const priv = schnorr.utils.randomPrivateKey();\n * const pub = schnorr.getPublicKey(priv);\n * const msg = new TextEncoder().encode('hello');\n * const sig = schnorr.sign(msg, priv);\n * const isValid = schnorr.verify(sig, msg, pub);\n * ```\n */\nexport const schnorr: SecpSchnorr = /* @__PURE__ */ (() => ({\n  getPublicKey: schnorrGetPublicKey,\n  sign: schnorrSign,\n  verify: schnorrVerify,\n  utils: {\n    randomPrivateKey: secp256k1.utils.randomPrivateKey,\n    lift_x,\n    pointToBytes,\n    numberToBytesBE,\n    bytesToNumberBE,\n    taggedHash,\n    mod,\n  },\n}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fpk1,\n    [\n      // xNum\n      [\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n        '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n        '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n      ],\n      // xDen\n      [\n        '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n        '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n      // yNum\n      [\n        '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n        '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n        '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n        '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n      ],\n      // yDen\n      [\n        '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n        '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n        '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n    ].map((i) => i.map((j) => BigInt(j))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fpk1, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fpk1.create(BigInt('-11')),\n  }))();\n/** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */\nexport const secp256k1_hasher: Hasher<bigint> = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.ProjectivePoint,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fpk1.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fpk1.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    } as const\n  ))();\n\nexport const hashToCurve: HTFMethod<bigint> = /* @__PURE__ */ (() =>\n  secp256k1_hasher.hashToCurve)();\n\nexport const encodeToCurve: HTFMethod<bigint> = /* @__PURE__ */ (() =>\n  secp256k1_hasher.encodeToCurve)();\n", "import { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { BaseError } from './base.js'\n\n/**\n * geth:    https://github.com/ethereum/go-ethereum/blob/master/core/error.go\n *          https://github.com/ethereum/go-ethereum/blob/master/core/types/transaction.go#L34-L41\n *\n * erigon:  https://github.com/ledgerwatch/erigon/blob/master/core/error.go\n *          https://github.com/ledgerwatch/erigon/blob/master/core/types/transaction.go#L41-L46\n *\n * anvil:   https://github.com/foundry-rs/foundry/blob/master/anvil/src/eth/error.rs#L108\n */\nexport type ExecutionRevertedErrorType = ExecutionRevertedError & {\n  code: 3\n  name: 'ExecutionRevertedError'\n}\nexport class ExecutionRevertedError extends BaseError {\n  static code = 3\n  static nodeMessage = /execution reverted|gas required exceeds allowance/\n\n  constructor({\n    cause,\n    message,\n  }: { cause?: BaseError | undefined; message?: string | undefined } = {}) {\n    const reason = message\n      ?.replace('execution reverted: ', '')\n      ?.replace('execution reverted', '')\n    super(\n      `Execution reverted ${\n        reason ? `with reason: ${reason}` : 'for an unknown reason'\n      }.`,\n      {\n        cause,\n        name: 'ExecutionRevertedError',\n      },\n    )\n  }\n}\n\nexport type FeeCapTooHighErrorType = FeeCapTooHighError & {\n  name: 'FeeCapTooHighError'\n}\nexport class FeeCapTooHighError extends BaseError {\n  static nodeMessage =\n    /max fee per gas higher than 2\\^256-1|fee cap higher than 2\\^256-1/\n  constructor({\n    cause,\n    maxFeePerGas,\n  }: {\n    cause?: BaseError | undefined\n    maxFeePerGas?: bigint | undefined\n  } = {}) {\n    super(\n      `The fee cap (\\`maxFeePerGas\\`${\n        maxFeePerGas ? ` = ${formatGwei(maxFeePerGas)} gwei` : ''\n      }) cannot be higher than the maximum allowed value (2^256-1).`,\n      {\n        cause,\n        name: 'FeeCapTooHighError',\n      },\n    )\n  }\n}\n\nexport type FeeCapTooLowErrorType = FeeCapTooLowError & {\n  name: 'FeeCapTooLowError'\n}\nexport class FeeCapTooLowError extends BaseError {\n  static nodeMessage =\n    /max fee per gas less than block base fee|fee cap less than block base fee|transaction is outdated/\n  constructor({\n    cause,\n    maxFeePerGas,\n  }: {\n    cause?: BaseError | undefined\n    maxFeePerGas?: bigint | undefined\n  } = {}) {\n    super(\n      `The fee cap (\\`maxFeePerGas\\`${\n        maxFeePerGas ? ` = ${formatGwei(maxFeePerGas)}` : ''\n      } gwei) cannot be lower than the block base fee.`,\n      {\n        cause,\n        name: 'FeeCapTooLowError',\n      },\n    )\n  }\n}\n\nexport type NonceTooHighErrorType = NonceTooHighError & {\n  name: 'NonceTooHighError'\n}\nexport class NonceTooHighError extends BaseError {\n  static nodeMessage = /nonce too high/\n  constructor({\n    cause,\n    nonce,\n  }: { cause?: BaseError | undefined; nonce?: number | undefined } = {}) {\n    super(\n      `Nonce provided for the transaction ${\n        nonce ? `(${nonce}) ` : ''\n      }is higher than the next one expected.`,\n      { cause, name: 'NonceTooHighError' },\n    )\n  }\n}\n\nexport type NonceTooLowErrorType = NonceTooLowError & {\n  name: 'NonceTooLowError'\n}\nexport class NonceTooLowError extends BaseError {\n  static nodeMessage =\n    /nonce too low|transaction already imported|already known/\n  constructor({\n    cause,\n    nonce,\n  }: { cause?: BaseError | undefined; nonce?: number | undefined } = {}) {\n    super(\n      [\n        `Nonce provided for the transaction ${\n          nonce ? `(${nonce}) ` : ''\n        }is lower than the current nonce of the account.`,\n        'Try increasing the nonce or find the latest nonce with `getTransactionCount`.',\n      ].join('\\n'),\n      { cause, name: 'NonceTooLowError' },\n    )\n  }\n}\n\nexport type NonceMaxValueErrorType = NonceMaxValueError & {\n  name: 'NonceMaxValueError'\n}\nexport class NonceMaxValueError extends BaseError {\n  static nodeMessage = /nonce has max value/\n  constructor({\n    cause,\n    nonce,\n  }: { cause?: BaseError | undefined; nonce?: number | undefined } = {}) {\n    super(\n      `Nonce provided for the transaction ${\n        nonce ? `(${nonce}) ` : ''\n      }exceeds the maximum allowed nonce.`,\n      { cause, name: 'NonceMaxValueError' },\n    )\n  }\n}\n\nexport type InsufficientFundsErrorType = InsufficientFundsError & {\n  name: 'InsufficientFundsError'\n}\nexport class InsufficientFundsError extends BaseError {\n  static nodeMessage =\n    /insufficient funds|exceeds transaction sender account balance/\n  constructor({ cause }: { cause?: BaseError | undefined } = {}) {\n    super(\n      [\n        'The total cost (gas * gas fee + value) of executing this transaction exceeds the balance of the account.',\n      ].join('\\n'),\n      {\n        cause,\n        metaMessages: [\n          'This error could arise when the account does not have enough funds to:',\n          ' - pay for the total gas fee,',\n          ' - pay for the value to send.',\n          ' ',\n          'The cost of the transaction is calculated as `gas * gas fee + value`, where:',\n          ' - `gas` is the amount of gas needed for transaction to execute,',\n          ' - `gas fee` is the gas fee,',\n          ' - `value` is the amount of ether to send to the recipient.',\n        ],\n        name: 'InsufficientFundsError',\n      },\n    )\n  }\n}\n\nexport type IntrinsicGasTooHighErrorType = IntrinsicGasTooHighError & {\n  name: 'IntrinsicGasTooHighError'\n}\nexport class IntrinsicGasTooHighError extends BaseError {\n  static nodeMessage = /intrinsic gas too high|gas limit reached/\n  constructor({\n    cause,\n    gas,\n  }: { cause?: BaseError | undefined; gas?: bigint | undefined } = {}) {\n    super(\n      `The amount of gas ${\n        gas ? `(${gas}) ` : ''\n      }provided for the transaction exceeds the limit allowed for the block.`,\n      {\n        cause,\n        name: 'IntrinsicGasTooHighError',\n      },\n    )\n  }\n}\n\nexport type IntrinsicGasTooLowErrorType = IntrinsicGasTooLowError & {\n  name: 'IntrinsicGasTooLowError'\n}\nexport class IntrinsicGasTooLowError extends BaseError {\n  static nodeMessage = /intrinsic gas too low/\n  constructor({\n    cause,\n    gas,\n  }: { cause?: BaseError | undefined; gas?: bigint | undefined } = {}) {\n    super(\n      `The amount of gas ${\n        gas ? `(${gas}) ` : ''\n      }provided for the transaction is too low.`,\n      {\n        cause,\n        name: 'IntrinsicGasTooLowError',\n      },\n    )\n  }\n}\n\nexport type TransactionTypeNotSupportedErrorType =\n  TransactionTypeNotSupportedError & {\n    name: 'TransactionTypeNotSupportedError'\n  }\nexport class TransactionTypeNotSupportedError extends BaseError {\n  static nodeMessage = /transaction type not valid/\n  constructor({ cause }: { cause?: BaseError | undefined }) {\n    super('The transaction type is not supported for this chain.', {\n      cause,\n      name: 'TransactionTypeNotSupportedError',\n    })\n  }\n}\n\nexport type TipAboveFeeCapErrorType = TipAboveFeeCapError & {\n  name: 'TipAboveFeeCapError'\n}\nexport class TipAboveFeeCapError extends BaseError {\n  static nodeMessage =\n    /max priority fee per gas higher than max fee per gas|tip higher than fee cap/\n  constructor({\n    cause,\n    maxPriorityFeePerGas,\n    maxFeePerGas,\n  }: {\n    cause?: BaseError | undefined\n    maxPriorityFeePerGas?: bigint | undefined\n    maxFeePerGas?: bigint | undefined\n  } = {}) {\n    super(\n      [\n        `The provided tip (\\`maxPriorityFeePerGas\\`${\n          maxPriorityFeePerGas\n            ? ` = ${formatGwei(maxPriorityFeePerGas)} gwei`\n            : ''\n        }) cannot be higher than the fee cap (\\`maxFeePerGas\\`${\n          maxFeePerGas ? ` = ${formatGwei(maxFeePerGas)} gwei` : ''\n        }).`,\n      ].join('\\n'),\n      {\n        cause,\n        name: 'TipAboveFeeCapError',\n      },\n    )\n  }\n}\n\nexport type UnknownNodeErrorType = UnknownNodeError & {\n  name: 'UnknownNodeError'\n}\nexport class UnknownNodeError extends BaseError {\n  constructor({ cause }: { cause?: BaseError | undefined }) {\n    super(`An error occurred while executing: ${cause?.shortMessage}`, {\n      cause,\n      name: 'UnknownNodeError',\n    })\n  }\n}\n", "import type { SendTransactionParameters } from '../../actions/wallet/sendTransaction.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n  ExecutionRevertedError,\n  type ExecutionRevertedErrorType,\n  FeeCapTooHighError,\n  type FeeCapTooHighErrorType,\n  FeeCapTooLowError,\n  type FeeCapTooLowErrorType,\n  InsufficientFundsError,\n  type InsufficientFundsErrorType,\n  IntrinsicGasTooHighError,\n  type IntrinsicGasTooHighErrorType,\n  IntrinsicGasTooLowError,\n  type IntrinsicGasTooLowErrorType,\n  NonceMaxValueError,\n  type NonceMaxValueErrorType,\n  NonceTooHighError,\n  type NonceTooHighErrorType,\n  NonceTooLowError,\n  type NonceTooLowErrorType,\n  TipAboveFeeCapError,\n  type TipAboveFeeCapErrorType,\n  TransactionTypeNotSupportedError,\n  type TransactionTypeNotSupportedErrorType,\n  UnknownNodeError,\n  type UnknownNodeErrorType,\n} from '../../errors/node.js'\nimport { RpcRequestError } from '../../errors/request.js'\nimport {\n  InvalidInputRpcError,\n  TransactionRejectedRpcError,\n} from '../../errors/rpc.js'\nimport type { ExactPartial } from '../../types/utils.js'\n\nexport function containsNodeError(err: BaseError) {\n  return (\n    err instanceof TransactionRejectedRpcError ||\n    err instanceof InvalidInputRpcError ||\n    (err instanceof RpcRequestError && err.code === ExecutionRevertedError.code)\n  )\n}\n\nexport type GetNodeErrorParameters = ExactPartial<\n  SendTransactionParameters<any>\n>\n\nexport type GetNodeErrorReturnType =\n  | ExecutionRevertedErrorType\n  | FeeCapTooHighErrorType\n  | FeeCapTooLowErrorType\n  | NonceTooHighErrorType\n  | NonceTooLowErrorType\n  | NonceMaxValueErrorType\n  | InsufficientFundsErrorType\n  | IntrinsicGasTooHighErrorType\n  | IntrinsicGasTooLowErrorType\n  | TransactionTypeNotSupportedErrorType\n  | TipAboveFeeCapErrorType\n  | UnknownNodeErrorType\n\nexport function getNodeError(\n  err: BaseError,\n  args: GetNodeErrorParameters,\n): GetNodeErrorReturnType {\n  const message = (err.details || '').toLowerCase()\n\n  const executionRevertedError =\n    err instanceof BaseError\n      ? err.walk(\n          (e) =>\n            (e as { code: number } | null | undefined)?.code ===\n            ExecutionRevertedError.code,\n        )\n      : err\n  if (executionRevertedError instanceof BaseError)\n    return new ExecutionRevertedError({\n      cause: err,\n      message: executionRevertedError.details,\n    }) as any\n  if (ExecutionRevertedError.nodeMessage.test(message))\n    return new ExecutionRevertedError({\n      cause: err,\n      message: err.details,\n    }) as any\n  if (FeeCapTooHighError.nodeMessage.test(message))\n    return new FeeCapTooHighError({\n      cause: err,\n      maxFeePerGas: args?.maxFeePerGas,\n    }) as any\n  if (FeeCapTooLowError.nodeMessage.test(message))\n    return new FeeCapTooLowError({\n      cause: err,\n      maxFeePerGas: args?.maxFeePerGas,\n    }) as any\n  if (NonceTooHighError.nodeMessage.test(message))\n    return new NonceTooHighError({ cause: err, nonce: args?.nonce }) as any\n  if (NonceTooLowError.nodeMessage.test(message))\n    return new NonceTooLowError({ cause: err, nonce: args?.nonce }) as any\n  if (NonceMaxValueError.nodeMessage.test(message))\n    return new NonceMaxValueError({ cause: err, nonce: args?.nonce }) as any\n  if (InsufficientFundsError.nodeMessage.test(message))\n    return new InsufficientFundsError({ cause: err }) as any\n  if (IntrinsicGasTooHighError.nodeMessage.test(message))\n    return new IntrinsicGasTooHighError({ cause: err, gas: args?.gas }) as any\n  if (IntrinsicGasTooLowError.nodeMessage.test(message))\n    return new IntrinsicGasTooLowError({ cause: err, gas: args?.gas }) as any\n  if (TransactionTypeNotSupportedError.nodeMessage.test(message))\n    return new TransactionTypeNotSupportedError({ cause: err }) as any\n  if (TipAboveFeeCapError.nodeMessage.test(message))\n    return new TipAboveFeeCapError({\n      cause: err,\n      maxFeePerGas: args?.maxFeePerGas,\n      maxPriorityFeePerGas: args?.maxPriorityFeePerGas,\n    }) as any\n  return new UnknownNodeError({\n    cause: err,\n  }) as any\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ChainFormatter } from '../../types/chain.js'\n\nexport type ExtractErrorType = ErrorType\n\n/**\n * @description Picks out the keys from `value` that exist in the formatter..\n */\nexport function extract(\n  value_: Record<string, unknown>,\n  { format }: { format?: ChainFormatter['format'] | undefined },\n) {\n  if (!format) return {}\n\n  const value: Record<string, unknown> = {}\n  function extract_(formatted: Record<string, any>) {\n    const keys = Object.keys(formatted)\n    for (const key of keys) {\n      if (key in value_) value[key] = value_[key]\n      if (\n        formatted[key] &&\n        typeof formatted[key] === 'object' &&\n        !Array.isArray(formatted[key])\n      )\n        extract_(formatted[key])\n    }\n  }\n\n  const formatted = format(value_ || {})\n  extract_(formatted)\n\n  return value\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Prettify } from '../../types/utils.js'\n\nexport type DefineFormatterErrorType = ErrorType\n\nexport function defineFormatter<type extends string, parameters, returnType>(\n  type: type,\n  format: (args: parameters, action?: string | undefined) => returnType,\n) {\n  return <\n    parametersOverride,\n    returnTypeOverride,\n    exclude extends (keyof parameters | keyof parametersOverride)[] = [],\n  >({\n    exclude,\n    format: overrides,\n  }: {\n    exclude?: exclude | undefined\n    format: (\n      args: parametersOverride,\n      action?: string | undefined,\n    ) => returnTypeOverride\n  }) => {\n    return {\n      exclude,\n      format: (args: parametersOverride, action?: string | undefined) => {\n        const formatted = format(args as any, action)\n        if (exclude) {\n          for (const key of exclude) {\n            delete (formatted as any)[key]\n          }\n        }\n        return {\n          ...formatted,\n          ...overrides(args, action),\n        } as Prettify<returnTypeOverride> & {\n          [_key in exclude[number]]: never\n        }\n      },\n      type,\n    }\n  }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { AuthorizationList } from '../../types/authorization.js'\nimport type {\n  Chain,\n  ExtractChainFormatterParameters,\n} from '../../types/chain.js'\nimport type { ByteArray } from '../../types/misc.js'\nimport type {\n  RpcAuthorizationList,\n  RpcTransactionRequest,\n} from '../../types/rpc.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { bytesToHex, numberToHex } from '../encoding/toHex.js'\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\n\nexport type FormattedTransactionRequest<\n  chain extends Chain | undefined = Chain | undefined,\n> = ExtractChainFormatterParameters<\n  chain,\n  'transactionRequest',\n  TransactionRequest\n>\n\nexport const rpcTransactionType = {\n  legacy: '0x0',\n  eip2930: '0x1',\n  eip1559: '0x2',\n  eip4844: '0x3',\n  eip7702: '0x4',\n} as const\n\nexport type FormatTransactionRequestErrorType = ErrorType\n\nexport function formatTransactionRequest(\n  request: ExactPartial<TransactionRequest> & { account?: Account | undefined },\n  _?: string | undefined,\n) {\n  const rpcRequest = {} as RpcTransactionRequest\n\n  if (typeof request.authorizationList !== 'undefined')\n    rpcRequest.authorizationList = formatAuthorizationList(\n      request.authorizationList,\n    )\n  if (typeof request.accessList !== 'undefined')\n    rpcRequest.accessList = request.accessList\n  if (typeof request.blobVersionedHashes !== 'undefined')\n    rpcRequest.blobVersionedHashes = request.blobVersionedHashes\n  if (typeof request.blobs !== 'undefined') {\n    if (typeof request.blobs[0] !== 'string')\n      rpcRequest.blobs = (request.blobs as ByteArray[]).map((x) =>\n        bytesToHex(x),\n      )\n    else rpcRequest.blobs = request.blobs\n  }\n  if (typeof request.data !== 'undefined') rpcRequest.data = request.data\n  if (request.account) rpcRequest.from = request.account.address\n  if (typeof request.from !== 'undefined') rpcRequest.from = request.from\n  if (typeof request.gas !== 'undefined')\n    rpcRequest.gas = numberToHex(request.gas)\n  if (typeof request.gasPrice !== 'undefined')\n    rpcRequest.gasPrice = numberToHex(request.gasPrice)\n  if (typeof request.maxFeePerBlobGas !== 'undefined')\n    rpcRequest.maxFeePerBlobGas = numberToHex(request.maxFeePerBlobGas)\n  if (typeof request.maxFeePerGas !== 'undefined')\n    rpcRequest.maxFeePerGas = numberToHex(request.maxFeePerGas)\n  if (typeof request.maxPriorityFeePerGas !== 'undefined')\n    rpcRequest.maxPriorityFeePerGas = numberToHex(request.maxPriorityFeePerGas)\n  if (typeof request.nonce !== 'undefined')\n    rpcRequest.nonce = numberToHex(request.nonce)\n  if (typeof request.to !== 'undefined') rpcRequest.to = request.to\n  if (typeof request.type !== 'undefined')\n    rpcRequest.type = rpcTransactionType[request.type]\n  if (typeof request.value !== 'undefined')\n    rpcRequest.value = numberToHex(request.value)\n\n  return rpcRequest\n}\n\nexport type DefineTransactionRequestErrorType =\n  | DefineFormatterErrorType\n  | ErrorType\n\nexport const defineTransactionRequest = /*#__PURE__*/ defineFormatter(\n  'transactionRequest',\n  formatTransactionRequest,\n)\n\n//////////////////////////////////////////////////////////////////////////////\n\nfunction formatAuthorizationList(\n  authorizationList: AuthorizationList<number, boolean>,\n): RpcAuthorizationList {\n  return authorizationList.map(\n    (authorization) =>\n      ({\n        address: authorization.address,\n        r: authorization.r\n          ? numberToHex(BigInt(authorization.r))\n          : authorization.r,\n        s: authorization.s\n          ? numberToHex(BigInt(authorization.s))\n          : authorization.s,\n        chainId: numberToHex(authorization.chainId),\n        nonce: numberToHex(authorization.nonce),\n        ...(typeof authorization.yParity !== 'undefined'\n          ? { yParity: numberToHex(authorization.yParity) }\n          : {}),\n        ...(typeof authorization.v !== 'undefined' &&\n        typeof authorization.yParity === 'undefined'\n          ? { v: numberToHex(authorization.v) }\n          : {}),\n      }) as any,\n  ) as RpcAuthorizationList\n}\n", "import {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../errors/address.js'\nimport {\n  InvalidBytesLengthError,\n  type InvalidBytesLengthErrorType,\n} from '../errors/data.js'\nimport {\n  AccountStateConflictError,\n  type AccountStateConflictErrorType,\n  StateAssignmentConflictError,\n  type StateAssignmentConflictErrorType,\n} from '../errors/stateOverride.js'\nimport type {\n  RpcAccountStateOverride,\n  RpcStateMapping,\n  RpcStateOverride,\n} from '../types/rpc.js'\nimport type { StateMapping, StateOverride } from '../types/stateOverride.js'\nimport { isAddress } from './address/isAddress.js'\nimport { type NumberToHexErrorType, numberToHex } from './encoding/toHex.js'\n\ntype SerializeStateMappingParameters = StateMapping | undefined\n\ntype SerializeStateMappingErrorType = InvalidBytesLengthErrorType\n\n/** @internal */\nexport function serializeStateMapping(\n  stateMapping: SerializeStateMappingParameters,\n): RpcStateMapping | undefined {\n  if (!stateMapping || stateMapping.length === 0) return undefined\n  return stateMapping.reduce((acc, { slot, value }) => {\n    if (slot.length !== 66)\n      throw new InvalidBytesLengthError({\n        size: slot.length,\n        targetSize: 66,\n        type: 'hex',\n      })\n    if (value.length !== 66)\n      throw new InvalidBytesLengthError({\n        size: value.length,\n        targetSize: 66,\n        type: 'hex',\n      })\n    acc[slot] = value\n    return acc\n  }, {} as RpcStateMapping)\n}\n\ntype SerializeAccountStateOverrideParameters = Omit<\n  StateOverride[number],\n  'address'\n>\n\ntype SerializeAccountStateOverrideErrorType =\n  | NumberToHexErrorType\n  | StateAssignmentConflictErrorType\n  | SerializeStateMappingErrorType\n\n/** @internal */\nexport function serializeAccountStateOverride(\n  parameters: SerializeAccountStateOverrideParameters,\n): RpcAccountStateOverride {\n  const { balance, nonce, state, stateDiff, code } = parameters\n  const rpcAccountStateOverride: RpcAccountStateOverride = {}\n  if (code !== undefined) rpcAccountStateOverride.code = code\n  if (balance !== undefined)\n    rpcAccountStateOverride.balance = numberToHex(balance)\n  if (nonce !== undefined) rpcAccountStateOverride.nonce = numberToHex(nonce)\n  if (state !== undefined)\n    rpcAccountStateOverride.state = serializeStateMapping(state)\n  if (stateDiff !== undefined) {\n    if (rpcAccountStateOverride.state) throw new StateAssignmentConflictError()\n    rpcAccountStateOverride.stateDiff = serializeStateMapping(stateDiff)\n  }\n  return rpcAccountStateOverride\n}\n\ntype SerializeStateOverrideParameters = StateOverride | undefined\n\nexport type SerializeStateOverrideErrorType =\n  | InvalidAddressErrorType\n  | AccountStateConflictErrorType\n  | SerializeAccountStateOverrideErrorType\n\n/** @internal */\nexport function serializeStateOverride(\n  parameters?: SerializeStateOverrideParameters,\n): RpcStateOverride | undefined {\n  if (!parameters) return undefined\n  const rpcStateOverride: RpcStateOverride = {}\n  for (const { address, ...accountState } of parameters) {\n    if (!isAddress(address, { strict: false }))\n      throw new InvalidAddressError({ address })\n    if (rpcStateOverride[address])\n      throw new AccountStateConflictError({ address: address })\n    rpcStateOverride[address] = serializeAccountStateOverride(accountState)\n  }\n  return rpcStateOverride\n}\n", "export const maxInt8 = 2n ** (8n - 1n) - 1n\nexport const maxInt16 = 2n ** (16n - 1n) - 1n\nexport const maxInt24 = 2n ** (24n - 1n) - 1n\nexport const maxInt32 = 2n ** (32n - 1n) - 1n\nexport const maxInt40 = 2n ** (40n - 1n) - 1n\nexport const maxInt48 = 2n ** (48n - 1n) - 1n\nexport const maxInt56 = 2n ** (56n - 1n) - 1n\nexport const maxInt64 = 2n ** (64n - 1n) - 1n\nexport const maxInt72 = 2n ** (72n - 1n) - 1n\nexport const maxInt80 = 2n ** (80n - 1n) - 1n\nexport const maxInt88 = 2n ** (88n - 1n) - 1n\nexport const maxInt96 = 2n ** (96n - 1n) - 1n\nexport const maxInt104 = 2n ** (104n - 1n) - 1n\nexport const maxInt112 = 2n ** (112n - 1n) - 1n\nexport const maxInt120 = 2n ** (120n - 1n) - 1n\nexport const maxInt128 = 2n ** (128n - 1n) - 1n\nexport const maxInt136 = 2n ** (136n - 1n) - 1n\nexport const maxInt144 = 2n ** (144n - 1n) - 1n\nexport const maxInt152 = 2n ** (152n - 1n) - 1n\nexport const maxInt160 = 2n ** (160n - 1n) - 1n\nexport const maxInt168 = 2n ** (168n - 1n) - 1n\nexport const maxInt176 = 2n ** (176n - 1n) - 1n\nexport const maxInt184 = 2n ** (184n - 1n) - 1n\nexport const maxInt192 = 2n ** (192n - 1n) - 1n\nexport const maxInt200 = 2n ** (200n - 1n) - 1n\nexport const maxInt208 = 2n ** (208n - 1n) - 1n\nexport const maxInt216 = 2n ** (216n - 1n) - 1n\nexport const maxInt224 = 2n ** (224n - 1n) - 1n\nexport const maxInt232 = 2n ** (232n - 1n) - 1n\nexport const maxInt240 = 2n ** (240n - 1n) - 1n\nexport const maxInt248 = 2n ** (248n - 1n) - 1n\nexport const maxInt256 = 2n ** (256n - 1n) - 1n\n\nexport const minInt8 = -(2n ** (8n - 1n))\nexport const minInt16 = -(2n ** (16n - 1n))\nexport const minInt24 = -(2n ** (24n - 1n))\nexport const minInt32 = -(2n ** (32n - 1n))\nexport const minInt40 = -(2n ** (40n - 1n))\nexport const minInt48 = -(2n ** (48n - 1n))\nexport const minInt56 = -(2n ** (56n - 1n))\nexport const minInt64 = -(2n ** (64n - 1n))\nexport const minInt72 = -(2n ** (72n - 1n))\nexport const minInt80 = -(2n ** (80n - 1n))\nexport const minInt88 = -(2n ** (88n - 1n))\nexport const minInt96 = -(2n ** (96n - 1n))\nexport const minInt104 = -(2n ** (104n - 1n))\nexport const minInt112 = -(2n ** (112n - 1n))\nexport const minInt120 = -(2n ** (120n - 1n))\nexport const minInt128 = -(2n ** (128n - 1n))\nexport const minInt136 = -(2n ** (136n - 1n))\nexport const minInt144 = -(2n ** (144n - 1n))\nexport const minInt152 = -(2n ** (152n - 1n))\nexport const minInt160 = -(2n ** (160n - 1n))\nexport const minInt168 = -(2n ** (168n - 1n))\nexport const minInt176 = -(2n ** (176n - 1n))\nexport const minInt184 = -(2n ** (184n - 1n))\nexport const minInt192 = -(2n ** (192n - 1n))\nexport const minInt200 = -(2n ** (200n - 1n))\nexport const minInt208 = -(2n ** (208n - 1n))\nexport const minInt216 = -(2n ** (216n - 1n))\nexport const minInt224 = -(2n ** (224n - 1n))\nexport const minInt232 = -(2n ** (232n - 1n))\nexport const minInt240 = -(2n ** (240n - 1n))\nexport const minInt248 = -(2n ** (248n - 1n))\nexport const minInt256 = -(2n ** (256n - 1n))\n\nexport const maxUint8 = 2n ** 8n - 1n\nexport const maxUint16 = 2n ** 16n - 1n\nexport const maxUint24 = 2n ** 24n - 1n\nexport const maxUint32 = 2n ** 32n - 1n\nexport const maxUint40 = 2n ** 40n - 1n\nexport const maxUint48 = 2n ** 48n - 1n\nexport const maxUint56 = 2n ** 56n - 1n\nexport const maxUint64 = 2n ** 64n - 1n\nexport const maxUint72 = 2n ** 72n - 1n\nexport const maxUint80 = 2n ** 80n - 1n\nexport const maxUint88 = 2n ** 88n - 1n\nexport const maxUint96 = 2n ** 96n - 1n\nexport const maxUint104 = 2n ** 104n - 1n\nexport const maxUint112 = 2n ** 112n - 1n\nexport const maxUint120 = 2n ** 120n - 1n\nexport const maxUint128 = 2n ** 128n - 1n\nexport const maxUint136 = 2n ** 136n - 1n\nexport const maxUint144 = 2n ** 144n - 1n\nexport const maxUint152 = 2n ** 152n - 1n\nexport const maxUint160 = 2n ** 160n - 1n\nexport const maxUint168 = 2n ** 168n - 1n\nexport const maxUint176 = 2n ** 176n - 1n\nexport const maxUint184 = 2n ** 184n - 1n\nexport const maxUint192 = 2n ** 192n - 1n\nexport const maxUint200 = 2n ** 200n - 1n\nexport const maxUint208 = 2n ** 208n - 1n\nexport const maxUint216 = 2n ** 216n - 1n\nexport const maxUint224 = 2n ** 224n - 1n\nexport const maxUint232 = 2n ** 232n - 1n\nexport const maxUint240 = 2n ** 240n - 1n\nexport const maxUint248 = 2n ** 248n - 1n\nexport const maxUint256 = 2n ** 256n - 1n\n", "import {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { SendTransactionParameters } from '../../actions/wallet/sendTransaction.js'\nimport { maxUint256 } from '../../constants/number.js'\nimport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport {\n  FeeCapTooHighError,\n  type FeeCapTooHighErrorType,\n  TipAboveFeeCapError,\n  type TipAboveFeeCapErrorType,\n} from '../../errors/node.js'\nimport type { FeeConflictErrorType } from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { isAddress } from '../address/isAddress.js'\n\nexport type AssertRequestParameters = ExactPartial<\n  SendTransactionParameters<Chain>\n>\n\nexport type AssertRequestErrorType =\n  | InvalidAddressErrorType\n  | FeeConflictErrorType\n  | FeeCapTooHighErrorType\n  | ParseAccountErrorType\n  | TipAboveFeeCapErrorType\n  | ErrorType\n\nexport function assertRequest(args: AssertRequestParameters) {\n  const { account: account_, maxFeePerGas, maxPriorityFeePerGas, to } = args\n  const account = account_ ? parseAccount(account_) : undefined\n  if (account && !isAddress(account.address))\n    throw new InvalidAddressError({ address: account.address })\n  if (to && !isAddress(to)) throw new InvalidAddressError({ address: to })\n\n  if (maxFeePerGas && maxFeePerGas > maxUint256)\n    throw new FeeCapTooHighError({ maxFeePerGas })\n  if (\n    maxPriorityFeePerGas &&\n    maxFeePerGas &&\n    maxPriorityFeePerGas > maxFeePerGas\n  )\n    throw new TipAboveFeeCapError({ maxFeePerGas, maxPriorityFeePerGas })\n}\n", "import type { Address } from 'abitype'\n\nimport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport { isAddress } from './isAddress.js'\n\nexport type IsAddressEqualReturnType = boolean\nexport type IsAddressEqualErrorType = InvalidAddressErrorType | ErrorType\n\nexport function isAddressEqual(a: Address, b: Address) {\n  if (!isAddress(a, { strict: false }))\n    throw new InvalidAddressError({ address: a })\n  if (!isAddress(b, { strict: false }))\n    throw new InvalidAddressError({ address: b })\n  return a.toLowerCase() === b.toLowerCase()\n}\n", "import type { Abi, AbiStateMutability, ExtractAbiFunctions } from 'abitype'\n\nimport {\n  AbiFunctionNotFoundError,\n  type AbiFunctionNotFoundErrorType,\n  AbiFunctionOutputsNotFoundError,\n  type AbiFunctionOutputsNotFoundErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n  ContractFunctionReturnType,\n  Widen,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport {\n  type DecodeAbiParametersErrorType,\n  decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/decodeFunctionResult'\n\nexport type DecodeFunctionResultParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends\n    | ContractFunctionName<abi>\n    | undefined = ContractFunctionName<abi>,\n  args extends ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  > = ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  >,\n  ///\n  hasFunctions = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [ExtractAbiFunctions<abi>] extends [never]\n        ? false\n        : true\n    : true,\n  allArgs = ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  >,\n  allFunctionNames = ContractFunctionName<abi>,\n> = {\n  abi: abi\n  data: Hex\n} & UnionEvaluate<\n  IsNarrowable<abi, Abi> extends true\n    ? abi['length'] extends 1\n      ? { functionName?: functionName | allFunctionNames | undefined }\n      : { functionName: functionName | allFunctionNames }\n    : { functionName?: functionName | allFunctionNames | undefined }\n> &\n  UnionEvaluate<\n    readonly [] extends allArgs\n      ? {\n          args?:\n            | allArgs // show all options\n            // infer value, widen inferred value of `args` conditionally to match `allArgs`\n            | (abi extends Abi\n                ? args extends allArgs\n                  ? Widen<args>\n                  : never\n                : never)\n            | undefined\n        }\n      : {\n          args?:\n            | allArgs // show all options\n            | (Widen<args> & (args extends allArgs ? unknown : never)) // infer value, widen inferred value of `args` match `allArgs` (e.g. avoid union `args: readonly [123n] | readonly [bigint]`)\n            | undefined\n        }\n  > &\n  (hasFunctions extends true ? unknown : never)\n\nexport type DecodeFunctionResultReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends\n    | ContractFunctionName<abi>\n    | undefined = ContractFunctionName<abi>,\n  args extends ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  > = ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  >,\n> = ContractFunctionReturnType<\n  abi,\n  AbiStateMutability,\n  functionName extends ContractFunctionName<abi>\n    ? functionName\n    : ContractFunctionName<abi>,\n  args\n>\n\nexport type DecodeFunctionResultErrorType =\n  | AbiFunctionNotFoundErrorType\n  | AbiFunctionOutputsNotFoundErrorType\n  | DecodeAbiParametersErrorType\n  | GetAbiItemErrorType\n  | ErrorType\n\nexport function decodeFunctionResult<\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi> | undefined = undefined,\n  const args extends ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  > = ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  >,\n>(\n  parameters: DecodeFunctionResultParameters<abi, functionName, args>,\n): DecodeFunctionResultReturnType<abi, functionName, args> {\n  const { abi, args, functionName, data } =\n    parameters as DecodeFunctionResultParameters\n\n  let abiItem = abi[0]\n  if (functionName) {\n    const item = getAbiItem({ abi, args, name: functionName })\n    if (!item) throw new AbiFunctionNotFoundError(functionName, { docsPath })\n    abiItem = item\n  }\n\n  if (abiItem.type !== 'function')\n    throw new AbiFunctionNotFoundError(undefined, { docsPath })\n  if (!abiItem.outputs)\n    throw new AbiFunctionOutputsNotFoundError(abiItem.name, { docsPath })\n\n  const values = decodeAbiParameters(abiItem.outputs, data)\n  if (values && values.length > 1)\n    return values as DecodeFunctionResultReturnType<abi, functionName, args>\n  if (values && values.length === 1)\n    return values[0] as DecodeFunctionResultReturnType<abi, functionName, args>\n  return undefined as DecodeFunctionResultReturnType<abi, functionName, args>\n}\n", "/** @internal */\nexport const version = '0.1.1'\n", "import { version } from '../version.js'\n\n/** @internal */\nexport function getUrl(url: string) {\n  return url\n}\n\n/** @internal */\nexport function getVersion() {\n  return version\n}\n\n/** @internal */\nexport function prettyPrint(args: unknown) {\n  if (!args) return ''\n  const entries = Object.entries(args)\n    .map(([key, value]) => {\n      if (value === undefined || value === false) return null\n      return [key, value]\n    })\n    .filter(Boolean) as [string, string][]\n  const maxLength = entries.reduce((acc, [key]) => Math.max(acc, key.length), 0)\n  return entries\n    .map(([key, value]) => `  ${`${key}:`.padEnd(maxLength + 1)}  ${value}`)\n    .join('\\n')\n}\n", "import { getVersion } from './internal/errors.js'\n\nexport type GlobalErrorType<name extends string = 'Error'> = Error & {\n  name: name\n}\n\n/**\n * Base error class inherited by all errors thrown by ox.\n *\n * @example\n * ```ts\n * import { Errors } from 'ox'\n * throw new Errors.BaseError('An error occurred')\n * ```\n */\nexport class BaseError<\n  cause extends Error | undefined = undefined,\n> extends Error {\n  details: string\n  docs?: string | undefined\n  docsOrigin?: string | undefined\n  docsPath?: string | undefined\n  shortMessage: string\n  showVersion?: boolean | undefined\n  version?: string | undefined\n\n  override cause: cause\n  override name = 'BaseError'\n\n  static defaultStaticOptions = {\n    docsOrigin: 'https://oxlib.sh',\n    showVersion: false,\n    version: `ox@${getVersion()}`,\n  } satisfies BaseError.GlobalOptions\n\n  static setStaticOptions(options: BaseError.GlobalOptions) {\n    BaseError.prototype.docsOrigin = options.docsOrigin\n    BaseError.prototype.showVersion = options.showVersion\n    BaseError.prototype.version = options.version\n  }\n\n  static {\n    BaseError.setStaticOptions(BaseError.defaultStaticOptions)\n  }\n\n  constructor(shortMessage: string, options: BaseError.Options<cause> = {}) {\n    const details = (() => {\n      if (options.cause instanceof BaseError) {\n        if (options.cause.details) return options.cause.details\n        if (options.cause.shortMessage) return options.cause.shortMessage\n      }\n      if (\n        options.cause &&\n        'details' in options.cause &&\n        typeof options.cause.details === 'string'\n      )\n        return options.cause.details\n      if (options.cause?.message) return options.cause.message\n      return options.details!\n    })()\n    const docsPath = (() => {\n      if (options.cause instanceof BaseError)\n        return options.cause.docsPath || options.docsPath\n      return options.docsPath\n    })()\n\n    const docsBaseUrl = options.docsOrigin ?? BaseError.prototype.docsOrigin\n    const docs = `${docsBaseUrl}${docsPath ?? ''}`\n    const showVersion = Boolean(\n      options.version ?? BaseError.prototype.showVersion,\n    )\n    const version = options.version ?? BaseError.prototype.version\n\n    const message = [\n      shortMessage || 'An error occurred.',\n      ...(options.metaMessages ? ['', ...options.metaMessages] : []),\n      ...(details || docsPath || showVersion\n        ? [\n            '',\n            details ? `Details: ${details}` : undefined,\n            docsPath ? `See: ${docs}` : undefined,\n            showVersion ? `Version: ${version}` : undefined,\n          ]\n        : []),\n    ]\n      .filter((x) => typeof x === 'string')\n      .join('\\n')\n\n    super(message, options.cause ? { cause: options.cause } : undefined)\n\n    this.cause = options.cause as any\n    this.details = details\n    this.docs = docs\n    this.docsOrigin = docsBaseUrl\n    this.docsPath = docsPath\n    this.shortMessage = shortMessage\n    this.showVersion = showVersion\n    this.version = version\n  }\n\n  walk(): Error\n  walk(fn: (err: unknown) => boolean): Error | null\n  walk(fn?: any): any {\n    return walk(this, fn)\n  }\n}\n\nexport declare namespace BaseError {\n  type Options<cause extends Error | undefined = Error | undefined> = {\n    /** Cause of the error. */\n    cause?: cause | undefined\n    /** Details of the error. */\n    details?: string | undefined\n    /** Origin of the docs. */\n    docsOrigin?: string | undefined\n    /** Path of the docs. */\n    docsPath?: string | undefined\n    /** Meta messages to add to the error. */\n    metaMessages?: (string | undefined)[] | undefined\n    /** Version of the library to attribute the error to. */\n    version?: string | undefined\n  }\n\n  type GlobalOptions = {\n    /** Origin of the docs. */\n    docsOrigin?: string | undefined\n    /** Whether to show the version of the library in the error message. */\n    showVersion?: boolean | undefined\n    /** Version of the library to attribute the error to. */\n    version?: string | undefined\n  }\n}\n\n/** @internal */\nfunction walk(\n  err: unknown,\n  fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n  if (fn?.(err)) return err\n  if (err && typeof err === 'object' && 'cause' in err && err.cause)\n    return walk(err.cause, fn)\n  return fn ? null : err\n}\n", "import * as Bytes from '../Bytes.js'\nimport type * as Errors from '../Errors.js'\n\n/** @internal */\nexport function assertSize(bytes: Bytes.Bytes, size_: number): void {\n  if (Bytes.size(bytes) > size_)\n    throw new Bytes.SizeOverflowError({\n      givenSize: Bytes.size(bytes),\n      maxSize: size_,\n    })\n}\n\n/** @internal */\nexport declare namespace assertSize {\n  type ErrorType =\n    | Bytes.size.ErrorType\n    | Bytes.SizeOverflowError\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertStartOffset(\n  value: Bytes.Bytes,\n  start?: number | undefined,\n) {\n  if (typeof start === 'number' && start > 0 && start > Bytes.size(value) - 1)\n    throw new Bytes.SliceOffsetOutOfBoundsError({\n      offset: start,\n      position: 'start',\n      size: Bytes.size(value),\n    })\n}\n\nexport declare namespace assertStartOffset {\n  export type ErrorType =\n    | Bytes.SliceOffsetOutOfBoundsError\n    | Bytes.size.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertEndOffset(\n  value: Bytes.Bytes,\n  start?: number | undefined,\n  end?: number | undefined,\n) {\n  if (\n    typeof start === 'number' &&\n    typeof end === 'number' &&\n    Bytes.size(value) !== end - start\n  ) {\n    throw new Bytes.SliceOffsetOutOfBoundsError({\n      offset: end,\n      position: 'end',\n      size: Bytes.size(value),\n    })\n  }\n}\n\n/** @internal */\nexport declare namespace assertEndOffset {\n  type ErrorType =\n    | Bytes.SliceOffsetOutOfBoundsError\n    | Bytes.size.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport const charCodeMap = {\n  zero: 48,\n  nine: 57,\n  A: 65,\n  F: 70,\n  a: 97,\n  f: 102,\n} as const\n\n/** @internal */\nexport function charCodeToBase16(char: number) {\n  if (char >= charCodeMap.zero && char <= charCodeMap.nine)\n    return char - charCodeMap.zero\n  if (char >= charCodeMap.A && char <= charCodeMap.F)\n    return char - (charCodeMap.A - 10)\n  if (char >= charCodeMap.a && char <= charCodeMap.f)\n    return char - (charCodeMap.a - 10)\n  return undefined\n}\n\n/** @internal */\nexport function pad(bytes: Bytes.Bytes, options: pad.Options = {}) {\n  const { dir, size = 32 } = options\n  if (size === 0) return bytes\n  if (bytes.length > size)\n    throw new Bytes.SizeExceedsPaddingSizeError({\n      size: bytes.length,\n      targetSize: size,\n      type: 'Bytes',\n    })\n  const paddedBytes = new Uint8Array(size)\n  for (let i = 0; i < size; i++) {\n    const padEnd = dir === 'right'\n    paddedBytes[padEnd ? i : size - i - 1] =\n      bytes[padEnd ? i : bytes.length - i - 1]!\n  }\n  return paddedBytes\n}\n\n/** @internal */\nexport declare namespace pad {\n  type Options = {\n    dir?: 'left' | 'right' | undefined\n    size?: number | undefined\n  }\n\n  type ReturnType = Bytes.Bytes\n\n  type ErrorType = Bytes.SizeExceedsPaddingSizeError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function trim(\n  value: Bytes.Bytes,\n  options: trim.Options = {},\n): trim.ReturnType {\n  const { dir = 'left' } = options\n\n  let data = value\n\n  let sliceLength = 0\n  for (let i = 0; i < data.length - 1; i++) {\n    if (data[dir === 'left' ? i : data.length - i - 1]!.toString() === '0')\n      sliceLength++\n    else break\n  }\n  data =\n    dir === 'left'\n      ? data.slice(sliceLength)\n      : data.slice(0, data.length - sliceLength)\n\n  return data as trim.ReturnType\n}\n\n/** @internal */\nexport declare namespace trim {\n  type Options = {\n    dir?: 'left' | 'right' | undefined\n  }\n\n  type ReturnType = Bytes.Bytes\n\n  type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Errors from '../Errors.js'\nimport * as Hex from '../Hex.js'\n\n/** @internal */\nexport function assertSize(hex: Hex.Hex, size_: number): void {\n  if (Hex.size(hex) > size_)\n    throw new Hex.SizeOverflowError({\n      givenSize: Hex.size(hex),\n      maxSize: size_,\n    })\n}\n\n/** @internal */\nexport declare namespace assertSize {\n  type ErrorType =\n    | Hex.size.ErrorType\n    | Hex.SizeOverflowError\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertStartOffset(value: Hex.Hex, start?: number | undefined) {\n  if (typeof start === 'number' && start > 0 && start > Hex.size(value) - 1)\n    throw new Hex.SliceOffsetOutOfBoundsError({\n      offset: start,\n      position: 'start',\n      size: Hex.size(value),\n    })\n}\n\nexport declare namespace assertStartOffset {\n  type ErrorType =\n    | Hex.SliceOffsetOutOfBoundsError\n    | Hex.size.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertEndOffset(\n  value: Hex.Hex,\n  start?: number | undefined,\n  end?: number | undefined,\n) {\n  if (\n    typeof start === 'number' &&\n    typeof end === 'number' &&\n    Hex.size(value) !== end - start\n  ) {\n    throw new Hex.SliceOffsetOutOfBoundsError({\n      offset: end,\n      position: 'end',\n      size: Hex.size(value),\n    })\n  }\n}\n\nexport declare namespace assertEndOffset {\n  type ErrorType =\n    | Hex.SliceOffsetOutOfBoundsError\n    | Hex.size.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function pad(hex_: Hex.Hex, options: pad.Options = {}) {\n  const { dir, size = 32 } = options\n\n  if (size === 0) return hex_\n\n  const hex = hex_.replace('0x', '')\n  if (hex.length > size * 2)\n    throw new Hex.SizeExceedsPaddingSizeError({\n      size: Math.ceil(hex.length / 2),\n      targetSize: size,\n      type: 'Hex',\n    })\n\n  return `0x${hex[dir === 'right' ? 'padEnd' : 'padStart'](size * 2, '0')}` as Hex.Hex\n}\n\n/** @internal */\nexport declare namespace pad {\n  type Options = {\n    dir?: 'left' | 'right' | undefined\n    size?: number | undefined\n  }\n  type ErrorType = Hex.SizeExceedsPaddingSizeError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function trim(\n  value: Hex.Hex,\n  options: trim.Options = {},\n): trim.ReturnType {\n  const { dir = 'left' } = options\n\n  let data = value.replace('0x', '')\n\n  let sliceLength = 0\n  for (let i = 0; i < data.length - 1; i++) {\n    if (data[dir === 'left' ? i : data.length - i - 1]!.toString() === '0')\n      sliceLength++\n    else break\n  }\n  data =\n    dir === 'left'\n      ? data.slice(sliceLength)\n      : data.slice(0, data.length - sliceLength)\n\n  if (data === '0') return '0x'\n  if (dir === 'right' && data.length % 2 === 1) return `0x${data}0`\n  return `0x${data}` as trim.ReturnType\n}\n\n/** @internal */\nexport declare namespace trim {\n  type Options = {\n    dir?: 'left' | 'right' | undefined\n  }\n\n  type ReturnType = Hex.Hex\n\n  type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Errors from './Errors.js'\n\nconst bigIntSuffix = '#__bigint'\n\n/**\n * Serializes a value to a canonical JSON string as defined by\n * [RFC 8785 (JSON Canonicalization Scheme)](https://www.rfc-editor.org/rfc/rfc8785).\n *\n * - Object keys are sorted recursively by UTF-16 code unit comparison.\n * - Primitives are serialized per ECMAScript rules (no trailing zeros on numbers, etc.).\n * - No whitespace is inserted.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.canonicalize({ b: 2, a: 1 })\n * // @log: '{\"a\":1,\"b\":2}'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.canonicalize({ z: [3, { y: 1, x: 2 }], a: 'hello' })\n * // @log: '{\"a\":\"hello\",\"z\":[3,{\"x\":2,\"y\":1}]}'\n * ```\n *\n * @param value - The value to canonicalize.\n * @returns The canonical JSON string.\n */\nexport function canonicalize(value: unknown): string {\n  if (value === null || typeof value === 'boolean' || typeof value === 'string')\n    return JSON.stringify(value)\n  if (typeof value === 'number') {\n    if (!Number.isFinite(value))\n      throw new TypeError('Cannot canonicalize non-finite number')\n    return Object.is(value, -0) ? '0' : JSON.stringify(value)\n  }\n  if (typeof value === 'bigint')\n    throw new TypeError('Cannot canonicalize bigint')\n  if (Array.isArray(value))\n    return `[${value.map((item) => canonicalize(item)).join(',')}]`\n  if (typeof value === 'object') {\n    const entries = Object.keys(value as Record<string, unknown>)\n      .sort()\n      .reduce<string[]>((acc, key) => {\n        const v = (value as Record<string, unknown>)[key]\n        if (v !== undefined)\n          acc.push(`${JSON.stringify(key)}:${canonicalize(v)}`)\n        return acc\n      }, [])\n    return `{${entries.join(',')}}`\n  }\n  return undefined as never\n}\n\nexport declare namespace canonicalize {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses a JSON string, with support for `bigint`.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.parse('{\"foo\":\"bar\",\"baz\":\"69420694206942069420694206942069420694206942069420#__bigint\"}')\n * // @log: {\n * // @log:   foo: 'bar',\n * // @log:   baz: 69420694206942069420694206942069420694206942069420n\n * // @log: }\n * ```\n *\n * @param string - The value to parse.\n * @param reviver - A function that transforms the results.\n * @returns The parsed value.\n */\nexport function parse(\n  string: string,\n  reviver?: ((this: any, key: string, value: any) => any) | undefined,\n) {\n  return JSON.parse(string, (key, value_) => {\n    const value = value_\n    if (typeof value === 'string' && value.endsWith(bigIntSuffix))\n      return BigInt(value.slice(0, -bigIntSuffix.length))\n    return typeof reviver === 'function' ? reviver(key, value) : value\n  })\n}\n\nexport declare namespace parse {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Stringifies a value to its JSON representation, with support for `bigint`.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.stringify({\n *   foo: 'bar',\n *   baz: 69420694206942069420694206942069420694206942069420n,\n * })\n * // @log: '{\"foo\":\"bar\",\"baz\":\"69420694206942069420694206942069420694206942069420#__bigint\"}'\n * ```\n *\n * @param value - The value to stringify.\n * @param replacer - A function that transforms the results. It is passed the key and value of the property, and must return the value to be used in the JSON string. If this function returns `undefined`, the property is not included in the resulting JSON string.\n * @param space - A string or number that determines the indentation of the JSON string. If it is a number, it indicates the number of spaces to use as indentation; if it is a string (e.g. `'\\t'`), it uses the string as the indentation character.\n * @returns The JSON string.\n */\nexport function stringify(\n  value: any,\n  replacer?: ((this: any, key: string, value: any) => any) | null | undefined,\n  space?: string | number | undefined,\n) {\n  return JSON.stringify(\n    value,\n    (key, value) => {\n      if (typeof replacer === 'function') return replacer(key, value)\n      if (typeof value === 'bigint') return value.toString() + bigIntSuffix\n      return value\n    },\n    space,\n  )\n}\n\nexport declare namespace stringify {\n  type ErrorType = Errors.GlobalErrorType\n}\n", "import { equalBytes } from '@noble/curves/abstract/utils'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as internal from './internal/bytes.js'\nimport * as internal_hex from './internal/hex.js'\nimport * as Json from './Json.js'\n\nconst decoder = /*#__PURE__*/ new TextDecoder()\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\n/** Root type for a Bytes array. */\nexport type Bytes = Uint8Array\n\n/**\n * Asserts if the given value is {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.assert('abc')\n * // @error: Bytes.InvalidBytesTypeError:\n * // @error: Value `\"abc\"` of type `string` is an invalid Bytes value.\n * // @error: Bytes values must be of type `Uint8Array`.\n * ```\n *\n * @param value - Value to assert.\n */\nexport function assert(value: unknown): asserts value is Bytes {\n  if (value instanceof Uint8Array) return\n  if (!value) throw new InvalidBytesTypeError(value)\n  if (typeof value !== 'object') throw new InvalidBytesTypeError(value)\n  if (!('BYTES_PER_ELEMENT' in value)) throw new InvalidBytesTypeError(value)\n  if (value.BYTES_PER_ELEMENT !== 1 || value.constructor.name !== 'Uint8Array')\n    throw new InvalidBytesTypeError(value)\n}\n\nexport declare namespace assert {\n  type ErrorType = InvalidBytesTypeError | Errors.GlobalErrorType\n}\n\n/**\n * Concatenates two or more {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const bytes = Bytes.concat(\n *   Bytes.from([1]),\n *   Bytes.from([69]),\n *   Bytes.from([420, 69]),\n * )\n * // @log: Uint8Array [ 1, 69, 420, 69 ]\n * ```\n *\n * @param values - Values to concatenate.\n * @returns Concatenated {@link ox#Bytes.Bytes}.\n */\nexport function concat(...values: readonly Bytes[]): Bytes {\n  let length = 0\n  for (const arr of values) {\n    length += arr.length\n  }\n  const result = new Uint8Array(length)\n  for (let i = 0, index = 0; i < values.length; i++) {\n    const arr = values[i]\n    result.set(arr!, index)\n    index += arr!.length\n  }\n  return result\n}\n\nexport declare namespace concat {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a {@link ox#Bytes.Bytes} value from a `Uint8Array`, a hex string, or an array of unsigned 8-bit integers.\n *\n * :::tip\n *\n * To instantiate from a **Boolean**, **String**, or **Number**, use one of the following:\n *\n * - `Bytes.fromBoolean`\n *\n * - `Bytes.fromString`\n *\n * - `Bytes.fromNumber`\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.from([255, 124, 5, 4])\n * // @log: Uint8Array([255, 124, 5, 4])\n *\n * const data = Bytes.from('0xdeadbeef')\n * // @log: Uint8Array([222, 173, 190, 239])\n * ```\n *\n * @param value - Value to convert.\n * @returns A {@link ox#Bytes.Bytes} instance.\n */\nexport function from(value: Hex.Hex | Bytes | readonly number[]): Bytes {\n  if (value instanceof Uint8Array) return value\n  if (typeof value === 'string') return fromHex(value)\n  return fromArray(value)\n}\n\nexport declare namespace from {\n  type ErrorType =\n    | fromHex.ErrorType\n    | fromArray.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Converts an array of unsigned 8-bit integers into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromArray([255, 124, 5, 4])\n * // @log: Uint8Array([255, 124, 5, 4])\n * ```\n *\n * @param value - Value to convert.\n * @returns A {@link ox#Bytes.Bytes} instance.\n */\nexport function fromArray(value: readonly number[] | Uint8Array): Bytes {\n  return value instanceof Uint8Array ? value : new Uint8Array(value)\n}\n\nexport declare namespace fromArray {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Encodes a boolean value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromBoolean(true)\n * // @log: Uint8Array([1])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromBoolean(true, { size: 32 })\n * // @log: Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])\n * ```\n *\n * @param value - Boolean value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromBoolean(value: boolean, options: fromBoolean.Options = {}) {\n  const { size } = options\n  const bytes = new Uint8Array(1)\n  bytes[0] = Number(value)\n  if (typeof size === 'number') {\n    internal.assertSize(bytes, size)\n    return padLeft(bytes, size)\n  }\n  return bytes\n}\n\nexport declare namespace fromBoolean {\n  type Options = {\n    /** Size of the output bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal.assertSize.ErrorType\n    | padLeft.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Hex.Hex} value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromHex('0x48656c6c6f20776f726c6421')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromHex('0x48656c6c6f20776f726c6421', { size: 32 })\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n * ```\n *\n * @param value - {@link ox#Hex.Hex} value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromHex(value: Hex.Hex, options: fromHex.Options = {}): Bytes {\n  const { size } = options\n\n  let hex = value\n  if (size) {\n    internal_hex.assertSize(value, size)\n    hex = Hex.padRight(value, size)\n  }\n\n  let hexString = hex.slice(2) as string\n  if (hexString.length % 2) hexString = `0${hexString}`\n\n  const length = hexString.length / 2\n  const bytes = new Uint8Array(length)\n  for (let index = 0, j = 0; index < length; index++) {\n    const nibbleLeft = internal.charCodeToBase16(hexString.charCodeAt(j++))\n    const nibbleRight = internal.charCodeToBase16(hexString.charCodeAt(j++))\n    if (nibbleLeft === undefined || nibbleRight === undefined) {\n      throw new Errors.BaseError(\n        `Invalid byte sequence (\"${hexString[j - 2]}${hexString[j - 1]}\" in \"${hexString}\").`,\n      )\n    }\n    bytes[index] = (nibbleLeft << 4) | nibbleRight\n  }\n  return bytes\n}\n\nexport declare namespace fromHex {\n  type Options = {\n    /** Size of the output bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal_hex.assertSize.ErrorType\n    | Hex.padRight.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a number value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromNumber(420)\n * // @log: Uint8Array([1, 164])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromNumber(420, { size: 4 })\n * // @log: Uint8Array([0, 0, 1, 164])\n * ```\n *\n * @param value - Number value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromNumber(\n  value: bigint | number,\n  options?: fromNumber.Options | undefined,\n) {\n  const hex = Hex.fromNumber(value, options)\n  return fromHex(hex)\n}\n\nexport declare namespace fromNumber {\n  export type Options = Hex.fromNumber.Options\n\n  export type ErrorType =\n    | Hex.fromNumber.ErrorType\n    | fromHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a string into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromString('Hello world!')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromString('Hello world!', { size: 32 })\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n * ```\n *\n * @param value - String to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromString(\n  value: string,\n  options: fromString.Options = {},\n): Bytes {\n  const { size } = options\n\n  const bytes = encoder.encode(value)\n  if (typeof size === 'number') {\n    internal.assertSize(bytes, size)\n    return padRight(bytes, size)\n  }\n  return bytes\n}\n\nexport declare namespace fromString {\n  type Options = {\n    /** Size of the output bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal.assertSize.ErrorType\n    | padRight.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Checks if two {@link ox#Bytes.Bytes} values are equal.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.isEqual(Bytes.from([1]), Bytes.from([1]))\n * // @log: true\n *\n * Bytes.isEqual(Bytes.from([1]), Bytes.from([2]))\n * // @log: false\n * ```\n *\n * @param bytesA - First {@link ox#Bytes.Bytes} value.\n * @param bytesB - Second {@link ox#Bytes.Bytes} value.\n * @returns `true` if the two values are equal, otherwise `false`.\n */\nexport function isEqual(bytesA: Bytes, bytesB: Bytes) {\n  return equalBytes(bytesA, bytesB)\n}\n\nexport declare namespace isEqual {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Bytes.Bytes} value to the left with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padLeft(Bytes.from([1]), 4)\n * // @log: Uint8Array([0, 0, 0, 1])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value to pad.\n * @param size - Size to pad the {@link ox#Bytes.Bytes} value to.\n * @returns Padded {@link ox#Bytes.Bytes} value.\n */\nexport function padLeft(\n  value: Bytes,\n  size?: number | undefined,\n): padLeft.ReturnType {\n  return internal.pad(value, { dir: 'left', size })\n}\n\nexport declare namespace padLeft {\n  type ReturnType = internal.pad.ReturnType\n  type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Bytes.Bytes} value to the right with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padRight(Bytes.from([1]), 4)\n * // @log: Uint8Array([1, 0, 0, 0])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value to pad.\n * @param size - Size to pad the {@link ox#Bytes.Bytes} value to.\n * @returns Padded {@link ox#Bytes.Bytes} value.\n */\nexport function padRight(\n  value: Bytes,\n  size?: number | undefined,\n): padRight.ReturnType {\n  return internal.pad(value, { dir: 'right', size })\n}\n\nexport declare namespace padRight {\n  type ReturnType = internal.pad.ReturnType\n  type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Generates random {@link ox#Bytes.Bytes} of the specified length.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const bytes = Bytes.random(32)\n * // @log: Uint8Array([... x32])\n * ```\n *\n * @param length - Length of the random {@link ox#Bytes.Bytes} to generate.\n * @returns Random {@link ox#Bytes.Bytes} of the specified length.\n */\nexport function random(length: number): Bytes {\n  return crypto.getRandomValues(new Uint8Array(length))\n}\n\nexport declare namespace random {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Retrieves the size of a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.size(Bytes.from([1, 2, 3, 4]))\n * // @log: 4\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Size of the {@link ox#Bytes.Bytes} value.\n */\nexport function size(value: Bytes): number {\n  return value.length\n}\n\nexport declare namespace size {\n  export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Returns a section of a {@link ox#Bytes.Bytes} value given a start/end bytes offset.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.slice(\n *   Bytes.from([1, 2, 3, 4, 5, 6, 7, 8, 9]),\n *   1,\n *   4,\n * )\n * // @log: Uint8Array([2, 3, 4])\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value.\n * @param start - Start offset.\n * @param end - End offset.\n * @param options - Slice options.\n * @returns Sliced {@link ox#Bytes.Bytes} value.\n */\nexport function slice(\n  value: Bytes,\n  start?: number | undefined,\n  end?: number | undefined,\n  options: slice.Options = {},\n): Bytes {\n  const { strict } = options\n  internal.assertStartOffset(value, start)\n  const value_ = value.slice(start, end)\n  if (strict) internal.assertEndOffset(value_, start, end)\n  return value_\n}\n\nexport declare namespace slice {\n  type Options = {\n    /** Asserts that the sliced value is the same size as the given start/end offsets. */\n    strict?: boolean | undefined\n  }\n\n  export type ErrorType =\n    | internal.assertStartOffset.ErrorType\n    | internal.assertEndOffset.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a bigint.\n *\n * @example\n * ```ts\n * import { Bytes } from 'ox'\n *\n * Bytes.toBigInt(Bytes.from([1, 164]))\n * // @log: 420n\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Decoding options.\n * @returns Decoded bigint.\n */\nexport function toBigInt(bytes: Bytes, options: toBigInt.Options = {}): bigint {\n  const { size } = options\n  if (typeof size !== 'undefined') internal.assertSize(bytes, size)\n  const hex = Hex.fromBytes(bytes, options)\n  return Hex.toBigInt(hex, options)\n}\n\nexport declare namespace toBigInt {\n  type Options = {\n    /** Whether or not the number of a signed representation. */\n    signed?: boolean | undefined\n    /** Size of the bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | Hex.fromBytes.ErrorType\n    | Hex.toBigInt.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a boolean.\n *\n * @example\n * ```ts\n * import { Bytes } from 'ox'\n *\n * Bytes.toBoolean(Bytes.from([1]))\n * // @log: true\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Decoding options.\n * @returns Decoded boolean.\n */\nexport function toBoolean(\n  bytes: Bytes,\n  options: toBoolean.Options = {},\n): boolean {\n  const { size } = options\n  let bytes_ = bytes\n  if (typeof size !== 'undefined') {\n    internal.assertSize(bytes_, size)\n    bytes_ = trimLeft(bytes_)\n  }\n  if (bytes_.length > 1 || bytes_[0]! > 1)\n    throw new InvalidBytesBooleanError(bytes_)\n  return Boolean(bytes_[0])\n}\n\nexport declare namespace toBoolean {\n  type Options = {\n    /** Size of the bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal.assertSize.ErrorType\n    | trimLeft.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toHex(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Options.\n * @returns Decoded {@link ox#Hex.Hex} value.\n */\nexport function toHex(value: Bytes, options: toHex.Options = {}): Hex.Hex {\n  return Hex.fromBytes(value, options)\n}\n\nexport declare namespace toHex {\n  type Options = {\n    /** Size of the bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType = Hex.fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a number.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toNumber(Bytes.from([1, 164]))\n * // @log: 420\n * ```\n */\nexport function toNumber(bytes: Bytes, options: toNumber.Options = {}): number {\n  const { size } = options\n  if (typeof size !== 'undefined') internal.assertSize(bytes, size)\n  const hex = Hex.fromBytes(bytes, options)\n  return Hex.toNumber(hex, options)\n}\n\nexport declare namespace toNumber {\n  type Options = {\n    /** Whether or not the number of a signed representation. */\n    signed?: boolean | undefined\n    /** Size of the bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | Hex.fromBytes.ErrorType\n    | Hex.toNumber.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a string.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.toString(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: 'Hello world'\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Options.\n * @returns Decoded string.\n */\nexport function toString(bytes: Bytes, options: toString.Options = {}): string {\n  const { size } = options\n\n  let bytes_ = bytes\n  if (typeof size !== 'undefined') {\n    internal.assertSize(bytes_, size)\n    bytes_ = trimRight(bytes_)\n  }\n  return decoder.decode(bytes_)\n}\n\nexport declare namespace toString {\n  export type Options = {\n    /** Size of the bytes. */\n    size?: number | undefined\n  }\n\n  export type ErrorType =\n    | internal.assertSize.ErrorType\n    | trimRight.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Trims leading zeros from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.trimLeft(Bytes.from([0, 0, 0, 0, 1, 2, 3]))\n * // @log: Uint8Array([1, 2, 3])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Trimmed {@link ox#Bytes.Bytes} value.\n */\nexport function trimLeft(value: Bytes): Bytes {\n  return internal.trim(value, { dir: 'left' })\n}\n\nexport declare namespace trimLeft {\n  type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Trims trailing zeros from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.trimRight(Bytes.from([1, 2, 3, 0, 0, 0, 0]))\n * // @log: Uint8Array([1, 2, 3])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Trimmed {@link ox#Bytes.Bytes} value.\n */\nexport function trimRight(value: Bytes): Bytes {\n  return internal.trim(value, { dir: 'right' })\n}\n\nexport declare namespace trimRight {\n  export type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if the given value is {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.validate('0x')\n * // @log: false\n *\n * Bytes.validate(Bytes.from([1, 2, 3]))\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns `true` if the value is {@link ox#Bytes.Bytes}, otherwise `false`.\n */\nexport function validate(value: unknown): value is Bytes {\n  try {\n    assert(value)\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Thrown when the bytes value cannot be represented as a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toBoolean(Bytes.from([5]))\n * // @error: Bytes.InvalidBytesBooleanError: Bytes value `[5]` is not a valid boolean.\n * // @error: The bytes array must contain a single byte of either a `0` or `1` value.\n * ```\n */\nexport class InvalidBytesBooleanError extends Errors.BaseError {\n  override readonly name = 'Bytes.InvalidBytesBooleanError'\n\n  constructor(bytes: Bytes) {\n    super(`Bytes value \\`${bytes}\\` is not a valid boolean.`, {\n      metaMessages: [\n        'The bytes array must contain a single byte of either a `0` or `1` value.',\n      ],\n    })\n  }\n}\n\n/**\n * Thrown when a value cannot be converted to bytes.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Bytes } from 'ox'\n *\n * Bytes.from('foo')\n * // @error: Bytes.InvalidBytesTypeError: Value `foo` of type `string` is an invalid Bytes value.\n * ```\n */\nexport class InvalidBytesTypeError extends Errors.BaseError {\n  override readonly name = 'Bytes.InvalidBytesTypeError'\n\n  constructor(value: unknown) {\n    super(\n      `Value \\`${typeof value === 'object' ? Json.stringify(value) : value}\\` of type \\`${typeof value}\\` is an invalid Bytes value.`,\n      {\n        metaMessages: ['Bytes values must be of type `Bytes`.'],\n      },\n    )\n  }\n}\n\n/**\n * Thrown when a size exceeds the maximum allowed size.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.fromString('Hello World!', { size: 8 })\n * // @error: Bytes.SizeOverflowError: Size cannot exceed `8` bytes. Given size: `12` bytes.\n * ```\n */\nexport class SizeOverflowError extends Errors.BaseError {\n  override readonly name = 'Bytes.SizeOverflowError'\n\n  constructor({ givenSize, maxSize }: { givenSize: number; maxSize: number }) {\n    super(\n      `Size cannot exceed \\`${maxSize}\\` bytes. Given size: \\`${givenSize}\\` bytes.`,\n    )\n  }\n}\n\n/**\n * Thrown when a slice offset is out-of-bounds.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.slice(Bytes.from([1, 2, 3]), 4)\n * // @error: Bytes.SliceOffsetOutOfBoundsError: Slice starting at offset `4` is out-of-bounds (size: `3`).\n * ```\n */\nexport class SliceOffsetOutOfBoundsError extends Errors.BaseError {\n  override readonly name = 'Bytes.SliceOffsetOutOfBoundsError'\n\n  constructor({\n    offset,\n    position,\n    size,\n  }: { offset: number; position: 'start' | 'end'; size: number }) {\n    super(\n      `Slice ${\n        position === 'start' ? 'starting' : 'ending'\n      } at offset \\`${offset}\\` is out-of-bounds (size: \\`${size}\\`).`,\n    )\n  }\n}\n\n/**\n * Thrown when a the padding size exceeds the maximum allowed size.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padLeft(Bytes.fromString('Hello World!'), 8)\n * // @error: [Bytes.SizeExceedsPaddingSizeError: Bytes size (`12`) exceeds padding size (`8`).\n * ```\n */\nexport class SizeExceedsPaddingSizeError extends Errors.BaseError {\n  override readonly name = 'Bytes.SizeExceedsPaddingSizeError'\n\n  constructor({\n    size,\n    targetSize,\n    type,\n  }: {\n    size: number\n    targetSize: number\n    type: 'Hex' | 'Bytes'\n  }) {\n    super(\n      `${type.charAt(0).toUpperCase()}${type\n        .slice(1)\n        .toLowerCase()} size (\\`${size}\\`) exceeds padding size (\\`${targetSize}\\`).`,\n    )\n  }\n}\n", "import { equalBytes } from '@noble/curves/abstract/utils'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as internal_bytes from './internal/bytes.js'\nimport * as internal from './internal/hex.js'\nimport * as Json from './Json.js'\n\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\nconst hexes = /*#__PURE__*/ Array.from({ length: 256 }, (_v, i) =>\n  i.toString(16).padStart(2, '0'),\n)\n\n/** Root type for a Hex string. */\nexport type Hex = `0x${string}`\n\n/**\n * Asserts if the given value is {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert('abc')\n * // @error: InvalidHexValueTypeError:\n * // @error: Value `\"abc\"` of type `string` is an invalid hex type.\n * // @error: Hex types must be represented as `\"0x\\${string}\"`.\n * ```\n *\n * @param value - The value to assert.\n * @param options - Options.\n */\nexport function assert(\n  value: unknown,\n  options: assert.Options = {},\n): asserts value is Hex {\n  const { strict = false } = options\n  if (!value) throw new InvalidHexTypeError(value)\n  if (typeof value !== 'string') throw new InvalidHexTypeError(value)\n  if (strict) {\n    if (!/^0x[0-9a-fA-F]*$/.test(value)) throw new InvalidHexValueError(value)\n  }\n  if (!value.startsWith('0x')) throw new InvalidHexValueError(value)\n}\n\nexport declare namespace assert {\n  type Options = {\n    /** Checks if the {@link ox#Hex.Hex} value contains invalid hexadecimal characters. @default false */\n    strict?: boolean | undefined\n  }\n\n  type ErrorType =\n    | InvalidHexTypeError\n    | InvalidHexValueError\n    | Errors.GlobalErrorType\n}\n\n/**\n * Concatenates two or more {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.concat('0x123', '0x456')\n * // @log: '0x123456'\n * ```\n *\n * @param values - The {@link ox#Hex.Hex} values to concatenate.\n * @returns The concatenated {@link ox#Hex.Hex} value.\n */\nexport function concat(...values: readonly Hex[]): Hex {\n  return `0x${(values as Hex[]).reduce((acc, x) => acc + x.replace('0x', ''), '')}`\n}\n\nexport declare namespace concat {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a {@link ox#Hex.Hex} value from a hex string or {@link ox#Bytes.Bytes} value.\n *\n * :::tip\n *\n * To instantiate from a **Boolean**, **String**, or **Number**, use one of the following:\n *\n * - `Hex.fromBoolean`\n *\n * - `Hex.fromString`\n *\n * - `Hex.fromNumber`\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.from('0x48656c6c6f20576f726c6421')\n * // @log: '0x48656c6c6f20576f726c6421'\n *\n * Hex.from(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value to encode.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function from(value: Hex | Bytes.Bytes | readonly number[]): Hex {\n  if (value instanceof Uint8Array) return fromBytes(value)\n  if (Array.isArray(value)) return fromBytes(new Uint8Array(value))\n  return value as never\n}\n\nexport declare namespace from {\n  type Options = {\n    /** The size (in bytes) of the output hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType = fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a boolean into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromBoolean(true)\n * // @log: '0x1'\n *\n * Hex.fromBoolean(false)\n * // @log: '0x0'\n *\n * Hex.fromBoolean(true, { size: 32 })\n * // @log: '0x0000000000000000000000000000000000000000000000000000000000000001'\n * ```\n *\n * @param value - The boolean value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromBoolean(\n  value: boolean,\n  options: fromBoolean.Options = {},\n): Hex {\n  const hex: Hex = `0x${Number(value)}`\n  if (typeof options.size === 'number') {\n    internal.assertSize(hex, options.size)\n    return padLeft(hex, options.size)\n  }\n  return hex\n}\n\nexport declare namespace fromBoolean {\n  type Options = {\n    /** The size (in bytes) of the output hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal.assertSize.ErrorType\n    | padLeft.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.fromBytes(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromBytes(\n  value: Bytes.Bytes,\n  options: fromBytes.Options = {},\n): Hex {\n  let string = ''\n  for (let i = 0; i < value.length; i++) string += hexes[value[i]!]\n  const hex = `0x${string}` as const\n\n  if (typeof options.size === 'number') {\n    internal.assertSize(hex, options.size)\n    return padRight(hex, options.size)\n  }\n  return hex\n}\n\nexport declare namespace fromBytes {\n  type Options = {\n    /** The size (in bytes) of the output hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal.assertSize.ErrorType\n    | padRight.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a number or bigint into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromNumber(420)\n * // @log: '0x1a4'\n *\n * Hex.fromNumber(420, { size: 32 })\n * // @log: '0x00000000000000000000000000000000000000000000000000000000000001a4'\n * ```\n *\n * @param value - The number or bigint value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromNumber(\n  value: number | bigint,\n  options: fromNumber.Options = {},\n): Hex {\n  const { signed, size } = options\n\n  const value_ = BigInt(value)\n\n  let maxValue: bigint | number | undefined\n  if (size) {\n    if (signed) maxValue = (1n << (BigInt(size) * 8n - 1n)) - 1n\n    else maxValue = 2n ** (BigInt(size) * 8n) - 1n\n  } else if (typeof value === 'number') {\n    maxValue = BigInt(Number.MAX_SAFE_INTEGER)\n  }\n\n  const minValue = typeof maxValue === 'bigint' && signed ? -maxValue - 1n : 0\n\n  if ((maxValue && value_ > maxValue) || value_ < minValue) {\n    const suffix = typeof value === 'bigint' ? 'n' : ''\n    throw new IntegerOutOfRangeError({\n      max: maxValue ? `${maxValue}${suffix}` : undefined,\n      min: `${minValue}${suffix}`,\n      signed,\n      size,\n      value: `${value}${suffix}`,\n    })\n  }\n\n  const stringValue = (\n    signed && value_ < 0 ? BigInt.asUintN(size * 8, BigInt(value_)) : value_\n  ).toString(16)\n\n  const hex = `0x${stringValue}` as Hex\n  if (size) return padLeft(hex, size) as Hex\n  return hex\n}\n\nexport declare namespace fromNumber {\n  type Options =\n    | {\n        /** Whether or not the number of a signed representation. */\n        signed?: boolean | undefined\n        /** The size (in bytes) of the output hex value. */\n        size: number\n      }\n    | {\n        signed?: undefined\n        /** The size (in bytes) of the output hex value. */\n        size?: number | undefined\n      }\n\n  type ErrorType =\n    | IntegerOutOfRangeError\n    | padLeft.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a string into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n * Hex.fromString('Hello World!')\n * // '0x48656c6c6f20576f726c6421'\n *\n * Hex.fromString('Hello World!', { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n * ```\n *\n * @param value - The string value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromString(\n  value: string,\n  options: fromString.Options = {},\n): Hex {\n  return fromBytes(encoder.encode(value), options)\n}\n\nexport declare namespace fromString {\n  type Options = {\n    /** The size (in bytes) of the output hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType = fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if two {@link ox#Hex.Hex} values are equal.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.isEqual('0xdeadbeef', '0xdeadbeef')\n * // @log: true\n *\n * Hex.isEqual('0xda', '0xba')\n * // @log: false\n * ```\n *\n * @param hexA - The first {@link ox#Hex.Hex} value.\n * @param hexB - The second {@link ox#Hex.Hex} value.\n * @returns `true` if the two {@link ox#Hex.Hex} values are equal, `false` otherwise.\n */\nexport function isEqual(hexA: Hex, hexB: Hex) {\n  return equalBytes(Bytes.fromHex(hexA), Bytes.fromHex(hexB))\n}\n\nexport declare namespace isEqual {\n  type ErrorType = Bytes.fromHex.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Hex.Hex} value to the left with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.padLeft('0x1234', 4)\n * // @log: '0x00001234'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to pad.\n * @param size - The size (in bytes) of the output hex value.\n * @returns The padded {@link ox#Hex.Hex} value.\n */\nexport function padLeft(\n  value: Hex,\n  size?: number | undefined,\n): padLeft.ReturnType {\n  return internal.pad(value, { dir: 'left', size })\n}\n\nexport declare namespace padLeft {\n  type ReturnType = Hex\n  type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Hex.Hex} value to the right with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts\n * import { Hex } from 'ox'\n *\n * Hex.padRight('0x1234', 4)\n * // @log: '0x12340000'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to pad.\n * @param size - The size (in bytes) of the output hex value.\n * @returns The padded {@link ox#Hex.Hex} value.\n */\nexport function padRight(\n  value: Hex,\n  size?: number | undefined,\n): padRight.ReturnType {\n  return internal.pad(value, { dir: 'right', size })\n}\n\nexport declare namespace padRight {\n  type ReturnType = Hex\n  type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Generates a random {@link ox#Hex.Hex} value of the specified length.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * const hex = Hex.random(32)\n * // @log: '0x...'\n * ```\n *\n * @returns Random {@link ox#Hex.Hex} value.\n */\nexport function random(length: number): Hex {\n  return fromBytes(Bytes.random(length))\n}\n\nexport declare namespace random {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Returns a section of a {@link ox#Bytes.Bytes} value given a start/end bytes offset.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.slice('0x0123456789', 1, 4)\n * // @log: '0x234567'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to slice.\n * @param start - The start offset (in bytes).\n * @param end - The end offset (in bytes).\n * @param options - Options.\n * @returns The sliced {@link ox#Hex.Hex} value.\n */\nexport function slice(\n  value: Hex,\n  start?: number | undefined,\n  end?: number | undefined,\n  options: slice.Options = {},\n): Hex {\n  const { strict } = options\n  internal.assertStartOffset(value, start)\n  const value_ = `0x${value\n    .replace('0x', '')\n    .slice((start ?? 0) * 2, (end ?? value.length) * 2)}` as const\n  if (strict) internal.assertEndOffset(value_, start, end)\n  return value_\n}\n\nexport declare namespace slice {\n  type Options = {\n    /** Asserts that the sliced value is the same size as the given start/end offsets. */\n    strict?: boolean | undefined\n  }\n\n  type ErrorType =\n    | internal.assertStartOffset.ErrorType\n    | internal.assertEndOffset.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Retrieves the size of a {@link ox#Hex.Hex} value (in bytes).\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.size('0xdeadbeef')\n * // @log: 4\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to get the size of.\n * @returns The size of the {@link ox#Hex.Hex} value (in bytes).\n */\nexport function size(value: Hex): number {\n  return Math.ceil((value.length - 2) / 2)\n}\n\nexport declare namespace size {\n  export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Trims leading zeros from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.trimLeft('0x00000000deadbeef')\n * // @log: '0xdeadbeef'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to trim.\n * @returns The trimmed {@link ox#Hex.Hex} value.\n */\nexport function trimLeft(value: Hex): trimLeft.ReturnType {\n  return internal.trim(value, { dir: 'left' })\n}\n\nexport declare namespace trimLeft {\n  type ReturnType = Hex\n\n  type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Trims trailing zeros from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.trimRight('0xdeadbeef00000000')\n * // @log: '0xdeadbeef'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to trim.\n * @returns The trimmed {@link ox#Hex.Hex} value.\n */\nexport function trimRight(value: Hex): trimRight.ReturnType {\n  return internal.trim(value, { dir: 'right' })\n}\n\nexport declare namespace trimRight {\n  type ReturnType = Hex\n\n  type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a BigInt.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBigInt('0x1a4')\n * // @log: 420n\n *\n * Hex.toBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // @log: 420n\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded BigInt.\n */\nexport function toBigInt(hex: Hex, options: toBigInt.Options = {}): bigint {\n  const { signed } = options\n\n  if (options.size) internal.assertSize(hex, options.size)\n\n  const value = BigInt(hex)\n  if (!signed) return value\n\n  const size = (hex.length - 2) / 2\n\n  const max_unsigned = (1n << (BigInt(size) * 8n)) - 1n\n  const max_signed = max_unsigned >> 1n\n\n  if (value <= max_signed) return value\n  return value - max_unsigned - 1n\n}\n\nexport declare namespace toBigInt {\n  type Options = {\n    /** Whether or not the number of a signed representation. */\n    signed?: boolean | undefined\n    /** Size (in bytes) of the hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType = internal.assertSize.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBoolean('0x01')\n * // @log: true\n *\n * Hex.toBoolean('0x0000000000000000000000000000000000000000000000000000000000000001', { size: 32 })\n * // @log: true\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded boolean.\n */\nexport function toBoolean(hex: Hex, options: toBoolean.Options = {}): boolean {\n  if (options.size) internal.assertSize(hex, options.size)\n  const hex_ = trimLeft(hex)\n  if (hex_ === '0x') return false\n  if (hex_ === '0x1') return true\n  throw new InvalidHexBooleanError(hex)\n}\n\nexport declare namespace toBoolean {\n  type Options = {\n    /** Size (in bytes) of the hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal.assertSize.ErrorType\n    | trimLeft.ErrorType\n    | InvalidHexBooleanError\n    | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * const data = Hex.toBytes('0x48656c6c6f20776f726c6421')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded {@link ox#Bytes.Bytes}.\n */\nexport function toBytes(hex: Hex, options: toBytes.Options = {}): Bytes.Bytes {\n  return Bytes.fromHex(hex, options)\n}\n\nexport declare namespace toBytes {\n  type Options = {\n    /** Size (in bytes) of the hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType = Bytes.fromHex.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a number.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toNumber('0x1a4')\n * // @log: 420\n *\n * Hex.toNumber('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // @log: 420\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded number.\n */\nexport function toNumber(hex: Hex, options: toNumber.Options = {}): number {\n  const { signed, size } = options\n  if (!signed && !size) return Number(hex)\n  return Number(toBigInt(hex, options))\n}\n\nexport declare namespace toNumber {\n  type Options = toBigInt.Options\n\n  type ErrorType = toBigInt.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a string.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toString('0x48656c6c6f20576f726c6421')\n * // @log: 'Hello world!'\n *\n * Hex.toString('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n *  size: 32,\n * })\n * // @log: 'Hello world'\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded string.\n */\nexport function toString(hex: Hex, options: toString.Options = {}): string {\n  const { size } = options\n\n  let bytes = Bytes.fromHex(hex)\n  if (size) {\n    internal_bytes.assertSize(bytes, size)\n    bytes = Bytes.trimRight(bytes)\n  }\n  return new TextDecoder().decode(bytes)\n}\n\nexport declare namespace toString {\n  type Options = {\n    /** Size (in bytes) of the hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal_bytes.assertSize.ErrorType\n    | Bytes.fromHex.ErrorType\n    | Bytes.trimRight.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Checks if the given value is {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.validate('0xdeadbeef')\n * // @log: true\n *\n * Hex.validate(Bytes.from([1, 2, 3]))\n * // @log: false\n * ```\n *\n * @param value - The value to check.\n * @param options - Options.\n * @returns `true` if the value is a {@link ox#Hex.Hex}, `false` otherwise.\n */\nexport function validate(\n  value: unknown,\n  options: validate.Options = {},\n): value is Hex {\n  const { strict = false } = options\n  try {\n    assert(value, { strict })\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  type Options = {\n    /** Checks if the {@link ox#Hex.Hex} value contains invalid hexadecimal characters. @default false */\n    strict?: boolean | undefined\n  }\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Thrown when the provided integer is out of range, and cannot be represented as a hex value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromNumber(420182738912731283712937129)\n * // @error: Hex.IntegerOutOfRangeError: Number \\`4.2018273891273126e+26\\` is not in safe unsigned integer range (`0` to `9007199254740991`)\n * ```\n */\nexport class IntegerOutOfRangeError extends Errors.BaseError {\n  override readonly name = 'Hex.IntegerOutOfRangeError'\n\n  constructor({\n    max,\n    min,\n    signed,\n    size,\n    value,\n  }: {\n    max?: string | undefined\n    min: string\n    signed?: boolean | undefined\n    size?: number | undefined\n    value: string\n  }) {\n    super(\n      `Number \\`${value}\\` is not in safe${\n        size ? ` ${size * 8}-bit` : ''\n      }${signed ? ' signed' : ' unsigned'} integer range ${max ? `(\\`${min}\\` to \\`${max}\\`)` : `(above \\`${min}\\`)`}`,\n    )\n  }\n}\n\n/**\n * Thrown when the provided hex value cannot be represented as a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBoolean('0xa')\n * // @error: Hex.InvalidHexBooleanError: Hex value `\"0xa\"` is not a valid boolean.\n * // @error: The hex value must be `\"0x0\"` (false) or `\"0x1\"` (true).\n * ```\n */\nexport class InvalidHexBooleanError extends Errors.BaseError {\n  override readonly name = 'Hex.InvalidHexBooleanError'\n\n  constructor(hex: Hex) {\n    super(`Hex value \\`\"${hex}\"\\` is not a valid boolean.`, {\n      metaMessages: [\n        'The hex value must be `\"0x0\"` (false) or `\"0x1\"` (true).',\n      ],\n    })\n  }\n}\n\n/**\n * Thrown when the provided value is not a valid hex type.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert(1)\n * // @error: Hex.InvalidHexTypeError: Value `1` of type `number` is an invalid hex type.\n * ```\n */\nexport class InvalidHexTypeError extends Errors.BaseError {\n  override readonly name = 'Hex.InvalidHexTypeError'\n\n  constructor(value: unknown) {\n    super(\n      `Value \\`${typeof value === 'object' ? Json.stringify(value) : value}\\` of type \\`${typeof value}\\` is an invalid hex type.`,\n      {\n        metaMessages: ['Hex types must be represented as `\"0x${string}\"`.'],\n      },\n    )\n  }\n}\n\n/**\n * Thrown when the provided hex value is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert('0x0123456789abcdefg')\n * // @error: Hex.InvalidHexValueError: Value `0x0123456789abcdefg` is an invalid hex value.\n * // @error: Hex values must start with `\"0x\"` and contain only hexadecimal characters (0-9, a-f, A-F).\n * ```\n */\nexport class InvalidHexValueError extends Errors.BaseError {\n  override readonly name = 'Hex.InvalidHexValueError'\n\n  constructor(value: unknown) {\n    super(`Value \\`${value}\\` is an invalid hex value.`, {\n      metaMessages: [\n        'Hex values must start with `\"0x\"` and contain only hexadecimal characters (0-9, a-f, A-F).',\n      ],\n    })\n  }\n}\n\n/**\n * Thrown when the provided hex value is an odd length.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.fromHex('0xabcde')\n * // @error: Hex.InvalidLengthError: Hex value `\"0xabcde\"` is an odd length (5 nibbles).\n * ```\n */\nexport class InvalidLengthError extends Errors.BaseError {\n  override readonly name = 'Hex.InvalidLengthError'\n\n  constructor(value: Hex) {\n    super(\n      `Hex value \\`\"${value}\"\\` is an odd length (${value.length - 2} nibbles).`,\n      {\n        metaMessages: ['It must be an even length.'],\n      },\n    )\n  }\n}\n\n/**\n * Thrown when the size of the value exceeds the expected max size.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromString('Hello World!', { size: 8 })\n * // @error: Hex.SizeOverflowError: Size cannot exceed `8` bytes. Given size: `12` bytes.\n * ```\n */\nexport class SizeOverflowError extends Errors.BaseError {\n  override readonly name = 'Hex.SizeOverflowError'\n\n  constructor({ givenSize, maxSize }: { givenSize: number; maxSize: number }) {\n    super(\n      `Size cannot exceed \\`${maxSize}\\` bytes. Given size: \\`${givenSize}\\` bytes.`,\n    )\n  }\n}\n\n/**\n * Thrown when the slice offset exceeds the bounds of the value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.slice('0x0123456789', 6)\n * // @error: Hex.SliceOffsetOutOfBoundsError: Slice starting at offset `6` is out-of-bounds (size: `5`).\n * ```\n */\nexport class SliceOffsetOutOfBoundsError extends Errors.BaseError {\n  override readonly name = 'Hex.SliceOffsetOutOfBoundsError'\n\n  constructor({\n    offset,\n    position,\n    size,\n  }: { offset: number; position: 'start' | 'end'; size: number }) {\n    super(\n      `Slice ${\n        position === 'start' ? 'starting' : 'ending'\n      } at offset \\`${offset}\\` is out-of-bounds (size: \\`${size}\\`).`,\n    )\n  }\n}\n\n/**\n * Thrown when the size of the value exceeds the pad size.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.padLeft('0x1a4e12a45a21323123aaa87a897a897a898a6567a578a867a98778a667a85a875a87a6a787a65a675a6a9', 32)\n * // @error: Hex.SizeExceedsPaddingSizeError: Hex size (`43`) exceeds padding size (`32`).\n * ```\n */\nexport class SizeExceedsPaddingSizeError extends Errors.BaseError {\n  override readonly name = 'Hex.SizeExceedsPaddingSizeError'\n\n  constructor({\n    size,\n    targetSize,\n    type,\n  }: {\n    size: number\n    targetSize: number\n    type: 'Hex' | 'Bytes'\n  }) {\n    super(\n      `${type.charAt(0).toUpperCase()}${type\n        .slice(1)\n        .toLowerCase()} size (\\`${size}\\`) exceeds padding size (\\`${targetSize}\\`).`,\n    )\n  }\n}\n", "import type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\n\n/** A Withdrawal as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/withdrawal.yaml). */\nexport type Withdrawal<bigintType = bigint, numberType = number> = {\n  address: Hex.Hex\n  amount: bigintType\n  index: numberType\n  validatorIndex: numberType\n}\n\n/** An RPC Withdrawal as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/withdrawal.yaml). */\nexport type Rpc = Withdrawal<Hex.Hex, Hex.Hex>\n\n/**\n * Converts a {@link ox#Withdrawal.Rpc} to an {@link ox#Withdrawal.Withdrawal}.\n *\n * @example\n * ```ts twoslash\n * import { Withdrawal } from 'ox'\n *\n * const withdrawal = Withdrawal.fromRpc({\n *   address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n *   amount: '0x620323',\n *   index: '0x0',\n *   validatorIndex: '0x1',\n * })\n * // @log: {\n * // @log:   address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n * // @log:   amount: 6423331n,\n * // @log:   index: 0,\n * // @log:   validatorIndex: 1\n * // @log: }\n * ```\n *\n * @param withdrawal - The RPC withdrawal to convert.\n * @returns An instantiated {@link ox#Withdrawal.Withdrawal}.\n */\nexport function fromRpc(withdrawal: Rpc): Withdrawal {\n  return {\n    ...withdrawal,\n    amount: BigInt(withdrawal.amount),\n    index: Number(withdrawal.index),\n    validatorIndex: Number(withdrawal.validatorIndex),\n  }\n}\n\nexport declare namespace fromRpc {\n  export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Withdrawal.Withdrawal} to an {@link ox#Withdrawal.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Withdrawal } from 'ox'\n *\n * const withdrawal = Withdrawal.toRpc({\n *   address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n *   amount: 6423331n,\n *   index: 0,\n *   validatorIndex: 1,\n * })\n * // @log: {\n * // @log:   address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n * // @log:   amount: '0x620323',\n * // @log:   index: '0x0',\n * // @log:   validatorIndex: '0x1',\n * // @log: }\n * ```\n *\n * @param withdrawal - The Withdrawal to convert.\n * @returns An RPC Withdrawal.\n */\nexport function toRpc(withdrawal: Withdrawal): Rpc {\n  return {\n    address: withdrawal.address,\n    amount: Hex.fromNumber(withdrawal.amount),\n    index: Hex.fromNumber(withdrawal.index),\n    validatorIndex: Hex.fromNumber(withdrawal.validatorIndex),\n  }\n}\n\nexport declare namespace toRpc {\n  export type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Address from './Address.js'\nimport * as Hex from './Hex.js'\nimport * as Withdrawal from './Withdrawal.js'\n\n/**\n * Block overrides.\n */\nexport type BlockOverrides<bigintType = bigint, numberType = number> = {\n  /** Base fee per gas. */\n  baseFeePerGas?: bigintType | undefined\n  /** Blob base fee. */\n  blobBaseFee?: bigintType | undefined\n  /** Fee recipient (also known as coinbase). */\n  feeRecipient?: Address.Address | undefined\n  /** Gas limit. */\n  gasLimit?: bigintType | undefined\n  /** Block number. */\n  number?: bigintType | undefined\n  /** The previous value of randomness beacon. */\n  prevRandao?: bigintType | undefined\n  /** Block timestamp. */\n  time?: bigintType | undefined\n  /** Withdrawals made by validators. */\n  withdrawals?: Withdrawal.Withdrawal<bigintType, numberType>[] | undefined\n}\n\n/**\n * RPC block overrides.\n */\nexport type Rpc = BlockOverrides<Hex.Hex, Hex.Hex>\n\n/**\n * Converts an {@link ox#BlockOverrides.Rpc} to an {@link ox#BlockOverrides.BlockOverrides}.\n *\n * @example\n * ```ts twoslash\n * import { BlockOverrides } from 'ox'\n *\n * const blockOverrides = BlockOverrides.fromRpc({\n *   baseFeePerGas: '0x1',\n *   blobBaseFee: '0x2',\n *   feeRecipient: '0x0000000000000000000000000000000000000000',\n *   gasLimit: '0x4',\n *   number: '0x5',\n *   prevRandao: '0x6',\n *   time: '0x1234567890',\n *   withdrawals: [\n *     {\n *       address: '0x0000000000000000000000000000000000000000',\n *       amount: '0x1',\n *       index: '0x0',\n *       validatorIndex: '0x1',\n *     },\n *   ],\n * })\n * ```\n *\n * @param rpcBlockOverrides - The RPC block overrides to convert.\n * @returns An instantiated {@link ox#BlockOverrides.BlockOverrides}.\n */\nexport function fromRpc(rpcBlockOverrides: Rpc): BlockOverrides {\n  return {\n    ...(rpcBlockOverrides.baseFeePerGas && {\n      baseFeePerGas: BigInt(rpcBlockOverrides.baseFeePerGas),\n    }),\n    ...(rpcBlockOverrides.blobBaseFee && {\n      blobBaseFee: BigInt(rpcBlockOverrides.blobBaseFee),\n    }),\n    ...(rpcBlockOverrides.feeRecipient && {\n      feeRecipient: rpcBlockOverrides.feeRecipient,\n    }),\n    ...(rpcBlockOverrides.gasLimit && {\n      gasLimit: BigInt(rpcBlockOverrides.gasLimit),\n    }),\n    ...(rpcBlockOverrides.number && {\n      number: BigInt(rpcBlockOverrides.number),\n    }),\n    ...(rpcBlockOverrides.prevRandao && {\n      prevRandao: BigInt(rpcBlockOverrides.prevRandao),\n    }),\n    ...(rpcBlockOverrides.time && {\n      time: BigInt(rpcBlockOverrides.time),\n    }),\n    ...(rpcBlockOverrides.withdrawals && {\n      withdrawals: rpcBlockOverrides.withdrawals.map(Withdrawal.fromRpc),\n    }),\n  }\n}\n\n/**\n * Converts an {@link ox#BlockOverrides.BlockOverrides} to an {@link ox#BlockOverrides.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { BlockOverrides } from 'ox'\n *\n * const blockOverrides = BlockOverrides.toRpc({\n *   baseFeePerGas: 1n,\n *   blobBaseFee: 2n,\n *   feeRecipient: '0x0000000000000000000000000000000000000000',\n *   gasLimit: 4n,\n *   number: 5n,\n *   prevRandao: 6n,\n *   time: 78187493520n,\n *   withdrawals: [\n *     {\n *       address: '0x0000000000000000000000000000000000000000',\n *       amount: 1n,\n *       index: 0,\n *       validatorIndex: 1,\n *     },\n *   ],\n * })\n * ```\n *\n * @param blockOverrides - The block overrides to convert.\n * @returns An instantiated {@link ox#BlockOverrides.Rpc}.\n */\nexport function toRpc(blockOverrides: BlockOverrides): Rpc {\n  return {\n    ...(typeof blockOverrides.baseFeePerGas === 'bigint' && {\n      baseFeePerGas: Hex.fromNumber(blockOverrides.baseFeePerGas),\n    }),\n    ...(typeof blockOverrides.blobBaseFee === 'bigint' && {\n      blobBaseFee: Hex.fromNumber(blockOverrides.blobBaseFee),\n    }),\n    ...(typeof blockOverrides.feeRecipient === 'string' && {\n      feeRecipient: blockOverrides.feeRecipient,\n    }),\n    ...(typeof blockOverrides.gasLimit === 'bigint' && {\n      gasLimit: Hex.fromNumber(blockOverrides.gasLimit),\n    }),\n    ...(typeof blockOverrides.number === 'bigint' && {\n      number: Hex.fromNumber(blockOverrides.number),\n    }),\n    ...(typeof blockOverrides.prevRandao === 'bigint' && {\n      prevRandao: Hex.fromNumber(blockOverrides.prevRandao),\n    }),\n    ...(typeof blockOverrides.time === 'bigint' && {\n      time: Hex.fromNumber(blockOverrides.time),\n    }),\n    ...(blockOverrides.withdrawals && {\n      withdrawals: blockOverrides.withdrawals.map(Withdrawal.toRpc),\n    }),\n  }\n}\n", "/* [Multicall3](https://github.com/mds1/multicall) */\nexport const multicall3Abi = [\n  {\n    inputs: [\n      {\n        components: [\n          {\n            name: 'target',\n            type: 'address',\n          },\n          {\n            name: 'allowFailure',\n            type: 'bool',\n          },\n          {\n            name: 'callData',\n            type: 'bytes',\n          },\n        ],\n        name: 'calls',\n        type: 'tuple[]',\n      },\n    ],\n    name: 'aggregate3',\n    outputs: [\n      {\n        components: [\n          {\n            name: 'success',\n            type: 'bool',\n          },\n          {\n            name: 'returnData',\n            type: 'bytes',\n          },\n        ],\n        name: 'returnData',\n        type: 'tuple[]',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'addr',\n        type: 'address',\n      },\n    ],\n    name: 'getEthBalance',\n    outputs: [\n      {\n        name: 'balance',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'getCurrentBlockTimestamp',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: 'timestamp',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n] as const\n\nexport const batchGatewayAbi = [\n  {\n    name: 'query',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      {\n        type: 'tuple[]',\n        name: 'queries',\n        components: [\n          {\n            type: 'address',\n            name: 'sender',\n          },\n          {\n            type: 'string[]',\n            name: 'urls',\n          },\n          {\n            type: 'bytes',\n            name: 'data',\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool[]',\n        name: 'failures',\n      },\n      {\n        type: 'bytes[]',\n        name: 'responses',\n      },\n    ],\n  },\n  {\n    name: 'HttpError',\n    type: 'error',\n    inputs: [\n      {\n        type: 'uint16',\n        name: 'status',\n      },\n      {\n        type: 'string',\n        name: 'message',\n      },\n    ],\n  },\n] as const\n\nconst universalResolverErrors = [\n  {\n    inputs: [\n      {\n        name: 'dns',\n        type: 'bytes',\n      },\n    ],\n    name: 'DNSDecodingFailed',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        name: 'ens',\n        type: 'string',\n      },\n    ],\n    name: 'DNSEncodingFailed',\n    type: 'error',\n  },\n  {\n    inputs: [],\n    name: 'EmptyAddress',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        name: 'status',\n        type: 'uint16',\n      },\n      {\n        name: 'message',\n        type: 'string',\n      },\n    ],\n    name: 'HttpError',\n    type: 'error',\n  },\n  {\n    inputs: [],\n    name: 'InvalidBatchGatewayResponse',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        name: 'errorData',\n        type: 'bytes',\n      },\n    ],\n    name: 'ResolverError',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        name: 'name',\n        type: 'bytes',\n      },\n      {\n        name: 'resolver',\n        type: 'address',\n      },\n    ],\n    name: 'ResolverNotContract',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        name: 'name',\n        type: 'bytes',\n      },\n    ],\n    name: 'ResolverNotFound',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        name: 'primary',\n        type: 'string',\n      },\n      {\n        name: 'primaryAddress',\n        type: 'bytes',\n      },\n    ],\n    name: 'ReverseAddressMismatch',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes4',\n        name: 'selector',\n        type: 'bytes4',\n      },\n    ],\n    name: 'UnsupportedResolverProfile',\n    type: 'error',\n  },\n] as const\n\nexport const universalResolverResolveAbi = [\n  ...universalResolverErrors,\n  {\n    name: 'resolveWithGateways',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      { name: 'name', type: 'bytes' },\n      { name: 'data', type: 'bytes' },\n      { name: 'gateways', type: 'string[]' },\n    ],\n    outputs: [\n      { name: '', type: 'bytes' },\n      { name: 'address', type: 'address' },\n    ],\n  },\n] as const\n\nexport const universalResolverReverseAbi = [\n  ...universalResolverErrors,\n  {\n    name: 'reverseWithGateways',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      { type: 'bytes', name: 'reverseName' },\n      { type: 'uint256', name: 'coinType' },\n      { type: 'string[]', name: 'gateways' },\n    ],\n    outputs: [\n      { type: 'string', name: 'resolvedName' },\n      { type: 'address', name: 'resolver' },\n      { type: 'address', name: 'reverseResolver' },\n    ],\n  },\n] as const\n\nexport const textResolverAbi = [\n  {\n    name: 'text',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      { name: 'name', type: 'bytes32' },\n      { name: 'key', type: 'string' },\n    ],\n    outputs: [{ name: '', type: 'string' }],\n  },\n] as const\n\nexport const addressResolverAbi = [\n  {\n    name: 'addr',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [{ name: 'name', type: 'bytes32' }],\n    outputs: [{ name: '', type: 'address' }],\n  },\n  {\n    name: 'addr',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      { name: 'name', type: 'bytes32' },\n      { name: 'coinType', type: 'uint256' },\n    ],\n    outputs: [{ name: '', type: 'bytes' }],\n  },\n] as const\n\n// ERC-1271\n// isValidSignature(bytes32 hash, bytes signature) \u2192 bytes4 magicValue\n/** @internal */\nexport const erc1271Abi = [\n  {\n    name: 'isValidSignature',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      { name: 'hash', type: 'bytes32' },\n      { name: 'signature', type: 'bytes' },\n    ],\n    outputs: [{ name: '', type: 'bytes4' }],\n  },\n] as const\n\n// ERC-6492 - universal deployless signature validator contract\n// constructor(address _signer, bytes32 _hash, bytes _signature) \u2192 bytes4 returnValue\n// returnValue is either 0x1 (valid) or 0x0 (invalid)\nexport const erc6492SignatureValidatorAbi = [\n  {\n    inputs: [\n      {\n        name: '_signer',\n        type: 'address',\n      },\n      {\n        name: '_hash',\n        type: 'bytes32',\n      },\n      {\n        name: '_signature',\n        type: 'bytes',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'constructor',\n  },\n  {\n    inputs: [\n      {\n        name: '_signer',\n        type: 'address',\n      },\n      {\n        name: '_hash',\n        type: 'bytes32',\n      },\n      {\n        name: '_signature',\n        type: 'bytes',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n    name: 'isValidSig',\n  },\n] as const\n\n/** [ERC-20 Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20) */\nexport const erc20Abi = [\n  {\n    type: 'event',\n    name: 'Approval',\n    inputs: [\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'event',\n    name: 'Transfer',\n    inputs: [\n      {\n        indexed: true,\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'allowance',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        name: 'spender',\n        type: 'address',\n      },\n    ],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'approve',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'balanceOf',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'account',\n        type: 'address',\n      },\n    ],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'decimals',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'uint8',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'name',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'string',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'symbol',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'string',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'totalSupply',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'transfer',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'transferFrom',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n] as const\n\n/**\n * [bytes32-flavored ERC-20](https://docs.makerdao.com/smart-contract-modules/mkr-module#4.-gotchas-potential-source-of-user-error)\n * for tokens (ie. Maker) that use bytes32 instead of string.\n */\nexport const erc20Abi_bytes32 = [\n  {\n    type: 'event',\n    name: 'Approval',\n    inputs: [\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'event',\n    name: 'Transfer',\n    inputs: [\n      {\n        indexed: true,\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'allowance',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        name: 'spender',\n        type: 'address',\n      },\n    ],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'approve',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'balanceOf',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'account',\n        type: 'address',\n      },\n    ],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'decimals',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'uint8',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'name',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'bytes32',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'symbol',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'bytes32',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'totalSupply',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'transfer',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'transferFrom',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n] as const\n\n/** [ERC-1155 Multi Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-1155) */\nexport const erc1155Abi = [\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'balance',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'needed',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    name: 'ERC1155InsufficientBalance',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'approver',\n        type: 'address',\n      },\n    ],\n    name: 'ERC1155InvalidApprover',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint256',\n        name: 'idsLength',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'valuesLength',\n        type: 'uint256',\n      },\n    ],\n    name: 'ERC1155InvalidArrayLength',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n    ],\n    name: 'ERC1155InvalidOperator',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'receiver',\n        type: 'address',\n      },\n    ],\n    name: 'ERC1155InvalidReceiver',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'sender',\n        type: 'address',\n      },\n    ],\n    name: 'ERC1155InvalidSender',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n    name: 'ERC1155MissingApprovalForAll',\n    type: 'error',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'account',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'bool',\n        name: 'approved',\n        type: 'bool',\n      },\n    ],\n    name: 'ApprovalForAll',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256[]',\n        name: 'ids',\n        type: 'uint256[]',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256[]',\n        name: 'values',\n        type: 'uint256[]',\n      },\n    ],\n    name: 'TransferBatch',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n    name: 'TransferSingle',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'string',\n        name: 'value',\n        type: 'string',\n      },\n      {\n        indexed: true,\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n    ],\n    name: 'URI',\n    type: 'event',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'account',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n    ],\n    name: 'balanceOf',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address[]',\n        name: 'accounts',\n        type: 'address[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'ids',\n        type: 'uint256[]',\n      },\n    ],\n    name: 'balanceOfBatch',\n    outputs: [\n      {\n        internalType: 'uint256[]',\n        name: '',\n        type: 'uint256[]',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'account',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n    ],\n    name: 'isApprovedForAll',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'ids',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'values',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'bytes',\n        name: 'data',\n        type: 'bytes',\n      },\n    ],\n    name: 'safeBatchTransferFrom',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'value',\n        type: 'uint256',\n      },\n      {\n        internalType: 'bytes',\n        name: 'data',\n        type: 'bytes',\n      },\n    ],\n    name: 'safeTransferFrom',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        internalType: 'bool',\n        name: 'approved',\n        type: 'bool',\n      },\n    ],\n    name: 'setApprovalForAll',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes4',\n        name: 'interfaceId',\n        type: 'bytes4',\n      },\n    ],\n    name: 'supportsInterface',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    name: 'uri',\n    outputs: [\n      {\n        internalType: 'string',\n        name: '',\n        type: 'string',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n] as const\n\n/** [ERC-721 Non-Fungible Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-721) */\nexport const erc721Abi = [\n  {\n    type: 'event',\n    name: 'Approval',\n    inputs: [\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'event',\n    name: 'ApprovalForAll',\n    inputs: [\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'approved',\n        type: 'bool',\n      },\n    ],\n  },\n  {\n    type: 'event',\n    name: 'Transfer',\n    inputs: [\n      {\n        indexed: true,\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'approve',\n    stateMutability: 'payable',\n    inputs: [\n      {\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    outputs: [],\n  },\n  {\n    type: 'function',\n    name: 'balanceOf',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'account',\n        type: 'address',\n      },\n    ],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'getApproved',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'address',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'isApprovedForAll',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        name: 'operator',\n        type: 'address',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'name',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'string',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'ownerOf',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'safeTransferFrom',\n    stateMutability: 'payable',\n    inputs: [\n      {\n        name: 'from',\n        type: 'address',\n      },\n      {\n        name: 'to',\n        type: 'address',\n      },\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    outputs: [],\n  },\n  {\n    type: 'function',\n    name: 'safeTransferFrom',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'from',\n        type: 'address',\n      },\n      {\n        name: 'to',\n        type: 'address',\n      },\n      {\n        name: 'id',\n        type: 'uint256',\n      },\n      {\n        name: 'data',\n        type: 'bytes',\n      },\n    ],\n    outputs: [],\n  },\n  {\n    type: 'function',\n    name: 'setApprovalForAll',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        name: 'approved',\n        type: 'bool',\n      },\n    ],\n    outputs: [],\n  },\n  {\n    type: 'function',\n    name: 'symbol',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'string',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'tokenByIndex',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'index',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'tokenByIndex',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        name: 'index',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'tokenURI',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'string',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'totalSupply',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'transferFrom',\n    stateMutability: 'payable',\n    inputs: [\n      {\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    outputs: [],\n  },\n] as const\n\n/** [ERC-4626 Tokenized Vaults Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-4626) */\nexport const erc4626Abi = [\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n    name: 'Approval',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'receiver',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'assets',\n        type: 'uint256',\n      },\n      {\n        indexed: false,\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    name: 'Deposit',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n    name: 'Transfer',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'receiver',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'assets',\n        type: 'uint256',\n      },\n      {\n        indexed: false,\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    name: 'Withdraw',\n    type: 'event',\n  },\n  {\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        name: 'spender',\n        type: 'address',\n      },\n    ],\n    name: 'allowance',\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    name: 'approve',\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'asset',\n    outputs: [\n      {\n        name: 'assetTokenAddress',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'account',\n        type: 'address',\n      },\n    ],\n    name: 'balanceOf',\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    name: 'convertToAssets',\n    outputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    name: 'convertToShares',\n    outputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n      {\n        name: 'receiver',\n        type: 'address',\n      },\n    ],\n    name: 'deposit',\n    outputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'caller',\n        type: 'address',\n      },\n    ],\n    name: 'maxDeposit',\n    outputs: [\n      {\n        name: 'maxAssets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'caller',\n        type: 'address',\n      },\n    ],\n    name: 'maxMint',\n    outputs: [\n      {\n        name: 'maxShares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n    name: 'maxRedeem',\n    outputs: [\n      {\n        name: 'maxShares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n    name: 'maxWithdraw',\n    outputs: [\n      {\n        name: 'maxAssets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n      {\n        name: 'receiver',\n        type: 'address',\n      },\n    ],\n    name: 'mint',\n    outputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    name: 'previewDeposit',\n    outputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    name: 'previewMint',\n    outputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    name: 'previewRedeem',\n    outputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    name: 'previewWithdraw',\n    outputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n      {\n        name: 'receiver',\n        type: 'address',\n      },\n      {\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n    name: 'redeem',\n    outputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'totalAssets',\n    outputs: [\n      {\n        name: 'totalManagedAssets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'totalSupply',\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'to',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    name: 'transfer',\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'from',\n        type: 'address',\n      },\n      {\n        name: 'to',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    name: 'transferFrom',\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n      {\n        name: 'receiver',\n        type: 'address',\n      },\n      {\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n    name: 'withdraw',\n    outputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n] as const\n", "export const aggregate3Signature = '0x82ad56cb'\n", "export const deploylessCallViaBytecodeBytecode =\n  '0x608060405234801561001057600080fd5b5060405161018e38038061018e83398101604081905261002f91610124565b6000808351602085016000f59050803b61004857600080fd5b6000808351602085016000855af16040513d6000823e81610067573d81fd5b3d81f35b634e487b7160e01b600052604160045260246000fd5b600082601f83011261009257600080fd5b81516001600160401b038111156100ab576100ab61006b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100d9576100d961006b565b6040528181528382016020018510156100f157600080fd5b60005b82811015610110576020818601810151838301820152016100f4565b506000918101602001919091529392505050565b6000806040838503121561013757600080fd5b82516001600160401b0381111561014d57600080fd5b61015985828601610081565b602085015190935090506001600160401b0381111561017757600080fd5b61018385828601610081565b915050925092905056fe'\n\nexport const deploylessCallViaFactoryBytecode =\n  '0x608060405234801561001057600080fd5b506040516102c03803806102c083398101604081905261002f916101e6565b836001600160a01b03163b6000036100e457600080836001600160a01b03168360405161005c9190610270565b6000604051808303816000865af19150503d8060008114610099576040519150601f19603f3d011682016040523d82523d6000602084013e61009e565b606091505b50915091508115806100b857506001600160a01b0386163b155b156100e1578060405163101bb98d60e01b81526004016100d8919061028c565b60405180910390fd5b50505b6000808451602086016000885af16040513d6000823e81610103573d81fd5b3d81f35b80516001600160a01b038116811461011e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561015457818101518382015260200161013c565b50506000910152565b600082601f83011261016e57600080fd5b81516001600160401b0381111561018757610187610123565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101b5576101b5610123565b6040528181528382016020018510156101cd57600080fd5b6101de826020830160208701610139565b949350505050565b600080600080608085870312156101fc57600080fd5b61020585610107565b60208601519094506001600160401b0381111561022157600080fd5b61022d8782880161015d565b93505061023c60408601610107565b60608601519092506001600160401b0381111561025857600080fd5b6102648782880161015d565b91505092959194509250565b60008251610282818460208701610139565b9190910192915050565b60208152600082518060208401526102ab816040850160208701610139565b601f01601f1916919091016040019291505056fe'\n\nexport const erc6492SignatureValidatorByteCode =\n  '0x608060405234801561001057600080fd5b5060405161069438038061069483398101604081905261002f9161051e565b600061003c848484610048565b9050806000526001601ff35b60007f64926492649264926492649264926492649264926492649264926492649264926100748361040c565b036101e7576000606080848060200190518101906100929190610577565b60405192955090935091506000906001600160a01b038516906100b69085906105dd565b6000604051808303816000865af19150503d80600081146100f3576040519150601f19603f3d011682016040523d82523d6000602084013e6100f8565b606091505b50509050876001600160a01b03163b60000361016057806101605760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90610190908b9087906004016105f9565b602060405180830381865afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d19190610633565b6001600160e01b03191614945050505050610405565b6001600160a01b0384163b1561027a57604051630b135d3f60e11b808252906001600160a01b03861690631626ba7e9061022790879087906004016105f9565b602060405180830381865afa158015610244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102689190610633565b6001600160e01b031916149050610405565b81516041146102df5760405162461bcd60e51b815260206004820152603a602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e6774680000000000006064820152608401610157565b6102e7610425565b5060208201516040808401518451859392600091859190811061030c5761030c61065d565b016020015160f81c9050601b811480159061032b57508060ff16601c14155b1561038c5760405162461bcd60e51b815260206004820152603b602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c756500000000006064820152608401610157565b60408051600081526020810180835289905260ff83169181019190915260608101849052608081018390526001600160a01b0389169060019060a0016020604051602081039080840390855afa1580156103ea573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149450505050505b9392505050565b600060208251101561041d57600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461045857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561048c578181015183820152602001610474565b50506000910152565b600082601f8301126104a657600080fd5b81516001600160401b038111156104bf576104bf61045b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104ed576104ed61045b565b60405281815283820160200185101561050557600080fd5b610516826020830160208701610471565b949350505050565b60008060006060848603121561053357600080fd5b835161053e81610443565b6020850151604086015191945092506001600160401b0381111561056157600080fd5b61056d86828701610495565b9150509250925092565b60008060006060848603121561058c57600080fd5b835161059781610443565b60208501519093506001600160401b038111156105b357600080fd5b6105bf86828701610495565b604086015190935090506001600160401b0381111561056157600080fd5b600082516105ef818460208701610471565b9190910192915050565b828152604060208201526000825180604084015261061e816060850160208701610471565b601f01601f1916919091016060019392505050565b60006020828403121561064557600080fd5b81516001600160e01b03198116811461040557600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572'\n\nexport const multicall3Bytecode =\n  '0x608060405234801561001057600080fd5b506115b9806100206000396000f3fe6080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e14610325578063bce38bd714610350578063c3077fa914610380578063ee82ac5e146103b2576100f3565b80634d2301cc1461026257806372425d9d1461029f57806382ad56cb146102ca57806386d516e8146102fa576100f3565b80633408e470116100c65780633408e470146101af578063399542e9146101da5780633e64a6961461020c57806342cbb15c14610237576100f3565b80630f28c97d146100f8578063174dea7114610123578063252dba421461015357806327e86d6e14610184575b600080fd5b34801561010457600080fd5b5061010d6103ef565b60405161011a9190610c0a565b60405180910390f35b61013d60048036038101906101389190610c94565b6103f7565b60405161014a9190610e94565b60405180910390f35b61016d60048036038101906101689190610f0c565b610615565b60405161017b92919061101b565b60405180910390f35b34801561019057600080fd5b506101996107ab565b6040516101a69190611064565b60405180910390f35b3480156101bb57600080fd5b506101c46107b7565b6040516101d19190610c0a565b60405180910390f35b6101f460048036038101906101ef91906110ab565b6107bf565b6040516102039392919061110b565b60405180910390f35b34801561021857600080fd5b506102216107e1565b60405161022e9190610c0a565b60405180910390f35b34801561024357600080fd5b5061024c6107e9565b6040516102599190610c0a565b60405180910390f35b34801561026e57600080fd5b50610289600480360381019061028491906111a7565b6107f1565b6040516102969190610c0a565b60405180910390f35b3480156102ab57600080fd5b506102b4610812565b6040516102c19190610c0a565b60405180910390f35b6102e460048036038101906102df919061122a565b61081a565b6040516102f19190610e94565b60405180910390f35b34801561030657600080fd5b5061030f6109e4565b60405161031c9190610c0a565b60405180910390f35b34801561033157600080fd5b5061033a6109ec565b6040516103479190611286565b60405180910390f35b61036a600480360381019061036591906110ab565b6109f4565b6040516103779190610e94565b60405180910390f35b61039a60048036038101906103959190610f0c565b610ba6565b6040516103a99392919061110b565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d491906112cd565b610bca565b6040516103e69190611064565b60405180910390f35b600042905090565b60606000808484905090508067ffffffffffffffff81111561041c5761041b6112fa565b5b60405190808252806020026020018201604052801561045557816020015b610442610bd5565b81526020019060019003908161043a5790505b5092503660005b828110156105c957600085828151811061047957610478611329565b5b6020026020010151905087878381811061049657610495611329565b5b90506020028101906104a89190611367565b925060008360400135905080860195508360000160208101906104cb91906111a7565b73ffffffffffffffffffffffffffffffffffffffff16818580606001906104f2919061138f565b604051610500929190611431565b60006040518083038185875af1925050503d806000811461053d576040519150601f19603f3d011682016040523d82523d6000602084013e610542565b606091505b5083600001846020018290528215151515815250505081516020850135176105bc577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b826001019250505061045c565b5082341461060c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610603906114a7565b60405180910390fd5b50505092915050565b6000606043915060008484905090508067ffffffffffffffff81111561063e5761063d6112fa565b5b60405190808252806020026020018201604052801561067157816020015b606081526020019060019003908161065c5790505b5091503660005b828110156107a157600087878381811061069557610694611329565b5b90506020028101906106a791906114c7565b92508260000160208101906106bc91906111a7565b73ffffffffffffffffffffffffffffffffffffffff168380602001906106e2919061138f565b6040516106f0929190611431565b6000604051808303816000865af19150503d806000811461072d576040519150601f19603f3d011682016040523d82523d6000602084013e610732565b606091505b5086848151811061074657610745611329565b5b60200260200101819052819250505080610795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078c9061153b565b60405180910390fd5b81600101915050610678565b5050509250929050565b60006001430340905090565b600046905090565b6000806060439250434091506107d68686866109f4565b905093509350939050565b600048905090565b600043905090565b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b600044905090565b606060008383905090508067ffffffffffffffff81111561083e5761083d6112fa565b5b60405190808252806020026020018201604052801561087757816020015b610864610bd5565b81526020019060019003908161085c5790505b5091503660005b828110156109db57600084828151811061089b5761089a611329565b5b602002602001015190508686838181106108b8576108b7611329565b5b90506020028101906108ca919061155b565b92508260000160208101906108df91906111a7565b73ffffffffffffffffffffffffffffffffffffffff16838060400190610905919061138f565b604051610913929190611431565b6000604051808303816000865af19150503d8060008114610950576040519150601f19603f3d011682016040523d82523d6000602084013e610955565b606091505b5082600001836020018290528215151515815250505080516020840135176109cf577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b8160010191505061087e565b50505092915050565b600045905090565b600041905090565b606060008383905090508067ffffffffffffffff811115610a1857610a176112fa565b5b604051908082528060200260200182016040528015610a5157816020015b610a3e610bd5565b815260200190600190039081610a365790505b5091503660005b82811015610b9c576000848281518110610a7557610a74611329565b5b60200260200101519050868683818110610a9257610a91611329565b5b9050602002810190610aa491906114c7565b9250826000016020810190610ab991906111a7565b73ffffffffffffffffffffffffffffffffffffffff16838060200190610adf919061138f565b604051610aed929190611431565b6000604051808303816000865af19150503d8060008114610b2a576040519150601f19603f3d011682016040523d82523d6000602084013e610b2f565b606091505b508260000183602001829052821515151581525050508715610b90578060000151610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b869061153b565b60405180910390fd5b5b81600101915050610a58565b5050509392505050565b6000806060610bb7600186866107bf565b8093508194508295505050509250925092565b600081409050919050565b6040518060400160405280600015158152602001606081525090565b6000819050919050565b610c0481610bf1565b82525050565b6000602082019050610c1f6000830184610bfb565b92915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610c5457610c53610c2f565b5b8235905067ffffffffffffffff811115610c7157610c70610c34565b5b602083019150836020820283011115610c8d57610c8c610c39565b5b9250929050565b60008060208385031215610cab57610caa610c25565b5b600083013567ffffffffffffffff811115610cc957610cc8610c2a565b5b610cd585828601610c3e565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60008115159050919050565b610d2281610d0d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610d62578082015181840152602081019050610d47565b83811115610d71576000848401525b50505050565b6000601f19601f8301169050919050565b6000610d9382610d28565b610d9d8185610d33565b9350610dad818560208601610d44565b610db681610d77565b840191505092915050565b6000604083016000830151610dd96000860182610d19565b5060208301518482036020860152610df18282610d88565b9150508091505092915050565b6000610e0a8383610dc1565b905092915050565b6000602082019050919050565b6000610e2a82610ce1565b610e348185610cec565b935083602082028501610e4685610cfd565b8060005b85811015610e825784840389528151610e638582610dfe565b9450610e6e83610e12565b925060208a01995050600181019050610e4a565b50829750879550505050505092915050565b60006020820190508181036000830152610eae8184610e1f565b905092915050565b60008083601f840112610ecc57610ecb610c2f565b5b8235905067ffffffffffffffff811115610ee957610ee8610c34565b5b602083019150836020820283011115610f0557610f04610c39565b5b9250929050565b60008060208385031215610f2357610f22610c25565b5b600083013567ffffffffffffffff811115610f4157610f40610c2a565b5b610f4d85828601610eb6565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000610f918383610d88565b905092915050565b6000602082019050919050565b6000610fb182610f59565b610fbb8185610f64565b935083602082028501610fcd85610f75565b8060005b858110156110095784840389528151610fea8582610f85565b9450610ff583610f99565b925060208a01995050600181019050610fd1565b50829750879550505050505092915050565b60006040820190506110306000830185610bfb565b81810360208301526110428184610fa6565b90509392505050565b6000819050919050565b61105e8161104b565b82525050565b60006020820190506110796000830184611055565b92915050565b61108881610d0d565b811461109357600080fd5b50565b6000813590506110a58161107f565b92915050565b6000806000604084860312156110c4576110c3610c25565b5b60006110d286828701611096565b935050602084013567ffffffffffffffff8111156110f3576110f2610c2a565b5b6110ff86828701610eb6565b92509250509250925092565b60006060820190506111206000830186610bfb565b61112d6020830185611055565b818103604083015261113f8184610e1f565b9050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061117482611149565b9050919050565b61118481611169565b811461118f57600080fd5b50565b6000813590506111a18161117b565b92915050565b6000602082840312156111bd576111bc610c25565b5b60006111cb84828501611192565b91505092915050565b60008083601f8401126111ea576111e9610c2f565b5b8235905067ffffffffffffffff81111561120757611206610c34565b5b60208301915083602082028301111561122357611222610c39565b5b9250929050565b6000806020838503121561124157611240610c25565b5b600083013567ffffffffffffffff81111561125f5761125e610c2a565b5b61126b858286016111d4565b92509250509250929050565b61128081611169565b82525050565b600060208201905061129b6000830184611277565b92915050565b6112aa81610bf1565b81146112b557600080fd5b50565b6000813590506112c7816112a1565b92915050565b6000602082840312156112e3576112e2610c25565b5b60006112f1848285016112b8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600160800383360303811261138357611382611358565b5b80830191505092915050565b600080833560016020038436030381126113ac576113ab611358565b5b80840192508235915067ffffffffffffffff8211156113ce576113cd61135d565b5b6020830192506001820236038313156113ea576113e9611362565b5b509250929050565b600081905092915050565b82818337600083830152505050565b600061141883856113f2565b93506114258385846113fd565b82840190509392505050565b600061143e82848661140c565b91508190509392505050565b600082825260208201905092915050565b7f4d756c746963616c6c333a2076616c7565206d69736d61746368000000000000600082015250565b6000611491601a8361144a565b915061149c8261145b565b602082019050919050565b600060208201905081810360008301526114c081611484565b9050919050565b6000823560016040038336030381126114e3576114e2611358565b5b80830191505092915050565b7f4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000600082015250565b600061152560178361144a565b9150611530826114ef565b602082019050919050565b6000602082019050818103600083015261155481611518565b9050919050565b60008235600160600383360303811261157757611576611358565b5b8083019150509291505056fea264697066735822122020c1bc9aacf8e4a6507193432a895a8e77094f45a1395583f07b24e860ef06cd64736f6c634300080c0033'\n", "import type { Chain } from '../types/chain.js'\n\nimport { BaseError } from './base.js'\n\nexport type ChainDoesNotSupportContractErrorType =\n  ChainDoesNotSupportContract & {\n    name: 'ChainDoesNotSupportContract'\n  }\nexport class ChainDoesNotSupportContract extends BaseError {\n  constructor({\n    blockNumber,\n    chain,\n    contract,\n  }: {\n    blockNumber?: bigint | undefined\n    chain: Chain\n    contract: { name: string; blockCreated?: number | undefined }\n  }) {\n    super(\n      `Chain \"${chain.name}\" does not support contract \"${contract.name}\".`,\n      {\n        metaMessages: [\n          'This could be due to any of the following:',\n          ...(blockNumber &&\n          contract.blockCreated &&\n          contract.blockCreated > blockNumber\n            ? [\n                `- The contract \"${contract.name}\" was not deployed until block ${contract.blockCreated} (current block ${blockNumber}).`,\n              ]\n            : [\n                `- The chain does not have the contract \"${contract.name}\" configured.`,\n              ]),\n        ],\n        name: 'ChainDoesNotSupportContract',\n      },\n    )\n  }\n}\n\nexport type ChainMismatchErrorType = ChainMismatchError & {\n  name: 'ChainMismatchError'\n}\nexport class ChainMismatchError extends BaseError {\n  constructor({\n    chain,\n    currentChainId,\n  }: {\n    chain: Chain\n    currentChainId: number\n  }) {\n    super(\n      `The current chain of the wallet (id: ${currentChainId}) does not match the target chain for the transaction (id: ${chain.id} \u2013 ${chain.name}).`,\n      {\n        metaMessages: [\n          `Current Chain ID:  ${currentChainId}`,\n          `Expected Chain ID: ${chain.id} \u2013 ${chain.name}`,\n        ],\n        name: 'ChainMismatchError',\n      },\n    )\n  }\n}\n\nexport type ChainNotFoundErrorType = ChainNotFoundError & {\n  name: 'ChainNotFoundError'\n}\nexport class ChainNotFoundError extends BaseError {\n  constructor() {\n    super(\n      [\n        'No chain was provided to the request.',\n        'Please provide a chain with the `chain` argument on the Action, or by supplying a `chain` to WalletClient.',\n      ].join('\\n'),\n      {\n        name: 'ChainNotFoundError',\n      },\n    )\n  }\n}\n\nexport type ClientChainNotConfiguredErrorType =\n  ClientChainNotConfiguredError & {\n    name: 'ClientChainNotConfiguredError'\n  }\nexport class ClientChainNotConfiguredError extends BaseError {\n  constructor() {\n    super('No chain was provided to the Client.', {\n      name: 'ClientChainNotConfiguredError',\n    })\n  }\n}\n\nexport type InvalidChainIdErrorType = InvalidChainIdError & {\n  name: 'InvalidChainIdError'\n}\nexport class InvalidChainIdError extends BaseError {\n  constructor({ chainId }: { chainId?: number | undefined }) {\n    super(\n      typeof chainId === 'number'\n        ? `Chain ID \"${chainId}\" is invalid.`\n        : 'Chain ID is invalid.',\n      { name: 'InvalidChainIdError' },\n    )\n  }\n}\n", "import type { Abi } from 'abitype'\n\nimport {\n  AbiConstructorNotFoundError,\n  type AbiConstructorNotFoundErrorType,\n  AbiConstructorParamsNotFoundError,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ContractConstructorArgs } from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { UnionEvaluate } from '../../types/utils.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport {\n  type EncodeAbiParametersErrorType,\n  encodeAbiParameters,\n} from './encodeAbiParameters.js'\n\nconst docsPath = '/docs/contract/encodeDeployData'\n\nexport type EncodeDeployDataParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  ///\n  hasConstructor = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [Extract<abi[number], { type: 'constructor' }>] extends [never]\n        ? false\n        : true\n    : true,\n  allArgs = ContractConstructorArgs<abi>,\n> = {\n  abi: abi\n  bytecode: Hex\n} & UnionEvaluate<\n  hasConstructor extends false\n    ? { args?: undefined }\n    : readonly [] extends allArgs\n      ? { args?: allArgs | undefined }\n      : { args: allArgs }\n>\n\nexport type EncodeDeployDataReturnType = Hex\n\nexport type EncodeDeployDataErrorType =\n  | AbiConstructorNotFoundErrorType\n  | ConcatHexErrorType\n  | EncodeAbiParametersErrorType\n  | ErrorType\n\nexport function encodeDeployData<const abi extends Abi | readonly unknown[]>(\n  parameters: EncodeDeployDataParameters<abi>,\n): EncodeDeployDataReturnType {\n  const { abi, args, bytecode } = parameters as EncodeDeployDataParameters\n  if (!args || args.length === 0) return bytecode\n\n  const description = abi.find((x) => 'type' in x && x.type === 'constructor')\n  if (!description) throw new AbiConstructorNotFoundError({ docsPath })\n  if (!('inputs' in description))\n    throw new AbiConstructorParamsNotFoundError({ docsPath })\n  if (!description.inputs || description.inputs.length === 0)\n    throw new AbiConstructorParamsNotFoundError({ docsPath })\n\n  const data = encodeAbiParameters(description.inputs, args)\n  return concatHex([bytecode, data!])\n}\n", "import {\n  ChainDoesNotSupportContract,\n  type ChainDoesNotSupportContractErrorType,\n} from '../../errors/chain.js'\nimport type { Chain, ChainContract } from '../../types/chain.js'\n\nexport type GetChainContractAddressErrorType =\n  ChainDoesNotSupportContractErrorType\n\nexport function getChainContractAddress({\n  blockNumber,\n  chain,\n  contract: name,\n}: {\n  blockNumber?: bigint | undefined\n  chain: Chain\n  contract: string\n}) {\n  const contract = (chain?.contracts as Record<string, ChainContract>)?.[name]\n  if (!contract)\n    throw new ChainDoesNotSupportContract({\n      chain,\n      contract: { name },\n    })\n\n  if (\n    blockNumber &&\n    contract.blockCreated &&\n    contract.blockCreated > blockNumber\n  )\n    throw new ChainDoesNotSupportContract({\n      blockNumber,\n      chain,\n      contract: {\n        name,\n        blockCreated: contract.blockCreated,\n      },\n    })\n\n  return contract.address\n}\n", "import type { CallParameters } from '../../actions/public/call.js'\nimport type { BaseError } from '../../errors/base.js'\nimport {\n  CallExecutionError,\n  type CallExecutionErrorType,\n} from '../../errors/contract.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\n\nimport {\n  type GetNodeErrorParameters,\n  type GetNodeErrorReturnType,\n  getNodeError,\n} from './getNodeError.js'\n\nexport type GetCallErrorReturnType<cause = ErrorType> = Omit<\n  CallExecutionErrorType,\n  'cause'\n> & {\n  cause: cause | GetNodeErrorReturnType\n}\n\nexport function getCallError<err extends ErrorType<string>>(\n  err: err,\n  {\n    docsPath,\n    ...args\n  }: CallParameters & {\n    chain?: Chain | undefined\n    docsPath?: string | undefined\n  },\n): GetCallErrorReturnType<err> {\n  const cause = (() => {\n    const cause = getNodeError(\n      err as {} as BaseError,\n      args as GetNodeErrorParameters,\n    )\n    if (cause instanceof UnknownNodeError) return err as {} as BaseError\n    return cause\n  })()\n  return new CallExecutionError(cause, {\n    docsPath,\n    ...args,\n  }) as GetCallErrorReturnType<err>\n}\n", "/** @internal */\nexport type PromiseWithResolvers<type> = {\n  promise: Promise<type>\n  resolve: (value: type | PromiseLike<type>) => void\n  reject: (reason?: unknown) => void\n}\n\n/** @internal */\nexport function withResolvers<type>(): PromiseWithResolvers<type> {\n  let resolve: PromiseWithResolvers<type>['resolve'] = () => undefined\n  let reject: PromiseWithResolvers<type>['reject'] = () => undefined\n\n  const promise = new Promise<type>((resolve_, reject_) => {\n    resolve = resolve_\n    reject = reject_\n  })\n\n  return { promise, resolve, reject }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport { type PromiseWithResolvers, withResolvers } from './withResolvers.js'\n\ntype Resolved<returnType extends readonly unknown[] = any> = [\n  result: returnType[number],\n  results: returnType,\n]\n\ntype SchedulerItem = {\n  args: unknown\n  resolve: PromiseWithResolvers<unknown>['resolve']\n  reject: PromiseWithResolvers<unknown>['reject']\n}\n\ntype BatchResultsCompareFn<result = unknown> = (a: result, b: result) => number\n\ntype CreateBatchSchedulerArguments<\n  parameters = unknown,\n  returnType extends readonly unknown[] = readonly unknown[],\n> = {\n  fn: (args: parameters[]) => Promise<returnType>\n  id: number | string\n  shouldSplitBatch?: ((args: parameters[]) => boolean) | undefined\n  wait?: number | undefined\n  sort?: BatchResultsCompareFn<returnType[number]> | undefined\n}\n\ntype CreateBatchSchedulerReturnType<\n  parameters = unknown,\n  returnType extends readonly unknown[] = readonly unknown[],\n> = {\n  flush: () => void\n  schedule: parameters extends undefined\n    ? (args?: parameters | undefined) => Promise<Resolved<returnType>>\n    : (args: parameters) => Promise<Resolved<returnType>>\n}\n\nexport type CreateBatchSchedulerErrorType = ErrorType\n\nconst schedulerCache = /*#__PURE__*/ new Map<number | string, SchedulerItem[]>()\n\n/** @internal */\nexport function createBatchScheduler<\n  parameters,\n  returnType extends readonly unknown[],\n>({\n  fn,\n  id,\n  shouldSplitBatch,\n  wait = 0,\n  sort,\n}: CreateBatchSchedulerArguments<\n  parameters,\n  returnType\n>): CreateBatchSchedulerReturnType<parameters, returnType> {\n  const exec = async () => {\n    const scheduler = getScheduler()\n    flush()\n\n    const args = scheduler.map(({ args }) => args)\n\n    if (args.length === 0) return\n\n    fn(args as parameters[])\n      .then((data) => {\n        if (sort && Array.isArray(data)) data.sort(sort)\n        for (let i = 0; i < scheduler.length; i++) {\n          const { resolve } = scheduler[i]\n          resolve?.([data[i], data])\n        }\n      })\n      .catch((err) => {\n        for (let i = 0; i < scheduler.length; i++) {\n          const { reject } = scheduler[i]\n          reject?.(err)\n        }\n      })\n  }\n\n  const flush = () => schedulerCache.delete(id)\n\n  const getBatchedArgs = () =>\n    getScheduler().map(({ args }) => args) as parameters[]\n\n  const getScheduler = () => schedulerCache.get(id) || []\n\n  const setScheduler = (item: SchedulerItem) =>\n    schedulerCache.set(id, [...getScheduler(), item])\n\n  return {\n    flush,\n    async schedule(args: parameters) {\n      const { promise, resolve, reject } = withResolvers()\n\n      const split = shouldSplitBatch?.([...getBatchedArgs(), args])\n\n      if (split) exec()\n\n      const hasActiveScheduler = getScheduler().length > 0\n      if (hasActiveScheduler) {\n        setScheduler({ args, resolve, reject })\n        return promise\n      }\n\n      setScheduler({ args, resolve, reject })\n      setTimeout(exec, wait)\n      return promise\n    },\n  } as unknown as CreateBatchSchedulerReturnType<parameters, returnType>\n}\n", "import type { Address } from 'abitype'\n\nimport type { Hex } from '../types/misc.js'\nimport { stringify } from '../utils/stringify.js'\n\nimport { BaseError } from './base.js'\nimport { getUrl } from './utils.js'\n\nexport type OffchainLookupErrorType = OffchainLookupError & {\n  name: 'OffchainLookupError'\n}\nexport class OffchainLookupError extends BaseError {\n  constructor({\n    callbackSelector,\n    cause,\n    data,\n    extraData,\n    sender,\n    urls,\n  }: {\n    callbackSelector: Hex\n    cause: BaseError\n    data: Hex\n    extraData: Hex\n    sender: Address\n    urls: readonly string[]\n  }) {\n    super(\n      cause.shortMessage ||\n        'An error occurred while fetching for an offchain result.',\n      {\n        cause,\n        metaMessages: [\n          ...(cause.metaMessages || []),\n          cause.metaMessages?.length ? '' : [],\n          'Offchain Gateway Call:',\n          urls && [\n            '  Gateway URL(s):',\n            ...urls.map((url) => `    ${getUrl(url)}`),\n          ],\n          `  Sender: ${sender}`,\n          `  Data: ${data}`,\n          `  Callback selector: ${callbackSelector}`,\n          `  Extra data: ${extraData}`,\n        ].flat(),\n        name: 'OffchainLookupError',\n      },\n    )\n  }\n}\n\nexport type OffchainLookupResponseMalformedErrorType =\n  OffchainLookupResponseMalformedError & {\n    name: 'OffchainLookupResponseMalformedError'\n  }\nexport class OffchainLookupResponseMalformedError extends BaseError {\n  constructor({ result, url }: { result: any; url: string }) {\n    super(\n      'Offchain gateway response is malformed. Response data must be a hex value.',\n      {\n        metaMessages: [\n          `Gateway URL: ${getUrl(url)}`,\n          `Response: ${stringify(result)}`,\n        ],\n        name: 'OffchainLookupResponseMalformedError',\n      },\n    )\n  }\n}\n\n/** @internal */\nexport type OffchainLookupSenderMismatchErrorType =\n  OffchainLookupSenderMismatchError & {\n    name: 'OffchainLookupSenderMismatchError'\n  }\nexport class OffchainLookupSenderMismatchError extends BaseError {\n  constructor({ sender, to }: { sender: Address; to: Address }) {\n    super(\n      'Reverted sender address does not match target contract address (`to`).',\n      {\n        metaMessages: [\n          `Contract address: ${to}`,\n          `OffchainLookup sender address: ${sender}`,\n        ],\n        name: 'OffchainLookupSenderMismatchError',\n      },\n    )\n  }\n}\n", "import type { Abi, AbiStateMutability } from 'abitype'\n\nimport { AbiFunctionSignatureNotFoundError } from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type SliceErrorType, slice } from '../data/slice.js'\nimport {\n  type ToFunctionSelectorErrorType,\n  toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\nimport {\n  type DecodeAbiParametersErrorType,\n  decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\n\nexport type DecodeFunctionDataParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n> = {\n  abi: abi\n  data: Hex\n}\n\nexport type DecodeFunctionDataReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  ///\n  allFunctionNames extends\n    ContractFunctionName<abi> = ContractFunctionName<abi>,\n> = IsNarrowable<abi, Abi> extends true\n  ? UnionEvaluate<\n      {\n        [functionName in allFunctionNames]: {\n          args: ContractFunctionArgs<abi, AbiStateMutability, functionName>\n          functionName: functionName\n        }\n      }[allFunctionNames]\n    >\n  : {\n      args: readonly unknown[] | undefined\n      functionName: string\n    }\n\nexport type DecodeFunctionDataErrorType =\n  | AbiFunctionSignatureNotFoundError\n  | DecodeAbiParametersErrorType\n  | FormatAbiItemErrorType\n  | ToFunctionSelectorErrorType\n  | SliceErrorType\n  | ErrorType\n\nexport function decodeFunctionData<const abi extends Abi | readonly unknown[]>(\n  parameters: DecodeFunctionDataParameters<abi>,\n) {\n  const { abi, data } = parameters as DecodeFunctionDataParameters\n  const signature = slice(data, 0, 4)\n  const description = abi.find(\n    (x) =>\n      x.type === 'function' &&\n      signature === toFunctionSelector(formatAbiItem(x)),\n  )\n  if (!description)\n    throw new AbiFunctionSignatureNotFoundError(signature, {\n      docsPath: '/docs/contract/decodeFunctionData',\n    })\n  return {\n    functionName: (description as { name: string }).name,\n    args: ('inputs' in description &&\n    description.inputs &&\n    description.inputs.length > 0\n      ? decodeAbiParameters(description.inputs, slice(data, 4))\n      : undefined) as readonly unknown[] | undefined,\n  } as DecodeFunctionDataReturnType<abi>\n}\n", "import type { Abi, ExtractAbiErrors } from 'abitype'\n\nimport {\n  AbiErrorInputsNotFoundError,\n  AbiErrorNotFoundError,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractErrorArgs,\n  ContractErrorName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport {\n  type ToFunctionSelectorErrorType,\n  toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\nimport {\n  type EncodeAbiParametersErrorType,\n  encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeErrorResult'\n\nexport type EncodeErrorResultParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  errorName extends ContractErrorName<abi> | undefined = ContractErrorName<abi>,\n  ///\n  hasErrors = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [ExtractAbiErrors<abi>] extends [never]\n        ? false\n        : true\n    : true,\n  allArgs = ContractErrorArgs<\n    abi,\n    errorName extends ContractErrorName<abi>\n      ? errorName\n      : ContractErrorName<abi>\n  >,\n  allErrorNames = ContractErrorName<abi>,\n> = {\n  abi: abi\n  args?: allArgs | undefined\n} & UnionEvaluate<\n  IsNarrowable<abi, Abi> extends true\n    ? abi['length'] extends 1\n      ? { errorName?: errorName | allErrorNames | undefined }\n      : { errorName: errorName | allErrorNames }\n    : { errorName?: errorName | allErrorNames | undefined }\n> &\n  (hasErrors extends true ? unknown : never)\n\nexport type EncodeErrorResultReturnType = Hex\n\nexport type EncodeErrorResultErrorType =\n  | GetAbiItemErrorType\n  | FormatAbiItemErrorType\n  | ToFunctionSelectorErrorType\n  | EncodeAbiParametersErrorType\n  | ConcatHexErrorType\n  | ErrorType\n\nexport function encodeErrorResult<\n  const abi extends Abi | readonly unknown[],\n  errorName extends ContractErrorName<abi> | undefined = undefined,\n>(\n  parameters: EncodeErrorResultParameters<abi, errorName>,\n): EncodeErrorResultReturnType {\n  const { abi, errorName, args } = parameters as EncodeErrorResultParameters\n\n  let abiItem = abi[0]\n  if (errorName) {\n    const item = getAbiItem({ abi, args, name: errorName })\n    if (!item) throw new AbiErrorNotFoundError(errorName, { docsPath })\n    abiItem = item\n  }\n\n  if (abiItem.type !== 'error')\n    throw new AbiErrorNotFoundError(undefined, { docsPath })\n\n  const definition = formatAbiItem(abiItem)\n  const signature = toFunctionSelector(definition)\n\n  let data: Hex = '0x'\n  if (args && args.length > 0) {\n    if (!abiItem.inputs)\n      throw new AbiErrorInputsNotFoundError(abiItem.name, { docsPath })\n    data = encodeAbiParameters(abiItem.inputs, args)\n  }\n  return concatHex([signature, data])\n}\n", "import type { Abi, AbiStateMutability, ExtractAbiFunctions } from 'abitype'\n\nimport {\n  AbiFunctionNotFoundError,\n  AbiFunctionOutputsNotFoundError,\n  InvalidArrayError,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractFunctionName,\n  ContractFunctionReturnType,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport {\n  type EncodeAbiParametersErrorType,\n  encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeFunctionResult'\n\nexport type EncodeFunctionResultParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends\n    | ContractFunctionName<abi>\n    | undefined = ContractFunctionName<abi>,\n  ///\n  hasFunctions = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [ExtractAbiFunctions<abi>] extends [never]\n        ? false\n        : true\n    : true,\n  allFunctionNames = ContractFunctionName<abi>,\n> = {\n  abi: abi\n  result?:\n    | ContractFunctionReturnType<\n        abi,\n        AbiStateMutability,\n        functionName extends ContractFunctionName<abi>\n          ? functionName\n          : ContractFunctionName<abi>,\n        never // allow all args. required for overloads to work.\n      >\n    | undefined\n} & UnionEvaluate<\n  IsNarrowable<abi, Abi> extends true\n    ? abi['length'] extends 1\n      ? { functionName?: functionName | allFunctionNames | undefined }\n      : { functionName: functionName | allFunctionNames }\n    : { functionName?: functionName | allFunctionNames | undefined }\n> &\n  (hasFunctions extends true ? unknown : never)\n\nexport type EncodeFunctionResultReturnType = Hex\n\nexport type EncodeFunctionResultErrorType =\n  | AbiFunctionOutputsNotFoundError\n  | AbiFunctionNotFoundError\n  | EncodeAbiParametersErrorType\n  | GetAbiItemErrorType\n  | ErrorType\n\nexport function encodeFunctionResult<\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi> | undefined = undefined,\n>(\n  parameters: EncodeFunctionResultParameters<abi, functionName>,\n): EncodeFunctionResultReturnType {\n  const { abi, functionName, result } =\n    parameters as EncodeFunctionResultParameters\n\n  let abiItem = abi[0]\n  if (functionName) {\n    const item = getAbiItem({ abi, name: functionName })\n    if (!item) throw new AbiFunctionNotFoundError(functionName, { docsPath })\n    abiItem = item\n  }\n\n  if (abiItem.type !== 'function')\n    throw new AbiFunctionNotFoundError(undefined, { docsPath })\n\n  if (!abiItem.outputs)\n    throw new AbiFunctionOutputsNotFoundError(abiItem.name, { docsPath })\n\n  const values = (() => {\n    if (abiItem.outputs.length === 0) return []\n    if (abiItem.outputs.length === 1) return [result]\n    if (Array.isArray(result)) return result\n    throw new InvalidArrayError(result)\n  })()\n\n  return encodeAbiParameters(abiItem.outputs, values)\n}\n", "import { batchGatewayAbi } from '../../constants/abis.js'\nimport { solidityError } from '../../constants/solidity.js'\nimport type { Hex } from '../../types/misc.js'\nimport { decodeFunctionData } from '../abi/decodeFunctionData.js'\nimport { encodeErrorResult } from '../abi/encodeErrorResult.js'\nimport { encodeFunctionResult } from '../abi/encodeFunctionResult.js'\nimport type {\n  CcipRequestErrorType,\n  CcipRequestParameters,\n  CcipRequestReturnType,\n} from '../ccip.js'\n\nexport const localBatchGatewayUrl = 'x-batch-gateway:true'\n\nexport async function localBatchGatewayRequest(parameters: {\n  data: Hex\n  ccipRequest: (\n    parameters: CcipRequestParameters,\n  ) => Promise<CcipRequestReturnType>\n}): Promise<Hex> {\n  const { data, ccipRequest } = parameters\n\n  const {\n    args: [queries],\n  } = decodeFunctionData({ abi: batchGatewayAbi, data })\n\n  const failures: boolean[] = []\n  const responses: Hex[] = []\n  await Promise.all(\n    queries.map(async (query, i) => {\n      try {\n        responses[i] = query.urls.includes(localBatchGatewayUrl)\n          ? await localBatchGatewayRequest({ data: query.data, ccipRequest })\n          : await ccipRequest(query)\n        failures[i] = false\n      } catch (err) {\n        failures[i] = true\n        responses[i] = encodeError(err as CcipRequestErrorType)\n      }\n    }),\n  )\n\n  return encodeFunctionResult({\n    abi: batchGatewayAbi,\n    functionName: 'query',\n    result: [failures, responses],\n  })\n}\n\nfunction encodeError(error: CcipRequestErrorType): Hex {\n  if (error.name === 'HttpRequestError' && error.status)\n    return encodeErrorResult({\n      abi: batchGatewayAbi,\n      errorName: 'HttpError',\n      args: [error.status, error.shortMessage],\n    })\n  return encodeErrorResult({\n    abi: [solidityError],\n    errorName: 'Error',\n    args: ['shortMessage' in error ? error.shortMessage : error.message],\n  })\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport { type CallParameters, call } from '../actions/public/call.js'\nimport type { Client } from '../clients/createClient.js'\nimport type { Transport } from '../clients/transports/createTransport.js'\nimport type { BaseError } from '../errors/base.js'\nimport {\n  OffchainLookupError,\n  type OffchainLookupErrorType as OffchainLookupErrorType_,\n  OffchainLookupResponseMalformedError,\n  type OffchainLookupResponseMalformedErrorType,\n  OffchainLookupSenderMismatchError,\n} from '../errors/ccip.js'\nimport {\n  HttpRequestError,\n  type HttpRequestErrorType,\n} from '../errors/request.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Chain } from '../types/chain.js'\nimport type { Hex } from '../types/misc.js'\nimport { decodeErrorResult } from './abi/decodeErrorResult.js'\nimport { encodeAbiParameters } from './abi/encodeAbiParameters.js'\nimport { isAddressEqual } from './address/isAddressEqual.js'\nimport { concat } from './data/concat.js'\nimport { isHex } from './data/isHex.js'\nimport {\n  localBatchGatewayRequest,\n  localBatchGatewayUrl,\n} from './ens/localBatchGatewayRequest.js'\nimport { stringify } from './stringify.js'\n\nexport const offchainLookupSignature = '0x556f1830'\nexport const offchainLookupAbiItem = {\n  name: 'OffchainLookup',\n  type: 'error',\n  inputs: [\n    {\n      name: 'sender',\n      type: 'address',\n    },\n    {\n      name: 'urls',\n      type: 'string[]',\n    },\n    {\n      name: 'callData',\n      type: 'bytes',\n    },\n    {\n      name: 'callbackFunction',\n      type: 'bytes4',\n    },\n    {\n      name: 'extraData',\n      type: 'bytes',\n    },\n  ],\n} as const satisfies Abi[number]\n\nexport type OffchainLookupErrorType = OffchainLookupErrorType_ | ErrorType\n\nexport async function offchainLookup<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    blockNumber,\n    blockTag,\n    data,\n    to,\n  }: Pick<CallParameters, 'blockNumber' | 'blockTag'> & {\n    data: Hex\n    to: Address\n  },\n): Promise<Hex> {\n  const { args } = decodeErrorResult({\n    data,\n    abi: [offchainLookupAbiItem],\n  })\n  const [sender, urls, callData, callbackSelector, extraData] = args\n\n  const { ccipRead } = client\n  const ccipRequest_ =\n    ccipRead && typeof ccipRead?.request === 'function'\n      ? ccipRead.request\n      : ccipRequest\n\n  try {\n    if (!isAddressEqual(to, sender))\n      throw new OffchainLookupSenderMismatchError({ sender, to })\n\n    const result = urls.includes(localBatchGatewayUrl)\n      ? await localBatchGatewayRequest({\n          data: callData,\n          ccipRequest: ccipRequest_,\n        })\n      : await ccipRequest_({ data: callData, sender, urls })\n\n    const { data: data_ } = await call(client, {\n      blockNumber,\n      blockTag,\n      data: concat([\n        callbackSelector,\n        encodeAbiParameters(\n          [{ type: 'bytes' }, { type: 'bytes' }],\n          [result, extraData],\n        ),\n      ]),\n      to,\n    } as CallParameters)\n\n    return data_!\n  } catch (err) {\n    throw new OffchainLookupError({\n      callbackSelector,\n      cause: err as BaseError,\n      data,\n      extraData,\n      sender,\n      urls,\n    })\n  }\n}\n\nexport type CcipRequestParameters = {\n  data: Hex\n  sender: Address\n  urls: readonly string[]\n}\n\nexport type CcipRequestReturnType = Hex\n\nexport type CcipRequestErrorType =\n  | HttpRequestErrorType\n  | OffchainLookupResponseMalformedErrorType\n  | ErrorType\n\nexport async function ccipRequest({\n  data,\n  sender,\n  urls,\n}: CcipRequestParameters): Promise<CcipRequestReturnType> {\n  let error = new Error('An unknown error occurred.')\n\n  for (let i = 0; i < urls.length; i++) {\n    const url = urls[i]\n    const method = url.includes('{data}') ? 'GET' : 'POST'\n    const body = method === 'POST' ? { data, sender } : undefined\n    const headers: HeadersInit =\n      method === 'POST' ? { 'Content-Type': 'application/json' } : {}\n\n    try {\n      const response = await fetch(\n        url.replace('{sender}', sender.toLowerCase()).replace('{data}', data),\n        {\n          body: JSON.stringify(body),\n          headers,\n          method,\n        },\n      )\n\n      let result: any\n      if (\n        response.headers.get('Content-Type')?.startsWith('application/json')\n      ) {\n        result = (await response.json()).data\n      } else {\n        result = (await response.text()) as any\n      }\n\n      if (!response.ok) {\n        error = new HttpRequestError({\n          body,\n          details: result?.error\n            ? stringify(result.error)\n            : response.statusText,\n          headers: response.headers,\n          status: response.status,\n          url,\n        })\n        continue\n      }\n\n      if (!isHex(result)) {\n        error = new OffchainLookupResponseMalformedError({\n          result,\n          url,\n        })\n        continue\n      }\n\n      return result\n    } catch (err) {\n      error = new HttpRequestError({\n        body,\n        details: (err as Error).message,\n        url,\n      })\n    }\n  }\n\n  throw error\n}\n", "import { type Address, parseAbi } from 'abitype'\nimport * as BlockOverrides from 'ox/BlockOverrides'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { multicall3Abi } from '../../constants/abis.js'\nimport { aggregate3Signature } from '../../constants/contract.js'\nimport {\n  deploylessCallViaBytecodeBytecode,\n  deploylessCallViaFactoryBytecode,\n  multicall3Bytecode,\n} from '../../constants/contracts.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n  ChainDoesNotSupportContract,\n  ClientChainNotConfiguredError,\n} from '../../errors/chain.js'\nimport {\n  CounterfactualDeploymentFailedError,\n  RawContractError,\n  type RawContractErrorType,\n} from '../../errors/contract.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RpcTransactionRequest } from '../../types/rpc.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { ExactPartial, UnionOmit } from '../../types/utils.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeDeployDataErrorType,\n  encodeDeployData,\n} from '../../utils/abi/encodeDeployData.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type GetCallErrorReturnType,\n  getCallError,\n} from '../../utils/errors/getCallError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n  type FormatTransactionRequestErrorType,\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport {\n  type CreateBatchSchedulerErrorType,\n  createBatchScheduler,\n} from '../../utils/promise/createBatchScheduler.js'\nimport {\n  type SerializeStateOverrideErrorType,\n  serializeStateOverride,\n} from '../../utils/stateOverride.js'\nimport type {\n  AssertRequestErrorType,\n  AssertRequestParameters,\n} from '../../utils/transaction/assertRequest.js'\nimport { assertRequest } from '../../utils/transaction/assertRequest.js'\n\nexport type CallParameters<\n  chain extends Chain | undefined = Chain | undefined,\n> = UnionOmit<FormattedCall<chain>, 'from'> & {\n  /** Account attached to the call (msg.sender). */\n  account?: Account | Address | undefined\n  /** Whether or not to enable multicall batching on this call. */\n  batch?: boolean | undefined\n  /** Block overrides for the call. */\n  blockOverrides?: BlockOverrides.BlockOverrides | undefined\n  /** Bytecode to perform the call on. */\n  code?: Hex | undefined\n  /** Contract deployment factory address (ie. Create2 factory, Smart Account factory, etc). */\n  factory?: Address | undefined\n  /** Calldata to execute on the factory to deploy the contract. */\n  factoryData?: Hex | undefined\n  /** State overrides for the call. */\n  stateOverride?: StateOverride | undefined\n} & (\n    | {\n        /** The balance of the account at a block number. */\n        blockNumber?: bigint | undefined\n        blockTag?: undefined\n      }\n    | {\n        blockNumber?: undefined\n        /**\n         * The balance of the account at a block tag.\n         * @default 'latest'\n         */\n        blockTag?: BlockTag | undefined\n      }\n  )\ntype FormattedCall<chain extends Chain | undefined = Chain | undefined> =\n  FormattedTransactionRequest<chain>\n\nexport type CallReturnType = { data: Hex | undefined }\n\nexport type CallErrorType = GetCallErrorReturnType<\n  | ParseAccountErrorType\n  | SerializeStateOverrideErrorType\n  | AssertRequestErrorType\n  | NumberToHexErrorType\n  | FormatTransactionRequestErrorType\n  | ScheduleMulticallErrorType\n  | RequestErrorType\n  | ToDeploylessCallViaBytecodeDataErrorType\n  | ToDeploylessCallViaFactoryDataErrorType\n>\n\n/**\n * Executes a new message call immediately without submitting a transaction to the network.\n *\n * - Docs: https://viem.sh/docs/actions/public/call\n * - JSON-RPC Methods: [`eth_call`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_call)\n *\n * @param client - Client to use\n * @param parameters - {@link CallParameters}\n * @returns The call data. {@link CallReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { call } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const data = await call(client, {\n *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n *   data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * })\n */\nexport async function call<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  args: CallParameters<chain>,\n): Promise<CallReturnType> {\n  const {\n    account: account_ = client.account,\n    authorizationList,\n    batch = Boolean(client.batch?.multicall),\n    blockNumber,\n    blockTag = client.experimental_blockTag ?? 'latest',\n    accessList,\n    blobs,\n    blockOverrides,\n    code,\n    data: data_,\n    factory,\n    factoryData,\n    gas,\n    gasPrice,\n    maxFeePerBlobGas,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    nonce,\n    to,\n    value,\n    stateOverride,\n    ...rest\n  } = args\n  const account = account_ ? parseAccount(account_) : undefined\n\n  if (code && (factory || factoryData))\n    throw new BaseError(\n      'Cannot provide both `code` & `factory`/`factoryData` as parameters.',\n    )\n  if (code && to)\n    throw new BaseError('Cannot provide both `code` & `to` as parameters.')\n\n  // Check if the call is deployless via bytecode.\n  const deploylessCallViaBytecode = code && data_\n  // Check if the call is deployless via a factory.\n  const deploylessCallViaFactory = factory && factoryData && to && data_\n  const deploylessCall = deploylessCallViaBytecode || deploylessCallViaFactory\n\n  const data = (() => {\n    if (deploylessCallViaBytecode)\n      return toDeploylessCallViaBytecodeData({\n        code,\n        data: data_,\n      })\n    if (deploylessCallViaFactory)\n      return toDeploylessCallViaFactoryData({\n        data: data_,\n        factory,\n        factoryData,\n        to,\n      })\n    return data_\n  })()\n\n  try {\n    assertRequest(args as AssertRequestParameters)\n\n    const blockNumberHex =\n      typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n    const block = blockNumberHex || blockTag\n\n    const rpcBlockOverrides = blockOverrides\n      ? BlockOverrides.toRpc(blockOverrides)\n      : undefined\n    const rpcStateOverride = serializeStateOverride(stateOverride)\n\n    const chainFormat = client.chain?.formatters?.transactionRequest?.format\n    const format = chainFormat || formatTransactionRequest\n\n    const request = format(\n      {\n        // Pick out extra data that might exist on the chain's transaction request type.\n        ...extract(rest, { format: chainFormat }),\n        accessList,\n        account,\n        authorizationList,\n        blobs,\n        data,\n        gas,\n        gasPrice,\n        maxFeePerBlobGas,\n        maxFeePerGas,\n        maxPriorityFeePerGas,\n        nonce,\n        to: deploylessCall ? undefined : to,\n        value,\n      } as TransactionRequest,\n      'call',\n    ) as TransactionRequest\n\n    if (\n      batch &&\n      shouldPerformMulticall({ request }) &&\n      !rpcStateOverride &&\n      !rpcBlockOverrides\n    ) {\n      try {\n        return await scheduleMulticall(client, {\n          ...request,\n          blockNumber,\n          blockTag,\n        } as unknown as ScheduleMulticallParameters<chain>)\n      } catch (err) {\n        if (\n          !(err instanceof ClientChainNotConfiguredError) &&\n          !(err instanceof ChainDoesNotSupportContract)\n        )\n          throw err\n      }\n    }\n\n    const params = (() => {\n      const base = [\n        request as ExactPartial<RpcTransactionRequest>,\n        block,\n      ] as const\n      if (rpcStateOverride && rpcBlockOverrides)\n        return [...base, rpcStateOverride, rpcBlockOverrides] as const\n      if (rpcStateOverride) return [...base, rpcStateOverride] as const\n      if (rpcBlockOverrides) return [...base, {}, rpcBlockOverrides] as const\n      return base\n    })()\n\n    const response = await client.request({\n      method: 'eth_call',\n      params,\n    })\n    if (response === '0x') return { data: undefined }\n    return { data: response }\n  } catch (err) {\n    const data = getRevertErrorData(err)\n\n    // Check for CCIP-Read offchain lookup signature.\n    const { offchainLookup, offchainLookupSignature } = await import(\n      '../../utils/ccip.js'\n    )\n    if (\n      client.ccipRead !== false &&\n      data?.slice(0, 10) === offchainLookupSignature &&\n      to\n    )\n      return { data: await offchainLookup(client, { data, to }) }\n\n    // Check for counterfactual deployment error.\n    if (deploylessCall && data?.slice(0, 10) === '0x101bb98d')\n      throw new CounterfactualDeploymentFailedError({ factory })\n\n    throw getCallError(err as ErrorType, {\n      ...args,\n      account,\n      chain: client.chain,\n    })\n  }\n}\n\n// We only want to perform a scheduled multicall if:\n// - The request has calldata,\n// - The request has a target address,\n// - The target address is not already the aggregate3 signature,\n// - The request has no other properties (`nonce`, `gas`, etc cannot be sent with a multicall).\nfunction shouldPerformMulticall({ request }: { request: TransactionRequest }) {\n  const { data, to, ...request_ } = request\n  if (!data) return false\n  if (data.startsWith(aggregate3Signature)) return false\n  if (!to) return false\n  if (\n    Object.values(request_).filter((x) => typeof x !== 'undefined').length > 0\n  )\n    return false\n  return true\n}\n\ntype ScheduleMulticallParameters<chain extends Chain | undefined> = Pick<\n  CallParameters<chain>,\n  'blockNumber' | 'blockTag'\n> & {\n  data: Hex\n  multicallAddress?: Address | undefined\n  to: Address\n}\n\ntype ScheduleMulticallErrorType =\n  | GetChainContractAddressErrorType\n  | NumberToHexErrorType\n  | CreateBatchSchedulerErrorType\n  | EncodeFunctionDataErrorType\n  | DecodeFunctionResultErrorType\n  | RawContractErrorType\n  | ErrorType\n\nasync function scheduleMulticall<chain extends Chain | undefined>(\n  client: Client<Transport>,\n  args: ScheduleMulticallParameters<chain>,\n) {\n  const {\n    batchSize = 1024,\n    deployless = false,\n    wait = 0,\n  } = typeof client.batch?.multicall === 'object' ? client.batch.multicall : {}\n  const {\n    blockNumber,\n    blockTag = client.experimental_blockTag ?? 'latest',\n    data,\n    to,\n  } = args\n\n  const multicallAddress = (() => {\n    if (deployless) return null\n    if (args.multicallAddress) return args.multicallAddress\n    if (client.chain) {\n      return getChainContractAddress({\n        blockNumber,\n        chain: client.chain,\n        contract: 'multicall3',\n      })\n    }\n    throw new ClientChainNotConfiguredError()\n  })()\n\n  const blockNumberHex =\n    typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n  const block = blockNumberHex || blockTag\n\n  const { schedule } = createBatchScheduler({\n    id: `${client.uid}.${block}`,\n    wait,\n    shouldSplitBatch(args) {\n      const size = args.reduce((size, { data }) => size + (data.length - 2), 0)\n      return size > batchSize * 2\n    },\n    fn: async (\n      requests: {\n        data: Hex\n        to: Address\n      }[],\n    ) => {\n      const calls = requests.map((request) => ({\n        allowFailure: true,\n        callData: request.data,\n        target: request.to,\n      }))\n\n      const calldata = encodeFunctionData({\n        abi: multicall3Abi,\n        args: [calls],\n        functionName: 'aggregate3',\n      })\n\n      const data = await client.request({\n        method: 'eth_call',\n        params: [\n          {\n            ...(multicallAddress === null\n              ? {\n                  data: toDeploylessCallViaBytecodeData({\n                    code: multicall3Bytecode,\n                    data: calldata,\n                  }),\n                }\n              : { to: multicallAddress, data: calldata }),\n          },\n          block,\n        ],\n      })\n\n      return decodeFunctionResult({\n        abi: multicall3Abi,\n        args: [calls],\n        functionName: 'aggregate3',\n        data: data || '0x',\n      })\n    },\n  })\n\n  const [{ returnData, success }] = await schedule({ data, to })\n\n  if (!success) throw new RawContractError({ data: returnData })\n  if (returnData === '0x') return { data: undefined }\n  return { data: returnData }\n}\n\ntype ToDeploylessCallViaBytecodeDataErrorType =\n  | EncodeDeployDataErrorType\n  | ErrorType\n\nfunction toDeploylessCallViaBytecodeData(parameters: { code: Hex; data: Hex }) {\n  const { code, data } = parameters\n  return encodeDeployData({\n    abi: parseAbi(['constructor(bytes, bytes)']),\n    bytecode: deploylessCallViaBytecodeBytecode,\n    args: [code, data],\n  })\n}\n\ntype ToDeploylessCallViaFactoryDataErrorType =\n  | EncodeDeployDataErrorType\n  | ErrorType\n\nfunction toDeploylessCallViaFactoryData(parameters: {\n  data: Hex\n  factory: Address\n  factoryData: Hex\n  to: Address\n}) {\n  const { data, factory, factoryData, to } = parameters\n  return encodeDeployData({\n    abi: parseAbi(['constructor(address, bytes, address, bytes)']),\n    bytecode: deploylessCallViaFactoryBytecode,\n    args: [to, data, factory, factoryData],\n  })\n}\n\n/** @internal */\nexport type GetRevertErrorDataErrorType = ErrorType\n\n/** @internal */\nexport function getRevertErrorData(err: unknown) {\n  if (!(err instanceof BaseError)) return undefined\n  const error = err.walk() as RawContractError\n  return typeof error?.data === 'object' ? error.data?.data : error.data\n}\n", null, "export const version = '1.2.3'\n", "import type { OneOf, Pretty } from './types.js'\nimport { version } from './version.js'\n\ntype BaseErrorArgs = Pretty<\n  {\n    docsPath?: string | undefined\n    metaMessages?: string[] | undefined\n  } & OneOf<{ details?: string | undefined } | { cause?: BaseError | Error }>\n>\n\nexport class BaseError extends Error {\n  details: string\n  docsPath?: string | undefined\n  metaMessages?: string[] | undefined\n  shortMessage: string\n\n  override name = 'AbiTypeError'\n\n  constructor(shortMessage: string, args: BaseErrorArgs = {}) {\n    const details =\n      args.cause instanceof BaseError\n        ? args.cause.details\n        : args.cause?.message\n          ? args.cause.message\n          : args.details!\n    const docsPath =\n      args.cause instanceof BaseError\n        ? args.cause.docsPath || args.docsPath\n        : args.docsPath\n    const message = [\n      shortMessage || 'An error occurred.',\n      '',\n      ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n      ...(docsPath ? [`Docs: https://abitype.dev${docsPath}`] : []),\n      ...(details ? [`Details: ${details}`] : []),\n      `Version: abitype@${version}`,\n    ].join('\\n')\n\n    super(message)\n\n    if (args.cause) this.cause = args.cause\n    this.details = details\n    this.docsPath = docsPath\n    this.metaMessages = args.metaMessages\n    this.shortMessage = shortMessage\n  }\n}\n", "/**\n * Infers embedded primitive type of any type\n *\n * @param T - Type to infer\n * @returns Embedded type of {@link type}\n *\n * @example\n * type Result = Narrow<['foo', 'bar', 1]>\n */\n// s/o https://twitter.com/hd_nvim/status/1578567206190780417\nexport type Narrow<type> =\n  | (unknown extends type ? unknown : never)\n  | (type extends Function ? type : never)\n  | (type extends bigint | boolean | number | string ? type : never)\n  | (type extends [] ? [] : never)\n  | { [K in keyof type]: Narrow<type[K]> }\n\n/**\n * Infers embedded primitive type of any type\n * Same as `as const` but without setting the object as readonly and without needing the user to use it.\n *\n * @param value - Value to infer\n * @returns Value with embedded type inferred\n *\n * @example\n * const result = narrow(['foo', 'bar', 1])\n */\nexport function narrow<type>(value: Narrow<type>) {\n  return value\n}\n", "// TODO: This looks cool. Need to check the performance of `new RegExp` versus defined inline though.\n// https://twitter.com/GabrielVergnaud/status/1622906834343366657\nexport function execTyped<type>(regex: RegExp, string: string) {\n  const match = regex.exec(string)\n  return match?.groups as type | undefined\n}\n\n// `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n// https://regexr.com/6va55\nexport const bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/\n\n// `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nexport const integerRegex =\n  /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/\n\nexport const isTupleRegex = /^\\(.+?\\).*?$/\n", "import type { AbiEventParameter, AbiParameter } from '../abi.js'\nimport { execTyped } from '../regex.js'\nimport type { IsNarrowable, Join } from '../types.js'\nimport type { AssertName } from './types/signatures.js'\n\n/**\n * Formats {@link AbiParameter} to human-readable ABI parameter.\n *\n * @param abiParameter - ABI parameter\n * @returns Human-readable ABI parameter\n *\n * @example\n * type Result = FormatAbiParameter<{ type: 'address'; name: 'from'; }>\n * //   ^? type Result = 'address from'\n */\nexport type FormatAbiParameter<\n  abiParameter extends AbiParameter | AbiEventParameter,\n> = abiParameter extends {\n  name?: infer name extends string\n  type: `tuple${infer array}`\n  components: infer components extends readonly AbiParameter[]\n  indexed?: infer indexed extends boolean\n}\n  ? FormatAbiParameter<\n      {\n        type: `(${Join<\n          {\n            [key in keyof components]: FormatAbiParameter<\n              {\n                type: components[key]['type']\n              } & (IsNarrowable<components[key]['name'], string> extends true\n                ? { name: components[key]['name'] }\n                : unknown) &\n                (components[key] extends { components: readonly AbiParameter[] }\n                  ? { components: components[key]['components'] }\n                  : unknown)\n            >\n          },\n          ', '\n        >})${array}`\n      } & (IsNarrowable<name, string> extends true ? { name: name } : unknown) &\n        (IsNarrowable<indexed, boolean> extends true\n          ? { indexed: indexed }\n          : unknown)\n    >\n  : `${abiParameter['type']}${abiParameter extends { indexed: true }\n      ? ' indexed'\n      : ''}${abiParameter['name'] extends infer name extends string\n      ? name extends ''\n        ? ''\n        : ` ${AssertName<name>}`\n      : ''}`\n\n// https://regexr.com/7f7rv\nconst tupleRegex = /^tuple(?<array>(\\[(\\d*)\\])*)$/\n\n/**\n * Formats {@link AbiParameter} to human-readable ABI parameter.\n *\n * @param abiParameter - ABI parameter\n * @returns Human-readable ABI parameter\n *\n * @example\n * const result = formatAbiParameter({ type: 'address', name: 'from' })\n * //    ^? const result: 'address from'\n */\nexport function formatAbiParameter<\n  const abiParameter extends AbiParameter | AbiEventParameter,\n>(abiParameter: abiParameter): FormatAbiParameter<abiParameter> {\n  type Result = FormatAbiParameter<abiParameter>\n\n  let type = abiParameter.type\n  if (tupleRegex.test(abiParameter.type) && 'components' in abiParameter) {\n    type = '('\n    const length = abiParameter.components.length as number\n    for (let i = 0; i < length; i++) {\n      const component = abiParameter.components[i]!\n      type += formatAbiParameter(component)\n      if (i < length - 1) type += ', '\n    }\n    const result = execTyped<{ array?: string }>(tupleRegex, abiParameter.type)\n    type += `)${result?.array || ''}`\n    return formatAbiParameter({\n      ...abiParameter,\n      type,\n    }) as Result\n  }\n  // Add `indexed` to type if in `abiParameter`\n  if ('indexed' in abiParameter && abiParameter.indexed)\n    type = `${type} indexed`\n  // Return human-readable ABI parameter\n  if (abiParameter.name) return `${type} ${abiParameter.name}` as Result\n  return type as Result\n}\n", "import type { AbiEventParameter, AbiParameter } from '../abi.js'\nimport type { Join } from '../types.js'\nimport {\n  type FormatAbiParameter,\n  formatAbiParameter,\n} from './formatAbiParameter.js'\n\n/**\n * Formats {@link AbiParameter}s to human-readable ABI parameter.\n *\n * @param abiParameters - ABI parameters\n * @returns Human-readable ABI parameters\n *\n * @example\n * type Result = FormatAbiParameters<[\n *   // ^? type Result = 'address from, uint256 tokenId'\n *   { type: 'address'; name: 'from'; },\n *   { type: 'uint256'; name: 'tokenId'; },\n * ]>\n */\nexport type FormatAbiParameters<\n  abiParameters extends readonly [\n    AbiParameter | AbiEventParameter,\n    ...(readonly (AbiParameter | AbiEventParameter)[]),\n  ],\n> = Join<\n  {\n    [key in keyof abiParameters]: FormatAbiParameter<abiParameters[key]>\n  },\n  ', '\n>\n\n/**\n * Formats {@link AbiParameter}s to human-readable ABI parameters.\n *\n * @param abiParameters - ABI parameters\n * @returns Human-readable ABI parameters\n *\n * @example\n * const result = formatAbiParameters([\n *   //  ^? const result: 'address from, uint256 tokenId'\n *   { type: 'address', name: 'from' },\n *   { type: 'uint256', name: 'tokenId' },\n * ])\n */\nexport function formatAbiParameters<\n  const abiParameters extends readonly [\n    AbiParameter | AbiEventParameter,\n    ...(readonly (AbiParameter | AbiEventParameter)[]),\n  ],\n>(abiParameters: abiParameters): FormatAbiParameters<abiParameters> {\n  let params = ''\n  const length = abiParameters.length\n  for (let i = 0; i < length; i++) {\n    const abiParameter = abiParameters[i]!\n    params += formatAbiParameter(abiParameter)\n    if (i !== length - 1) params += ', '\n  }\n  return params as FormatAbiParameters<abiParameters>\n}\n", "import type {\n  Abi,\n  AbiConstructor,\n  AbiError,\n  AbiEvent,\n  AbiEventParameter,\n  AbiFallback,\n  AbiFunction,\n  AbiParameter,\n  AbiReceive,\n  AbiStateMutability,\n} from '../abi.js'\nimport {\n  type FormatAbiParameters as FormatAbiParameters_,\n  formatAbiParameters,\n} from './formatAbiParameters.js'\nimport type { AssertName } from './types/signatures.js'\n\n/**\n * Formats ABI item (e.g. error, event, function) into human-readable ABI item\n *\n * @param abiItem - ABI item\n * @returns Human-readable ABI item\n */\nexport type FormatAbiItem<abiItem extends Abi[number]> =\n  Abi[number] extends abiItem\n    ? string\n    :\n        | (abiItem extends AbiFunction\n            ? AbiFunction extends abiItem\n              ? string\n              : `function ${AssertName<abiItem['name']>}(${FormatAbiParameters<\n                  abiItem['inputs']\n                >})${abiItem['stateMutability'] extends Exclude<\n                  AbiStateMutability,\n                  'nonpayable'\n                >\n                  ? ` ${abiItem['stateMutability']}`\n                  : ''}${abiItem['outputs']['length'] extends 0\n                  ? ''\n                  : ` returns (${FormatAbiParameters<abiItem['outputs']>})`}`\n            : never)\n        | (abiItem extends AbiEvent\n            ? AbiEvent extends abiItem\n              ? string\n              : `event ${AssertName<abiItem['name']>}(${FormatAbiParameters<\n                  abiItem['inputs']\n                >})`\n            : never)\n        | (abiItem extends AbiError\n            ? AbiError extends abiItem\n              ? string\n              : `error ${AssertName<abiItem['name']>}(${FormatAbiParameters<\n                  abiItem['inputs']\n                >})`\n            : never)\n        | (abiItem extends AbiConstructor\n            ? AbiConstructor extends abiItem\n              ? string\n              : `constructor(${FormatAbiParameters<\n                  abiItem['inputs']\n                >})${abiItem['stateMutability'] extends 'payable'\n                  ? ' payable'\n                  : ''}`\n            : never)\n        | (abiItem extends AbiFallback\n            ? AbiFallback extends abiItem\n              ? string\n              : `fallback() external${abiItem['stateMutability'] extends 'payable'\n                  ? ' payable'\n                  : ''}`\n            : never)\n        | (abiItem extends AbiReceive\n            ? AbiReceive extends abiItem\n              ? string\n              : 'receive() external payable'\n            : never)\n\ntype FormatAbiParameters<\n  abiParameters extends readonly (AbiParameter | AbiEventParameter)[],\n> = abiParameters['length'] extends 0\n  ? ''\n  : FormatAbiParameters_<\n      abiParameters extends readonly [\n        AbiParameter | AbiEventParameter,\n        ...(readonly (AbiParameter | AbiEventParameter)[]),\n      ]\n        ? abiParameters\n        : never\n    >\n\n/**\n * Formats ABI item (e.g. error, event, function) into human-readable ABI item\n *\n * @param abiItem - ABI item\n * @returns Human-readable ABI item\n */\nexport function formatAbiItem<const abiItem extends Abi[number]>(\n  abiItem: abiItem,\n): FormatAbiItem<abiItem> {\n  type Result = FormatAbiItem<abiItem>\n  type Params = readonly [\n    AbiParameter | AbiEventParameter,\n    ...(readonly (AbiParameter | AbiEventParameter)[]),\n  ]\n\n  if (abiItem.type === 'function')\n    return `function ${abiItem.name}(${formatAbiParameters(\n      abiItem.inputs as Params,\n    )})${\n      abiItem.stateMutability && abiItem.stateMutability !== 'nonpayable'\n        ? ` ${abiItem.stateMutability}`\n        : ''\n    }${\n      abiItem.outputs?.length\n        ? ` returns (${formatAbiParameters(abiItem.outputs as Params)})`\n        : ''\n    }`\n  if (abiItem.type === 'event')\n    return `event ${abiItem.name}(${formatAbiParameters(\n      abiItem.inputs as Params,\n    )})`\n  if (abiItem.type === 'error')\n    return `error ${abiItem.name}(${formatAbiParameters(\n      abiItem.inputs as Params,\n    )})`\n  if (abiItem.type === 'constructor')\n    return `constructor(${formatAbiParameters(abiItem.inputs as Params)})${\n      abiItem.stateMutability === 'payable' ? ' payable' : ''\n    }`\n  if (abiItem.type === 'fallback')\n    return `fallback() external${\n      abiItem.stateMutability === 'payable' ? ' payable' : ''\n    }` as Result\n  return 'receive() external payable' as Result\n}\n", "import type { Abi } from '../abi.js'\nimport { type FormatAbiItem, formatAbiItem } from './formatAbiItem.js'\n\n/**\n * Parses JSON ABI into human-readable ABI\n *\n * @param abi - ABI\n * @returns Human-readable ABI\n */\nexport type FormatAbi<abi extends Abi | readonly unknown[]> = Abi extends abi\n  ? readonly string[]\n  : abi extends readonly []\n    ? never\n    : abi extends Abi\n      ? {\n          [key in keyof abi]: FormatAbiItem<abi[key]>\n        }\n      : readonly string[]\n\n/**\n * Parses JSON ABI into human-readable ABI\n *\n * @param abi - ABI\n * @returns Human-readable ABI\n */\nexport function formatAbi<const abi extends Abi | readonly unknown[]>(\n  abi: abi,\n): FormatAbi<abi> {\n  const signatures = []\n  const length = abi.length\n  for (let i = 0; i < length; i++) {\n    const abiItem = abi[i]!\n    const signature = formatAbiItem(abiItem as Abi[number])\n    signatures.push(signature)\n  }\n  return signatures as unknown as FormatAbi<abi>\n}\n", "import type { AbiStateMutability } from '../../abi.js'\nimport { execTyped } from '../../regex.js'\nimport type {\n  EventModifier,\n  FunctionModifier,\n  Modifier,\n} from '../types/signatures.js'\n\n// https://regexr.com/7gmok\nconst errorSignatureRegex =\n  /^error (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\\((?<parameters>.*?)\\)$/\nexport function isErrorSignature(signature: string) {\n  return errorSignatureRegex.test(signature)\n}\nexport function execErrorSignature(signature: string) {\n  return execTyped<{ name: string; parameters: string }>(\n    errorSignatureRegex,\n    signature,\n  )\n}\n\n// https://regexr.com/7gmoq\nconst eventSignatureRegex =\n  /^event (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\\((?<parameters>.*?)\\)$/\nexport function isEventSignature(signature: string) {\n  return eventSignatureRegex.test(signature)\n}\nexport function execEventSignature(signature: string) {\n  return execTyped<{ name: string; parameters: string }>(\n    eventSignatureRegex,\n    signature,\n  )\n}\n\n// https://regexr.com/7gmot\nconst functionSignatureRegex =\n  /^function (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\\((?<parameters>.*?)\\)(?: (?<scope>external|public{1}))?(?: (?<stateMutability>pure|view|nonpayable|payable{1}))?(?: returns\\s?\\((?<returns>.*?)\\))?$/\nexport function isFunctionSignature(signature: string) {\n  return functionSignatureRegex.test(signature)\n}\nexport function execFunctionSignature(signature: string) {\n  return execTyped<{\n    name: string\n    parameters: string\n    stateMutability?: AbiStateMutability\n    returns?: string\n  }>(functionSignatureRegex, signature)\n}\n\n// https://regexr.com/7gmp3\nconst structSignatureRegex =\n  /^struct (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*) \\{(?<properties>.*?)\\}$/\nexport function isStructSignature(signature: string) {\n  return structSignatureRegex.test(signature)\n}\nexport function execStructSignature(signature: string) {\n  return execTyped<{ name: string; properties: string }>(\n    structSignatureRegex,\n    signature,\n  )\n}\n\n// https://regexr.com/78u01\nconst constructorSignatureRegex =\n  /^constructor\\((?<parameters>.*?)\\)(?:\\s(?<stateMutability>payable{1}))?$/\nexport function isConstructorSignature(signature: string) {\n  return constructorSignatureRegex.test(signature)\n}\nexport function execConstructorSignature(signature: string) {\n  return execTyped<{\n    parameters: string\n    stateMutability?: Extract<AbiStateMutability, 'payable'>\n  }>(constructorSignatureRegex, signature)\n}\n\n// https://regexr.com/7srtn\nconst fallbackSignatureRegex =\n  /^fallback\\(\\) external(?:\\s(?<stateMutability>payable{1}))?$/\nexport function isFallbackSignature(signature: string) {\n  return fallbackSignatureRegex.test(signature)\n}\nexport function execFallbackSignature(signature: string) {\n  return execTyped<{\n    parameters: string\n    stateMutability?: Extract<AbiStateMutability, 'payable'>\n  }>(fallbackSignatureRegex, signature)\n}\n\n// https://regexr.com/78u1k\nconst receiveSignatureRegex = /^receive\\(\\) external payable$/\nexport function isReceiveSignature(signature: string) {\n  return receiveSignatureRegex.test(signature)\n}\n\nexport const modifiers = new Set<Modifier>([\n  'memory',\n  'indexed',\n  'storage',\n  'calldata',\n])\nexport const eventModifiers = new Set<EventModifier>(['indexed'])\nexport const functionModifiers = new Set<FunctionModifier>([\n  'calldata',\n  'memory',\n  'storage',\n])\n", "import { BaseError } from '../../errors.js'\n\nexport class InvalidAbiItemError extends BaseError {\n  override name = 'InvalidAbiItemError'\n\n  constructor({ signature }: { signature: string | object }) {\n    super('Failed to parse ABI item.', {\n      details: `parseAbiItem(${JSON.stringify(signature, null, 2)})`,\n      docsPath: '/api/human#parseabiitem-1',\n    })\n  }\n}\n\nexport class UnknownTypeError extends BaseError {\n  override name = 'UnknownTypeError'\n\n  constructor({ type }: { type: string }) {\n    super('Unknown type.', {\n      metaMessages: [\n        `Type \"${type}\" is not a valid ABI type. Perhaps you forgot to include a struct signature?`,\n      ],\n    })\n  }\n}\n\nexport class UnknownSolidityTypeError extends BaseError {\n  override name = 'UnknownSolidityTypeError'\n\n  constructor({ type }: { type: string }) {\n    super('Unknown type.', {\n      metaMessages: [`Type \"${type}\" is not a valid ABI type.`],\n    })\n  }\n}\n", "import type { AbiItemType, AbiParameter } from '../../abi.js'\nimport { BaseError } from '../../errors.js'\nimport type { Modifier } from '../types/signatures.js'\n\nexport class InvalidAbiParameterError extends BaseError {\n  override name = 'InvalidAbiParameterError'\n\n  constructor({ param }: { param: string | object }) {\n    super('Failed to parse ABI parameter.', {\n      details: `parseAbiParameter(${JSON.stringify(param, null, 2)})`,\n      docsPath: '/api/human#parseabiparameter-1',\n    })\n  }\n}\n\nexport class InvalidAbiParametersError extends BaseError {\n  override name = 'InvalidAbiParametersError'\n\n  constructor({ params }: { params: string | object }) {\n    super('Failed to parse ABI parameters.', {\n      details: `parseAbiParameters(${JSON.stringify(params, null, 2)})`,\n      docsPath: '/api/human#parseabiparameters-1',\n    })\n  }\n}\n\nexport class InvalidParameterError extends BaseError {\n  override name = 'InvalidParameterError'\n\n  constructor({ param }: { param: string }) {\n    super('Invalid ABI parameter.', {\n      details: param,\n    })\n  }\n}\n\nexport class SolidityProtectedKeywordError extends BaseError {\n  override name = 'SolidityProtectedKeywordError'\n\n  constructor({ param, name }: { param: string; name: string }) {\n    super('Invalid ABI parameter.', {\n      details: param,\n      metaMessages: [\n        `\"${name}\" is a protected Solidity keyword. More info: https://docs.soliditylang.org/en/latest/cheatsheet.html`,\n      ],\n    })\n  }\n}\n\nexport class InvalidModifierError extends BaseError {\n  override name = 'InvalidModifierError'\n\n  constructor({\n    param,\n    type,\n    modifier,\n  }: {\n    param: string\n    type?: AbiItemType | 'struct' | undefined\n    modifier: Modifier\n  }) {\n    super('Invalid ABI parameter.', {\n      details: param,\n      metaMessages: [\n        `Modifier \"${modifier}\" not allowed${\n          type ? ` in \"${type}\" type` : ''\n        }.`,\n      ],\n    })\n  }\n}\n\nexport class InvalidFunctionModifierError extends BaseError {\n  override name = 'InvalidFunctionModifierError'\n\n  constructor({\n    param,\n    type,\n    modifier,\n  }: {\n    param: string\n    type?: AbiItemType | 'struct' | undefined\n    modifier: Modifier\n  }) {\n    super('Invalid ABI parameter.', {\n      details: param,\n      metaMessages: [\n        `Modifier \"${modifier}\" not allowed${\n          type ? ` in \"${type}\" type` : ''\n        }.`,\n        `Data location can only be specified for array, struct, or mapping types, but \"${modifier}\" was given.`,\n      ],\n    })\n  }\n}\n\nexport class InvalidAbiTypeParameterError extends BaseError {\n  override name = 'InvalidAbiTypeParameterError'\n\n  constructor({\n    abiParameter,\n  }: {\n    abiParameter: AbiParameter & { indexed?: boolean | undefined }\n  }) {\n    super('Invalid ABI parameter.', {\n      details: JSON.stringify(abiParameter, null, 2),\n      metaMessages: ['ABI parameter type is invalid.'],\n    })\n  }\n}\n", "import type { AbiItemType } from '../../abi.js'\nimport { BaseError } from '../../errors.js'\n\nexport class InvalidSignatureError extends BaseError {\n  override name = 'InvalidSignatureError'\n\n  constructor({\n    signature,\n    type,\n  }: {\n    signature: string\n    type: AbiItemType | 'struct'\n  }) {\n    super(`Invalid ${type} signature.`, {\n      details: signature,\n    })\n  }\n}\n\nexport class UnknownSignatureError extends BaseError {\n  override name = 'UnknownSignatureError'\n\n  constructor({ signature }: { signature: string }) {\n    super('Unknown signature.', {\n      details: signature,\n    })\n  }\n}\n\nexport class InvalidStructSignatureError extends BaseError {\n  override name = 'InvalidStructSignatureError'\n\n  constructor({ signature }: { signature: string }) {\n    super('Invalid struct signature.', {\n      details: signature,\n      metaMessages: ['No properties exist.'],\n    })\n  }\n}\n", "import { BaseError } from '../../errors.js'\n\nexport class CircularReferenceError extends BaseError {\n  override name = 'CircularReferenceError'\n\n  constructor({ type }: { type: string }) {\n    super('Circular reference detected.', {\n      metaMessages: [`Struct \"${type}\" is a circular reference.`],\n    })\n  }\n}\n", "import { BaseError } from '../../errors.js'\n\nexport class InvalidParenthesisError extends BaseError {\n  override name = 'InvalidParenthesisError'\n\n  constructor({ current, depth }: { current: string; depth: number }) {\n    super('Unbalanced parentheses.', {\n      metaMessages: [\n        `\"${current.trim()}\" has too many ${\n          depth > 0 ? 'opening' : 'closing'\n        } parentheses.`,\n      ],\n      details: `Depth \"${depth}\"`,\n    })\n  }\n}\n", "import type { AbiItemType, AbiParameter } from '../../abi.js'\nimport type { StructLookup } from '../types/structs.js'\n\n/**\n * Gets {@link parameterCache} cache key namespaced by {@link type} and {@link structs}. This prevents parameters from being accessible to types that don't allow them (e.g. `string indexed foo` not allowed outside of `type: 'event'`) and ensures different struct definitions with the same name are cached separately.\n * @param param ABI parameter string\n * @param type ABI parameter type\n * @param structs Struct definitions to include in cache key\n * @returns Cache key for {@link parameterCache}\n */\nexport function getParameterCacheKey(\n  param: string,\n  type?: AbiItemType | 'struct',\n  structs?: StructLookup,\n) {\n  let structKey = ''\n  if (structs)\n    for (const struct of Object.entries(structs)) {\n      if (!struct) continue\n      let propertyKey = ''\n      for (const property of struct[1]) {\n        propertyKey += `[${property.type}${property.name ? `:${property.name}` : ''}]`\n      }\n      structKey += `(${struct[0]}{${propertyKey}})`\n    }\n  if (type) return `${type}:${param}${structKey}`\n  return `${param}${structKey}`\n}\n\n/**\n * Basic cache seeded with common ABI parameter strings.\n *\n * **Note: When seeding more parameters, make sure you benchmark performance. The current number is the ideal balance between performance and having an already existing cache.**\n */\nexport const parameterCache = new Map<\n  string,\n  AbiParameter & { indexed?: boolean }\n>([\n  // Unnamed\n  ['address', { type: 'address' }],\n  ['bool', { type: 'bool' }],\n  ['bytes', { type: 'bytes' }],\n  ['bytes32', { type: 'bytes32' }],\n  ['int', { type: 'int256' }],\n  ['int256', { type: 'int256' }],\n  ['string', { type: 'string' }],\n  ['uint', { type: 'uint256' }],\n  ['uint8', { type: 'uint8' }],\n  ['uint16', { type: 'uint16' }],\n  ['uint24', { type: 'uint24' }],\n  ['uint32', { type: 'uint32' }],\n  ['uint64', { type: 'uint64' }],\n  ['uint96', { type: 'uint96' }],\n  ['uint112', { type: 'uint112' }],\n  ['uint160', { type: 'uint160' }],\n  ['uint192', { type: 'uint192' }],\n  ['uint256', { type: 'uint256' }],\n\n  // Named\n  ['address owner', { type: 'address', name: 'owner' }],\n  ['address to', { type: 'address', name: 'to' }],\n  ['bool approved', { type: 'bool', name: 'approved' }],\n  ['bytes _data', { type: 'bytes', name: '_data' }],\n  ['bytes data', { type: 'bytes', name: 'data' }],\n  ['bytes signature', { type: 'bytes', name: 'signature' }],\n  ['bytes32 hash', { type: 'bytes32', name: 'hash' }],\n  ['bytes32 r', { type: 'bytes32', name: 'r' }],\n  ['bytes32 root', { type: 'bytes32', name: 'root' }],\n  ['bytes32 s', { type: 'bytes32', name: 's' }],\n  ['string name', { type: 'string', name: 'name' }],\n  ['string symbol', { type: 'string', name: 'symbol' }],\n  ['string tokenURI', { type: 'string', name: 'tokenURI' }],\n  ['uint tokenId', { type: 'uint256', name: 'tokenId' }],\n  ['uint8 v', { type: 'uint8', name: 'v' }],\n  ['uint256 balance', { type: 'uint256', name: 'balance' }],\n  ['uint256 tokenId', { type: 'uint256', name: 'tokenId' }],\n  ['uint256 value', { type: 'uint256', name: 'value' }],\n\n  // Indexed\n  [\n    'event:address indexed from',\n    { type: 'address', name: 'from', indexed: true },\n  ],\n  ['event:address indexed to', { type: 'address', name: 'to', indexed: true }],\n  [\n    'event:uint indexed tokenId',\n    { type: 'uint256', name: 'tokenId', indexed: true },\n  ],\n  [\n    'event:uint256 indexed tokenId',\n    { type: 'uint256', name: 'tokenId', indexed: true },\n  ],\n])\n", "import type {\n  AbiItemType,\n  AbiType,\n  SolidityArray,\n  SolidityBytes,\n  SolidityString,\n  SolidityTuple,\n} from '../../abi.js'\nimport {\n  bytesRegex,\n  execTyped,\n  integerRegex,\n  isTupleRegex,\n} from '../../regex.js'\nimport { UnknownSolidityTypeError } from '../errors/abiItem.js'\nimport {\n  InvalidFunctionModifierError,\n  InvalidModifierError,\n  InvalidParameterError,\n  SolidityProtectedKeywordError,\n} from '../errors/abiParameter.js'\nimport {\n  InvalidSignatureError,\n  UnknownSignatureError,\n} from '../errors/signature.js'\nimport { InvalidParenthesisError } from '../errors/splitParameters.js'\nimport type { FunctionModifier, Modifier } from '../types/signatures.js'\nimport type { StructLookup } from '../types/structs.js'\nimport { getParameterCacheKey, parameterCache } from './cache.js'\nimport {\n  eventModifiers,\n  execConstructorSignature,\n  execErrorSignature,\n  execEventSignature,\n  execFallbackSignature,\n  execFunctionSignature,\n  functionModifiers,\n  isConstructorSignature,\n  isErrorSignature,\n  isEventSignature,\n  isFallbackSignature,\n  isFunctionSignature,\n  isReceiveSignature,\n} from './signatures.js'\n\nexport function parseSignature(signature: string, structs: StructLookup = {}) {\n  if (isFunctionSignature(signature))\n    return parseFunctionSignature(signature, structs)\n\n  if (isEventSignature(signature))\n    return parseEventSignature(signature, structs)\n\n  if (isErrorSignature(signature))\n    return parseErrorSignature(signature, structs)\n\n  if (isConstructorSignature(signature))\n    return parseConstructorSignature(signature, structs)\n\n  if (isFallbackSignature(signature)) return parseFallbackSignature(signature)\n\n  if (isReceiveSignature(signature))\n    return {\n      type: 'receive',\n      stateMutability: 'payable',\n    }\n\n  throw new UnknownSignatureError({ signature })\n}\n\nexport function parseFunctionSignature(\n  signature: string,\n  structs: StructLookup = {},\n) {\n  const match = execFunctionSignature(signature)\n  if (!match) throw new InvalidSignatureError({ signature, type: 'function' })\n\n  const inputParams = splitParameters(match.parameters)\n  const inputs = []\n  const inputLength = inputParams.length\n  for (let i = 0; i < inputLength; i++) {\n    inputs.push(\n      parseAbiParameter(inputParams[i]!, {\n        modifiers: functionModifiers,\n        structs,\n        type: 'function',\n      }),\n    )\n  }\n\n  const outputs = []\n  if (match.returns) {\n    const outputParams = splitParameters(match.returns)\n    const outputLength = outputParams.length\n    for (let i = 0; i < outputLength; i++) {\n      outputs.push(\n        parseAbiParameter(outputParams[i]!, {\n          modifiers: functionModifiers,\n          structs,\n          type: 'function',\n        }),\n      )\n    }\n  }\n\n  return {\n    name: match.name,\n    type: 'function',\n    stateMutability: match.stateMutability ?? 'nonpayable',\n    inputs,\n    outputs,\n  }\n}\n\nexport function parseEventSignature(\n  signature: string,\n  structs: StructLookup = {},\n) {\n  const match = execEventSignature(signature)\n  if (!match) throw new InvalidSignatureError({ signature, type: 'event' })\n\n  const params = splitParameters(match.parameters)\n  const abiParameters = []\n  const length = params.length\n  for (let i = 0; i < length; i++)\n    abiParameters.push(\n      parseAbiParameter(params[i]!, {\n        modifiers: eventModifiers,\n        structs,\n        type: 'event',\n      }),\n    )\n  return { name: match.name, type: 'event', inputs: abiParameters }\n}\n\nexport function parseErrorSignature(\n  signature: string,\n  structs: StructLookup = {},\n) {\n  const match = execErrorSignature(signature)\n  if (!match) throw new InvalidSignatureError({ signature, type: 'error' })\n\n  const params = splitParameters(match.parameters)\n  const abiParameters = []\n  const length = params.length\n  for (let i = 0; i < length; i++)\n    abiParameters.push(\n      parseAbiParameter(params[i]!, { structs, type: 'error' }),\n    )\n  return { name: match.name, type: 'error', inputs: abiParameters }\n}\n\nexport function parseConstructorSignature(\n  signature: string,\n  structs: StructLookup = {},\n) {\n  const match = execConstructorSignature(signature)\n  if (!match)\n    throw new InvalidSignatureError({ signature, type: 'constructor' })\n\n  const params = splitParameters(match.parameters)\n  const abiParameters = []\n  const length = params.length\n  for (let i = 0; i < length; i++)\n    abiParameters.push(\n      parseAbiParameter(params[i]!, { structs, type: 'constructor' }),\n    )\n  return {\n    type: 'constructor',\n    stateMutability: match.stateMutability ?? 'nonpayable',\n    inputs: abiParameters,\n  }\n}\n\nexport function parseFallbackSignature(signature: string) {\n  const match = execFallbackSignature(signature)\n  if (!match) throw new InvalidSignatureError({ signature, type: 'fallback' })\n\n  return {\n    type: 'fallback',\n    stateMutability: match.stateMutability ?? 'nonpayable',\n  }\n}\n\nconst abiParameterWithoutTupleRegex =\n  /^(?<type>[a-zA-Z$_][a-zA-Z0-9$_]*(?:\\spayable)?)(?<array>(?:\\[\\d*?\\])+?)?(?:\\s(?<modifier>calldata|indexed|memory|storage{1}))?(?:\\s(?<name>[a-zA-Z$_][a-zA-Z0-9$_]*))?$/\nconst abiParameterWithTupleRegex =\n  /^\\((?<type>.+?)\\)(?<array>(?:\\[\\d*?\\])+?)?(?:\\s(?<modifier>calldata|indexed|memory|storage{1}))?(?:\\s(?<name>[a-zA-Z$_][a-zA-Z0-9$_]*))?$/\nconst dynamicIntegerRegex = /^u?int$/\n\ntype ParseOptions = {\n  modifiers?: Set<Modifier>\n  structs?: StructLookup\n  type?: AbiItemType | 'struct'\n}\n\nexport function parseAbiParameter(param: string, options?: ParseOptions) {\n  // optional namespace cache by `type`\n  const parameterCacheKey = getParameterCacheKey(\n    param,\n    options?.type,\n    options?.structs,\n  )\n  if (parameterCache.has(parameterCacheKey))\n    return parameterCache.get(parameterCacheKey)!\n\n  const isTuple = isTupleRegex.test(param)\n  const match = execTyped<{\n    array?: string\n    modifier?: Modifier\n    name?: string\n    type: string\n  }>(\n    isTuple ? abiParameterWithTupleRegex : abiParameterWithoutTupleRegex,\n    param,\n  )\n  if (!match) throw new InvalidParameterError({ param })\n\n  if (match.name && isSolidityKeyword(match.name))\n    throw new SolidityProtectedKeywordError({ param, name: match.name })\n\n  const name = match.name ? { name: match.name } : {}\n  const indexed = match.modifier === 'indexed' ? { indexed: true } : {}\n  const structs = options?.structs ?? {}\n  let type: string\n  let components = {}\n  if (isTuple) {\n    type = 'tuple'\n    const params = splitParameters(match.type)\n    const components_ = []\n    const length = params.length\n    for (let i = 0; i < length; i++) {\n      // remove `modifiers` from `options` to prevent from being added to tuple components\n      components_.push(parseAbiParameter(params[i]!, { structs }))\n    }\n    components = { components: components_ }\n  } else if (match.type in structs) {\n    type = 'tuple'\n    components = { components: structs[match.type] }\n  } else if (dynamicIntegerRegex.test(match.type)) {\n    type = `${match.type}256`\n  } else if (match.type === 'address payable') {\n    type = 'address'\n  } else {\n    type = match.type\n    if (!(options?.type === 'struct') && !isSolidityType(type))\n      throw new UnknownSolidityTypeError({ type })\n  }\n\n  if (match.modifier) {\n    // Check if modifier exists, but is not allowed (e.g. `indexed` in `functionModifiers`)\n    if (!options?.modifiers?.has?.(match.modifier))\n      throw new InvalidModifierError({\n        param,\n        type: options?.type,\n        modifier: match.modifier,\n      })\n\n    // Check if resolved `type` is valid if there is a function modifier\n    if (\n      functionModifiers.has(match.modifier as FunctionModifier) &&\n      !isValidDataLocation(type, !!match.array)\n    )\n      throw new InvalidFunctionModifierError({\n        param,\n        type: options?.type,\n        modifier: match.modifier,\n      })\n  }\n\n  const abiParameter = {\n    type: `${type}${match.array ?? ''}`,\n    ...name,\n    ...indexed,\n    ...components,\n  }\n  parameterCache.set(parameterCacheKey, abiParameter)\n  return abiParameter\n}\n\n// s/o latika for this\nexport function splitParameters(\n  params: string,\n  result: string[] = [],\n  current = '',\n  depth = 0,\n): readonly string[] {\n  const length = params.trim().length\n  // biome-ignore lint/correctness/noUnreachable: recursive\n  for (let i = 0; i < length; i++) {\n    const char = params[i]\n    const tail = params.slice(i + 1)\n    switch (char) {\n      case ',':\n        return depth === 0\n          ? splitParameters(tail, [...result, current.trim()])\n          : splitParameters(tail, result, `${current}${char}`, depth)\n      case '(':\n        return splitParameters(tail, result, `${current}${char}`, depth + 1)\n      case ')':\n        return splitParameters(tail, result, `${current}${char}`, depth - 1)\n      default:\n        return splitParameters(tail, result, `${current}${char}`, depth)\n    }\n  }\n\n  if (current === '') return result\n  if (depth !== 0) throw new InvalidParenthesisError({ current, depth })\n\n  result.push(current.trim())\n  return result\n}\n\nexport function isSolidityType(\n  type: string,\n): type is Exclude<AbiType, SolidityTuple | SolidityArray> {\n  return (\n    type === 'address' ||\n    type === 'bool' ||\n    type === 'function' ||\n    type === 'string' ||\n    bytesRegex.test(type) ||\n    integerRegex.test(type)\n  )\n}\n\nconst protectedKeywordsRegex =\n  /^(?:after|alias|anonymous|apply|auto|byte|calldata|case|catch|constant|copyof|default|defined|error|event|external|false|final|function|immutable|implements|in|indexed|inline|internal|let|mapping|match|memory|mutable|null|of|override|partial|private|promise|public|pure|reference|relocatable|return|returns|sizeof|static|storage|struct|super|supports|switch|this|true|try|typedef|typeof|var|view|virtual)$/\n\n/** @internal */\nexport function isSolidityKeyword(name: string) {\n  return (\n    name === 'address' ||\n    name === 'bool' ||\n    name === 'function' ||\n    name === 'string' ||\n    name === 'tuple' ||\n    bytesRegex.test(name) ||\n    integerRegex.test(name) ||\n    protectedKeywordsRegex.test(name)\n  )\n}\n\n/** @internal */\nexport function isValidDataLocation(\n  type: string,\n  isArray: boolean,\n): type is Exclude<\n  AbiType,\n  SolidityString | Extract<SolidityBytes, 'bytes'> | SolidityArray\n> {\n  return isArray || type === 'bytes' || type === 'string' || type === 'tuple'\n}\n", "import type { AbiParameter } from '../../abi.js'\nimport { execTyped, isTupleRegex } from '../../regex.js'\nimport { UnknownTypeError } from '../errors/abiItem.js'\nimport { InvalidAbiTypeParameterError } from '../errors/abiParameter.js'\nimport {\n  InvalidSignatureError,\n  InvalidStructSignatureError,\n} from '../errors/signature.js'\nimport { CircularReferenceError } from '../errors/struct.js'\nimport type { StructLookup } from '../types/structs.js'\nimport { execStructSignature, isStructSignature } from './signatures.js'\nimport { isSolidityType, parseAbiParameter } from './utils.js'\n\nexport function parseStructs(signatures: readonly string[]) {\n  // Create \"shallow\" version of each struct (and filter out non-structs or invalid structs)\n  const shallowStructs: StructLookup = {}\n  const signaturesLength = signatures.length\n  for (let i = 0; i < signaturesLength; i++) {\n    const signature = signatures[i]!\n    if (!isStructSignature(signature)) continue\n\n    const match = execStructSignature(signature)\n    if (!match) throw new InvalidSignatureError({ signature, type: 'struct' })\n\n    const properties = match.properties.split(';')\n\n    const components: AbiParameter[] = []\n    const propertiesLength = properties.length\n    for (let k = 0; k < propertiesLength; k++) {\n      const property = properties[k]!\n      const trimmed = property.trim()\n      if (!trimmed) continue\n      const abiParameter = parseAbiParameter(trimmed, {\n        type: 'struct',\n      })\n      components.push(abiParameter)\n    }\n\n    if (!components.length) throw new InvalidStructSignatureError({ signature })\n    shallowStructs[match.name] = components\n  }\n\n  // Resolve nested structs inside each parameter\n  const resolvedStructs: StructLookup = {}\n  const entries = Object.entries(shallowStructs)\n  const entriesLength = entries.length\n  for (let i = 0; i < entriesLength; i++) {\n    const [name, parameters] = entries[i]!\n    resolvedStructs[name] = resolveStructs(parameters, shallowStructs)\n  }\n\n  return resolvedStructs\n}\n\nconst typeWithoutTupleRegex =\n  /^(?<type>[a-zA-Z$_][a-zA-Z0-9$_]*)(?<array>(?:\\[\\d*?\\])+?)?$/\n\nfunction resolveStructs(\n  abiParameters: readonly (AbiParameter & { indexed?: true })[] = [],\n  structs: StructLookup = {},\n  ancestors = new Set<string>(),\n) {\n  const components: AbiParameter[] = []\n  const length = abiParameters.length\n  for (let i = 0; i < length; i++) {\n    const abiParameter = abiParameters[i]!\n    const isTuple = isTupleRegex.test(abiParameter.type)\n    if (isTuple) components.push(abiParameter)\n    else {\n      const match = execTyped<{ array?: string; type: string }>(\n        typeWithoutTupleRegex,\n        abiParameter.type,\n      )\n      if (!match?.type) throw new InvalidAbiTypeParameterError({ abiParameter })\n\n      const { array, type } = match\n      if (type in structs) {\n        if (ancestors.has(type)) throw new CircularReferenceError({ type })\n\n        components.push({\n          ...abiParameter,\n          type: `tuple${array ?? ''}`,\n          components: resolveStructs(\n            structs[type],\n            structs,\n            new Set([...ancestors, type]),\n          ),\n        })\n      } else {\n        if (isSolidityType(type)) components.push(abiParameter)\n        else throw new UnknownTypeError({ type })\n      }\n    }\n  }\n\n  return components\n}\n", "import type { Abi } from '../abi.js'\nimport type { Error, Filter } from '../types.js'\nimport { isStructSignature } from './runtime/signatures.js'\nimport { parseStructs } from './runtime/structs.js'\nimport { parseSignature } from './runtime/utils.js'\nimport type { Signatures } from './types/signatures.js'\nimport type { ParseStructs } from './types/structs.js'\nimport type { ParseSignature } from './types/utils.js'\n\n/**\n * Parses human-readable ABI into JSON {@link Abi}\n *\n * @param signatures - Human-readable ABI\n * @returns Parsed {@link Abi}\n *\n * @example\n * type Result = ParseAbi<\n *   // ^? type Result = readonly [{ name: \"balanceOf\"; type: \"function\"; stateMutability:...\n *   [\n *     'function balanceOf(address owner) view returns (uint256)',\n *     'event Transfer(address indexed from, address indexed to, uint256 amount)',\n *   ]\n * >\n */\nexport type ParseAbi<signatures extends readonly string[]> =\n  string[] extends signatures\n    ? Abi // If `T` was not able to be inferred (e.g. just `string[]`), return `Abi`\n    : signatures extends readonly string[]\n      ? signatures extends Signatures<signatures> // Validate signatures\n        ? ParseStructs<signatures> extends infer structs\n          ? {\n              [key in keyof signatures]: signatures[key] extends string\n                ? ParseSignature<signatures[key], structs>\n                : never\n            } extends infer mapped extends readonly unknown[]\n            ? Filter<mapped, never> extends infer result\n              ? result extends readonly []\n                ? never\n                : result\n              : never\n            : never\n          : never\n        : never\n      : never\n\n/**\n * Parses human-readable ABI into JSON {@link Abi}\n *\n * @param signatures - Human-Readable ABI\n * @returns Parsed {@link Abi}\n *\n * @example\n * const abi = parseAbi([\n *   //  ^? const abi: readonly [{ name: \"balanceOf\"; type: \"function\"; stateMutability:...\n *   'function balanceOf(address owner) view returns (uint256)',\n *   'event Transfer(address indexed from, address indexed to, uint256 amount)',\n * ])\n */\nexport function parseAbi<const signatures extends readonly string[]>(\n  signatures: signatures['length'] extends 0\n    ? Error<'At least one signature required'>\n    : Signatures<signatures> extends signatures\n      ? signatures\n      : Signatures<signatures>,\n): ParseAbi<signatures> {\n  const structs = parseStructs(signatures as readonly string[])\n  const abi = []\n  const length = signatures.length as number\n  for (let i = 0; i < length; i++) {\n    const signature = (signatures as readonly string[])[i]!\n    if (isStructSignature(signature)) continue\n    abi.push(parseSignature(signature, structs))\n  }\n  return abi as unknown as ParseAbi<signatures>\n}\n", "import type { Abi } from '../abi.js'\nimport type { Narrow } from '../narrow.js'\nimport type { Error, Filter } from '../types.js'\nimport { InvalidAbiItemError } from './errors/abiItem.js'\nimport { isStructSignature } from './runtime/signatures.js'\nimport { parseStructs } from './runtime/structs.js'\nimport { parseSignature } from './runtime/utils.js'\nimport type { Signature, Signatures } from './types/signatures.js'\nimport type { ParseStructs } from './types/structs.js'\nimport type { ParseSignature } from './types/utils.js'\n\n/**\n * Parses human-readable ABI item (e.g. error, event, function) into {@link Abi} item\n *\n * @param signature - Human-readable ABI item\n * @returns Parsed {@link Abi} item\n *\n * @example\n * type Result = ParseAbiItem<'function balanceOf(address owner) view returns (uint256)'>\n * //   ^? type Result = { name: \"balanceOf\"; type: \"function\"; stateMutability: \"view\";...\n *\n * @example\n * type Result = ParseAbiItem<\n *   // ^? type Result = { name: \"foo\"; type: \"function\"; stateMutability: \"view\"; inputs:...\n *   ['function foo(Baz bar) view returns (string)', 'struct Baz { string name; }']\n * >\n */\nexport type ParseAbiItem<\n  signature extends string | readonly string[] | readonly unknown[],\n> =\n  | (signature extends string\n      ? string extends signature\n        ? Abi[number]\n        : signature extends Signature<signature> // Validate signature\n          ? ParseSignature<signature>\n          : never\n      : never)\n  | (signature extends readonly string[]\n      ? string[] extends signature\n        ? Abi[number] // Return generic Abi item since type was no inferrable\n        : signature extends Signatures<signature> // Validate signature\n          ? ParseStructs<signature> extends infer structs\n            ? {\n                [key in keyof signature]: ParseSignature<\n                  signature[key] extends string ? signature[key] : never,\n                  structs\n                >\n              } extends infer mapped extends readonly unknown[]\n              ? // Filter out `never` since those are structs\n                Filter<mapped, never>[0] extends infer result\n                ? result extends undefined // convert `undefined` to `never` (e.g. `ParseAbiItem<['struct Foo { string name; }']>`)\n                  ? never\n                  : result\n                : never\n              : never\n            : never\n          : never\n      : never)\n\n/**\n * Parses human-readable ABI item (e.g. error, event, function) into {@link Abi} item\n *\n * @param signature - Human-readable ABI item\n * @returns Parsed {@link Abi} item\n *\n * @example\n * const abiItem = parseAbiItem('function balanceOf(address owner) view returns (uint256)')\n * //    ^? const abiItem: { name: \"balanceOf\"; type: \"function\"; stateMutability: \"view\";...\n *\n * @example\n * const abiItem = parseAbiItem([\n *   //  ^? const abiItem: { name: \"foo\"; type: \"function\"; stateMutability: \"view\"; inputs:...\n *   'function foo(Baz bar) view returns (string)',\n *   'struct Baz { string name; }',\n * ])\n */\nexport function parseAbiItem<\n  signature extends string | readonly string[] | readonly unknown[],\n>(\n  signature: Narrow<signature> &\n    (\n      | (signature extends string\n          ? string extends signature\n            ? unknown\n            : Signature<signature>\n          : never)\n      | (signature extends readonly string[]\n          ? signature extends readonly [] // empty array\n            ? Error<'At least one signature required.'>\n            : string[] extends signature\n              ? unknown\n              : Signatures<signature>\n          : never)\n    ),\n): ParseAbiItem<signature> {\n  let abiItem: ParseAbiItem<signature> | undefined\n  if (typeof signature === 'string')\n    abiItem = parseSignature(signature) as ParseAbiItem<signature>\n  else {\n    const structs = parseStructs(signature as readonly string[])\n    const length = signature.length as number\n    for (let i = 0; i < length; i++) {\n      const signature_ = (signature as readonly string[])[i]!\n      if (isStructSignature(signature_)) continue\n      abiItem = parseSignature(signature_, structs) as ParseAbiItem<signature>\n      break\n    }\n  }\n\n  if (!abiItem) throw new InvalidAbiItemError({ signature })\n  return abiItem as ParseAbiItem<signature>\n}\n", "import type { AbiParameter } from '../abi.js'\nimport type { Narrow } from '../narrow.js'\nimport type { Error, Filter } from '../types.js'\nimport { InvalidAbiParameterError } from './errors/abiParameter.js'\nimport { isStructSignature, modifiers } from './runtime/signatures.js'\nimport { parseStructs } from './runtime/structs.js'\nimport { parseAbiParameter as parseAbiParameter_ } from './runtime/utils.js'\nimport type { IsStructSignature, Modifier } from './types/signatures.js'\nimport type { ParseStructs } from './types/structs.js'\nimport type { ParseAbiParameter as ParseAbiParameter_ } from './types/utils.js'\n\n/**\n * Parses human-readable ABI parameter into {@link AbiParameter}\n *\n * @param param - Human-readable ABI parameter\n * @returns Parsed {@link AbiParameter}\n *\n * @example\n * type Result = ParseAbiParameter<'address from'>\n * //   ^? type Result = { type: \"address\"; name: \"from\"; }\n *\n * @example\n * type Result = ParseAbiParameter<\n *   // ^? type Result = { type: \"tuple\"; components: [{ type: \"string\"; name:...\n *   ['Baz bar', 'struct Baz { string name; }']\n * >\n */\nexport type ParseAbiParameter<\n  param extends string | readonly string[] | readonly unknown[],\n> =\n  | (param extends string\n      ? param extends ''\n        ? never\n        : string extends param\n          ? AbiParameter\n          : ParseAbiParameter_<param, { modifier: Modifier }>\n      : never)\n  | (param extends readonly string[]\n      ? string[] extends param\n        ? AbiParameter // Return generic AbiParameter item since type was no inferrable\n        : ParseStructs<param> extends infer structs\n          ? {\n              [key in keyof param]: param[key] extends string\n                ? IsStructSignature<param[key]> extends true\n                  ? never\n                  : ParseAbiParameter_<\n                      param[key],\n                      { modifier: Modifier; structs: structs }\n                    >\n                : never\n            } extends infer mapped extends readonly unknown[]\n            ? Filter<mapped, never>[0] extends infer result\n              ? result extends undefined\n                ? never\n                : result\n              : never\n            : never\n          : never\n      : never)\n\n/**\n * Parses human-readable ABI parameter into {@link AbiParameter}\n *\n * @param param - Human-readable ABI parameter\n * @returns Parsed {@link AbiParameter}\n *\n * @example\n * const abiParameter = parseAbiParameter('address from')\n * //    ^? const abiParameter: { type: \"address\"; name: \"from\"; }\n *\n * @example\n * const abiParameter = parseAbiParameter([\n *   //  ^? const abiParameter: { type: \"tuple\"; components: [{ type: \"string\"; name:...\n *   'Baz bar',\n *   'struct Baz { string name; }',\n * ])\n */\nexport function parseAbiParameter<\n  param extends string | readonly string[] | readonly unknown[],\n>(\n  param: Narrow<param> &\n    (\n      | (param extends string\n          ? param extends ''\n            ? Error<'Empty string is not allowed.'>\n            : unknown\n          : never)\n      | (param extends readonly string[]\n          ? param extends readonly [] // empty array\n            ? Error<'At least one parameter required.'>\n            : string[] extends param\n              ? unknown\n              : unknown // TODO: Validate param string\n          : never)\n    ),\n): ParseAbiParameter<param> {\n  let abiParameter: AbiParameter | undefined\n  if (typeof param === 'string')\n    abiParameter = parseAbiParameter_(param, {\n      modifiers,\n    }) as ParseAbiParameter<param>\n  else {\n    const structs = parseStructs(param as readonly string[])\n    const length = param.length as number\n    for (let i = 0; i < length; i++) {\n      const signature = (param as readonly string[])[i]!\n      if (isStructSignature(signature)) continue\n      abiParameter = parseAbiParameter_(signature, { modifiers, structs })\n      break\n    }\n  }\n\n  if (!abiParameter) throw new InvalidAbiParameterError({ param })\n\n  return abiParameter as ParseAbiParameter<param>\n}\n", "import type { AbiParameter } from '../abi.js'\nimport type { Narrow } from '../narrow.js'\nimport type { Error, Filter } from '../types.js'\nimport { InvalidAbiParametersError } from './errors/abiParameter.js'\nimport { isStructSignature, modifiers } from './runtime/signatures.js'\nimport { parseStructs } from './runtime/structs.js'\nimport { splitParameters } from './runtime/utils.js'\nimport { parseAbiParameter as parseAbiParameter_ } from './runtime/utils.js'\nimport type { IsStructSignature, Modifier } from './types/signatures.js'\nimport type { ParseStructs } from './types/structs.js'\nimport type { SplitParameters } from './types/utils.js'\nimport type { ParseAbiParameters as ParseAbiParameters_ } from './types/utils.js'\n\n/**\n * Parses human-readable ABI parameters into {@link AbiParameter}s\n *\n * @param params - Human-readable ABI parameters\n * @returns Parsed {@link AbiParameter}s\n *\n * @example\n * type Result = ParseAbiParameters('address from, address to, uint256 amount')\n * //   ^? type Result: [{ type: \"address\"; name: \"from\"; }, { type: \"address\";...\n *\n * @example\n * type Result = ParseAbiParameters<\n *   // ^? type Result: [{ type: \"tuple\"; components: [{ type: \"string\"; name:...\n *   ['Baz bar', 'struct Baz { string name; }']\n * >\n */\nexport type ParseAbiParameters<\n  params extends string | readonly string[] | readonly unknown[],\n> =\n  | (params extends string\n      ? params extends ''\n        ? never\n        : string extends params\n          ? readonly AbiParameter[]\n          : ParseAbiParameters_<SplitParameters<params>, { modifier: Modifier }>\n      : never)\n  | (params extends readonly string[]\n      ? string[] extends params\n        ? AbiParameter // Return generic AbiParameter item since type was no inferrable\n        : ParseStructs<params> extends infer structs\n          ? {\n              [key in keyof params]: params[key] extends string\n                ? IsStructSignature<params[key]> extends true\n                  ? never\n                  : ParseAbiParameters_<\n                      SplitParameters<params[key]>,\n                      { modifier: Modifier; structs: structs }\n                    >\n                : never\n            } extends infer mapped extends readonly unknown[]\n            ? Filter<mapped, never> extends readonly [...infer content]\n              ? content['length'] extends 0\n                ? never\n                : DeepFlatten<content>\n              : never\n            : never\n          : never\n      : never)\n\n/**\n * Flatten all members of {@link T}\n *\n * @param T - List of items to flatten\n * @param Acc - The accumulator used while recursing\n * @returns The flattened array\n *\n * @example\n * type Result = DeepFlatten<[['a', 'b'], [['c']]]>\n * //   ^? type Result = ['a', 'b', 'c']\n */\ntype DeepFlatten<\n  T extends readonly unknown[],\n  Acc extends readonly unknown[] = readonly [],\n> = T extends readonly [infer head, ...infer tail]\n  ? tail extends undefined\n    ? never\n    : head extends readonly unknown[]\n      ? DeepFlatten<tail, readonly [...Acc, ...DeepFlatten<head>]>\n      : DeepFlatten<tail, readonly [...Acc, head]>\n  : Acc\n\n/**\n * Parses human-readable ABI parameters into {@link AbiParameter}s\n *\n * @param params - Human-readable ABI parameters\n * @returns Parsed {@link AbiParameter}s\n *\n * @example\n * const abiParameters = parseAbiParameters('address from, address to, uint256 amount')\n * //    ^? const abiParameters: [{ type: \"address\"; name: \"from\"; }, { type: \"address\";...\n *\n * @example\n * const abiParameters = parseAbiParameters([\n *   //  ^? const abiParameters: [{ type: \"tuple\"; components: [{ type: \"string\"; name:...\n *   'Baz bar',\n *   'struct Baz { string name; }',\n * ])\n */\nexport function parseAbiParameters<\n  params extends string | readonly string[] | readonly unknown[],\n>(\n  params: Narrow<params> &\n    (\n      | (params extends string\n          ? params extends ''\n            ? Error<'Empty string is not allowed.'>\n            : unknown\n          : never)\n      | (params extends readonly string[]\n          ? params extends readonly [] // empty array\n            ? Error<'At least one parameter required.'>\n            : string[] extends params\n              ? unknown\n              : unknown // TODO: Validate param string\n          : never)\n    ),\n): ParseAbiParameters<params> {\n  const abiParameters: AbiParameter[] = []\n  if (typeof params === 'string') {\n    const parameters = splitParameters(params)\n    const length = parameters.length\n    for (let i = 0; i < length; i++) {\n      abiParameters.push(parseAbiParameter_(parameters[i]!, { modifiers }))\n    }\n  } else {\n    const structs = parseStructs(params as readonly string[])\n    const length = params.length as number\n    for (let i = 0; i < length; i++) {\n      const signature = (params as readonly string[])[i]!\n      if (isStructSignature(signature)) continue\n      const parameters = splitParameters(signature)\n      const length = parameters.length\n      for (let k = 0; k < length; k++) {\n        abiParameters.push(\n          parseAbiParameter_(parameters[k]!, { modifiers, structs }),\n        )\n      }\n    }\n  }\n\n  if (abiParameters.length === 0)\n    throw new InvalidAbiParametersError({ params })\n\n  return abiParameters as ParseAbiParameters<params>\n}\n", "export type {\n  Abi,\n  AbiConstructor,\n  AbiError,\n  AbiEvent,\n  AbiEventParameter,\n  AbiFallback,\n  AbiFunction,\n  AbiInternalType,\n  AbiItemType,\n  AbiParameter,\n  AbiParameterKind,\n  AbiReceive,\n  AbiStateMutability,\n  AbiType,\n  Address,\n  SolidityAddress,\n  SolidityArray,\n  SolidityArrayWithoutTuple,\n  SolidityArrayWithTuple,\n  SolidityBool,\n  SolidityBytes,\n  SolidityFixedArrayRange,\n  SolidityFixedArraySizeLookup,\n  SolidityFunction,\n  SolidityInt,\n  SolidityString,\n  SolidityTuple,\n  TypedData,\n  TypedDataDomain,\n  TypedDataParameter,\n  TypedDataType,\n} from '../abi.js'\n\n// biome-ignore lint/performance/noBarrelFile: <explanation>\nexport { BaseError } from '../errors.js'\n\nexport type { Narrow } from '../narrow.js'\nexport { narrow } from '../narrow.js'\n\nexport type {\n  Register,\n  DefaultRegister,\n  ResolvedRegister,\n} from '../register.js'\n\nexport type {\n  AbiParameterToPrimitiveType,\n  AbiParametersToPrimitiveTypes,\n  AbiTypeToPrimitiveType,\n  ExtractAbiError,\n  ExtractAbiErrorNames,\n  ExtractAbiErrors,\n  ExtractAbiEvent,\n  ExtractAbiEventNames,\n  ExtractAbiEvents,\n  ExtractAbiFunction,\n  ExtractAbiFunctionNames,\n  ExtractAbiFunctions,\n  IsAbi,\n  IsTypedData,\n  TypedDataToPrimitiveTypes,\n} from '../utils.js'\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n// Human-Readable\n\nexport {\n  formatAbi,\n  type FormatAbi,\n} from '../human-readable/formatAbi.js'\n\nexport {\n  formatAbiItem,\n  type FormatAbiItem,\n} from '../human-readable/formatAbiItem.js'\n\nexport {\n  formatAbiParameter,\n  type FormatAbiParameter,\n} from '../human-readable/formatAbiParameter.js'\n\nexport {\n  formatAbiParameters,\n  type FormatAbiParameters,\n} from '../human-readable/formatAbiParameters.js'\n\nexport { parseAbi, type ParseAbi } from '../human-readable/parseAbi.js'\n\nexport {\n  parseAbiItem,\n  type ParseAbiItem,\n} from '../human-readable/parseAbiItem.js'\n\nexport {\n  parseAbiParameter,\n  type ParseAbiParameter,\n} from '../human-readable/parseAbiParameter.js'\n\nexport {\n  parseAbiParameters,\n  type ParseAbiParameters,\n} from '../human-readable/parseAbiParameters.js'\n\nexport {\n  UnknownTypeError,\n  InvalidAbiItemError,\n  UnknownSolidityTypeError,\n} from '../human-readable/errors/abiItem.js'\n\nexport {\n  InvalidAbiTypeParameterError,\n  InvalidFunctionModifierError,\n  InvalidModifierError,\n  SolidityProtectedKeywordError,\n  InvalidParameterError,\n  InvalidAbiParametersError,\n  InvalidAbiParameterError,\n} from '../human-readable/errors/abiParameter.js'\n\nexport {\n  InvalidStructSignatureError,\n  InvalidSignatureError,\n  UnknownSignatureError,\n} from '../human-readable/errors/signature.js'\n\nexport { InvalidParenthesisError } from '../human-readable/errors/splitParameters.js'\n\nexport { CircularReferenceError } from '../human-readable/errors/struct.js'\n", "import type { Client } from '../clients/createClient.js'\nimport type { PublicActions } from '../clients/decorators/public.js'\nimport type { WalletActions } from '../clients/decorators/wallet.js'\nimport type { Transport } from '../clients/transports/createTransport.js'\nimport type { Account } from '../types/account.js'\nimport type { Chain } from '../types/chain.js'\nimport type { RpcSchema } from '../types/eip1193.js'\n\n/**\n * Retrieves and returns an action from the client (if exists), and falls\n * back to the tree-shakable action.\n *\n * Useful for extracting overridden actions from a client (ie. if a consumer\n * wants to override the `sendTransaction` implementation).\n */\nexport function getAction<\n  transport extends Transport,\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  rpcSchema extends RpcSchema | undefined,\n  extended extends { [key: string]: unknown },\n  client extends Client<transport, chain, account, rpcSchema, extended>,\n  parameters,\n  returnType,\n>(\n  client: client,\n  actionFn: (_: any, parameters: parameters) => returnType,\n  // Some minifiers drop `Function.prototype.name`, or replace it with short letters,\n  // meaning that `actionFn.name` will not always work. For that case, the consumer\n  // needs to pass the name explicitly.\n  name: keyof PublicActions | keyof WalletActions | (string & {}),\n): (parameters: parameters) => returnType {\n  const action_implicit = client[actionFn.name]\n  if (typeof action_implicit === 'function')\n    return action_implicit as (params: parameters) => returnType\n\n  const action_explicit = client[name]\n  if (typeof action_explicit === 'function')\n    return action_explicit as (params: parameters) => returnType\n\n  return (params) => actionFn(client, params)\n}\n", "import type { AbiParameter } from 'abitype'\n\nimport {\n  InvalidDefinitionTypeError,\n  type InvalidDefinitionTypeErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { AbiItem } from '../../types/contract.js'\n\nexport type FormatAbiItemErrorType =\n  | FormatAbiParamsErrorType\n  | InvalidDefinitionTypeErrorType\n  | ErrorType\n\nexport function formatAbiItem(\n  abiItem: AbiItem,\n  { includeName = false }: { includeName?: boolean | undefined } = {},\n) {\n  if (\n    abiItem.type !== 'function' &&\n    abiItem.type !== 'event' &&\n    abiItem.type !== 'error'\n  )\n    throw new InvalidDefinitionTypeError(abiItem.type)\n\n  return `${abiItem.name}(${formatAbiParams(abiItem.inputs, { includeName })})`\n}\n\nexport type FormatAbiParamsErrorType = ErrorType\n\nexport function formatAbiParams(\n  params: readonly AbiParameter[] | undefined,\n  { includeName = false }: { includeName?: boolean | undefined } = {},\n): string {\n  if (!params) return ''\n  return params\n    .map((param) => formatAbiParam(param, { includeName }))\n    .join(includeName ? ', ' : ',')\n}\n\nexport type FormatAbiParamErrorType = ErrorType\n\nfunction formatAbiParam(\n  param: AbiParameter,\n  { includeName }: { includeName: boolean },\n): string {\n  if (param.type.startsWith('tuple')) {\n    return `(${formatAbiParams(\n      (param as unknown as { components: AbiParameter[] }).components,\n      { includeName },\n    )})${param.type.slice('tuple'.length)}`\n  }\n  return param.type + (includeName && param.name ? ` ${param.name}` : '')\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\n\nexport type IsHexErrorType = ErrorType\n\nexport function isHex(\n  value: unknown,\n  { strict = true }: { strict?: boolean | undefined } = {},\n): value is Hex {\n  if (!value) return false\n  if (typeof value !== 'string') return false\n  return strict ? /^0x[0-9a-fA-F]*$/.test(value) : value.startsWith('0x')\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\nimport { type IsHexErrorType, isHex } from './isHex.js'\n\nexport type SizeErrorType = IsHexErrorType | ErrorType\n\n/**\n * @description Retrieves the size of the value (in bytes).\n *\n * @param value The value (hex or byte array) to retrieve the size of.\n * @returns The size of the value (in bytes).\n */\nexport function size(value: Hex | ByteArray) {\n  if (isHex(value, { strict: false })) return Math.ceil((value.length - 2) / 2)\n  return value.length\n}\n", "export const version = '2.47.16'\n", "import { version } from './version.js'\n\ntype ErrorConfig = {\n  getDocsUrl?: ((args: BaseErrorParameters) => string | undefined) | undefined\n  version?: string | undefined\n}\n\nlet errorConfig: ErrorConfig = {\n  getDocsUrl: ({\n    docsBaseUrl,\n    docsPath = '',\n    docsSlug,\n  }: BaseErrorParameters) =>\n    docsPath\n      ? `${docsBaseUrl ?? 'https://viem.sh'}${docsPath}${\n          docsSlug ? `#${docsSlug}` : ''\n        }`\n      : undefined,\n  version: `viem@${version}`,\n}\n\nexport function setErrorConfig(config: ErrorConfig) {\n  errorConfig = config\n}\n\ntype BaseErrorParameters = {\n  cause?: BaseError | Error | undefined\n  details?: string | undefined\n  docsBaseUrl?: string | undefined\n  docsPath?: string | undefined\n  docsSlug?: string | undefined\n  metaMessages?: string[] | undefined\n  name?: string | undefined\n}\n\nexport type BaseErrorType = BaseError & { name: 'BaseError' }\nexport class BaseError extends Error {\n  details: string\n  docsPath?: string | undefined\n  metaMessages?: string[] | undefined\n  shortMessage: string\n  version: string\n\n  override name = 'BaseError'\n\n  constructor(shortMessage: string, args: BaseErrorParameters = {}) {\n    const details = (() => {\n      if (args.cause instanceof BaseError) return args.cause.details\n      if (args.cause?.message) return args.cause.message\n      return args.details!\n    })()\n    const docsPath = (() => {\n      if (args.cause instanceof BaseError)\n        return args.cause.docsPath || args.docsPath\n      return args.docsPath\n    })()\n    const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath })\n\n    const message = [\n      shortMessage || 'An error occurred.',\n      '',\n      ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n      ...(docsUrl ? [`Docs: ${docsUrl}`] : []),\n      ...(details ? [`Details: ${details}`] : []),\n      ...(errorConfig.version ? [`Version: ${errorConfig.version}`] : []),\n    ].join('\\n')\n\n    super(message, args.cause ? { cause: args.cause } : undefined)\n\n    this.details = details\n    this.docsPath = docsPath\n    this.metaMessages = args.metaMessages\n    this.name = args.name ?? this.name\n    this.shortMessage = shortMessage\n    this.version = version\n  }\n\n  walk(): Error\n  walk(fn: (err: unknown) => boolean): Error | null\n  walk(fn?: any): any {\n    return walk(this, fn)\n  }\n}\n\nfunction walk(\n  err: unknown,\n  fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n  if (fn?.(err)) return err\n  if (\n    err &&\n    typeof err === 'object' &&\n    'cause' in err &&\n    err.cause !== undefined\n  )\n    return walk(err.cause, fn)\n  return fn ? null : err\n}\n", "import type { Abi, AbiEvent, AbiParameter } from 'abitype'\n\nimport type { Hex } from '../types/misc.js'\nimport { formatAbiItem, formatAbiParams } from '../utils/abi/formatAbiItem.js'\nimport { size } from '../utils/data/size.js'\n\nimport { BaseError } from './base.js'\n\nexport type AbiConstructorNotFoundErrorType = AbiConstructorNotFoundError & {\n  name: 'AbiConstructorNotFoundError'\n}\nexport class AbiConstructorNotFoundError extends BaseError {\n  constructor({ docsPath }: { docsPath: string }) {\n    super(\n      [\n        'A constructor was not found on the ABI.',\n        'Make sure you are using the correct ABI and that the constructor exists on it.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiConstructorNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiConstructorParamsNotFoundErrorType =\n  AbiConstructorParamsNotFoundError & {\n    name: 'AbiConstructorParamsNotFoundError'\n  }\n\nexport class AbiConstructorParamsNotFoundError extends BaseError {\n  constructor({ docsPath }: { docsPath: string }) {\n    super(\n      [\n        'Constructor arguments were provided (`args`), but a constructor parameters (`inputs`) were not found on the ABI.',\n        'Make sure you are using the correct ABI, and that the `inputs` attribute on the constructor exists.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiConstructorParamsNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiDecodingDataSizeInvalidErrorType =\n  AbiDecodingDataSizeInvalidError & {\n    name: 'AbiDecodingDataSizeInvalidError'\n  }\nexport class AbiDecodingDataSizeInvalidError extends BaseError {\n  constructor({ data, size }: { data: Hex; size: number }) {\n    super(\n      [\n        `Data size of ${size} bytes is invalid.`,\n        'Size must be in increments of 32 bytes (size % 32 === 0).',\n      ].join('\\n'),\n      {\n        metaMessages: [`Data: ${data} (${size} bytes)`],\n        name: 'AbiDecodingDataSizeInvalidError',\n      },\n    )\n  }\n}\n\nexport type AbiDecodingDataSizeTooSmallErrorType =\n  AbiDecodingDataSizeTooSmallError & {\n    name: 'AbiDecodingDataSizeTooSmallError'\n  }\nexport class AbiDecodingDataSizeTooSmallError extends BaseError {\n  data: Hex\n  params: readonly AbiParameter[]\n  size: number\n\n  constructor({\n    data,\n    params,\n    size,\n  }: { data: Hex; params: readonly AbiParameter[]; size: number }) {\n    super(\n      [`Data size of ${size} bytes is too small for given parameters.`].join(\n        '\\n',\n      ),\n      {\n        metaMessages: [\n          `Params: (${formatAbiParams(params, { includeName: true })})`,\n          `Data:   ${data} (${size} bytes)`,\n        ],\n        name: 'AbiDecodingDataSizeTooSmallError',\n      },\n    )\n\n    this.data = data\n    this.params = params\n    this.size = size\n  }\n}\n\nexport type AbiDecodingZeroDataErrorType = AbiDecodingZeroDataError & {\n  name: 'AbiDecodingZeroDataError'\n}\nexport class AbiDecodingZeroDataError extends BaseError {\n  constructor({ cause }: { cause?: BaseError | Error | undefined } = {}) {\n    super('Cannot decode zero data (\"0x\") with ABI parameters.', {\n      name: 'AbiDecodingZeroDataError',\n      cause,\n    })\n  }\n}\n\nexport type AbiEncodingArrayLengthMismatchErrorType =\n  AbiEncodingArrayLengthMismatchError & {\n    name: 'AbiEncodingArrayLengthMismatchError'\n  }\nexport class AbiEncodingArrayLengthMismatchError extends BaseError {\n  constructor({\n    expectedLength,\n    givenLength,\n    type,\n  }: { expectedLength: number; givenLength: number; type: string }) {\n    super(\n      [\n        `ABI encoding array length mismatch for type ${type}.`,\n        `Expected length: ${expectedLength}`,\n        `Given length: ${givenLength}`,\n      ].join('\\n'),\n      { name: 'AbiEncodingArrayLengthMismatchError' },\n    )\n  }\n}\n\nexport type AbiEncodingBytesSizeMismatchErrorType =\n  AbiEncodingBytesSizeMismatchError & {\n    name: 'AbiEncodingBytesSizeMismatchError'\n  }\nexport class AbiEncodingBytesSizeMismatchError extends BaseError {\n  constructor({ expectedSize, value }: { expectedSize: number; value: Hex }) {\n    super(\n      `Size of bytes \"${value}\" (bytes${size(\n        value,\n      )}) does not match expected size (bytes${expectedSize}).`,\n      { name: 'AbiEncodingBytesSizeMismatchError' },\n    )\n  }\n}\n\nexport type AbiEncodingLengthMismatchErrorType =\n  AbiEncodingLengthMismatchError & {\n    name: 'AbiEncodingLengthMismatchError'\n  }\nexport class AbiEncodingLengthMismatchError extends BaseError {\n  constructor({\n    expectedLength,\n    givenLength,\n  }: { expectedLength: number; givenLength: number }) {\n    super(\n      [\n        'ABI encoding params/values length mismatch.',\n        `Expected length (params): ${expectedLength}`,\n        `Given length (values): ${givenLength}`,\n      ].join('\\n'),\n      { name: 'AbiEncodingLengthMismatchError' },\n    )\n  }\n}\n\nexport type AbiErrorInputsNotFoundErrorType = AbiErrorInputsNotFoundError & {\n  name: 'AbiErrorInputsNotFoundError'\n}\nexport class AbiErrorInputsNotFoundError extends BaseError {\n  constructor(errorName: string, { docsPath }: { docsPath: string }) {\n    super(\n      [\n        `Arguments (\\`args\\`) were provided to \"${errorName}\", but \"${errorName}\" on the ABI does not contain any parameters (\\`inputs\\`).`,\n        'Cannot encode error result without knowing what the parameter types are.',\n        'Make sure you are using the correct ABI and that the inputs exist on it.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiErrorInputsNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiErrorNotFoundErrorType = AbiErrorNotFoundError & {\n  name: 'AbiErrorNotFoundError'\n}\nexport class AbiErrorNotFoundError extends BaseError {\n  constructor(\n    errorName?: string | undefined,\n    { docsPath }: { docsPath?: string | undefined } = {},\n  ) {\n    super(\n      [\n        `Error ${errorName ? `\"${errorName}\" ` : ''}not found on ABI.`,\n        'Make sure you are using the correct ABI and that the error exists on it.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiErrorNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiErrorSignatureNotFoundErrorType =\n  AbiErrorSignatureNotFoundError & {\n    name: 'AbiErrorSignatureNotFoundError'\n  }\nexport class AbiErrorSignatureNotFoundError extends BaseError {\n  signature: Hex\n\n  constructor(\n    signature: Hex,\n    {\n      docsPath,\n      cause,\n    }: { docsPath: string; cause?: BaseError | Error | undefined },\n  ) {\n    super(\n      [\n        `Encoded error signature \"${signature}\" not found on ABI.`,\n        'Make sure you are using the correct ABI and that the error exists on it.',\n        `You can look up the decoded signature here: https://4byte.sourcify.dev/?q=${signature}.`,\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiErrorSignatureNotFoundError',\n        cause,\n      },\n    )\n    this.signature = signature\n  }\n}\n\nexport type AbiEventSignatureEmptyTopicsErrorType =\n  AbiEventSignatureEmptyTopicsError & {\n    name: 'AbiEventSignatureEmptyTopicsError'\n  }\nexport class AbiEventSignatureEmptyTopicsError extends BaseError {\n  constructor({ docsPath }: { docsPath: string }) {\n    super('Cannot extract event signature from empty topics.', {\n      docsPath,\n      name: 'AbiEventSignatureEmptyTopicsError',\n    })\n  }\n}\n\nexport type AbiEventSignatureNotFoundErrorType =\n  AbiEventSignatureNotFoundError & {\n    name: 'AbiEventSignatureNotFoundError'\n  }\nexport class AbiEventSignatureNotFoundError extends BaseError {\n  constructor(signature: Hex, { docsPath }: { docsPath: string }) {\n    super(\n      [\n        `Encoded event signature \"${signature}\" not found on ABI.`,\n        'Make sure you are using the correct ABI and that the event exists on it.',\n        `You can look up the signature here: https://4byte.sourcify.dev/?q=${signature}.`,\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiEventSignatureNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiEventNotFoundErrorType = AbiEventNotFoundError & {\n  name: 'AbiEventNotFoundError'\n}\nexport class AbiEventNotFoundError extends BaseError {\n  constructor(\n    eventName?: string | undefined,\n    { docsPath }: { docsPath?: string | undefined } = {},\n  ) {\n    super(\n      [\n        `Event ${eventName ? `\"${eventName}\" ` : ''}not found on ABI.`,\n        'Make sure you are using the correct ABI and that the event exists on it.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiEventNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiFunctionNotFoundErrorType = AbiFunctionNotFoundError & {\n  name: 'AbiFunctionNotFoundError'\n}\nexport class AbiFunctionNotFoundError extends BaseError {\n  constructor(\n    functionName?: string | undefined,\n    { docsPath }: { docsPath?: string | undefined } = {},\n  ) {\n    super(\n      [\n        `Function ${functionName ? `\"${functionName}\" ` : ''}not found on ABI.`,\n        'Make sure you are using the correct ABI and that the function exists on it.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiFunctionNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiFunctionOutputsNotFoundErrorType =\n  AbiFunctionOutputsNotFoundError & {\n    name: 'AbiFunctionOutputsNotFoundError'\n  }\nexport class AbiFunctionOutputsNotFoundError extends BaseError {\n  constructor(functionName: string, { docsPath }: { docsPath: string }) {\n    super(\n      [\n        `Function \"${functionName}\" does not contain any \\`outputs\\` on ABI.`,\n        'Cannot decode function result without knowing what the parameter types are.',\n        'Make sure you are using the correct ABI and that the function exists on it.',\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiFunctionOutputsNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiFunctionSignatureNotFoundErrorType =\n  AbiFunctionSignatureNotFoundError & {\n    name: 'AbiFunctionSignatureNotFoundError'\n  }\nexport class AbiFunctionSignatureNotFoundError extends BaseError {\n  constructor(signature: Hex, { docsPath }: { docsPath: string }) {\n    super(\n      [\n        `Encoded function signature \"${signature}\" not found on ABI.`,\n        'Make sure you are using the correct ABI and that the function exists on it.',\n        `You can look up the signature here: https://4byte.sourcify.dev/?q=${signature}.`,\n      ].join('\\n'),\n      {\n        docsPath,\n        name: 'AbiFunctionSignatureNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AbiItemAmbiguityErrorType = AbiItemAmbiguityError & {\n  name: 'AbiItemAmbiguityError'\n}\nexport class AbiItemAmbiguityError extends BaseError {\n  constructor(\n    x: { abiItem: Abi[number]; type: string },\n    y: { abiItem: Abi[number]; type: string },\n  ) {\n    super('Found ambiguous types in overloaded ABI items.', {\n      metaMessages: [\n        `\\`${x.type}\\` in \\`${formatAbiItem(x.abiItem)}\\`, and`,\n        `\\`${y.type}\\` in \\`${formatAbiItem(y.abiItem)}\\``,\n        '',\n        'These types encode differently and cannot be distinguished at runtime.',\n        'Remove one of the ambiguous items in the ABI.',\n      ],\n      name: 'AbiItemAmbiguityError',\n    })\n  }\n}\n\nexport type BytesSizeMismatchErrorType = BytesSizeMismatchError & {\n  name: 'BytesSizeMismatchError'\n}\nexport class BytesSizeMismatchError extends BaseError {\n  constructor({\n    expectedSize,\n    givenSize,\n  }: { expectedSize: number; givenSize: number }) {\n    super(`Expected bytes${expectedSize}, got bytes${givenSize}.`, {\n      name: 'BytesSizeMismatchError',\n    })\n  }\n}\n\nexport type DecodeLogDataMismatchErrorType = DecodeLogDataMismatch & {\n  name: 'DecodeLogDataMismatch'\n}\nexport class DecodeLogDataMismatch extends BaseError {\n  abiItem: AbiEvent\n  data: Hex\n  params: readonly AbiParameter[]\n  size: number\n\n  constructor({\n    abiItem,\n    data,\n    params,\n    size,\n  }: {\n    abiItem: AbiEvent\n    data: Hex\n    params: readonly AbiParameter[]\n    size: number\n  }) {\n    super(\n      [\n        `Data size of ${size} bytes is too small for non-indexed event parameters.`,\n      ].join('\\n'),\n      {\n        metaMessages: [\n          `Params: (${formatAbiParams(params, { includeName: true })})`,\n          `Data:   ${data} (${size} bytes)`,\n        ],\n        name: 'DecodeLogDataMismatch',\n      },\n    )\n\n    this.abiItem = abiItem\n    this.data = data\n    this.params = params\n    this.size = size\n  }\n}\n\nexport type DecodeLogTopicsMismatchErrorType = DecodeLogTopicsMismatch & {\n  name: 'DecodeLogTopicsMismatch'\n}\nexport class DecodeLogTopicsMismatch extends BaseError {\n  abiItem: AbiEvent\n\n  constructor({\n    abiItem,\n    param,\n  }: {\n    abiItem: AbiEvent\n    param: AbiParameter & { indexed: boolean }\n  }) {\n    super(\n      [\n        `Expected a topic for indexed event parameter${\n          param.name ? ` \"${param.name}\"` : ''\n        } on event \"${formatAbiItem(abiItem, { includeName: true })}\".`,\n      ].join('\\n'),\n      { name: 'DecodeLogTopicsMismatch' },\n    )\n\n    this.abiItem = abiItem\n  }\n}\n\nexport type InvalidAbiEncodingTypeErrorType = InvalidAbiEncodingTypeError & {\n  name: 'InvalidAbiEncodingTypeError'\n}\nexport class InvalidAbiEncodingTypeError extends BaseError {\n  constructor(type: string, { docsPath }: { docsPath: string }) {\n    super(\n      [\n        `Type \"${type}\" is not a valid encoding type.`,\n        'Please provide a valid ABI type.',\n      ].join('\\n'),\n      { docsPath, name: 'InvalidAbiEncodingType' },\n    )\n  }\n}\n\nexport type InvalidAbiDecodingTypeErrorType = InvalidAbiDecodingTypeError & {\n  name: 'InvalidAbiDecodingTypeError'\n}\nexport class InvalidAbiDecodingTypeError extends BaseError {\n  constructor(type: string, { docsPath }: { docsPath: string }) {\n    super(\n      [\n        `Type \"${type}\" is not a valid decoding type.`,\n        'Please provide a valid ABI type.',\n      ].join('\\n'),\n      { docsPath, name: 'InvalidAbiDecodingType' },\n    )\n  }\n}\n\nexport type InvalidArrayErrorType = InvalidArrayError & {\n  name: 'InvalidArrayError'\n}\nexport class InvalidArrayError extends BaseError {\n  constructor(value: unknown) {\n    super([`Value \"${value}\" is not a valid array.`].join('\\n'), {\n      name: 'InvalidArrayError',\n    })\n  }\n}\n\nexport type InvalidDefinitionTypeErrorType = InvalidDefinitionTypeError & {\n  name: 'InvalidDefinitionTypeError'\n}\nexport class InvalidDefinitionTypeError extends BaseError {\n  constructor(type: string) {\n    super(\n      [\n        `\"${type}\" is not a valid definition type.`,\n        'Valid types: \"function\", \"event\", \"error\"',\n      ].join('\\n'),\n      { name: 'InvalidDefinitionTypeError' },\n    )\n  }\n}\n\nexport type UnsupportedPackedAbiTypeErrorType = UnsupportedPackedAbiType & {\n  name: 'UnsupportedPackedAbiType'\n}\nexport class UnsupportedPackedAbiType extends BaseError {\n  constructor(type: unknown) {\n    super(`Type \"${type}\" is not supported for packed encoding.`, {\n      name: 'UnsupportedPackedAbiType',\n    })\n  }\n}\n", "import { BaseError } from './base.js'\n\nexport type FilterTypeNotSupportedErrorType = FilterTypeNotSupportedError & {\n  name: 'FilterTypeNotSupportedError'\n}\nexport class FilterTypeNotSupportedError extends BaseError {\n  constructor(type: string) {\n    super(`Filter type \"${type}\" is not supported.`, {\n      name: 'FilterTypeNotSupportedError',\n    })\n  }\n}\n", "import { BaseError } from './base.js'\n\nexport type SliceOffsetOutOfBoundsErrorType = SliceOffsetOutOfBoundsError & {\n  name: 'SliceOffsetOutOfBoundsError'\n}\nexport class SliceOffsetOutOfBoundsError extends BaseError {\n  constructor({\n    offset,\n    position,\n    size,\n  }: { offset: number; position: 'start' | 'end'; size: number }) {\n    super(\n      `Slice ${\n        position === 'start' ? 'starting' : 'ending'\n      } at offset \"${offset}\" is out-of-bounds (size: ${size}).`,\n      { name: 'SliceOffsetOutOfBoundsError' },\n    )\n  }\n}\n\nexport type SizeExceedsPaddingSizeErrorType = SizeExceedsPaddingSizeError & {\n  name: 'SizeExceedsPaddingSizeError'\n}\nexport class SizeExceedsPaddingSizeError extends BaseError {\n  constructor({\n    size,\n    targetSize,\n    type,\n  }: {\n    size: number\n    targetSize: number\n    type: 'hex' | 'bytes'\n  }) {\n    super(\n      `${type.charAt(0).toUpperCase()}${type\n        .slice(1)\n        .toLowerCase()} size (${size}) exceeds padding size (${targetSize}).`,\n      { name: 'SizeExceedsPaddingSizeError' },\n    )\n  }\n}\n\nexport type InvalidBytesLengthErrorType = InvalidBytesLengthError & {\n  name: 'InvalidBytesLengthError'\n}\nexport class InvalidBytesLengthError extends BaseError {\n  constructor({\n    size,\n    targetSize,\n    type,\n  }: {\n    size: number\n    targetSize: number\n    type: 'hex' | 'bytes'\n  }) {\n    super(\n      `${type.charAt(0).toUpperCase()}${type\n        .slice(1)\n        .toLowerCase()} is expected to be ${targetSize} ${type} long, but is ${size} ${type} long.`,\n      { name: 'InvalidBytesLengthError' },\n    )\n  }\n}\n", "import {\n  SizeExceedsPaddingSizeError,\n  type SizeExceedsPaddingSizeErrorType,\n} from '../../errors/data.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\ntype PadOptions = {\n  dir?: 'left' | 'right' | undefined\n  size?: number | null | undefined\n}\nexport type PadReturnType<value extends ByteArray | Hex> = value extends Hex\n  ? Hex\n  : ByteArray\n\nexport type PadErrorType = PadHexErrorType | PadBytesErrorType | ErrorType\n\nexport function pad<value extends ByteArray | Hex>(\n  hexOrBytes: value,\n  { dir, size = 32 }: PadOptions = {},\n): PadReturnType<value> {\n  if (typeof hexOrBytes === 'string')\n    return padHex(hexOrBytes, { dir, size }) as PadReturnType<value>\n  return padBytes(hexOrBytes, { dir, size }) as PadReturnType<value>\n}\n\nexport type PadHexErrorType = SizeExceedsPaddingSizeErrorType | ErrorType\n\nexport function padHex(hex_: Hex, { dir, size = 32 }: PadOptions = {}) {\n  if (size === null) return hex_\n  const hex = hex_.replace('0x', '')\n  if (hex.length > size * 2)\n    throw new SizeExceedsPaddingSizeError({\n      size: Math.ceil(hex.length / 2),\n      targetSize: size,\n      type: 'hex',\n    })\n\n  return `0x${hex[dir === 'right' ? 'padEnd' : 'padStart'](\n    size * 2,\n    '0',\n  )}` as Hex\n}\n\nexport type PadBytesErrorType = SizeExceedsPaddingSizeErrorType | ErrorType\n\nexport function padBytes(\n  bytes: ByteArray,\n  { dir, size = 32 }: PadOptions = {},\n) {\n  if (size === null) return bytes\n  if (bytes.length > size)\n    throw new SizeExceedsPaddingSizeError({\n      size: bytes.length,\n      targetSize: size,\n      type: 'bytes',\n    })\n  const paddedBytes = new Uint8Array(size)\n  for (let i = 0; i < size; i++) {\n    const padEnd = dir === 'right'\n    paddedBytes[padEnd ? i : size - i - 1] =\n      bytes[padEnd ? i : bytes.length - i - 1]\n  }\n  return paddedBytes\n}\n", "import type { ByteArray, Hex } from '../types/misc.js'\n\nimport { BaseError } from './base.js'\n\nexport type IntegerOutOfRangeErrorType = IntegerOutOfRangeError & {\n  name: 'IntegerOutOfRangeError'\n}\nexport class IntegerOutOfRangeError extends BaseError {\n  constructor({\n    max,\n    min,\n    signed,\n    size,\n    value,\n  }: {\n    max?: string | undefined\n    min: string\n    signed?: boolean | undefined\n    size?: number | undefined\n    value: string\n  }) {\n    super(\n      `Number \"${value}\" is not in safe ${\n        size ? `${size * 8}-bit ${signed ? 'signed' : 'unsigned'} ` : ''\n      }integer range ${max ? `(${min} to ${max})` : `(above ${min})`}`,\n      { name: 'IntegerOutOfRangeError' },\n    )\n  }\n}\n\nexport type InvalidBytesBooleanErrorType = InvalidBytesBooleanError & {\n  name: 'InvalidBytesBooleanError'\n}\nexport class InvalidBytesBooleanError extends BaseError {\n  constructor(bytes: ByteArray) {\n    super(\n      `Bytes value \"${bytes}\" is not a valid boolean. The bytes array must contain a single byte of either a 0 or 1 value.`,\n      {\n        name: 'InvalidBytesBooleanError',\n      },\n    )\n  }\n}\n\nexport type InvalidHexBooleanErrorType = InvalidHexBooleanError & {\n  name: 'InvalidHexBooleanError'\n}\nexport class InvalidHexBooleanError extends BaseError {\n  constructor(hex: Hex) {\n    super(\n      `Hex value \"${hex}\" is not a valid boolean. The hex value must be \"0x0\" (false) or \"0x1\" (true).`,\n      { name: 'InvalidHexBooleanError' },\n    )\n  }\n}\n\nexport type InvalidHexValueErrorType = InvalidHexValueError & {\n  name: 'InvalidHexValueError'\n}\nexport class InvalidHexValueError extends BaseError {\n  constructor(value: Hex) {\n    super(\n      `Hex value \"${value}\" is an odd length (${value.length}). It must be an even length.`,\n      { name: 'InvalidHexValueError' },\n    )\n  }\n}\n\nexport type SizeOverflowErrorType = SizeOverflowError & {\n  name: 'SizeOverflowError'\n}\nexport class SizeOverflowError extends BaseError {\n  constructor({ givenSize, maxSize }: { givenSize: number; maxSize: number }) {\n    super(\n      `Size cannot exceed ${maxSize} bytes. Given size: ${givenSize} bytes.`,\n      { name: 'SizeOverflowError' },\n    )\n  }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\ntype TrimOptions = {\n  dir?: 'left' | 'right' | undefined\n}\nexport type TrimReturnType<value extends ByteArray | Hex> = value extends Hex\n  ? Hex\n  : ByteArray\n\nexport type TrimErrorType = ErrorType\n\nexport function trim<value extends ByteArray | Hex>(\n  hexOrBytes: value,\n  { dir = 'left' }: TrimOptions = {},\n): TrimReturnType<value> {\n  let data: any =\n    typeof hexOrBytes === 'string' ? hexOrBytes.replace('0x', '') : hexOrBytes\n\n  let sliceLength = 0\n  for (let i = 0; i < data.length - 1; i++) {\n    if (data[dir === 'left' ? i : data.length - i - 1].toString() === '0')\n      sliceLength++\n    else break\n  }\n  data =\n    dir === 'left'\n      ? data.slice(sliceLength)\n      : data.slice(0, data.length - sliceLength)\n\n  if (typeof hexOrBytes === 'string') {\n    if (data.length === 1 && dir === 'right') data = `${data}0`\n    return `0x${\n      data.length % 2 === 1 ? `0${data}` : data\n    }` as TrimReturnType<value>\n  }\n  return data as TrimReturnType<value>\n}\n", "import {\n  IntegerOutOfRangeError,\n  type IntegerOutOfRangeErrorType,\n  InvalidHexBooleanError,\n  type InvalidHexBooleanErrorType,\n  SizeOverflowError,\n  type SizeOverflowErrorType,\n} from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type SizeErrorType, size as size_ } from '../data/size.js'\nimport { type TrimErrorType, trim } from '../data/trim.js'\n\nimport { type HexToBytesErrorType, hexToBytes } from './toBytes.js'\n\nexport type AssertSizeErrorType =\n  | SizeOverflowErrorType\n  | SizeErrorType\n  | ErrorType\n\nexport function assertSize(\n  hexOrBytes: Hex | ByteArray,\n  { size }: { size: number },\n): void {\n  if (size_(hexOrBytes) > size)\n    throw new SizeOverflowError({\n      givenSize: size_(hexOrBytes),\n      maxSize: size,\n    })\n}\n\nexport type FromHexParameters<\n  to extends 'string' | 'bigint' | 'number' | 'bytes' | 'boolean',\n> =\n  | to\n  | {\n      /** Size (in bytes) of the hex value. */\n      size?: number | undefined\n      /** Type to convert to. */\n      to: to\n    }\n\nexport type FromHexReturnType<to> = to extends 'string'\n  ? string\n  : to extends 'bigint'\n    ? bigint\n    : to extends 'number'\n      ? number\n      : to extends 'bytes'\n        ? ByteArray\n        : to extends 'boolean'\n          ? boolean\n          : never\n\nexport type FromHexErrorType =\n  | HexToNumberErrorType\n  | HexToBigIntErrorType\n  | HexToBoolErrorType\n  | HexToStringErrorType\n  | HexToBytesErrorType\n  | ErrorType\n\n/**\n * Decodes a hex string into a string, number, bigint, boolean, or byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex\n * - Example: https://viem.sh/docs/utilities/fromHex#usage\n *\n * @param hex Hex string to decode.\n * @param toOrOpts Type to convert to or options.\n * @returns Decoded value.\n *\n * @example\n * import { fromHex } from 'viem'\n * const data = fromHex('0x1a4', 'number')\n * // 420\n *\n * @example\n * import { fromHex } from 'viem'\n * const data = fromHex('0x48656c6c6f20576f726c6421', 'string')\n * // 'Hello world'\n *\n * @example\n * import { fromHex } from 'viem'\n * const data = fromHex('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n *   size: 32,\n *   to: 'string'\n * })\n * // 'Hello world'\n */\nexport function fromHex<\n  to extends 'string' | 'bigint' | 'number' | 'bytes' | 'boolean',\n>(hex: Hex, toOrOpts: FromHexParameters<to>): FromHexReturnType<to> {\n  const opts = typeof toOrOpts === 'string' ? { to: toOrOpts } : toOrOpts\n  const to = opts.to\n\n  if (to === 'number') return hexToNumber(hex, opts) as FromHexReturnType<to>\n  if (to === 'bigint') return hexToBigInt(hex, opts) as FromHexReturnType<to>\n  if (to === 'string') return hexToString(hex, opts) as FromHexReturnType<to>\n  if (to === 'boolean') return hexToBool(hex, opts) as FromHexReturnType<to>\n  return hexToBytes(hex, opts) as FromHexReturnType<to>\n}\n\nexport type HexToBigIntOpts = {\n  /** Whether or not the number of a signed representation. */\n  signed?: boolean | undefined\n  /** Size (in bytes) of the hex value. */\n  size?: number | undefined\n}\n\nexport type HexToBigIntErrorType = AssertSizeErrorType | ErrorType\n\n/**\n * Decodes a hex value into a bigint.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextobigint\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns BigInt value.\n *\n * @example\n * import { hexToBigInt } from 'viem'\n * const data = hexToBigInt('0x1a4', { signed: true })\n * // 420n\n *\n * @example\n * import { hexToBigInt } from 'viem'\n * const data = hexToBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // 420n\n */\nexport function hexToBigInt(hex: Hex, opts: HexToBigIntOpts = {}): bigint {\n  const { signed } = opts\n\n  if (opts.size) assertSize(hex, { size: opts.size })\n\n  const value = BigInt(hex)\n  if (!signed) return value\n\n  const size = (hex.length - 2) / 2\n  const max = (1n << (BigInt(size) * 8n - 1n)) - 1n\n  if (value <= max) return value\n\n  return value - BigInt(`0x${'f'.padStart(size * 2, 'f')}`) - 1n\n}\n\nexport type HexToBoolOpts = {\n  /** Size (in bytes) of the hex value. */\n  size?: number | undefined\n}\n\nexport type HexToBoolErrorType =\n  | AssertSizeErrorType\n  | InvalidHexBooleanErrorType\n  | TrimErrorType\n  | ErrorType\n\n/**\n * Decodes a hex value into a boolean.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextobool\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns Boolean value.\n *\n * @example\n * import { hexToBool } from 'viem'\n * const data = hexToBool('0x01')\n * // true\n *\n * @example\n * import { hexToBool } from 'viem'\n * const data = hexToBool('0x0000000000000000000000000000000000000000000000000000000000000001', { size: 32 })\n * // true\n */\nexport function hexToBool(hex_: Hex, opts: HexToBoolOpts = {}): boolean {\n  let hex = hex_\n  if (opts.size) {\n    assertSize(hex, { size: opts.size })\n    hex = trim(hex)\n  }\n  if (trim(hex) === '0x00') return false\n  if (trim(hex) === '0x01') return true\n  throw new InvalidHexBooleanError(hex)\n}\n\nexport type HexToNumberOpts = HexToBigIntOpts\n\nexport type HexToNumberErrorType =\n  | HexToBigIntErrorType\n  | IntegerOutOfRangeErrorType\n  | ErrorType\n\n/**\n * Decodes a hex string into a number.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextonumber\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns Number value.\n *\n * @example\n * import { hexToNumber } from 'viem'\n * const data = hexToNumber('0x1a4')\n * // 420\n *\n * @example\n * import { hexToNumber } from 'viem'\n * const data = hexToBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // 420\n */\nexport function hexToNumber(hex: Hex, opts: HexToNumberOpts = {}): number {\n  const value = hexToBigInt(hex, opts)\n  const number = Number(value)\n  if (!Number.isSafeInteger(number))\n    throw new IntegerOutOfRangeError({\n      max: `${Number.MAX_SAFE_INTEGER}`,\n      min: `${Number.MIN_SAFE_INTEGER}`,\n      signed: opts.signed,\n      size: opts.size,\n      value: `${value}n`,\n    })\n  return number\n}\n\nexport type HexToStringOpts = {\n  /** Size (in bytes) of the hex value. */\n  size?: number | undefined\n}\n\nexport type HexToStringErrorType =\n  | AssertSizeErrorType\n  | HexToBytesErrorType\n  | TrimErrorType\n  | ErrorType\n\n/**\n * Decodes a hex value into a UTF-8 string.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextostring\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns String value.\n *\n * @example\n * import { hexToString } from 'viem'\n * const data = hexToString('0x48656c6c6f20576f726c6421')\n * // 'Hello world!'\n *\n * @example\n * import { hexToString } from 'viem'\n * const data = hexToString('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n *  size: 32,\n * })\n * // 'Hello world'\n */\nexport function hexToString(hex: Hex, opts: HexToStringOpts = {}): string {\n  let bytes = hexToBytes(hex)\n  if (opts.size) {\n    assertSize(bytes, { size: opts.size })\n    bytes = trim(bytes, { dir: 'right' })\n  }\n  return new TextDecoder().decode(bytes)\n}\n", "import {\n  IntegerOutOfRangeError,\n  type IntegerOutOfRangeErrorType,\n} from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type PadErrorType, pad } from '../data/pad.js'\n\nimport { type AssertSizeErrorType, assertSize } from './fromHex.js'\n\nconst hexes = /*#__PURE__*/ Array.from({ length: 256 }, (_v, i) =>\n  i.toString(16).padStart(2, '0'),\n)\n\nexport type ToHexParameters = {\n  /** The size (in bytes) of the output hex value. */\n  size?: number | undefined\n}\n\nexport type ToHexErrorType =\n  | BoolToHexErrorType\n  | BytesToHexErrorType\n  | NumberToHexErrorType\n  | StringToHexErrorType\n  | ErrorType\n\n/**\n * Encodes a string, number, bigint, or ByteArray into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex\n * - Example: https://viem.sh/docs/utilities/toHex#usage\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { toHex } from 'viem'\n * const data = toHex('Hello world')\n * // '0x48656c6c6f20776f726c6421'\n *\n * @example\n * import { toHex } from 'viem'\n * const data = toHex(420)\n * // '0x1a4'\n *\n * @example\n * import { toHex } from 'viem'\n * const data = toHex('Hello world', { size: 32 })\n * // '0x48656c6c6f20776f726c64210000000000000000000000000000000000000000'\n */\nexport function toHex(\n  value: string | number | bigint | boolean | ByteArray,\n  opts: ToHexParameters = {},\n): Hex {\n  if (typeof value === 'number' || typeof value === 'bigint')\n    return numberToHex(value, opts)\n  if (typeof value === 'string') {\n    return stringToHex(value, opts)\n  }\n  if (typeof value === 'boolean') return boolToHex(value, opts)\n  return bytesToHex(value, opts)\n}\n\nexport type BoolToHexOpts = {\n  /** The size (in bytes) of the output hex value. */\n  size?: number | undefined\n}\n\nexport type BoolToHexErrorType = AssertSizeErrorType | PadErrorType | ErrorType\n\n/**\n * Encodes a boolean into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#booltohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { boolToHex } from 'viem'\n * const data = boolToHex(true)\n * // '0x1'\n *\n * @example\n * import { boolToHex } from 'viem'\n * const data = boolToHex(false)\n * // '0x0'\n *\n * @example\n * import { boolToHex } from 'viem'\n * const data = boolToHex(true, { size: 32 })\n * // '0x0000000000000000000000000000000000000000000000000000000000000001'\n */\nexport function boolToHex(value: boolean, opts: BoolToHexOpts = {}): Hex {\n  const hex: Hex = `0x${Number(value)}`\n  if (typeof opts.size === 'number') {\n    assertSize(hex, { size: opts.size })\n    return pad(hex, { size: opts.size })\n  }\n  return hex\n}\n\nexport type BytesToHexOpts = {\n  /** The size (in bytes) of the output hex value. */\n  size?: number | undefined\n}\n\nexport type BytesToHexErrorType = AssertSizeErrorType | PadErrorType | ErrorType\n\n/**\n * Encodes a bytes array into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#bytestohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { bytesToHex } from 'viem'\n * const data = bytesToHex(Uint8Array.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * // '0x48656c6c6f20576f726c6421'\n *\n * @example\n * import { bytesToHex } from 'viem'\n * const data = bytesToHex(Uint8Array.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]), { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n */\nexport function bytesToHex(value: ByteArray, opts: BytesToHexOpts = {}): Hex {\n  let string = ''\n  for (let i = 0; i < value.length; i++) {\n    string += hexes[value[i]]\n  }\n  const hex = `0x${string}` as const\n\n  if (typeof opts.size === 'number') {\n    assertSize(hex, { size: opts.size })\n    return pad(hex, { dir: 'right', size: opts.size })\n  }\n  return hex\n}\n\nexport type NumberToHexOpts =\n  | {\n      /** Whether or not the number of a signed representation. */\n      signed?: boolean | undefined\n      /** The size (in bytes) of the output hex value. */\n      size: number\n    }\n  | {\n      signed?: undefined\n      /** The size (in bytes) of the output hex value. */\n      size?: number | undefined\n    }\n\nexport type NumberToHexErrorType =\n  | IntegerOutOfRangeErrorType\n  | PadErrorType\n  | ErrorType\n\n/**\n * Encodes a number or bigint into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#numbertohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { numberToHex } from 'viem'\n * const data = numberToHex(420)\n * // '0x1a4'\n *\n * @example\n * import { numberToHex } from 'viem'\n * const data = numberToHex(420, { size: 32 })\n * // '0x00000000000000000000000000000000000000000000000000000000000001a4'\n */\nexport function numberToHex(\n  value_: number | bigint,\n  opts: NumberToHexOpts = {},\n): Hex {\n  const { signed, size } = opts\n\n  const value = BigInt(value_)\n\n  let maxValue: bigint | number | undefined\n  if (size) {\n    if (signed) maxValue = (1n << (BigInt(size) * 8n - 1n)) - 1n\n    else maxValue = 2n ** (BigInt(size) * 8n) - 1n\n  } else if (typeof value_ === 'number') {\n    maxValue = BigInt(Number.MAX_SAFE_INTEGER)\n  }\n\n  const minValue = typeof maxValue === 'bigint' && signed ? -maxValue - 1n : 0\n\n  if ((maxValue && value > maxValue) || value < minValue) {\n    const suffix = typeof value_ === 'bigint' ? 'n' : ''\n    throw new IntegerOutOfRangeError({\n      max: maxValue ? `${maxValue}${suffix}` : undefined,\n      min: `${minValue}${suffix}`,\n      signed,\n      size,\n      value: `${value_}${suffix}`,\n    })\n  }\n\n  const hex = `0x${(\n    signed && value < 0 ? (1n << BigInt(size * 8)) + BigInt(value) : value\n  ).toString(16)}` as Hex\n  if (size) return pad(hex, { size }) as Hex\n  return hex\n}\n\nexport type StringToHexOpts = {\n  /** The size (in bytes) of the output hex value. */\n  size?: number | undefined\n}\n\nexport type StringToHexErrorType = BytesToHexErrorType | ErrorType\n\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\n/**\n * Encodes a UTF-8 string into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#stringtohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { stringToHex } from 'viem'\n * const data = stringToHex('Hello World!')\n * // '0x48656c6c6f20576f726c6421'\n *\n * @example\n * import { stringToHex } from 'viem'\n * const data = stringToHex('Hello World!', { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n */\nexport function stringToHex(value_: string, opts: StringToHexOpts = {}): Hex {\n  const value = encoder.encode(value_)\n  return bytesToHex(value, opts)\n}\n", "import { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type PadErrorType, pad } from '../data/pad.js'\n\nimport { type AssertSizeErrorType, assertSize } from './fromHex.js'\nimport {\n  type NumberToHexErrorType,\n  type NumberToHexOpts,\n  numberToHex,\n} from './toHex.js'\n\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\nexport type ToBytesParameters = {\n  /** Size of the output bytes. */\n  size?: number | undefined\n}\n\nexport type ToBytesErrorType =\n  | NumberToBytesErrorType\n  | BoolToBytesErrorType\n  | HexToBytesErrorType\n  | StringToBytesErrorType\n  | IsHexErrorType\n  | ErrorType\n\n/**\n * Encodes a UTF-8 string, hex value, bigint, number or boolean to a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes\n * - Example: https://viem.sh/docs/utilities/toBytes#usage\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { toBytes } from 'viem'\n * const data = toBytes('Hello world')\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n *\n * @example\n * import { toBytes } from 'viem'\n * const data = toBytes(420)\n * // Uint8Array([1, 164])\n *\n * @example\n * import { toBytes } from 'viem'\n * const data = toBytes(420, { size: 4 })\n * // Uint8Array([0, 0, 1, 164])\n */\nexport function toBytes(\n  value: string | bigint | number | boolean | Hex,\n  opts: ToBytesParameters = {},\n): ByteArray {\n  if (typeof value === 'number' || typeof value === 'bigint')\n    return numberToBytes(value, opts)\n  if (typeof value === 'boolean') return boolToBytes(value, opts)\n  if (isHex(value)) return hexToBytes(value, opts)\n  return stringToBytes(value, opts)\n}\n\nexport type BoolToBytesOpts = {\n  /** Size of the output bytes. */\n  size?: number | undefined\n}\n\nexport type BoolToBytesErrorType =\n  | AssertSizeErrorType\n  | PadErrorType\n  | ErrorType\n\n/**\n * Encodes a boolean into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#booltobytes\n *\n * @param value Boolean value to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { boolToBytes } from 'viem'\n * const data = boolToBytes(true)\n * // Uint8Array([1])\n *\n * @example\n * import { boolToBytes } from 'viem'\n * const data = boolToBytes(true, { size: 32 })\n * // Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])\n */\nexport function boolToBytes(value: boolean, opts: BoolToBytesOpts = {}) {\n  const bytes = new Uint8Array(1)\n  bytes[0] = Number(value)\n  if (typeof opts.size === 'number') {\n    assertSize(bytes, { size: opts.size })\n    return pad(bytes, { size: opts.size })\n  }\n  return bytes\n}\n\n// We use very optimized technique to convert hex string to byte array\nconst charCodeMap = {\n  zero: 48,\n  nine: 57,\n  A: 65,\n  F: 70,\n  a: 97,\n  f: 102,\n} as const\n\nfunction charCodeToBase16(char: number) {\n  if (char >= charCodeMap.zero && char <= charCodeMap.nine)\n    return char - charCodeMap.zero\n  if (char >= charCodeMap.A && char <= charCodeMap.F)\n    return char - (charCodeMap.A - 10)\n  if (char >= charCodeMap.a && char <= charCodeMap.f)\n    return char - (charCodeMap.a - 10)\n  return undefined\n}\n\nexport type HexToBytesOpts = {\n  /** Size of the output bytes. */\n  size?: number | undefined\n}\n\nexport type HexToBytesErrorType = AssertSizeErrorType | PadErrorType | ErrorType\n\n/**\n * Encodes a hex string into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#hextobytes\n *\n * @param hex Hex string to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { hexToBytes } from 'viem'\n * const data = hexToBytes('0x48656c6c6f20776f726c6421')\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n *\n * @example\n * import { hexToBytes } from 'viem'\n * const data = hexToBytes('0x48656c6c6f20776f726c6421', { size: 32 })\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n */\nexport function hexToBytes(hex_: Hex, opts: HexToBytesOpts = {}): ByteArray {\n  let hex = hex_\n  if (opts.size) {\n    assertSize(hex, { size: opts.size })\n    hex = pad(hex, { dir: 'right', size: opts.size })\n  }\n\n  let hexString = hex.slice(2) as string\n  if (hexString.length % 2) hexString = `0${hexString}`\n\n  const length = hexString.length / 2\n  const bytes = new Uint8Array(length)\n  for (let index = 0, j = 0; index < length; index++) {\n    const nibbleLeft = charCodeToBase16(hexString.charCodeAt(j++))\n    const nibbleRight = charCodeToBase16(hexString.charCodeAt(j++))\n    if (nibbleLeft === undefined || nibbleRight === undefined) {\n      throw new BaseError(\n        `Invalid byte sequence (\"${hexString[j - 2]}${\n          hexString[j - 1]\n        }\" in \"${hexString}\").`,\n      )\n    }\n    bytes[index] = nibbleLeft * 16 + nibbleRight\n  }\n  return bytes\n}\n\nexport type NumberToBytesErrorType =\n  | NumberToHexErrorType\n  | HexToBytesErrorType\n  | ErrorType\n\n/**\n * Encodes a number into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#numbertobytes\n *\n * @param value Number to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { numberToBytes } from 'viem'\n * const data = numberToBytes(420)\n * // Uint8Array([1, 164])\n *\n * @example\n * import { numberToBytes } from 'viem'\n * const data = numberToBytes(420, { size: 4 })\n * // Uint8Array([0, 0, 1, 164])\n */\nexport function numberToBytes(\n  value: bigint | number,\n  opts?: NumberToHexOpts | undefined,\n) {\n  const hex = numberToHex(value, opts)\n  return hexToBytes(hex)\n}\n\nexport type StringToBytesOpts = {\n  /** Size of the output bytes. */\n  size?: number | undefined\n}\n\nexport type StringToBytesErrorType =\n  | AssertSizeErrorType\n  | PadErrorType\n  | ErrorType\n\n/**\n * Encodes a UTF-8 string into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#stringtobytes\n *\n * @param value String to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { stringToBytes } from 'viem'\n * const data = stringToBytes('Hello world!')\n * // Uint8Array([72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33])\n *\n * @example\n * import { stringToBytes } from 'viem'\n * const data = stringToBytes('Hello world!', { size: 32 })\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n */\nexport function stringToBytes(\n  value: string,\n  opts: StringToBytesOpts = {},\n): ByteArray {\n  const bytes = encoder.encode(value)\n  if (typeof opts.size === 'number') {\n    assertSize(bytes, { size: opts.size })\n    return pad(bytes, { dir: 'right', size: opts.size })\n  }\n  return bytes\n}\n", "/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n  n: bigint,\n  le = false\n): {\n  h: number;\n  l: number;\n} {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n  const len = lst.length;\n  let Ah = new Uint32Array(len);\n  let Al = new Uint32Array(len);\n  for (let i = 0; i < len; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n  Ah: number,\n  Al: number,\n  Bh: number,\n  Bl: number\n): {\n  h: number;\n  l: number;\n} {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n  add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "/**\n * Internal webcrypto alias.\n * We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.\n * Falls back to Node.js built-in crypto for Node.js <=v14.\n * See utils.ts for details.\n * @module\n */\n// @ts-ignore\nimport * as nc from 'node:crypto';\nexport const crypto: any =\n  nc && typeof nc === 'object' && 'webcrypto' in nc\n    ? (nc.webcrypto as any)\n    : nc && typeof nc === 'object' && 'randomBytes' in nc\n      ? nc\n      : undefined;\n", "/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n  return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number): void {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n  if (!isBytes(b)) throw new Error('Uint8Array expected');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n\n/** Asserts something is hash */\nexport function ahash(h: IHash): void {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.createHasher');\n  anumber(h.outputLen);\n  anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n  abytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error('digestInto() expects output buffer of length at least ' + min);\n  }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n  return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n  return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n  for (let i = 0; i < arrays.length; i++) {\n    arrays[i].fill(0);\n  }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n  return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n  return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n  return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n  new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n  return (\n    ((word << 24) & 0xff000000) |\n    ((word << 8) & 0xff0000) |\n    ((word >>> 8) & 0xff00) |\n    ((word >>> 24) & 0xff)\n  );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n  ? (n: number) => n\n  : (n: number) => byteSwap(n);\n\n/** @deprecated */\nexport const byteSwapIfBE: typeof swap8IfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n  return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n  ? (u: Uint32Array) => u\n  : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n  // @ts-ignore\n  typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // @ts-ignore\n  if (hasHexBuiltin) return bytes.toHex();\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n  if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n  if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n  if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n  return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // @ts-ignore\n  if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n  }\n  return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n  iters: number,\n  tick: number,\n  cb: (i: number) => void\n): Promise<void> {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error('string expected');\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes: Uint8Array): string {\n  return new TextDecoder().decode(bytes);\n}\n\n/** Accepted input of hash functions. Strings are converted to byte arrays. */\nexport type Input = string | Uint8Array;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n    throw new Error('options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\n/** Hash interface. */\nexport type IHash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\n\n/** For runtime check if class implements interface */\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  abstract clone(): T;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash function */\nexport type CHash = ReturnType<typeof createHasher>;\n/** Hash function with output */\nexport type CHashO = ReturnType<typeof createOptHasher>;\n/** XOF with output */\nexport type CHashXO = ReturnType<typeof createXOFer>;\n\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher<T extends Hash<T>>(\n  hashCons: () => Hash<T>\n): {\n  (msg: Input): Uint8Array;\n  outputLen: number;\n  blockLen: number;\n  create(): Hash<T>;\n} {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function createOptHasher<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n): {\n  (msg: Input, opts?: T): Uint8Array;\n  outputLen: number;\n  blockLen: number;\n  create(opts?: T): Hash<H>;\n} {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts?: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function createXOFer<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n): {\n  (msg: Input, opts?: T): Uint8Array;\n  outputLen: number;\n  blockLen: number;\n  create(opts?: T): HashXOF<H>;\n} {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts?: T) => hashCons(opts);\n  return hashC;\n}\nexport const wrapConstructor: typeof createHasher = createHasher;\nexport const wrapConstructorWithOpts: typeof createOptHasher = createOptHasher;\nexport const wrapXOFConstructorWithOpts: typeof createXOFer = createXOFer;\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  // Legacy Node.js compatibility\n  if (crypto && typeof crypto.randomBytes === 'function') {\n    return Uint8Array.from(crypto.randomBytes(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "/**\n * SHA3 (keccak) hash function, based on a new \"Sponge function\" design.\n * Different from older hashes, the internal state is bigger than output size.\n *\n * Check out [FIPS-202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf),\n * [Website](https://keccak.team/keccak.html),\n * [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub).\n *\n * Check out `sha3-addons` module for cSHAKE, k12, and others.\n * @module\n */\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.ts';\n// prettier-ignore\nimport {\n  abytes, aexists, anumber, aoutput,\n  clean, createHasher, createXOFer, Hash,\n  swap32IfBE,\n  toBytes, u32,\n  type CHash, type CHashXO, type HashXOF, type Input\n} from './utils.ts';\n\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI: number[] = [];\nconst SHA3_ROTL: number[] = [];\nconst _SHA3_IOTA: bigint[] = [];\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n  // Pi\n  [x, y] = [y, (2 * x + 3 * y) % 5];\n  SHA3_PI.push(2 * (5 * y + x));\n  // Rotational\n  SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n  // Iota\n  let t = _0n;\n  for (let j = 0; j < 7; j++) {\n    R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n    if (R & _2n) t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n  }\n  _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n/** `keccakf1600` internal function, additionally allows to adjust round count. */\nexport function keccakP(s: Uint32Array, rounds: number = 24): void {\n  const B = new Uint32Array(5 * 2);\n  // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n  for (let round = 24 - rounds; round < 24; round++) {\n    // Theta \u03B8\n    for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n    for (let x = 0; x < 10; x += 2) {\n      const idx1 = (x + 8) % 10;\n      const idx0 = (x + 2) % 10;\n      const B0 = B[idx0];\n      const B1 = B[idx0 + 1];\n      const Th = rotlH(B0, B1, 1) ^ B[idx1];\n      const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n      for (let y = 0; y < 50; y += 10) {\n        s[x + y] ^= Th;\n        s[x + y + 1] ^= Tl;\n      }\n    }\n    // Rho (\u03C1) and Pi (\u03C0)\n    let curH = s[2];\n    let curL = s[3];\n    for (let t = 0; t < 24; t++) {\n      const shift = SHA3_ROTL[t];\n      const Th = rotlH(curH, curL, shift);\n      const Tl = rotlL(curH, curL, shift);\n      const PI = SHA3_PI[t];\n      curH = s[PI];\n      curL = s[PI + 1];\n      s[PI] = Th;\n      s[PI + 1] = Tl;\n    }\n    // Chi (\u03C7)\n    for (let y = 0; y < 50; y += 10) {\n      for (let x = 0; x < 10; x++) B[x] = s[y + x];\n      for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n    }\n    // Iota (\u03B9)\n    s[0] ^= SHA3_IOTA_H[round];\n    s[1] ^= SHA3_IOTA_L[round];\n  }\n  clean(B);\n}\n\n/** Keccak sponge function. */\nexport class Keccak extends Hash<Keccak> implements HashXOF<Keccak> {\n  protected state: Uint8Array;\n  protected pos = 0;\n  protected posOut = 0;\n  protected finished = false;\n  protected state32: Uint32Array;\n  protected destroyed = false;\n\n  public blockLen: number;\n  public suffix: number;\n  public outputLen: number;\n  protected enableXOF = false;\n  protected rounds: number;\n\n  // NOTE: we accept arguments in bytes instead of bits here.\n  constructor(\n    blockLen: number,\n    suffix: number,\n    outputLen: number,\n    enableXOF = false,\n    rounds: number = 24\n  ) {\n    super();\n    this.blockLen = blockLen;\n    this.suffix = suffix;\n    this.outputLen = outputLen;\n    this.enableXOF = enableXOF;\n    this.rounds = rounds;\n    // Can be passed from user as dkLen\n    anumber(outputLen);\n    // 1600 = 5x5 matrix of 64bit.  1600 bits === 200 bytes\n    // 0 < blockLen < 200\n    if (!(0 < blockLen && blockLen < 200))\n      throw new Error('only keccak-f1600 function is supported');\n    this.state = new Uint8Array(200);\n    this.state32 = u32(this.state);\n  }\n  clone(): Keccak {\n    return this._cloneInto();\n  }\n  protected keccak(): void {\n    swap32IfBE(this.state32);\n    keccakP(this.state32, this.rounds);\n    swap32IfBE(this.state32);\n    this.posOut = 0;\n    this.pos = 0;\n  }\n  update(data: Input): this {\n    aexists(this);\n    data = toBytes(data);\n    abytes(data);\n    const { blockLen, state } = this;\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n      if (this.pos === blockLen) this.keccak();\n    }\n    return this;\n  }\n  protected finish(): void {\n    if (this.finished) return;\n    this.finished = true;\n    const { state, suffix, pos, blockLen } = this;\n    // Do the padding\n    state[pos] ^= suffix;\n    if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n    state[blockLen - 1] ^= 0x80;\n    this.keccak();\n  }\n  protected writeInto(out: Uint8Array): Uint8Array {\n    aexists(this, false);\n    abytes(out);\n    this.finish();\n    const bufferOut = this.state;\n    const { blockLen } = this;\n    for (let pos = 0, len = out.length; pos < len; ) {\n      if (this.posOut >= blockLen) this.keccak();\n      const take = Math.min(blockLen - this.posOut, len - pos);\n      out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n      this.posOut += take;\n      pos += take;\n    }\n    return out;\n  }\n  xofInto(out: Uint8Array): Uint8Array {\n    // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n    if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n    return this.writeInto(out);\n  }\n  xof(bytes: number): Uint8Array {\n    anumber(bytes);\n    return this.xofInto(new Uint8Array(bytes));\n  }\n  digestInto(out: Uint8Array): Uint8Array {\n    aoutput(out, this);\n    if (this.finished) throw new Error('digest() was already called');\n    this.writeInto(out);\n    this.destroy();\n    return out;\n  }\n  digest(): Uint8Array {\n    return this.digestInto(new Uint8Array(this.outputLen));\n  }\n  destroy(): void {\n    this.destroyed = true;\n    clean(this.state);\n  }\n  _cloneInto(to?: Keccak): Keccak {\n    const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n    to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n    to.state32.set(this.state32);\n    to.pos = this.pos;\n    to.posOut = this.posOut;\n    to.finished = this.finished;\n    to.rounds = rounds;\n    // Suffix can change in cSHAKE\n    to.suffix = suffix;\n    to.outputLen = outputLen;\n    to.enableXOF = enableXOF;\n    to.destroyed = this.destroyed;\n    return to;\n  }\n}\n\nconst gen = (suffix: number, blockLen: number, outputLen: number) =>\n  createHasher(() => new Keccak(blockLen, suffix, outputLen));\n\n/** SHA3-224 hash function. */\nexport const sha3_224: CHash = /* @__PURE__ */ (() => gen(0x06, 144, 224 / 8))();\n/** SHA3-256 hash function. Different from keccak-256. */\nexport const sha3_256: CHash = /* @__PURE__ */ (() => gen(0x06, 136, 256 / 8))();\n/** SHA3-384 hash function. */\nexport const sha3_384: CHash = /* @__PURE__ */ (() => gen(0x06, 104, 384 / 8))();\n/** SHA3-512 hash function. */\nexport const sha3_512: CHash = /* @__PURE__ */ (() => gen(0x06, 72, 512 / 8))();\n\n/** keccak-224 hash function. */\nexport const keccak_224: CHash = /* @__PURE__ */ (() => gen(0x01, 144, 224 / 8))();\n/** keccak-256 hash function. Different from SHA3-256. */\nexport const keccak_256: CHash = /* @__PURE__ */ (() => gen(0x01, 136, 256 / 8))();\n/** keccak-384 hash function. */\nexport const keccak_384: CHash = /* @__PURE__ */ (() => gen(0x01, 104, 384 / 8))();\n/** keccak-512 hash function. */\nexport const keccak_512: CHash = /* @__PURE__ */ (() => gen(0x01, 72, 512 / 8))();\n\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number) =>\n  createXOFer<HashXOF<Keccak>, ShakeOpts>(\n    (opts: ShakeOpts = {}) =>\n      new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)\n  );\n\n/** SHAKE128 XOF with 128-bit security. */\nexport const shake128: CHashXO = /* @__PURE__ */ (() => genShake(0x1f, 168, 128 / 8))();\n/** SHAKE256 XOF with 256-bit security. */\nexport const shake256: CHashXO = /* @__PURE__ */ (() => genShake(0x1f, 136, 256 / 8))();\n", "import { keccak_256 } from '@noble/hashes/sha3'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type ToHexErrorType, toHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type Keccak256Hash<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type Keccak256ErrorType =\n  | IsHexErrorType\n  | ToBytesErrorType\n  | ToHexErrorType\n  | ErrorType\n\nexport function keccak256<to extends To = 'hex'>(\n  value: Hex | ByteArray,\n  to_?: to | undefined,\n): Keccak256Hash<to> {\n  const to = to_ || 'hex'\n  const bytes = keccak_256(\n    isHex(value, { strict: false }) ? toBytes(value) : value,\n  )\n  if (to === 'bytes') return bytes as Keccak256Hash<to>\n  return toHex(bytes) as Keccak256Hash<to>\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type Keccak256ErrorType, keccak256 } from './keccak256.js'\n\nconst hash = (value: string) => keccak256(toBytes(value))\n\nexport type HashSignatureErrorType =\n  | Keccak256ErrorType\n  | ToBytesErrorType\n  | ErrorType\n\nexport function hashSignature(sig: string) {\n  return hash(sig)\n}\n", "import { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\ntype NormalizeSignatureParameters = string\ntype NormalizeSignatureReturnType = string\nexport type NormalizeSignatureErrorType = ErrorType\n\nexport function normalizeSignature(\n  signature: NormalizeSignatureParameters,\n): NormalizeSignatureReturnType {\n  let active = true\n  let current = ''\n  let level = 0\n  let result = ''\n  let valid = false\n\n  for (let i = 0; i < signature.length; i++) {\n    const char = signature[i]\n\n    // If the character is a separator, we want to reactivate.\n    if (['(', ')', ','].includes(char)) active = true\n\n    // If the character is a \"level\" token, we want to increment/decrement.\n    if (char === '(') level++\n    if (char === ')') level--\n\n    // If we aren't active, we don't want to mutate the result.\n    if (!active) continue\n\n    // If level === 0, we are at the definition level.\n    if (level === 0) {\n      if (char === ' ' && ['event', 'function', ''].includes(result))\n        result = ''\n      else {\n        result += char\n\n        // If we are at the end of the definition, we must be finished.\n        if (char === ')') {\n          valid = true\n          break\n        }\n      }\n\n      continue\n    }\n\n    // Ignore spaces\n    if (char === ' ') {\n      // If the previous character is a separator, and the current section isn't empty, we want to deactivate.\n      if (signature[i - 1] !== ',' && current !== ',' && current !== ',(') {\n        current = ''\n        active = false\n      }\n      continue\n    }\n\n    result += char\n    current += char\n  }\n\n  if (!valid) throw new BaseError('Unable to normalize signature.')\n\n  return result\n}\n", "import { type AbiEvent, type AbiFunction, formatAbiItem } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport {\n  type NormalizeSignatureErrorType,\n  normalizeSignature,\n} from './normalizeSignature.js'\n\nexport type ToSignatureErrorType = NormalizeSignatureErrorType | ErrorType\n\n/**\n * Returns the signature for a given function or event definition.\n *\n * @example\n * const signature = toSignature('function ownerOf(uint256 tokenId)')\n * // 'ownerOf(uint256)'\n *\n * @example\n * const signature_3 = toSignature({\n *   name: 'ownerOf',\n *   type: 'function',\n *   inputs: [{ name: 'tokenId', type: 'uint256' }],\n *   outputs: [],\n *   stateMutability: 'view',\n * })\n * // 'ownerOf(uint256)'\n */\nexport const toSignature = (def: string | AbiFunction | AbiEvent) => {\n  const def_ = (() => {\n    if (typeof def === 'string') return def\n    return formatAbiItem(def)\n  })()\n  return normalizeSignature(def_)\n}\n", "import type { AbiEvent, AbiFunction } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport { type HashSignatureErrorType, hashSignature } from './hashSignature.js'\nimport { type ToSignatureErrorType, toSignature } from './toSignature.js'\n\nexport type ToSignatureHashErrorType =\n  | HashSignatureErrorType\n  | ToSignatureErrorType\n  | ErrorType\n\n/**\n * Returns the hash (of the function/event signature) for a given event or function definition.\n */\nexport function toSignatureHash(fn: string | AbiFunction | AbiEvent) {\n  return hashSignature(toSignature(fn))\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport {\n  type ToSignatureHashErrorType,\n  toSignatureHash,\n} from './toSignatureHash.js'\n\nexport type ToEventSelectorErrorType = ToSignatureHashErrorType | ErrorType\n\n/**\n * Returns the event selector for a given event definition.\n *\n * @example\n * const selector = toEventSelector('Transfer(address indexed from, address indexed to, uint256 amount)')\n * // 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n */\nexport const toEventSelector = toSignatureHash\n", "import { BaseError } from './base.js'\n\nexport type InvalidAddressErrorType = InvalidAddressError & {\n  name: 'InvalidAddressError'\n}\nexport class InvalidAddressError extends BaseError {\n  constructor({ address }: { address: string }) {\n    super(`Address \"${address}\" is invalid.`, {\n      metaMessages: [\n        '- Address must be a hex value of 20 bytes (40 hex characters).',\n        '- Address must match its checksum counterpart.',\n      ],\n      name: 'InvalidAddressError',\n    })\n  }\n}\n", "/**\n * Map with a LRU (Least recently used) policy.\n *\n * @link https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU\n */\nexport class LruMap<value = unknown> extends Map<string, value> {\n  maxSize: number\n\n  constructor(size: number) {\n    super()\n    this.maxSize = size\n  }\n\n  override get(key: string) {\n    const value = super.get(key)\n\n    if (super.has(key)) {\n      super.delete(key)\n      super.set(key, value as value)\n    }\n\n    return value\n  }\n\n  override set(key: string, value: value) {\n    if (super.has(key)) super.delete(key)\n    super.set(key, value)\n    if (this.maxSize && this.size > this.maxSize) {\n      const firstKey = super.keys().next().value\n      if (firstKey !== undefined) super.delete(firstKey)\n    }\n    return this\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport { InvalidAddressError } from '../../errors/address.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport {\n  type StringToBytesErrorType,\n  stringToBytes,\n} from '../encoding/toBytes.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport { LruMap } from '../lru.js'\nimport { type IsAddressErrorType, isAddress } from './isAddress.js'\n\nconst checksumAddressCache = /*#__PURE__*/ new LruMap<Address>(8192)\n\nexport type ChecksumAddressErrorType =\n  | Keccak256ErrorType\n  | StringToBytesErrorType\n  | ErrorType\n\nexport function checksumAddress(\n  address_: Address,\n  /**\n   * Warning: EIP-1191 checksum addresses are generally not backwards compatible with the\n   * wider Ethereum ecosystem, meaning it will break when validated against an application/tool\n   * that relies on EIP-55 checksum encoding (checksum without chainId).\n   *\n   * It is highly recommended to not use this feature unless you\n   * know what you are doing.\n   *\n   * See more: https://github.com/ethereum/EIPs/issues/1121\n   */\n  chainId?: number | undefined,\n): Address {\n  if (checksumAddressCache.has(`${address_}.${chainId}`))\n    return checksumAddressCache.get(`${address_}.${chainId}`)!\n\n  const hexAddress = chainId\n    ? `${chainId}${address_.toLowerCase()}`\n    : address_.substring(2).toLowerCase()\n  const hash = keccak256(stringToBytes(hexAddress), 'bytes')\n\n  const address = (\n    chainId ? hexAddress.substring(`${chainId}0x`.length) : hexAddress\n  ).split('')\n  for (let i = 0; i < 40; i += 2) {\n    if (hash[i >> 1] >> 4 >= 8 && address[i]) {\n      address[i] = address[i].toUpperCase()\n    }\n    if ((hash[i >> 1] & 0x0f) >= 8 && address[i + 1]) {\n      address[i + 1] = address[i + 1].toUpperCase()\n    }\n  }\n\n  const result = `0x${address.join('')}` as const\n  checksumAddressCache.set(`${address_}.${chainId}`, result)\n  return result\n}\n\nexport type GetAddressErrorType =\n  | ChecksumAddressErrorType\n  | IsAddressErrorType\n  | ErrorType\n\nexport function getAddress(\n  address: string,\n  /**\n   * Warning: EIP-1191 checksum addresses are generally not backwards compatible with the\n   * wider Ethereum ecosystem, meaning it will break when validated against an application/tool\n   * that relies on EIP-55 checksum encoding (checksum without chainId).\n   *\n   * It is highly recommended to not use this feature unless you\n   * know what you are doing.\n   *\n   * See more: https://github.com/ethereum/EIPs/issues/1121\n   */\n  chainId?: number,\n): Address {\n  if (!isAddress(address, { strict: false }))\n    throw new InvalidAddressError({ address })\n  return checksumAddress(address, chainId)\n}\n", "import type { Address } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport { LruMap } from '../lru.js'\nimport { checksumAddress } from './getAddress.js'\n\nconst addressRegex = /^0x[a-fA-F0-9]{40}$/\n\n/** @internal */\nexport const isAddressCache = /*#__PURE__*/ new LruMap<boolean>(8192)\n\nexport type IsAddressOptions = {\n  /**\n   * Enables strict mode. Whether or not to compare the address against its checksum.\n   *\n   * @default true\n   */\n  strict?: boolean | undefined\n}\n\nexport type IsAddressErrorType = ErrorType\n\nexport function isAddress(\n  address: string,\n  options?: IsAddressOptions | undefined,\n): address is Address {\n  const { strict = true } = options ?? {}\n  const cacheKey = `${address}.${strict}`\n\n  if (isAddressCache.has(cacheKey)) return isAddressCache.get(cacheKey)!\n\n  const result = (() => {\n    if (!addressRegex.test(address)) return false\n    if (address.toLowerCase() === address) return true\n    if (strict) return checksumAddress(address as Address) === address\n    return true\n  })()\n  isAddressCache.set(cacheKey, result)\n  return result\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\nexport type ConcatReturnType<value extends Hex | ByteArray> = value extends Hex\n  ? Hex\n  : ByteArray\n\nexport type ConcatErrorType =\n  | ConcatBytesErrorType\n  | ConcatHexErrorType\n  | ErrorType\n\nexport function concat<value extends Hex | ByteArray>(\n  values: readonly value[],\n): ConcatReturnType<value> {\n  if (typeof values[0] === 'string')\n    return concatHex(values as readonly Hex[]) as ConcatReturnType<value>\n  return concatBytes(values as readonly ByteArray[]) as ConcatReturnType<value>\n}\n\nexport type ConcatBytesErrorType = ErrorType\n\nexport function concatBytes(values: readonly ByteArray[]): ByteArray {\n  let length = 0\n  for (const arr of values) {\n    length += arr.length\n  }\n  const result = new Uint8Array(length)\n  let offset = 0\n  for (const arr of values) {\n    result.set(arr, offset)\n    offset += arr.length\n  }\n  return result\n}\n\nexport type ConcatHexErrorType = ErrorType\n\nexport function concatHex(values: readonly Hex[]): Hex {\n  return `0x${(values as Hex[]).reduce(\n    (acc, x) => acc + x.replace('0x', ''),\n    '',\n  )}`\n}\n", "import {\n  SliceOffsetOutOfBoundsError,\n  type SliceOffsetOutOfBoundsErrorType,\n} from '../../errors/data.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\n\nimport { type IsHexErrorType, isHex } from './isHex.js'\nimport { type SizeErrorType, size } from './size.js'\n\nexport type SliceReturnType<value extends ByteArray | Hex> = value extends Hex\n  ? Hex\n  : ByteArray\n\nexport type SliceErrorType =\n  | IsHexErrorType\n  | SliceBytesErrorType\n  | SliceHexErrorType\n  | ErrorType\n\n/**\n * @description Returns a section of the hex or byte array given a start/end bytes offset.\n *\n * @param value The hex or byte array to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nexport function slice<value extends ByteArray | Hex>(\n  value: value,\n  start?: number | undefined,\n  end?: number | undefined,\n  { strict }: { strict?: boolean | undefined } = {},\n): SliceReturnType<value> {\n  if (isHex(value, { strict: false }))\n    return sliceHex(value as Hex, start, end, {\n      strict,\n    }) as SliceReturnType<value>\n  return sliceBytes(value as ByteArray, start, end, {\n    strict,\n  }) as SliceReturnType<value>\n}\n\nexport type AssertStartOffsetErrorType =\n  | SliceOffsetOutOfBoundsErrorType\n  | SizeErrorType\n  | ErrorType\n\nfunction assertStartOffset(value: Hex | ByteArray, start?: number | undefined) {\n  if (typeof start === 'number' && start > 0 && start > size(value) - 1)\n    throw new SliceOffsetOutOfBoundsError({\n      offset: start,\n      position: 'start',\n      size: size(value),\n    })\n}\n\nexport type AssertEndOffsetErrorType =\n  | SliceOffsetOutOfBoundsErrorType\n  | SizeErrorType\n  | ErrorType\n\nfunction assertEndOffset(\n  value: Hex | ByteArray,\n  start?: number | undefined,\n  end?: number | undefined,\n) {\n  if (\n    typeof start === 'number' &&\n    typeof end === 'number' &&\n    size(value) !== end - start\n  ) {\n    throw new SliceOffsetOutOfBoundsError({\n      offset: end,\n      position: 'end',\n      size: size(value),\n    })\n  }\n}\n\nexport type SliceBytesErrorType =\n  | AssertStartOffsetErrorType\n  | AssertEndOffsetErrorType\n  | ErrorType\n\n/**\n * @description Returns a section of the byte array given a start/end bytes offset.\n *\n * @param value The byte array to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nexport function sliceBytes(\n  value_: ByteArray,\n  start?: number | undefined,\n  end?: number | undefined,\n  { strict }: { strict?: boolean | undefined } = {},\n): ByteArray {\n  assertStartOffset(value_, start)\n  const value = value_.slice(start, end)\n  if (strict) assertEndOffset(value, start, end)\n  return value\n}\n\nexport type SliceHexErrorType =\n  | AssertStartOffsetErrorType\n  | AssertEndOffsetErrorType\n  | ErrorType\n\n/**\n * @description Returns a section of the hex value given a start/end bytes offset.\n *\n * @param value The hex value to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nexport function sliceHex(\n  value_: Hex,\n  start?: number | undefined,\n  end?: number | undefined,\n  { strict }: { strict?: boolean | undefined } = {},\n): Hex {\n  assertStartOffset(value_, start)\n  const value = `0x${value_\n    .replace('0x', '')\n    .slice((start ?? 0) * 2, (end ?? value_.length) * 2)}` as const\n  if (strict) assertEndOffset(value, start, end)\n  return value\n}\n", "export const arrayRegex = /^(.*)\\[([0-9]*)\\]$/\n\n// `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n// https://regexr.com/6va55\nexport const bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/\n\n// `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nexport const integerRegex =\n  /^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/\n", "import type {\n  AbiParameter,\n  AbiParameterKind,\n  AbiParametersToPrimitiveTypes,\n  AbiParameterToPrimitiveType,\n} from 'abitype'\n\nimport {\n  AbiEncodingArrayLengthMismatchError,\n  type AbiEncodingArrayLengthMismatchErrorType,\n  AbiEncodingBytesSizeMismatchError,\n  type AbiEncodingBytesSizeMismatchErrorType,\n  AbiEncodingLengthMismatchError,\n  type AbiEncodingLengthMismatchErrorType,\n  InvalidAbiEncodingTypeError,\n  type InvalidAbiEncodingTypeErrorType,\n  InvalidArrayError,\n  type InvalidArrayErrorType,\n} from '../../errors/abi.js'\nimport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport { BaseError } from '../../errors/base.js'\nimport { IntegerOutOfRangeError } from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport { type ConcatErrorType, concat } from '../data/concat.js'\nimport { type PadHexErrorType, padHex } from '../data/pad.js'\nimport { type SizeErrorType, size } from '../data/size.js'\nimport { type SliceErrorType, slice } from '../data/slice.js'\nimport {\n  type BoolToHexErrorType,\n  boolToHex,\n  type NumberToHexErrorType,\n  numberToHex,\n  type StringToHexErrorType,\n  stringToHex,\n} from '../encoding/toHex.js'\nimport { integerRegex } from '../regex.js'\n\nexport type EncodeAbiParametersReturnType = Hex\n\nexport type EncodeAbiParametersErrorType =\n  | AbiEncodingLengthMismatchErrorType\n  | PrepareParamsErrorType\n  | EncodeParamsErrorType\n  | ErrorType\n\n/**\n * @description Encodes a list of primitive values into an ABI-encoded hex value.\n *\n * - Docs: https://viem.sh/docs/abi/encodeAbiParameters#encodeabiparameters\n *\n *   Generates ABI encoded data using the [ABI specification](https://docs.soliditylang.org/en/latest/abi-spec), given a set of ABI parameters (inputs/outputs) and their corresponding values.\n *\n * @param params - a set of ABI Parameters (params), that can be in the shape of the inputs or outputs attribute of an ABI Item.\n * @param values - a set of values (values) that correspond to the given params.\n * @example\n * ```typescript\n * import { encodeAbiParameters } from 'viem'\n *\n * const encodedData = encodeAbiParameters(\n *   [\n *     { name: 'x', type: 'string' },\n *     { name: 'y', type: 'uint' },\n *     { name: 'z', type: 'bool' }\n *   ],\n *   ['wagmi', 420n, true]\n * )\n * ```\n *\n * You can also pass in Human Readable parameters with the parseAbiParameters utility.\n *\n * @example\n * ```typescript\n * import { encodeAbiParameters, parseAbiParameters } from 'viem'\n *\n * const encodedData = encodeAbiParameters(\n *   parseAbiParameters('string x, uint y, bool z'),\n *   ['wagmi', 420n, true]\n * )\n * ```\n */\nexport function encodeAbiParameters<\n  const params extends readonly AbiParameter[] | readonly unknown[],\n>(\n  params: params,\n  values: params extends readonly AbiParameter[]\n    ? AbiParametersToPrimitiveTypes<params, AbiParameterKind, true>\n    : never,\n): EncodeAbiParametersReturnType {\n  if (params.length !== values.length)\n    throw new AbiEncodingLengthMismatchError({\n      expectedLength: params.length as number,\n      givenLength: values.length as any,\n    })\n  // Prepare the parameters to determine dynamic types to encode.\n  const preparedParams = prepareParams({\n    params: params as readonly AbiParameter[],\n    values: values as any,\n  })\n  const data = encodeParams(preparedParams)\n  if (data.length === 0) return '0x'\n  return data\n}\n\n/////////////////////////////////////////////////////////////////\n\ntype PreparedParam = { dynamic: boolean; encoded: Hex }\n\ntype TupleAbiParameter = AbiParameter & { components: readonly AbiParameter[] }\ntype Tuple = AbiParameterToPrimitiveType<TupleAbiParameter>\n\ntype PrepareParamsErrorType = PrepareParamErrorType | ErrorType\n\nfunction prepareParams<const params extends readonly AbiParameter[]>({\n  params,\n  values,\n}: {\n  params: params\n  values: AbiParametersToPrimitiveTypes<params>\n}) {\n  const preparedParams: PreparedParam[] = []\n  for (let i = 0; i < params.length; i++) {\n    preparedParams.push(prepareParam({ param: params[i], value: values[i] }))\n  }\n  return preparedParams\n}\n\ntype PrepareParamErrorType =\n  | EncodeAddressErrorType\n  | EncodeArrayErrorType\n  | EncodeBytesErrorType\n  | EncodeBoolErrorType\n  | EncodeNumberErrorType\n  | EncodeStringErrorType\n  | EncodeTupleErrorType\n  | GetArrayComponentsErrorType\n  | InvalidAbiEncodingTypeErrorType\n  | ErrorType\n\nfunction prepareParam<const param extends AbiParameter>({\n  param,\n  value,\n}: {\n  param: param\n  value: AbiParameterToPrimitiveType<param>\n}): PreparedParam {\n  const arrayComponents = getArrayComponents(param.type)\n  if (arrayComponents) {\n    const [length, type] = arrayComponents\n    return encodeArray(value, { length, param: { ...param, type } })\n  }\n  if (param.type === 'tuple') {\n    return encodeTuple(value as unknown as Tuple, {\n      param: param as TupleAbiParameter,\n    })\n  }\n  if (param.type === 'address') {\n    return encodeAddress(value as unknown as Hex)\n  }\n  if (param.type === 'bool') {\n    return encodeBool(value as unknown as boolean)\n  }\n  if (param.type.startsWith('uint') || param.type.startsWith('int')) {\n    const signed = param.type.startsWith('int')\n    const [, , size = '256'] = integerRegex.exec(param.type) ?? []\n    return encodeNumber(value as unknown as number, {\n      signed,\n      size: Number(size),\n    })\n  }\n  if (param.type.startsWith('bytes')) {\n    return encodeBytes(value as unknown as Hex, { param })\n  }\n  if (param.type === 'string') {\n    return encodeString(value as unknown as string)\n  }\n  throw new InvalidAbiEncodingTypeError(param.type, {\n    docsPath: '/docs/contract/encodeAbiParameters',\n  })\n}\n\n/////////////////////////////////////////////////////////////////\n\ntype EncodeParamsErrorType = NumberToHexErrorType | SizeErrorType | ErrorType\n\nfunction encodeParams(preparedParams: PreparedParam[]): Hex {\n  // 1. Compute the size of the static part of the parameters.\n  let staticSize = 0\n  for (let i = 0; i < preparedParams.length; i++) {\n    const { dynamic, encoded } = preparedParams[i]\n    if (dynamic) staticSize += 32\n    else staticSize += size(encoded)\n  }\n\n  // 2. Split the parameters into static and dynamic parts.\n  const staticParams: Hex[] = []\n  const dynamicParams: Hex[] = []\n  let dynamicSize = 0\n  for (let i = 0; i < preparedParams.length; i++) {\n    const { dynamic, encoded } = preparedParams[i]\n    if (dynamic) {\n      staticParams.push(numberToHex(staticSize + dynamicSize, { size: 32 }))\n      dynamicParams.push(encoded)\n      dynamicSize += size(encoded)\n    } else {\n      staticParams.push(encoded)\n    }\n  }\n\n  // 3. Concatenate static and dynamic parts.\n  return concat([...staticParams, ...dynamicParams])\n}\n\n/////////////////////////////////////////////////////////////////\n\ntype EncodeAddressErrorType =\n  | InvalidAddressErrorType\n  | IsAddressErrorType\n  | ErrorType\n\nfunction encodeAddress(value: Hex): PreparedParam {\n  if (!isAddress(value)) throw new InvalidAddressError({ address: value })\n  return { dynamic: false, encoded: padHex(value.toLowerCase() as Hex) }\n}\n\ntype EncodeArrayErrorType =\n  | AbiEncodingArrayLengthMismatchErrorType\n  | ConcatErrorType\n  | EncodeParamsErrorType\n  | InvalidArrayErrorType\n  | NumberToHexErrorType\n  // TODO: Add back once circular type reference is resolved\n  // | PrepareParamErrorType\n  | ErrorType\n\nfunction encodeArray<const param extends AbiParameter>(\n  value: AbiParameterToPrimitiveType<param>,\n  {\n    length,\n    param,\n  }: {\n    length: number | null\n    param: param\n  },\n): PreparedParam {\n  const dynamic = length === null\n\n  if (!Array.isArray(value)) throw new InvalidArrayError(value)\n  if (!dynamic && value.length !== length)\n    throw new AbiEncodingArrayLengthMismatchError({\n      expectedLength: length!,\n      givenLength: value.length,\n      type: `${param.type}[${length}]`,\n    })\n\n  let dynamicChild = false\n  const preparedParams: PreparedParam[] = []\n  for (let i = 0; i < value.length; i++) {\n    const preparedParam = prepareParam({ param, value: value[i] })\n    if (preparedParam.dynamic) dynamicChild = true\n    preparedParams.push(preparedParam)\n  }\n\n  if (dynamic || dynamicChild) {\n    const data = encodeParams(preparedParams)\n    if (dynamic) {\n      const length = numberToHex(preparedParams.length, { size: 32 })\n      return {\n        dynamic: true,\n        encoded: preparedParams.length > 0 ? concat([length, data]) : length,\n      }\n    }\n    if (dynamicChild) return { dynamic: true, encoded: data }\n  }\n  return {\n    dynamic: false,\n    encoded: concat(preparedParams.map(({ encoded }) => encoded)),\n  }\n}\n\ntype EncodeBytesErrorType =\n  | AbiEncodingBytesSizeMismatchErrorType\n  | ConcatErrorType\n  | PadHexErrorType\n  | NumberToHexErrorType\n  | SizeErrorType\n  | ErrorType\n\nfunction encodeBytes<const param extends AbiParameter>(\n  value: Hex,\n  { param }: { param: param },\n): PreparedParam {\n  const [, paramSize] = param.type.split('bytes')\n  const bytesSize = size(value)\n  if (!paramSize) {\n    let value_ = value\n    // If the size is not divisible by 32 bytes, pad the end\n    // with empty bytes to the ceiling 32 bytes.\n    if (bytesSize % 32 !== 0)\n      value_ = padHex(value_, {\n        dir: 'right',\n        size: Math.ceil((value.length - 2) / 2 / 32) * 32,\n      })\n    return {\n      dynamic: true,\n      encoded: concat([padHex(numberToHex(bytesSize, { size: 32 })), value_]),\n    }\n  }\n  if (bytesSize !== Number.parseInt(paramSize, 10))\n    throw new AbiEncodingBytesSizeMismatchError({\n      expectedSize: Number.parseInt(paramSize, 10),\n      value,\n    })\n  return { dynamic: false, encoded: padHex(value, { dir: 'right' }) }\n}\n\ntype EncodeBoolErrorType = PadHexErrorType | BoolToHexErrorType | ErrorType\n\nfunction encodeBool(value: boolean): PreparedParam {\n  if (typeof value !== 'boolean')\n    throw new BaseError(\n      `Invalid boolean value: \"${value}\" (type: ${typeof value}). Expected: \\`true\\` or \\`false\\`.`,\n    )\n  return { dynamic: false, encoded: padHex(boolToHex(value)) }\n}\n\ntype EncodeNumberErrorType = NumberToHexErrorType | ErrorType\n\nfunction encodeNumber(\n  value: number,\n  { signed, size = 256 }: { signed: boolean; size?: number | undefined },\n): PreparedParam {\n  if (typeof size === 'number') {\n    const max = 2n ** (BigInt(size) - (signed ? 1n : 0n)) - 1n\n    const min = signed ? -max - 1n : 0n\n    if (value > max || value < min)\n      throw new IntegerOutOfRangeError({\n        max: max.toString(),\n        min: min.toString(),\n        signed,\n        size: size / 8,\n        value: value.toString(),\n      })\n  }\n  return {\n    dynamic: false,\n    encoded: numberToHex(value, {\n      size: 32,\n      signed,\n    }),\n  }\n}\n\ntype EncodeStringErrorType =\n  | ConcatErrorType\n  | NumberToHexErrorType\n  | PadHexErrorType\n  | SizeErrorType\n  | SliceErrorType\n  | StringToHexErrorType\n  | ErrorType\n\nfunction encodeString(value: string): PreparedParam {\n  const hexValue = stringToHex(value)\n  const partsLength = Math.ceil(size(hexValue) / 32)\n  const parts: Hex[] = []\n  for (let i = 0; i < partsLength; i++) {\n    parts.push(\n      padHex(slice(hexValue, i * 32, (i + 1) * 32), {\n        dir: 'right',\n      }),\n    )\n  }\n  return {\n    dynamic: true,\n    encoded: concat([\n      padHex(numberToHex(size(hexValue), { size: 32 })),\n      ...parts,\n    ]),\n  }\n}\n\ntype EncodeTupleErrorType =\n  | ConcatErrorType\n  | EncodeParamsErrorType\n  // TODO: Add back once circular type reference is resolved\n  // | PrepareParamErrorType\n  | ErrorType\n\nfunction encodeTuple<\n  const param extends AbiParameter & { components: readonly AbiParameter[] },\n>(\n  value: AbiParameterToPrimitiveType<param>,\n  { param }: { param: param },\n): PreparedParam {\n  let dynamic = false\n  const preparedParams: PreparedParam[] = []\n  for (let i = 0; i < param.components.length; i++) {\n    const param_ = param.components[i]\n    const index = Array.isArray(value) ? i : param_.name\n    const preparedParam = prepareParam({\n      param: param_,\n      value: (value as any)[index!] as readonly unknown[],\n    })\n    preparedParams.push(preparedParam)\n    if (preparedParam.dynamic) dynamic = true\n  }\n  return {\n    dynamic,\n    encoded: dynamic\n      ? encodeParams(preparedParams)\n      : concat(preparedParams.map(({ encoded }) => encoded)),\n  }\n}\n\ntype GetArrayComponentsErrorType = ErrorType\n\nexport function getArrayComponents(\n  type: string,\n): [length: number | null, innerType: string] | undefined {\n  const matches = type.match(/^(.*)\\[(\\d+)?\\]$/)\n  return matches\n    ? // Return `null` if the array is dynamic.\n      [matches[2] ? Number(matches[2]) : null, matches[1]]\n    : undefined\n}\n", "import type { AbiFunction } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport { type SliceErrorType, slice } from '../data/slice.js'\nimport {\n  type ToSignatureHashErrorType,\n  toSignatureHash,\n} from './toSignatureHash.js'\n\nexport type ToFunctionSelectorErrorType =\n  | ToSignatureHashErrorType\n  | SliceErrorType\n  | ErrorType\n\n/**\n * Returns the function selector for a given function definition.\n *\n * @example\n * const selector = toFunctionSelector('function ownerOf(uint256 tokenId)')\n * // 0x6352211e\n */\nexport const toFunctionSelector = (fn: string | AbiFunction) =>\n  slice(toSignatureHash(fn), 0, 4)\n", "import type { Abi, AbiParameter, Address } from 'abitype'\n\nimport {\n  AbiItemAmbiguityError,\n  type AbiItemAmbiguityErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  AbiItem,\n  AbiItemArgs,\n  AbiItemName,\n  ExtractAbiItemForArgs,\n  Widen,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { UnionEvaluate } from '../../types/utils.js'\nimport { type IsHexErrorType, isHex } from '../../utils/data/isHex.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport { toEventSelector } from '../hash/toEventSelector.js'\nimport {\n  type ToFunctionSelectorErrorType,\n  toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\n\nexport type GetAbiItemParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  name extends AbiItemName<abi> = AbiItemName<abi>,\n  args extends AbiItemArgs<abi, name> | undefined = AbiItemArgs<abi, name>,\n  ///\n  allArgs = AbiItemArgs<abi, name>,\n  allNames = AbiItemName<abi>,\n> = {\n  abi: abi\n  name:\n    | allNames // show all options\n    | (name extends allNames ? name : never) // infer value\n    | Hex // function selector\n} & UnionEvaluate<\n  readonly [] extends allArgs\n    ? {\n        args?:\n          | allArgs // show all options\n          // infer value, widen inferred value of `args` conditionally to match `allArgs`\n          | (abi extends Abi\n              ? args extends allArgs\n                ? Widen<args>\n                : never\n              : never)\n          | undefined\n      }\n    : {\n        args?:\n          | allArgs // show all options\n          | (Widen<args> & (args extends allArgs ? unknown : never)) // infer value, widen inferred value of `args` match `allArgs` (e.g. avoid union `args: readonly [123n] | readonly [bigint]`)\n          | undefined\n      }\n>\n\nexport type GetAbiItemErrorType =\n  | IsArgOfTypeErrorType\n  | IsHexErrorType\n  | ToFunctionSelectorErrorType\n  | AbiItemAmbiguityErrorType\n  | ErrorType\n\nexport type GetAbiItemReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  name extends AbiItemName<abi> = AbiItemName<abi>,\n  args extends AbiItemArgs<abi, name> | undefined = AbiItemArgs<abi, name>,\n> = abi extends Abi\n  ? Abi extends abi\n    ? AbiItem | undefined\n    : ExtractAbiItemForArgs<\n        abi,\n        name,\n        args extends AbiItemArgs<abi, name> ? args : AbiItemArgs<abi, name>\n      >\n  : AbiItem | undefined\n\nexport function getAbiItem<\n  const abi extends Abi | readonly unknown[],\n  name extends AbiItemName<abi>,\n  const args extends AbiItemArgs<abi, name> | undefined = undefined,\n>(\n  parameters: GetAbiItemParameters<abi, name, args>,\n): GetAbiItemReturnType<abi, name, args> {\n  const { abi, args = [], name } = parameters as unknown as GetAbiItemParameters\n\n  const isSelector = isHex(name, { strict: false })\n  const abiItems = (abi as Abi).filter((abiItem) => {\n    if (isSelector) {\n      if (abiItem.type === 'function')\n        return toFunctionSelector(abiItem) === name\n      if (abiItem.type === 'event') return toEventSelector(abiItem) === name\n      return false\n    }\n    return 'name' in abiItem && abiItem.name === name\n  })\n\n  if (abiItems.length === 0)\n    return undefined as GetAbiItemReturnType<abi, name, args>\n  if (abiItems.length === 1)\n    return abiItems[0] as GetAbiItemReturnType<abi, name, args>\n\n  let matchedAbiItem: AbiItem | undefined\n  for (const abiItem of abiItems) {\n    if (!('inputs' in abiItem)) continue\n    if (!args || args.length === 0) {\n      if (!abiItem.inputs || abiItem.inputs.length === 0)\n        return abiItem as GetAbiItemReturnType<abi, name, args>\n      continue\n    }\n    if (!abiItem.inputs) continue\n    if (abiItem.inputs.length === 0) continue\n    if (abiItem.inputs.length !== args.length) continue\n    const matched = args.every((arg, index) => {\n      const abiParameter = 'inputs' in abiItem && abiItem.inputs![index]\n      if (!abiParameter) return false\n      return isArgOfType(arg, abiParameter)\n    })\n    if (matched) {\n      // Check for ambiguity against already matched parameters (e.g. `address` vs `bytes20`).\n      if (\n        matchedAbiItem &&\n        'inputs' in matchedAbiItem &&\n        matchedAbiItem.inputs\n      ) {\n        const ambiguousTypes = getAmbiguousTypes(\n          abiItem.inputs,\n          matchedAbiItem.inputs,\n          args as readonly unknown[],\n        )\n        if (ambiguousTypes)\n          throw new AbiItemAmbiguityError(\n            {\n              abiItem,\n              type: ambiguousTypes[0],\n            },\n            {\n              abiItem: matchedAbiItem,\n              type: ambiguousTypes[1],\n            },\n          )\n      }\n\n      matchedAbiItem = abiItem\n    }\n  }\n\n  if (matchedAbiItem)\n    return matchedAbiItem as GetAbiItemReturnType<abi, name, args>\n  return abiItems[0] as GetAbiItemReturnType<abi, name, args>\n}\n\ntype IsArgOfTypeErrorType = IsAddressErrorType | ErrorType\n\n/** @internal */\nexport function isArgOfType(arg: unknown, abiParameter: AbiParameter): boolean {\n  const argType = typeof arg\n  const abiParameterType = abiParameter.type\n  switch (abiParameterType) {\n    case 'address':\n      return isAddress(arg as Address, { strict: false })\n    case 'bool':\n      return argType === 'boolean'\n    case 'function':\n      return argType === 'string'\n    case 'string':\n      return argType === 'string'\n    default: {\n      if (abiParameterType === 'tuple' && 'components' in abiParameter)\n        return Object.values(abiParameter.components).every(\n          (component, index) => {\n            return (\n              argType === 'object' &&\n              isArgOfType(\n                Object.values(arg as unknown[] | Record<string, unknown>)[\n                  index\n                ],\n                component as AbiParameter,\n              )\n            )\n          },\n        )\n\n      // `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n      // https://regexr.com/6v8hp\n      if (\n        /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(\n          abiParameterType,\n        )\n      )\n        return argType === 'number' || argType === 'bigint'\n\n      // `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n      // https://regexr.com/6va55\n      if (/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(abiParameterType))\n        return argType === 'string' || arg instanceof Uint8Array\n\n      // fixed-length (`<type>[M]`) and dynamic (`<type>[]`) arrays\n      // https://regexr.com/6va6i\n      if (/[a-z]+[1-9]{0,3}(\\[[0-9]{0,}\\])+$/.test(abiParameterType)) {\n        return (\n          Array.isArray(arg) &&\n          arg.every((x: unknown) =>\n            isArgOfType(x, {\n              ...abiParameter,\n              // Pop off `[]` or `[M]` from end of type\n              type: abiParameterType.replace(/(\\[[0-9]{0,}\\])$/, ''),\n            } as AbiParameter),\n          )\n        )\n      }\n\n      return false\n    }\n  }\n}\n\n/** @internal */\nexport function getAmbiguousTypes(\n  sourceParameters: readonly AbiParameter[],\n  targetParameters: readonly AbiParameter[],\n  args: AbiItemArgs,\n): AbiParameter['type'][] | undefined {\n  for (const parameterIndex in sourceParameters) {\n    const sourceParameter = sourceParameters[parameterIndex]\n    const targetParameter = targetParameters[parameterIndex]\n\n    if (\n      sourceParameter.type === 'tuple' &&\n      targetParameter.type === 'tuple' &&\n      'components' in sourceParameter &&\n      'components' in targetParameter\n    )\n      return getAmbiguousTypes(\n        sourceParameter.components,\n        targetParameter.components,\n        (args as any)[parameterIndex],\n      )\n\n    const types = [sourceParameter.type, targetParameter.type]\n\n    const ambiguous = (() => {\n      if (types.includes('address') && types.includes('bytes20')) return true\n      if (types.includes('address') && types.includes('string'))\n        return isAddress(args[parameterIndex] as Address, { strict: false })\n      if (types.includes('address') && types.includes('bytes'))\n        return isAddress(args[parameterIndex] as Address, { strict: false })\n      return false\n    })()\n\n    if (ambiguous) return types\n  }\n\n  return\n}\n", "import type {\n  Abi,\n  AbiParameter,\n  AbiParameterToPrimitiveType,\n  ExtractAbiEvents,\n} from 'abitype'\n\nimport {\n  AbiEventNotFoundError,\n  type AbiEventNotFoundErrorType,\n} from '../../errors/abi.js'\nimport {\n  FilterTypeNotSupportedError,\n  type FilterTypeNotSupportedErrorType,\n} from '../../errors/log.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractEventArgs,\n  ContractEventName,\n  EventDefinition,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n  type ToEventSelectorErrorType,\n  toEventSelector,\n} from '../hash/toEventSelector.js'\nimport {\n  type EncodeAbiParametersErrorType,\n  encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeEventTopics'\n\nexport type EncodeEventTopicsParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined = ContractEventName<abi>,\n  ///\n  hasEvents = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [ExtractAbiEvents<abi>] extends [never]\n        ? false\n        : true\n    : true,\n  allArgs = ContractEventArgs<\n    abi,\n    eventName extends ContractEventName<abi>\n      ? eventName\n      : ContractEventName<abi>\n  >,\n  allErrorNames = ContractEventName<abi>,\n> = {\n  abi: abi\n  args?: allArgs | undefined\n} & UnionEvaluate<\n  IsNarrowable<abi, Abi> extends true\n    ? abi['length'] extends 1\n      ? { eventName?: eventName | allErrorNames | undefined }\n      : { eventName: eventName | allErrorNames }\n    : { eventName?: eventName | allErrorNames | undefined }\n> &\n  (hasEvents extends true ? unknown : never)\n\nexport type EncodeEventTopicsReturnType = [Hex, ...(Hex | Hex[] | null)[]]\n\nexport type EncodeEventTopicsErrorType =\n  | AbiEventNotFoundErrorType\n  | EncodeArgErrorType\n  | FormatAbiItemErrorType\n  | GetAbiItemErrorType\n  | ToEventSelectorErrorType\n  | ErrorType\n\nexport function encodeEventTopics<\n  const abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi> | undefined = undefined,\n>(\n  parameters: EncodeEventTopicsParameters<abi, eventName>,\n): EncodeEventTopicsReturnType {\n  const { abi, eventName, args } = parameters as EncodeEventTopicsParameters\n\n  let abiItem = abi[0]\n  if (eventName) {\n    const item = getAbiItem({ abi, name: eventName })\n    if (!item) throw new AbiEventNotFoundError(eventName, { docsPath })\n    abiItem = item\n  }\n\n  if (abiItem.type !== 'event')\n    throw new AbiEventNotFoundError(undefined, { docsPath })\n\n  const definition = formatAbiItem(abiItem)\n  const signature = toEventSelector(definition as EventDefinition)\n\n  let topics: (Hex | Hex[] | null)[] = []\n  if (args && 'inputs' in abiItem) {\n    const indexedInputs = abiItem.inputs?.filter(\n      (param) => 'indexed' in param && param.indexed,\n    )\n    const args_ = Array.isArray(args)\n      ? args\n      : Object.values(args).length > 0\n        ? (indexedInputs?.map((x: any) => (args as any)[x.name]) ?? [])\n        : []\n\n    if (args_.length > 0) {\n      topics =\n        indexedInputs?.map((param, i) => {\n          if (Array.isArray(args_[i]))\n            return args_[i].map((_: any, j: number) =>\n              encodeArg({ param, value: args_[i][j] }),\n            )\n          return typeof args_[i] !== 'undefined' && args_[i] !== null\n            ? encodeArg({ param, value: args_[i] })\n            : null\n        }) ?? []\n    }\n  }\n  return [signature, ...topics]\n}\n\nexport type EncodeArgErrorType =\n  | Keccak256ErrorType\n  | ToBytesErrorType\n  | EncodeAbiParametersErrorType\n  | FilterTypeNotSupportedErrorType\n  | ErrorType\n\nfunction encodeArg({\n  param,\n  value,\n}: {\n  param: AbiParameter\n  value: AbiParameterToPrimitiveType<AbiParameter>\n}) {\n  if (param.type === 'string' || param.type === 'bytes')\n    return keccak256(toBytes(value as string))\n  if (param.type === 'tuple' || param.type.match(/^(.*)\\[(\\d+)?\\]$/))\n    throw new FilterTypeNotSupportedError(param.type)\n  return encodeAbiParameters([param], [value])\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { OnResponseFn } from '../../clients/transports/fallback.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { EIP1193RequestFn, PublicRpcSchema } from '../../types/eip1193.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { Filter } from '../../types/utils.js'\n\ntype CreateFilterRequestScopeParameters = {\n  method:\n    | 'eth_newFilter'\n    | 'eth_newPendingTransactionFilter'\n    | 'eth_newBlockFilter'\n}\n\ntype FilterRpcSchema = Filter<\n  PublicRpcSchema,\n  { Method: 'eth_getFilterLogs' | 'eth_getFilterChanges' }\n>\n\ntype CreateFilterRequestScopeReturnType = (\n  id: Hex,\n) => EIP1193RequestFn<FilterRpcSchema>\n\n/**\n * Scopes `request` to the filter ID. If the client is a fallback, it will\n * listen for responses and scope the child transport `request` function\n * to the successful filter ID.\n */\nexport function createFilterRequestScope<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { method }: CreateFilterRequestScopeParameters,\n): CreateFilterRequestScopeReturnType {\n  const requestMap: Record<Hex, EIP1193RequestFn> = {}\n\n  if (client.transport.type === 'fallback')\n    client.transport.onResponse?.(\n      ({\n        method: method_,\n        response: id,\n        status,\n        transport,\n      }: Parameters<OnResponseFn>[0]) => {\n        if (status === 'success' && method === method_)\n          requestMap[id as Hex] = transport.request\n      },\n    )\n\n  return ((id) =>\n    requestMap[id] || client.request) as CreateFilterRequestScopeReturnType\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractEventName,\n  MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Hex } from '../../types/misc.js'\nimport {\n  type EncodeEventTopicsErrorType,\n  type EncodeEventTopicsParameters,\n  encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreateContractEventFilterParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined = undefined,\n  args extends\n    | MaybeExtractEventArgsFromAbi<abi, eventName>\n    | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n  address?: Address | Address[] | undefined\n  abi: abi\n  eventName?: eventName | ContractEventName<abi> | undefined\n  fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n  /**\n   * Whether or not the logs must match the indexed/non-indexed arguments in the event ABI item.\n   * @default false\n   */\n  strict?: strict | boolean | undefined\n  toBlock?: toBlock | BlockNumber | BlockTag | undefined\n} & (undefined extends eventName\n  ? {\n      args?: undefined\n    }\n  : MaybeExtractEventArgsFromAbi<abi, eventName> extends infer eventFilterArgs\n    ? {\n        args?:\n          | eventFilterArgs\n          | (args extends eventFilterArgs ? args : never)\n          | undefined\n      }\n    : {\n        args?: undefined\n      })\n\nexport type CreateContractEventFilterReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined = undefined,\n  args extends\n    | MaybeExtractEventArgsFromAbi<abi, eventName>\n    | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = Filter<'event', abi, eventName, args, strict, fromBlock, toBlock>\n\nexport type CreateContractEventFilterErrorType =\n  | EncodeEventTopicsErrorType\n  | RequestErrorType\n  | NumberToHexErrorType\n  | ErrorType\n\n/**\n * Creates a Filter to retrieve event logs that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges) or [`getFilterLogs`](https://viem.sh/docs/actions/public/getFilterLogs).\n *\n * - Docs: https://viem.sh/docs/contract/createContractEventFilter\n *\n * @param client - Client to use\n * @param parameters - {@link CreateContractEventFilterParameters}\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateContractEventFilterReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createContractEventFilter } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createContractEventFilter(client, {\n *   abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n * })\n */\nexport async function createContractEventFilter<\n  chain extends Chain | undefined,\n  const abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi> | undefined,\n  args extends MaybeExtractEventArgsFromAbi<abi, eventName> | undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n  client: Client<Transport, chain>,\n  parameters: CreateContractEventFilterParameters<\n    abi,\n    eventName,\n    args,\n    strict,\n    fromBlock,\n    toBlock\n  >,\n): Promise<\n  CreateContractEventFilterReturnType<\n    abi,\n    eventName,\n    args,\n    strict,\n    fromBlock,\n    toBlock\n  >\n> {\n  const { address, abi, args, eventName, fromBlock, strict, toBlock } =\n    parameters as CreateContractEventFilterParameters\n\n  const getRequest = createFilterRequestScope(client, {\n    method: 'eth_newFilter',\n  })\n\n  const topics = eventName\n    ? encodeEventTopics({\n        abi,\n        args,\n        eventName,\n      } as unknown as EncodeEventTopicsParameters)\n    : undefined\n  const id: Hex = await client.request({\n    method: 'eth_newFilter',\n    params: [\n      {\n        address,\n        fromBlock:\n          typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n        toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n        topics,\n      },\n    ],\n  })\n\n  return {\n    abi,\n    args,\n    eventName,\n    id,\n    request: getRequest(id),\n    strict: Boolean(strict),\n    type: 'event',\n  } as unknown as CreateContractEventFilterReturnType<\n    abi,\n    eventName,\n    args,\n    strict,\n    fromBlock,\n    toBlock\n  >\n}\n", "import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../types.js'\n\nexport type ParseAccountErrorType = ErrorType\n\nexport function parseAccount<accountOrAddress extends Address | Account>(\n  account: accountOrAddress,\n): accountOrAddress extends Address ? Account : accountOrAddress {\n  if (typeof account === 'string')\n    return { address: account, type: 'json-rpc' } as any\n  return account as any\n}\n", "import type {\n  Abi,\n  AbiStateMutability,\n  ExtractAbiFunction,\n  ExtractAbiFunctions,\n} from 'abitype'\n\nimport {\n  AbiFunctionNotFoundError,\n  type AbiFunctionNotFoundErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport type { ConcatHexErrorType } from '../data/concat.js'\nimport {\n  type ToFunctionSelectorErrorType,\n  toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeFunctionData'\n\nexport type PrepareEncodeFunctionDataParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends\n    | ContractFunctionName<abi>\n    | undefined = ContractFunctionName<abi>,\n  ///\n  hasFunctions = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [ExtractAbiFunctions<abi>] extends [never]\n        ? false\n        : true\n    : true,\n  allArgs = ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  >,\n  allFunctionNames = ContractFunctionName<abi>,\n> = {\n  abi: abi\n} & UnionEvaluate<\n  IsNarrowable<abi, Abi> extends true\n    ? abi['length'] extends 1\n      ? { functionName?: functionName | allFunctionNames | Hex | undefined }\n      : { functionName: functionName | allFunctionNames | Hex }\n    : { functionName?: functionName | allFunctionNames | Hex | undefined }\n> &\n  UnionEvaluate<{ args?: allArgs | undefined }> &\n  (hasFunctions extends true ? unknown : never)\n\nexport type PrepareEncodeFunctionDataReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends\n    | ContractFunctionName<abi>\n    | undefined = ContractFunctionName<abi>,\n> = {\n  abi: abi extends Abi\n    ? functionName extends ContractFunctionName<abi>\n      ? [ExtractAbiFunction<abi, functionName>]\n      : abi\n    : Abi\n  functionName: Hex\n}\n\nexport type PrepareEncodeFunctionDataErrorType =\n  | AbiFunctionNotFoundErrorType\n  | ConcatHexErrorType\n  | FormatAbiItemErrorType\n  | GetAbiItemErrorType\n  | ToFunctionSelectorErrorType\n  | ErrorType\n\nexport function prepareEncodeFunctionData<\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi> | undefined = undefined,\n>(\n  parameters: PrepareEncodeFunctionDataParameters<abi, functionName>,\n): PrepareEncodeFunctionDataReturnType<abi, functionName> {\n  const { abi, args, functionName } =\n    parameters as PrepareEncodeFunctionDataParameters\n\n  let abiItem = abi[0]\n  if (functionName) {\n    const item = getAbiItem({\n      abi,\n      args,\n      name: functionName,\n    })\n    if (!item) throw new AbiFunctionNotFoundError(functionName, { docsPath })\n    abiItem = item\n  }\n\n  if (abiItem.type !== 'function')\n    throw new AbiFunctionNotFoundError(undefined, { docsPath })\n\n  return {\n    abi: [abiItem],\n    functionName: toFunctionSelector(formatAbiItem(abiItem)),\n  } as unknown as PrepareEncodeFunctionDataReturnType<abi, functionName>\n}\n", "import type { Abi, AbiStateMutability, ExtractAbiFunctions } from 'abitype'\n\nimport type { AbiFunctionNotFoundErrorType } from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport type { ToFunctionSelectorErrorType } from '../hash/toFunctionSelector.js'\nimport {\n  type EncodeAbiParametersErrorType,\n  encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport type { FormatAbiItemErrorType } from './formatAbiItem.js'\nimport type { GetAbiItemErrorType } from './getAbiItem.js'\nimport { prepareEncodeFunctionData } from './prepareEncodeFunctionData.js'\n\nexport type EncodeFunctionDataParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends\n    | ContractFunctionName<abi>\n    | Hex\n    | undefined = ContractFunctionName<abi>,\n  ///\n  hasFunctions = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [ExtractAbiFunctions<abi>] extends [never]\n        ? false\n        : true\n    : true,\n  allArgs = ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  >,\n  allFunctionNames = ContractFunctionName<abi>,\n> = {\n  abi: abi\n} & UnionEvaluate<\n  IsNarrowable<abi, Abi> extends true\n    ? abi['length'] extends 1\n      ? { functionName?: functionName | allFunctionNames | Hex | undefined }\n      : { functionName: functionName | allFunctionNames | Hex }\n    : { functionName?: functionName | allFunctionNames | Hex | undefined }\n> &\n  UnionEvaluate<\n    readonly [] extends allArgs\n      ? { args?: allArgs | undefined }\n      : { args: allArgs }\n  > &\n  (hasFunctions extends true ? unknown : never)\n\nexport type EncodeFunctionDataReturnType = Hex\n\nexport type EncodeFunctionDataErrorType =\n  | AbiFunctionNotFoundErrorType\n  | ConcatHexErrorType\n  | EncodeAbiParametersErrorType\n  | FormatAbiItemErrorType\n  | GetAbiItemErrorType\n  | ToFunctionSelectorErrorType\n  | ErrorType\n\nexport function encodeFunctionData<\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi> | undefined = undefined,\n>(\n  parameters: EncodeFunctionDataParameters<abi, functionName>,\n): EncodeFunctionDataReturnType {\n  const { args } = parameters as EncodeFunctionDataParameters\n\n  const { abi, functionName } = (() => {\n    if (\n      parameters.abi.length === 1 &&\n      parameters.functionName?.startsWith('0x')\n    )\n      return parameters as { abi: Abi; functionName: Hex }\n    return prepareEncodeFunctionData(parameters)\n  })()\n\n  const abiItem = abi[0]\n  const signature = functionName\n\n  const data =\n    'inputs' in abiItem && abiItem.inputs\n      ? encodeAbiParameters(abiItem.inputs, args ?? [])\n      : undefined\n  return concatHex([signature, data ?? '0x'])\n}\n", "import type { AbiError } from 'abitype'\n\n// https://docs.soliditylang.org/en/v0.8.16/control-structures.html#panic-via-assert-and-error-via-require\nexport const panicReasons = {\n  1: 'An `assert` condition failed.',\n  17: 'Arithmetic operation resulted in underflow or overflow.',\n  18: 'Division or modulo by zero (e.g. `5 / 0` or `23 % 0`).',\n  33: 'Attempted to convert to an invalid type.',\n  34: 'Attempted to access a storage byte array that is incorrectly encoded.',\n  49: 'Performed `.pop()` on an empty array',\n  50: 'Array index is out of bounds.',\n  65: 'Allocated too much memory or created an array which is too large.',\n  81: 'Attempted to call a zero-initialized variable of internal function type.',\n} as const\n\nexport const solidityError: AbiError = {\n  inputs: [\n    {\n      name: 'message',\n      type: 'string',\n    },\n  ],\n  name: 'Error',\n  type: 'error',\n}\nexport const solidityPanic: AbiError = {\n  inputs: [\n    {\n      name: 'reason',\n      type: 'uint256',\n    },\n  ],\n  name: 'Panic',\n  type: 'error',\n}\n", "import { BaseError } from './base.js'\n\nexport type NegativeOffsetErrorType = NegativeOffsetError & {\n  name: 'NegativeOffsetError'\n}\nexport class NegativeOffsetError extends BaseError {\n  constructor({ offset }: { offset: number }) {\n    super(`Offset \\`${offset}\\` cannot be negative.`, {\n      name: 'NegativeOffsetError',\n    })\n  }\n}\n\nexport type PositionOutOfBoundsErrorType = PositionOutOfBoundsError & {\n  name: 'PositionOutOfBoundsError'\n}\nexport class PositionOutOfBoundsError extends BaseError {\n  constructor({ length, position }: { length: number; position: number }) {\n    super(\n      `Position \\`${position}\\` is out of bounds (\\`0 < position < ${length}\\`).`,\n      { name: 'PositionOutOfBoundsError' },\n    )\n  }\n}\n\nexport type RecursiveReadLimitExceededErrorType =\n  RecursiveReadLimitExceededError & {\n    name: 'RecursiveReadLimitExceededError'\n  }\nexport class RecursiveReadLimitExceededError extends BaseError {\n  constructor({ count, limit }: { count: number; limit: number }) {\n    super(\n      `Recursive read limit of \\`${limit}\\` exceeded (recursive read count: \\`${count}\\`).`,\n      { name: 'RecursiveReadLimitExceededError' },\n    )\n  }\n}\n", "import {\n  NegativeOffsetError,\n  type NegativeOffsetErrorType,\n  PositionOutOfBoundsError,\n  type PositionOutOfBoundsErrorType,\n  RecursiveReadLimitExceededError,\n  type RecursiveReadLimitExceededErrorType,\n} from '../errors/cursor.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { ByteArray } from '../types/misc.js'\n\nexport type Cursor = {\n  bytes: ByteArray\n  dataView: DataView\n  position: number\n  positionReadCount: Map<number, number>\n  recursiveReadCount: number\n  recursiveReadLimit: number\n  remaining: number\n  assertReadLimit(position?: number): void\n  assertPosition(position: number): void\n  decrementPosition(offset: number): void\n  getReadCount(position?: number): number\n  incrementPosition(offset: number): void\n  inspectByte(position?: number): ByteArray[number]\n  inspectBytes(length: number, position?: number): ByteArray\n  inspectUint8(position?: number): number\n  inspectUint16(position?: number): number\n  inspectUint24(position?: number): number\n  inspectUint32(position?: number): number\n  pushByte(byte: ByteArray[number]): void\n  pushBytes(bytes: ByteArray): void\n  pushUint8(value: number): void\n  pushUint16(value: number): void\n  pushUint24(value: number): void\n  pushUint32(value: number): void\n  readByte(): ByteArray[number]\n  readBytes(length: number, size?: number): ByteArray\n  readUint8(): number\n  readUint16(): number\n  readUint24(): number\n  readUint32(): number\n  setPosition(position: number): () => void\n  _touch(): void\n}\n\ntype CursorErrorType =\n  | CursorAssertPositionErrorType\n  | CursorDecrementPositionErrorType\n  | CursorIncrementPositionErrorType\n  | ErrorType\n\ntype CursorAssertPositionErrorType = PositionOutOfBoundsErrorType | ErrorType\n\ntype CursorDecrementPositionErrorType = NegativeOffsetErrorType | ErrorType\n\ntype CursorIncrementPositionErrorType = NegativeOffsetErrorType | ErrorType\n\ntype StaticCursorErrorType =\n  | NegativeOffsetErrorType\n  | RecursiveReadLimitExceededErrorType\n\nconst staticCursor: Cursor = {\n  bytes: new Uint8Array(),\n  dataView: new DataView(new ArrayBuffer(0)),\n  position: 0,\n  positionReadCount: new Map(),\n  recursiveReadCount: 0,\n  recursiveReadLimit: Number.POSITIVE_INFINITY,\n  assertReadLimit() {\n    if (this.recursiveReadCount >= this.recursiveReadLimit)\n      throw new RecursiveReadLimitExceededError({\n        count: this.recursiveReadCount + 1,\n        limit: this.recursiveReadLimit,\n      })\n  },\n  assertPosition(position) {\n    if (position < 0 || position > this.bytes.length - 1)\n      throw new PositionOutOfBoundsError({\n        length: this.bytes.length,\n        position,\n      })\n  },\n  decrementPosition(offset) {\n    if (offset < 0) throw new NegativeOffsetError({ offset })\n    const position = this.position - offset\n    this.assertPosition(position)\n    this.position = position\n  },\n  getReadCount(position) {\n    return this.positionReadCount.get(position || this.position) || 0\n  },\n  incrementPosition(offset) {\n    if (offset < 0) throw new NegativeOffsetError({ offset })\n    const position = this.position + offset\n    this.assertPosition(position)\n    this.position = position\n  },\n  inspectByte(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position)\n    return this.bytes[position]\n  },\n  inspectBytes(length, position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + length - 1)\n    return this.bytes.subarray(position, position + length)\n  },\n  inspectUint8(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position)\n    return this.bytes[position]\n  },\n  inspectUint16(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + 1)\n    return this.dataView.getUint16(position)\n  },\n  inspectUint24(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + 2)\n    return (\n      (this.dataView.getUint16(position) << 8) +\n      this.dataView.getUint8(position + 2)\n    )\n  },\n  inspectUint32(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + 3)\n    return this.dataView.getUint32(position)\n  },\n  pushByte(byte: ByteArray[number]) {\n    this.assertPosition(this.position)\n    this.bytes[this.position] = byte\n    this.position++\n  },\n  pushBytes(bytes: ByteArray) {\n    this.assertPosition(this.position + bytes.length - 1)\n    this.bytes.set(bytes, this.position)\n    this.position += bytes.length\n  },\n  pushUint8(value: number) {\n    this.assertPosition(this.position)\n    this.bytes[this.position] = value\n    this.position++\n  },\n  pushUint16(value: number) {\n    this.assertPosition(this.position + 1)\n    this.dataView.setUint16(this.position, value)\n    this.position += 2\n  },\n  pushUint24(value: number) {\n    this.assertPosition(this.position + 2)\n    this.dataView.setUint16(this.position, value >> 8)\n    this.dataView.setUint8(this.position + 2, value & ~4294967040)\n    this.position += 3\n  },\n  pushUint32(value: number) {\n    this.assertPosition(this.position + 3)\n    this.dataView.setUint32(this.position, value)\n    this.position += 4\n  },\n  readByte() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectByte()\n    this.position++\n    return value\n  },\n  readBytes(length, size) {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectBytes(length)\n    this.position += size ?? length\n    return value\n  },\n  readUint8() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint8()\n    this.position += 1\n    return value\n  },\n  readUint16() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint16()\n    this.position += 2\n    return value\n  },\n  readUint24() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint24()\n    this.position += 3\n    return value\n  },\n  readUint32() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint32()\n    this.position += 4\n    return value\n  },\n  get remaining() {\n    return this.bytes.length - this.position\n  },\n  setPosition(position) {\n    const oldPosition = this.position\n    this.assertPosition(position)\n    this.position = position\n    return () => (this.position = oldPosition)\n  },\n  _touch() {\n    if (this.recursiveReadLimit === Number.POSITIVE_INFINITY) return\n    const count = this.getReadCount()\n    this.positionReadCount.set(this.position, count + 1)\n    if (count > 0) this.recursiveReadCount++\n  },\n}\n\ntype CursorConfig = { recursiveReadLimit?: number | undefined }\n\nexport type CreateCursorErrorType =\n  | CursorErrorType\n  | StaticCursorErrorType\n  | ErrorType\n\nexport function createCursor(\n  bytes: ByteArray,\n  { recursiveReadLimit = 8_192 }: CursorConfig = {},\n): Cursor {\n  const cursor: Cursor = Object.create(staticCursor)\n  cursor.bytes = bytes\n  cursor.dataView = new DataView(\n    bytes.buffer ?? bytes,\n    bytes.byteOffset,\n    bytes.byteLength,\n  )\n  cursor.positionReadCount = new Map()\n  cursor.recursiveReadLimit = recursiveReadLimit\n  return cursor\n}\n", "import { InvalidBytesBooleanError } from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type TrimErrorType, trim } from '../data/trim.js'\n\nimport {\n  type AssertSizeErrorType,\n  assertSize,\n  type HexToBigIntErrorType,\n  type HexToNumberErrorType,\n  hexToBigInt,\n  hexToNumber,\n} from './fromHex.js'\nimport { type BytesToHexErrorType, bytesToHex } from './toHex.js'\n\nexport type FromBytesParameters<\n  to extends 'string' | 'hex' | 'bigint' | 'number' | 'boolean',\n> =\n  | to\n  | {\n      /** Size of the bytes. */\n      size?: number | undefined\n      /** Type to convert to. */\n      to: to\n    }\n\nexport type FromBytesReturnType<to> = to extends 'string'\n  ? string\n  : to extends 'hex'\n    ? Hex\n    : to extends 'bigint'\n      ? bigint\n      : to extends 'number'\n        ? number\n        : to extends 'boolean'\n          ? boolean\n          : never\n\nexport type FromBytesErrorType =\n  | BytesToHexErrorType\n  | BytesToBigIntErrorType\n  | BytesToBoolErrorType\n  | BytesToNumberErrorType\n  | BytesToStringErrorType\n  | ErrorType\n\n/**\n * Decodes a byte array into a UTF-8 string, hex value, number, bigint or boolean.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes\n * - Example: https://viem.sh/docs/utilities/fromBytes#usage\n *\n * @param bytes Byte array to decode.\n * @param toOrOpts Type to convert to or options.\n * @returns Decoded value.\n *\n * @example\n * import { fromBytes } from 'viem'\n * const data = fromBytes(new Uint8Array([1, 164]), 'number')\n * // 420\n *\n * @example\n * import { fromBytes } from 'viem'\n * const data = fromBytes(\n *   new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]),\n *   'string'\n * )\n * // 'Hello world'\n */\nexport function fromBytes<\n  to extends 'string' | 'hex' | 'bigint' | 'number' | 'boolean',\n>(\n  bytes: ByteArray,\n  toOrOpts: FromBytesParameters<to>,\n): FromBytesReturnType<to> {\n  const opts = typeof toOrOpts === 'string' ? { to: toOrOpts } : toOrOpts\n  const to = opts.to\n\n  if (to === 'number')\n    return bytesToNumber(bytes, opts) as FromBytesReturnType<to>\n  if (to === 'bigint')\n    return bytesToBigInt(bytes, opts) as FromBytesReturnType<to>\n  if (to === 'boolean')\n    return bytesToBool(bytes, opts) as FromBytesReturnType<to>\n  if (to === 'string')\n    return bytesToString(bytes, opts) as FromBytesReturnType<to>\n  return bytesToHex(bytes, opts) as FromBytesReturnType<to>\n}\n\nexport type BytesToBigIntOpts = {\n  /** Whether or not the number of a signed representation. */\n  signed?: boolean | undefined\n  /** Size of the bytes. */\n  size?: number | undefined\n}\n\nexport type BytesToBigIntErrorType =\n  | BytesToHexErrorType\n  | HexToBigIntErrorType\n  | ErrorType\n\n/**\n * Decodes a byte array into a bigint.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes#bytestobigint\n *\n * @param bytes Byte array to decode.\n * @param opts Options.\n * @returns BigInt value.\n *\n * @example\n * import { bytesToBigInt } from 'viem'\n * const data = bytesToBigInt(new Uint8Array([1, 164]))\n * // 420n\n */\nexport function bytesToBigInt(\n  bytes: ByteArray,\n  opts: BytesToBigIntOpts = {},\n): bigint {\n  if (typeof opts.size !== 'undefined') assertSize(bytes, { size: opts.size })\n  const hex = bytesToHex(bytes, opts)\n  return hexToBigInt(hex, opts)\n}\n\nexport type BytesToBoolOpts = {\n  /** Size of the bytes. */\n  size?: number | undefined\n}\n\nexport type BytesToBoolErrorType =\n  | AssertSizeErrorType\n  | TrimErrorType\n  | ErrorType\n\n/**\n * Decodes a byte array into a boolean.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes#bytestobool\n *\n * @param bytes Byte array to decode.\n * @param opts Options.\n * @returns Boolean value.\n *\n * @example\n * import { bytesToBool } from 'viem'\n * const data = bytesToBool(new Uint8Array([1]))\n * // true\n */\nexport function bytesToBool(\n  bytes_: ByteArray,\n  opts: BytesToBoolOpts = {},\n): boolean {\n  let bytes = bytes_\n  if (typeof opts.size !== 'undefined') {\n    assertSize(bytes, { size: opts.size })\n    bytes = trim(bytes)\n  }\n  if (bytes.length > 1 || bytes[0] > 1)\n    throw new InvalidBytesBooleanError(bytes)\n  return Boolean(bytes[0])\n}\n\nexport type BytesToNumberOpts = BytesToBigIntOpts\n\nexport type BytesToNumberErrorType =\n  | BytesToHexErrorType\n  | HexToNumberErrorType\n  | ErrorType\n\n/**\n * Decodes a byte array into a number.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes#bytestonumber\n *\n * @param bytes Byte array to decode.\n * @param opts Options.\n * @returns Number value.\n *\n * @example\n * import { bytesToNumber } from 'viem'\n * const data = bytesToNumber(new Uint8Array([1, 164]))\n * // 420\n */\nexport function bytesToNumber(\n  bytes: ByteArray,\n  opts: BytesToNumberOpts = {},\n): number {\n  if (typeof opts.size !== 'undefined') assertSize(bytes, { size: opts.size })\n  const hex = bytesToHex(bytes, opts)\n  return hexToNumber(hex, opts)\n}\n\nexport type BytesToStringOpts = {\n  /** Size of the bytes. */\n  size?: number | undefined\n}\n\nexport type BytesToStringErrorType =\n  | AssertSizeErrorType\n  | TrimErrorType\n  | ErrorType\n\n/**\n * Decodes a byte array into a UTF-8 string.\n *\n * - Docs: https://viem.sh/docs/utilities/fromBytes#bytestostring\n *\n * @param bytes Byte array to decode.\n * @param opts Options.\n * @returns String value.\n *\n * @example\n * import { bytesToString } from 'viem'\n * const data = bytesToString(new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // 'Hello world'\n */\nexport function bytesToString(\n  bytes_: ByteArray,\n  opts: BytesToStringOpts = {},\n): string {\n  let bytes = bytes_\n  if (typeof opts.size !== 'undefined') {\n    assertSize(bytes, { size: opts.size })\n    bytes = trim(bytes, { dir: 'right' })\n  }\n  return new TextDecoder().decode(bytes)\n}\n", "import type {\n  AbiParameter,\n  AbiParameterKind,\n  AbiParametersToPrimitiveTypes,\n} from 'abitype'\nimport {\n  AbiDecodingDataSizeTooSmallError,\n  AbiDecodingZeroDataError,\n  InvalidAbiDecodingTypeError,\n  type InvalidAbiDecodingTypeErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n  type ChecksumAddressErrorType,\n  checksumAddress,\n} from '../address/getAddress.js'\nimport {\n  type CreateCursorErrorType,\n  type Cursor,\n  createCursor,\n} from '../cursor.js'\nimport { type SizeErrorType, size } from '../data/size.js'\nimport { type SliceBytesErrorType, sliceBytes } from '../data/slice.js'\nimport { type TrimErrorType, trim } from '../data/trim.js'\nimport {\n  type BytesToBigIntErrorType,\n  type BytesToBoolErrorType,\n  type BytesToNumberErrorType,\n  type BytesToStringErrorType,\n  bytesToBigInt,\n  bytesToBool,\n  bytesToNumber,\n  bytesToString,\n} from '../encoding/fromBytes.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { getArrayComponents } from './encodeAbiParameters.js'\n\nexport type DecodeAbiParametersReturnType<\n  params extends readonly AbiParameter[] = readonly AbiParameter[],\n> = AbiParametersToPrimitiveTypes<\n  params extends readonly AbiParameter[] ? params : AbiParameter[],\n  AbiParameterKind,\n  true\n>\n\nexport type DecodeAbiParametersErrorType =\n  | HexToBytesErrorType\n  | BytesToHexErrorType\n  | DecodeParameterErrorType\n  | SizeErrorType\n  | CreateCursorErrorType\n  | ErrorType\n\nexport function decodeAbiParameters<\n  const params extends readonly AbiParameter[],\n>(\n  params: params,\n  data: ByteArray | Hex,\n): DecodeAbiParametersReturnType<params> {\n  const bytes = typeof data === 'string' ? hexToBytes(data) : data\n  const cursor = createCursor(bytes)\n\n  if (size(bytes) === 0 && params.length > 0)\n    throw new AbiDecodingZeroDataError()\n  if (size(data) && size(data) < 32)\n    throw new AbiDecodingDataSizeTooSmallError({\n      data: typeof data === 'string' ? data : bytesToHex(data),\n      params: params as readonly AbiParameter[],\n      size: size(data),\n    })\n\n  let consumed = 0\n  const values = []\n  for (let i = 0; i < params.length; ++i) {\n    const param = params[i]\n    cursor.setPosition(consumed)\n    const [data, consumed_] = decodeParameter(cursor, param, {\n      staticPosition: 0,\n    })\n    consumed += consumed_\n    values.push(data)\n  }\n  return values as never\n}\n\ntype DecodeParameterErrorType =\n  | DecodeArrayErrorType\n  | DecodeTupleErrorType\n  | DecodeAddressErrorType\n  | DecodeBoolErrorType\n  | DecodeBytesErrorType\n  | DecodeNumberErrorType\n  | DecodeStringErrorType\n  | InvalidAbiDecodingTypeErrorType\n\nfunction decodeParameter(\n  cursor: Cursor,\n  param: AbiParameter,\n  { staticPosition }: { staticPosition: number },\n) {\n  const arrayComponents = getArrayComponents(param.type)\n  if (arrayComponents) {\n    const [length, type] = arrayComponents\n    return decodeArray(cursor, { ...param, type }, { length, staticPosition })\n  }\n  if (param.type === 'tuple')\n    return decodeTuple(cursor, param as TupleAbiParameter, { staticPosition })\n\n  if (param.type === 'address') return decodeAddress(cursor)\n  if (param.type === 'bool') return decodeBool(cursor)\n  if (param.type.startsWith('bytes'))\n    return decodeBytes(cursor, param, { staticPosition })\n  if (param.type.startsWith('uint') || param.type.startsWith('int'))\n    return decodeNumber(cursor, param)\n  if (param.type === 'string') return decodeString(cursor, { staticPosition })\n  throw new InvalidAbiDecodingTypeError(param.type, {\n    docsPath: '/docs/contract/decodeAbiParameters',\n  })\n}\n\n////////////////////////////////////////////////////////////////////\n// Type Decoders\n\nconst sizeOfLength = 32\nconst sizeOfOffset = 32\n\ntype DecodeAddressErrorType =\n  | ChecksumAddressErrorType\n  | BytesToHexErrorType\n  | SliceBytesErrorType\n  | ErrorType\n\nfunction decodeAddress(cursor: Cursor) {\n  const value = cursor.readBytes(32)\n  return [checksumAddress(bytesToHex(sliceBytes(value, -20))), 32]\n}\n\ntype DecodeArrayErrorType = BytesToNumberErrorType | ErrorType\n\nfunction decodeArray(\n  cursor: Cursor,\n  param: AbiParameter,\n  { length, staticPosition }: { length: number | null; staticPosition: number },\n) {\n  // If the length of the array is not known in advance (dynamic array),\n  // this means we will need to wonder off to the pointer and decode.\n  if (!length) {\n    // Dealing with a dynamic type, so get the offset of the array data.\n    const offset = bytesToNumber(cursor.readBytes(sizeOfOffset))\n\n    // Start is the static position of current slot + offset.\n    const start = staticPosition + offset\n    const startOfData = start + sizeOfLength\n\n    // Get the length of the array from the offset.\n    cursor.setPosition(start)\n    const length = bytesToNumber(cursor.readBytes(sizeOfLength))\n\n    // Check if the array has any dynamic children.\n    const dynamicChild = hasDynamicChild(param)\n\n    let consumed = 0\n    const value: unknown[] = []\n    for (let i = 0; i < length; ++i) {\n      // If any of the children is dynamic, then all elements will be offset pointer, thus size of one slot (32 bytes).\n      // Otherwise, elements will be the size of their encoding (consumed bytes).\n      cursor.setPosition(startOfData + (dynamicChild ? i * 32 : consumed))\n      const [data, consumed_] = decodeParameter(cursor, param, {\n        staticPosition: startOfData,\n      })\n      consumed += consumed_\n      value.push(data)\n    }\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [value, 32]\n  }\n\n  // If the length of the array is known in advance,\n  // and the length of an element deeply nested in the array is not known,\n  // we need to decode the offset of the array data.\n  if (hasDynamicChild(param)) {\n    // Dealing with dynamic types, so get the offset of the array data.\n    const offset = bytesToNumber(cursor.readBytes(sizeOfOffset))\n\n    // Start is the static position of current slot + offset.\n    const start = staticPosition + offset\n\n    const value: unknown[] = []\n    for (let i = 0; i < length; ++i) {\n      // Move cursor along to the next slot (next offset pointer).\n      cursor.setPosition(start + i * 32)\n      const [data] = decodeParameter(cursor, param, {\n        staticPosition: start,\n      })\n      value.push(data)\n    }\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [value, 32]\n  }\n\n  // If the length of the array is known in advance and the array is deeply static,\n  // then we can just decode each element in sequence.\n  let consumed = 0\n  const value: unknown[] = []\n  for (let i = 0; i < length; ++i) {\n    const [data, consumed_] = decodeParameter(cursor, param, {\n      staticPosition: staticPosition + consumed,\n    })\n    consumed += consumed_\n    value.push(data)\n  }\n  return [value, consumed]\n}\n\ntype DecodeBoolErrorType = BytesToBoolErrorType | ErrorType\n\nfunction decodeBool(cursor: Cursor) {\n  return [bytesToBool(cursor.readBytes(32), { size: 32 }), 32]\n}\n\ntype DecodeBytesErrorType =\n  | BytesToNumberErrorType\n  | BytesToHexErrorType\n  | ErrorType\n\nfunction decodeBytes(\n  cursor: Cursor,\n  param: AbiParameter,\n  { staticPosition }: { staticPosition: number },\n) {\n  const [_, size] = param.type.split('bytes')\n  if (!size) {\n    // Dealing with dynamic types, so get the offset of the bytes data.\n    const offset = bytesToNumber(cursor.readBytes(32))\n\n    // Set position of the cursor to start of bytes data.\n    cursor.setPosition(staticPosition + offset)\n\n    const length = bytesToNumber(cursor.readBytes(32))\n\n    // If there is no length, we have zero data.\n    if (length === 0) {\n      // As we have gone wondering, restore to the original position + next slot.\n      cursor.setPosition(staticPosition + 32)\n      return ['0x', 32]\n    }\n\n    const data = cursor.readBytes(length)\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [bytesToHex(data), 32]\n  }\n\n  const value = bytesToHex(cursor.readBytes(Number.parseInt(size, 10), 32))\n  return [value, 32]\n}\n\ntype DecodeNumberErrorType =\n  | BytesToNumberErrorType\n  | BytesToBigIntErrorType\n  | ErrorType\n\nfunction decodeNumber(cursor: Cursor, param: AbiParameter) {\n  const signed = param.type.startsWith('int')\n  const size = Number.parseInt(param.type.split('int')[1] || '256', 10)\n  const value = cursor.readBytes(32)\n  return [\n    size > 48\n      ? bytesToBigInt(value, { signed })\n      : bytesToNumber(value, { signed }),\n    32,\n  ]\n}\n\ntype TupleAbiParameter = AbiParameter & { components: readonly AbiParameter[] }\n\ntype DecodeTupleErrorType = BytesToNumberErrorType | ErrorType\n\nfunction decodeTuple(\n  cursor: Cursor,\n  param: TupleAbiParameter,\n  { staticPosition }: { staticPosition: number },\n) {\n  // Tuples can have unnamed components (i.e. they are arrays), so we must\n  // determine whether the tuple is named or unnamed. In the case of a named\n  // tuple, the value will be an object where each property is the name of the\n  // component. In the case of an unnamed tuple, the value will be an array.\n  const hasUnnamedChild =\n    param.components.length === 0 || param.components.some(({ name }) => !name)\n\n  // Initialize the value to an object or an array, depending on whether the\n  // tuple is named or unnamed.\n  const value: any = hasUnnamedChild ? [] : {}\n  let consumed = 0\n\n  // If the tuple has a dynamic child, we must first decode the offset to the\n  // tuple data.\n  if (hasDynamicChild(param)) {\n    // Dealing with dynamic types, so get the offset of the tuple data.\n    const offset = bytesToNumber(cursor.readBytes(sizeOfOffset))\n\n    // Start is the static position of referencing slot + offset.\n    const start = staticPosition + offset\n\n    for (let i = 0; i < param.components.length; ++i) {\n      const component = param.components[i]\n      cursor.setPosition(start + consumed)\n      const [data, consumed_] = decodeParameter(cursor, component, {\n        staticPosition: start,\n      })\n      consumed += consumed_\n      value[hasUnnamedChild ? i : component?.name!] = data\n    }\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [value, 32]\n  }\n\n  // If the tuple has static children, we can just decode each component\n  // in sequence.\n  for (let i = 0; i < param.components.length; ++i) {\n    const component = param.components[i]\n    const [data, consumed_] = decodeParameter(cursor, component, {\n      staticPosition,\n    })\n    value[hasUnnamedChild ? i : component?.name!] = data\n    consumed += consumed_\n  }\n  return [value, consumed]\n}\n\ntype DecodeStringErrorType =\n  | BytesToNumberErrorType\n  | BytesToStringErrorType\n  | TrimErrorType\n  | ErrorType\n\nfunction decodeString(\n  cursor: Cursor,\n  { staticPosition }: { staticPosition: number },\n) {\n  // Get offset to start of string data.\n  const offset = bytesToNumber(cursor.readBytes(32))\n\n  // Start is the static position of current slot + offset.\n  const start = staticPosition + offset\n  cursor.setPosition(start)\n\n  const length = bytesToNumber(cursor.readBytes(32))\n\n  // If there is no length, we have zero data (empty string).\n  if (length === 0) {\n    cursor.setPosition(staticPosition + 32)\n    return ['', 32]\n  }\n\n  const data = cursor.readBytes(length, 32)\n  const value = bytesToString(trim(data))\n\n  // As we have gone wondering, restore to the original position + next slot.\n  cursor.setPosition(staticPosition + 32)\n\n  return [value, 32]\n}\n\nfunction hasDynamicChild(param: AbiParameter) {\n  const { type } = param\n  if (type === 'string') return true\n  if (type === 'bytes') return true\n  if (type.endsWith('[]')) return true\n\n  if (type === 'tuple') return (param as any).components?.some(hasDynamicChild)\n\n  const arrayComponents = getArrayComponents(param.type)\n  if (\n    arrayComponents &&\n    hasDynamicChild({ ...param, type: arrayComponents[1] } as AbiParameter)\n  )\n    return true\n\n  return false\n}\n", "import type { Abi, ExtractAbiError } from 'abitype'\n\nimport { solidityError, solidityPanic } from '../../constants/solidity.js'\nimport {\n  AbiDecodingZeroDataError,\n  type AbiDecodingZeroDataErrorType,\n  AbiErrorSignatureNotFoundError,\n  type AbiErrorSignatureNotFoundErrorType,\n} from '../../errors/abi.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  AbiItem,\n  ContractErrorArgs,\n  ContractErrorName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { slice } from '../data/slice.js'\nimport {\n  type ToFunctionSelectorErrorType,\n  toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\nimport {\n  type DecodeAbiParametersErrorType,\n  decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\n\nexport type DecodeErrorResultParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n> = { abi?: abi | undefined; data: Hex; cause?: BaseError | Error | undefined }\n\nexport type DecodeErrorResultReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  ///\n  allErrorNames extends ContractErrorName<abi> = ContractErrorName<abi>,\n> = IsNarrowable<abi, Abi> extends true\n  ? UnionEvaluate<\n      {\n        [errorName in allErrorNames]: {\n          abiItem: abi extends Abi\n            ? Abi extends abi\n              ? AbiItem\n              : ExtractAbiError<abi, errorName>\n            : AbiItem\n          args: ContractErrorArgs<abi, errorName>\n          errorName: errorName\n        }\n      }[allErrorNames]\n    >\n  : {\n      abiItem: AbiItem\n      args: readonly unknown[] | undefined\n      errorName: string\n    }\n\nexport type DecodeErrorResultErrorType =\n  | AbiDecodingZeroDataErrorType\n  | AbiErrorSignatureNotFoundErrorType\n  | DecodeAbiParametersErrorType\n  | FormatAbiItemErrorType\n  | ToFunctionSelectorErrorType\n  | ErrorType\n\nexport function decodeErrorResult<const abi extends Abi | readonly unknown[]>(\n  parameters: DecodeErrorResultParameters<abi>,\n): DecodeErrorResultReturnType<abi> {\n  const { abi, data, cause } = parameters as DecodeErrorResultParameters\n\n  const signature = slice(data, 0, 4)\n  if (signature === '0x') throw new AbiDecodingZeroDataError({ cause })\n\n  const abi_ = [...(abi || []), solidityError, solidityPanic]\n  const abiItem = abi_.find(\n    (x) =>\n      x.type === 'error' && signature === toFunctionSelector(formatAbiItem(x)),\n  )\n  if (!abiItem)\n    throw new AbiErrorSignatureNotFoundError(signature, {\n      docsPath: '/docs/contract/decodeErrorResult',\n      cause,\n    })\n  return {\n    abiItem,\n    args:\n      'inputs' in abiItem && abiItem.inputs && abiItem.inputs.length > 0\n        ? decodeAbiParameters(abiItem.inputs, slice(data, 4))\n        : undefined,\n    errorName: (abiItem as { name: string }).name,\n  } as DecodeErrorResultReturnType<abi>\n}\n", "import type { ErrorType } from '../errors/utils.js'\n\nexport type StringifyErrorType = ErrorType\n\nexport const stringify: typeof JSON.stringify = (value, replacer, space) =>\n  JSON.stringify(\n    value,\n    (key, value_) => {\n      const value = typeof value_ === 'bigint' ? value_.toString() : value_\n      return typeof replacer === 'function' ? replacer(key, value) : value\n    },\n    space,\n  )\n", "import type { AbiParameter } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { AbiItem } from '../../types/contract.js'\nimport { stringify } from '../stringify.js'\n\nexport type FormatAbiItemWithArgsErrorType = ErrorType\n\nexport function formatAbiItemWithArgs({\n  abiItem,\n  args,\n  includeFunctionName = true,\n  includeName = false,\n}: {\n  abiItem: AbiItem\n  args: readonly unknown[]\n  includeFunctionName?: boolean | undefined\n  includeName?: boolean | undefined\n}) {\n  if (!('name' in abiItem)) return\n  if (!('inputs' in abiItem)) return\n  if (!abiItem.inputs) return\n  return `${includeFunctionName ? abiItem.name : ''}(${abiItem.inputs\n    .map(\n      (input: AbiParameter, i: number) =>\n        `${includeName && input.name ? `${input.name}: ` : ''}${\n          typeof args[i] === 'object' ? stringify(args[i]) : args[i]\n        }`,\n    )\n    .join(', ')})`\n}\n", "export const etherUnits = {\n  gwei: 9,\n  wei: 18,\n}\nexport const gweiUnits = {\n  ether: -9,\n  wei: 9,\n}\nexport const weiUnits = {\n  ether: -18,\n  gwei: -9,\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\nexport type FormatUnitsErrorType = ErrorType\n\n/**\n *  Divides a number by a given exponent of base 10 (10exponent), and formats it into a string representation of the number..\n *\n * - Docs: https://viem.sh/docs/utilities/formatUnits\n *\n * @example\n * import { formatUnits } from 'viem'\n *\n * formatUnits(420000000000n, 9)\n * // '420'\n */\nexport function formatUnits(value: bigint, decimals: number) {\n  let display = value.toString()\n\n  const negative = display.startsWith('-')\n  if (negative) display = display.slice(1)\n\n  display = display.padStart(decimals, '0')\n\n  let [integer, fraction] = [\n    display.slice(0, display.length - decimals),\n    display.slice(display.length - decimals),\n  ]\n  fraction = fraction.replace(/(0+)$/, '')\n  return `${negative ? '-' : ''}${integer || '0'}${\n    fraction ? `.${fraction}` : ''\n  }`\n}\n", "import { etherUnits } from '../../constants/unit.js'\n\nimport { type FormatUnitsErrorType, formatUnits } from './formatUnits.js'\n\nexport type FormatEtherErrorType = FormatUnitsErrorType\n\n/**\n * Converts numerical wei to a string representation of ether.\n *\n * - Docs: https://viem.sh/docs/utilities/formatEther\n *\n * @example\n * import { formatEther } from 'viem'\n *\n * formatEther(1000000000000000000n)\n * // '1'\n */\nexport function formatEther(wei: bigint, unit: 'wei' | 'gwei' = 'wei') {\n  return formatUnits(wei, etherUnits[unit])\n}\n", "import { gweiUnits } from '../../constants/unit.js'\n\nimport { type FormatUnitsErrorType, formatUnits } from './formatUnits.js'\n\nexport type FormatGweiErrorType = FormatUnitsErrorType\n\n/**\n * Converts numerical wei to a string representation of gwei.\n *\n * - Docs: https://viem.sh/docs/utilities/formatGwei\n *\n * @example\n * import { formatGwei } from 'viem'\n *\n * formatGwei(1000000000n)\n * // '1'\n */\nexport function formatGwei(wei: bigint, unit: 'wei' = 'wei') {\n  return formatUnits(wei, gweiUnits[unit])\n}\n", "import type { StateMapping, StateOverride } from '../types/stateOverride.js'\nimport { BaseError } from './base.js'\n\nexport type AccountStateConflictErrorType = AccountStateConflictError & {\n  name: 'AccountStateConflictError'\n}\n\nexport class AccountStateConflictError extends BaseError {\n  constructor({ address }: { address: string }) {\n    super(`State for account \"${address}\" is set multiple times.`, {\n      name: 'AccountStateConflictError',\n    })\n  }\n}\n\nexport type StateAssignmentConflictErrorType = StateAssignmentConflictError & {\n  name: 'StateAssignmentConflictError'\n}\n\nexport class StateAssignmentConflictError extends BaseError {\n  constructor() {\n    super('state and stateDiff are set on the same account.', {\n      name: 'StateAssignmentConflictError',\n    })\n  }\n}\n\n/** @internal */\nexport function prettyStateMapping(stateMapping: StateMapping) {\n  return stateMapping.reduce((pretty, { slot, value }) => {\n    return `${pretty}        ${slot}: ${value}\\n`\n  }, '')\n}\n\nexport function prettyStateOverride(stateOverride: StateOverride) {\n  return stateOverride\n    .reduce((pretty, { address, ...state }) => {\n      let val = `${pretty}    ${address}:\\n`\n      if (state.nonce) val += `      nonce: ${state.nonce}\\n`\n      if (state.balance) val += `      balance: ${state.balance}\\n`\n      if (state.code) val += `      code: ${state.code}\\n`\n      if (state.state) {\n        val += '      state:\\n'\n        val += prettyStateMapping(state.state)\n      }\n      if (state.stateDiff) {\n        val += '      stateDiff:\\n'\n        val += prettyStateMapping(state.stateDiff)\n      }\n      return val\n    }, '  State Override:\\n')\n    .slice(0, -1)\n}\n", "import type { Account } from '../accounts/types.js'\nimport type { SendTransactionParameters } from '../actions/wallet/sendTransaction.js'\nimport type { BlockTag } from '../types/block.js'\nimport type { Chain } from '../types/chain.js'\nimport type { Hash, Hex } from '../types/misc.js'\nimport type {\n  TransactionReceipt,\n  TransactionType,\n} from '../types/transaction.js'\nimport { formatEther } from '../utils/unit/formatEther.js'\nimport { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { BaseError } from './base.js'\n\nexport function prettyPrint(\n  args: Record<string, bigint | number | string | undefined | false | unknown>,\n) {\n  const entries = Object.entries(args)\n    .map(([key, value]) => {\n      if (value === undefined || value === false) return null\n      return [key, value]\n    })\n    .filter(Boolean) as [string, string][]\n  const maxLength = entries.reduce((acc, [key]) => Math.max(acc, key.length), 0)\n  return entries\n    .map(([key, value]) => `  ${`${key}:`.padEnd(maxLength + 1)}  ${value}`)\n    .join('\\n')\n}\n\nexport type FeeConflictErrorType = FeeConflictError & {\n  name: 'FeeConflictError'\n}\nexport class FeeConflictError extends BaseError {\n  constructor() {\n    super(\n      [\n        'Cannot specify both a `gasPrice` and a `maxFeePerGas`/`maxPriorityFeePerGas`.',\n        'Use `maxFeePerGas`/`maxPriorityFeePerGas` for EIP-1559 compatible networks, and `gasPrice` for others.',\n      ].join('\\n'),\n      { name: 'FeeConflictError' },\n    )\n  }\n}\n\nexport type InvalidLegacyVErrorType = InvalidLegacyVError & {\n  name: 'InvalidLegacyVError'\n}\nexport class InvalidLegacyVError extends BaseError {\n  constructor({ v }: { v: bigint }) {\n    super(`Invalid \\`v\\` value \"${v}\". Expected 27 or 28.`, {\n      name: 'InvalidLegacyVError',\n    })\n  }\n}\n\nexport type InvalidSerializableTransactionErrorType =\n  InvalidSerializableTransactionError & {\n    name: 'InvalidSerializableTransactionError'\n  }\nexport class InvalidSerializableTransactionError extends BaseError {\n  constructor({ transaction }: { transaction: Record<string, unknown> }) {\n    super('Cannot infer a transaction type from provided transaction.', {\n      metaMessages: [\n        'Provided Transaction:',\n        '{',\n        prettyPrint(transaction),\n        '}',\n        '',\n        'To infer the type, either provide:',\n        '- a `type` to the Transaction, or',\n        '- an EIP-1559 Transaction with `maxFeePerGas`, or',\n        '- an EIP-2930 Transaction with `gasPrice` & `accessList`, or',\n        '- an EIP-4844 Transaction with `blobs`, `blobVersionedHashes`, `sidecars`, or',\n        '- an EIP-7702 Transaction with `authorizationList`, or',\n        '- a Legacy Transaction with `gasPrice`',\n      ],\n      name: 'InvalidSerializableTransactionError',\n    })\n  }\n}\n\nexport type InvalidSerializedTransactionTypeErrorType =\n  InvalidSerializedTransactionTypeError & {\n    name: 'InvalidSerializedTransactionTypeError'\n  }\nexport class InvalidSerializedTransactionTypeError extends BaseError {\n  serializedType: Hex\n\n  constructor({ serializedType }: { serializedType: Hex }) {\n    super(`Serialized transaction type \"${serializedType}\" is invalid.`, {\n      name: 'InvalidSerializedTransactionType',\n    })\n\n    this.serializedType = serializedType\n  }\n}\n\nexport type InvalidSerializedTransactionErrorType =\n  InvalidSerializedTransactionError & {\n    name: 'InvalidSerializedTransactionError'\n  }\nexport class InvalidSerializedTransactionError extends BaseError {\n  serializedTransaction: Hex\n  type: TransactionType\n\n  constructor({\n    attributes,\n    serializedTransaction,\n    type,\n  }: {\n    attributes: Record<string, unknown>\n    serializedTransaction: Hex\n    type: TransactionType\n  }) {\n    const missing = Object.entries(attributes)\n      .map(([key, value]) => (typeof value === 'undefined' ? key : undefined))\n      .filter(Boolean)\n    super(`Invalid serialized transaction of type \"${type}\" was provided.`, {\n      metaMessages: [\n        `Serialized Transaction: \"${serializedTransaction}\"`,\n        missing.length > 0 ? `Missing Attributes: ${missing.join(', ')}` : '',\n      ].filter(Boolean),\n      name: 'InvalidSerializedTransactionError',\n    })\n\n    this.serializedTransaction = serializedTransaction\n    this.type = type\n  }\n}\n\nexport type InvalidStorageKeySizeErrorType = InvalidStorageKeySizeError & {\n  name: 'InvalidStorageKeySizeError'\n}\nexport class InvalidStorageKeySizeError extends BaseError {\n  constructor({ storageKey }: { storageKey: Hex }) {\n    super(\n      `Size for storage key \"${storageKey}\" is invalid. Expected 32 bytes. Got ${Math.floor(\n        (storageKey.length - 2) / 2,\n      )} bytes.`,\n      { name: 'InvalidStorageKeySizeError' },\n    )\n  }\n}\n\nexport type TransactionExecutionErrorType = TransactionExecutionError & {\n  name: 'TransactionExecutionError'\n}\nexport class TransactionExecutionError extends BaseError {\n  override cause: BaseError\n\n  constructor(\n    cause: BaseError,\n    {\n      account,\n      docsPath,\n      chain,\n      data,\n      gas,\n      gasPrice,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      nonce,\n      to,\n      value,\n    }: Omit<SendTransactionParameters, 'account' | 'chain'> & {\n      account: Account | null\n      chain?: Chain | undefined\n      docsPath?: string | undefined\n    },\n  ) {\n    const prettyArgs = prettyPrint({\n      chain: chain && `${chain?.name} (id: ${chain?.id})`,\n      from: account?.address,\n      to,\n      value:\n        typeof value !== 'undefined' &&\n        `${formatEther(value)} ${chain?.nativeCurrency?.symbol || 'ETH'}`,\n      data,\n      gas,\n      gasPrice:\n        typeof gasPrice !== 'undefined' && `${formatGwei(gasPrice)} gwei`,\n      maxFeePerGas:\n        typeof maxFeePerGas !== 'undefined' &&\n        `${formatGwei(maxFeePerGas)} gwei`,\n      maxPriorityFeePerGas:\n        typeof maxPriorityFeePerGas !== 'undefined' &&\n        `${formatGwei(maxPriorityFeePerGas)} gwei`,\n      nonce,\n    })\n\n    super(cause.shortMessage, {\n      cause,\n      docsPath,\n      metaMessages: [\n        ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n        'Request Arguments:',\n        prettyArgs,\n      ].filter(Boolean) as string[],\n      name: 'TransactionExecutionError',\n    })\n    this.cause = cause\n  }\n}\n\nexport type TransactionNotFoundErrorType = TransactionNotFoundError & {\n  name: 'TransactionNotFoundError'\n}\nexport class TransactionNotFoundError extends BaseError {\n  constructor({\n    blockHash,\n    blockNumber,\n    blockTag,\n    hash,\n    index,\n  }: {\n    blockHash?: Hash | undefined\n    blockNumber?: bigint | undefined\n    blockTag?: BlockTag | undefined\n    hash?: Hash | undefined\n    index?: number | undefined\n  }) {\n    let identifier = 'Transaction'\n    if (blockTag && index !== undefined)\n      identifier = `Transaction at block time \"${blockTag}\" at index \"${index}\"`\n    if (blockHash && index !== undefined)\n      identifier = `Transaction at block hash \"${blockHash}\" at index \"${index}\"`\n    if (blockNumber && index !== undefined)\n      identifier = `Transaction at block number \"${blockNumber}\" at index \"${index}\"`\n    if (hash) identifier = `Transaction with hash \"${hash}\"`\n    super(`${identifier} could not be found.`, {\n      name: 'TransactionNotFoundError',\n    })\n  }\n}\n\nexport type TransactionReceiptNotFoundErrorType =\n  TransactionReceiptNotFoundError & {\n    name: 'TransactionReceiptNotFoundError'\n  }\nexport class TransactionReceiptNotFoundError extends BaseError {\n  constructor({ hash }: { hash: Hash }) {\n    super(\n      `Transaction receipt with hash \"${hash}\" could not be found. The Transaction may not be processed on a block yet.`,\n      {\n        name: 'TransactionReceiptNotFoundError',\n      },\n    )\n  }\n}\n\nexport type TransactionReceiptRevertedErrorType =\n  TransactionReceiptRevertedError & {\n    name: 'TransactionReceiptRevertedError'\n  }\nexport class TransactionReceiptRevertedError extends BaseError {\n  receipt: TransactionReceipt\n\n  constructor({ receipt }: { receipt: TransactionReceipt }) {\n    super(`Transaction with hash \"${receipt.transactionHash}\" reverted.`, {\n      metaMessages: [\n        'The receipt marked the transaction as \"reverted\". This could mean that the function on the contract you are trying to call threw an error.',\n        ' ',\n        'You can attempt to extract the revert reason by:',\n        '- calling the `simulateContract` or `simulateCalls` Action with the `abi` and `functionName` of the contract',\n        '- using the `call` Action with raw `data`',\n      ],\n      name: 'TransactionReceiptRevertedError',\n    })\n\n    this.receipt = receipt\n  }\n}\n\nexport type WaitForTransactionReceiptTimeoutErrorType =\n  WaitForTransactionReceiptTimeoutError & {\n    name: 'WaitForTransactionReceiptTimeoutError'\n  }\nexport class WaitForTransactionReceiptTimeoutError extends BaseError {\n  constructor({ hash }: { hash: Hash }) {\n    super(\n      `Timed out while waiting for transaction with hash \"${hash}\" to be confirmed.`,\n      { name: 'WaitForTransactionReceiptTimeoutError' },\n    )\n  }\n}\n", "import type { Address } from 'abitype'\n\nexport type ErrorType<name extends string = 'Error'> = Error & { name: name }\n\nexport const getContractAddress = (address: Address) => address\nexport const getUrl = (url: string) => url\n", "import type { Abi, Address } from 'abitype'\n\nimport { parseAccount } from '../accounts/utils/parseAccount.js'\nimport type { CallParameters } from '../actions/public/call.js'\nimport { panicReasons } from '../constants/solidity.js'\nimport type { Chain } from '../types/chain.js'\nimport type { Hex } from '../types/misc.js'\nimport {\n  type DecodeErrorResultReturnType,\n  decodeErrorResult,\n} from '../utils/abi/decodeErrorResult.js'\nimport { formatAbiItem } from '../utils/abi/formatAbiItem.js'\nimport { formatAbiItemWithArgs } from '../utils/abi/formatAbiItemWithArgs.js'\nimport { getAbiItem } from '../utils/abi/getAbiItem.js'\nimport { formatEther } from '../utils/unit/formatEther.js'\nimport { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { AbiErrorSignatureNotFoundError } from './abi.js'\nimport { BaseError } from './base.js'\nimport { prettyStateOverride } from './stateOverride.js'\nimport { prettyPrint } from './transaction.js'\nimport { getContractAddress } from './utils.js'\n\nexport type CallExecutionErrorType = CallExecutionError & {\n  name: 'CallExecutionError'\n}\nexport class CallExecutionError extends BaseError {\n  override cause: BaseError\n\n  constructor(\n    cause: BaseError,\n    {\n      account: account_,\n      docsPath,\n      chain,\n      data,\n      gas,\n      gasPrice,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      nonce,\n      to,\n      value,\n      stateOverride,\n    }: CallParameters & {\n      chain?: Chain | undefined\n      docsPath?: string | undefined\n    },\n  ) {\n    const account = account_ ? parseAccount(account_) : undefined\n    let prettyArgs = prettyPrint({\n      from: account?.address,\n      to,\n      value:\n        typeof value !== 'undefined' &&\n        `${formatEther(value)} ${chain?.nativeCurrency?.symbol || 'ETH'}`,\n      data,\n      gas,\n      gasPrice:\n        typeof gasPrice !== 'undefined' && `${formatGwei(gasPrice)} gwei`,\n      maxFeePerGas:\n        typeof maxFeePerGas !== 'undefined' &&\n        `${formatGwei(maxFeePerGas)} gwei`,\n      maxPriorityFeePerGas:\n        typeof maxPriorityFeePerGas !== 'undefined' &&\n        `${formatGwei(maxPriorityFeePerGas)} gwei`,\n      nonce,\n    })\n\n    if (stateOverride) {\n      prettyArgs += `\\n${prettyStateOverride(stateOverride)}`\n    }\n\n    super(cause.shortMessage, {\n      cause,\n      docsPath,\n      metaMessages: [\n        ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n        'Raw Call Arguments:',\n        prettyArgs,\n      ].filter(Boolean) as string[],\n      name: 'CallExecutionError',\n    })\n    this.cause = cause\n  }\n}\n\nexport type ContractFunctionExecutionErrorType =\n  ContractFunctionExecutionError & {\n    name: 'ContractFunctionExecutionError'\n  }\nexport class ContractFunctionExecutionError extends BaseError {\n  abi: Abi\n  args?: unknown[] | undefined\n  override cause: BaseError\n  contractAddress?: Address | undefined\n  formattedArgs?: string | undefined\n  functionName: string\n  sender?: Address | undefined\n\n  constructor(\n    cause: BaseError,\n    {\n      abi,\n      args,\n      contractAddress,\n      docsPath,\n      functionName,\n      sender,\n    }: {\n      abi: Abi\n      args?: any | undefined\n      contractAddress?: Address | undefined\n      docsPath?: string | undefined\n      functionName: string\n      sender?: Address | undefined\n    },\n  ) {\n    const abiItem = getAbiItem({ abi, args, name: functionName })\n    const formattedArgs = abiItem\n      ? formatAbiItemWithArgs({\n          abiItem,\n          args,\n          includeFunctionName: false,\n          includeName: false,\n        })\n      : undefined\n    const functionWithParams = abiItem\n      ? formatAbiItem(abiItem, { includeName: true })\n      : undefined\n\n    const prettyArgs = prettyPrint({\n      address: contractAddress && getContractAddress(contractAddress),\n      function: functionWithParams,\n      args:\n        formattedArgs &&\n        formattedArgs !== '()' &&\n        `${[...Array(functionName?.length ?? 0).keys()]\n          .map(() => ' ')\n          .join('')}${formattedArgs}`,\n      sender,\n    })\n\n    super(\n      cause.shortMessage ||\n        `An unknown error occurred while executing the contract function \"${functionName}\".`,\n      {\n        cause,\n        docsPath,\n        metaMessages: [\n          ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n          prettyArgs && 'Contract Call:',\n          prettyArgs,\n        ].filter(Boolean) as string[],\n        name: 'ContractFunctionExecutionError',\n      },\n    )\n    this.abi = abi\n    this.args = args\n    this.cause = cause\n    this.contractAddress = contractAddress\n    this.functionName = functionName\n    this.sender = sender\n  }\n}\n\nexport type ContractFunctionRevertedErrorType =\n  ContractFunctionRevertedError & {\n    name: 'ContractFunctionRevertedError'\n  }\nexport class ContractFunctionRevertedError extends BaseError {\n  data?: DecodeErrorResultReturnType | undefined\n  raw?: Hex | undefined\n  reason?: string | undefined\n  signature?: Hex | undefined\n\n  constructor({\n    abi,\n    data,\n    functionName,\n    message,\n    cause: error,\n  }: {\n    abi: Abi\n    data?: Hex | undefined\n    functionName: string\n    message?: string | undefined\n    cause?: BaseError | Error | undefined\n  }) {\n    let cause: Error | undefined\n    let decodedData: DecodeErrorResultReturnType | undefined\n    let metaMessages: string[] | undefined\n    let reason: string | undefined\n    if (data && data !== '0x') {\n      try {\n        decodedData = decodeErrorResult({ abi, data, cause: error })\n        const { abiItem, errorName, args: errorArgs } = decodedData\n        if (errorName === 'Error') {\n          reason = (errorArgs as [string])[0]\n        } else if (errorName === 'Panic') {\n          const [firstArg] = errorArgs as [number]\n          reason = panicReasons[firstArg as keyof typeof panicReasons]\n        } else {\n          const errorWithParams = abiItem\n            ? formatAbiItem(abiItem, { includeName: true })\n            : undefined\n          const formattedArgs =\n            abiItem && errorArgs\n              ? formatAbiItemWithArgs({\n                  abiItem,\n                  args: errorArgs,\n                  includeFunctionName: false,\n                  includeName: false,\n                })\n              : undefined\n\n          metaMessages = [\n            errorWithParams ? `Error: ${errorWithParams}` : '',\n            formattedArgs && formattedArgs !== '()'\n              ? `       ${[...Array(errorName?.length ?? 0).keys()]\n                  .map(() => ' ')\n                  .join('')}${formattedArgs}`\n              : '',\n          ]\n        }\n      } catch (err) {\n        cause = err as Error\n      }\n    } else if (message) reason = message\n\n    let signature: Hex | undefined\n    if (cause instanceof AbiErrorSignatureNotFoundError) {\n      signature = cause.signature\n      metaMessages = [\n        `Unable to decode signature \"${signature}\" as it was not found on the provided ABI.`,\n        'Make sure you are using the correct ABI and that the error exists on it.',\n        `You can look up the decoded signature here: https://4byte.sourcify.dev/?q=${signature}.`,\n      ]\n    }\n\n    super(\n      (reason && reason !== 'execution reverted') || signature\n        ? [\n            `The contract function \"${functionName}\" reverted with the following ${\n              signature ? 'signature' : 'reason'\n            }:`,\n            reason || signature,\n          ].join('\\n')\n        : `The contract function \"${functionName}\" reverted.`,\n      {\n        cause: cause ?? error,\n        metaMessages,\n        name: 'ContractFunctionRevertedError',\n      },\n    )\n\n    this.data = decodedData\n    this.raw = data\n    this.reason = reason\n    this.signature = signature\n  }\n}\n\nexport type ContractFunctionZeroDataErrorType =\n  ContractFunctionZeroDataError & {\n    name: 'ContractFunctionZeroDataError'\n  }\nexport class ContractFunctionZeroDataError extends BaseError {\n  constructor({\n    functionName,\n    cause,\n  }: {\n    functionName: string\n    cause?: BaseError | Error | undefined\n  }) {\n    super(`The contract function \"${functionName}\" returned no data (\"0x\").`, {\n      metaMessages: [\n        'This could be due to any of the following:',\n        `  - The contract does not have the function \"${functionName}\",`,\n        '  - The parameters passed to the contract function may be invalid, or',\n        '  - The address is not a contract.',\n      ],\n      name: 'ContractFunctionZeroDataError',\n      cause,\n    })\n  }\n}\n\nexport type CounterfactualDeploymentFailedErrorType =\n  CounterfactualDeploymentFailedError & {\n    name: 'CounterfactualDeploymentFailedError'\n  }\nexport class CounterfactualDeploymentFailedError extends BaseError {\n  constructor({ factory }: { factory?: Address | undefined }) {\n    super(\n      `Deployment for counterfactual contract call failed${\n        factory ? ` for factory \"${factory}\".` : ''\n      }`,\n      {\n        metaMessages: [\n          'Please ensure:',\n          '- The `factory` is a valid contract deployment factory (ie. Create2 Factory, ERC-4337 Factory, etc).',\n          '- The `factoryData` is a valid encoded function call for contract deployment function on the factory.',\n        ],\n        name: 'CounterfactualDeploymentFailedError',\n      },\n    )\n  }\n}\n\nexport type RawContractErrorType = RawContractError & {\n  name: 'RawContractError'\n}\nexport class RawContractError extends BaseError {\n  code = 3\n\n  data?: Hex | { data?: Hex | undefined } | undefined\n\n  constructor({\n    data,\n    message,\n  }: {\n    data?: Hex | { data?: Hex | undefined } | undefined\n    message?: string | undefined\n  }) {\n    super(message || '', { name: 'RawContractError' })\n    this.data = data\n  }\n}\n", "import { stringify } from '../utils/stringify.js'\n\nimport { BaseError } from './base.js'\nimport { getUrl } from './utils.js'\n\nexport type HttpRequestErrorType = HttpRequestError & {\n  name: 'HttpRequestError'\n}\nexport class HttpRequestError extends BaseError {\n  body?: { [x: string]: unknown } | { [y: string]: unknown }[] | undefined\n  headers?: Headers | undefined\n  status?: number | undefined\n  url: string\n\n  constructor({\n    body,\n    cause,\n    details,\n    headers,\n    status,\n    url,\n  }: {\n    body?: { [x: string]: unknown } | { [y: string]: unknown }[] | undefined\n    cause?: Error | undefined\n    details?: string | undefined\n    headers?: Headers | undefined\n    status?: number | undefined\n    url: string\n  }) {\n    super('HTTP request failed.', {\n      cause,\n      details,\n      metaMessages: [\n        status && `Status: ${status}`,\n        `URL: ${getUrl(url)}`,\n        body && `Request body: ${stringify(body)}`,\n      ].filter(Boolean) as string[],\n      name: 'HttpRequestError',\n    })\n    this.body = body\n    this.headers = headers\n    this.status = status\n    this.url = url\n  }\n}\n\nexport type WebSocketRequestErrorType = WebSocketRequestError & {\n  name: 'WebSocketRequestError'\n}\nexport class WebSocketRequestError extends BaseError {\n  url: string\n  constructor({\n    body,\n    cause,\n    details,\n    url,\n  }: {\n    body?: { [key: string]: unknown } | undefined\n    cause?: Error | undefined\n    details?: string | undefined\n    url: string\n  }) {\n    super('WebSocket request failed.', {\n      cause,\n      details,\n      metaMessages: [\n        `URL: ${getUrl(url)}`,\n        body && `Request body: ${stringify(body)}`,\n      ].filter(Boolean) as string[],\n      name: 'WebSocketRequestError',\n    })\n    this.url = url\n  }\n}\n\nexport type RpcRequestErrorType = RpcRequestError & {\n  name: 'RpcRequestError'\n}\nexport class RpcRequestError extends BaseError {\n  code: number\n  data?: unknown\n  url: string\n  constructor({\n    body,\n    error,\n    url,\n  }: {\n    body: { [x: string]: unknown } | { [y: string]: unknown }[]\n    error: { code: number; data?: unknown; message: string }\n    url: string\n  }) {\n    super('RPC Request failed.', {\n      cause: error as any,\n      details: error.message,\n      metaMessages: [`URL: ${getUrl(url)}`, `Request body: ${stringify(body)}`],\n      name: 'RpcRequestError',\n    })\n    this.code = error.code\n    this.data = error.data\n    this.url = url\n  }\n}\n\nexport type SocketClosedErrorType = SocketClosedError & {\n  name: 'SocketClosedError'\n}\nexport class SocketClosedError extends BaseError {\n  url: string | undefined\n  constructor({\n    url,\n  }: {\n    url?: string | undefined\n  } = {}) {\n    super('The socket has been closed.', {\n      metaMessages: [url && `URL: ${getUrl(url)}`].filter(Boolean) as string[],\n      name: 'SocketClosedError',\n    })\n    this.url = url\n  }\n}\n\nexport type TimeoutErrorType = TimeoutError & {\n  name: 'TimeoutError'\n}\nexport class TimeoutError extends BaseError {\n  url: string\n  constructor({\n    body,\n    url,\n  }: {\n    body: { [x: string]: unknown } | { [y: string]: unknown }[]\n    url: string\n  }) {\n    super('The request took too long to respond.', {\n      details: 'The request timed out.',\n      metaMessages: [`URL: ${getUrl(url)}`, `Request body: ${stringify(body)}`],\n      name: 'TimeoutError',\n    })\n    this.url = url\n  }\n}\n", "import type { Prettify } from '../types/utils.js'\nimport { BaseError } from './base.js'\nimport { RpcRequestError } from './request.js'\n\nconst unknownErrorCode = -1\n\nexport type RpcErrorCode =\n  | -1\n  | -32700 // Parse error\n  | -32600 // Invalid request\n  | -32601 // Method not found\n  | -32602 // Invalid params\n  | -32603 // Internal error\n  | -32000 // Invalid input\n  | -32001 // Resource not found\n  | -32002 // Resource unavailable\n  | -32003 // Transaction rejected\n  | -32004 // Method not supported\n  | -32005 // Limit exceeded\n  | -32006 // JSON-RPC version not supported\n  | -32042 // Method not found\n\ntype RpcErrorOptions<code extends number = RpcErrorCode> = {\n  code?: code | (number & {}) | undefined\n  docsPath?: string | undefined\n  metaMessages?: string[] | undefined\n  name?: string | undefined\n  shortMessage: string\n}\n\n/**\n * Error subclass implementing JSON RPC 2.0 errors and Ethereum RPC errors per EIP-1474.\n *\n * - EIP https://eips.ethereum.org/EIPS/eip-1474\n */\nexport type RpcErrorType = RpcError & { name: 'RpcError' }\nexport class RpcError<code_ extends number = RpcErrorCode> extends BaseError {\n  code: code_ | (number & {})\n\n  constructor(\n    cause: Error,\n    {\n      code,\n      docsPath,\n      metaMessages,\n      name,\n      shortMessage,\n    }: RpcErrorOptions<code_>,\n  ) {\n    super(shortMessage, {\n      cause,\n      docsPath,\n      metaMessages:\n        metaMessages || (cause as { metaMessages?: string[] })?.metaMessages,\n      name: name || 'RpcError',\n    })\n    this.name = name || cause.name\n    this.code = (\n      cause instanceof RpcRequestError ? cause.code : (code ?? unknownErrorCode)\n    ) as code_\n  }\n}\n\nexport type ProviderRpcErrorCode =\n  | 4001 // User Rejected Request\n  | 4100 // Unauthorized\n  | 4200 // Unsupported Method\n  | 4900 // Disconnected\n  | 4901 // Chain Disconnected\n  | 4902 // Chain Not Recognized\n  | 5700 // Unsupported non-optional capability\n  | 5710 // Unsupported chain id\n  | 5720 // Duplicate ID\n  | 5730 // Unknown bundle id\n  | 5740 // Bundle too large\n  | 5750 // Atomic-ready wallet rejected upgrade\n  | 5760 // Atomicity not supported\n  | 7000 // WalletConnect Session Settlement Failed\n\n/**\n * Error subclass implementing Ethereum Provider errors per EIP-1193.\n *\n * - EIP https://eips.ethereum.org/EIPS/eip-1193\n */\nexport type ProviderRpcErrorType = ProviderRpcError & {\n  name: 'ProviderRpcError'\n}\nexport class ProviderRpcError<\n  T = undefined,\n> extends RpcError<ProviderRpcErrorCode> {\n  data?: T | undefined\n\n  constructor(\n    cause: Error,\n    options: Prettify<\n      RpcErrorOptions<ProviderRpcErrorCode> & {\n        data?: T | undefined\n      }\n    >,\n  ) {\n    super(cause, options)\n\n    this.data = options.data\n  }\n}\n\n/**\n * Subclass for a \"Parse error\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type ParseRpcErrorType = ParseRpcError & {\n  code: -32700\n  name: 'ParseRpcError'\n}\nexport class ParseRpcError extends RpcError {\n  static code = -32700 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: ParseRpcError.code,\n      name: 'ParseRpcError',\n      shortMessage:\n        'Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"Invalid request\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type InvalidRequestRpcErrorType = InvalidRequestRpcError & {\n  code: -32600\n  name: 'InvalidRequestRpcError'\n}\nexport class InvalidRequestRpcError extends RpcError {\n  static code = -32600 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: InvalidRequestRpcError.code,\n      name: 'InvalidRequestRpcError',\n      shortMessage: 'JSON is not a valid request object.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"Method not found\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type MethodNotFoundRpcErrorType = MethodNotFoundRpcError & {\n  code: -32601\n  name: 'MethodNotFoundRpcError'\n}\nexport class MethodNotFoundRpcError extends RpcError {\n  static code = -32601 as const\n\n  constructor(cause: Error, { method }: { method?: string } = {}) {\n    super(cause, {\n      code: MethodNotFoundRpcError.code,\n      name: 'MethodNotFoundRpcError',\n      shortMessage: `The method${method ? ` \"${method}\"` : ''} does not exist / is not available.`,\n    })\n  }\n}\n\n/**\n * Subclass for an \"Invalid params\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type InvalidParamsRpcErrorType = InvalidParamsRpcError & {\n  code: -32602\n  name: 'InvalidParamsRpcError'\n}\nexport class InvalidParamsRpcError extends RpcError {\n  static code = -32602 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: InvalidParamsRpcError.code,\n      name: 'InvalidParamsRpcError',\n      shortMessage: [\n        'Invalid parameters were provided to the RPC method.',\n        'Double check you have provided the correct parameters.',\n      ].join('\\n'),\n    })\n  }\n}\n\n/**\n * Subclass for an \"Internal error\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type InternalRpcErrorType = InternalRpcError & {\n  code: -32603\n  name: 'InternalRpcError'\n}\nexport class InternalRpcError extends RpcError {\n  static code = -32603 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: InternalRpcError.code,\n      name: 'InternalRpcError',\n      shortMessage: 'An internal error was received.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Invalid input\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type InvalidInputRpcErrorType = InvalidInputRpcError & {\n  code: -32000\n  name: 'InvalidInputRpcError'\n}\nexport class InvalidInputRpcError extends RpcError {\n  static code = -32000 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: InvalidInputRpcError.code,\n      name: 'InvalidInputRpcError',\n      shortMessage: [\n        'Missing or invalid parameters.',\n        'Double check you have provided the correct parameters.',\n      ].join('\\n'),\n    })\n  }\n}\n\n/**\n * Subclass for a \"Resource not found\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type ResourceNotFoundRpcErrorType = ResourceNotFoundRpcError & {\n  code: -32001\n  name: 'ResourceNotFoundRpcError'\n}\nexport class ResourceNotFoundRpcError extends RpcError {\n  override name = 'ResourceNotFoundRpcError'\n  static code = -32001 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: ResourceNotFoundRpcError.code,\n      name: 'ResourceNotFoundRpcError',\n      shortMessage: 'Requested resource not found.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"Resource unavailable\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type ResourceUnavailableRpcErrorType = ResourceUnavailableRpcError & {\n  code: -32002\n  name: 'ResourceUnavailableRpcError'\n}\nexport class ResourceUnavailableRpcError extends RpcError {\n  static code = -32002 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: ResourceUnavailableRpcError.code,\n      name: 'ResourceUnavailableRpcError',\n      shortMessage: 'Requested resource not available.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"Transaction rejected\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type TransactionRejectedRpcErrorType = TransactionRejectedRpcError & {\n  code: -32003\n  name: 'TransactionRejectedRpcError'\n}\nexport class TransactionRejectedRpcError extends RpcError {\n  static code = -32003 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: TransactionRejectedRpcError.code,\n      name: 'TransactionRejectedRpcError',\n      shortMessage: 'Transaction creation failed.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"Method not supported\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type MethodNotSupportedRpcErrorType = MethodNotSupportedRpcError & {\n  code: -32004\n  name: 'MethodNotSupportedRpcError'\n}\nexport class MethodNotSupportedRpcError extends RpcError {\n  static code = -32004 as const\n\n  constructor(cause: Error, { method }: { method?: string } = {}) {\n    super(cause, {\n      code: MethodNotSupportedRpcError.code,\n      name: 'MethodNotSupportedRpcError',\n      shortMessage: `Method${method ? ` \"${method}\"` : ''} is not supported.`,\n    })\n  }\n}\n\n/**\n * Subclass for a \"Limit exceeded\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type LimitExceededRpcErrorType = LimitExceededRpcError & {\n  code: -32005\n  name: 'LimitExceededRpcError'\n}\nexport class LimitExceededRpcError extends RpcError {\n  static code = -32005 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: LimitExceededRpcError.code,\n      name: 'LimitExceededRpcError',\n      shortMessage: 'Request exceeds defined limit.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"JSON-RPC version not supported\" EIP-1474 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1474#error-codes\n */\nexport type JsonRpcVersionUnsupportedErrorType =\n  JsonRpcVersionUnsupportedError & {\n    code: -32006\n    name: 'JsonRpcVersionUnsupportedError'\n  }\nexport class JsonRpcVersionUnsupportedError extends RpcError {\n  static code = -32006 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: JsonRpcVersionUnsupportedError.code,\n      name: 'JsonRpcVersionUnsupportedError',\n      shortMessage: 'Version of JSON-RPC protocol is not supported.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"User Rejected Request\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type UserRejectedRequestErrorType = UserRejectedRequestError & {\n  code: 4001\n  name: 'UserRejectedRequestError'\n}\nexport class UserRejectedRequestError extends ProviderRpcError {\n  static code = 4001 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: UserRejectedRequestError.code,\n      name: 'UserRejectedRequestError',\n      shortMessage: 'User rejected the request.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Unauthorized\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type UnauthorizedProviderErrorType = UnauthorizedProviderError & {\n  code: 4100\n  name: 'UnauthorizedProviderError'\n}\nexport class UnauthorizedProviderError extends ProviderRpcError {\n  static code = 4100 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: UnauthorizedProviderError.code,\n      name: 'UnauthorizedProviderError',\n      shortMessage:\n        'The requested method and/or account has not been authorized by the user.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Unsupported Method\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type UnsupportedProviderMethodErrorType =\n  UnsupportedProviderMethodError & {\n    code: 4200\n    name: 'UnsupportedProviderMethodError'\n  }\nexport class UnsupportedProviderMethodError extends ProviderRpcError {\n  static code = 4200 as const\n\n  constructor(cause: Error, { method }: { method?: string } = {}) {\n    super(cause, {\n      code: UnsupportedProviderMethodError.code,\n      name: 'UnsupportedProviderMethodError',\n      shortMessage: `The Provider does not support the requested method${method ? ` \" ${method}\"` : ''}.`,\n    })\n  }\n}\n\n/**\n * Subclass for an \"Disconnected\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type ProviderDisconnectedErrorType = ProviderDisconnectedError & {\n  code: 4900\n  name: 'ProviderDisconnectedError'\n}\nexport class ProviderDisconnectedError extends ProviderRpcError {\n  static code = 4900 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: ProviderDisconnectedError.code,\n      name: 'ProviderDisconnectedError',\n      shortMessage: 'The Provider is disconnected from all chains.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Chain Disconnected\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type ChainDisconnectedErrorType = ChainDisconnectedError & {\n  code: 4901\n  name: 'ChainDisconnectedError'\n}\nexport class ChainDisconnectedError extends ProviderRpcError {\n  static code = 4901 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: ChainDisconnectedError.code,\n      name: 'ChainDisconnectedError',\n      shortMessage: 'The Provider is not connected to the requested chain.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Switch Chain\" EIP-1193 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-1193#provider-errors\n */\nexport type SwitchChainErrorType = SwitchChainError & {\n  code: 4902\n  name: 'SwitchChainError'\n}\nexport class SwitchChainError extends ProviderRpcError {\n  static code = 4902 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: SwitchChainError.code,\n      name: 'SwitchChainError',\n      shortMessage: 'An error occurred when attempting to switch chain.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Unsupported non-optional capability\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type UnsupportedNonOptionalCapabilityErrorType =\n  UnsupportedNonOptionalCapabilityError & {\n    code: 5700\n    name: 'UnsupportedNonOptionalCapabilityError'\n  }\nexport class UnsupportedNonOptionalCapabilityError extends ProviderRpcError {\n  static code = 5700 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: UnsupportedNonOptionalCapabilityError.code,\n      name: 'UnsupportedNonOptionalCapabilityError',\n      shortMessage:\n        'This Wallet does not support a capability that was not marked as optional.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Unsupported chain id\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type UnsupportedChainIdErrorType = UnsupportedChainIdError & {\n  code: 5710\n  name: 'UnsupportedChainIdError'\n}\nexport class UnsupportedChainIdError extends ProviderRpcError {\n  static code = 5710 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: UnsupportedChainIdError.code,\n      name: 'UnsupportedChainIdError',\n      shortMessage: 'This Wallet does not support the requested chain ID.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Duplicate ID\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type DuplicateIdErrorType = DuplicateIdError & {\n  code: 5720\n  name: 'DuplicateIdError'\n}\nexport class DuplicateIdError extends ProviderRpcError {\n  static code = 5720 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: DuplicateIdError.code,\n      name: 'DuplicateIdError',\n      shortMessage: 'There is already a bundle submitted with this ID.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Unknown bundle ID\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type UnknownBundleIdErrorType = UnknownBundleIdError & {\n  code: 5730\n  name: 'UnknownBundleIdError'\n}\nexport class UnknownBundleIdError extends ProviderRpcError {\n  static code = 5730 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: UnknownBundleIdError.code,\n      name: 'UnknownBundleIdError',\n      shortMessage: 'This bundle id is unknown / has not been submitted',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Bundle too large\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type BundleTooLargeErrorType = BundleTooLargeError & {\n  code: 5740\n  name: 'BundleTooLargeError'\n}\nexport class BundleTooLargeError extends ProviderRpcError {\n  static code = 5740 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: BundleTooLargeError.code,\n      name: 'BundleTooLargeError',\n      shortMessage: 'The call bundle is too large for the Wallet to process.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Atomic-ready wallet rejected upgrade\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type AtomicReadyWalletRejectedUpgradeErrorType =\n  AtomicReadyWalletRejectedUpgradeError & {\n    code: 5750\n    name: 'AtomicReadyWalletRejectedUpgradeError'\n  }\nexport class AtomicReadyWalletRejectedUpgradeError extends ProviderRpcError {\n  static code = 5750 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: AtomicReadyWalletRejectedUpgradeError.code,\n      name: 'AtomicReadyWalletRejectedUpgradeError',\n      shortMessage:\n        'The Wallet can support atomicity after an upgrade, but the user rejected the upgrade.',\n    })\n  }\n}\n\n/**\n * Subclass for an \"Atomicity not supported\" EIP-5792 error.\n *\n * EIP https://eips.ethereum.org/EIPS/eip-5792#error-codes\n */\nexport type AtomicityNotSupportedErrorType = AtomicityNotSupportedError & {\n  code: 5760\n  name: 'AtomicityNotSupportedError'\n}\nexport class AtomicityNotSupportedError extends ProviderRpcError {\n  static code = 5760 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: AtomicityNotSupportedError.code,\n      name: 'AtomicityNotSupportedError',\n      shortMessage:\n        'The wallet does not support atomic execution but the request requires it.',\n    })\n  }\n}\n\n/**\n * Subclass for a \"Session Settlement Failed\" WalletConnect error.\n *\n * WalletConnect https://docs.walletconnect.com/2.0/specs/clients/sign/error-codes\n */\nexport type WalletConnectSessionSettlementErrorType =\n  WalletConnectSessionSettlementError & {\n    code: 7000\n    name: 'WalletConnectSessionSettlementError'\n  }\nexport class WalletConnectSessionSettlementError extends ProviderRpcError {\n  static code = 7000 as const\n\n  constructor(cause: Error) {\n    super(cause, {\n      code: WalletConnectSessionSettlementError.code,\n      name: 'WalletConnectSessionSettlementError',\n      shortMessage: 'WalletConnect session settlement failed.',\n    })\n  }\n}\n\n/**\n * Subclass for an unknown RPC error.\n */\nexport type UnknownRpcErrorType = UnknownRpcError & {\n  name: 'UnknownRpcError'\n}\nexport class UnknownRpcError extends RpcError {\n  constructor(cause: Error) {\n    super(cause, {\n      name: 'UnknownRpcError',\n      shortMessage: 'An unknown RPC error occurred.',\n    })\n  }\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n  ContractFunctionExecutionError,\n  type ContractFunctionExecutionErrorType,\n  ContractFunctionRevertedError,\n  type ContractFunctionRevertedErrorType,\n  ContractFunctionZeroDataError,\n  type ContractFunctionZeroDataErrorType,\n  RawContractError,\n} from '../../errors/contract.js'\nimport { RpcRequestError } from '../../errors/request.js'\nimport { InternalRpcError, InvalidInputRpcError } from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nconst EXECUTION_REVERTED_ERROR_CODE = 3\n\nexport type GetContractErrorReturnType<cause = ErrorType> = Omit<\n  ContractFunctionExecutionErrorType,\n  'cause'\n> & {\n  cause:\n    | cause\n    | ContractFunctionZeroDataErrorType\n    | ContractFunctionRevertedErrorType\n}\n\nexport function getContractError<err extends ErrorType<string>>(\n  err: err,\n  {\n    abi,\n    address,\n    args,\n    docsPath,\n    functionName,\n    sender,\n  }: {\n    abi: Abi\n    args: any\n    address?: Address | undefined\n    docsPath?: string | undefined\n    functionName: string\n    sender?: Address | undefined\n  },\n): GetContractErrorReturnType {\n  const error = (\n    err instanceof RawContractError\n      ? err\n      : err instanceof BaseError\n        ? err.walk((err) => 'data' in (err as Error)) || err.walk()\n        : {}\n  ) as BaseError\n  const { code, data, details, message, shortMessage } =\n    error as RawContractError\n\n  const cause = (() => {\n    if (err instanceof AbiDecodingZeroDataError)\n      return new ContractFunctionZeroDataError({ functionName, cause: err })\n    if (\n      ([EXECUTION_REVERTED_ERROR_CODE, InternalRpcError.code].includes(code) &&\n        (data || details || message || shortMessage)) ||\n      (code === InvalidInputRpcError.code &&\n        details === 'execution reverted' &&\n        data)\n    ) {\n      return new ContractFunctionRevertedError({\n        abi,\n        data: typeof data === 'object' ? data.data : data,\n        functionName,\n        message:\n          error instanceof RpcRequestError\n            ? details\n            : (shortMessage ?? message),\n        cause: err,\n      })\n    }\n    return err\n  })()\n\n  return new ContractFunctionExecutionError(cause as BaseError, {\n    abi,\n    args,\n    contractAddress: address,\n    docsPath,\n    functionName,\n    sender,\n  }) as GetContractErrorReturnType\n}\n", "import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport {\n  type ChecksumAddressErrorType,\n  checksumAddress,\n} from '../../utils/address/getAddress.js'\nimport {\n  type Keccak256ErrorType,\n  keccak256,\n} from '../../utils/hash/keccak256.js'\n\nexport type PublicKeyToAddressErrorType =\n  | ChecksumAddressErrorType\n  | Keccak256ErrorType\n  | ErrorType\n\n/**\n * @description Converts an ECDSA public key to an address.\n *\n * @param publicKey The public key to convert.\n *\n * @returns The address.\n */\nexport function publicKeyToAddress(publicKey: Hex): Address {\n  const address = keccak256(`0x${publicKey.substring(4)}`).substring(26)\n  return checksumAddress(`0x${address}`) as Address\n}\n", "/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { type Input, Hash, abytes, aexists, aoutput, clean, createView, toBytes } from './utils.ts';\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(\n  view: DataView,\n  byteOffset: number,\n  value: bigint,\n  isLE: boolean\n): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n  return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n  return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n\n  readonly blockLen: number;\n  readonly outputLen: number;\n  readonly padOffset: number;\n  readonly isLE: boolean;\n\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n    super();\n    this.blockLen = blockLen;\n    this.outputLen = outputLen;\n    this.padOffset = padOffset;\n    this.isLE = isLE;\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    aexists(this);\n    data = toBytes(data);\n    abytes(data);\n    const { view, buffer, blockLen } = this;\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input, cast it to view and process\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out: Uint8Array): void {\n    aexists(this);\n    aoutput(out, this);\n    this.finished = true;\n    // Padding\n    // We can avoid allocation of buffer for padding completely if it\n    // was previously not allocated here. But it won't change performance.\n    const { buffer, view, blockLen, isLE } = this;\n    let { pos } = this;\n    // append the bit '1' to the message\n    buffer[pos++] = 0b10000000;\n    clean(this.buffer.subarray(pos));\n    // we have less than padOffset left in buffer, so we cannot put length in\n    // current block, need process it and pad again\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    // Pad until full block byte with zeros\n    for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n    // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n    // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n    // So we just write lowest 64 bits of that value.\n    setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n  }\n  digest(): Uint8Array {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n  _cloneInto(to?: T): T {\n    to ||= new (this.constructor as any)() as T;\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.destroyed = destroyed;\n    to.finished = finished;\n    to.length = length;\n    to.pos = pos;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to;\n  }\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n  0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n  0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n", "/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  protected A: number = SHA256_IV[0] | 0;\n  protected B: number = SHA256_IV[1] | 0;\n  protected C: number = SHA256_IV[2] | 0;\n  protected D: number = SHA256_IV[3] | 0;\n  protected E: number = SHA256_IV[4] | 0;\n  protected F: number = SHA256_IV[5] | 0;\n  protected G: number = SHA256_IV[6] | 0;\n  protected H: number = SHA256_IV[7] | 0;\n\n  constructor(outputLen: number = 32) {\n    super(64, outputLen, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ): void {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 64; i++) {\n      const W15 = SHA256_W[i - 15];\n      const W2 = SHA256_W[i - 2];\n      const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n      const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n      SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n    }\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let i = 0; i < 64; i++) {\n      const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n      const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n      const T2 = (sigma0 + Maj(A, B, C)) | 0;\n      H = G;\n      G = F;\n      F = E;\n      E = (D + T1) | 0;\n      D = C;\n      C = B;\n      B = A;\n      A = (T1 + T2) | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    F = (F + this.F) | 0;\n    G = (G + this.G) | 0;\n    H = (H + this.H) | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  protected roundClean(): void {\n    clean(SHA256_W);\n  }\n  destroy(): void {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    clean(this.buffer);\n  }\n}\n\nexport class SHA224 extends SHA256 {\n  protected A: number = SHA224_IV[0] | 0;\n  protected B: number = SHA224_IV[1] | 0;\n  protected C: number = SHA224_IV[2] | 0;\n  protected D: number = SHA224_IV[3] | 0;\n  protected E: number = SHA224_IV[4] | 0;\n  protected F: number = SHA224_IV[5] | 0;\n  protected G: number = SHA224_IV[6] | 0;\n  protected H: number = SHA224_IV[7] | 0;\n  constructor() {\n    super(28);\n  }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n  '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n  '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n  '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n  '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n  '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n  '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n  '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n  '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n  '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n  '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n  '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n  '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n  '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n  '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n  '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n  '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n  '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n  '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n  '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n  '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\nexport class SHA512 extends HashMD<SHA512> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  // h -- high 32 bits, l -- low 32 bits\n  protected Ah: number = SHA512_IV[0] | 0;\n  protected Al: number = SHA512_IV[1] | 0;\n  protected Bh: number = SHA512_IV[2] | 0;\n  protected Bl: number = SHA512_IV[3] | 0;\n  protected Ch: number = SHA512_IV[4] | 0;\n  protected Cl: number = SHA512_IV[5] | 0;\n  protected Dh: number = SHA512_IV[6] | 0;\n  protected Dl: number = SHA512_IV[7] | 0;\n  protected Eh: number = SHA512_IV[8] | 0;\n  protected El: number = SHA512_IV[9] | 0;\n  protected Fh: number = SHA512_IV[10] | 0;\n  protected Fl: number = SHA512_IV[11] | 0;\n  protected Gh: number = SHA512_IV[12] | 0;\n  protected Gl: number = SHA512_IV[13] | 0;\n  protected Hh: number = SHA512_IV[14] | 0;\n  protected Hl: number = SHA512_IV[15] | 0;\n\n  constructor(outputLen: number = 64) {\n    super(128, outputLen, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n  }\n  // prettier-ignore\n  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ): void {\n    this.Ah = Ah | 0;\n    this.Al = Al | 0;\n    this.Bh = Bh | 0;\n    this.Bl = Bl | 0;\n    this.Ch = Ch | 0;\n    this.Cl = Cl | 0;\n    this.Dh = Dh | 0;\n    this.Dl = Dl | 0;\n    this.Eh = Eh | 0;\n    this.El = El | 0;\n    this.Fh = Fh | 0;\n    this.Fl = Fl | 0;\n    this.Gh = Gh | 0;\n    this.Gl = Gl | 0;\n    this.Hh = Hh | 0;\n    this.Hl = Hl | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) {\n      SHA512_W_H[i] = view.getUint32(offset);\n      SHA512_W_L[i] = view.getUint32((offset += 4));\n    }\n    for (let i = 16; i < 80; i++) {\n      // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n      const W15h = SHA512_W_H[i - 15] | 0;\n      const W15l = SHA512_W_L[i - 15] | 0;\n      const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n      const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n      // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n      const W2h = SHA512_W_H[i - 2] | 0;\n      const W2l = SHA512_W_L[i - 2] | 0;\n      const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n      const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n      // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n      const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n      const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n      SHA512_W_H[i] = SUMh | 0;\n      SHA512_W_L[i] = SUMl | 0;\n    }\n    let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    // Compression function main loop, 80 rounds\n    for (let i = 0; i < 80; i++) {\n      // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n      const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n      const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n      //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n      const CHIl = (El & Fl) ^ (~El & Gl);\n      // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n      // prettier-ignore\n      const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n      const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n      const T1l = T1ll | 0;\n      // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n      const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n      const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n      const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n      const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n      Hh = Gh | 0;\n      Hl = Gl | 0;\n      Gh = Fh | 0;\n      Gl = Fl | 0;\n      Fh = Eh | 0;\n      Fl = El | 0;\n      ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n      Dh = Ch | 0;\n      Dl = Cl | 0;\n      Ch = Bh | 0;\n      Cl = Bl | 0;\n      Bh = Ah | 0;\n      Bl = Al | 0;\n      const All = u64.add3L(T1l, sigma0l, MAJl);\n      Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n      Al = All | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n    ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n    ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n    ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n    ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n    ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n    ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n    ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n    this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n  }\n  protected roundClean(): void {\n    clean(SHA512_W_H, SHA512_W_L);\n  }\n  destroy(): void {\n    clean(this.buffer);\n    this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n  }\n}\n\nexport class SHA384 extends SHA512 {\n  protected Ah: number = SHA384_IV[0] | 0;\n  protected Al: number = SHA384_IV[1] | 0;\n  protected Bh: number = SHA384_IV[2] | 0;\n  protected Bl: number = SHA384_IV[3] | 0;\n  protected Ch: number = SHA384_IV[4] | 0;\n  protected Cl: number = SHA384_IV[5] | 0;\n  protected Dh: number = SHA384_IV[6] | 0;\n  protected Dl: number = SHA384_IV[7] | 0;\n  protected Eh: number = SHA384_IV[8] | 0;\n  protected El: number = SHA384_IV[9] | 0;\n  protected Fh: number = SHA384_IV[10] | 0;\n  protected Fl: number = SHA384_IV[11] | 0;\n  protected Gh: number = SHA384_IV[12] | 0;\n  protected Gl: number = SHA384_IV[13] | 0;\n  protected Hh: number = SHA384_IV[14] | 0;\n  protected Hl: number = SHA384_IV[15] | 0;\n\n  constructor() {\n    super(48);\n  }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n  0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n  0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n  0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n  0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\nexport class SHA512_224 extends SHA512 {\n  protected Ah: number = T224_IV[0] | 0;\n  protected Al: number = T224_IV[1] | 0;\n  protected Bh: number = T224_IV[2] | 0;\n  protected Bl: number = T224_IV[3] | 0;\n  protected Ch: number = T224_IV[4] | 0;\n  protected Cl: number = T224_IV[5] | 0;\n  protected Dh: number = T224_IV[6] | 0;\n  protected Dl: number = T224_IV[7] | 0;\n  protected Eh: number = T224_IV[8] | 0;\n  protected El: number = T224_IV[9] | 0;\n  protected Fh: number = T224_IV[10] | 0;\n  protected Fl: number = T224_IV[11] | 0;\n  protected Gh: number = T224_IV[12] | 0;\n  protected Gl: number = T224_IV[13] | 0;\n  protected Hh: number = T224_IV[14] | 0;\n  protected Hl: number = T224_IV[15] | 0;\n\n  constructor() {\n    super(28);\n  }\n}\n\nexport class SHA512_256 extends SHA512 {\n  protected Ah: number = T256_IV[0] | 0;\n  protected Al: number = T256_IV[1] | 0;\n  protected Bh: number = T256_IV[2] | 0;\n  protected Bl: number = T256_IV[3] | 0;\n  protected Ch: number = T256_IV[4] | 0;\n  protected Cl: number = T256_IV[5] | 0;\n  protected Dh: number = T256_IV[6] | 0;\n  protected Dl: number = T256_IV[7] | 0;\n  protected Eh: number = T256_IV[8] | 0;\n  protected El: number = T256_IV[9] | 0;\n  protected Fh: number = T256_IV[10] | 0;\n  protected Fl: number = T256_IV[11] | 0;\n  protected Gh: number = T256_IV[12] | 0;\n  protected Gl: number = T256_IV[13] | 0;\n  protected Hh: number = T256_IV[14] | 0;\n  protected Hl: number = T256_IV[15] | 0;\n\n  constructor() {\n    super(32);\n  }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256: CHash = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash = /* @__PURE__ */ createHasher(() => new SHA224());\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash = /* @__PURE__ */ createHasher(() => new SHA384());\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash = /* @__PURE__ */ createHasher(() => new SHA512_224());\n", "/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, Hash, toBytes, type CHash, type Input } from './utils.ts';\n\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, _key: Input) {\n    super();\n    ahash(hash);\n    const key = toBytes(_key);\n    this.iHash = hash.create() as T;\n    if (typeof this.iHash.update !== 'function')\n      throw new Error('Expected instance of class which extends utils.Hash');\n    this.blockLen = this.iHash.blockLen;\n    this.outputLen = this.iHash.outputLen;\n    const blockLen = this.blockLen;\n    const pad = new Uint8Array(blockLen);\n    // blockLen can be bigger than outputLen\n    pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n    this.iHash.update(pad);\n    // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n    this.oHash = hash.create() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    clean(pad);\n  }\n  update(buf: Input): this {\n    aexists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array): void {\n    aexists(this);\n    abytes(out, this.outputLen);\n    this.finished = true;\n    this.iHash.digestInto(out);\n    this.oHash.update(out);\n    this.oHash.digestInto(out);\n    this.destroy();\n  }\n  digest(): Uint8Array {\n    const out = new Uint8Array(this.oHash.outputLen);\n    this.digestInto(out);\n    return out;\n  }\n  _cloneInto(to?: HMAC<T>): HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    to.blockLen = blockLen;\n    to.outputLen = outputLen;\n    to.oHash = oHash._cloneInto(to.oHash);\n    to.iHash = iHash._cloneInto(to.iHash);\n    return to;\n  }\n  clone(): HMAC<T> {\n    return this._cloneInto();\n  }\n  destroy(): void {\n    this.destroyed = true;\n    this.oHash.destroy();\n    this.iHash.destroy();\n  }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n  (hash: CHash, key: Input, message: Input): Uint8Array;\n  create(hash: CHash, key: Input): HMAC<any>;\n} = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\nexport function abytes(item: unknown): void {\n  if (!isBytes(item)) throw new Error('Uint8Array expected');\n}\n\nexport function abool(title: string, value: boolean): void {\n  if (typeof value !== 'boolean') throw new Error(title + ' boolean expected, got ' + value);\n}\n\n// Used in weierstrass, der\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? '0' + hex : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean =\n  // @ts-ignore\n  typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function';\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // @ts-ignore\n  if (hasHexBuiltin) return bytes.toHex();\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n  if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n  if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n  if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n  return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // @ts-ignore\n  if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  abytes(bytes);\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);\n    }\n  } else if (isBytes(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(title + ' must be hex string or Uint8Array');\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error('string expected');\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint): boolean {\n  return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint): void {\n  // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n  // consider P=256n, min=0n, max=P\n  // - a for min=0 would require -1:          `inRange('x', x, -1n, P)`\n  // - b would commonly require subtraction:  `inRange('x', x, 0n, P - 1n)`\n  // - our way is the cleanest:               `inRange('x', x, 0n, P)\n  if (!inRange(n, min, max))\n    throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nexport function bitLen(n: bigint): number {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number): bigint {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean): bigint {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number): bigint => (_1n << BigInt(n)) - _1n;\n\n// DRBG\n\nconst u8n = (len: number) => new Uint8Array(len); // creates Uint8Array\nconst u8fr = (arr: ArrayLike<number>) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n(0)) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any): boolean => typeof val === 'bigint',\n  function: (val: any): boolean => typeof val === 'function',\n  boolean: (val: any): boolean => typeof val === 'boolean',\n  string: (val: any): boolean => typeof val === 'string',\n  stringOrUint8Array: (val: any): boolean => typeof val === 'string' || isBytes(val),\n  isSafeInteger: (val: any): boolean => Number.isSafeInteger(val),\n  array: (val: any): boolean => Array.isArray(val),\n  field: (val: any, object: any): any => (object as any).Fp.isValid(val),\n  hash: (val: any): boolean => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n): T {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function') throw new Error('invalid validator function');\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        'param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = (): never => {\n  throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized<T extends object, R, O extends any[]>(\n  fn: (arg: T, ...args: O) => R\n): (arg: T, ...args: O) => R {\n  const map = new WeakMap<T, R>();\n  return (arg: T, ...args: O): R => {\n    const val = map.get(arg);\n    if (val !== undefined) return val;\n    const computed = fn(arg, ...args);\n    map.set(arg, computed);\n    return computed;\n  };\n}\n", "/**\n * Utils for modular division and finite fields.\n * A finite field over 11 is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { anumber } from '@noble/hashes/utils';\nimport {\n  bitMask,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  numberToBytesBE,\n  numberToBytesLE,\n  validateObject,\n} from './utils.ts';\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3);\n// prettier-ignore\nconst _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _8n = /* @__PURE__ */ BigInt(8);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * TODO: remove.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  return FpPow(Field(modulo), num, power);\n}\n\n/** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n/**\n * Inverses number over modulo.\n * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).\n */\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n) throw new Error('invert: expected non-zero number');\n  if (modulo <= _0n) throw new Error('invert: expected positive modulus, got ' + modulo);\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n// Not all roots are possible! Example which will throw:\n// const NUM =\n// n = 72057594037927816n;\n// Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));\nfunction sqrt3mod4<T>(Fp: IField<T>, n: T) {\n  const p1div4 = (Fp.ORDER + _1n) / _4n;\n  const root = Fp.pow(n, p1div4);\n  // Throw if root^2 != n\n  if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n  return root;\n}\n\nfunction sqrt5mod8<T>(Fp: IField<T>, n: T) {\n  const p5div8 = (Fp.ORDER - _5n) / _8n;\n  const n2 = Fp.mul(n, _2n);\n  const v = Fp.pow(n2, p5div8);\n  const nv = Fp.mul(n, v);\n  const i = Fp.mul(Fp.mul(nv, _2n), v);\n  const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n  if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n  return root;\n}\n\n// TODO: Commented-out for now. Provide test vectors.\n// Tonelli is too slow for extension fields Fp2.\n// That means we can't use sqrt (c1, c2...) even for initialization constants.\n// if (P % _16n === _9n) return sqrt9mod16;\n// // prettier-ignore\n// function sqrt9mod16<T>(Fp: IField<T>, n: T, p7div16?: bigint) {\n//   if (p7div16 === undefined) p7div16 = (Fp.ORDER + BigInt(7)) / _16n;\n//   const c1 = Fp.sqrt(Fp.neg(Fp.ONE)); //  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n//   const c2 = Fp.sqrt(c1);             //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n//   const c3 = Fp.sqrt(Fp.neg(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n//   const c4 = p7div16;                 //  4. c4 = (q + 7) / 16        # Integer arithmetic\n//   let tv1 = Fp.pow(n, c4);            //  1. tv1 = x^c4\n//   let tv2 = Fp.mul(c1, tv1);          //  2. tv2 = c1 * tv1\n//   const tv3 = Fp.mul(c2, tv1);        //  3. tv3 = c2 * tv1\n//   let tv4 = Fp.mul(c3, tv1);          //  4. tv4 = c3 * tv1\n//   const e1 = Fp.eql(Fp.sqr(tv2), n);  //  5.  e1 = (tv2^2) == x\n//   const e2 = Fp.eql(Fp.sqr(tv3), n);  //  6.  e2 = (tv3^2) == x\n//   tv1 = Fp.cmov(tv1, tv2, e1); //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n//   tv2 = Fp.cmov(tv4, tv3, e2); //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n//   const e3 = Fp.eql(Fp.sqr(tv2), n);  //  9.  e3 = (tv2^2) == x\n//   return Fp.cmov(tv1, tv2, e3); // 10.  z = CMOV(tv1, tv2, e3) # Select the sqrt from tv1 and tv2\n// }\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  // Initialization (precomputation).\n  if (P < BigInt(3)) throw new Error('sqrt is not defined for small field');\n  // Factor P - 1 = Q * 2^S, where Q is odd\n  let Q = P - _1n;\n  let S = 0;\n  while (Q % _2n === _0n) {\n    Q /= _2n;\n    S++;\n  }\n\n  // Find the first quadratic non-residue Z >= 2\n  let Z = _2n;\n  const _Fp = Field(P);\n  while (FpLegendre(_Fp, Z) === 1) {\n    // Basic primality test for P. After x iterations, chance of\n    // not finding quadratic non-residue is 2^x, so 2^1000.\n    if (Z++ > 1000) throw new Error('Cannot find square root: probably non-prime P');\n  }\n  // Fast-path; usually done before Z, but we do \"primality test\".\n  if (S === 1) return sqrt3mod4;\n\n  // Slow-path\n  // TODO: test on Fp2 and others\n  let cc = _Fp.pow(Z, Q); // c = z^Q\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    if (Fp.is0(n)) return n;\n    // Check if n is a quadratic residue using Legendre symbol\n    if (FpLegendre(Fp, n) !== 1) throw new Error('Cannot find square root');\n\n    // Initialize variables for the main loop\n    let M = S;\n    let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp\n    let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor\n    let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root\n\n    // Main loop\n    // while t != 1\n    while (!Fp.eql(t, Fp.ONE)) {\n      if (Fp.is0(t)) return Fp.ZERO; // if t=0 return R=0\n      let i = 1;\n\n      // Find the smallest i >= 1 such that t^(2^i) \u2261 1 (mod P)\n      let t_tmp = Fp.sqr(t); // t^(2^1)\n      while (!Fp.eql(t_tmp, Fp.ONE)) {\n        i++;\n        t_tmp = Fp.sqr(t_tmp); // t^(2^2)...\n        if (i === M) throw new Error('Cannot find square root');\n      }\n\n      // Calculate the exponent for b: 2^(M - i - 1)\n      const exponent = _1n << BigInt(M - i - 1); // bigint is important\n      const b = Fp.pow(c, exponent); // b = 2^(M - i - 1)\n\n      // Update variables\n      M = i;\n      c = Fp.sqr(b); // c = b^2\n      t = Fp.mul(t, c); // t = (t * b^2)\n      R = Fp.mul(R, b); // R = R*b\n    }\n    return R;\n  };\n}\n\n/**\n * Square root for a finite field. Will try optimized versions first:\n *\n * 1. P \u2261 3 (mod 4)\n * 2. P \u2261 5 (mod 8)\n * 3. Tonelli-Shanks algorithm\n *\n * Different algorithms can give different roots, it is up to user to decide which one they want.\n * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n */\nexport function FpSqrt(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  // P \u2261 3 (mod 4) => \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) return sqrt3mod4;\n  // P \u2261 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf\n  if (P % _8n === _5n) return sqrt5mod8;\n  // P \u2261 9 (mod 16) not implemented, see above\n  // Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint): boolean =>\n  (mod(num, modulo) & _1n) === _1n;\n\n/** Field is not always over prime: for example, Fp2 has ORDER(q)=p^m. */\nexport interface IField<T> {\n  ORDER: bigint;\n  isLE: boolean;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>): IField<T> {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(Fp: IField<T>, num: T, power: bigint): T {\n  if (power < _0n) throw new Error('invalid exponent, negatives unsupported');\n  if (power === _0n) return Fp.ONE;\n  if (power === _1n) return num;\n  let p = Fp.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = Fp.mul(p, d);\n    d = Fp.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * Exception-free. Will return `undefined` for 0 elements.\n * @param passZero map 0 to 0 (instead of undefined)\n */\nexport function FpInvertBatch<T>(Fp: IField<T>, nums: T[], passZero = false): T[] {\n  const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined);\n  // Walk from first to last, multiply them by each other MOD p\n  const multipliedAcc = nums.reduce((acc, num, i) => {\n    if (Fp.is0(num)) return acc;\n    inverted[i] = acc;\n    return Fp.mul(acc, num);\n  }, Fp.ONE);\n  // Invert last element\n  const invertedAcc = Fp.inv(multipliedAcc);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (Fp.is0(num)) return acc;\n    inverted[i] = Fp.mul(acc, inverted[i]);\n    return Fp.mul(acc, num);\n  }, invertedAcc);\n  return inverted;\n}\n\n// TODO: remove\nexport function FpDiv<T>(Fp: IField<T>, lhs: T, rhs: T | bigint): T {\n  return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs));\n}\n\n/**\n * Legendre symbol.\n * Legendre constant is used to calculate Legendre symbol (a | p)\n * which denotes the value of a^((p-1)/2) (mod p).\n *\n * * (a | p) \u2261 1    if a is a square (mod p), quadratic residue\n * * (a | p) \u2261 -1   if a is not a square (mod p), quadratic non residue\n * * (a | p) \u2261 0    if a \u2261 0 (mod p)\n */\nexport function FpLegendre<T>(Fp: IField<T>, n: T): -1 | 0 | 1 {\n  // We can use 3rd argument as optional cache of this value\n  // but seems unneeded for now. The operation is very fast.\n  const p1mod2 = (Fp.ORDER - _1n) / _2n;\n  const powered = Fp.pow(n, p1mod2);\n  const yes = Fp.eql(powered, Fp.ONE);\n  const zero = Fp.eql(powered, Fp.ZERO);\n  const no = Fp.eql(powered, Fp.neg(Fp.ONE));\n  if (!yes && !zero && !no) throw new Error('invalid Legendre symbol result');\n  return yes ? 1 : zero ? 0 : -1;\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(Fp: IField<T>, n: T): boolean {\n  const l = FpLegendre(Fp, n);\n  return l === 1;\n}\n\n// CURVE.n lengths\nexport function nLength(\n  n: bigint,\n  nBitLength?: number\n): {\n  nBitLength: number;\n  nByteLength: number;\n} {\n  // Bit size, byte size of CURVE.n\n  if (nBitLength !== undefined) anumber(nBitLength);\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a finite field over prime.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * Fragile: always run a benchmark on a change.\n * Security note: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you're doing.\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n  let sqrtP: ReturnType<typeof FpSqrt>; // cached sqrtP\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    isLE,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error('invalid field element: expected bigint, got ' + typeof num);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt:\n      redef.sqrt ||\n      ((n) => {\n        if (!sqrtP) sqrtP = FpSqrt(ORDER);\n        return sqrtP(f, n);\n      }),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes) => {\n      if (bytes.length !== BYTES)\n        throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n    // TODO: we don't need it here, move out to separate fn\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // We can't move this out because Fp6, Fp12 implement it\n    // and it's unclear what to return in there.\n    cmov: (a, b, c) => (c ? b : a),\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T): T {\n  if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T): T {\n  if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use `mapKeyToField` instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(\n      'hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen\n    );\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n  const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { type IField, nLength, validateField } from './modular.ts';\nimport { bitLen, bitMask, validateObject } from './utils.ts';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\nfunction constTimeNegate<T extends Group<T>>(condition: boolean, item: T): T {\n  const neg = item.negate();\n  return condition ? neg : item;\n}\n\nfunction validateW(W: number, bits: number) {\n  if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n    throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\n\n/** Internal wNAF opts for specific W and scalarBits */\nexport type WOpts = {\n  windows: number;\n  windowSize: number;\n  mask: bigint;\n  maxNumber: number;\n  shiftBy: bigint;\n};\n\nfunction calcWOpts(W: number, scalarBits: number): WOpts {\n  validateW(W, scalarBits);\n  const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero\n  const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero\n  const maxNumber = 2 ** W; // W=8 256\n  const mask = bitMask(W); // W=8 255 == mask 0b11111111\n  const shiftBy = BigInt(W); // W=8 8\n  return { windows, windowSize, mask, maxNumber, shiftBy };\n}\n\nfunction calcOffsets(n: bigint, window: number, wOpts: WOpts) {\n  const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n  let wbits = Number(n & mask); // extract W bits.\n  let nextN = n >> shiftBy; // shift number by W bits.\n\n  // What actually happens here:\n  // const highestBit = Number(mask ^ (mask >> 1n));\n  // let wbits2 = wbits - 1; // skip zero\n  // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~);\n\n  // split if bits > max: +224 => 256-32\n  if (wbits > windowSize) {\n    // we skip zero, which means instead of `>= size-1`, we do `> size`\n    wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here.\n    nextN += _1n; // +256 (carry)\n  }\n  const offsetStart = window * windowSize;\n  const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero\n  const isZero = wbits === 0; // is current window slice a 0?\n  const isNeg = wbits < 0; // is current window slice negative?\n  const isNegF = window % 2 !== 0; // fake random statement for noise\n  const offsetF = offsetStart; // fake offset for noise\n  return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\n\nfunction validateMSMPoints(points: any[], c: any) {\n  if (!Array.isArray(points)) throw new Error('array expected');\n  points.forEach((p, i) => {\n    if (!(p instanceof c)) throw new Error('invalid point at index ' + i);\n  });\n}\nfunction validateMSMScalars(scalars: any[], field: any) {\n  if (!Array.isArray(scalars)) throw new Error('array of scalars expected');\n  scalars.forEach((s, i) => {\n    if (!field.isValid(s)) throw new Error('invalid scalar at index ' + i);\n  });\n}\n\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes.\n// Allows to make points frozen / immutable.\nconst pointPrecomputes = new WeakMap<any, any[]>();\nconst pointWindowSizes = new WeakMap<any, number>();\n\nfunction getW(P: any): number {\n  return pointWindowSizes.get(P) || 1;\n}\n\nexport type IWNAF<T extends Group<T>> = {\n  constTimeNegate: <T extends Group<T>>(condition: boolean, item: T) => T;\n  hasPrecomputes(elm: T): boolean;\n  unsafeLadder(elm: T, n: bigint, p?: T): T;\n  precomputeWindow(elm: T, W: number): Group<T>[];\n  getPrecomputes(W: number, P: T, transform: Mapper<T>): T[];\n  wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T };\n  wNAFUnsafe(W: number, precomputes: T[], n: bigint, acc?: T): T;\n  wNAFCached(P: T, n: bigint, transform: Mapper<T>): { p: T; f: T };\n  wNAFCachedUnsafe(P: T, n: bigint, transform: Mapper<T>, prev?: T): T;\n  setWindowSize(P: T, W: number): void;\n};\n\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Scalars should always be less than curve order: this should be checked inside of a curve itself.\n * Creates precomputation tables for fast multiplication:\n * - private scalar is split by fixed size windows of W bits\n * - every window point is collected from window's table & added to accumulator\n * - since windows are different, same point inside tables won't be accessed more than once per calc\n * - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n * - +1 window is neccessary for wNAF\n * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n *\n * @todo Research returning 2d JS array of windows, instead of a single window.\n * This would allow windows to be in different memory locations\n */\nexport function wNAF<T extends Group<T>>(c: GroupConstructor<T>, bits: number): IWNAF<T> {\n  return {\n    constTimeNegate,\n\n    hasPrecomputes(elm: T) {\n      return getW(elm) !== 1;\n    },\n\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint, p = c.ZERO) {\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\n\n    /**\n     * Creates a wNAF precomputation window. Used for caching.\n     * Default window size is set by `utils.precompute()` and is equal to 8.\n     * Number of precomputed points depends on the curve size:\n     * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B is the bitlength of the curve order.\n     * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n     * @param elm Point instance\n     * @param W window size\n     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = calcWOpts(W, bits);\n      const points: T[] = [];\n      let p: T = elm;\n      let base = p;\n      for (let window = 0; window < windows; window++) {\n        base = p;\n        points.push(base);\n        // i=1, bc we skip 0\n        for (let i = 1; i < windowSize; i++) {\n          base = base.add(p);\n          points.push(base);\n        }\n        p = base.double();\n      }\n      return points;\n    },\n\n    /**\n     * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @returns real and fake (for const-time) points\n     */\n    wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n      // Smaller version:\n      // https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n      // TODO: check the scalar is less than group order?\n      // wNAF behavior is undefined otherwise. But have to carefully remove\n      // other checks before wNAF. ORDER == bits here.\n      // Accumulators\n      let p = c.ZERO;\n      let f = c.BASE;\n      // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n      // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n      // there is negate now: it is possible that negated element from low value\n      // would be the same as high element, which will create carry into next window.\n      // It's not obvious how this can fail, but still worth investigating later.\n      const wo = calcWOpts(W, bits);\n      for (let window = 0; window < wo.windows; window++) {\n        // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise\n        const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo);\n        n = nextN;\n        if (isZero) {\n          // bits are 0: add garbage to fake point\n          // Important part for const-time getPublicKey: add random \"noise\" point to f.\n          f = f.add(constTimeNegate(isNegF, precomputes[offsetF]));\n        } else {\n          // bits are 1: add to result point\n          p = p.add(constTimeNegate(isNeg, precomputes[offset]));\n        }\n      }\n      // Return both real and fake points: JIT won't eliminate f.\n      // At this point there is a way to F be infinity-point even if p is not,\n      // which makes it less const-time: around 1 bigint multiply.\n      return { p, f };\n    },\n\n    /**\n     * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @param acc accumulator point to add result of multiplication\n     * @returns point\n     */\n    wNAFUnsafe(W: number, precomputes: T[], n: bigint, acc: T = c.ZERO): T {\n      const wo = calcWOpts(W, bits);\n      for (let window = 0; window < wo.windows; window++) {\n        if (n === _0n) break; // Early-exit, skip 0 value\n        const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo);\n        n = nextN;\n        if (isZero) {\n          // Window bits are 0: skip processing.\n          // Move to next window.\n          continue;\n        } else {\n          const item = precomputes[offset];\n          acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM\n        }\n      }\n      return acc;\n    },\n\n    getPrecomputes(W: number, P: T, transform: Mapper<T>): T[] {\n      // Calculate precomputes on a first run, reuse them after\n      let comp = pointPrecomputes.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) pointPrecomputes.set(P, transform(comp));\n      }\n      return comp;\n    },\n\n    wNAFCached(P: T, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      const W = getW(P);\n      return this.wNAF(W, this.getPrecomputes(W, P, transform), n);\n    },\n\n    wNAFCachedUnsafe(P: T, n: bigint, transform: Mapper<T>, prev?: T): T {\n      const W = getW(P);\n      if (W === 1) return this.unsafeLadder(P, n, prev); // For W=1 ladder is ~x2 faster\n      return this.wNAFUnsafe(W, this.getPrecomputes(W, P, transform), n, prev);\n    },\n\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n\n    setWindowSize(P: T, W: number) {\n      validateW(W, bits);\n      pointWindowSizes.set(P, W);\n      pointPrecomputes.delete(P);\n    },\n  };\n}\n\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster than precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka private keys / bigints)\n */\nexport function pippenger<T extends Group<T>>(\n  c: GroupConstructor<T>,\n  fieldN: IField<bigint>,\n  points: T[],\n  scalars: bigint[]\n): T {\n  // If we split scalars by some window (let's say 8 bits), every chunk will only\n  // take 256 buckets even if there are 4096 scalars, also re-uses double.\n  // TODO:\n  // - https://eprint.iacr.org/2024/750.pdf\n  // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n  // 0 is accepted in scalars\n  validateMSMPoints(points, c);\n  validateMSMScalars(scalars, fieldN);\n  const plength = points.length;\n  const slength = scalars.length;\n  if (plength !== slength) throw new Error('arrays of points and scalars must have equal length');\n  // if (plength === 0) throw new Error('array must be of length >= 2');\n  const zero = c.ZERO;\n  const wbits = bitLen(BigInt(plength));\n  let windowSize = 1; // bits\n  if (wbits > 12) windowSize = wbits - 3;\n  else if (wbits > 4) windowSize = wbits - 2;\n  else if (wbits > 0) windowSize = 2;\n  const MASK = bitMask(windowSize);\n  const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array\n  const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n  let sum = zero;\n  for (let i = lastBits; i >= 0; i -= windowSize) {\n    buckets.fill(zero);\n    for (let j = 0; j < slength; j++) {\n      const scalar = scalars[j];\n      const wbits = Number((scalar >> BigInt(i)) & MASK);\n      buckets[wbits] = buckets[wbits].add(points[j]);\n    }\n    let resI = zero; // not using this will do small speed-up, but will lose ct\n    // Skip first bucket, because it is zero\n    for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n      sumI = sumI.add(buckets[j]);\n      resI = resI.add(sumI);\n    }\n    sum = sum.add(resI);\n    if (i !== 0) for (let j = 0; j < windowSize; j++) sum = sum.double();\n  }\n  return sum as T;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nexport function precomputeMSMUnsafe<T extends Group<T>>(\n  c: GroupConstructor<T>,\n  fieldN: IField<bigint>,\n  points: T[],\n  windowSize: number\n): (scalars: bigint[]) => T {\n  /**\n   * Performance Analysis of Window-based Precomputation\n   *\n   * Base Case (256-bit scalar, 8-bit window):\n   * - Standard precomputation requires:\n   *   - 31 additions per scalar \u00D7 256 scalars = 7,936 ops\n   *   - Plus 255 summary additions = 8,191 total ops\n   *   Note: Summary additions can be optimized via accumulator\n   *\n   * Chunked Precomputation Analysis:\n   * - Using 32 chunks requires:\n   *   - 255 additions per chunk\n   *   - 256 doublings\n   *   - Total: (255 \u00D7 32) + 256 = 8,416 ops\n   *\n   * Memory Usage Comparison:\n   * Window Size | Standard Points | Chunked Points\n   * ------------|-----------------|---------------\n   *     4-bit   |     520         |      15\n   *     8-bit   |    4,224        |     255\n   *    10-bit   |   13,824        |   1,023\n   *    16-bit   |  557,056        |  65,535\n   *\n   * Key Advantages:\n   * 1. Enables larger window sizes due to reduced memory overhead\n   * 2. More efficient for smaller scalar counts:\n   *    - 16 chunks: (16 \u00D7 255) + 256 = 4,336 ops\n   *    - ~2x faster than standard 8,191 ops\n   *\n   * Limitations:\n   * - Not suitable for plain precomputes (requires 256 constant doublings)\n   * - Performance degrades with larger scalar counts:\n   *   - Optimal for ~256 scalars\n   *   - Less efficient for 4096+ scalars (Pippenger preferred)\n   */\n  validateW(windowSize, fieldN.BITS);\n  validateMSMPoints(points, c);\n  const zero = c.ZERO;\n  const tableSize = 2 ** windowSize - 1; // table size (without zero)\n  const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n  const MASK = bitMask(windowSize);\n  const tables = points.map((p: T) => {\n    const res = [];\n    for (let i = 0, acc = p; i < tableSize; i++) {\n      res.push(acc);\n      acc = acc.add(p);\n    }\n    return res;\n  });\n  return (scalars: bigint[]): T => {\n    validateMSMScalars(scalars, fieldN);\n    if (scalars.length > points.length)\n      throw new Error('array of scalars must be smaller than array of points');\n    let res = zero;\n    for (let i = 0; i < chunks; i++) {\n      // No need to double if accumulator is still zero.\n      if (res !== zero) for (let j = 0; j < windowSize; j++) res = res.double();\n      const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n      for (let j = 0; j < scalars.length; j++) {\n        const n = scalars[j];\n        const curr = Number((n >> shiftBy) & MASK);\n        if (!curr) continue; // skip zero scalars chunks\n        res = res.add(tables[j][curr - 1]);\n      }\n    }\n    return res;\n  };\n}\n\n/**\n * Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n * Though generator can be different (Fp2 / Fp6 for BLS).\n */\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(\n  curve: BasicCurve<FP> & T\n): Readonly<\n  {\n    readonly nBitLength: number;\n    readonly nByteLength: number;\n  } & BasicCurve<FP> &\n    T & {\n      p: bigint;\n    }\n> {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/**\n * Short Weierstrass curve methods. The formula is: y\u00B2 = x\u00B3 + ax + b.\n *\n * ### Parameters\n *\n * To initialize a weierstrass curve, one needs to pass following params:\n *\n * * a: formula param\n * * b: formula param\n * * Fp: finite field of prime characteristic P; may be complex (Fp2). Arithmetics is done in field\n * * n: order of prime subgroup a.k.a total amount of valid curve points\n * * Gx: Base point (x, y) aka generator point. Gx = x coordinate\n * * Gy: ...y coordinate\n * * h: cofactor, usually 1. h*n = curve group order (n is only subgroup order)\n * * lowS: whether to enable (default) or disable \"low-s\" non-malleable signatures\n *\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance\n * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create\n * unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * @todo https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// prettier-ignore\nimport {\n  pippenger, validateBasic, wNAF,\n  type AffinePoint, type BasicCurve, type Group, type GroupConstructor\n} from './curve.ts';\n// prettier-ignore\nimport {\n  Field,\n  FpInvertBatch,\n  getMinHashLength, invert, mapHashToField, mod, validateField,\n  type IField\n} from './modular.ts';\n// prettier-ignore\nimport {\n  aInRange, abool,\n  bitMask,\n  bytesToHex, bytesToNumberBE, concatBytes, createHmacDrbg, ensureBytes, hexToBytes,\n  inRange, isBytes, memoized, numberToBytesBE, numberToHexUnpadded, validateObject,\n  type CHash, type Hex, type PrivKey\n} from './utils.ts';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\n/**\n * When Weierstrass curve has `a=0`, it becomes Koblitz curve.\n * Koblitz curves allow using **efficiently-computable GLV endomorphism \u03C8**.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n *\n * Endomorphism consists of beta, lambda and splitScalar:\n *\n * 1. GLV endomorphism \u03C8 transforms a point: `P = (x, y) \u21A6 \u03C8(P) = (\u03B2\u00B7x mod p, y)`\n * 2. GLV scalar decomposition transforms a scalar: `k \u2261 k\u2081 + k\u2082\u00B7\u03BB (mod n)`\n * 3. Then these are combined: `k\u00B7P = k\u2081\u00B7P + k\u2082\u00B7\u03C8(P)`\n * 4. Two 128-bit point-by-scalar multiplications + one point addition is faster than\n *    one 256-bit multiplication.\n *\n * where\n * * beta: \u03B2 \u2208 F\u209A with \u03B2\u00B3 = 1, \u03B2 \u2260 1\n * * lambda: \u03BB \u2208 F\u2099 with \u03BB\u00B3 = 1, \u03BB \u2260 1\n * * splitScalar decomposes k \u21A6 k\u2081, k\u2082, by using reduced basis vectors.\n *   Gauss lattice reduction calculates them from initial basis vectors `(n, 0), (-\u03BB, 0)`\n *\n * Check out `test/misc/endomorphism.js` and\n * [gist](https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066).\n */\nexport type EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts;\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\nexport type Entropy = Hex | boolean;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean; format?: 'compact' | 'der' | undefined };\n\nfunction validateSigVerOpts(opts: SignOpts | VerOpts) {\n  if (opts.lowS !== undefined) abool('lowS', opts.lowS);\n  if (opts.prehash !== undefined) abool('prehash', opts.prehash);\n}\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  toAffine(iz?: T): AffinePoint<T>;\n  toHex(isCompressed?: boolean): string;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n  msm(points: ProjPointType<T>[], scalars: bigint[]): ProjPointType<T>;\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nexport type CurvePointsTypeWithLength<T> = Readonly<\n  CurvePointsType<T> & { nByteLength: number; nBitLength: number }\n>;\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>): CurvePointsTypeWithLength<T> {\n  const opts = validateBasic(curve);\n  validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowInfinityPoint: 'boolean',\n      allowedPrivateKeyLengths: 'array',\n      clearCofactor: 'function',\n      fromBytes: 'function',\n      isTorsionFree: 'function',\n      toBytes: 'function',\n      wrapPrivateKey: 'boolean',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('invalid endo: CURVE.a must be 0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('invalid endo: expected \"beta\": bigint and \"splitScalar\": function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  CURVE: ReturnType<typeof validatePointOpts<T>>;\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\nexport class DERErr extends Error {\n  constructor(m = '') {\n    super(m);\n  }\n}\nexport type IDER = {\n  // asn.1 DER encoding utils\n  Err: typeof DERErr;\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string) => string;\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array };\n  };\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint): string;\n    decode(data: Uint8Array): bigint;\n  };\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint };\n  hexFromSig(sig: { r: bigint; s: bigint }): string;\n};\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n *     [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexport const DER: IDER = {\n  // asn.1 DER encoding utils\n  Err: DERErr,\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string): string => {\n      const { Err: E } = DER;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length & 1) throw new E('tlv.encode: unpadded data');\n      const dataLen = data.length / 2;\n      const len = numberToHexUnpadded(dataLen);\n      if ((len.length / 2) & 0b1000_0000) throw new E('tlv.encode: long form length too big');\n      // length of length with long form flag\n      const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) | 0b1000_0000) : '';\n      const t = numberToHexUnpadded(tag);\n      return t + lenLen + len + data;\n    },\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array } {\n      const { Err: E } = DER;\n      let pos = 0;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length < 2 || data[pos++] !== tag) throw new E('tlv.decode: wrong tlv');\n      const first = data[pos++];\n      const isLong = !!(first & 0b1000_0000); // First bit of first length byte is flag for short/long form\n      let length = 0;\n      if (!isLong) length = first;\n      else {\n        // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n        const lenLen = first & 0b0111_1111;\n        if (!lenLen) throw new E('tlv.decode(long): indefinite length not supported');\n        if (lenLen > 4) throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n        const lengthBytes = data.subarray(pos, pos + lenLen);\n        if (lengthBytes.length !== lenLen) throw new E('tlv.decode: length bytes not complete');\n        if (lengthBytes[0] === 0) throw new E('tlv.decode(long): zero leftmost byte');\n        for (const b of lengthBytes) length = (length << 8) | b;\n        pos += lenLen;\n        if (length < 128) throw new E('tlv.decode(long): not minimal encoding');\n      }\n      const v = data.subarray(pos, pos + length);\n      if (v.length !== length) throw new E('tlv.decode: wrong value length');\n      return { v, l: data.subarray(pos + length) };\n    },\n  },\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint): string {\n      const { Err: E } = DER;\n      if (num < _0n) throw new E('integer: negative integers are not allowed');\n      let hex = numberToHexUnpadded(num);\n      // Pad with zero byte if negative flag is present\n      if (Number.parseInt(hex[0], 16) & 0b1000) hex = '00' + hex;\n      if (hex.length & 1) throw new E('unexpected DER parsing assertion: unpadded hex');\n      return hex;\n    },\n    decode(data: Uint8Array): bigint {\n      const { Err: E } = DER;\n      if (data[0] & 0b1000_0000) throw new E('invalid signature integer: negative');\n      if (data[0] === 0x00 && !(data[1] & 0b1000_0000))\n        throw new E('invalid signature integer: unnecessary leading zero');\n      return bytesToNumberBE(data);\n    },\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E, _int: int, _tlv: tlv } = DER;\n    const data = ensureBytes('signature', hex);\n    const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n    if (seqLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n    const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n    const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n    if (sLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n    return { r: int.decode(rBytes), s: int.decode(sBytes) };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    const { _tlv: tlv, _int: int } = DER;\n    const rs = tlv.encode(0x02, int.encode(sig.r));\n    const ss = tlv.encode(0x02, int.encode(sig.s));\n    const seq = rs + ss;\n    return tlv.encode(0x30, seq);\n  },\n};\n\nfunction numToSizedHex(num: bigint, size: number): string {\n  return bytesToHex(numberToBytesBE(num, size));\n}\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>): CurvePointsRes<T> {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n  const Fn = Field(CURVE.n, CURVE.nBitLength);\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((_c: ProjConstructor<T>, point: ProjPointType<T>, _isCompressed: boolean) => {\n      const a = point.toAffine();\n      return concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\n      // const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n      const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n      const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n      return { x, y };\n    });\n\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula. Takes x, returns y\u00B2.\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const { a, b } = CURVE;\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x\u00B2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x\u00B3 + a * x + b\n  }\n\n  function isValidXY(x: T, y: T): boolean {\n    const left = Fp.sqr(y); // y\u00B2\n    const right = weierstrassEquation(x); // x\u00B3 + ax + b\n    return Fp.eql(left, right);\n  }\n\n  // Validate whether the passed curve params are valid.\n  // Test 1: equation y\u00B2 = x\u00B3 + ax + b should work for generator point.\n  if (!isValidXY(CURVE.Gx, CURVE.Gy)) throw new Error('bad curve params: generator point');\n\n  // Test 2: discriminant \u0394 part should be non-zero: 4a\u00B3 + 27b\u00B2 != 0.\n  // Guarantees curve is genus-1, smooth (non-singular).\n  const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n), _4n);\n  const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27));\n  if (Fp.is0(Fp.add(_4a3, _27b2))) throw new Error('bad curve params: a or b');\n\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return inRange(num, _1n, CURVE.n);\n  }\n  // Validates if priv key is valid and converts it to bigint.\n  // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n  function normPrivateKeyToScalar(key: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n: N } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (isBytes(key)) key = bytesToHex(key);\n      // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n      if (typeof key !== 'string' || !lengths.includes(key.length))\n        throw new Error('invalid private key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(\n        'invalid private key, expected hex or ' + nByteLength + ' bytes, got ' + typeof key\n      );\n    }\n    if (wrapPrivateKey) num = mod(num, N); // disabled by default, enabled for BLS\n    aInRange('private key', num, _1n, N); // num in range [1..N-1]\n    return num;\n  }\n\n  function aprjpoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n\n  // Memoized toAffine / validity check. They are heavy. Points are immutable.\n\n  // Converts Projective point to affine (x, y) coordinates.\n  // Can accept precomputed Z^-1 - for example, from invertBatch.\n  // (X, Y, Z) \u220B (x=X/Z, y=Y/Z)\n  const toAffineMemo = memoized((p: Point, iz?: T): AffinePoint<T> => {\n    const { px: x, py: y, pz: z } = p;\n    // Fast-path for normalized points\n    if (Fp.eql(z, Fp.ONE)) return { x, y };\n    const is0 = p.is0();\n    // If invZ was 0, we return zero point. However we still want to execute\n    // all operations, so we replace invZ with a random number, 1.\n    if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n    const ax = Fp.mul(x, iz);\n    const ay = Fp.mul(y, iz);\n    const zz = Fp.mul(z, iz);\n    if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n    if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n    return { x: ax, y: ay };\n  });\n  // NOTE: on exception this will crash 'cached' and no value will be set.\n  // Otherwise true will be return\n  const assertValidMemo = memoized((p: Point) => {\n    if (p.is0()) {\n      // (0, 1, 0) aka ZERO is invalid in most contexts.\n      // In BLS, ZERO can be serialized, so we allow it.\n      // (0, 0, 0) is invalid representation of ZERO.\n      if (CURVE.allowInfinityPoint && !Fp.is0(p.py)) return;\n      throw new Error('bad point: ZERO');\n    }\n    // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n    const { x, y } = p.toAffine();\n    // Check if x, y are valid field elements\n    if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n    if (!isValidXY(x, y)) throw new Error('bad point: equation left != right');\n    if (!p.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    return true;\n  });\n\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (X, Y, Z) \u220B (x=X/Z, y=Y/Z)\n   * Default Point works in 2d / affine coordinates: (x, y)\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements ProjPointType<T> {\n    // base / generator point\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    // zero / infinity / identity point\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0\n    readonly px: T;\n    readonly py: T;\n    readonly pz: T;\n\n    constructor(px: T, py: T, pz: T) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py) || Fp.is0(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n      this.px = px;\n      this.py = py;\n      this.pz = pz;\n      Object.freeze(this);\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n      // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n      if (is0(x) && is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     * Takes a bunch of Projective Points but executes only one\n     * inversion on all of them. Inversion is very slow operation,\n     * so this improves performance massively.\n     * Optimization: converts a list of projective points to a list of identical points with Z=1.\n     */\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = FpInvertBatch(\n        Fp,\n        points.map((p) => p.pz)\n      );\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\n\n    // Multiscalar Multiplication\n    static msm(points: Point[], scalars: bigint[]): Point {\n      return pippenger(Point, Fn, points, scalars);\n    }\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      wnaf.setWindowSize(this, windowSize);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      assertValidMemo(this);\n    }\n\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\n      aprjpoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      aprjpoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    is0() {\n      return this.equals(Point.ZERO);\n    }\n\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, n, Point.normalizeZ);\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed private key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(sc: bigint): Point {\n      const { endo, n: N } = CURVE;\n      aInRange('scalar', sc, _0n, N);\n      const I = Point.ZERO;\n      if (sc === _0n) return I;\n      if (this.is0() || sc === _1n) return this;\n\n      // Case a: no endomorphism. Case b: has precomputes.\n      if (!endo || wnaf.hasPrecomputes(this))\n        return wnaf.wNAFCachedUnsafe(this, sc, Point.normalizeZ);\n\n      // Case c: endomorphism\n      /** See docs for {@link EndomorphismOpts} */\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(sc);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) k2p = k2p.negate();\n      k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n      return k1p.add(k2p);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      const { endo, n: N } = CURVE;\n      aInRange('scalar', scalar, _1n, N);\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      /** See docs for {@link EndomorphismOpts} */\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(scalar);\n        let { p: k1p, f: f1p } = this.wNAF(k1);\n        let { p: k2p, f: f2p } = this.wNAF(k2);\n        k1p = wnaf.constTimeNegate(k1neg, k1p);\n        k2p = wnaf.constTimeNegate(k2neg, k2p);\n        k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n        point = k1p.add(k2p);\n        fake = f1p.add(f2p);\n      } else {\n        const { p, f } = this.wNAF(scalar);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return Point.normalizeZ([point, fake])[0];\n    }\n\n    /**\n     * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n     * Not using Strauss-Shamir trick: precomputation tables are faster.\n     * The trick could be useful if both P and Q are not G (not in our case).\n     * @returns non-zero affine point\n     */\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // Select faster multiply() method\n      ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n      const sum = mul(this, a).add(mul(Q, b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      return toAffineMemo(this, iz);\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      abool('isCompressed', isCompressed);\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      abool('isCompressed', isCompressed);\n      return bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\n  const { endo, nBitLength } = CURVE;\n  const wnaf = wNAF(Point, endo ? Math.ceil(nBitLength / 2) : nBitLength);\n  return {\n    CURVE,\n    ProjectivePoint: Point as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(\n  curve: CurveType\n): Readonly<CurveType & { nByteLength: number; nBitLength: number }> {\n  const opts = validateBasic(curve);\n  validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\n/**\n * Creates short weierstrass curve and ECDSA signature methods for it.\n * @example\n * import { Field } from '@noble/curves/abstract/modular';\n * // Before that, define BigInt-s: a, b, p, n, Gx, Gy\n * const curve = weierstrass({ a, b, Fp: Field(p), n, Gx, Gy, h: 1n })\n */\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const { Fp, n: CURVE_ORDER, nByteLength, nBitLength } = CURVE;\n  const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n  const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n  function modN(a: bigint) {\n    return mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(_c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = concatBytes;\n      abool('isCompressed', isCompressed);\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\n      const len = bytes.length;\n      const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // this.assertValidity() is done inside of fromHex\n      if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n        const x = bytesToNumberBE(tail);\n        if (!inRange(x, _1n, Fp.ORDER)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y: bigint;\n        try {\n          y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        } catch (sqrtError) {\n          const suffix = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n          throw new Error('Point is not on curve' + suffix);\n        }\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\n      } else if (len === uncompressedLen && head === 0x04) {\n        const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n        const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n        return { x, y };\n      } else {\n        const cl = compressedLen;\n        const ul = uncompressedLen;\n        throw new Error(\n          'invalid Point, expected length of ' + cl + ', or uncompressed ' + ul + ', got ' + len\n        );\n      }\n    },\n  });\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    readonly r: bigint;\n    readonly s: bigint;\n    readonly recovery?: number;\n    constructor(r: bigint, s: bigint, recovery?: number) {\n      aInRange('r', r, _1n, CURVE_ORDER); // r in [1..N]\n      aInRange('s', s, _1n, CURVE_ORDER); // s in [1..N]\n      this.r = r;\n      this.s = s;\n      if (recovery != null) this.recovery = recovery;\n      Object.freeze(this);\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: Hex) {\n      const l = nByteLength;\n      hex = ensureBytes('compactSignature', hex, l * 2);\n      return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n    }\n\n    // DER encoded ECDSA signature\n    // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n    static fromDER(hex: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    /**\n     * @todo remove\n     * @deprecated\n     */\n    assertValidity(): void {}\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n      const { r, s, recovery: rec } = this;\n      const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n      const prefix = (rec & 1) === 0 ? '02' : '03';\n      const R = Point.fromHex(prefix + numToSizedHex(radj, Fp.BYTES));\n      const ir = invN(radj); // r^-1\n      const u1 = modN(-h * ir); // -hr^-1\n      const u2 = modN(s * ir); // sr^-1\n      const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n      if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\n\n    // DER-encoded\n    toDERRawBytes() {\n      return hexToBytes(this.toDERHex());\n    }\n    toDERHex() {\n      return DER.hexFromSig(this);\n    }\n\n    // padded bytes of r, then padded bytes of s\n    toCompactRawBytes() {\n      return hexToBytes(this.toCompactHex());\n    }\n    toCompactHex() {\n      const l = nByteLength;\n      return numToSizedHex(this.r, l) + numToSizedHex(this.s, l);\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size\n     * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const length = getMinHashLength(CURVE.n);\n      return mapHashToField(CURVE.randomBytes(length), CURVE.n);\n    },\n\n    /**\n     * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n     * Allows to massively speed-up `point.multiply(scalar)`.\n     * @returns cached point\n     * @example\n     * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n     * fast.multiply(privKey); // much faster ECDH now\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n      return point;\n    },\n  };\n\n  /**\n   * Computes public key for a private key. Checks for validity of the private key.\n   * @param privateKey private key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean | undefined {\n    if (typeof item === 'bigint') return false;\n    if (item instanceof Point) return true;\n    const arr = ensureBytes('key', item);\n    const len = arr.length;\n    const fpl = Fp.BYTES;\n    const compLen = fpl + 1; // e.g. 33 for 32\n    const uncompLen = 2 * fpl + 1; // e.g. 65 for 32\n    if (CURVE.allowedPrivateKeyLengths || nByteLength === compLen) {\n      return undefined;\n    } else {\n      return len === compLen || len === uncompLen;\n    }\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from private key and public key.\n   * Checks: 1) private key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param privateA private key\n   * @param publicB different public key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA) === true) throw new Error('first arg must be private key');\n    if (isProbPub(publicB) === false) throw new Error('second arg must be public key');\n    const b = Point.fromHex(publicB); // check for being on-curve\n    return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n  }\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\n      // Our custom check \"just in case\", for protection against DoS\n      if (bytes.length > 8192) throw new Error('input is too large');\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - nBitLength; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\n      return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // NOTE: pads output with zero as per spec\n  const ORDER_MASK = bitMask(nBitLength);\n  /**\n   * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n   */\n  function int2octets(num: bigint): Uint8Array {\n    aInRange('num < 2^' + nBitLength, num, _0n, ORDER_MASK);\n    // works with order, can have different size than numToField!\n    return numberToBytesBE(num, nByteLength);\n  }\n\n  // Steps A, D of RFC6979 3.2\n  // Creates RFC6979 seed; converts msg/privKey to numbers.\n  // Used only in sign, not in verify.\n  // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order,\n  // this will be invalid at least for P521. Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { hash, randomBytes } = CURVE;\n    let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n    if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    validateSigVerOpts(opts);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(msgHash);\n    const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (ent != null && ent !== false) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n      const ik = invN(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n      const r = modN(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n      // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n      // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n      const s = modN(ik * modN(m + r * d)); // Not using blinding here\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = normalizeS(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr)/k mod n\n   * ```\n   * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n   * @param privKey private key\n   * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n   * @returns signature with recovery param\n   */\n  function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\n  /**\n   * Verifies a signature against message hash and public key.\n   * Rejects lowS signatures by default: to override,\n   * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   U1 = hs^-1 mod n\n   *   U2 = rs^-1 mod n\n   *   R = U1\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    const { lowS, prehash, format } = opts;\n\n    // Verify opts, deduce signature format\n    validateSigVerOpts(opts);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    if (format !== undefined && format !== 'compact' && format !== 'der')\n      throw new Error('format must be compact or der');\n    const isHex = typeof sg === 'string' || isBytes(sg);\n    const isObj =\n      !isHex &&\n      !format &&\n      typeof sg === 'object' &&\n      sg !== null &&\n      typeof sg.r === 'bigint' &&\n      typeof sg.s === 'bigint';\n    if (!isHex && !isObj)\n      throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance');\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (isObj) _sig = new Signature(sg.r, sg.s);\n      if (isHex) {\n        // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n        // Since DER can also be 2*nByteLength bytes, we check for it first.\n        try {\n          if (format !== 'compact') _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n        }\n        if (!_sig && format !== 'der') _sig = Signature.fromCompact(sg);\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      return false;\n    }\n    if (!_sig) return false;\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) msgHash = CURVE.hash(msgHash);\n    const { r, s } = _sig;\n    const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n    const is = invN(s); // s^-1\n    const u1 = modN(h * is); // u1 = hs^-1 mod n\n    const u2 = modN(r * is); // u2 = rs^-1 mod n\n    const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n    if (!R) return false;\n    const v = modN(R.x);\n    return v === r;\n  }\n  return {\n    CURVE,\n    getPublicKey,\n    getSharedSecret,\n    sign,\n    verify,\n    ProjectivePoint: Point,\n    Signature,\n    utils,\n  };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(\n  Fp: IField<T>,\n  Z: T\n): (u: T, v: T) => { isValid: boolean; value: T } {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n): (u: T) => { x: T; y: T } {\n  validateField(Fp);\n  if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n  if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, opts.Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, opts.B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, opts.A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    const tv4_inv = FpInvertBatch(Fp, [tv4], true)[0];\n    x = Fp.mul(x, tv4_inv); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n", "/**\n * Utilities for short weierstrass curves, combined with noble-hashes.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport type { CHash } from './abstract/utils.ts';\nimport { type CurveFn, type CurveType, weierstrass } from './abstract/weierstrass.ts';\n\n/** connects noble-curves to noble-hashes */\nexport function getHash(hash: CHash): {\n  hash: CHash;\n  hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => Uint8Array;\n  randomBytes: typeof randomBytes;\n} {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n/** Same API as @noble/hashes, with ability to create curve with custom hash */\nexport type CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport type CurveFnWithCreate = CurveFn & { create: (hash: CHash) => CurveFn };\n\nexport function createCurve(curveDef: CurveDef, defHash: CHash): CurveFnWithCreate {\n  const create = (hash: CHash): CurveFn => weierstrass({ ...curveDef, ...getHash(hash) });\n  return { ...create(defHash), create };\n}\n", "/**\n * hash-to-curve from RFC 9380.\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * https://www.rfc-editor.org/rfc/rfc9380\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { AffinePoint, Group, GroupConstructor } from './curve.ts';\nimport { FpInvertBatch, type IField, mod } from './modular.ts';\nimport type { CHash } from './utils.ts';\nimport { abytes, bytesToNumberBE, concatBytes, utf8ToBytes, validateObject } from './utils.ts';\n\nexport type UnicodeOrBytes = string | Uint8Array;\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\nexport type Opts = {\n  DST: UnicodeOrBytes;\n  p: bigint;\n  m: number;\n  k: number;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n};\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n  anum(value);\n  anum(length);\n  if (value < 0 || value >= 1 << (8 * length)) throw new Error('invalid I2OSP input: ' + value);\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr;\n}\n\nfunction anum(item: unknown): void {\n  if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\n/**\n * Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits.\n * [RFC 9380 5.3.1](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1).\n */\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  anum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (lenInBytes > 65535 || ell > 255) throw new Error('expand_message_xmd: invalid lenInBytes');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = i2osp(0, r_in_bytes);\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  for (let i = 1; i <= ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\n/**\n * Produces a uniformly random byte string using an extendable-output function (XOF) H.\n * 1. The collision resistance of H MUST be at least k bits.\n * 2. H MUST be an XOF that has been proved indifferentiable from\n *    a random oracle under a reasonable cryptographic assumption.\n * [RFC 9380 5.3.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2).\n */\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  anum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * [RFC 9380 5.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.2).\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {\n  validateObject(options, {\n    DST: 'stringOrUint8Array',\n    p: 'bigint',\n    m: 'isSafeInteger',\n    k: 'isSafeInteger',\n    hash: 'hash',\n  });\n  const { p, k, m, hash, expand, DST: _DST } = options;\n  abytes(msg);\n  anum(count);\n  const DST = typeof _DST === 'string' ? utf8ToBytes(_DST) : _DST;\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\nexport type XY<T> = (x: T, y: T) => { x: T; y: T };\nexport type XYRatio<T> = [T[], T[], T[], T[]]; // xn/xd, yn/yd\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: XYRatio<T>): XY<T> {\n  // Make same order as in spec\n  const coeff = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xn, xd, yn, yd] = coeff.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    // 6.6.3\n    // Exceptional cases of iso_map are inputs that cause the denominator of\n    // either rational function to evaluate to zero; such cases MUST return\n    // the identity point on E.\n    const [xd_inv, yd_inv] = FpInvertBatch(field, [xd, yd], true);\n    x = field.mul(xn, xd_inv); // xNum / xDen\n    y = field.mul(y, field.mul(yn, yd_inv)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\n/** Point interface, which curves must implement to work correctly with the module. */\nexport interface H2CPoint<T> extends Group<H2CPoint<T>> {\n  add(rhs: H2CPoint<T>): H2CPoint<T>;\n  toAffine(iz?: bigint): AffinePoint<T>;\n  clearCofactor(): H2CPoint<T>;\n  assertValidity(): void;\n}\n\nexport interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {\n  fromAffine(ap: AffinePoint<T>): H2CPoint<T>;\n}\n\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\nexport type HTFMethod<T> = (msg: Uint8Array, options?: htfBasicOpts) => H2CPoint<T>;\nexport type MapMethod<T> = (scalars: bigint[]) => H2CPoint<T>;\nexport type Hasher<T> = {\n  hashToCurve: HTFMethod<T>;\n  encodeToCurve: HTFMethod<T>;\n  mapToCurve: MapMethod<T>;\n  defaults: Opts & { encodeDST?: UnicodeOrBytes };\n};\n\n/** Creates hash-to-curve methods from EC Point and mapToCurve function. */\nexport function createHasher<T>(\n  Point: H2CPointConstructor<T>,\n  mapToCurve: MapToCurve<T>,\n  defaults: Opts & { encodeDST?: UnicodeOrBytes }\n): Hasher<T> {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  function map(num: bigint[]) {\n    return Point.fromAffine(mapToCurve(num));\n  }\n  function clear(initial: H2CPoint<T>) {\n    const P = initial.clearCofactor();\n    if (P.equals(Point.ZERO)) return Point.ZERO; // zero will throw in assert\n    P.assertValidity();\n    return P;\n  }\n\n  return {\n    defaults,\n\n    // Encodes byte string to elliptic curve.\n    // hash_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    hashToCurve(msg: Uint8Array, options?: htfBasicOpts): H2CPoint<T> {\n      const u = hash_to_field(msg, 2, { ...defaults, DST: defaults.DST, ...options } as Opts);\n      const u0 = map(u[0]);\n      const u1 = map(u[1]);\n      return clear(u0.add(u1));\n    },\n\n    // Encodes byte string to elliptic curve.\n    // encode_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    encodeToCurve(msg: Uint8Array, options?: htfBasicOpts): H2CPoint<T> {\n      const u = hash_to_field(msg, 1, { ...defaults, DST: defaults.encodeDST, ...options } as Opts);\n      return clear(map(u[0]));\n    },\n\n    // Same as encodeToCurve, but without hash\n    mapToCurve(scalars: bigint[]): H2CPoint<T> {\n      if (!Array.isArray(scalars)) throw new Error('expected array of bigints');\n      for (const i of scalars)\n        if (typeof i !== 'bigint') throw new Error('expected array of bigints');\n      return clear(map(scalars));\n    },\n  };\n}\n", "/**\n * NIST secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf).\n *\n * Seems to be rigid (not backdoored)\n * [as per discussion](https://bitcointalk.org/index.php?topic=289795.msg3183975#msg3183975).\n *\n * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n * [See explanation](https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066).\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha2';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { createCurve, type CurveFnWithCreate } from './_shortw_utils.ts';\nimport { createHasher, type Hasher, type HTFMethod, isogenyMap } from './abstract/hash-to-curve.ts';\nimport { Field, mod, pow2 } from './abstract/modular.ts';\nimport type { Hex, PrivKey } from './abstract/utils.ts';\nimport {\n  aInRange,\n  bytesToNumberBE,\n  concatBytes,\n  ensureBytes,\n  inRange,\n  numberToBytesBE,\n} from './abstract/utils.ts';\nimport { mapToCurveSimpleSWU, type ProjPointType as PointType } from './abstract/weierstrass.ts';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y: bigint): bigint {\n  const P = secp256k1P;\n  // prettier-ignore\n  const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n  // prettier-ignore\n  const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n  const b2 = (y * y * y) % P; // x^3, 11\n  const b3 = (b2 * b2 * y) % P; // x^7\n  const b6 = (pow2(b3, _3n, P) * b3) % P;\n  const b9 = (pow2(b6, _3n, P) * b3) % P;\n  const b11 = (pow2(b9, _2n, P) * b2) % P;\n  const b22 = (pow2(b11, _11n, P) * b11) % P;\n  const b44 = (pow2(b22, _22n, P) * b22) % P;\n  const b88 = (pow2(b44, _44n, P) * b44) % P;\n  const b176 = (pow2(b88, _88n, P) * b88) % P;\n  const b220 = (pow2(b176, _44n, P) * b44) % P;\n  const b223 = (pow2(b220, _3n, P) * b3) % P;\n  const t1 = (pow2(b223, _23n, P) * b22) % P;\n  const t2 = (pow2(t1, _6n, P) * b2) % P;\n  const root = pow2(t2, _2n, P);\n  if (!Fpk1.eql(Fpk1.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fpk1 = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\n/**\n * secp256k1 curve, ECDSA and ECDH methods.\n *\n * Field: `2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n`\n *\n * @example\n * ```js\n * import { secp256k1 } from '@noble/curves/secp256k1';\n * const priv = secp256k1.utils.randomPrivateKey();\n * const pub = secp256k1.getPublicKey(priv);\n * const msg = new Uint8Array(32).fill(1); // message hash (not message) in ecdsa\n * const sig = secp256k1.sign(msg, priv); // `{prehash: true}` option is available\n * const isValid = secp256k1.verify(sig, msg, pub) === true;\n * ```\n */\nexport const secp256k1: CurveFnWithCreate = createCurve(\n  {\n    a: _0n,\n    b: BigInt(7),\n    Fp: Fpk1,\n    n: secp256k1N,\n    Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n    Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n    h: BigInt(1),\n    lowS: true, // Allow only low-S signatures by default in sign() and verify()\n    endo: {\n      // Endomorphism, see above\n      beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n      splitScalar: (k: bigint) => {\n        const n = secp256k1N;\n        const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n        const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n        const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n        const b2 = a1;\n        const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n\n        const c1 = divNearest(b2 * k, n);\n        const c2 = divNearest(-b1 * k, n);\n        let k1 = mod(k - c1 * a1 - c2 * a2, n);\n        let k2 = mod(-c1 * b1 - c2 * b2, n);\n        const k1neg = k1 > POW_2_128;\n        const k2neg = k2 > POW_2_128;\n        if (k1neg) k1 = n - k1;\n        if (k2neg) k2 = n - k2;\n        if (k1 > POW_2_128 || k2 > POW_2_128) {\n          throw new Error('splitScalar: Endomorphism failed, k=' + k);\n        }\n        return { k1neg, k1, k2neg, k2 };\n      },\n    },\n  },\n  sha256\n);\n\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\n  let tagP = TAGGED_HASH_PREFIXES[tag];\n  if (tagP === undefined) {\n    const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n    tagP = concatBytes(tagH, tagH);\n    TAGGED_HASH_PREFIXES[tag] = tagP;\n  }\n  return sha256(concatBytes(tagP, ...messages));\n}\n\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = /* @__PURE__ */ (() => secp256k1.ProjectivePoint)();\nconst GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>\n  Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n  let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 0 < d' < n check is done inside\n  const scalar = p.hasEvenY() ? d_ : modN(-d_);\n  return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x: bigint): PointType<bigint> {\n  aInRange('x', x, _1n, secp256k1P); // Fail if x \u2265 p.\n  const xx = modP(x * x);\n  const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n  if (y % _2n !== _0n) y = modP(-y); // Return the unique point P such that x(P) = x and\n  const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n  p.assertValidity();\n  return p;\n}\nconst num = bytesToNumberBE;\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return modN(num(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\n\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(\n  message: Hex,\n  privateKey: PrivKey,\n  auxRand: Hex = randomBytes(32)\n): Uint8Array {\n  const m = ensureBytes('message', message);\n  const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n  const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n  const t = numTo32b(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n  const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n  const k_ = modN(num(rand)); // Let k' = int(rand) mod n\n  if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\n  const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n  const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n  sig.set(rx, 0);\n  sig.set(numTo32b(modN(k + e * d)), 32);\n  // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n  if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\n  const sig = ensureBytes('signature', signature, 64);\n  const m = ensureBytes('message', message);\n  const pub = ensureBytes('publicKey', publicKey, 32);\n  try {\n    const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!inRange(r, _1n, secp256k1P)) return false;\n    const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!inRange(s, _1n, secp256k1N)) return false;\n    const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n    const R = GmulAdd(P, s, modN(-e)); // R = s\u22C5G - e\u22C5P\n    if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n    return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n  } catch (error) {\n    return false;\n  }\n}\n\nexport type SecpSchnorr = {\n  getPublicKey: typeof schnorrGetPublicKey;\n  sign: typeof schnorrSign;\n  verify: typeof schnorrVerify;\n  utils: {\n    randomPrivateKey: () => Uint8Array;\n    lift_x: typeof lift_x;\n    pointToBytes: (point: PointType<bigint>) => Uint8Array;\n    numberToBytesBE: typeof numberToBytesBE;\n    bytesToNumberBE: typeof bytesToNumberBE;\n    taggedHash: typeof taggedHash;\n    mod: typeof mod;\n  };\n};\n/**\n * Schnorr signatures over secp256k1.\n * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n * @example\n * ```js\n * import { schnorr } from '@noble/curves/secp256k1';\n * const priv = schnorr.utils.randomPrivateKey();\n * const pub = schnorr.getPublicKey(priv);\n * const msg = new TextEncoder().encode('hello');\n * const sig = schnorr.sign(msg, priv);\n * const isValid = schnorr.verify(sig, msg, pub);\n * ```\n */\nexport const schnorr: SecpSchnorr = /* @__PURE__ */ (() => ({\n  getPublicKey: schnorrGetPublicKey,\n  sign: schnorrSign,\n  verify: schnorrVerify,\n  utils: {\n    randomPrivateKey: secp256k1.utils.randomPrivateKey,\n    lift_x,\n    pointToBytes,\n    numberToBytesBE,\n    bytesToNumberBE,\n    taggedHash,\n    mod,\n  },\n}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fpk1,\n    [\n      // xNum\n      [\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n        '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n        '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n      ],\n      // xDen\n      [\n        '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n        '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n      // yNum\n      [\n        '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n        '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n        '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n        '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n      ],\n      // yDen\n      [\n        '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n        '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n        '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n    ].map((i) => i.map((j) => BigInt(j))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fpk1, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fpk1.create(BigInt('-11')),\n  }))();\n/** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */\nexport const secp256k1_hasher: Hasher<bigint> = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.ProjectivePoint,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fpk1.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fpk1.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    } as const\n  ))();\n\nexport const hashToCurve: HTFMethod<bigint> = /* @__PURE__ */ (() =>\n  secp256k1_hasher.hashToCurve)();\n\nexport const encodeToCurve: HTFMethod<bigint> = /* @__PURE__ */ (() =>\n  secp256k1_hasher.encodeToCurve)();\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { size } from '../data/size.js'\nimport {\n  type HexToNumberErrorType,\n  hexToBigInt,\n  hexToNumber,\n} from '../encoding/fromHex.js'\nimport { toHex } from '../encoding/toHex.js'\n\nexport type RecoverPublicKeyParameters = {\n  hash: Hex | ByteArray\n  signature: Hex | ByteArray | Signature\n}\n\nexport type RecoverPublicKeyReturnType = Hex\n\nexport type RecoverPublicKeyErrorType =\n  | HexToNumberErrorType\n  | IsHexErrorType\n  | ErrorType\n\nexport async function recoverPublicKey({\n  hash,\n  signature,\n}: RecoverPublicKeyParameters): Promise<RecoverPublicKeyReturnType> {\n  const hashHex = isHex(hash) ? hash : toHex(hash)\n\n  const { secp256k1 } = await import('@noble/curves/secp256k1')\n  const signature_ = (() => {\n    // typeof signature: `Signature`\n    if (typeof signature === 'object' && 'r' in signature && 's' in signature) {\n      const { r, s, v, yParity } = signature\n      const yParityOrV = Number(yParity ?? v)!\n      const recoveryBit = toRecoveryBit(yParityOrV)\n      return new secp256k1.Signature(\n        hexToBigInt(r),\n        hexToBigInt(s),\n      ).addRecoveryBit(recoveryBit)\n    }\n\n    // typeof signature: `Hex | ByteArray`\n    const signatureHex = isHex(signature) ? signature : toHex(signature)\n    if (size(signatureHex) !== 65) throw new Error('invalid signature length')\n    const yParityOrV = hexToNumber(`0x${signatureHex.slice(130)}`)\n    const recoveryBit = toRecoveryBit(yParityOrV)\n    return secp256k1.Signature.fromCompact(\n      signatureHex.substring(2, 130),\n    ).addRecoveryBit(recoveryBit)\n  })()\n\n  const publicKey = signature_\n    .recoverPublicKey(hashHex.substring(2))\n    .toHex(false)\n  return `0x${publicKey}`\n}\n\nfunction toRecoveryBit(yParityOrV: number) {\n  if (yParityOrV === 0 || yParityOrV === 1) return yParityOrV\n  if (yParityOrV === 27) return 0\n  if (yParityOrV === 28) return 1\n  throw new Error('Invalid yParityOrV value')\n}\n", "import type { Address } from 'abitype'\n\nimport { publicKeyToAddress } from '../../accounts/utils/publicKeyToAddress.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport { recoverPublicKey } from './recoverPublicKey.js'\n\nexport type RecoverAddressParameters = {\n  hash: Hex | ByteArray\n  signature: Hex | ByteArray | Signature\n}\n\nexport type RecoverAddressReturnType = Address\n\nexport type RecoverAddressErrorType = ErrorType\n\nexport async function recoverAddress({\n  hash,\n  signature,\n}: RecoverAddressParameters): Promise<RecoverAddressReturnType> {\n  return publicKeyToAddress(await recoverPublicKey({ hash, signature }))\n}\n", "import { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n  type CreateCursorErrorType,\n  type Cursor,\n  createCursor,\n} from '../cursor.js'\n\nimport { type HexToBytesErrorType, hexToBytes } from './toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from './toHex.js'\n\nexport type RecursiveArray<T> = T | readonly RecursiveArray<T>[]\n\ntype To = 'hex' | 'bytes'\n\ntype Encodable = {\n  length: number\n  encode(cursor: Cursor): void\n}\n\nexport type ToRlpReturnType<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type ToRlpErrorType =\n  | CreateCursorErrorType\n  | BytesToHexErrorType\n  | HexToBytesErrorType\n  | ErrorType\n\nexport function toRlp<to extends To = 'hex'>(\n  bytes: RecursiveArray<ByteArray> | RecursiveArray<Hex>,\n  to: to | To | undefined = 'hex',\n): ToRlpReturnType<to> {\n  const encodable = getEncodable(bytes)\n  const cursor = createCursor(new Uint8Array(encodable.length))\n  encodable.encode(cursor)\n\n  if (to === 'hex') return bytesToHex(cursor.bytes) as ToRlpReturnType<to>\n  return cursor.bytes as ToRlpReturnType<to>\n}\n\nexport type BytesToRlpErrorType = ToRlpErrorType | ErrorType\n\nexport function bytesToRlp<to extends To = 'bytes'>(\n  bytes: RecursiveArray<ByteArray>,\n  to: to | To | undefined = 'bytes',\n): ToRlpReturnType<to> {\n  return toRlp(bytes, to)\n}\n\nexport type HexToRlpErrorType = ToRlpErrorType | ErrorType\n\nexport function hexToRlp<to extends To = 'hex'>(\n  hex: RecursiveArray<Hex>,\n  to: to | To | undefined = 'hex',\n): ToRlpReturnType<to> {\n  return toRlp(hex, to)\n}\n\nfunction getEncodable(\n  bytes: RecursiveArray<ByteArray> | RecursiveArray<Hex>,\n): Encodable {\n  if (Array.isArray(bytes))\n    return getEncodableList(bytes.map((x) => getEncodable(x)))\n  return getEncodableBytes(bytes as any)\n}\n\nfunction getEncodableList(list: Encodable[]): Encodable {\n  const bodyLength = list.reduce((acc, x) => acc + x.length, 0)\n\n  const sizeOfBodyLength = getSizeOfLength(bodyLength)\n  const length = (() => {\n    if (bodyLength <= 55) return 1 + bodyLength\n    return 1 + sizeOfBodyLength + bodyLength\n  })()\n\n  return {\n    length,\n    encode(cursor: Cursor) {\n      if (bodyLength <= 55) {\n        cursor.pushByte(0xc0 + bodyLength)\n      } else {\n        cursor.pushByte(0xc0 + 55 + sizeOfBodyLength)\n        if (sizeOfBodyLength === 1) cursor.pushUint8(bodyLength)\n        else if (sizeOfBodyLength === 2) cursor.pushUint16(bodyLength)\n        else if (sizeOfBodyLength === 3) cursor.pushUint24(bodyLength)\n        else cursor.pushUint32(bodyLength)\n      }\n      for (const { encode } of list) {\n        encode(cursor)\n      }\n    },\n  }\n}\n\nfunction getEncodableBytes(bytesOrHex: ByteArray | Hex): Encodable {\n  const bytes =\n    typeof bytesOrHex === 'string' ? hexToBytes(bytesOrHex) : bytesOrHex\n\n  const sizeOfBytesLength = getSizeOfLength(bytes.length)\n  const length = (() => {\n    if (bytes.length === 1 && bytes[0] < 0x80) return 1\n    if (bytes.length <= 55) return 1 + bytes.length\n    return 1 + sizeOfBytesLength + bytes.length\n  })()\n\n  return {\n    length,\n    encode(cursor: Cursor) {\n      if (bytes.length === 1 && bytes[0] < 0x80) {\n        cursor.pushBytes(bytes)\n      } else if (bytes.length <= 55) {\n        cursor.pushByte(0x80 + bytes.length)\n        cursor.pushBytes(bytes)\n      } else {\n        cursor.pushByte(0x80 + 55 + sizeOfBytesLength)\n        if (sizeOfBytesLength === 1) cursor.pushUint8(bytes.length)\n        else if (sizeOfBytesLength === 2) cursor.pushUint16(bytes.length)\n        else if (sizeOfBytesLength === 3) cursor.pushUint24(bytes.length)\n        else cursor.pushUint32(bytes.length)\n        cursor.pushBytes(bytes)\n      }\n    },\n  }\n}\n\nfunction getSizeOfLength(length: number) {\n  if (length < 2 ** 8) return 1\n  if (length < 2 ** 16) return 2\n  if (length < 2 ** 24) return 3\n  if (length < 2 ** 32) return 4\n  throw new BaseError('Length is too large.')\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { AuthorizationRequest } from '../../types/authorization.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type NumberToHexErrorType, numberToHex } from '../encoding/toHex.js'\nimport { type ToRlpErrorType, toRlp } from '../encoding/toRlp.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type HashAuthorizationParameters<to extends To> =\n  AuthorizationRequest & {\n    /** Output format. @default \"hex\" */\n    to?: to | To | undefined\n  }\n\nexport type HashAuthorizationReturnType<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type HashAuthorizationErrorType =\n  | Keccak256ErrorType\n  | ConcatHexErrorType\n  | ToRlpErrorType\n  | NumberToHexErrorType\n  | HexToBytesErrorType\n  | ErrorType\n\n/**\n * Computes an Authorization hash in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n */\nexport function hashAuthorization<to extends To = 'hex'>(\n  parameters: HashAuthorizationParameters<to>,\n): HashAuthorizationReturnType<to> {\n  const { chainId, nonce, to } = parameters\n  const address = parameters.contractAddress ?? parameters.address\n  const hash = keccak256(\n    concatHex([\n      '0x05',\n      toRlp([\n        chainId ? numberToHex(chainId) : '0x',\n        address,\n        nonce ? numberToHex(nonce) : '0x',\n      ]),\n    ]),\n  )\n  if (to === 'bytes') return hexToBytes(hash) as HashAuthorizationReturnType<to>\n  return hash as HashAuthorizationReturnType<to>\n}\n", "import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  Authorization,\n  AuthorizationRequest,\n  SignedAuthorization,\n} from '../../types/authorization.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { OneOf } from '../../types/utils.js'\nimport {\n  type RecoverAddressErrorType,\n  recoverAddress,\n} from '../signature/recoverAddress.js'\nimport {\n  type HashAuthorizationErrorType,\n  hashAuthorization,\n} from './hashAuthorization.js'\n\nexport type RecoverAuthorizationAddressParameters<\n  authorization extends OneOf<\n    Authorization | AuthorizationRequest | SignedAuthorization\n  > = OneOf<Authorization | AuthorizationRequest | SignedAuthorization>,\n  //\n  _signature = Hex | ByteArray | OneOf<Signature | SignedAuthorization>,\n> = {\n  /**\n   * The Authorization object.\n   *\n   * - If an unsigned `authorization` is provided, the `signature` property is required.\n   * - If a signed `authorization` is provided, the `signature` property does not need to be provided.\n   */\n  authorization:\n    | authorization\n    | OneOf<Authorization | AuthorizationRequest | SignedAuthorization>\n} & (authorization extends SignedAuthorization\n  ? {\n      /** Signature of the Authorization. Not required if the `authorization` is signed. */\n      signature?: _signature | undefined\n    }\n  : {\n      /** Signature of the Authorization. Not required if the `authorization` is signed. */\n      signature: _signature\n    })\n\nexport type RecoverAuthorizationAddressReturnType = Address\n\nexport type RecoverAuthorizationAddressErrorType =\n  | HashAuthorizationErrorType\n  | RecoverAddressErrorType\n  | ErrorType\n\nexport async function recoverAuthorizationAddress<\n  const authorization extends OneOf<\n    Authorization | AuthorizationRequest | SignedAuthorization\n  >,\n>(\n  parameters: RecoverAuthorizationAddressParameters<authorization>,\n): Promise<RecoverAuthorizationAddressReturnType> {\n  const { authorization, signature } = parameters\n\n  return recoverAddress({\n    hash: hashAuthorization(authorization as AuthorizationRequest),\n    signature: (signature ?? authorization) as Signature,\n  })\n}\n", "import type { Account } from '../accounts/types.js'\nimport type { EstimateGasParameters } from '../actions/public/estimateGas.js'\nimport type { Chain } from '../types/chain.js'\nimport { formatEther } from '../utils/unit/formatEther.js'\nimport { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { BaseError } from './base.js'\nimport { prettyPrint } from './transaction.js'\n\nexport type EstimateGasExecutionErrorType = EstimateGasExecutionError & {\n  name: 'EstimateGasExecutionError'\n}\nexport class EstimateGasExecutionError extends BaseError {\n  override cause: BaseError\n\n  constructor(\n    cause: BaseError,\n    {\n      account,\n      docsPath,\n      chain,\n      data,\n      gas,\n      gasPrice,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      nonce,\n      to,\n      value,\n    }: Omit<EstimateGasParameters<any>, 'account'> & {\n      account?: Account | undefined\n      chain?: Chain | undefined\n      docsPath?: string | undefined\n    },\n  ) {\n    const prettyArgs = prettyPrint({\n      from: account?.address,\n      to,\n      value:\n        typeof value !== 'undefined' &&\n        `${formatEther(value)} ${chain?.nativeCurrency?.symbol || 'ETH'}`,\n      data,\n      gas,\n      gasPrice:\n        typeof gasPrice !== 'undefined' && `${formatGwei(gasPrice)} gwei`,\n      maxFeePerGas:\n        typeof maxFeePerGas !== 'undefined' &&\n        `${formatGwei(maxFeePerGas)} gwei`,\n      maxPriorityFeePerGas:\n        typeof maxPriorityFeePerGas !== 'undefined' &&\n        `${formatGwei(maxPriorityFeePerGas)} gwei`,\n      nonce,\n    })\n\n    super(cause.shortMessage, {\n      cause,\n      docsPath,\n      metaMessages: [\n        ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n        'Estimate Gas Arguments:',\n        prettyArgs,\n      ].filter(Boolean) as string[],\n      name: 'EstimateGasExecutionError',\n    })\n    this.cause = cause\n  }\n}\n", "import { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { BaseError } from './base.js'\n\n/**\n * geth:    https://github.com/ethereum/go-ethereum/blob/master/core/error.go\n *          https://github.com/ethereum/go-ethereum/blob/master/core/types/transaction.go#L34-L41\n *\n * erigon:  https://github.com/ledgerwatch/erigon/blob/master/core/error.go\n *          https://github.com/ledgerwatch/erigon/blob/master/core/types/transaction.go#L41-L46\n *\n * anvil:   https://github.com/foundry-rs/foundry/blob/master/anvil/src/eth/error.rs#L108\n */\nexport type ExecutionRevertedErrorType = ExecutionRevertedError & {\n  code: 3\n  name: 'ExecutionRevertedError'\n}\nexport class ExecutionRevertedError extends BaseError {\n  static code = 3\n  static nodeMessage = /execution reverted|gas required exceeds allowance/\n\n  constructor({\n    cause,\n    message,\n  }: { cause?: BaseError | undefined; message?: string | undefined } = {}) {\n    const reason = message\n      ?.replace('execution reverted: ', '')\n      ?.replace('execution reverted', '')\n    super(\n      `Execution reverted ${\n        reason ? `with reason: ${reason}` : 'for an unknown reason'\n      }.`,\n      {\n        cause,\n        name: 'ExecutionRevertedError',\n      },\n    )\n  }\n}\n\nexport type FeeCapTooHighErrorType = FeeCapTooHighError & {\n  name: 'FeeCapTooHighError'\n}\nexport class FeeCapTooHighError extends BaseError {\n  static nodeMessage =\n    /max fee per gas higher than 2\\^256-1|fee cap higher than 2\\^256-1/\n  constructor({\n    cause,\n    maxFeePerGas,\n  }: {\n    cause?: BaseError | undefined\n    maxFeePerGas?: bigint | undefined\n  } = {}) {\n    super(\n      `The fee cap (\\`maxFeePerGas\\`${\n        maxFeePerGas ? ` = ${formatGwei(maxFeePerGas)} gwei` : ''\n      }) cannot be higher than the maximum allowed value (2^256-1).`,\n      {\n        cause,\n        name: 'FeeCapTooHighError',\n      },\n    )\n  }\n}\n\nexport type FeeCapTooLowErrorType = FeeCapTooLowError & {\n  name: 'FeeCapTooLowError'\n}\nexport class FeeCapTooLowError extends BaseError {\n  static nodeMessage =\n    /max fee per gas less than block base fee|fee cap less than block base fee|transaction is outdated/\n  constructor({\n    cause,\n    maxFeePerGas,\n  }: {\n    cause?: BaseError | undefined\n    maxFeePerGas?: bigint | undefined\n  } = {}) {\n    super(\n      `The fee cap (\\`maxFeePerGas\\`${\n        maxFeePerGas ? ` = ${formatGwei(maxFeePerGas)}` : ''\n      } gwei) cannot be lower than the block base fee.`,\n      {\n        cause,\n        name: 'FeeCapTooLowError',\n      },\n    )\n  }\n}\n\nexport type NonceTooHighErrorType = NonceTooHighError & {\n  name: 'NonceTooHighError'\n}\nexport class NonceTooHighError extends BaseError {\n  static nodeMessage = /nonce too high/\n  constructor({\n    cause,\n    nonce,\n  }: { cause?: BaseError | undefined; nonce?: number | undefined } = {}) {\n    super(\n      `Nonce provided for the transaction ${\n        nonce ? `(${nonce}) ` : ''\n      }is higher than the next one expected.`,\n      { cause, name: 'NonceTooHighError' },\n    )\n  }\n}\n\nexport type NonceTooLowErrorType = NonceTooLowError & {\n  name: 'NonceTooLowError'\n}\nexport class NonceTooLowError extends BaseError {\n  static nodeMessage =\n    /nonce too low|transaction already imported|already known/\n  constructor({\n    cause,\n    nonce,\n  }: { cause?: BaseError | undefined; nonce?: number | undefined } = {}) {\n    super(\n      [\n        `Nonce provided for the transaction ${\n          nonce ? `(${nonce}) ` : ''\n        }is lower than the current nonce of the account.`,\n        'Try increasing the nonce or find the latest nonce with `getTransactionCount`.',\n      ].join('\\n'),\n      { cause, name: 'NonceTooLowError' },\n    )\n  }\n}\n\nexport type NonceMaxValueErrorType = NonceMaxValueError & {\n  name: 'NonceMaxValueError'\n}\nexport class NonceMaxValueError extends BaseError {\n  static nodeMessage = /nonce has max value/\n  constructor({\n    cause,\n    nonce,\n  }: { cause?: BaseError | undefined; nonce?: number | undefined } = {}) {\n    super(\n      `Nonce provided for the transaction ${\n        nonce ? `(${nonce}) ` : ''\n      }exceeds the maximum allowed nonce.`,\n      { cause, name: 'NonceMaxValueError' },\n    )\n  }\n}\n\nexport type InsufficientFundsErrorType = InsufficientFundsError & {\n  name: 'InsufficientFundsError'\n}\nexport class InsufficientFundsError extends BaseError {\n  static nodeMessage =\n    /insufficient funds|exceeds transaction sender account balance/\n  constructor({ cause }: { cause?: BaseError | undefined } = {}) {\n    super(\n      [\n        'The total cost (gas * gas fee + value) of executing this transaction exceeds the balance of the account.',\n      ].join('\\n'),\n      {\n        cause,\n        metaMessages: [\n          'This error could arise when the account does not have enough funds to:',\n          ' - pay for the total gas fee,',\n          ' - pay for the value to send.',\n          ' ',\n          'The cost of the transaction is calculated as `gas * gas fee + value`, where:',\n          ' - `gas` is the amount of gas needed for transaction to execute,',\n          ' - `gas fee` is the gas fee,',\n          ' - `value` is the amount of ether to send to the recipient.',\n        ],\n        name: 'InsufficientFundsError',\n      },\n    )\n  }\n}\n\nexport type IntrinsicGasTooHighErrorType = IntrinsicGasTooHighError & {\n  name: 'IntrinsicGasTooHighError'\n}\nexport class IntrinsicGasTooHighError extends BaseError {\n  static nodeMessage = /intrinsic gas too high|gas limit reached/\n  constructor({\n    cause,\n    gas,\n  }: { cause?: BaseError | undefined; gas?: bigint | undefined } = {}) {\n    super(\n      `The amount of gas ${\n        gas ? `(${gas}) ` : ''\n      }provided for the transaction exceeds the limit allowed for the block.`,\n      {\n        cause,\n        name: 'IntrinsicGasTooHighError',\n      },\n    )\n  }\n}\n\nexport type IntrinsicGasTooLowErrorType = IntrinsicGasTooLowError & {\n  name: 'IntrinsicGasTooLowError'\n}\nexport class IntrinsicGasTooLowError extends BaseError {\n  static nodeMessage = /intrinsic gas too low/\n  constructor({\n    cause,\n    gas,\n  }: { cause?: BaseError | undefined; gas?: bigint | undefined } = {}) {\n    super(\n      `The amount of gas ${\n        gas ? `(${gas}) ` : ''\n      }provided for the transaction is too low.`,\n      {\n        cause,\n        name: 'IntrinsicGasTooLowError',\n      },\n    )\n  }\n}\n\nexport type TransactionTypeNotSupportedErrorType =\n  TransactionTypeNotSupportedError & {\n    name: 'TransactionTypeNotSupportedError'\n  }\nexport class TransactionTypeNotSupportedError extends BaseError {\n  static nodeMessage = /transaction type not valid/\n  constructor({ cause }: { cause?: BaseError | undefined }) {\n    super('The transaction type is not supported for this chain.', {\n      cause,\n      name: 'TransactionTypeNotSupportedError',\n    })\n  }\n}\n\nexport type TipAboveFeeCapErrorType = TipAboveFeeCapError & {\n  name: 'TipAboveFeeCapError'\n}\nexport class TipAboveFeeCapError extends BaseError {\n  static nodeMessage =\n    /max priority fee per gas higher than max fee per gas|tip higher than fee cap/\n  constructor({\n    cause,\n    maxPriorityFeePerGas,\n    maxFeePerGas,\n  }: {\n    cause?: BaseError | undefined\n    maxPriorityFeePerGas?: bigint | undefined\n    maxFeePerGas?: bigint | undefined\n  } = {}) {\n    super(\n      [\n        `The provided tip (\\`maxPriorityFeePerGas\\`${\n          maxPriorityFeePerGas\n            ? ` = ${formatGwei(maxPriorityFeePerGas)} gwei`\n            : ''\n        }) cannot be higher than the fee cap (\\`maxFeePerGas\\`${\n          maxFeePerGas ? ` = ${formatGwei(maxFeePerGas)} gwei` : ''\n        }).`,\n      ].join('\\n'),\n      {\n        cause,\n        name: 'TipAboveFeeCapError',\n      },\n    )\n  }\n}\n\nexport type UnknownNodeErrorType = UnknownNodeError & {\n  name: 'UnknownNodeError'\n}\nexport class UnknownNodeError extends BaseError {\n  constructor({ cause }: { cause?: BaseError | undefined }) {\n    super(`An error occurred while executing: ${cause?.shortMessage}`, {\n      cause,\n      name: 'UnknownNodeError',\n    })\n  }\n}\n", "import type { SendTransactionParameters } from '../../actions/wallet/sendTransaction.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n  ExecutionRevertedError,\n  type ExecutionRevertedErrorType,\n  FeeCapTooHighError,\n  type FeeCapTooHighErrorType,\n  FeeCapTooLowError,\n  type FeeCapTooLowErrorType,\n  InsufficientFundsError,\n  type InsufficientFundsErrorType,\n  IntrinsicGasTooHighError,\n  type IntrinsicGasTooHighErrorType,\n  IntrinsicGasTooLowError,\n  type IntrinsicGasTooLowErrorType,\n  NonceMaxValueError,\n  type NonceMaxValueErrorType,\n  NonceTooHighError,\n  type NonceTooHighErrorType,\n  NonceTooLowError,\n  type NonceTooLowErrorType,\n  TipAboveFeeCapError,\n  type TipAboveFeeCapErrorType,\n  TransactionTypeNotSupportedError,\n  type TransactionTypeNotSupportedErrorType,\n  UnknownNodeError,\n  type UnknownNodeErrorType,\n} from '../../errors/node.js'\nimport { RpcRequestError } from '../../errors/request.js'\nimport {\n  InvalidInputRpcError,\n  TransactionRejectedRpcError,\n} from '../../errors/rpc.js'\nimport type { ExactPartial } from '../../types/utils.js'\n\nexport function containsNodeError(err: BaseError) {\n  return (\n    err instanceof TransactionRejectedRpcError ||\n    err instanceof InvalidInputRpcError ||\n    (err instanceof RpcRequestError && err.code === ExecutionRevertedError.code)\n  )\n}\n\nexport type GetNodeErrorParameters = ExactPartial<\n  SendTransactionParameters<any>\n>\n\nexport type GetNodeErrorReturnType =\n  | ExecutionRevertedErrorType\n  | FeeCapTooHighErrorType\n  | FeeCapTooLowErrorType\n  | NonceTooHighErrorType\n  | NonceTooLowErrorType\n  | NonceMaxValueErrorType\n  | InsufficientFundsErrorType\n  | IntrinsicGasTooHighErrorType\n  | IntrinsicGasTooLowErrorType\n  | TransactionTypeNotSupportedErrorType\n  | TipAboveFeeCapErrorType\n  | UnknownNodeErrorType\n\nexport function getNodeError(\n  err: BaseError,\n  args: GetNodeErrorParameters,\n): GetNodeErrorReturnType {\n  const message = (err.details || '').toLowerCase()\n\n  const executionRevertedError =\n    err instanceof BaseError\n      ? err.walk(\n          (e) =>\n            (e as { code: number } | null | undefined)?.code ===\n            ExecutionRevertedError.code,\n        )\n      : err\n  if (executionRevertedError instanceof BaseError)\n    return new ExecutionRevertedError({\n      cause: err,\n      message: executionRevertedError.details,\n    }) as any\n  if (ExecutionRevertedError.nodeMessage.test(message))\n    return new ExecutionRevertedError({\n      cause: err,\n      message: err.details,\n    }) as any\n  if (FeeCapTooHighError.nodeMessage.test(message))\n    return new FeeCapTooHighError({\n      cause: err,\n      maxFeePerGas: args?.maxFeePerGas,\n    }) as any\n  if (FeeCapTooLowError.nodeMessage.test(message))\n    return new FeeCapTooLowError({\n      cause: err,\n      maxFeePerGas: args?.maxFeePerGas,\n    }) as any\n  if (NonceTooHighError.nodeMessage.test(message))\n    return new NonceTooHighError({ cause: err, nonce: args?.nonce }) as any\n  if (NonceTooLowError.nodeMessage.test(message))\n    return new NonceTooLowError({ cause: err, nonce: args?.nonce }) as any\n  if (NonceMaxValueError.nodeMessage.test(message))\n    return new NonceMaxValueError({ cause: err, nonce: args?.nonce }) as any\n  if (InsufficientFundsError.nodeMessage.test(message))\n    return new InsufficientFundsError({ cause: err }) as any\n  if (IntrinsicGasTooHighError.nodeMessage.test(message))\n    return new IntrinsicGasTooHighError({ cause: err, gas: args?.gas }) as any\n  if (IntrinsicGasTooLowError.nodeMessage.test(message))\n    return new IntrinsicGasTooLowError({ cause: err, gas: args?.gas }) as any\n  if (TransactionTypeNotSupportedError.nodeMessage.test(message))\n    return new TransactionTypeNotSupportedError({ cause: err }) as any\n  if (TipAboveFeeCapError.nodeMessage.test(message))\n    return new TipAboveFeeCapError({\n      cause: err,\n      maxFeePerGas: args?.maxFeePerGas,\n      maxPriorityFeePerGas: args?.maxPriorityFeePerGas,\n    }) as any\n  return new UnknownNodeError({\n    cause: err,\n  }) as any\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { EstimateGasParameters } from '../../actions/public/estimateGas.js'\nimport type { BaseError } from '../../errors/base.js'\nimport {\n  EstimateGasExecutionError,\n  type EstimateGasExecutionErrorType,\n} from '../../errors/estimateGas.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\n\nimport {\n  type GetNodeErrorParameters,\n  type GetNodeErrorReturnType,\n  getNodeError,\n} from './getNodeError.js'\n\nexport type GetEstimateGasErrorReturnType<cause = ErrorType> = Omit<\n  EstimateGasExecutionErrorType,\n  'cause'\n> & { cause: cause | GetNodeErrorReturnType }\n\nexport function getEstimateGasError<err extends ErrorType<string>>(\n  err: err,\n  {\n    docsPath,\n    ...args\n  }: Omit<EstimateGasParameters, 'account'> & {\n    account?: Account | undefined\n    chain?: Chain | undefined\n    docsPath?: string | undefined\n  },\n): GetEstimateGasErrorReturnType<err> {\n  const cause = (() => {\n    const cause = getNodeError(\n      err as {} as BaseError,\n      args as GetNodeErrorParameters,\n    )\n    if (cause instanceof UnknownNodeError) return err as {} as BaseError\n    return cause\n  })()\n  return new EstimateGasExecutionError(cause, {\n    docsPath,\n    ...args,\n  }) as GetEstimateGasErrorReturnType<err>\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ChainFormatter } from '../../types/chain.js'\n\nexport type ExtractErrorType = ErrorType\n\n/**\n * @description Picks out the keys from `value` that exist in the formatter..\n */\nexport function extract(\n  value_: Record<string, unknown>,\n  { format }: { format?: ChainFormatter['format'] | undefined },\n) {\n  if (!format) return {}\n\n  const value: Record<string, unknown> = {}\n  function extract_(formatted: Record<string, any>) {\n    const keys = Object.keys(formatted)\n    for (const key of keys) {\n      if (key in value_) value[key] = value_[key]\n      if (\n        formatted[key] &&\n        typeof formatted[key] === 'object' &&\n        !Array.isArray(formatted[key])\n      )\n        extract_(formatted[key])\n    }\n  }\n\n  const formatted = format(value_ || {})\n  extract_(formatted)\n\n  return value\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Prettify } from '../../types/utils.js'\n\nexport type DefineFormatterErrorType = ErrorType\n\nexport function defineFormatter<type extends string, parameters, returnType>(\n  type: type,\n  format: (args: parameters, action?: string | undefined) => returnType,\n) {\n  return <\n    parametersOverride,\n    returnTypeOverride,\n    exclude extends (keyof parameters | keyof parametersOverride)[] = [],\n  >({\n    exclude,\n    format: overrides,\n  }: {\n    exclude?: exclude | undefined\n    format: (\n      args: parametersOverride,\n      action?: string | undefined,\n    ) => returnTypeOverride\n  }) => {\n    return {\n      exclude,\n      format: (args: parametersOverride, action?: string | undefined) => {\n        const formatted = format(args as any, action)\n        if (exclude) {\n          for (const key of exclude) {\n            delete (formatted as any)[key]\n          }\n        }\n        return {\n          ...formatted,\n          ...overrides(args, action),\n        } as Prettify<returnTypeOverride> & {\n          [_key in exclude[number]]: never\n        }\n      },\n      type,\n    }\n  }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { AuthorizationList } from '../../types/authorization.js'\nimport type {\n  Chain,\n  ExtractChainFormatterParameters,\n} from '../../types/chain.js'\nimport type { ByteArray } from '../../types/misc.js'\nimport type {\n  RpcAuthorizationList,\n  RpcTransactionRequest,\n} from '../../types/rpc.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { bytesToHex, numberToHex } from '../encoding/toHex.js'\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\n\nexport type FormattedTransactionRequest<\n  chain extends Chain | undefined = Chain | undefined,\n> = ExtractChainFormatterParameters<\n  chain,\n  'transactionRequest',\n  TransactionRequest\n>\n\nexport const rpcTransactionType = {\n  legacy: '0x0',\n  eip2930: '0x1',\n  eip1559: '0x2',\n  eip4844: '0x3',\n  eip7702: '0x4',\n} as const\n\nexport type FormatTransactionRequestErrorType = ErrorType\n\nexport function formatTransactionRequest(\n  request: ExactPartial<TransactionRequest> & { account?: Account | undefined },\n  _?: string | undefined,\n) {\n  const rpcRequest = {} as RpcTransactionRequest\n\n  if (typeof request.authorizationList !== 'undefined')\n    rpcRequest.authorizationList = formatAuthorizationList(\n      request.authorizationList,\n    )\n  if (typeof request.accessList !== 'undefined')\n    rpcRequest.accessList = request.accessList\n  if (typeof request.blobVersionedHashes !== 'undefined')\n    rpcRequest.blobVersionedHashes = request.blobVersionedHashes\n  if (typeof request.blobs !== 'undefined') {\n    if (typeof request.blobs[0] !== 'string')\n      rpcRequest.blobs = (request.blobs as ByteArray[]).map((x) =>\n        bytesToHex(x),\n      )\n    else rpcRequest.blobs = request.blobs\n  }\n  if (typeof request.data !== 'undefined') rpcRequest.data = request.data\n  if (request.account) rpcRequest.from = request.account.address\n  if (typeof request.from !== 'undefined') rpcRequest.from = request.from\n  if (typeof request.gas !== 'undefined')\n    rpcRequest.gas = numberToHex(request.gas)\n  if (typeof request.gasPrice !== 'undefined')\n    rpcRequest.gasPrice = numberToHex(request.gasPrice)\n  if (typeof request.maxFeePerBlobGas !== 'undefined')\n    rpcRequest.maxFeePerBlobGas = numberToHex(request.maxFeePerBlobGas)\n  if (typeof request.maxFeePerGas !== 'undefined')\n    rpcRequest.maxFeePerGas = numberToHex(request.maxFeePerGas)\n  if (typeof request.maxPriorityFeePerGas !== 'undefined')\n    rpcRequest.maxPriorityFeePerGas = numberToHex(request.maxPriorityFeePerGas)\n  if (typeof request.nonce !== 'undefined')\n    rpcRequest.nonce = numberToHex(request.nonce)\n  if (typeof request.to !== 'undefined') rpcRequest.to = request.to\n  if (typeof request.type !== 'undefined')\n    rpcRequest.type = rpcTransactionType[request.type]\n  if (typeof request.value !== 'undefined')\n    rpcRequest.value = numberToHex(request.value)\n\n  return rpcRequest\n}\n\nexport type DefineTransactionRequestErrorType =\n  | DefineFormatterErrorType\n  | ErrorType\n\nexport const defineTransactionRequest = /*#__PURE__*/ defineFormatter(\n  'transactionRequest',\n  formatTransactionRequest,\n)\n\n//////////////////////////////////////////////////////////////////////////////\n\nfunction formatAuthorizationList(\n  authorizationList: AuthorizationList<number, boolean>,\n): RpcAuthorizationList {\n  return authorizationList.map(\n    (authorization) =>\n      ({\n        address: authorization.address,\n        r: authorization.r\n          ? numberToHex(BigInt(authorization.r))\n          : authorization.r,\n        s: authorization.s\n          ? numberToHex(BigInt(authorization.s))\n          : authorization.s,\n        chainId: numberToHex(authorization.chainId),\n        nonce: numberToHex(authorization.nonce),\n        ...(typeof authorization.yParity !== 'undefined'\n          ? { yParity: numberToHex(authorization.yParity) }\n          : {}),\n        ...(typeof authorization.v !== 'undefined' &&\n        typeof authorization.yParity === 'undefined'\n          ? { v: numberToHex(authorization.v) }\n          : {}),\n      }) as any,\n  ) as RpcAuthorizationList\n}\n", "import {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../errors/address.js'\nimport {\n  InvalidBytesLengthError,\n  type InvalidBytesLengthErrorType,\n} from '../errors/data.js'\nimport {\n  AccountStateConflictError,\n  type AccountStateConflictErrorType,\n  StateAssignmentConflictError,\n  type StateAssignmentConflictErrorType,\n} from '../errors/stateOverride.js'\nimport type {\n  RpcAccountStateOverride,\n  RpcStateMapping,\n  RpcStateOverride,\n} from '../types/rpc.js'\nimport type { StateMapping, StateOverride } from '../types/stateOverride.js'\nimport { isAddress } from './address/isAddress.js'\nimport { type NumberToHexErrorType, numberToHex } from './encoding/toHex.js'\n\ntype SerializeStateMappingParameters = StateMapping | undefined\n\ntype SerializeStateMappingErrorType = InvalidBytesLengthErrorType\n\n/** @internal */\nexport function serializeStateMapping(\n  stateMapping: SerializeStateMappingParameters,\n): RpcStateMapping | undefined {\n  if (!stateMapping || stateMapping.length === 0) return undefined\n  return stateMapping.reduce((acc, { slot, value }) => {\n    if (slot.length !== 66)\n      throw new InvalidBytesLengthError({\n        size: slot.length,\n        targetSize: 66,\n        type: 'hex',\n      })\n    if (value.length !== 66)\n      throw new InvalidBytesLengthError({\n        size: value.length,\n        targetSize: 66,\n        type: 'hex',\n      })\n    acc[slot] = value\n    return acc\n  }, {} as RpcStateMapping)\n}\n\ntype SerializeAccountStateOverrideParameters = Omit<\n  StateOverride[number],\n  'address'\n>\n\ntype SerializeAccountStateOverrideErrorType =\n  | NumberToHexErrorType\n  | StateAssignmentConflictErrorType\n  | SerializeStateMappingErrorType\n\n/** @internal */\nexport function serializeAccountStateOverride(\n  parameters: SerializeAccountStateOverrideParameters,\n): RpcAccountStateOverride {\n  const { balance, nonce, state, stateDiff, code } = parameters\n  const rpcAccountStateOverride: RpcAccountStateOverride = {}\n  if (code !== undefined) rpcAccountStateOverride.code = code\n  if (balance !== undefined)\n    rpcAccountStateOverride.balance = numberToHex(balance)\n  if (nonce !== undefined) rpcAccountStateOverride.nonce = numberToHex(nonce)\n  if (state !== undefined)\n    rpcAccountStateOverride.state = serializeStateMapping(state)\n  if (stateDiff !== undefined) {\n    if (rpcAccountStateOverride.state) throw new StateAssignmentConflictError()\n    rpcAccountStateOverride.stateDiff = serializeStateMapping(stateDiff)\n  }\n  return rpcAccountStateOverride\n}\n\ntype SerializeStateOverrideParameters = StateOverride | undefined\n\nexport type SerializeStateOverrideErrorType =\n  | InvalidAddressErrorType\n  | AccountStateConflictErrorType\n  | SerializeAccountStateOverrideErrorType\n\n/** @internal */\nexport function serializeStateOverride(\n  parameters?: SerializeStateOverrideParameters,\n): RpcStateOverride | undefined {\n  if (!parameters) return undefined\n  const rpcStateOverride: RpcStateOverride = {}\n  for (const { address, ...accountState } of parameters) {\n    if (!isAddress(address, { strict: false }))\n      throw new InvalidAddressError({ address })\n    if (rpcStateOverride[address])\n      throw new AccountStateConflictError({ address: address })\n    rpcStateOverride[address] = serializeAccountStateOverride(accountState)\n  }\n  return rpcStateOverride\n}\n", "export const maxInt8 = 2n ** (8n - 1n) - 1n\nexport const maxInt16 = 2n ** (16n - 1n) - 1n\nexport const maxInt24 = 2n ** (24n - 1n) - 1n\nexport const maxInt32 = 2n ** (32n - 1n) - 1n\nexport const maxInt40 = 2n ** (40n - 1n) - 1n\nexport const maxInt48 = 2n ** (48n - 1n) - 1n\nexport const maxInt56 = 2n ** (56n - 1n) - 1n\nexport const maxInt64 = 2n ** (64n - 1n) - 1n\nexport const maxInt72 = 2n ** (72n - 1n) - 1n\nexport const maxInt80 = 2n ** (80n - 1n) - 1n\nexport const maxInt88 = 2n ** (88n - 1n) - 1n\nexport const maxInt96 = 2n ** (96n - 1n) - 1n\nexport const maxInt104 = 2n ** (104n - 1n) - 1n\nexport const maxInt112 = 2n ** (112n - 1n) - 1n\nexport const maxInt120 = 2n ** (120n - 1n) - 1n\nexport const maxInt128 = 2n ** (128n - 1n) - 1n\nexport const maxInt136 = 2n ** (136n - 1n) - 1n\nexport const maxInt144 = 2n ** (144n - 1n) - 1n\nexport const maxInt152 = 2n ** (152n - 1n) - 1n\nexport const maxInt160 = 2n ** (160n - 1n) - 1n\nexport const maxInt168 = 2n ** (168n - 1n) - 1n\nexport const maxInt176 = 2n ** (176n - 1n) - 1n\nexport const maxInt184 = 2n ** (184n - 1n) - 1n\nexport const maxInt192 = 2n ** (192n - 1n) - 1n\nexport const maxInt200 = 2n ** (200n - 1n) - 1n\nexport const maxInt208 = 2n ** (208n - 1n) - 1n\nexport const maxInt216 = 2n ** (216n - 1n) - 1n\nexport const maxInt224 = 2n ** (224n - 1n) - 1n\nexport const maxInt232 = 2n ** (232n - 1n) - 1n\nexport const maxInt240 = 2n ** (240n - 1n) - 1n\nexport const maxInt248 = 2n ** (248n - 1n) - 1n\nexport const maxInt256 = 2n ** (256n - 1n) - 1n\n\nexport const minInt8 = -(2n ** (8n - 1n))\nexport const minInt16 = -(2n ** (16n - 1n))\nexport const minInt24 = -(2n ** (24n - 1n))\nexport const minInt32 = -(2n ** (32n - 1n))\nexport const minInt40 = -(2n ** (40n - 1n))\nexport const minInt48 = -(2n ** (48n - 1n))\nexport const minInt56 = -(2n ** (56n - 1n))\nexport const minInt64 = -(2n ** (64n - 1n))\nexport const minInt72 = -(2n ** (72n - 1n))\nexport const minInt80 = -(2n ** (80n - 1n))\nexport const minInt88 = -(2n ** (88n - 1n))\nexport const minInt96 = -(2n ** (96n - 1n))\nexport const minInt104 = -(2n ** (104n - 1n))\nexport const minInt112 = -(2n ** (112n - 1n))\nexport const minInt120 = -(2n ** (120n - 1n))\nexport const minInt128 = -(2n ** (128n - 1n))\nexport const minInt136 = -(2n ** (136n - 1n))\nexport const minInt144 = -(2n ** (144n - 1n))\nexport const minInt152 = -(2n ** (152n - 1n))\nexport const minInt160 = -(2n ** (160n - 1n))\nexport const minInt168 = -(2n ** (168n - 1n))\nexport const minInt176 = -(2n ** (176n - 1n))\nexport const minInt184 = -(2n ** (184n - 1n))\nexport const minInt192 = -(2n ** (192n - 1n))\nexport const minInt200 = -(2n ** (200n - 1n))\nexport const minInt208 = -(2n ** (208n - 1n))\nexport const minInt216 = -(2n ** (216n - 1n))\nexport const minInt224 = -(2n ** (224n - 1n))\nexport const minInt232 = -(2n ** (232n - 1n))\nexport const minInt240 = -(2n ** (240n - 1n))\nexport const minInt248 = -(2n ** (248n - 1n))\nexport const minInt256 = -(2n ** (256n - 1n))\n\nexport const maxUint8 = 2n ** 8n - 1n\nexport const maxUint16 = 2n ** 16n - 1n\nexport const maxUint24 = 2n ** 24n - 1n\nexport const maxUint32 = 2n ** 32n - 1n\nexport const maxUint40 = 2n ** 40n - 1n\nexport const maxUint48 = 2n ** 48n - 1n\nexport const maxUint56 = 2n ** 56n - 1n\nexport const maxUint64 = 2n ** 64n - 1n\nexport const maxUint72 = 2n ** 72n - 1n\nexport const maxUint80 = 2n ** 80n - 1n\nexport const maxUint88 = 2n ** 88n - 1n\nexport const maxUint96 = 2n ** 96n - 1n\nexport const maxUint104 = 2n ** 104n - 1n\nexport const maxUint112 = 2n ** 112n - 1n\nexport const maxUint120 = 2n ** 120n - 1n\nexport const maxUint128 = 2n ** 128n - 1n\nexport const maxUint136 = 2n ** 136n - 1n\nexport const maxUint144 = 2n ** 144n - 1n\nexport const maxUint152 = 2n ** 152n - 1n\nexport const maxUint160 = 2n ** 160n - 1n\nexport const maxUint168 = 2n ** 168n - 1n\nexport const maxUint176 = 2n ** 176n - 1n\nexport const maxUint184 = 2n ** 184n - 1n\nexport const maxUint192 = 2n ** 192n - 1n\nexport const maxUint200 = 2n ** 200n - 1n\nexport const maxUint208 = 2n ** 208n - 1n\nexport const maxUint216 = 2n ** 216n - 1n\nexport const maxUint224 = 2n ** 224n - 1n\nexport const maxUint232 = 2n ** 232n - 1n\nexport const maxUint240 = 2n ** 240n - 1n\nexport const maxUint248 = 2n ** 248n - 1n\nexport const maxUint256 = 2n ** 256n - 1n\n", "import {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { SendTransactionParameters } from '../../actions/wallet/sendTransaction.js'\nimport { maxUint256 } from '../../constants/number.js'\nimport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport {\n  FeeCapTooHighError,\n  type FeeCapTooHighErrorType,\n  TipAboveFeeCapError,\n  type TipAboveFeeCapErrorType,\n} from '../../errors/node.js'\nimport type { FeeConflictErrorType } from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { isAddress } from '../address/isAddress.js'\n\nexport type AssertRequestParameters = ExactPartial<\n  SendTransactionParameters<Chain>\n>\n\nexport type AssertRequestErrorType =\n  | InvalidAddressErrorType\n  | FeeConflictErrorType\n  | FeeCapTooHighErrorType\n  | ParseAccountErrorType\n  | TipAboveFeeCapErrorType\n  | ErrorType\n\nexport function assertRequest(args: AssertRequestParameters) {\n  const { account: account_, maxFeePerGas, maxPriorityFeePerGas, to } = args\n  const account = account_ ? parseAccount(account_) : undefined\n  if (account && !isAddress(account.address))\n    throw new InvalidAddressError({ address: account.address })\n  if (to && !isAddress(to)) throw new InvalidAddressError({ address: to })\n\n  if (maxFeePerGas && maxFeePerGas > maxUint256)\n    throw new FeeCapTooHighError({ maxFeePerGas })\n  if (\n    maxPriorityFeePerGas &&\n    maxFeePerGas &&\n    maxPriorityFeePerGas > maxFeePerGas\n  )\n    throw new TipAboveFeeCapError({ maxFeePerGas, maxPriorityFeePerGas })\n}\n", "import { formatGwei } from '../utils/unit/formatGwei.js'\nimport { BaseError } from './base.js'\n\nexport type BaseFeeScalarErrorType = BaseFeeScalarError & {\n  name: 'BaseFeeScalarError'\n}\nexport class BaseFeeScalarError extends BaseError {\n  constructor() {\n    super('`baseFeeMultiplier` must be greater than 1.', {\n      name: 'BaseFeeScalarError',\n    })\n  }\n}\n\nexport type Eip1559FeesNotSupportedErrorType = Eip1559FeesNotSupportedError & {\n  name: 'Eip1559FeesNotSupportedError'\n}\nexport class Eip1559FeesNotSupportedError extends BaseError {\n  constructor() {\n    super('Chain does not support EIP-1559 fees.', {\n      name: 'Eip1559FeesNotSupportedError',\n    })\n  }\n}\n\nexport type MaxFeePerGasTooLowErrorType = MaxFeePerGasTooLowError & {\n  name: 'MaxFeePerGasTooLowError'\n}\nexport class MaxFeePerGasTooLowError extends BaseError {\n  constructor({ maxPriorityFeePerGas }: { maxPriorityFeePerGas: bigint }) {\n    super(\n      `\\`maxFeePerGas\\` cannot be less than the \\`maxPriorityFeePerGas\\` (${formatGwei(\n        maxPriorityFeePerGas,\n      )} gwei).`,\n      { name: 'MaxFeePerGasTooLowError' },\n    )\n  }\n}\n", "import type { Hash } from '../types/misc.js'\n\nimport { BaseError } from './base.js'\n\nexport type BlockNotFoundErrorType = BlockNotFoundError & {\n  name: 'BlockNotFoundError'\n}\nexport class BlockNotFoundError extends BaseError {\n  constructor({\n    blockHash,\n    blockNumber,\n  }: {\n    blockHash?: Hash | undefined\n    blockNumber?: bigint | undefined\n  }) {\n    let identifier = 'Block'\n    if (blockHash) identifier = `Block at hash \"${blockHash}\"`\n    if (blockNumber) identifier = `Block at number \"${blockNumber}\"`\n    super(`${identifier} could not be found.`, { name: 'BlockNotFoundError' })\n  }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { SignedAuthorizationList } from '../../types/authorization.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type {\n  Chain,\n  ExtractChainFormatterExclude,\n  ExtractChainFormatterReturnType,\n} from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RpcAuthorizationList, RpcTransaction } from '../../types/rpc.js'\nimport type { Transaction, TransactionType } from '../../types/transaction.js'\nimport type { ExactPartial, UnionLooseOmit } from '../../types/utils.js'\nimport { hexToNumber } from '../encoding/fromHex.js'\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\n\ntype TransactionPendingDependencies =\n  | 'blockHash'\n  | 'blockNumber'\n  | 'transactionIndex'\n\nexport type FormattedTransaction<\n  chain extends Chain | undefined = undefined,\n  blockTag extends BlockTag = BlockTag,\n  _FormatterReturnType = ExtractChainFormatterReturnType<\n    chain,\n    'transaction',\n    Transaction\n  >,\n  _ExcludedPendingDependencies extends string = TransactionPendingDependencies &\n    ExtractChainFormatterExclude<chain, 'transaction'>,\n> = UnionLooseOmit<_FormatterReturnType, TransactionPendingDependencies> & {\n  [_K in _ExcludedPendingDependencies]: never\n} & Pick<\n    Transaction<bigint, number, blockTag extends 'pending' ? true : false>,\n    TransactionPendingDependencies\n  >\n\nexport const transactionType = {\n  '0x0': 'legacy',\n  '0x1': 'eip2930',\n  '0x2': 'eip1559',\n  '0x3': 'eip4844',\n  '0x4': 'eip7702',\n} as const satisfies Record<Hex, TransactionType>\n\nexport type FormatTransactionErrorType = ErrorType\n\nexport function formatTransaction(\n  transaction: ExactPartial<RpcTransaction>,\n  _?: string | undefined,\n) {\n  const transaction_ = {\n    ...transaction,\n    blockHash: transaction.blockHash ? transaction.blockHash : null,\n    blockNumber: transaction.blockNumber\n      ? BigInt(transaction.blockNumber)\n      : null,\n    chainId: transaction.chainId ? hexToNumber(transaction.chainId) : undefined,\n    gas: transaction.gas ? BigInt(transaction.gas) : undefined,\n    gasPrice: transaction.gasPrice ? BigInt(transaction.gasPrice) : undefined,\n    maxFeePerBlobGas: transaction.maxFeePerBlobGas\n      ? BigInt(transaction.maxFeePerBlobGas)\n      : undefined,\n    maxFeePerGas: transaction.maxFeePerGas\n      ? BigInt(transaction.maxFeePerGas)\n      : undefined,\n    maxPriorityFeePerGas: transaction.maxPriorityFeePerGas\n      ? BigInt(transaction.maxPriorityFeePerGas)\n      : undefined,\n    nonce: transaction.nonce ? hexToNumber(transaction.nonce) : undefined,\n    to: transaction.to ? transaction.to : null,\n    transactionIndex: transaction.transactionIndex\n      ? Number(transaction.transactionIndex)\n      : null,\n    type: transaction.type\n      ? (transactionType as any)[transaction.type]\n      : undefined,\n    typeHex: transaction.type ? transaction.type : undefined,\n    value: transaction.value ? BigInt(transaction.value) : undefined,\n    v: transaction.v ? BigInt(transaction.v) : undefined,\n  } as Transaction\n\n  if (transaction.authorizationList)\n    transaction_.authorizationList = formatAuthorizationList(\n      transaction.authorizationList,\n    )\n\n  transaction_.yParity = (() => {\n    // If `yParity` is provided, we will use it.\n    if (transaction.yParity) return Number(transaction.yParity)\n\n    // If no `yParity` provided, try derive from `v`.\n    if (typeof transaction_.v === 'bigint') {\n      if (transaction_.v === 0n || transaction_.v === 27n) return 0\n      if (transaction_.v === 1n || transaction_.v === 28n) return 1\n      if (transaction_.v >= 35n) return transaction_.v % 2n === 0n ? 1 : 0\n    }\n\n    return undefined\n  })()\n\n  if (transaction_.type === 'legacy') {\n    delete transaction_.accessList\n    delete transaction_.maxFeePerBlobGas\n    delete transaction_.maxFeePerGas\n    delete transaction_.maxPriorityFeePerGas\n    delete transaction_.yParity\n  }\n  if (transaction_.type === 'eip2930') {\n    delete transaction_.maxFeePerBlobGas\n    delete transaction_.maxFeePerGas\n    delete transaction_.maxPriorityFeePerGas\n  }\n  if (transaction_.type === 'eip1559') delete transaction_.maxFeePerBlobGas\n\n  return transaction_\n}\n\nexport type DefineTransactionErrorType = DefineFormatterErrorType | ErrorType\n\nexport const defineTransaction = /*#__PURE__*/ defineFormatter(\n  'transaction',\n  formatTransaction,\n)\n\n//////////////////////////////////////////////////////////////////////////////\n\nfunction formatAuthorizationList(\n  authorizationList: RpcAuthorizationList,\n): SignedAuthorizationList {\n  return authorizationList.map((authorization) => ({\n    address: (authorization as any).address,\n    chainId: Number(authorization.chainId),\n    nonce: Number(authorization.nonce),\n    r: authorization.r,\n    s: authorization.s,\n    yParity: Number(authorization.yParity),\n  })) as SignedAuthorizationList\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Block, BlockTag } from '../../types/block.js'\nimport type {\n  Chain,\n  ExtractChainFormatterExclude,\n  ExtractChainFormatterReturnType,\n} from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RpcBlock } from '../../types/rpc.js'\nimport type { ExactPartial, Prettify } from '../../types/utils.js'\n\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\nimport { type FormattedTransaction, formatTransaction } from './transaction.js'\n\ntype BlockPendingDependencies = 'hash' | 'logsBloom' | 'nonce' | 'number'\n\nexport type FormattedBlock<\n  chain extends Chain | undefined = undefined,\n  includeTransactions extends boolean = boolean,\n  blockTag extends BlockTag = BlockTag,\n  _FormatterReturnType = ExtractChainFormatterReturnType<\n    chain,\n    'block',\n    Block<bigint, includeTransactions>\n  >,\n  _ExcludedPendingDependencies extends string = BlockPendingDependencies &\n    ExtractChainFormatterExclude<chain, 'block'>,\n  _Formatted = Omit<_FormatterReturnType, BlockPendingDependencies> & {\n    [_key in _ExcludedPendingDependencies]: never\n  } & Pick<\n      Block<bigint, includeTransactions, blockTag>,\n      BlockPendingDependencies\n    >,\n  _Transactions = includeTransactions extends true\n    ? Prettify<FormattedTransaction<chain, blockTag>>[]\n    : Hash[],\n> = Omit<_Formatted, 'transactions'> & {\n  transactions: _Transactions\n}\n\nexport type FormatBlockErrorType = ErrorType\n\nexport function formatBlock(\n  block: ExactPartial<RpcBlock>,\n  _?: string | undefined,\n) {\n  const transactions = (block.transactions ?? []).map((transaction) => {\n    if (typeof transaction === 'string') return transaction\n    return formatTransaction(transaction)\n  })\n  return {\n    ...block,\n    baseFeePerGas: block.baseFeePerGas ? BigInt(block.baseFeePerGas) : null,\n    blobGasUsed: block.blobGasUsed ? BigInt(block.blobGasUsed) : undefined,\n    difficulty: block.difficulty ? BigInt(block.difficulty) : undefined,\n    excessBlobGas: block.excessBlobGas\n      ? BigInt(block.excessBlobGas)\n      : undefined,\n    gasLimit: block.gasLimit ? BigInt(block.gasLimit) : undefined,\n    gasUsed: block.gasUsed ? BigInt(block.gasUsed) : undefined,\n    hash: block.hash ? block.hash : null,\n    logsBloom: block.logsBloom ? block.logsBloom : null,\n    nonce: block.nonce ? block.nonce : null,\n    number: block.number ? BigInt(block.number) : null,\n    size: block.size ? BigInt(block.size) : undefined,\n    timestamp: block.timestamp ? BigInt(block.timestamp) : undefined,\n    transactions,\n    totalDifficulty: block.totalDifficulty\n      ? BigInt(block.totalDifficulty)\n      : null,\n  } as Block\n}\n\nexport type DefineBlockErrorType = DefineFormatterErrorType | ErrorType\n\nexport const defineBlock = /*#__PURE__*/ defineFormatter('block', formatBlock)\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  BlockNotFoundError,\n  type BlockNotFoundErrorType,\n} from '../../errors/block.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RpcBlock } from '../../types/rpc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type FormattedBlock,\n  formatBlock,\n} from '../../utils/formatters/block.js'\n\nexport type GetBlockParameters<\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n> = {\n  /** Whether or not to include transaction data in the response. */\n  includeTransactions?: includeTransactions | undefined\n} & (\n  | {\n      /** Hash of the block. */\n      blockHash?: Hash | undefined\n      blockNumber?: undefined\n      blockTag?: undefined\n    }\n  | {\n      blockHash?: undefined\n      /** The block number. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n  | {\n      blockHash?: undefined\n      blockNumber?: undefined\n      /**\n       * The block tag.\n       * @default 'latest'\n       */\n      blockTag?: blockTag | BlockTag | undefined\n    }\n)\n\nexport type GetBlockReturnType<\n  chain extends Chain | undefined = undefined,\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n> = Prettify<FormattedBlock<chain, includeTransactions, blockTag>>\n\nexport type GetBlockErrorType =\n  | BlockNotFoundErrorType\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns information about a block at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlock\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods:\n *   - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) for `blockNumber` & `blockTag`.\n *   - Calls [`eth_getBlockByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbyhash) for `blockHash`.\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockParameters}\n * @returns Information about the block. {@link GetBlockReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlock } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const block = await getBlock(client)\n */\nexport async function getBlock<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n>(\n  client: Client<Transport, chain, account>,\n  {\n    blockHash,\n    blockNumber,\n    blockTag = client.experimental_blockTag ?? 'latest',\n    includeTransactions: includeTransactions_,\n  }: GetBlockParameters<includeTransactions, blockTag> = {},\n): Promise<GetBlockReturnType<chain, includeTransactions, blockTag>> {\n  const includeTransactions = includeTransactions_ ?? false\n\n  const blockNumberHex =\n    blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n  let block: RpcBlock | null = null\n  if (blockHash) {\n    block = await client.request(\n      {\n        method: 'eth_getBlockByHash',\n        params: [blockHash, includeTransactions],\n      },\n      { dedupe: true },\n    )\n  } else {\n    block = await client.request(\n      {\n        method: 'eth_getBlockByNumber',\n        params: [blockNumberHex || blockTag, includeTransactions],\n      },\n      { dedupe: Boolean(blockNumberHex) },\n    )\n  }\n\n  if (!block) throw new BlockNotFoundError({ blockHash, blockNumber })\n\n  const format = client.chain?.formatters?.block?.format || formatBlock\n  return format(block, 'getBlock')\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type GetGasPriceReturnType = bigint\n\nexport type GetGasPriceErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns the current price of gas (in wei).\n *\n * - Docs: https://viem.sh/docs/actions/public/getGasPrice\n * - JSON-RPC Methods: [`eth_gasPrice`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gasprice)\n *\n * @param client - Client to use\n * @returns The gas price (in wei). {@link GetGasPriceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getGasPrice } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const gasPrice = await getGasPrice(client)\n */\nexport async function getGasPrice<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(client: Client<Transport, chain, account>): Promise<GetGasPriceReturnType> {\n  const gasPrice = await client.request({\n    method: 'eth_gasPrice',\n  })\n  return BigInt(gasPrice)\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  Eip1559FeesNotSupportedError,\n  type Eip1559FeesNotSupportedErrorType,\n} from '../../errors/fee.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type {\n  Chain,\n  ChainFeesFnParameters,\n  GetChainParameter,\n} from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type HexToBigIntErrorType,\n  hexToBigInt,\n} from '../../utils/encoding/fromHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { PrepareTransactionRequestParameters } from '../wallet/prepareTransactionRequest.js'\nimport { type GetBlockErrorType, getBlock } from './getBlock.js'\nimport { type GetGasPriceErrorType, getGasPrice } from './getGasPrice.js'\n\nexport type EstimateMaxPriorityFeePerGasParameters<\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n> = GetChainParameter<chain, chainOverride>\n\nexport type EstimateMaxPriorityFeePerGasReturnType = bigint\n\nexport type EstimateMaxPriorityFeePerGasErrorType =\n  | GetBlockErrorType\n  | HexToBigIntErrorType\n  | RequestErrorType\n  | GetBlockErrorType\n  | GetGasPriceErrorType\n  | Eip1559FeesNotSupportedErrorType\n  | ErrorType\n\n/**\n * Returns an estimate for the max priority fee per gas (in wei) for a\n * transaction to be likely included in the next block.\n * Defaults to [`chain.fees.defaultPriorityFee`](/docs/clients/chains#fees-defaultpriorityfee) if set.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateMaxPriorityFeePerGas\n *\n * @param client - Client to use\n * @returns An estimate (in wei) for the max priority fee per gas. {@link EstimateMaxPriorityFeePerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateMaxPriorityFeePerGas } from 'viem/actions'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const maxPriorityFeePerGas = await estimateMaxPriorityFeePerGas(client)\n * // 10000000n\n */\nexport async function estimateMaxPriorityFeePerGas<\n  chain extends Chain | undefined,\n  chainOverride extends Chain | undefined,\n>(\n  client: Client<Transport, chain>,\n  args?:\n    | EstimateMaxPriorityFeePerGasParameters<chain, chainOverride>\n    | undefined,\n): Promise<EstimateMaxPriorityFeePerGasReturnType> {\n  return internal_estimateMaxPriorityFeePerGas(client, args as any)\n}\n\nexport async function internal_estimateMaxPriorityFeePerGas<\n  chain extends Chain | undefined,\n  chainOverride extends Chain | undefined,\n>(\n  client: Client<Transport, chain>,\n  args: EstimateMaxPriorityFeePerGasParameters<chain, chainOverride> & {\n    block?: Block | undefined\n    request?:\n      | PrepareTransactionRequestParameters<\n          chain,\n          Account | undefined,\n          chainOverride\n        >\n      | undefined\n  },\n): Promise<EstimateMaxPriorityFeePerGasReturnType> {\n  const { block: block_, chain = client.chain, request } = args || {}\n\n  try {\n    const maxPriorityFeePerGas =\n      chain?.fees?.maxPriorityFeePerGas ?? chain?.fees?.defaultPriorityFee\n\n    if (typeof maxPriorityFeePerGas === 'function') {\n      const block =\n        block_ || (await getAction(client, getBlock, 'getBlock')({}))\n      const maxPriorityFeePerGas_ = await maxPriorityFeePerGas({\n        block,\n        client,\n        request,\n      } as ChainFeesFnParameters)\n      if (maxPriorityFeePerGas_ === null) throw new Error()\n      return maxPriorityFeePerGas_\n    }\n\n    if (typeof maxPriorityFeePerGas !== 'undefined') return maxPriorityFeePerGas\n\n    const maxPriorityFeePerGasHex = await client.request({\n      method: 'eth_maxPriorityFeePerGas',\n    })\n    return hexToBigInt(maxPriorityFeePerGasHex)\n  } catch {\n    // If the RPC Provider does not support `eth_maxPriorityFeePerGas`\n    // fall back to calculating it manually via `gasPrice - baseFeePerGas`.\n    // See: https://github.com/ethereum/pm/issues/328#:~:text=eth_maxPriorityFeePerGas%20after%20London%20will%20effectively%20return%20eth_gasPrice%20%2D%20baseFee\n    const [block, gasPrice] = await Promise.all([\n      block_\n        ? Promise.resolve(block_)\n        : getAction(client, getBlock, 'getBlock')({}),\n      getAction(client, getGasPrice, 'getGasPrice')({}),\n    ])\n\n    if (typeof block.baseFeePerGas !== 'bigint')\n      throw new Eip1559FeesNotSupportedError()\n\n    const maxPriorityFeePerGas = gasPrice - block.baseFeePerGas\n\n    if (maxPriorityFeePerGas < 0n) return 0n\n    return maxPriorityFeePerGas\n  }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  BaseFeeScalarError,\n  type BaseFeeScalarErrorType,\n  Eip1559FeesNotSupportedError,\n  type Eip1559FeesNotSupportedErrorType,\n} from '../../errors/fee.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type {\n  Chain,\n  ChainEstimateFeesPerGasFnParameters,\n  ChainFeesFnParameters,\n  GetChainParameter,\n} from '../../types/chain.js'\nimport type {\n  FeeValuesEIP1559,\n  FeeValuesLegacy,\n  FeeValuesType,\n} from '../../types/fee.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { PrepareTransactionRequestParameters } from '../wallet/prepareTransactionRequest.js'\nimport {\n  type EstimateMaxPriorityFeePerGasErrorType,\n  internal_estimateMaxPriorityFeePerGas,\n} from './estimateMaxPriorityFeePerGas.js'\nimport { getBlock } from './getBlock.js'\nimport { type GetGasPriceErrorType, getGasPrice } from './getGasPrice.js'\n\nexport type EstimateFeesPerGasParameters<\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  type extends FeeValuesType = FeeValuesType,\n> = {\n  /**\n   * The type of fee values to return.\n   *\n   * - `legacy`: Returns the legacy gas price.\n   * - `eip1559`: Returns the max fee per gas and max priority fee per gas.\n   *\n   * @default 'eip1559'\n   */\n  type?: type | FeeValuesType | undefined\n} & GetChainParameter<chain, chainOverride>\n\nexport type EstimateFeesPerGasReturnType<\n  type extends FeeValuesType = FeeValuesType,\n> =\n  | (type extends 'legacy' ? FeeValuesLegacy : never)\n  | (type extends 'eip1559' ? FeeValuesEIP1559 : never)\n\nexport type EstimateFeesPerGasErrorType =\n  | BaseFeeScalarErrorType\n  | EstimateMaxPriorityFeePerGasErrorType\n  | GetGasPriceErrorType\n  | Eip1559FeesNotSupportedErrorType\n  | ErrorType\n\n/**\n * Returns an estimate for the fees per gas (in wei) for a\n * transaction to be likely included in the next block.\n * Defaults to [`chain.fees.estimateFeesPerGas`](/docs/clients/chains#fees-estimatefeespergas) if set.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateFeesPerGas\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateFeesPerGasParameters}\n * @returns An estimate (in wei) for the fees per gas. {@link EstimateFeesPerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateFeesPerGas } from 'viem/actions'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const maxPriorityFeePerGas = await estimateFeesPerGas(client)\n * // { maxFeePerGas: ..., maxPriorityFeePerGas: ... }\n */\nexport async function estimateFeesPerGas<\n  chain extends Chain | undefined,\n  chainOverride extends Chain | undefined,\n  type extends FeeValuesType = 'eip1559',\n>(\n  client: Client<Transport, chain>,\n  args?: EstimateFeesPerGasParameters<chain, chainOverride, type> | undefined,\n): Promise<EstimateFeesPerGasReturnType<type>> {\n  return internal_estimateFeesPerGas(client, args as any)\n}\n\nexport async function internal_estimateFeesPerGas<\n  chain extends Chain | undefined,\n  chainOverride extends Chain | undefined,\n  type extends FeeValuesType = 'eip1559',\n>(\n  client: Client<Transport, chain>,\n  args: EstimateFeesPerGasParameters<chain, chainOverride, type> & {\n    block?: Block | undefined\n    request?: PrepareTransactionRequestParameters<Chain, Account> | undefined\n  },\n): Promise<EstimateFeesPerGasReturnType<type>> {\n  const {\n    block: block_,\n    chain = client.chain,\n    request,\n    type = 'eip1559',\n  } = args || {}\n\n  const baseFeeMultiplier = await (async () => {\n    if (typeof chain?.fees?.baseFeeMultiplier === 'function')\n      return chain.fees.baseFeeMultiplier({\n        block: block_ as Block,\n        client,\n        request,\n      } as ChainFeesFnParameters)\n    return chain?.fees?.baseFeeMultiplier ?? 1.2\n  })()\n  if (baseFeeMultiplier < 1) throw new BaseFeeScalarError()\n\n  const decimals = baseFeeMultiplier.toString().split('.')[1]?.length ?? 0\n  const denominator = 10 ** decimals\n  const multiply = (base: bigint) =>\n    (base * BigInt(Math.ceil(baseFeeMultiplier * denominator))) /\n    BigInt(denominator)\n\n  const block = block_\n    ? block_\n    : await getAction(client, getBlock, 'getBlock')({})\n\n  if (typeof chain?.fees?.estimateFeesPerGas === 'function') {\n    const fees = (await chain.fees.estimateFeesPerGas({\n      block: block_ as Block,\n      client,\n      multiply,\n      request,\n      type,\n    } as ChainEstimateFeesPerGasFnParameters)) as unknown as EstimateFeesPerGasReturnType<type>\n\n    if (fees !== null) return fees\n  }\n\n  if (type === 'eip1559') {\n    if (typeof block.baseFeePerGas !== 'bigint')\n      throw new Eip1559FeesNotSupportedError()\n\n    const maxPriorityFeePerGas =\n      typeof request?.maxPriorityFeePerGas === 'bigint'\n        ? request.maxPriorityFeePerGas\n        : await internal_estimateMaxPriorityFeePerGas(\n            client as Client<Transport, Chain>,\n            {\n              block: block as Block,\n              chain,\n              request,\n            },\n          )\n\n    const baseFeePerGas = multiply(block.baseFeePerGas)\n    const maxFeePerGas =\n      request?.maxFeePerGas ?? baseFeePerGas + maxPriorityFeePerGas\n\n    return {\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n    } as EstimateFeesPerGasReturnType<type>\n  }\n\n  const gasPrice =\n    request?.gasPrice ??\n    multiply(await getAction(client, getGasPrice, 'getGasPrice')({}))\n  return {\n    gasPrice,\n  } as EstimateFeesPerGasReturnType<type>\n}\n", "import type { Address } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type HexToNumberErrorType,\n  hexToNumber,\n} from '../../utils/encoding/fromHex.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetTransactionCountParameters = {\n  /** The account address. */\n  address: Address\n} & (\n  | {\n      /** The block number. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n  | {\n      blockNumber?: undefined\n      /** The block tag. Defaults to 'latest'. */\n      blockTag?: BlockTag | undefined\n    }\n)\nexport type GetTransactionCountReturnType = number\n\nexport type GetTransactionCountErrorType =\n  | RequestErrorType\n  | NumberToHexErrorType\n  | HexToNumberErrorType\n  | ErrorType\n\n/**\n * Returns the number of [Transactions](https://viem.sh/docs/glossary/terms#transaction) an Account has sent.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionCount\n * - JSON-RPC Methods: [`eth_getTransactionCount`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactioncount)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionCountParameters}\n * @returns The number of transactions an account has sent. {@link GetTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionCount } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const transactionCount = await getTransactionCount(client, {\n *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function getTransactionCount<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: Client<Transport, chain, account>,\n  { address, blockTag = 'latest', blockNumber }: GetTransactionCountParameters,\n): Promise<GetTransactionCountReturnType> {\n  const count = await client.request(\n    {\n      method: 'eth_getTransactionCount',\n      params: [\n        address,\n        typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : blockTag,\n      ],\n    },\n    {\n      dedupe: Boolean(blockNumber),\n    },\n  )\n  return hexToNumber(count)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Kzg } from '../../types/kzg.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type BlobsToCommitmentsParameters<\n  blobs extends readonly ByteArray[] | readonly Hex[] =\n    | readonly ByteArray[]\n    | readonly Hex[],\n  to extends To | undefined = undefined,\n> = {\n  /** Blobs to transform into commitments. */\n  blobs: blobs | readonly ByteArray[] | readonly Hex[]\n  /** KZG implementation. */\n  kzg: Pick<Kzg, 'blobToKzgCommitment'>\n  /** Return type. */\n  to?: to | To | undefined\n}\n\nexport type BlobsToCommitmentsReturnType<to extends To> =\n  | (to extends 'bytes' ? readonly ByteArray[] : never)\n  | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type BlobsToCommitmentsErrorType =\n  | HexToBytesErrorType\n  | BytesToHexErrorType\n  | ErrorType\n\n/**\n * Compute commitments from a list of blobs.\n *\n * @example\n * ```ts\n * import { blobsToCommitments, toBlobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * ```\n */\nexport function blobsToCommitments<\n  const blobs extends readonly ByteArray[] | readonly Hex[],\n  to extends To =\n    | (blobs extends readonly Hex[] ? 'hex' : never)\n    | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(\n  parameters: BlobsToCommitmentsParameters<blobs, to>,\n): BlobsToCommitmentsReturnType<to> {\n  const { kzg } = parameters\n\n  const to =\n    parameters.to ?? (typeof parameters.blobs[0] === 'string' ? 'hex' : 'bytes')\n  const blobs = (\n    typeof parameters.blobs[0] === 'string'\n      ? parameters.blobs.map((x) => hexToBytes(x as any))\n      : parameters.blobs\n  ) as ByteArray[]\n\n  const commitments: ByteArray[] = []\n  for (const blob of blobs)\n    commitments.push(Uint8Array.from(kzg.blobToKzgCommitment(blob)))\n\n  return (to === 'bytes'\n    ? commitments\n    : commitments.map((x) =>\n        bytesToHex(x),\n      )) as {} as BlobsToCommitmentsReturnType<to>\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Kzg } from '../../types/kzg.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type blobsToProofsParameters<\n  blobs extends readonly ByteArray[] | readonly Hex[],\n  commitments extends readonly ByteArray[] | readonly Hex[],\n  to extends To =\n    | (blobs extends readonly Hex[] ? 'hex' : never)\n    | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n  ///\n  _blobsType =\n    | (blobs extends readonly Hex[] ? readonly Hex[] : never)\n    | (blobs extends readonly ByteArray[] ? readonly ByteArray[] : never),\n> = {\n  /** Blobs to transform into proofs. */\n  blobs: blobs\n  /** Commitments for the blobs. */\n  commitments: commitments &\n    (commitments extends _blobsType\n      ? {}\n      : `commitments must be the same type as blobs`)\n  /** KZG implementation. */\n  kzg: Pick<Kzg, 'computeBlobKzgProof'>\n  /** Return type. */\n  to?: to | To | undefined\n}\n\nexport type blobsToProofsReturnType<to extends To> =\n  | (to extends 'bytes' ? ByteArray[] : never)\n  | (to extends 'hex' ? Hex[] : never)\n\nexport type blobsToProofsErrorType =\n  | BytesToHexErrorType\n  | HexToBytesErrorType\n  | ErrorType\n\n/**\n * Compute the proofs for a list of blobs and their commitments.\n *\n * @example\n * ```ts\n * import {\n *   blobsToCommitments,\n *   toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const proofs = blobsToProofs({ blobs, commitments, kzg })\n * ```\n */\nexport function blobsToProofs<\n  const blobs extends readonly ByteArray[] | readonly Hex[],\n  const commitments extends readonly ByteArray[] | readonly Hex[],\n  to extends To =\n    | (blobs extends readonly Hex[] ? 'hex' : never)\n    | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(\n  parameters: blobsToProofsParameters<blobs, commitments, to>,\n): blobsToProofsReturnType<to> {\n  const { kzg } = parameters\n\n  const to =\n    parameters.to ?? (typeof parameters.blobs[0] === 'string' ? 'hex' : 'bytes')\n\n  const blobs = (\n    typeof parameters.blobs[0] === 'string'\n      ? parameters.blobs.map((x) => hexToBytes(x as any))\n      : parameters.blobs\n  ) as ByteArray[]\n  const commitments = (\n    typeof parameters.commitments[0] === 'string'\n      ? parameters.commitments.map((x) => hexToBytes(x as any))\n      : parameters.commitments\n  ) as ByteArray[]\n\n  const proofs: ByteArray[] = []\n  for (let i = 0; i < blobs.length; i++) {\n    const blob = blobs[i]\n    const commitment = commitments[i]\n    proofs.push(Uint8Array.from(kzg.computeBlobKzgProof(blob, commitment)))\n  }\n\n  return (to === 'bytes'\n    ? proofs\n    : proofs.map((x) => bytesToHex(x))) as {} as blobsToProofsReturnType<to>\n}\n", "/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nimport {\n  SHA224 as SHA224n,\n  sha224 as sha224n,\n  SHA256 as SHA256n,\n  sha256 as sha256n,\n} from './sha2.ts';\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA256: typeof SHA256n = SHA256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha256: typeof sha256n = sha256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA224: typeof SHA224n = SHA224n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha224: typeof sha224n = sha224n;\n", "import { sha256 as noble_sha256 } from '@noble/hashes/sha256'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type ToHexErrorType, toHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type Sha256Hash<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type Sha256ErrorType =\n  | IsHexErrorType\n  | ToBytesErrorType\n  | ToHexErrorType\n  | ErrorType\n\nexport function sha256<to extends To = 'hex'>(\n  value: Hex | ByteArray,\n  to_?: to | undefined,\n): Sha256Hash<to> {\n  const to = to_ || 'hex'\n  const bytes = noble_sha256(\n    isHex(value, { strict: false }) ? toBytes(value) : value,\n  )\n  if (to === 'bytes') return bytes as Sha256Hash<to>\n  return toHex(bytes) as Sha256Hash<to>\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { type Sha256ErrorType, sha256 } from '../hash/sha256.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type CommitmentToVersionedHashParameters<\n  commitment extends Uint8Array | Hex = Uint8Array | Hex,\n  to extends To | undefined = undefined,\n> = {\n  /** Commitment from blob. */\n  commitment: commitment | Uint8Array | Hex\n  /** Return type. */\n  to?: to | To | undefined\n  /** Version to tag onto the hash. */\n  version?: number | undefined\n}\n\nexport type CommitmentToVersionedHashReturnType<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type CommitmentToVersionedHashErrorType =\n  | Sha256ErrorType\n  | BytesToHexErrorType\n  | ErrorType\n\n/**\n * Transform a commitment to it's versioned hash.\n *\n * @example\n * ```ts\n * import {\n *   blobsToCommitments,\n *   commitmentToVersionedHash,\n *   toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const [commitment] = blobsToCommitments({ blobs, kzg })\n * const versionedHash = commitmentToVersionedHash({ commitment })\n * ```\n */\nexport function commitmentToVersionedHash<\n  const commitment extends Hex | ByteArray,\n  to extends To =\n    | (commitment extends Hex ? 'hex' : never)\n    | (commitment extends ByteArray ? 'bytes' : never),\n>(\n  parameters: CommitmentToVersionedHashParameters<commitment, to>,\n): CommitmentToVersionedHashReturnType<to> {\n  const { commitment, version = 1 } = parameters\n  const to = parameters.to ?? (typeof commitment === 'string' ? 'hex' : 'bytes')\n\n  const versionedHash = sha256(commitment, 'bytes')\n  versionedHash.set([version], 0)\n  return (\n    to === 'bytes' ? versionedHash : bytesToHex(versionedHash)\n  ) as CommitmentToVersionedHashReturnType<to>\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n  type CommitmentToVersionedHashErrorType,\n  commitmentToVersionedHash,\n} from './commitmentToVersionedHash.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type CommitmentsToVersionedHashesParameters<\n  commitments extends readonly Uint8Array[] | readonly Hex[] =\n    | readonly Uint8Array[]\n    | readonly Hex[],\n  to extends To | undefined = undefined,\n> = {\n  /** Commitments from blobs. */\n  commitments: commitments | readonly Uint8Array[] | readonly Hex[]\n  /** Return type. */\n  to?: to | To | undefined\n  /** Version to tag onto the hashes. */\n  version?: number | undefined\n}\n\nexport type CommitmentsToVersionedHashesReturnType<to extends To> =\n  | (to extends 'bytes' ? readonly ByteArray[] : never)\n  | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type CommitmentsToVersionedHashesErrorType =\n  | CommitmentToVersionedHashErrorType\n  | ErrorType\n\n/**\n * Transform a list of commitments to their versioned hashes.\n *\n * @example\n * ```ts\n * import {\n *   blobsToCommitments,\n *   commitmentsToVersionedHashes,\n *   toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const versionedHashes = commitmentsToVersionedHashes({ commitments })\n * ```\n */\nexport function commitmentsToVersionedHashes<\n  const commitments extends readonly Uint8Array[] | readonly Hex[],\n  to extends To =\n    | (commitments extends readonly Hex[] ? 'hex' : never)\n    | (commitments extends readonly ByteArray[] ? 'bytes' : never),\n>(\n  parameters: CommitmentsToVersionedHashesParameters<commitments, to>,\n): CommitmentsToVersionedHashesReturnType<to> {\n  const { commitments, version } = parameters\n\n  const to =\n    parameters.to ?? (typeof commitments[0] === 'string' ? 'hex' : 'bytes')\n\n  const hashes: Uint8Array[] | Hex[] = []\n  for (const commitment of commitments) {\n    hashes.push(\n      commitmentToVersionedHash({\n        commitment,\n        to,\n        version,\n      }) as any,\n    )\n  }\n  return hashes as any\n}\n", "// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md#parameters\n\n/** Blob limit per transaction. */\nconst blobsPerTransaction = 6\n\n/** The number of bytes in a BLS scalar field element. */\nexport const bytesPerFieldElement = 32\n\n/** The number of field elements in a blob. */\nexport const fieldElementsPerBlob = 4096\n\n/** The number of bytes in a blob. */\nexport const bytesPerBlob = bytesPerFieldElement * fieldElementsPerBlob\n\n/** Blob bytes limit per transaction. */\nexport const maxBytesPerTransaction =\n  bytesPerBlob * blobsPerTransaction -\n  // terminator byte (0x80).\n  1 -\n  // zero byte (0x00) appended to each field element.\n  1 * fieldElementsPerBlob * blobsPerTransaction\n", "// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md#parameters\n\nexport const versionedHashVersionKzg = 1\n", "import { versionedHashVersionKzg } from '../constants/kzg.js'\nimport type { Hash } from '../types/misc.js'\n\nimport { BaseError } from './base.js'\n\nexport type BlobSizeTooLargeErrorType = BlobSizeTooLargeError & {\n  name: 'BlobSizeTooLargeError'\n}\nexport class BlobSizeTooLargeError extends BaseError {\n  constructor({ maxSize, size }: { maxSize: number; size: number }) {\n    super('Blob size is too large.', {\n      metaMessages: [`Max: ${maxSize} bytes`, `Given: ${size} bytes`],\n      name: 'BlobSizeTooLargeError',\n    })\n  }\n}\n\nexport type EmptyBlobErrorType = EmptyBlobError & {\n  name: 'EmptyBlobError'\n}\nexport class EmptyBlobError extends BaseError {\n  constructor() {\n    super('Blob data must not be empty.', { name: 'EmptyBlobError' })\n  }\n}\n\nexport type InvalidVersionedHashSizeErrorType =\n  InvalidVersionedHashSizeError & {\n    name: 'InvalidVersionedHashSizeError'\n  }\nexport class InvalidVersionedHashSizeError extends BaseError {\n  constructor({\n    hash,\n    size,\n  }: {\n    hash: Hash\n    size: number\n  }) {\n    super(`Versioned hash \"${hash}\" size is invalid.`, {\n      metaMessages: ['Expected: 32', `Received: ${size}`],\n      name: 'InvalidVersionedHashSizeError',\n    })\n  }\n}\n\nexport type InvalidVersionedHashVersionErrorType =\n  InvalidVersionedHashVersionError & {\n    name: 'InvalidVersionedHashVersionError'\n  }\nexport class InvalidVersionedHashVersionError extends BaseError {\n  constructor({\n    hash,\n    version,\n  }: {\n    hash: Hash\n    version: number\n  }) {\n    super(`Versioned hash \"${hash}\" version is invalid.`, {\n      metaMessages: [\n        `Expected: ${versionedHashVersionKzg}`,\n        `Received: ${version}`,\n      ],\n      name: 'InvalidVersionedHashVersionError',\n    })\n  }\n}\n", "import {\n  bytesPerBlob,\n  bytesPerFieldElement,\n  fieldElementsPerBlob,\n  maxBytesPerTransaction,\n} from '../../constants/blob.js'\nimport {\n  BlobSizeTooLargeError,\n  type BlobSizeTooLargeErrorType,\n  EmptyBlobError,\n  type EmptyBlobErrorType,\n} from '../../errors/blob.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type CreateCursorErrorType, createCursor } from '../cursor.js'\nimport { type SizeErrorType, size } from '../data/size.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type ToBlobsParameters<\n  data extends Hex | ByteArray = Hex | ByteArray,\n  to extends To | undefined = undefined,\n> = {\n  /** Data to transform to a blob. */\n  data: data | Hex | ByteArray\n  /** Return type. */\n  to?: to | To | undefined\n}\n\nexport type ToBlobsReturnType<to extends To> =\n  | (to extends 'bytes' ? readonly ByteArray[] : never)\n  | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type ToBlobsErrorType =\n  | BlobSizeTooLargeErrorType\n  | BytesToHexErrorType\n  | CreateCursorErrorType\n  | EmptyBlobErrorType\n  | HexToBytesErrorType\n  | SizeErrorType\n  | ErrorType\n\n/**\n * Transforms arbitrary data to blobs.\n *\n * @example\n * ```ts\n * import { toBlobs, stringToHex } from 'viem'\n *\n * const blobs = toBlobs({ data: stringToHex('hello world') })\n * ```\n */\nexport function toBlobs<\n  const data extends Hex | ByteArray,\n  to extends To =\n    | (data extends Hex ? 'hex' : never)\n    | (data extends ByteArray ? 'bytes' : never),\n>(parameters: ToBlobsParameters<data, to>): ToBlobsReturnType<to> {\n  const to =\n    parameters.to ?? (typeof parameters.data === 'string' ? 'hex' : 'bytes')\n  const data = (\n    typeof parameters.data === 'string'\n      ? hexToBytes(parameters.data)\n      : parameters.data\n  ) as ByteArray\n\n  const size_ = size(data)\n  if (!size_) throw new EmptyBlobError()\n  if (size_ > maxBytesPerTransaction)\n    throw new BlobSizeTooLargeError({\n      maxSize: maxBytesPerTransaction,\n      size: size_,\n    })\n\n  const blobs = []\n\n  let active = true\n  let position = 0\n  while (active) {\n    const blob = createCursor(new Uint8Array(bytesPerBlob))\n\n    let size = 0\n    while (size < fieldElementsPerBlob) {\n      const bytes = data.slice(position, position + (bytesPerFieldElement - 1))\n\n      // Push a zero byte so the field element doesn't overflow the BLS modulus.\n      blob.pushByte(0x00)\n\n      // Push the current segment of data bytes.\n      blob.pushBytes(bytes)\n\n      // If we detect that the current segment of data bytes is less than 31 bytes,\n      // we can stop processing and push a terminator byte to indicate the end of the blob.\n      if (bytes.length < 31) {\n        blob.pushByte(0x80)\n        active = false\n        break\n      }\n\n      size++\n      position += 31\n    }\n\n    blobs.push(blob)\n  }\n\n  return (\n    to === 'bytes'\n      ? blobs.map((x) => x.bytes)\n      : blobs.map((x) => bytesToHex(x.bytes))\n  ) as any\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { BlobSidecars } from '../../types/eip4844.js'\nimport type { Kzg } from '../../types/kzg.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport type { OneOf } from '../../types/utils.js'\nimport {\n  type BlobsToCommitmentsErrorType,\n  blobsToCommitments,\n} from './blobsToCommitments.js'\nimport { blobsToProofs, type blobsToProofsErrorType } from './blobsToProofs.js'\nimport { type ToBlobsErrorType, toBlobs } from './toBlobs.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type ToBlobSidecarsParameters<\n  data extends Hex | ByteArray | undefined = undefined,\n  blobs extends readonly Hex[] | readonly ByteArray[] | undefined = undefined,\n  to extends To =\n    | (blobs extends readonly Hex[] ? 'hex' : never)\n    | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n  ///\n  _blobsType =\n    | (blobs extends readonly Hex[] ? readonly Hex[] : never)\n    | (blobs extends readonly ByteArray[] ? readonly ByteArray[] : never),\n> = {\n  /** Return type. */\n  to?: to | To | undefined\n} & OneOf<\n  | {\n      /** Data to transform into blobs. */\n      data: data | Hex | ByteArray\n      /** KZG implementation. */\n      kzg: Kzg\n    }\n  | {\n      /** Blobs. */\n      blobs: blobs | readonly Hex[] | readonly ByteArray[]\n      /** Commitment for each blob. */\n      commitments: _blobsType | readonly Hex[] | readonly ByteArray[]\n      /** Proof for each blob. */\n      proofs: _blobsType | readonly Hex[] | readonly ByteArray[]\n    }\n>\n\nexport type ToBlobSidecarsReturnType<to extends To> =\n  | (to extends 'bytes' ? BlobSidecars<ByteArray> : never)\n  | (to extends 'hex' ? BlobSidecars<Hex> : never)\n\nexport type ToBlobSidecarsErrorType =\n  | BlobsToCommitmentsErrorType\n  | ToBlobsErrorType\n  | blobsToProofsErrorType\n  | ErrorType\n\n/**\n * Transforms arbitrary data (or blobs, commitments, & proofs) into a sidecar array.\n *\n * @example\n * ```ts\n * import { toBlobSidecars, stringToHex } from 'viem'\n *\n * const sidecars = toBlobSidecars({ data: stringToHex('hello world') })\n * ```\n *\n * @example\n * ```ts\n * import {\n *   blobsToCommitments,\n *   toBlobs,\n *   blobsToProofs,\n *   toBlobSidecars,\n *   stringToHex\n * } from 'viem'\n *\n * const blobs = toBlobs({ data: stringToHex('hello world') })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const proofs = blobsToProofs({ blobs, commitments, kzg })\n *\n * const sidecars = toBlobSidecars({ blobs, commitments, proofs })\n * ```\n */\nexport function toBlobSidecars<\n  const data extends Hex | ByteArray | undefined = undefined,\n  const blobs extends\n    | readonly Hex[]\n    | readonly ByteArray[]\n    | undefined = undefined,\n  to extends To =\n    | (data extends Hex ? 'hex' : never)\n    | (data extends ByteArray ? 'bytes' : never)\n    | (blobs extends readonly Hex[] ? 'hex' : never)\n    | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(\n  parameters: ToBlobSidecarsParameters<data, blobs, to>,\n): ToBlobSidecarsReturnType<to> {\n  const { data, kzg, to } = parameters\n  const blobs = parameters.blobs ?? toBlobs({ data: data!, to })\n  const commitments =\n    parameters.commitments ?? blobsToCommitments({ blobs, kzg: kzg!, to })\n  const proofs =\n    parameters.proofs ?? blobsToProofs({ blobs, commitments, kzg: kzg!, to })\n\n  const sidecars: BlobSidecars = []\n  for (let i = 0; i < blobs.length; i++)\n    sidecars.push({\n      blob: blobs[i],\n      commitment: commitments[i],\n      proof: proofs[i],\n    })\n\n  return sidecars as ToBlobSidecarsReturnType<to>\n}\n", "import {\n  InvalidSerializableTransactionError,\n  type InvalidSerializableTransactionErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  FeeValuesEIP1559,\n  FeeValuesEIP4844,\n  FeeValuesLegacy,\n} from '../../index.js'\nimport type {\n  TransactionRequestGeneric,\n  TransactionSerializableEIP2930,\n  TransactionSerializableEIP4844,\n  TransactionSerializableEIP7702,\n  TransactionSerializableGeneric,\n} from '../../types/transaction.js'\nimport type { Assign, ExactPartial, IsNever, OneOf } from '../../types/utils.js'\n\nexport type GetTransactionType<\n  transaction extends OneOf<\n    TransactionSerializableGeneric | TransactionRequestGeneric\n  > = TransactionSerializableGeneric,\n  result =\n    | (transaction extends LegacyProperties ? 'legacy' : never)\n    | (transaction extends EIP1559Properties ? 'eip1559' : never)\n    | (transaction extends EIP2930Properties ? 'eip2930' : never)\n    | (transaction extends EIP4844Properties ? 'eip4844' : never)\n    | (transaction extends EIP7702Properties ? 'eip7702' : never)\n    | (transaction['type'] extends TransactionSerializableGeneric['type']\n        ? Extract<transaction['type'], string>\n        : never),\n> = IsNever<keyof transaction> extends true\n  ? string\n  : IsNever<result> extends false\n    ? result\n    : string\n\nexport type GetTransactionTypeErrorType =\n  | InvalidSerializableTransactionErrorType\n  | ErrorType\n\nexport function getTransactionType<\n  const transaction extends OneOf<\n    TransactionSerializableGeneric | TransactionRequestGeneric\n  >,\n>(transaction: transaction): GetTransactionType<transaction> {\n  if (transaction.type)\n    return transaction.type as GetTransactionType<transaction>\n\n  if (typeof transaction.authorizationList !== 'undefined')\n    return 'eip7702' as any\n\n  if (\n    typeof transaction.blobs !== 'undefined' ||\n    typeof transaction.blobVersionedHashes !== 'undefined' ||\n    typeof transaction.maxFeePerBlobGas !== 'undefined' ||\n    typeof transaction.sidecars !== 'undefined'\n  )\n    return 'eip4844' as any\n\n  if (\n    typeof transaction.maxFeePerGas !== 'undefined' ||\n    typeof transaction.maxPriorityFeePerGas !== 'undefined'\n  ) {\n    return 'eip1559' as any\n  }\n\n  if (typeof transaction.gasPrice !== 'undefined') {\n    if (typeof transaction.accessList !== 'undefined') return 'eip2930' as any\n    return 'legacy' as any\n  }\n\n  throw new InvalidSerializableTransactionError({ transaction })\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////\n// Types\n\ntype BaseProperties = {\n  accessList?: undefined\n  authorizationList?: undefined\n  blobs?: undefined\n  blobVersionedHashes?: undefined\n  gasPrice?: undefined\n  maxFeePerBlobGas?: undefined\n  maxFeePerGas?: undefined\n  maxPriorityFeePerGas?: undefined\n  sidecars?: undefined\n}\n\ntype LegacyProperties = Assign<BaseProperties, FeeValuesLegacy>\ntype EIP1559Properties = Assign<\n  BaseProperties,\n  OneOf<\n    | {\n        maxFeePerGas: FeeValuesEIP1559['maxFeePerGas']\n      }\n    | {\n        maxPriorityFeePerGas: FeeValuesEIP1559['maxPriorityFeePerGas']\n      },\n    FeeValuesEIP1559\n  > & {\n    accessList?: TransactionSerializableEIP2930['accessList'] | undefined\n  }\n>\ntype EIP2930Properties = Assign<\n  ExactPartial<LegacyProperties>,\n  {\n    accessList: TransactionSerializableEIP2930['accessList']\n  }\n>\ntype EIP4844Properties = Assign<\n  ExactPartial<EIP1559Properties>,\n  ExactPartial<FeeValuesEIP4844> &\n    OneOf<\n      | {\n          blobs: TransactionSerializableEIP4844['blobs']\n        }\n      | {\n          blobVersionedHashes: TransactionSerializableEIP4844['blobVersionedHashes']\n        }\n      | {\n          sidecars: TransactionSerializableEIP4844['sidecars']\n        },\n      TransactionSerializableEIP4844\n    >\n>\ntype EIP7702Properties = Assign<\n  ExactPartial<EIP1559Properties>,\n  {\n    authorizationList: TransactionSerializableEIP7702['authorizationList']\n  }\n>\n", "import type { Account } from '../../accounts/types.js'\nimport type { SendTransactionParameters } from '../../actions/wallet/sendTransaction.js'\nimport type { BaseError } from '../../errors/base.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport {\n  TransactionExecutionError,\n  type TransactionExecutionErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\n\nimport {\n  type GetNodeErrorParameters,\n  type GetNodeErrorReturnType,\n  getNodeError,\n} from './getNodeError.js'\n\nexport type GetTransactionErrorParameters = Omit<\n  SendTransactionParameters,\n  'account' | 'chain'\n> & {\n  account: Account | null\n  chain?: Chain | undefined\n  docsPath?: string | undefined\n}\n\nexport type GetTransactionErrorReturnType<cause = ErrorType> = Omit<\n  TransactionExecutionErrorType,\n  'cause'\n> & { cause: cause | GetNodeErrorReturnType }\n\nexport function getTransactionError<err extends ErrorType<string>>(\n  err: err,\n  { docsPath, ...args }: GetTransactionErrorParameters,\n): GetTransactionErrorReturnType<err> {\n  const cause = (() => {\n    const cause = getNodeError(\n      err as {} as BaseError,\n      args as GetNodeErrorParameters,\n    )\n    if (cause instanceof UnknownNodeError) return err as {} as BaseError\n    return cause\n  })()\n  return new TransactionExecutionError(cause, {\n    docsPath,\n    ...args,\n  }) as GetTransactionErrorReturnType<err>\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type HexToNumberErrorType,\n  hexToNumber,\n} from '../../utils/encoding/fromHex.js'\n\nexport type GetChainIdReturnType = number\n\nexport type GetChainIdErrorType =\n  | HexToNumberErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns the chain ID associated with the current network.\n *\n * - Docs: https://viem.sh/docs/actions/public/getChainId\n * - JSON-RPC Methods: [`eth_chainId`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_chainid)\n *\n * @param client - Client to use\n * @returns The current chain ID. {@link GetChainIdReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getChainId } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const chainId = await getChainId(client)\n * // 1\n */\nexport async function getChainId<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(client: Client<Transport, chain, account>): Promise<GetChainIdReturnType> {\n  const chainIdHex = await client.request(\n    {\n      method: 'eth_chainId',\n    },\n    { dedupe: true },\n  )\n  return hexToNumber(chainIdHex)\n}\n", "import type { Address } from 'abitype'\nimport { parseAccount } from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport { BaseFeeScalarError } from '../../errors/fee.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account, GetAccountParameter } from '../../types/account.js'\nimport type { ExtractCapabilities } from '../../types/capabilities.js'\nimport type {\n  Chain,\n  ChainFeesFnParameters,\n  DeriveChain,\n  GetChainParameter,\n} from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n  type GetTransactionErrorReturnType,\n  getTransactionError,\n} from '../../utils/errors/getTransactionError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n  type FormattedTransaction,\n  formatTransaction,\n} from '../../utils/formatters/transaction.js'\nimport {\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { NonceManager } from '../../utils/nonceManager.js'\nimport { assertRequest } from '../../utils/transaction/assertRequest.js'\nimport { getBlock } from './getBlock.js'\nimport { getChainId as getChainId_ } from './getChainId.js'\n\nexport type FillTransactionParameters<\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  accountOverride extends Account | Address | undefined =\n    | Account\n    | Address\n    | undefined,\n  ///\n  _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = UnionOmit<FormattedTransactionRequest<_derivedChain>, 'from'> &\n  GetAccountParameter<account, accountOverride, false, true> &\n  GetChainParameter<chain, chainOverride> & {\n    /**\n     * Nonce manager to use for the transaction request.\n     */\n    nonceManager?: NonceManager | undefined\n  }\n\nexport type FillTransactionReturnType<\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  ///\n  _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = {\n  capabilities?:\n    | ExtractCapabilities<'fillTransaction', 'ReturnType'>\n    | undefined\n  raw: Hex\n  transaction: FormattedTransaction<_derivedChain>\n}\n\nexport type FillTransactionErrorType =\n  | GetTransactionErrorReturnType<ErrorType>\n  | ErrorType\n\n/**\n * Fills a transaction request with the necessary fields to be signed over.\n *\n * - Docs: https://viem.sh/docs/actions/public/fillTransaction\n *\n * @param client - Client to use\n * @param parameters - {@link FillTransactionParameters}\n * @returns The filled transaction. {@link FillTransactionReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { fillTransaction } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const result = await fillTransaction(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *   value: parseEther('1'),\n * })\n */\nexport async function fillTransaction<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  chainOverride extends Chain | undefined = undefined,\n  accountOverride extends Account | Address | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: FillTransactionParameters<\n    chain,\n    account,\n    chainOverride,\n    accountOverride\n  >,\n): Promise<FillTransactionReturnType<chain, chainOverride>> {\n  const {\n    account = client.account,\n    accessList,\n    authorizationList,\n    chain = client.chain,\n    blobVersionedHashes,\n    blobs,\n    data,\n    gas,\n    gasPrice,\n    maxFeePerBlobGas,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    nonce: nonce_,\n    nonceManager,\n    to,\n    type,\n    value,\n    ...rest\n  } = parameters\n\n  const nonce = await (async () => {\n    if (!account) return nonce_\n    if (!nonceManager) return nonce_\n    if (typeof nonce_ !== 'undefined') return nonce_\n    const account_ = parseAccount(account)\n    const chainId = chain\n      ? chain.id\n      : await getAction(client, getChainId_, 'getChainId')({})\n    return await nonceManager.consume({\n      address: account_.address,\n      chainId,\n      client,\n    })\n  })()\n\n  assertRequest(parameters)\n\n  const chainFormat = chain?.formatters?.transactionRequest?.format\n  const format = chainFormat || formatTransactionRequest\n\n  const request = format(\n    {\n      // Pick out extra data that might exist on the chain's transaction request type.\n      ...extract(rest, { format: chainFormat }),\n      account: account ? parseAccount(account) : undefined,\n      accessList,\n      authorizationList,\n      blobs,\n      blobVersionedHashes,\n      data,\n      gas,\n      gasPrice,\n      maxFeePerBlobGas,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      nonce,\n      to,\n      type,\n      value,\n    } as TransactionRequest,\n    'fillTransaction',\n  )\n\n  try {\n    const response = await client.request({\n      method: 'eth_fillTransaction',\n      params: [request],\n    })\n    const format = chain?.formatters?.transaction?.format || formatTransaction\n\n    const transaction = format(response.tx)\n\n    // Remove unnecessary fields.\n    delete transaction.blockHash\n    delete transaction.blockNumber\n    delete transaction.r\n    delete transaction.s\n    delete transaction.transactionIndex\n    delete transaction.v\n    delete transaction.yParity\n\n    // Rewrite fields.\n    transaction.data = transaction.input\n\n    // Preference supplied fees (some nodes do not take these preferences).\n    if (transaction.gas) transaction.gas = parameters.gas ?? transaction.gas\n    if (transaction.gasPrice)\n      transaction.gasPrice = parameters.gasPrice ?? transaction.gasPrice\n    if (transaction.maxFeePerBlobGas)\n      transaction.maxFeePerBlobGas =\n        parameters.maxFeePerBlobGas ?? transaction.maxFeePerBlobGas\n    if (transaction.maxFeePerGas)\n      transaction.maxFeePerGas =\n        parameters.maxFeePerGas ?? transaction.maxFeePerGas\n    if (transaction.maxPriorityFeePerGas)\n      transaction.maxPriorityFeePerGas =\n        parameters.maxPriorityFeePerGas ?? transaction.maxPriorityFeePerGas\n    if (transaction.nonce)\n      transaction.nonce = parameters.nonce ?? transaction.nonce\n\n    // Build fee multiplier function.\n    const feeMultiplier = await (async () => {\n      if (typeof chain?.fees?.baseFeeMultiplier === 'function') {\n        const block = await getAction(client, getBlock, 'getBlock')({})\n        return chain.fees.baseFeeMultiplier({\n          block,\n          client,\n          request: parameters,\n        } as ChainFeesFnParameters)\n      }\n      return chain?.fees?.baseFeeMultiplier ?? 1.2\n    })()\n    if (feeMultiplier < 1) throw new BaseFeeScalarError()\n\n    const decimals = feeMultiplier.toString().split('.')[1]?.length ?? 0\n    const denominator = 10 ** decimals\n    const multiplyFee = (base: bigint) =>\n      (base * BigInt(Math.ceil(feeMultiplier * denominator))) /\n      BigInt(denominator)\n\n    // Apply fee multiplier.\n    if (!transaction.feePayerSignature) {\n      if (transaction.maxFeePerGas && !parameters.maxFeePerGas)\n        transaction.maxFeePerGas = multiplyFee(transaction.maxFeePerGas)\n      if (transaction.gasPrice && !parameters.gasPrice)\n        transaction.gasPrice = multiplyFee(transaction.gasPrice)\n    }\n\n    return {\n      raw: response.raw,\n      transaction: {\n        from: request.from,\n        ...transaction,\n      },\n      ...(response.capabilities ? { capabilities: response.capabilities } : {}),\n    }\n  } catch (err) {\n    throw getTransactionError(\n      err as BaseError,\n      {\n        ...parameters,\n        chain: client.chain,\n      } as never,\n    )\n  }\n}\n", "import type { Address } from 'abitype'\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport {\n  type EstimateFeesPerGasErrorType,\n  internal_estimateFeesPerGas,\n} from '../../actions/public/estimateFeesPerGas.js'\nimport {\n  type EstimateGasErrorType,\n  type EstimateGasParameters,\n  estimateGas,\n} from '../../actions/public/estimateGas.js'\nimport {\n  type GetBlockErrorType,\n  getBlock as getBlock_,\n} from '../../actions/public/getBlock.js'\nimport {\n  type GetTransactionCountErrorType,\n  getTransactionCount,\n} from '../../actions/public/getTransactionCount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { AccountNotFoundErrorType } from '../../errors/account.js'\nimport type { BaseError } from '../../errors/base.js'\nimport {\n  Eip1559FeesNotSupportedError,\n  MaxFeePerGasTooLowError,\n} from '../../errors/fee.js'\nimport type { DeriveAccount, GetAccountParameter } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type { ExtractCapabilities } from '../../types/capabilities.js'\nimport type {\n  Chain,\n  DeriveChain,\n  GetChainParameter,\n} from '../../types/chain.js'\nimport type { GetTransactionRequestKzgParameter } from '../../types/kzg.js'\nimport type {\n  TransactionRequest,\n  TransactionRequestEIP1559,\n  TransactionRequestEIP2930,\n  TransactionRequestEIP4844,\n  TransactionRequestEIP7702,\n  TransactionRequestLegacy,\n  TransactionSerializable,\n} from '../../types/transaction.js'\nimport type {\n  ExactPartial,\n  IsNever,\n  Prettify,\n  UnionOmit,\n  UnionRequiredBy,\n} from '../../types/utils.js'\nimport { blobsToCommitments } from '../../utils/blob/blobsToCommitments.js'\nimport { blobsToProofs } from '../../utils/blob/blobsToProofs.js'\nimport { commitmentsToVersionedHashes } from '../../utils/blob/commitmentsToVersionedHashes.js'\nimport { toBlobSidecars } from '../../utils/blob/toBlobSidecars.js'\nimport type { FormattedTransactionRequest } from '../../utils/formatters/transactionRequest.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { LruMap } from '../../utils/lru.js'\nimport type { NonceManager } from '../../utils/nonceManager.js'\nimport {\n  type AssertRequestErrorType,\n  type AssertRequestParameters,\n  assertRequest,\n} from '../../utils/transaction/assertRequest.js'\nimport {\n  type GetTransactionType,\n  getTransactionType,\n} from '../../utils/transaction/getTransactionType.js'\nimport {\n  type FillTransactionErrorType,\n  type FillTransactionParameters,\n  fillTransaction,\n} from '../public/fillTransaction.js'\nimport { getChainId as getChainId_ } from '../public/getChainId.js'\n\nexport const defaultParameters = [\n  'blobVersionedHashes',\n  'chainId',\n  'fees',\n  'gas',\n  'nonce',\n  'type',\n] as const\n\n/** @internal */\nexport const eip1559NetworkCache = /*#__PURE__*/ new Map<string, boolean>()\n\n/** @internal */\nexport const supportsFillTransaction = /*#__PURE__*/ new LruMap<boolean>(128)\n\nexport type PrepareTransactionRequestParameterType =\n  | 'blobVersionedHashes'\n  | 'chainId'\n  | 'fees'\n  | 'gas'\n  | 'nonce'\n  | 'sidecars'\n  | 'type'\ntype ParameterTypeToParameters<\n  parameterType extends PrepareTransactionRequestParameterType,\n> = parameterType extends 'fees'\n  ? 'maxFeePerGas' | 'maxPriorityFeePerGas' | 'gasPrice'\n  : parameterType\n\nexport type PrepareTransactionRequestRequest<\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  ///\n  _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = UnionOmit<FormattedTransactionRequest<_derivedChain>, 'from'> &\n  GetTransactionRequestKzgParameter & {\n    /**\n     * Nonce manager to use for the transaction request.\n     */\n    nonceManager?: NonceManager | undefined\n    /**\n     * Parameters to prepare for the transaction request.\n     *\n     * @default ['blobVersionedHashes', 'chainId', 'fees', 'gas', 'nonce', 'type']\n     */\n    parameters?: readonly PrepareTransactionRequestParameterType[] | undefined\n  }\n\nexport type PrepareTransactionRequestParameters<\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  accountOverride extends Account | Address | undefined =\n    | Account\n    | Address\n    | undefined,\n  request extends PrepareTransactionRequestRequest<\n    chain,\n    chainOverride\n  > = PrepareTransactionRequestRequest<chain, chainOverride>,\n> = request &\n  GetAccountParameter<account, accountOverride, false, true> &\n  GetChainParameter<chain, chainOverride> &\n  GetTransactionRequestKzgParameter<request> & { chainId?: number | undefined }\n\nexport type PrepareTransactionRequestReturnType<\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  accountOverride extends Account | Address | undefined =\n    | Account\n    | Address\n    | undefined,\n  request extends PrepareTransactionRequestRequest<\n    chain,\n    chainOverride\n  > = PrepareTransactionRequestRequest<chain, chainOverride>,\n  ///\n  _derivedAccount extends Account | Address | undefined = DeriveAccount<\n    account,\n    accountOverride\n  >,\n  _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n  _transactionType = request['type'] extends string | undefined\n    ? request['type']\n    : GetTransactionType<request> extends 'legacy'\n      ? unknown\n      : GetTransactionType<request>,\n  _transactionRequest extends TransactionRequest =\n    | (_transactionType extends 'legacy' ? TransactionRequestLegacy : never)\n    | (_transactionType extends 'eip1559' ? TransactionRequestEIP1559 : never)\n    | (_transactionType extends 'eip2930' ? TransactionRequestEIP2930 : never)\n    | (_transactionType extends 'eip4844' ? TransactionRequestEIP4844 : never)\n    | (_transactionType extends 'eip7702' ? TransactionRequestEIP7702 : never),\n> = Prettify<\n  UnionRequiredBy<\n    Extract<\n      UnionOmit<FormattedTransactionRequest<_derivedChain>, 'from'> &\n        (_derivedChain extends Chain\n          ? { chain: _derivedChain }\n          : { chain?: undefined }) &\n        (_derivedAccount extends Account\n          ? { account: _derivedAccount; from: Address }\n          : { account?: undefined; from?: undefined }),\n      IsNever<_transactionRequest> extends true\n        ? unknown\n        : ExactPartial<_transactionRequest>\n    > & { chainId?: number | undefined },\n    ParameterTypeToParameters<\n      request['parameters'] extends readonly PrepareTransactionRequestParameterType[]\n        ? request['parameters'][number]\n        : (typeof defaultParameters)[number]\n    >\n  > &\n    (unknown extends request['kzg'] ? {} : Pick<request, 'kzg'>) & {\n      // TODO(v3): Extract `prepareTransactionRequest` response into a named object of `{ capabilities, request }.\n      _capabilities?:\n        | ExtractCapabilities<'fillTransaction', 'ReturnType'>\n        | undefined\n    }\n>\n\nexport type PrepareTransactionRequestErrorType =\n  | AccountNotFoundErrorType\n  | AssertRequestErrorType\n  | ParseAccountErrorType\n  | GetBlockErrorType\n  | GetTransactionCountErrorType\n  | EstimateGasErrorType\n  | EstimateFeesPerGasErrorType\n\n/**\n * Prepares a transaction request for signing.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/prepareTransactionRequest\n *\n * @param args - {@link PrepareTransactionRequestParameters}\n * @returns The transaction request. {@link PrepareTransactionRequestReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { prepareTransactionRequest } from 'viem/actions'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const request = await prepareTransactionRequest(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   to: '0x0000000000000000000000000000000000000000',\n *   value: 1n,\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { prepareTransactionRequest } from 'viem/actions'\n *\n * const client = createWalletClient({\n *   account: privateKeyToAccount('0x\u2026'),\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const request = await prepareTransactionRequest(client, {\n *   to: '0x0000000000000000000000000000000000000000',\n *   value: 1n,\n * })\n */\nexport async function prepareTransactionRequest<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  const request extends PrepareTransactionRequestRequest<chain, chainOverride>,\n  accountOverride extends Account | Address | undefined = undefined,\n  chainOverride extends Chain | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  args: PrepareTransactionRequestParameters<\n    chain,\n    account,\n    chainOverride,\n    accountOverride,\n    request\n  >,\n): Promise<\n  PrepareTransactionRequestReturnType<\n    chain,\n    account,\n    chainOverride,\n    accountOverride,\n    request\n  >\n> {\n  let request = args as PrepareTransactionRequestParameters\n\n  request.account ??= client.account\n  request.parameters ??= defaultParameters\n\n  const {\n    account: account_,\n    chain = client.chain,\n    nonceManager,\n    parameters,\n  } = request\n\n  const prepareTransactionRequest = (() => {\n    if (typeof chain?.prepareTransactionRequest === 'function')\n      return {\n        fn: chain.prepareTransactionRequest,\n        runAt: ['beforeFillTransaction'],\n      }\n    if (Array.isArray(chain?.prepareTransactionRequest))\n      return {\n        fn: chain.prepareTransactionRequest[0],\n        runAt: chain.prepareTransactionRequest[1].runAt,\n      }\n    return undefined\n  })()\n\n  let chainId: number | undefined\n  async function getChainId(): Promise<number> {\n    if (chainId) return chainId\n    if (typeof request.chainId !== 'undefined') return request.chainId\n    if (chain) return chain.id\n    const chainId_ = await getAction(client, getChainId_, 'getChainId')({})\n    chainId = chainId_\n    return chainId\n  }\n\n  const account = account_ ? parseAccount(account_) : account_\n\n  let nonce = request.nonce\n  if (\n    parameters.includes('nonce') &&\n    typeof nonce === 'undefined' &&\n    account &&\n    nonceManager\n  ) {\n    const chainId = await getChainId()\n    nonce = await nonceManager.consume({\n      address: account.address,\n      chainId,\n      client,\n    })\n  }\n\n  if (\n    prepareTransactionRequest?.fn &&\n    prepareTransactionRequest.runAt?.includes('beforeFillTransaction')\n  ) {\n    request = await prepareTransactionRequest.fn(\n      { ...request, chain },\n      {\n        phase: 'beforeFillTransaction',\n      },\n    )\n    nonce ??= request.nonce\n  }\n\n  const attemptFill = (() => {\n    // Do not attempt if blobs are provided.\n    if (\n      (parameters.includes('blobVersionedHashes') ||\n        parameters.includes('sidecars')) &&\n      request.kzg &&\n      request.blobs\n    )\n      return false\n\n    // Do not attempt if `eth_fillTransaction` is not supported.\n    if (supportsFillTransaction.get(client.uid) === false) return false\n\n    // Should attempt `eth_fillTransaction` if \"fees\" or \"gas\" are required to be populated,\n    // otherwise, can just use the other individual calls.\n    const shouldAttempt = ['fees', 'gas'].some((parameter) =>\n      parameters.includes(parameter as PrepareTransactionRequestParameterType),\n    )\n    if (!shouldAttempt) return false\n\n    // Check if `eth_fillTransaction` needs to be called.\n    if (parameters.includes('chainId') && typeof request.chainId !== 'number')\n      return true\n    if (parameters.includes('nonce') && typeof nonce !== 'number') return true\n    if (\n      parameters.includes('fees') &&\n      typeof request.gasPrice !== 'bigint' &&\n      (typeof request.maxFeePerGas !== 'bigint' ||\n        typeof (request as any).maxPriorityFeePerGas !== 'bigint')\n    )\n      return true\n    if (parameters.includes('gas') && typeof request.gas !== 'bigint')\n      return true\n    return false\n  })()\n\n  const fillResult = attemptFill\n    ? await getAction(\n        client,\n        fillTransaction,\n        'fillTransaction',\n      )({ ...request, nonce } as FillTransactionParameters)\n        .then((result) => {\n          const {\n            chainId,\n            from,\n            gas,\n            gasPrice,\n            nonce,\n            maxFeePerBlobGas,\n            maxFeePerGas,\n            maxPriorityFeePerGas,\n            type,\n            ...rest\n          } = result.transaction\n          supportsFillTransaction.set(client.uid, true)\n          return {\n            ...request,\n            ...(from ? { from } : {}),\n            ...(type && !request.type ? { type } : {}),\n            ...(typeof chainId !== 'undefined' ? { chainId } : {}),\n            ...(typeof gas !== 'undefined' ? { gas } : {}),\n            ...(typeof gasPrice !== 'undefined' ? { gasPrice } : {}),\n            ...(typeof nonce !== 'undefined' ? { nonce } : {}),\n            ...(typeof maxFeePerBlobGas !== 'undefined' &&\n            request.type !== 'legacy' &&\n            request.type !== 'eip2930'\n              ? { maxFeePerBlobGas }\n              : {}),\n            ...(typeof maxFeePerGas !== 'undefined' &&\n            request.type !== 'legacy' &&\n            request.type !== 'eip2930'\n              ? { maxFeePerGas }\n              : {}),\n            ...(typeof maxPriorityFeePerGas !== 'undefined' &&\n            request.type !== 'legacy' &&\n            request.type !== 'eip2930'\n              ? { maxPriorityFeePerGas }\n              : {}),\n            ...('nonceKey' in rest && typeof rest.nonceKey !== 'undefined'\n              ? { nonceKey: rest.nonceKey }\n              : {}),\n            ...('keyAuthorization' in rest &&\n            typeof rest.keyAuthorization !== 'undefined' &&\n            rest.keyAuthorization !== null &&\n            !('keyAuthorization' in request)\n              ? { keyAuthorization: rest.keyAuthorization }\n              : {}),\n            ...('feePayerSignature' in rest &&\n            typeof rest.feePayerSignature !== 'undefined' &&\n            rest.feePayerSignature !== null\n              ? { feePayerSignature: rest.feePayerSignature }\n              : {}),\n            ...(result.capabilities\n              ? { _capabilities: result.capabilities }\n              : {}),\n          }\n        })\n        .catch((e) => {\n          const error = e as FillTransactionErrorType\n\n          if (error.name !== 'TransactionExecutionError') return request\n\n          const executionReverted = error.walk?.((e) => {\n            const error = e as BaseError\n            return error.name === 'ExecutionRevertedError'\n          })\n          if (executionReverted) throw e\n\n          const unsupported = error.walk?.((e) => {\n            const error = e as BaseError\n            return (\n              error.name === 'MethodNotFoundRpcError' ||\n              error.name === 'MethodNotSupportedRpcError' ||\n              error.message?.includes('eth_fillTransaction is not available')\n            )\n          })\n          if (unsupported) supportsFillTransaction.set(client.uid, false)\n\n          return request\n        })\n    : request\n\n  nonce ??= fillResult.nonce\n\n  request = {\n    ...(fillResult as any),\n    ...(account ? { from: account?.address } : {}),\n    ...(nonce ? { nonce } : {}),\n  }\n  const { blobs, gas, kzg, type } = request\n\n  if (\n    prepareTransactionRequest?.fn &&\n    prepareTransactionRequest.runAt?.includes('beforeFillParameters')\n  ) {\n    request = await prepareTransactionRequest.fn(\n      { ...request, chain },\n      {\n        phase: 'beforeFillParameters',\n      },\n    )\n  }\n\n  let block: Block | undefined\n  async function getBlock(): Promise<Block> {\n    if (block) return block\n    block = await getAction(\n      client,\n      getBlock_,\n      'getBlock',\n    )({ blockTag: 'latest' })\n    return block\n  }\n\n  if (\n    parameters.includes('nonce') &&\n    typeof nonce === 'undefined' &&\n    account &&\n    !nonceManager\n  )\n    request.nonce = await getAction(\n      client,\n      getTransactionCount,\n      'getTransactionCount',\n    )({\n      address: account.address,\n      blockTag: 'pending',\n    })\n\n  if (\n    (parameters.includes('blobVersionedHashes') ||\n      parameters.includes('sidecars')) &&\n    blobs &&\n    kzg\n  ) {\n    const commitments = blobsToCommitments({ blobs, kzg })\n\n    if (parameters.includes('blobVersionedHashes')) {\n      const versionedHashes = commitmentsToVersionedHashes({\n        commitments,\n        to: 'hex',\n      })\n      request.blobVersionedHashes = versionedHashes\n    }\n    if (parameters.includes('sidecars')) {\n      const proofs = blobsToProofs({ blobs, commitments, kzg })\n      const sidecars = toBlobSidecars({\n        blobs,\n        commitments,\n        proofs,\n        to: 'hex',\n      })\n      request.sidecars = sidecars\n    }\n  }\n\n  if (parameters.includes('chainId')) request.chainId = await getChainId()\n\n  if (\n    (parameters.includes('fees') || parameters.includes('type')) &&\n    typeof type === 'undefined'\n  ) {\n    try {\n      request.type = getTransactionType(\n        request as TransactionSerializable,\n      ) as any\n    } catch {\n      let isEip1559Network = eip1559NetworkCache.get(client.uid)\n      if (typeof isEip1559Network === 'undefined') {\n        const block = await getBlock()\n        isEip1559Network = typeof block?.baseFeePerGas === 'bigint'\n        eip1559NetworkCache.set(client.uid, isEip1559Network)\n      }\n      request.type = isEip1559Network ? 'eip1559' : 'legacy'\n    }\n  }\n\n  if (parameters.includes('fees')) {\n    // TODO(4844): derive blob base fees once https://github.com/ethereum/execution-apis/pull/486 is merged.\n\n    if (request.type !== 'legacy' && request.type !== 'eip2930') {\n      // EIP-1559 fees\n      if (\n        typeof request.maxFeePerGas === 'undefined' ||\n        typeof request.maxPriorityFeePerGas === 'undefined'\n      ) {\n        const block = await getBlock()\n        const { maxFeePerGas, maxPriorityFeePerGas } =\n          await internal_estimateFeesPerGas(client, {\n            block: block as Block,\n            chain,\n            request: request as PrepareTransactionRequestParameters,\n          })\n\n        if (\n          typeof request.maxPriorityFeePerGas === 'undefined' &&\n          request.maxFeePerGas &&\n          request.maxFeePerGas < maxPriorityFeePerGas\n        )\n          throw new MaxFeePerGasTooLowError({\n            maxPriorityFeePerGas,\n          })\n\n        request.maxPriorityFeePerGas = maxPriorityFeePerGas\n        request.maxFeePerGas = maxFeePerGas\n      }\n    } else {\n      // Legacy fees\n      if (\n        typeof request.maxFeePerGas !== 'undefined' ||\n        typeof request.maxPriorityFeePerGas !== 'undefined'\n      )\n        throw new Eip1559FeesNotSupportedError()\n\n      if (typeof request.gasPrice === 'undefined') {\n        const block = await getBlock()\n        const { gasPrice: gasPrice_ } = await internal_estimateFeesPerGas(\n          client,\n          {\n            block: block as Block,\n            chain,\n            request: request as PrepareTransactionRequestParameters,\n            type: 'legacy',\n          },\n        )\n        request.gasPrice = gasPrice_\n      }\n    }\n  }\n\n  if (parameters.includes('gas') && typeof gas === 'undefined')\n    request.gas = await getAction(\n      client,\n      estimateGas,\n      'estimateGas',\n    )({\n      ...request,\n      account,\n      prepare: account?.type === 'local' ? [] : ['blobVersionedHashes'],\n    } as EstimateGasParameters)\n\n  if (\n    prepareTransactionRequest?.fn &&\n    prepareTransactionRequest.runAt?.includes('afterFillParameters')\n  )\n    request = await prepareTransactionRequest.fn(\n      { ...request, chain },\n      {\n        phase: 'afterFillParameters',\n      },\n    )\n\n  assertRequest(request as AssertRequestParameters)\n\n  delete request.parameters\n\n  return request as any\n}\n", "import type { Address } from 'abitype'\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { BaseError } from '../../errors/base.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n  type RecoverAuthorizationAddressErrorType,\n  recoverAuthorizationAddress,\n} from '../../utils/authorization/recoverAuthorizationAddress.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type GetEstimateGasErrorReturnType,\n  getEstimateGasError,\n} from '../../utils/errors/getEstimateGasError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport { serializeStateOverride } from '../../utils/stateOverride.js'\nimport {\n  type AssertRequestErrorType,\n  type AssertRequestParameters,\n  assertRequest,\n} from '../../utils/transaction/assertRequest.js'\nimport {\n  type PrepareTransactionRequestParameters,\n  type PrepareTransactionRequestParameterType,\n  prepareTransactionRequest,\n} from '../wallet/prepareTransactionRequest.js'\n\nexport type EstimateGasParameters<\n  chain extends Chain | undefined = Chain | undefined,\n> = UnionOmit<FormattedEstimateGas<chain>, 'from'> & {\n  account?: Account | Address | undefined\n  prepare?:\n    | boolean\n    | readonly PrepareTransactionRequestParameterType[]\n    | undefined\n  stateOverride?: StateOverride | undefined\n} & (\n    | {\n        /** The balance of the account at a block number. */\n        blockNumber?: bigint | undefined\n        blockTag?: undefined\n      }\n    | {\n        blockNumber?: undefined\n        /**\n         * The balance of the account at a block tag.\n         * @default 'latest'\n         */\n        blockTag?: BlockTag | undefined\n      }\n  )\ntype FormattedEstimateGas<chain extends Chain | undefined = Chain | undefined> =\n  FormattedTransactionRequest<chain>\n\nexport type EstimateGasReturnType = bigint\n\nexport type EstimateGasErrorType = GetEstimateGasErrorReturnType<\n  | ParseAccountErrorType\n  | NumberToHexErrorType\n  | RequestErrorType\n  | RecoverAuthorizationAddressErrorType\n  | AssertRequestErrorType\n>\n\n/**\n * Estimates the gas necessary to complete a transaction without submitting it to the network.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateGas\n * - JSON-RPC Methods: [`eth_estimateGas`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_estimategas)\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateGasParameters}\n * @returns The gas estimate (in gas units). {@link EstimateGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseEther } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateGas } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const gasEstimate = await estimateGas(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *   value: parseEther('1'),\n * })\n */\nexport async function estimateGas<\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  args: EstimateGasParameters<chain>,\n): Promise<EstimateGasReturnType> {\n  const { account: account_ = client.account, prepare = true } = args\n  const account = account_ ? parseAccount(account_) : undefined\n\n  const parameters = (() => {\n    if (Array.isArray(prepare)) return prepare\n    // Some RPC Providers do not compute versioned hashes from blobs. We will need\n    // to compute them.\n    if (account?.type !== 'local') return ['blobVersionedHashes']\n    return undefined\n  })()\n\n  try {\n    const to = await (async () => {\n      // If `to` exists on the parameters, use that.\n      if (args.to) return args.to\n\n      // If no `to` exists, and we are sending a EIP-7702 transaction, use the\n      // address of the first authorization in the list.\n      if (args.authorizationList && args.authorizationList.length > 0)\n        return await recoverAuthorizationAddress({\n          authorization: args.authorizationList[0],\n        }).catch(() => {\n          throw new BaseError(\n            '`to` is required. Could not infer from `authorizationList`',\n          )\n        })\n\n      // Otherwise, we are sending a deployment transaction.\n      return undefined\n    })()\n\n    const {\n      accessList,\n      authorizationList,\n      blobs,\n      blobVersionedHashes,\n      blockNumber,\n      blockTag,\n      data,\n      gas,\n      gasPrice,\n      maxFeePerBlobGas,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      nonce,\n      value,\n      stateOverride,\n      ...rest\n    } = prepare\n      ? ((await prepareTransactionRequest(client, {\n          ...args,\n          parameters,\n          to,\n        } as PrepareTransactionRequestParameters)) as EstimateGasParameters)\n      : args\n\n    // If we get `gas` back from the prepared transaction request, which is\n    // different from the `gas` we provided, it was likely filled by other means\n    // during request preparation (e.g. `eth_fillTransaction` or `chain.transactionRequest.prepare`).\n    // (e.g. `eth_fillTransaction` or `chain.transactionRequest.prepare`).\n    if (gas && args.gas !== gas) return gas\n\n    const blockNumberHex =\n      typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n    const block = blockNumberHex || blockTag\n\n    const rpcStateOverride = serializeStateOverride(stateOverride)\n\n    assertRequest(args as AssertRequestParameters)\n\n    const chainFormat = client.chain?.formatters?.transactionRequest?.format\n    const format = chainFormat || formatTransactionRequest\n\n    const request = format(\n      {\n        // Pick out extra data that might exist on the chain's transaction request type.\n        ...extract(rest, { format: chainFormat }),\n        account,\n        accessList,\n        authorizationList,\n        blobs,\n        blobVersionedHashes,\n        data,\n        gasPrice,\n        maxFeePerBlobGas,\n        maxFeePerGas,\n        maxPriorityFeePerGas,\n        nonce,\n        to,\n        value,\n      } as TransactionRequest,\n      'estimateGas',\n    )\n\n    return BigInt(\n      await client.request({\n        method: 'eth_estimateGas',\n        params: rpcStateOverride\n          ? [\n              request,\n              block ?? client.experimental_blockTag ?? 'latest',\n              rpcStateOverride,\n            ]\n          : block\n            ? [request, block]\n            : [request],\n      }),\n    )\n  } catch (err) {\n    throw getEstimateGasError(err as BaseError, {\n      ...args,\n      account,\n      chain: client.chain,\n    })\n  }\n}\n", "import type { Abi } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n  ContractFunctionParameters,\n  GetValue,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  type EncodeFunctionDataParameters,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type EstimateGasErrorType,\n  type EstimateGasParameters,\n  estimateGas,\n} from './estimateGas.js'\n\nexport type EstimateContractGasParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends ContractFunctionName<\n    abi,\n    'nonpayable' | 'payable'\n  > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n  chain extends Chain | undefined = Chain | undefined,\n> = ContractFunctionParameters<\n  abi,\n  'nonpayable' | 'payable',\n  functionName,\n  args\n> &\n  UnionOmit<EstimateGasParameters<chain>, 'data' | 'to' | 'value'> &\n  GetValue<\n    abi,\n    functionName,\n    EstimateGasParameters<chain> extends EstimateGasParameters\n      ? EstimateGasParameters<chain>['value']\n      : EstimateGasParameters['value']\n  > & {\n    /** Data to append to the end of the calldata. Useful for adding a [\"domain\" tag](https://opensea.notion.site/opensea/Seaport-Order-Attributions-ec2d69bf455041a5baa490941aad307f). */\n    dataSuffix?: Hex | undefined\n  }\n\nexport type EstimateContractGasReturnType = bigint\n\nexport type EstimateContractGasErrorType = GetContractErrorReturnType<\n  EncodeFunctionDataErrorType | EstimateGasErrorType | ParseAccountErrorType\n>\n\n/**\n * Estimates the gas required to successfully execute a contract write function call.\n *\n * - Docs: https://viem.sh/docs/contract/estimateContractGas\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`estimateGas` action](https://viem.sh/docs/actions/public/estimateGas) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateContractGasParameters}\n * @returns The gas estimate (in wei). {@link EstimateContractGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateContractGas } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const gas = await estimateContractGas(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   abi: parseAbi(['function mint() public']),\n *   functionName: 'mint',\n *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * })\n */\nexport async function estimateContractGas<\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: EstimateContractGasParameters<abi, functionName, args, chain>,\n): Promise<EstimateContractGasReturnType> {\n  const {\n    abi,\n    address,\n    args,\n    functionName,\n    dataSuffix = typeof client.dataSuffix === 'string'\n      ? client.dataSuffix\n      : client.dataSuffix?.value,\n    ...request\n  } = parameters as EstimateContractGasParameters\n  const data = encodeFunctionData({\n    abi,\n    args,\n    functionName,\n  } as EncodeFunctionDataParameters)\n\n  try {\n    const gas = await getAction(\n      client,\n      estimateGas,\n      'estimateGas',\n    )({\n      data: `${data}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n      to: address,\n      ...request,\n    } as unknown as EstimateGasParameters)\n    return gas\n  } catch (error) {\n    const account = request.account ? parseAccount(request.account) : undefined\n    throw getContractError(error as BaseError, {\n      abi,\n      address,\n      args,\n      docsPath: '/docs/contract/estimateContractGas',\n      functionName,\n      sender: account?.address,\n    })\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport { isAddress } from './isAddress.js'\n\nexport type IsAddressEqualReturnType = boolean\nexport type IsAddressEqualErrorType = InvalidAddressErrorType | ErrorType\n\nexport function isAddressEqual(a: Address, b: Address) {\n  if (!isAddress(a, { strict: false }))\n    throw new InvalidAddressError({ address: a })\n  if (!isAddress(b, { strict: false }))\n    throw new InvalidAddressError({ address: b })\n  return a.toLowerCase() === b.toLowerCase()\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Log } from '../../types/log.js'\nimport type { RpcLog } from '../../types/rpc.js'\nimport type { ExactPartial } from '../../types/utils.js'\n\nexport type FormatLogErrorType = ErrorType\n\nexport function formatLog(\n  log: ExactPartial<RpcLog>,\n  {\n    args,\n    eventName,\n  }: { args?: unknown | undefined; eventName?: string | undefined } = {},\n) {\n  return {\n    ...log,\n    blockHash: log.blockHash ? log.blockHash : null,\n    blockNumber: log.blockNumber ? BigInt(log.blockNumber) : null,\n    blockTimestamp: log.blockTimestamp\n      ? BigInt(log.blockTimestamp)\n      : log.blockTimestamp === null\n        ? null\n        : undefined,\n    logIndex: log.logIndex ? Number(log.logIndex) : null,\n    transactionHash: log.transactionHash ? log.transactionHash : null,\n    transactionIndex: log.transactionIndex\n      ? Number(log.transactionIndex)\n      : null,\n    ...(eventName ? { args, eventName } : {}),\n  } as Log\n}\n", "import type { Abi, AbiParameter } from 'abitype'\n\nimport {\n  AbiDecodingDataSizeTooSmallError,\n  type AbiDecodingDataSizeTooSmallErrorType,\n  AbiEventSignatureEmptyTopicsError,\n  type AbiEventSignatureEmptyTopicsErrorType,\n  AbiEventSignatureNotFoundError,\n  type AbiEventSignatureNotFoundErrorType,\n  DecodeLogDataMismatch,\n  type DecodeLogDataMismatchErrorType,\n  DecodeLogTopicsMismatch,\n  type DecodeLogTopicsMismatchErrorType,\n} from '../../errors/abi.js'\nimport { PositionOutOfBoundsError } from '../../errors/cursor.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractEventArgsFromTopics,\n  ContractEventName,\n  EventDefinition,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n  IsNarrowable,\n  Prettify,\n  UnionEvaluate,\n} from '../../types/utils.js'\nimport { size } from '../data/size.js'\nimport {\n  type ToEventSelectorErrorType,\n  toEventSelector,\n} from '../hash/toEventSelector.js'\nimport {\n  type DecodeAbiParametersErrorType,\n  decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\n\nexport type DecodeEventLogParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined = ContractEventName<abi>,\n  topics extends Hex[] = Hex[],\n  data extends Hex | undefined = undefined,\n  strict extends boolean = true,\n> = {\n  abi: abi\n  data?: data | undefined\n  eventName?: eventName | ContractEventName<abi> | undefined\n  strict?: strict | boolean | undefined\n  topics: [signature: Hex, ...args: topics] | []\n}\n\nexport type DecodeEventLogReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined = ContractEventName<abi>,\n  topics extends Hex[] = Hex[],\n  data extends Hex | undefined = undefined,\n  strict extends boolean = true,\n  ///\n  allEventNames extends\n    ContractEventName<abi> = eventName extends ContractEventName<abi>\n    ? eventName\n    : ContractEventName<abi>,\n> = IsNarrowable<abi, Abi> extends true\n  ? {\n      [name in allEventNames]: Prettify<\n        {\n          eventName: name\n        } & UnionEvaluate<\n          ContractEventArgsFromTopics<abi, name, strict> extends infer allArgs\n            ? topics extends readonly []\n              ? data extends undefined\n                ? { args?: undefined }\n                : { args?: allArgs | undefined }\n              : { args: allArgs }\n            : never\n        >\n      >\n    }[allEventNames]\n  : {\n      eventName: eventName\n      args: readonly unknown[] | undefined\n    }\n\nexport type DecodeEventLogErrorType =\n  | AbiDecodingDataSizeTooSmallErrorType\n  | AbiEventSignatureEmptyTopicsErrorType\n  | AbiEventSignatureNotFoundErrorType\n  | DecodeAbiParametersErrorType\n  | DecodeLogTopicsMismatchErrorType\n  | DecodeLogDataMismatchErrorType\n  | FormatAbiItemErrorType\n  | ToEventSelectorErrorType\n  | ErrorType\n\nconst docsPath = '/docs/contract/decodeEventLog'\n\nexport function decodeEventLog<\n  const abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi> | undefined = undefined,\n  topics extends Hex[] = Hex[],\n  data extends Hex | undefined = undefined,\n  strict extends boolean = true,\n>(\n  parameters: DecodeEventLogParameters<abi, eventName, topics, data, strict>,\n): DecodeEventLogReturnType<abi, eventName, topics, data, strict> {\n  const {\n    abi,\n    data,\n    strict: strict_,\n    topics,\n  } = parameters as DecodeEventLogParameters\n\n  const strict = strict_ ?? true\n  const [signature, ...argTopics] = topics\n  if (!signature) throw new AbiEventSignatureEmptyTopicsError({ docsPath })\n\n  const abiItem = abi.find(\n    (x) =>\n      x.type === 'event' &&\n      signature === toEventSelector(formatAbiItem(x) as EventDefinition),\n  )\n\n  if (!(abiItem && 'name' in abiItem) || abiItem.type !== 'event')\n    throw new AbiEventSignatureNotFoundError(signature, { docsPath })\n\n  const { name, inputs } = abiItem\n  const isUnnamed = inputs?.some((x) => !('name' in x && x.name))\n\n  const args: any = isUnnamed ? [] : {}\n\n  // Decode topics (indexed args).\n  const indexedInputs = inputs\n    .map((x, i) => [x, i] as const)\n    .filter(([x]) => 'indexed' in x && x.indexed)\n\n  const missingIndexedInputs: [AbiParameter, number][] = []\n\n  for (let i = 0; i < indexedInputs.length; i++) {\n    const [param, argIndex] = indexedInputs[i]\n    const topic = argTopics[i]\n    if (!topic) {\n      if (strict)\n        throw new DecodeLogTopicsMismatch({\n          abiItem,\n          param: param as AbiParameter & { indexed: boolean },\n        })\n      // Track missing indexed inputs to decode from data when strict is false\n      missingIndexedInputs.push([param, argIndex])\n      continue\n    }\n    args[isUnnamed ? argIndex : param.name || argIndex] = decodeTopic({\n      param,\n      value: topic,\n    })\n  }\n\n  // Decode data (non-indexed args + missing indexed args when strict is false).\n  const nonIndexedInputs = inputs.filter((x) => !('indexed' in x && x.indexed))\n\n  // When strict is false, missing indexed inputs should be decoded from data\n  const inputsToDecode = strict\n    ? nonIndexedInputs\n    : [...missingIndexedInputs.map(([param]) => param), ...nonIndexedInputs]\n\n  if (inputsToDecode.length > 0) {\n    if (data && data !== '0x') {\n      try {\n        const decodedData = decodeAbiParameters(\n          inputsToDecode,\n          data,\n        ) as unknown[]\n        if (decodedData) {\n          let dataIndex = 0\n          // First, assign missing indexed parameters (when strict is false)\n          if (!strict) {\n            for (const [param, argIndex] of missingIndexedInputs) {\n              args[isUnnamed ? argIndex : param.name || argIndex] =\n                decodedData[dataIndex++]\n            }\n          }\n          // Then, assign non-indexed parameters\n          if (isUnnamed) {\n            for (let i = 0; i < inputs.length; i++)\n              if (args[i] === undefined && dataIndex < decodedData.length)\n                args[i] = decodedData[dataIndex++]\n          } else\n            for (let i = 0; i < nonIndexedInputs.length; i++)\n              args[nonIndexedInputs[i].name!] = decodedData[dataIndex++]\n        }\n      } catch (err) {\n        if (strict) {\n          if (\n            err instanceof AbiDecodingDataSizeTooSmallError ||\n            err instanceof PositionOutOfBoundsError\n          )\n            throw new DecodeLogDataMismatch({\n              abiItem,\n              data: data,\n              params: inputsToDecode,\n              size: size(data),\n            })\n          throw err\n        }\n      }\n    } else if (strict) {\n      throw new DecodeLogDataMismatch({\n        abiItem,\n        data: '0x',\n        params: inputsToDecode,\n        size: 0,\n      })\n    }\n  }\n\n  return {\n    eventName: name,\n    args: Object.values(args).length > 0 ? args : undefined,\n  } as unknown as DecodeEventLogReturnType<abi, eventName, topics, data, strict>\n}\n\nfunction decodeTopic({ param, value }: { param: AbiParameter; value: Hex }) {\n  if (\n    param.type === 'string' ||\n    param.type === 'bytes' ||\n    param.type === 'tuple' ||\n    param.type.match(/^(.*)\\[(\\d+)?\\]$/)\n  )\n    return value\n  const decodedArg = decodeAbiParameters([param], value) || []\n  return decodedArg[0]\n}\n", "// TODO(v3): checksum address.\n\nimport type { Abi, AbiEvent, AbiEventParameter, Address } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ContractEventName, GetEventArgs } from '../../types/contract.js'\nimport type { Log } from '../../types/log.js'\nimport type { RpcLog } from '../../types/rpc.js'\nimport { isAddressEqual } from '../address/isAddressEqual.js'\nimport { toBytes } from '../encoding/toBytes.js'\nimport { formatLog } from '../formatters/log.js'\nimport { keccak256 } from '../hash/keccak256.js'\nimport { toEventSelector } from '../hash/toEventSelector.js'\nimport {\n  type DecodeEventLogErrorType,\n  decodeEventLog,\n} from './decodeEventLog.js'\n\nexport type ParseEventLogsParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends\n    | ContractEventName<abi>\n    | ContractEventName<abi>[]\n    | undefined = ContractEventName<abi>,\n  strict extends boolean | undefined = boolean | undefined,\n  ///\n  allArgs = GetEventArgs<\n    abi,\n    eventName extends ContractEventName<abi>\n      ? eventName\n      : ContractEventName<abi>,\n    {\n      EnableUnion: true\n      IndexedOnly: false\n      Required: false\n    }\n  >,\n> = {\n  /** Contract ABI. */\n  abi: abi\n  /** Arguments for the event. */\n  args?: allArgs | undefined\n  /** Contract event. */\n  eventName?:\n    | eventName\n    | ContractEventName<abi>\n    | ContractEventName<abi>[]\n    | undefined\n  /** List of logs. */\n  logs: (Log | RpcLog)[]\n  strict?: strict | boolean | undefined\n}\n\nexport type ParseEventLogsReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends\n    | ContractEventName<abi>\n    | ContractEventName<abi>[]\n    | undefined = ContractEventName<abi>,\n  strict extends boolean | undefined = boolean | undefined,\n  ///\n  derivedEventName extends\n    | ContractEventName<abi>\n    | undefined = eventName extends ContractEventName<abi>[]\n    ? eventName[number]\n    : eventName,\n> = Log<bigint, number, false, undefined, strict, abi, derivedEventName>[]\n\nexport type ParseEventLogsErrorType = DecodeEventLogErrorType | ErrorType\n\n/**\n * Extracts & decodes logs matching the provided signature(s) (`abi` + optional `eventName`)\n * from a set of opaque logs.\n *\n * @param parameters - {@link ParseEventLogsParameters}\n * @returns The logs. {@link ParseEventLogsReturnType}\n *\n * @example\n * import { createClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { parseEventLogs } from 'viem/op-stack'\n *\n * const client = createClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n *\n * const receipt = await getTransactionReceipt(client, {\n *   hash: '0xec23b2ba4bc59ba61554507c1b1bc91649e6586eb2dd00c728e8ed0db8bb37ea',\n * })\n *\n * const logs = parseEventLogs({ logs: receipt.logs })\n * // [{ args: { ... }, eventName: 'TransactionDeposited', ... }, ...]\n */\nexport function parseEventLogs<\n  abi extends Abi | readonly unknown[],\n  strict extends boolean | undefined = true,\n  eventName extends\n    | ContractEventName<abi>\n    | ContractEventName<abi>[]\n    | undefined = undefined,\n>(\n  parameters: ParseEventLogsParameters<abi, eventName, strict>,\n): ParseEventLogsReturnType<abi, eventName, strict> {\n  const { abi, args, logs, strict = true } = parameters\n\n  const eventName = (() => {\n    if (!parameters.eventName) return undefined\n    if (Array.isArray(parameters.eventName)) return parameters.eventName\n    return [parameters.eventName as string]\n  })()\n\n  const abiTopics = (abi as Abi)\n    .filter((abiItem) => abiItem.type === 'event')\n    .map((abiItem) => ({\n      abi: abiItem,\n      selector: toEventSelector(abiItem),\n    }))\n\n  return logs\n    .map((log) => {\n      // Normalize RpcLog (hex-encoded quantities) to Log (bigint/number).\n      // When logs come directly from an RPC response (e.g. eth_getLogs),\n      // fields like blockNumber are hex strings instead of bigints.\n      const formattedLog =\n        typeof log.blockNumber === 'string' ? formatLog(log as RpcLog) : log\n\n      // Find all matching ABI items with the same selector.\n      // Multiple events can share the same selector but differ in indexed parameters\n      // (e.g., ERC20 vs ERC721 Transfer events).\n      const abiItems = abiTopics.filter(\n        (abiTopic) => formattedLog.topics[0] === abiTopic.selector,\n      )\n      if (abiItems.length === 0) return null\n\n      // Try each matching ABI item until one successfully decodes.\n      let event: { eventName: string; args: unknown } | undefined\n      let abiItem: { abi: AbiEvent; selector: Address } | undefined\n\n      for (const item of abiItems) {\n        try {\n          event = decodeEventLog({\n            ...formattedLog,\n            abi: [item.abi],\n            strict: true,\n          })\n          abiItem = item\n          break\n        } catch {\n          // Try next ABI item\n        }\n      }\n\n      // If strict decoding failed for all, and we're in non-strict mode,\n      // fall back to the first matching ABI item.\n      if (!event && !strict) {\n        abiItem = abiItems[0]\n        try {\n          event = decodeEventLog({\n            data: formattedLog.data,\n            topics: formattedLog.topics,\n            abi: [abiItem.abi],\n            strict: false,\n          })\n        } catch {\n          // If decoding still fails, return partial log in non-strict mode.\n          const isUnnamed = abiItem.abi.inputs?.some(\n            (x) => !('name' in x && x.name),\n          )\n          return {\n            ...formattedLog,\n            args: isUnnamed ? [] : {},\n            eventName: abiItem.abi.name,\n          }\n        }\n      }\n\n      // If no event was found, return null.\n      if (!event || !abiItem) return null\n\n      // Check that the decoded event name matches the provided event name.\n      if (eventName && !eventName.includes(event.eventName)) return null\n\n      // Check that the decoded event args match the provided args.\n      if (\n        !includesArgs({\n          args: event.args,\n          inputs: abiItem.abi.inputs,\n          matchArgs: args,\n        })\n      )\n        return null\n\n      return { ...event, ...formattedLog }\n    })\n    .filter(Boolean) as unknown as ParseEventLogsReturnType<\n    abi,\n    eventName,\n    strict\n  >\n}\n\nfunction includesArgs(parameters: {\n  args: unknown\n  inputs: AbiEvent['inputs']\n  matchArgs: unknown\n}) {\n  const { args, inputs, matchArgs } = parameters\n\n  if (!matchArgs) return true\n  if (!args) return false\n\n  function isEqual(input: AbiEventParameter, value: unknown, arg: unknown) {\n    try {\n      if (input.type === 'address')\n        return isAddressEqual(value as Address, arg as Address)\n      if (input.type === 'string' || input.type === 'bytes')\n        return keccak256(toBytes(value as string)) === arg\n      return value === arg\n    } catch {\n      return false\n    }\n  }\n\n  if (Array.isArray(args) && Array.isArray(matchArgs)) {\n    return matchArgs.every((value, index) => {\n      if (value === null || value === undefined) return true\n      const input = inputs[index]\n      if (!input) return false\n      const value_ = Array.isArray(value) ? value : [value]\n      return value_.some((value) => isEqual(input, value, args[index]))\n    })\n  }\n\n  if (\n    typeof args === 'object' &&\n    !Array.isArray(args) &&\n    typeof matchArgs === 'object' &&\n    !Array.isArray(matchArgs)\n  )\n    return Object.entries(matchArgs).every(([key, value]) => {\n      if (value === null || value === undefined) return true\n      const input = inputs.find((input) => input.name === key)\n      if (!input) return false\n      const value_ = Array.isArray(value) ? value : [value]\n      return value_.some((value) =>\n        isEqual(input, value, (args as Record<string, unknown>)[key]),\n      )\n    })\n\n  return false\n}\n", "import type { AbiEvent, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  MaybeAbiEventName,\n  MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hash, LogTopic } from '../../types/misc.js'\nimport type { RpcLog } from '../../types/rpc.js'\nimport type { DecodeEventLogErrorType } from '../../utils/abi/decodeEventLog.js'\nimport {\n  type EncodeEventTopicsErrorType,\n  type EncodeEventTopicsParameters,\n  encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type FormatLogErrorType,\n  formatLog,\n} from '../../utils/formatters/log.js'\n\nexport type GetLogsParameters<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  //\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n> = {\n  /** Address or list of addresses from which logs originated */\n  address?: Address | Address[] | undefined\n} & (\n  | {\n      event: abiEvent\n      events?: undefined\n      args?: MaybeExtractEventArgsFromAbi<abiEvents, _eventName> | undefined\n      /**\n       * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n       * @default false\n       */\n      strict?: strict | undefined\n    }\n  | {\n      event?: undefined\n      events: abiEvents\n      args?: undefined\n      /**\n       * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n       * @default false\n       */\n      strict?: strict | undefined\n    }\n  | {\n      event?: undefined\n      events?: undefined\n      args?: undefined\n      strict?: undefined\n    }\n) &\n  (\n    | {\n        /** Block number or tag after which to include logs */\n        fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n        /** Block number or tag before which to include logs */\n        toBlock?: toBlock | BlockNumber | BlockTag | undefined\n        blockHash?: undefined\n      }\n    | {\n        fromBlock?: undefined\n        toBlock?: undefined\n        /** Hash of block to include logs from */\n        blockHash?: Hash | undefined\n      }\n  )\n\nexport type GetLogsReturnType<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  //\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n  _pending extends boolean =\n    | (fromBlock extends 'pending' ? true : false)\n    | (toBlock extends 'pending' ? true : false),\n> = Log<bigint, number, _pending, abiEvent, strict, abiEvents, _eventName>[]\n\nexport type GetLogsErrorType =\n  | DecodeEventLogErrorType\n  | EncodeEventTopicsErrorType\n  | FormatLogErrorType\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns a list of event logs matching the provided parameters.\n *\n * - Docs: https://viem.sh/docs/actions/public/getLogs\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/logs_event-logs\n * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n *\n * @param client - Client to use\n * @param parameters - {@link GetLogsParameters}\n * @returns A list of event logs. {@link GetLogsReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getLogs } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const logs = await getLogs(client)\n */\nexport async function getLogs<\n  chain extends Chain | undefined,\n  const abiEvent extends AbiEvent | undefined = undefined,\n  const abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n  client: Client<Transport, chain>,\n  {\n    address,\n    blockHash,\n    fromBlock,\n    toBlock,\n    event,\n    events: events_,\n    args,\n    strict: strict_,\n  }: GetLogsParameters<abiEvent, abiEvents, strict, fromBlock, toBlock> = {},\n): Promise<GetLogsReturnType<abiEvent, abiEvents, strict, fromBlock, toBlock>> {\n  const strict = strict_ ?? false\n  const events = events_ ?? (event ? [event] : undefined)\n\n  let topics: LogTopic[] = []\n  if (events) {\n    const encoded = (events as AbiEvent[]).flatMap((event) =>\n      encodeEventTopics({\n        abi: [event],\n        eventName: (event as AbiEvent).name,\n        args: events_ ? undefined : args,\n      } as EncodeEventTopicsParameters),\n    )\n    // TODO: Clean up type casting\n    topics = [encoded as LogTopic]\n    if (event) topics = topics[0] as LogTopic[]\n  }\n\n  let logs: RpcLog[]\n  if (blockHash) {\n    logs = await client.request({\n      method: 'eth_getLogs',\n      params: [{ address, topics, blockHash }],\n    })\n  } else {\n    logs = await client.request({\n      method: 'eth_getLogs',\n      params: [\n        {\n          address,\n          topics,\n          fromBlock:\n            typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n          toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n        },\n      ],\n    })\n  }\n\n  const formattedLogs = logs.map((log) => formatLog(log))\n  if (!events)\n    return formattedLogs as GetLogsReturnType<\n      abiEvent,\n      abiEvents,\n      strict,\n      fromBlock,\n      toBlock\n    >\n  return parseEventLogs({\n    abi: events,\n    args: args as any,\n    logs: formattedLogs,\n    strict,\n  }) as unknown as GetLogsReturnType<\n    abiEvent,\n    abiEvents,\n    strict,\n    fromBlock,\n    toBlock\n  >\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractEventArgs,\n  ContractEventName,\n} from '../../types/contract.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hash } from '../../types/misc.js'\nimport {\n  type GetAbiItemErrorType,\n  type GetAbiItemParameters,\n  getAbiItem,\n} from '../../utils/abi/getAbiItem.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type GetLogsErrorType,\n  type GetLogsParameters,\n  getLogs,\n} from './getLogs.js'\n\nexport type GetContractEventsParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined =\n    | ContractEventName<abi>\n    | undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n  /** The address of the contract. */\n  address?: Address | Address[] | undefined\n  /** Contract ABI. */\n  abi: abi\n  args?:\n    | ContractEventArgs<\n        abi,\n        eventName extends ContractEventName<abi>\n          ? eventName\n          : ContractEventName<abi>\n      >\n    | undefined\n  /** Contract event. */\n  eventName?: eventName | ContractEventName<abi> | undefined\n  /**\n   * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n   * @default false\n   */\n  strict?: strict | boolean | undefined\n} & (\n  | {\n      /** Block number or tag after which to include logs */\n      fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n      /** Block number or tag before which to include logs */\n      toBlock?: toBlock | BlockNumber | BlockTag | undefined\n      blockHash?: undefined\n    }\n  | {\n      fromBlock?: undefined\n      toBlock?: undefined\n      /** Hash of block to include logs from */\n      blockHash?: Hash | undefined\n    }\n)\n\nexport type GetContractEventsReturnType<\n  abi extends Abi | readonly unknown[] = readonly unknown[],\n  eventName extends ContractEventName<abi> | undefined =\n    | ContractEventName<abi>\n    | undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  ///\n  isPending extends boolean =\n    | (fromBlock extends 'pending' ? true : false)\n    | (toBlock extends 'pending' ? true : false),\n> = Log<bigint, number, isPending, undefined, strict, abi, eventName>[]\n\nexport type GetContractEventsErrorType =\n  | GetAbiItemErrorType\n  | GetLogsErrorType\n  | ErrorType\n\n/**\n * Returns a list of event logs emitted by a contract.\n *\n * - Docs: https://viem.sh/docs/contract/getContractEvents#getcontractevents\n * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n *\n * @param client - Client to use\n * @param parameters - {@link GetContractEventsParameters}\n * @returns A list of event logs. {@link GetContractEventsReturnType}\n *\n * @example\n * import { createClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getContractEvents } from 'viem/public'\n * import { wagmiAbi } from './abi'\n *\n * const client = createClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const logs = await getContractEvents(client, {\n *  address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *  abi: wagmiAbi,\n *  eventName: 'Transfer'\n * })\n */\nexport async function getContractEvents<\n  chain extends Chain | undefined,\n  const abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi> | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n  client: Client<Transport, chain>,\n  parameters: GetContractEventsParameters<\n    abi,\n    eventName,\n    strict,\n    fromBlock,\n    toBlock\n  >,\n): Promise<\n  GetContractEventsReturnType<abi, eventName, strict, fromBlock, toBlock>\n> {\n  const {\n    abi,\n    address,\n    args,\n    blockHash,\n    eventName,\n    fromBlock,\n    toBlock,\n    strict,\n  } = parameters\n  const event = eventName\n    ? getAbiItem({ abi, name: eventName } as GetAbiItemParameters)\n    : undefined\n  const events = !event\n    ? (abi as Abi).filter((x) => x.type === 'event')\n    : undefined\n  return getAction(\n    client,\n    getLogs,\n    'getLogs',\n  )({\n    address,\n    args,\n    blockHash,\n    event,\n    events,\n    fromBlock,\n    toBlock,\n    strict,\n  } as {} as GetLogsParameters) as unknown as GetContractEventsReturnType<\n    abi,\n    eventName,\n    strict,\n    fromBlock,\n    toBlock\n  >\n}\n", "import type { Abi, AbiStateMutability, ExtractAbiFunctions } from 'abitype'\n\nimport {\n  AbiFunctionNotFoundError,\n  type AbiFunctionNotFoundErrorType,\n  AbiFunctionOutputsNotFoundError,\n  type AbiFunctionOutputsNotFoundErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n  ContractFunctionReturnType,\n  Widen,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport {\n  type DecodeAbiParametersErrorType,\n  decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/decodeFunctionResult'\n\nexport type DecodeFunctionResultParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends\n    | ContractFunctionName<abi>\n    | undefined = ContractFunctionName<abi>,\n  args extends ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  > = ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  >,\n  ///\n  hasFunctions = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [ExtractAbiFunctions<abi>] extends [never]\n        ? false\n        : true\n    : true,\n  allArgs = ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  >,\n  allFunctionNames = ContractFunctionName<abi>,\n> = {\n  abi: abi\n  data: Hex\n} & UnionEvaluate<\n  IsNarrowable<abi, Abi> extends true\n    ? abi['length'] extends 1\n      ? { functionName?: functionName | allFunctionNames | undefined }\n      : { functionName: functionName | allFunctionNames }\n    : { functionName?: functionName | allFunctionNames | undefined }\n> &\n  UnionEvaluate<\n    readonly [] extends allArgs\n      ? {\n          args?:\n            | allArgs // show all options\n            // infer value, widen inferred value of `args` conditionally to match `allArgs`\n            | (abi extends Abi\n                ? args extends allArgs\n                  ? Widen<args>\n                  : never\n                : never)\n            | undefined\n        }\n      : {\n          args?:\n            | allArgs // show all options\n            | (Widen<args> & (args extends allArgs ? unknown : never)) // infer value, widen inferred value of `args` match `allArgs` (e.g. avoid union `args: readonly [123n] | readonly [bigint]`)\n            | undefined\n        }\n  > &\n  (hasFunctions extends true ? unknown : never)\n\nexport type DecodeFunctionResultReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends\n    | ContractFunctionName<abi>\n    | undefined = ContractFunctionName<abi>,\n  args extends ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  > = ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  >,\n> = ContractFunctionReturnType<\n  abi,\n  AbiStateMutability,\n  functionName extends ContractFunctionName<abi>\n    ? functionName\n    : ContractFunctionName<abi>,\n  args\n>\n\nexport type DecodeFunctionResultErrorType =\n  | AbiFunctionNotFoundErrorType\n  | AbiFunctionOutputsNotFoundErrorType\n  | DecodeAbiParametersErrorType\n  | GetAbiItemErrorType\n  | ErrorType\n\nexport function decodeFunctionResult<\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi> | undefined = undefined,\n  const args extends ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  > = ContractFunctionArgs<\n    abi,\n    AbiStateMutability,\n    functionName extends ContractFunctionName<abi>\n      ? functionName\n      : ContractFunctionName<abi>\n  >,\n>(\n  parameters: DecodeFunctionResultParameters<abi, functionName, args>,\n): DecodeFunctionResultReturnType<abi, functionName, args> {\n  const { abi, args, functionName, data } =\n    parameters as DecodeFunctionResultParameters\n\n  let abiItem = abi[0]\n  if (functionName) {\n    const item = getAbiItem({ abi, args, name: functionName })\n    if (!item) throw new AbiFunctionNotFoundError(functionName, { docsPath })\n    abiItem = item\n  }\n\n  if (abiItem.type !== 'function')\n    throw new AbiFunctionNotFoundError(undefined, { docsPath })\n  if (!abiItem.outputs)\n    throw new AbiFunctionOutputsNotFoundError(abiItem.name, { docsPath })\n\n  const values = decodeAbiParameters(abiItem.outputs, data)\n  if (values && values.length > 1)\n    return values as DecodeFunctionResultReturnType<abi, functionName, args>\n  if (values && values.length === 1)\n    return values[0] as DecodeFunctionResultReturnType<abi, functionName, args>\n  return undefined as DecodeFunctionResultReturnType<abi, functionName, args>\n}\n", "/** @internal */\nexport const version = '0.1.1'\n", "import { version } from '../version.js'\n\n/** @internal */\nexport function getUrl(url: string) {\n  return url\n}\n\n/** @internal */\nexport function getVersion() {\n  return version\n}\n\n/** @internal */\nexport function prettyPrint(args: unknown) {\n  if (!args) return ''\n  const entries = Object.entries(args)\n    .map(([key, value]) => {\n      if (value === undefined || value === false) return null\n      return [key, value]\n    })\n    .filter(Boolean) as [string, string][]\n  const maxLength = entries.reduce((acc, [key]) => Math.max(acc, key.length), 0)\n  return entries\n    .map(([key, value]) => `  ${`${key}:`.padEnd(maxLength + 1)}  ${value}`)\n    .join('\\n')\n}\n", "import { getVersion } from './internal/errors.js'\n\nexport type GlobalErrorType<name extends string = 'Error'> = Error & {\n  name: name\n}\n\n/**\n * Base error class inherited by all errors thrown by ox.\n *\n * @example\n * ```ts\n * import { Errors } from 'ox'\n * throw new Errors.BaseError('An error occurred')\n * ```\n */\nexport class BaseError<\n  cause extends Error | undefined = undefined,\n> extends Error {\n  details: string\n  docs?: string | undefined\n  docsOrigin?: string | undefined\n  docsPath?: string | undefined\n  shortMessage: string\n  showVersion?: boolean | undefined\n  version?: string | undefined\n\n  override cause: cause\n  override name = 'BaseError'\n\n  static defaultStaticOptions = {\n    docsOrigin: 'https://oxlib.sh',\n    showVersion: false,\n    version: `ox@${getVersion()}`,\n  } satisfies BaseError.GlobalOptions\n\n  static setStaticOptions(options: BaseError.GlobalOptions) {\n    BaseError.prototype.docsOrigin = options.docsOrigin\n    BaseError.prototype.showVersion = options.showVersion\n    BaseError.prototype.version = options.version\n  }\n\n  static {\n    BaseError.setStaticOptions(BaseError.defaultStaticOptions)\n  }\n\n  constructor(shortMessage: string, options: BaseError.Options<cause> = {}) {\n    const details = (() => {\n      if (options.cause instanceof BaseError) {\n        if (options.cause.details) return options.cause.details\n        if (options.cause.shortMessage) return options.cause.shortMessage\n      }\n      if (\n        options.cause &&\n        'details' in options.cause &&\n        typeof options.cause.details === 'string'\n      )\n        return options.cause.details\n      if (options.cause?.message) return options.cause.message\n      return options.details!\n    })()\n    const docsPath = (() => {\n      if (options.cause instanceof BaseError)\n        return options.cause.docsPath || options.docsPath\n      return options.docsPath\n    })()\n\n    const docsBaseUrl = options.docsOrigin ?? BaseError.prototype.docsOrigin\n    const docs = `${docsBaseUrl}${docsPath ?? ''}`\n    const showVersion = Boolean(\n      options.version ?? BaseError.prototype.showVersion,\n    )\n    const version = options.version ?? BaseError.prototype.version\n\n    const message = [\n      shortMessage || 'An error occurred.',\n      ...(options.metaMessages ? ['', ...options.metaMessages] : []),\n      ...(details || docsPath || showVersion\n        ? [\n            '',\n            details ? `Details: ${details}` : undefined,\n            docsPath ? `See: ${docs}` : undefined,\n            showVersion ? `Version: ${version}` : undefined,\n          ]\n        : []),\n    ]\n      .filter((x) => typeof x === 'string')\n      .join('\\n')\n\n    super(message, options.cause ? { cause: options.cause } : undefined)\n\n    this.cause = options.cause as any\n    this.details = details\n    this.docs = docs\n    this.docsOrigin = docsBaseUrl\n    this.docsPath = docsPath\n    this.shortMessage = shortMessage\n    this.showVersion = showVersion\n    this.version = version\n  }\n\n  walk(): Error\n  walk(fn: (err: unknown) => boolean): Error | null\n  walk(fn?: any): any {\n    return walk(this, fn)\n  }\n}\n\nexport declare namespace BaseError {\n  type Options<cause extends Error | undefined = Error | undefined> = {\n    /** Cause of the error. */\n    cause?: cause | undefined\n    /** Details of the error. */\n    details?: string | undefined\n    /** Origin of the docs. */\n    docsOrigin?: string | undefined\n    /** Path of the docs. */\n    docsPath?: string | undefined\n    /** Meta messages to add to the error. */\n    metaMessages?: (string | undefined)[] | undefined\n    /** Version of the library to attribute the error to. */\n    version?: string | undefined\n  }\n\n  type GlobalOptions = {\n    /** Origin of the docs. */\n    docsOrigin?: string | undefined\n    /** Whether to show the version of the library in the error message. */\n    showVersion?: boolean | undefined\n    /** Version of the library to attribute the error to. */\n    version?: string | undefined\n  }\n}\n\n/** @internal */\nfunction walk(\n  err: unknown,\n  fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n  if (fn?.(err)) return err\n  if (err && typeof err === 'object' && 'cause' in err && err.cause)\n    return walk(err.cause, fn)\n  return fn ? null : err\n}\n", "import * as Bytes from '../Bytes.js'\nimport type * as Errors from '../Errors.js'\n\n/** @internal */\nexport function assertSize(bytes: Bytes.Bytes, size_: number): void {\n  if (Bytes.size(bytes) > size_)\n    throw new Bytes.SizeOverflowError({\n      givenSize: Bytes.size(bytes),\n      maxSize: size_,\n    })\n}\n\n/** @internal */\nexport declare namespace assertSize {\n  type ErrorType =\n    | Bytes.size.ErrorType\n    | Bytes.SizeOverflowError\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertStartOffset(\n  value: Bytes.Bytes,\n  start?: number | undefined,\n) {\n  if (typeof start === 'number' && start > 0 && start > Bytes.size(value) - 1)\n    throw new Bytes.SliceOffsetOutOfBoundsError({\n      offset: start,\n      position: 'start',\n      size: Bytes.size(value),\n    })\n}\n\nexport declare namespace assertStartOffset {\n  export type ErrorType =\n    | Bytes.SliceOffsetOutOfBoundsError\n    | Bytes.size.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertEndOffset(\n  value: Bytes.Bytes,\n  start?: number | undefined,\n  end?: number | undefined,\n) {\n  if (\n    typeof start === 'number' &&\n    typeof end === 'number' &&\n    Bytes.size(value) !== end - start\n  ) {\n    throw new Bytes.SliceOffsetOutOfBoundsError({\n      offset: end,\n      position: 'end',\n      size: Bytes.size(value),\n    })\n  }\n}\n\n/** @internal */\nexport declare namespace assertEndOffset {\n  type ErrorType =\n    | Bytes.SliceOffsetOutOfBoundsError\n    | Bytes.size.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport const charCodeMap = {\n  zero: 48,\n  nine: 57,\n  A: 65,\n  F: 70,\n  a: 97,\n  f: 102,\n} as const\n\n/** @internal */\nexport function charCodeToBase16(char: number) {\n  if (char >= charCodeMap.zero && char <= charCodeMap.nine)\n    return char - charCodeMap.zero\n  if (char >= charCodeMap.A && char <= charCodeMap.F)\n    return char - (charCodeMap.A - 10)\n  if (char >= charCodeMap.a && char <= charCodeMap.f)\n    return char - (charCodeMap.a - 10)\n  return undefined\n}\n\n/** @internal */\nexport function pad(bytes: Bytes.Bytes, options: pad.Options = {}) {\n  const { dir, size = 32 } = options\n  if (size === 0) return bytes\n  if (bytes.length > size)\n    throw new Bytes.SizeExceedsPaddingSizeError({\n      size: bytes.length,\n      targetSize: size,\n      type: 'Bytes',\n    })\n  const paddedBytes = new Uint8Array(size)\n  for (let i = 0; i < size; i++) {\n    const padEnd = dir === 'right'\n    paddedBytes[padEnd ? i : size - i - 1] =\n      bytes[padEnd ? i : bytes.length - i - 1]!\n  }\n  return paddedBytes\n}\n\n/** @internal */\nexport declare namespace pad {\n  type Options = {\n    dir?: 'left' | 'right' | undefined\n    size?: number | undefined\n  }\n\n  type ReturnType = Bytes.Bytes\n\n  type ErrorType = Bytes.SizeExceedsPaddingSizeError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function trim(\n  value: Bytes.Bytes,\n  options: trim.Options = {},\n): trim.ReturnType {\n  const { dir = 'left' } = options\n\n  let data = value\n\n  let sliceLength = 0\n  for (let i = 0; i < data.length - 1; i++) {\n    if (data[dir === 'left' ? i : data.length - i - 1]!.toString() === '0')\n      sliceLength++\n    else break\n  }\n  data =\n    dir === 'left'\n      ? data.slice(sliceLength)\n      : data.slice(0, data.length - sliceLength)\n\n  return data as trim.ReturnType\n}\n\n/** @internal */\nexport declare namespace trim {\n  type Options = {\n    dir?: 'left' | 'right' | undefined\n  }\n\n  type ReturnType = Bytes.Bytes\n\n  type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Errors from '../Errors.js'\nimport * as Hex from '../Hex.js'\n\n/** @internal */\nexport function assertSize(hex: Hex.Hex, size_: number): void {\n  if (Hex.size(hex) > size_)\n    throw new Hex.SizeOverflowError({\n      givenSize: Hex.size(hex),\n      maxSize: size_,\n    })\n}\n\n/** @internal */\nexport declare namespace assertSize {\n  type ErrorType =\n    | Hex.size.ErrorType\n    | Hex.SizeOverflowError\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertStartOffset(value: Hex.Hex, start?: number | undefined) {\n  if (typeof start === 'number' && start > 0 && start > Hex.size(value) - 1)\n    throw new Hex.SliceOffsetOutOfBoundsError({\n      offset: start,\n      position: 'start',\n      size: Hex.size(value),\n    })\n}\n\nexport declare namespace assertStartOffset {\n  type ErrorType =\n    | Hex.SliceOffsetOutOfBoundsError\n    | Hex.size.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertEndOffset(\n  value: Hex.Hex,\n  start?: number | undefined,\n  end?: number | undefined,\n) {\n  if (\n    typeof start === 'number' &&\n    typeof end === 'number' &&\n    Hex.size(value) !== end - start\n  ) {\n    throw new Hex.SliceOffsetOutOfBoundsError({\n      offset: end,\n      position: 'end',\n      size: Hex.size(value),\n    })\n  }\n}\n\nexport declare namespace assertEndOffset {\n  type ErrorType =\n    | Hex.SliceOffsetOutOfBoundsError\n    | Hex.size.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function pad(hex_: Hex.Hex, options: pad.Options = {}) {\n  const { dir, size = 32 } = options\n\n  if (size === 0) return hex_\n\n  const hex = hex_.replace('0x', '')\n  if (hex.length > size * 2)\n    throw new Hex.SizeExceedsPaddingSizeError({\n      size: Math.ceil(hex.length / 2),\n      targetSize: size,\n      type: 'Hex',\n    })\n\n  return `0x${hex[dir === 'right' ? 'padEnd' : 'padStart'](size * 2, '0')}` as Hex.Hex\n}\n\n/** @internal */\nexport declare namespace pad {\n  type Options = {\n    dir?: 'left' | 'right' | undefined\n    size?: number | undefined\n  }\n  type ErrorType = Hex.SizeExceedsPaddingSizeError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function trim(\n  value: Hex.Hex,\n  options: trim.Options = {},\n): trim.ReturnType {\n  const { dir = 'left' } = options\n\n  let data = value.replace('0x', '')\n\n  let sliceLength = 0\n  for (let i = 0; i < data.length - 1; i++) {\n    if (data[dir === 'left' ? i : data.length - i - 1]!.toString() === '0')\n      sliceLength++\n    else break\n  }\n  data =\n    dir === 'left'\n      ? data.slice(sliceLength)\n      : data.slice(0, data.length - sliceLength)\n\n  if (data === '0') return '0x'\n  if (dir === 'right' && data.length % 2 === 1) return `0x${data}0`\n  return `0x${data}` as trim.ReturnType\n}\n\n/** @internal */\nexport declare namespace trim {\n  type Options = {\n    dir?: 'left' | 'right' | undefined\n  }\n\n  type ReturnType = Hex.Hex\n\n  type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Errors from './Errors.js'\n\nconst bigIntSuffix = '#__bigint'\n\n/**\n * Serializes a value to a canonical JSON string as defined by\n * [RFC 8785 (JSON Canonicalization Scheme)](https://www.rfc-editor.org/rfc/rfc8785).\n *\n * - Object keys are sorted recursively by UTF-16 code unit comparison.\n * - Primitives are serialized per ECMAScript rules (no trailing zeros on numbers, etc.).\n * - No whitespace is inserted.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.canonicalize({ b: 2, a: 1 })\n * // @log: '{\"a\":1,\"b\":2}'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.canonicalize({ z: [3, { y: 1, x: 2 }], a: 'hello' })\n * // @log: '{\"a\":\"hello\",\"z\":[3,{\"x\":2,\"y\":1}]}'\n * ```\n *\n * @param value - The value to canonicalize.\n * @returns The canonical JSON string.\n */\nexport function canonicalize(value: unknown): string {\n  if (value === null || typeof value === 'boolean' || typeof value === 'string')\n    return JSON.stringify(value)\n  if (typeof value === 'number') {\n    if (!Number.isFinite(value))\n      throw new TypeError('Cannot canonicalize non-finite number')\n    return Object.is(value, -0) ? '0' : JSON.stringify(value)\n  }\n  if (typeof value === 'bigint')\n    throw new TypeError('Cannot canonicalize bigint')\n  if (Array.isArray(value))\n    return `[${value.map((item) => canonicalize(item)).join(',')}]`\n  if (typeof value === 'object') {\n    const entries = Object.keys(value as Record<string, unknown>)\n      .sort()\n      .reduce<string[]>((acc, key) => {\n        const v = (value as Record<string, unknown>)[key]\n        if (v !== undefined)\n          acc.push(`${JSON.stringify(key)}:${canonicalize(v)}`)\n        return acc\n      }, [])\n    return `{${entries.join(',')}}`\n  }\n  return undefined as never\n}\n\nexport declare namespace canonicalize {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses a JSON string, with support for `bigint`.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.parse('{\"foo\":\"bar\",\"baz\":\"69420694206942069420694206942069420694206942069420#__bigint\"}')\n * // @log: {\n * // @log:   foo: 'bar',\n * // @log:   baz: 69420694206942069420694206942069420694206942069420n\n * // @log: }\n * ```\n *\n * @param string - The value to parse.\n * @param reviver - A function that transforms the results.\n * @returns The parsed value.\n */\nexport function parse(\n  string: string,\n  reviver?: ((this: any, key: string, value: any) => any) | undefined,\n) {\n  return JSON.parse(string, (key, value_) => {\n    const value = value_\n    if (typeof value === 'string' && value.endsWith(bigIntSuffix))\n      return BigInt(value.slice(0, -bigIntSuffix.length))\n    return typeof reviver === 'function' ? reviver(key, value) : value\n  })\n}\n\nexport declare namespace parse {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Stringifies a value to its JSON representation, with support for `bigint`.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.stringify({\n *   foo: 'bar',\n *   baz: 69420694206942069420694206942069420694206942069420n,\n * })\n * // @log: '{\"foo\":\"bar\",\"baz\":\"69420694206942069420694206942069420694206942069420#__bigint\"}'\n * ```\n *\n * @param value - The value to stringify.\n * @param replacer - A function that transforms the results. It is passed the key and value of the property, and must return the value to be used in the JSON string. If this function returns `undefined`, the property is not included in the resulting JSON string.\n * @param space - A string or number that determines the indentation of the JSON string. If it is a number, it indicates the number of spaces to use as indentation; if it is a string (e.g. `'\\t'`), it uses the string as the indentation character.\n * @returns The JSON string.\n */\nexport function stringify(\n  value: any,\n  replacer?: ((this: any, key: string, value: any) => any) | null | undefined,\n  space?: string | number | undefined,\n) {\n  return JSON.stringify(\n    value,\n    (key, value) => {\n      if (typeof replacer === 'function') return replacer(key, value)\n      if (typeof value === 'bigint') return value.toString() + bigIntSuffix\n      return value\n    },\n    space,\n  )\n}\n\nexport declare namespace stringify {\n  type ErrorType = Errors.GlobalErrorType\n}\n", "import { equalBytes } from '@noble/curves/abstract/utils'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as internal from './internal/bytes.js'\nimport * as internal_hex from './internal/hex.js'\nimport * as Json from './Json.js'\n\nconst decoder = /*#__PURE__*/ new TextDecoder()\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\n/** Root type for a Bytes array. */\nexport type Bytes = Uint8Array\n\n/**\n * Asserts if the given value is {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.assert('abc')\n * // @error: Bytes.InvalidBytesTypeError:\n * // @error: Value `\"abc\"` of type `string` is an invalid Bytes value.\n * // @error: Bytes values must be of type `Uint8Array`.\n * ```\n *\n * @param value - Value to assert.\n */\nexport function assert(value: unknown): asserts value is Bytes {\n  if (value instanceof Uint8Array) return\n  if (!value) throw new InvalidBytesTypeError(value)\n  if (typeof value !== 'object') throw new InvalidBytesTypeError(value)\n  if (!('BYTES_PER_ELEMENT' in value)) throw new InvalidBytesTypeError(value)\n  if (value.BYTES_PER_ELEMENT !== 1 || value.constructor.name !== 'Uint8Array')\n    throw new InvalidBytesTypeError(value)\n}\n\nexport declare namespace assert {\n  type ErrorType = InvalidBytesTypeError | Errors.GlobalErrorType\n}\n\n/**\n * Concatenates two or more {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const bytes = Bytes.concat(\n *   Bytes.from([1]),\n *   Bytes.from([69]),\n *   Bytes.from([420, 69]),\n * )\n * // @log: Uint8Array [ 1, 69, 420, 69 ]\n * ```\n *\n * @param values - Values to concatenate.\n * @returns Concatenated {@link ox#Bytes.Bytes}.\n */\nexport function concat(...values: readonly Bytes[]): Bytes {\n  let length = 0\n  for (const arr of values) {\n    length += arr.length\n  }\n  const result = new Uint8Array(length)\n  for (let i = 0, index = 0; i < values.length; i++) {\n    const arr = values[i]\n    result.set(arr!, index)\n    index += arr!.length\n  }\n  return result\n}\n\nexport declare namespace concat {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a {@link ox#Bytes.Bytes} value from a `Uint8Array`, a hex string, or an array of unsigned 8-bit integers.\n *\n * :::tip\n *\n * To instantiate from a **Boolean**, **String**, or **Number**, use one of the following:\n *\n * - `Bytes.fromBoolean`\n *\n * - `Bytes.fromString`\n *\n * - `Bytes.fromNumber`\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.from([255, 124, 5, 4])\n * // @log: Uint8Array([255, 124, 5, 4])\n *\n * const data = Bytes.from('0xdeadbeef')\n * // @log: Uint8Array([222, 173, 190, 239])\n * ```\n *\n * @param value - Value to convert.\n * @returns A {@link ox#Bytes.Bytes} instance.\n */\nexport function from(value: Hex.Hex | Bytes | readonly number[]): Bytes {\n  if (value instanceof Uint8Array) return value\n  if (typeof value === 'string') return fromHex(value)\n  return fromArray(value)\n}\n\nexport declare namespace from {\n  type ErrorType =\n    | fromHex.ErrorType\n    | fromArray.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Converts an array of unsigned 8-bit integers into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromArray([255, 124, 5, 4])\n * // @log: Uint8Array([255, 124, 5, 4])\n * ```\n *\n * @param value - Value to convert.\n * @returns A {@link ox#Bytes.Bytes} instance.\n */\nexport function fromArray(value: readonly number[] | Uint8Array): Bytes {\n  return value instanceof Uint8Array ? value : new Uint8Array(value)\n}\n\nexport declare namespace fromArray {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Encodes a boolean value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromBoolean(true)\n * // @log: Uint8Array([1])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromBoolean(true, { size: 32 })\n * // @log: Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])\n * ```\n *\n * @param value - Boolean value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromBoolean(value: boolean, options: fromBoolean.Options = {}) {\n  const { size } = options\n  const bytes = new Uint8Array(1)\n  bytes[0] = Number(value)\n  if (typeof size === 'number') {\n    internal.assertSize(bytes, size)\n    return padLeft(bytes, size)\n  }\n  return bytes\n}\n\nexport declare namespace fromBoolean {\n  type Options = {\n    /** Size of the output bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal.assertSize.ErrorType\n    | padLeft.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Hex.Hex} value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromHex('0x48656c6c6f20776f726c6421')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromHex('0x48656c6c6f20776f726c6421', { size: 32 })\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n * ```\n *\n * @param value - {@link ox#Hex.Hex} value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromHex(value: Hex.Hex, options: fromHex.Options = {}): Bytes {\n  const { size } = options\n\n  let hex = value\n  if (size) {\n    internal_hex.assertSize(value, size)\n    hex = Hex.padRight(value, size)\n  }\n\n  let hexString = hex.slice(2) as string\n  if (hexString.length % 2) hexString = `0${hexString}`\n\n  const length = hexString.length / 2\n  const bytes = new Uint8Array(length)\n  for (let index = 0, j = 0; index < length; index++) {\n    const nibbleLeft = internal.charCodeToBase16(hexString.charCodeAt(j++))\n    const nibbleRight = internal.charCodeToBase16(hexString.charCodeAt(j++))\n    if (nibbleLeft === undefined || nibbleRight === undefined) {\n      throw new Errors.BaseError(\n        `Invalid byte sequence (\"${hexString[j - 2]}${hexString[j - 1]}\" in \"${hexString}\").`,\n      )\n    }\n    bytes[index] = (nibbleLeft << 4) | nibbleRight\n  }\n  return bytes\n}\n\nexport declare namespace fromHex {\n  type Options = {\n    /** Size of the output bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal_hex.assertSize.ErrorType\n    | Hex.padRight.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a number value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromNumber(420)\n * // @log: Uint8Array([1, 164])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromNumber(420, { size: 4 })\n * // @log: Uint8Array([0, 0, 1, 164])\n * ```\n *\n * @param value - Number value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromNumber(\n  value: bigint | number,\n  options?: fromNumber.Options | undefined,\n) {\n  const hex = Hex.fromNumber(value, options)\n  return fromHex(hex)\n}\n\nexport declare namespace fromNumber {\n  export type Options = Hex.fromNumber.Options\n\n  export type ErrorType =\n    | Hex.fromNumber.ErrorType\n    | fromHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a string into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromString('Hello world!')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromString('Hello world!', { size: 32 })\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n * ```\n *\n * @param value - String to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromString(\n  value: string,\n  options: fromString.Options = {},\n): Bytes {\n  const { size } = options\n\n  const bytes = encoder.encode(value)\n  if (typeof size === 'number') {\n    internal.assertSize(bytes, size)\n    return padRight(bytes, size)\n  }\n  return bytes\n}\n\nexport declare namespace fromString {\n  type Options = {\n    /** Size of the output bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal.assertSize.ErrorType\n    | padRight.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Checks if two {@link ox#Bytes.Bytes} values are equal.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.isEqual(Bytes.from([1]), Bytes.from([1]))\n * // @log: true\n *\n * Bytes.isEqual(Bytes.from([1]), Bytes.from([2]))\n * // @log: false\n * ```\n *\n * @param bytesA - First {@link ox#Bytes.Bytes} value.\n * @param bytesB - Second {@link ox#Bytes.Bytes} value.\n * @returns `true` if the two values are equal, otherwise `false`.\n */\nexport function isEqual(bytesA: Bytes, bytesB: Bytes) {\n  return equalBytes(bytesA, bytesB)\n}\n\nexport declare namespace isEqual {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Bytes.Bytes} value to the left with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padLeft(Bytes.from([1]), 4)\n * // @log: Uint8Array([0, 0, 0, 1])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value to pad.\n * @param size - Size to pad the {@link ox#Bytes.Bytes} value to.\n * @returns Padded {@link ox#Bytes.Bytes} value.\n */\nexport function padLeft(\n  value: Bytes,\n  size?: number | undefined,\n): padLeft.ReturnType {\n  return internal.pad(value, { dir: 'left', size })\n}\n\nexport declare namespace padLeft {\n  type ReturnType = internal.pad.ReturnType\n  type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Bytes.Bytes} value to the right with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padRight(Bytes.from([1]), 4)\n * // @log: Uint8Array([1, 0, 0, 0])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value to pad.\n * @param size - Size to pad the {@link ox#Bytes.Bytes} value to.\n * @returns Padded {@link ox#Bytes.Bytes} value.\n */\nexport function padRight(\n  value: Bytes,\n  size?: number | undefined,\n): padRight.ReturnType {\n  return internal.pad(value, { dir: 'right', size })\n}\n\nexport declare namespace padRight {\n  type ReturnType = internal.pad.ReturnType\n  type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Generates random {@link ox#Bytes.Bytes} of the specified length.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const bytes = Bytes.random(32)\n * // @log: Uint8Array([... x32])\n * ```\n *\n * @param length - Length of the random {@link ox#Bytes.Bytes} to generate.\n * @returns Random {@link ox#Bytes.Bytes} of the specified length.\n */\nexport function random(length: number): Bytes {\n  return crypto.getRandomValues(new Uint8Array(length))\n}\n\nexport declare namespace random {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Retrieves the size of a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.size(Bytes.from([1, 2, 3, 4]))\n * // @log: 4\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Size of the {@link ox#Bytes.Bytes} value.\n */\nexport function size(value: Bytes): number {\n  return value.length\n}\n\nexport declare namespace size {\n  export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Returns a section of a {@link ox#Bytes.Bytes} value given a start/end bytes offset.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.slice(\n *   Bytes.from([1, 2, 3, 4, 5, 6, 7, 8, 9]),\n *   1,\n *   4,\n * )\n * // @log: Uint8Array([2, 3, 4])\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value.\n * @param start - Start offset.\n * @param end - End offset.\n * @param options - Slice options.\n * @returns Sliced {@link ox#Bytes.Bytes} value.\n */\nexport function slice(\n  value: Bytes,\n  start?: number | undefined,\n  end?: number | undefined,\n  options: slice.Options = {},\n): Bytes {\n  const { strict } = options\n  internal.assertStartOffset(value, start)\n  const value_ = value.slice(start, end)\n  if (strict) internal.assertEndOffset(value_, start, end)\n  return value_\n}\n\nexport declare namespace slice {\n  type Options = {\n    /** Asserts that the sliced value is the same size as the given start/end offsets. */\n    strict?: boolean | undefined\n  }\n\n  export type ErrorType =\n    | internal.assertStartOffset.ErrorType\n    | internal.assertEndOffset.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a bigint.\n *\n * @example\n * ```ts\n * import { Bytes } from 'ox'\n *\n * Bytes.toBigInt(Bytes.from([1, 164]))\n * // @log: 420n\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Decoding options.\n * @returns Decoded bigint.\n */\nexport function toBigInt(bytes: Bytes, options: toBigInt.Options = {}): bigint {\n  const { size } = options\n  if (typeof size !== 'undefined') internal.assertSize(bytes, size)\n  const hex = Hex.fromBytes(bytes, options)\n  return Hex.toBigInt(hex, options)\n}\n\nexport declare namespace toBigInt {\n  type Options = {\n    /** Whether or not the number of a signed representation. */\n    signed?: boolean | undefined\n    /** Size of the bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | Hex.fromBytes.ErrorType\n    | Hex.toBigInt.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a boolean.\n *\n * @example\n * ```ts\n * import { Bytes } from 'ox'\n *\n * Bytes.toBoolean(Bytes.from([1]))\n * // @log: true\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Decoding options.\n * @returns Decoded boolean.\n */\nexport function toBoolean(\n  bytes: Bytes,\n  options: toBoolean.Options = {},\n): boolean {\n  const { size } = options\n  let bytes_ = bytes\n  if (typeof size !== 'undefined') {\n    internal.assertSize(bytes_, size)\n    bytes_ = trimLeft(bytes_)\n  }\n  if (bytes_.length > 1 || bytes_[0]! > 1)\n    throw new InvalidBytesBooleanError(bytes_)\n  return Boolean(bytes_[0])\n}\n\nexport declare namespace toBoolean {\n  type Options = {\n    /** Size of the bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal.assertSize.ErrorType\n    | trimLeft.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toHex(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Options.\n * @returns Decoded {@link ox#Hex.Hex} value.\n */\nexport function toHex(value: Bytes, options: toHex.Options = {}): Hex.Hex {\n  return Hex.fromBytes(value, options)\n}\n\nexport declare namespace toHex {\n  type Options = {\n    /** Size of the bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType = Hex.fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a number.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toNumber(Bytes.from([1, 164]))\n * // @log: 420\n * ```\n */\nexport function toNumber(bytes: Bytes, options: toNumber.Options = {}): number {\n  const { size } = options\n  if (typeof size !== 'undefined') internal.assertSize(bytes, size)\n  const hex = Hex.fromBytes(bytes, options)\n  return Hex.toNumber(hex, options)\n}\n\nexport declare namespace toNumber {\n  type Options = {\n    /** Whether or not the number of a signed representation. */\n    signed?: boolean | undefined\n    /** Size of the bytes. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | Hex.fromBytes.ErrorType\n    | Hex.toNumber.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a string.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.toString(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: 'Hello world'\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Options.\n * @returns Decoded string.\n */\nexport function toString(bytes: Bytes, options: toString.Options = {}): string {\n  const { size } = options\n\n  let bytes_ = bytes\n  if (typeof size !== 'undefined') {\n    internal.assertSize(bytes_, size)\n    bytes_ = trimRight(bytes_)\n  }\n  return decoder.decode(bytes_)\n}\n\nexport declare namespace toString {\n  export type Options = {\n    /** Size of the bytes. */\n    size?: number | undefined\n  }\n\n  export type ErrorType =\n    | internal.assertSize.ErrorType\n    | trimRight.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Trims leading zeros from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.trimLeft(Bytes.from([0, 0, 0, 0, 1, 2, 3]))\n * // @log: Uint8Array([1, 2, 3])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Trimmed {@link ox#Bytes.Bytes} value.\n */\nexport function trimLeft(value: Bytes): Bytes {\n  return internal.trim(value, { dir: 'left' })\n}\n\nexport declare namespace trimLeft {\n  type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Trims trailing zeros from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.trimRight(Bytes.from([1, 2, 3, 0, 0, 0, 0]))\n * // @log: Uint8Array([1, 2, 3])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Trimmed {@link ox#Bytes.Bytes} value.\n */\nexport function trimRight(value: Bytes): Bytes {\n  return internal.trim(value, { dir: 'right' })\n}\n\nexport declare namespace trimRight {\n  export type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if the given value is {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.validate('0x')\n * // @log: false\n *\n * Bytes.validate(Bytes.from([1, 2, 3]))\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns `true` if the value is {@link ox#Bytes.Bytes}, otherwise `false`.\n */\nexport function validate(value: unknown): value is Bytes {\n  try {\n    assert(value)\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Thrown when the bytes value cannot be represented as a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toBoolean(Bytes.from([5]))\n * // @error: Bytes.InvalidBytesBooleanError: Bytes value `[5]` is not a valid boolean.\n * // @error: The bytes array must contain a single byte of either a `0` or `1` value.\n * ```\n */\nexport class InvalidBytesBooleanError extends Errors.BaseError {\n  override readonly name = 'Bytes.InvalidBytesBooleanError'\n\n  constructor(bytes: Bytes) {\n    super(`Bytes value \\`${bytes}\\` is not a valid boolean.`, {\n      metaMessages: [\n        'The bytes array must contain a single byte of either a `0` or `1` value.',\n      ],\n    })\n  }\n}\n\n/**\n * Thrown when a value cannot be converted to bytes.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Bytes } from 'ox'\n *\n * Bytes.from('foo')\n * // @error: Bytes.InvalidBytesTypeError: Value `foo` of type `string` is an invalid Bytes value.\n * ```\n */\nexport class InvalidBytesTypeError extends Errors.BaseError {\n  override readonly name = 'Bytes.InvalidBytesTypeError'\n\n  constructor(value: unknown) {\n    super(\n      `Value \\`${typeof value === 'object' ? Json.stringify(value) : value}\\` of type \\`${typeof value}\\` is an invalid Bytes value.`,\n      {\n        metaMessages: ['Bytes values must be of type `Bytes`.'],\n      },\n    )\n  }\n}\n\n/**\n * Thrown when a size exceeds the maximum allowed size.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.fromString('Hello World!', { size: 8 })\n * // @error: Bytes.SizeOverflowError: Size cannot exceed `8` bytes. Given size: `12` bytes.\n * ```\n */\nexport class SizeOverflowError extends Errors.BaseError {\n  override readonly name = 'Bytes.SizeOverflowError'\n\n  constructor({ givenSize, maxSize }: { givenSize: number; maxSize: number }) {\n    super(\n      `Size cannot exceed \\`${maxSize}\\` bytes. Given size: \\`${givenSize}\\` bytes.`,\n    )\n  }\n}\n\n/**\n * Thrown when a slice offset is out-of-bounds.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.slice(Bytes.from([1, 2, 3]), 4)\n * // @error: Bytes.SliceOffsetOutOfBoundsError: Slice starting at offset `4` is out-of-bounds (size: `3`).\n * ```\n */\nexport class SliceOffsetOutOfBoundsError extends Errors.BaseError {\n  override readonly name = 'Bytes.SliceOffsetOutOfBoundsError'\n\n  constructor({\n    offset,\n    position,\n    size,\n  }: { offset: number; position: 'start' | 'end'; size: number }) {\n    super(\n      `Slice ${\n        position === 'start' ? 'starting' : 'ending'\n      } at offset \\`${offset}\\` is out-of-bounds (size: \\`${size}\\`).`,\n    )\n  }\n}\n\n/**\n * Thrown when a the padding size exceeds the maximum allowed size.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padLeft(Bytes.fromString('Hello World!'), 8)\n * // @error: [Bytes.SizeExceedsPaddingSizeError: Bytes size (`12`) exceeds padding size (`8`).\n * ```\n */\nexport class SizeExceedsPaddingSizeError extends Errors.BaseError {\n  override readonly name = 'Bytes.SizeExceedsPaddingSizeError'\n\n  constructor({\n    size,\n    targetSize,\n    type,\n  }: {\n    size: number\n    targetSize: number\n    type: 'Hex' | 'Bytes'\n  }) {\n    super(\n      `${type.charAt(0).toUpperCase()}${type\n        .slice(1)\n        .toLowerCase()} size (\\`${size}\\`) exceeds padding size (\\`${targetSize}\\`).`,\n    )\n  }\n}\n", "import { equalBytes } from '@noble/curves/abstract/utils'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as internal_bytes from './internal/bytes.js'\nimport * as internal from './internal/hex.js'\nimport * as Json from './Json.js'\n\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\nconst hexes = /*#__PURE__*/ Array.from({ length: 256 }, (_v, i) =>\n  i.toString(16).padStart(2, '0'),\n)\n\n/** Root type for a Hex string. */\nexport type Hex = `0x${string}`\n\n/**\n * Asserts if the given value is {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert('abc')\n * // @error: InvalidHexValueTypeError:\n * // @error: Value `\"abc\"` of type `string` is an invalid hex type.\n * // @error: Hex types must be represented as `\"0x\\${string}\"`.\n * ```\n *\n * @param value - The value to assert.\n * @param options - Options.\n */\nexport function assert(\n  value: unknown,\n  options: assert.Options = {},\n): asserts value is Hex {\n  const { strict = false } = options\n  if (!value) throw new InvalidHexTypeError(value)\n  if (typeof value !== 'string') throw new InvalidHexTypeError(value)\n  if (strict) {\n    if (!/^0x[0-9a-fA-F]*$/.test(value)) throw new InvalidHexValueError(value)\n  }\n  if (!value.startsWith('0x')) throw new InvalidHexValueError(value)\n}\n\nexport declare namespace assert {\n  type Options = {\n    /** Checks if the {@link ox#Hex.Hex} value contains invalid hexadecimal characters. @default false */\n    strict?: boolean | undefined\n  }\n\n  type ErrorType =\n    | InvalidHexTypeError\n    | InvalidHexValueError\n    | Errors.GlobalErrorType\n}\n\n/**\n * Concatenates two or more {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.concat('0x123', '0x456')\n * // @log: '0x123456'\n * ```\n *\n * @param values - The {@link ox#Hex.Hex} values to concatenate.\n * @returns The concatenated {@link ox#Hex.Hex} value.\n */\nexport function concat(...values: readonly Hex[]): Hex {\n  return `0x${(values as Hex[]).reduce((acc, x) => acc + x.replace('0x', ''), '')}`\n}\n\nexport declare namespace concat {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a {@link ox#Hex.Hex} value from a hex string or {@link ox#Bytes.Bytes} value.\n *\n * :::tip\n *\n * To instantiate from a **Boolean**, **String**, or **Number**, use one of the following:\n *\n * - `Hex.fromBoolean`\n *\n * - `Hex.fromString`\n *\n * - `Hex.fromNumber`\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.from('0x48656c6c6f20576f726c6421')\n * // @log: '0x48656c6c6f20576f726c6421'\n *\n * Hex.from(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value to encode.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function from(value: Hex | Bytes.Bytes | readonly number[]): Hex {\n  if (value instanceof Uint8Array) return fromBytes(value)\n  if (Array.isArray(value)) return fromBytes(new Uint8Array(value))\n  return value as never\n}\n\nexport declare namespace from {\n  type Options = {\n    /** The size (in bytes) of the output hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType = fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a boolean into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromBoolean(true)\n * // @log: '0x1'\n *\n * Hex.fromBoolean(false)\n * // @log: '0x0'\n *\n * Hex.fromBoolean(true, { size: 32 })\n * // @log: '0x0000000000000000000000000000000000000000000000000000000000000001'\n * ```\n *\n * @param value - The boolean value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromBoolean(\n  value: boolean,\n  options: fromBoolean.Options = {},\n): Hex {\n  const hex: Hex = `0x${Number(value)}`\n  if (typeof options.size === 'number') {\n    internal.assertSize(hex, options.size)\n    return padLeft(hex, options.size)\n  }\n  return hex\n}\n\nexport declare namespace fromBoolean {\n  type Options = {\n    /** The size (in bytes) of the output hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal.assertSize.ErrorType\n    | padLeft.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.fromBytes(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromBytes(\n  value: Bytes.Bytes,\n  options: fromBytes.Options = {},\n): Hex {\n  let string = ''\n  for (let i = 0; i < value.length; i++) string += hexes[value[i]!]\n  const hex = `0x${string}` as const\n\n  if (typeof options.size === 'number') {\n    internal.assertSize(hex, options.size)\n    return padRight(hex, options.size)\n  }\n  return hex\n}\n\nexport declare namespace fromBytes {\n  type Options = {\n    /** The size (in bytes) of the output hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal.assertSize.ErrorType\n    | padRight.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a number or bigint into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromNumber(420)\n * // @log: '0x1a4'\n *\n * Hex.fromNumber(420, { size: 32 })\n * // @log: '0x00000000000000000000000000000000000000000000000000000000000001a4'\n * ```\n *\n * @param value - The number or bigint value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromNumber(\n  value: number | bigint,\n  options: fromNumber.Options = {},\n): Hex {\n  const { signed, size } = options\n\n  const value_ = BigInt(value)\n\n  let maxValue: bigint | number | undefined\n  if (size) {\n    if (signed) maxValue = (1n << (BigInt(size) * 8n - 1n)) - 1n\n    else maxValue = 2n ** (BigInt(size) * 8n) - 1n\n  } else if (typeof value === 'number') {\n    maxValue = BigInt(Number.MAX_SAFE_INTEGER)\n  }\n\n  const minValue = typeof maxValue === 'bigint' && signed ? -maxValue - 1n : 0\n\n  if ((maxValue && value_ > maxValue) || value_ < minValue) {\n    const suffix = typeof value === 'bigint' ? 'n' : ''\n    throw new IntegerOutOfRangeError({\n      max: maxValue ? `${maxValue}${suffix}` : undefined,\n      min: `${minValue}${suffix}`,\n      signed,\n      size,\n      value: `${value}${suffix}`,\n    })\n  }\n\n  const stringValue = (\n    signed && value_ < 0 ? BigInt.asUintN(size * 8, BigInt(value_)) : value_\n  ).toString(16)\n\n  const hex = `0x${stringValue}` as Hex\n  if (size) return padLeft(hex, size) as Hex\n  return hex\n}\n\nexport declare namespace fromNumber {\n  type Options =\n    | {\n        /** Whether or not the number of a signed representation. */\n        signed?: boolean | undefined\n        /** The size (in bytes) of the output hex value. */\n        size: number\n      }\n    | {\n        signed?: undefined\n        /** The size (in bytes) of the output hex value. */\n        size?: number | undefined\n      }\n\n  type ErrorType =\n    | IntegerOutOfRangeError\n    | padLeft.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a string into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n * Hex.fromString('Hello World!')\n * // '0x48656c6c6f20576f726c6421'\n *\n * Hex.fromString('Hello World!', { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n * ```\n *\n * @param value - The string value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromString(\n  value: string,\n  options: fromString.Options = {},\n): Hex {\n  return fromBytes(encoder.encode(value), options)\n}\n\nexport declare namespace fromString {\n  type Options = {\n    /** The size (in bytes) of the output hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType = fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if two {@link ox#Hex.Hex} values are equal.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.isEqual('0xdeadbeef', '0xdeadbeef')\n * // @log: true\n *\n * Hex.isEqual('0xda', '0xba')\n * // @log: false\n * ```\n *\n * @param hexA - The first {@link ox#Hex.Hex} value.\n * @param hexB - The second {@link ox#Hex.Hex} value.\n * @returns `true` if the two {@link ox#Hex.Hex} values are equal, `false` otherwise.\n */\nexport function isEqual(hexA: Hex, hexB: Hex) {\n  return equalBytes(Bytes.fromHex(hexA), Bytes.fromHex(hexB))\n}\n\nexport declare namespace isEqual {\n  type ErrorType = Bytes.fromHex.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Hex.Hex} value to the left with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.padLeft('0x1234', 4)\n * // @log: '0x00001234'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to pad.\n * @param size - The size (in bytes) of the output hex value.\n * @returns The padded {@link ox#Hex.Hex} value.\n */\nexport function padLeft(\n  value: Hex,\n  size?: number | undefined,\n): padLeft.ReturnType {\n  return internal.pad(value, { dir: 'left', size })\n}\n\nexport declare namespace padLeft {\n  type ReturnType = Hex\n  type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Hex.Hex} value to the right with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts\n * import { Hex } from 'ox'\n *\n * Hex.padRight('0x1234', 4)\n * // @log: '0x12340000'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to pad.\n * @param size - The size (in bytes) of the output hex value.\n * @returns The padded {@link ox#Hex.Hex} value.\n */\nexport function padRight(\n  value: Hex,\n  size?: number | undefined,\n): padRight.ReturnType {\n  return internal.pad(value, { dir: 'right', size })\n}\n\nexport declare namespace padRight {\n  type ReturnType = Hex\n  type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Generates a random {@link ox#Hex.Hex} value of the specified length.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * const hex = Hex.random(32)\n * // @log: '0x...'\n * ```\n *\n * @returns Random {@link ox#Hex.Hex} value.\n */\nexport function random(length: number): Hex {\n  return fromBytes(Bytes.random(length))\n}\n\nexport declare namespace random {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Returns a section of a {@link ox#Bytes.Bytes} value given a start/end bytes offset.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.slice('0x0123456789', 1, 4)\n * // @log: '0x234567'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to slice.\n * @param start - The start offset (in bytes).\n * @param end - The end offset (in bytes).\n * @param options - Options.\n * @returns The sliced {@link ox#Hex.Hex} value.\n */\nexport function slice(\n  value: Hex,\n  start?: number | undefined,\n  end?: number | undefined,\n  options: slice.Options = {},\n): Hex {\n  const { strict } = options\n  internal.assertStartOffset(value, start)\n  const value_ = `0x${value\n    .replace('0x', '')\n    .slice((start ?? 0) * 2, (end ?? value.length) * 2)}` as const\n  if (strict) internal.assertEndOffset(value_, start, end)\n  return value_\n}\n\nexport declare namespace slice {\n  type Options = {\n    /** Asserts that the sliced value is the same size as the given start/end offsets. */\n    strict?: boolean | undefined\n  }\n\n  type ErrorType =\n    | internal.assertStartOffset.ErrorType\n    | internal.assertEndOffset.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Retrieves the size of a {@link ox#Hex.Hex} value (in bytes).\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.size('0xdeadbeef')\n * // @log: 4\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to get the size of.\n * @returns The size of the {@link ox#Hex.Hex} value (in bytes).\n */\nexport function size(value: Hex): number {\n  return Math.ceil((value.length - 2) / 2)\n}\n\nexport declare namespace size {\n  export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Trims leading zeros from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.trimLeft('0x00000000deadbeef')\n * // @log: '0xdeadbeef'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to trim.\n * @returns The trimmed {@link ox#Hex.Hex} value.\n */\nexport function trimLeft(value: Hex): trimLeft.ReturnType {\n  return internal.trim(value, { dir: 'left' })\n}\n\nexport declare namespace trimLeft {\n  type ReturnType = Hex\n\n  type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Trims trailing zeros from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.trimRight('0xdeadbeef00000000')\n * // @log: '0xdeadbeef'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to trim.\n * @returns The trimmed {@link ox#Hex.Hex} value.\n */\nexport function trimRight(value: Hex): trimRight.ReturnType {\n  return internal.trim(value, { dir: 'right' })\n}\n\nexport declare namespace trimRight {\n  type ReturnType = Hex\n\n  type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a BigInt.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBigInt('0x1a4')\n * // @log: 420n\n *\n * Hex.toBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // @log: 420n\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded BigInt.\n */\nexport function toBigInt(hex: Hex, options: toBigInt.Options = {}): bigint {\n  const { signed } = options\n\n  if (options.size) internal.assertSize(hex, options.size)\n\n  const value = BigInt(hex)\n  if (!signed) return value\n\n  const size = (hex.length - 2) / 2\n\n  const max_unsigned = (1n << (BigInt(size) * 8n)) - 1n\n  const max_signed = max_unsigned >> 1n\n\n  if (value <= max_signed) return value\n  return value - max_unsigned - 1n\n}\n\nexport declare namespace toBigInt {\n  type Options = {\n    /** Whether or not the number of a signed representation. */\n    signed?: boolean | undefined\n    /** Size (in bytes) of the hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType = internal.assertSize.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBoolean('0x01')\n * // @log: true\n *\n * Hex.toBoolean('0x0000000000000000000000000000000000000000000000000000000000000001', { size: 32 })\n * // @log: true\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded boolean.\n */\nexport function toBoolean(hex: Hex, options: toBoolean.Options = {}): boolean {\n  if (options.size) internal.assertSize(hex, options.size)\n  const hex_ = trimLeft(hex)\n  if (hex_ === '0x') return false\n  if (hex_ === '0x1') return true\n  throw new InvalidHexBooleanError(hex)\n}\n\nexport declare namespace toBoolean {\n  type Options = {\n    /** Size (in bytes) of the hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal.assertSize.ErrorType\n    | trimLeft.ErrorType\n    | InvalidHexBooleanError\n    | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * const data = Hex.toBytes('0x48656c6c6f20776f726c6421')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded {@link ox#Bytes.Bytes}.\n */\nexport function toBytes(hex: Hex, options: toBytes.Options = {}): Bytes.Bytes {\n  return Bytes.fromHex(hex, options)\n}\n\nexport declare namespace toBytes {\n  type Options = {\n    /** Size (in bytes) of the hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType = Bytes.fromHex.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a number.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toNumber('0x1a4')\n * // @log: 420\n *\n * Hex.toNumber('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // @log: 420\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded number.\n */\nexport function toNumber(hex: Hex, options: toNumber.Options = {}): number {\n  const { signed, size } = options\n  if (!signed && !size) return Number(hex)\n  return Number(toBigInt(hex, options))\n}\n\nexport declare namespace toNumber {\n  type Options = toBigInt.Options\n\n  type ErrorType = toBigInt.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a string.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toString('0x48656c6c6f20576f726c6421')\n * // @log: 'Hello world!'\n *\n * Hex.toString('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n *  size: 32,\n * })\n * // @log: 'Hello world'\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded string.\n */\nexport function toString(hex: Hex, options: toString.Options = {}): string {\n  const { size } = options\n\n  let bytes = Bytes.fromHex(hex)\n  if (size) {\n    internal_bytes.assertSize(bytes, size)\n    bytes = Bytes.trimRight(bytes)\n  }\n  return new TextDecoder().decode(bytes)\n}\n\nexport declare namespace toString {\n  type Options = {\n    /** Size (in bytes) of the hex value. */\n    size?: number | undefined\n  }\n\n  type ErrorType =\n    | internal_bytes.assertSize.ErrorType\n    | Bytes.fromHex.ErrorType\n    | Bytes.trimRight.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Checks if the given value is {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.validate('0xdeadbeef')\n * // @log: true\n *\n * Hex.validate(Bytes.from([1, 2, 3]))\n * // @log: false\n * ```\n *\n * @param value - The value to check.\n * @param options - Options.\n * @returns `true` if the value is a {@link ox#Hex.Hex}, `false` otherwise.\n */\nexport function validate(\n  value: unknown,\n  options: validate.Options = {},\n): value is Hex {\n  const { strict = false } = options\n  try {\n    assert(value, { strict })\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  type Options = {\n    /** Checks if the {@link ox#Hex.Hex} value contains invalid hexadecimal characters. @default false */\n    strict?: boolean | undefined\n  }\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Thrown when the provided integer is out of range, and cannot be represented as a hex value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromNumber(420182738912731283712937129)\n * // @error: Hex.IntegerOutOfRangeError: Number \\`4.2018273891273126e+26\\` is not in safe unsigned integer range (`0` to `9007199254740991`)\n * ```\n */\nexport class IntegerOutOfRangeError extends Errors.BaseError {\n  override readonly name = 'Hex.IntegerOutOfRangeError'\n\n  constructor({\n    max,\n    min,\n    signed,\n    size,\n    value,\n  }: {\n    max?: string | undefined\n    min: string\n    signed?: boolean | undefined\n    size?: number | undefined\n    value: string\n  }) {\n    super(\n      `Number \\`${value}\\` is not in safe${\n        size ? ` ${size * 8}-bit` : ''\n      }${signed ? ' signed' : ' unsigned'} integer range ${max ? `(\\`${min}\\` to \\`${max}\\`)` : `(above \\`${min}\\`)`}`,\n    )\n  }\n}\n\n/**\n * Thrown when the provided hex value cannot be represented as a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBoolean('0xa')\n * // @error: Hex.InvalidHexBooleanError: Hex value `\"0xa\"` is not a valid boolean.\n * // @error: The hex value must be `\"0x0\"` (false) or `\"0x1\"` (true).\n * ```\n */\nexport class InvalidHexBooleanError extends Errors.BaseError {\n  override readonly name = 'Hex.InvalidHexBooleanError'\n\n  constructor(hex: Hex) {\n    super(`Hex value \\`\"${hex}\"\\` is not a valid boolean.`, {\n      metaMessages: [\n        'The hex value must be `\"0x0\"` (false) or `\"0x1\"` (true).',\n      ],\n    })\n  }\n}\n\n/**\n * Thrown when the provided value is not a valid hex type.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert(1)\n * // @error: Hex.InvalidHexTypeError: Value `1` of type `number` is an invalid hex type.\n * ```\n */\nexport class InvalidHexTypeError extends Errors.BaseError {\n  override readonly name = 'Hex.InvalidHexTypeError'\n\n  constructor(value: unknown) {\n    super(\n      `Value \\`${typeof value === 'object' ? Json.stringify(value) : value}\\` of type \\`${typeof value}\\` is an invalid hex type.`,\n      {\n        metaMessages: ['Hex types must be represented as `\"0x${string}\"`.'],\n      },\n    )\n  }\n}\n\n/**\n * Thrown when the provided hex value is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert('0x0123456789abcdefg')\n * // @error: Hex.InvalidHexValueError: Value `0x0123456789abcdefg` is an invalid hex value.\n * // @error: Hex values must start with `\"0x\"` and contain only hexadecimal characters (0-9, a-f, A-F).\n * ```\n */\nexport class InvalidHexValueError extends Errors.BaseError {\n  override readonly name = 'Hex.InvalidHexValueError'\n\n  constructor(value: unknown) {\n    super(`Value \\`${value}\\` is an invalid hex value.`, {\n      metaMessages: [\n        'Hex values must start with `\"0x\"` and contain only hexadecimal characters (0-9, a-f, A-F).',\n      ],\n    })\n  }\n}\n\n/**\n * Thrown when the provided hex value is an odd length.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.fromHex('0xabcde')\n * // @error: Hex.InvalidLengthError: Hex value `\"0xabcde\"` is an odd length (5 nibbles).\n * ```\n */\nexport class InvalidLengthError extends Errors.BaseError {\n  override readonly name = 'Hex.InvalidLengthError'\n\n  constructor(value: Hex) {\n    super(\n      `Hex value \\`\"${value}\"\\` is an odd length (${value.length - 2} nibbles).`,\n      {\n        metaMessages: ['It must be an even length.'],\n      },\n    )\n  }\n}\n\n/**\n * Thrown when the size of the value exceeds the expected max size.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromString('Hello World!', { size: 8 })\n * // @error: Hex.SizeOverflowError: Size cannot exceed `8` bytes. Given size: `12` bytes.\n * ```\n */\nexport class SizeOverflowError extends Errors.BaseError {\n  override readonly name = 'Hex.SizeOverflowError'\n\n  constructor({ givenSize, maxSize }: { givenSize: number; maxSize: number }) {\n    super(\n      `Size cannot exceed \\`${maxSize}\\` bytes. Given size: \\`${givenSize}\\` bytes.`,\n    )\n  }\n}\n\n/**\n * Thrown when the slice offset exceeds the bounds of the value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.slice('0x0123456789', 6)\n * // @error: Hex.SliceOffsetOutOfBoundsError: Slice starting at offset `6` is out-of-bounds (size: `5`).\n * ```\n */\nexport class SliceOffsetOutOfBoundsError extends Errors.BaseError {\n  override readonly name = 'Hex.SliceOffsetOutOfBoundsError'\n\n  constructor({\n    offset,\n    position,\n    size,\n  }: { offset: number; position: 'start' | 'end'; size: number }) {\n    super(\n      `Slice ${\n        position === 'start' ? 'starting' : 'ending'\n      } at offset \\`${offset}\\` is out-of-bounds (size: \\`${size}\\`).`,\n    )\n  }\n}\n\n/**\n * Thrown when the size of the value exceeds the pad size.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.padLeft('0x1a4e12a45a21323123aaa87a897a897a898a6567a578a867a98778a667a85a875a87a6a787a65a675a6a9', 32)\n * // @error: Hex.SizeExceedsPaddingSizeError: Hex size (`43`) exceeds padding size (`32`).\n * ```\n */\nexport class SizeExceedsPaddingSizeError extends Errors.BaseError {\n  override readonly name = 'Hex.SizeExceedsPaddingSizeError'\n\n  constructor({\n    size,\n    targetSize,\n    type,\n  }: {\n    size: number\n    targetSize: number\n    type: 'Hex' | 'Bytes'\n  }) {\n    super(\n      `${type.charAt(0).toUpperCase()}${type\n        .slice(1)\n        .toLowerCase()} size (\\`${size}\\`) exceeds padding size (\\`${targetSize}\\`).`,\n    )\n  }\n}\n", "import type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\n\n/** A Withdrawal as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/withdrawal.yaml). */\nexport type Withdrawal<bigintType = bigint, numberType = number> = {\n  address: Hex.Hex\n  amount: bigintType\n  index: numberType\n  validatorIndex: numberType\n}\n\n/** An RPC Withdrawal as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/withdrawal.yaml). */\nexport type Rpc = Withdrawal<Hex.Hex, Hex.Hex>\n\n/**\n * Converts a {@link ox#Withdrawal.Rpc} to an {@link ox#Withdrawal.Withdrawal}.\n *\n * @example\n * ```ts twoslash\n * import { Withdrawal } from 'ox'\n *\n * const withdrawal = Withdrawal.fromRpc({\n *   address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n *   amount: '0x620323',\n *   index: '0x0',\n *   validatorIndex: '0x1',\n * })\n * // @log: {\n * // @log:   address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n * // @log:   amount: 6423331n,\n * // @log:   index: 0,\n * // @log:   validatorIndex: 1\n * // @log: }\n * ```\n *\n * @param withdrawal - The RPC withdrawal to convert.\n * @returns An instantiated {@link ox#Withdrawal.Withdrawal}.\n */\nexport function fromRpc(withdrawal: Rpc): Withdrawal {\n  return {\n    ...withdrawal,\n    amount: BigInt(withdrawal.amount),\n    index: Number(withdrawal.index),\n    validatorIndex: Number(withdrawal.validatorIndex),\n  }\n}\n\nexport declare namespace fromRpc {\n  export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Withdrawal.Withdrawal} to an {@link ox#Withdrawal.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Withdrawal } from 'ox'\n *\n * const withdrawal = Withdrawal.toRpc({\n *   address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n *   amount: 6423331n,\n *   index: 0,\n *   validatorIndex: 1,\n * })\n * // @log: {\n * // @log:   address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n * // @log:   amount: '0x620323',\n * // @log:   index: '0x0',\n * // @log:   validatorIndex: '0x1',\n * // @log: }\n * ```\n *\n * @param withdrawal - The Withdrawal to convert.\n * @returns An RPC Withdrawal.\n */\nexport function toRpc(withdrawal: Withdrawal): Rpc {\n  return {\n    address: withdrawal.address,\n    amount: Hex.fromNumber(withdrawal.amount),\n    index: Hex.fromNumber(withdrawal.index),\n    validatorIndex: Hex.fromNumber(withdrawal.validatorIndex),\n  }\n}\n\nexport declare namespace toRpc {\n  export type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Address from './Address.js'\nimport * as Hex from './Hex.js'\nimport * as Withdrawal from './Withdrawal.js'\n\n/**\n * Block overrides.\n */\nexport type BlockOverrides<bigintType = bigint, numberType = number> = {\n  /** Base fee per gas. */\n  baseFeePerGas?: bigintType | undefined\n  /** Blob base fee. */\n  blobBaseFee?: bigintType | undefined\n  /** Fee recipient (also known as coinbase). */\n  feeRecipient?: Address.Address | undefined\n  /** Gas limit. */\n  gasLimit?: bigintType | undefined\n  /** Block number. */\n  number?: bigintType | undefined\n  /** The previous value of randomness beacon. */\n  prevRandao?: bigintType | undefined\n  /** Block timestamp. */\n  time?: bigintType | undefined\n  /** Withdrawals made by validators. */\n  withdrawals?: Withdrawal.Withdrawal<bigintType, numberType>[] | undefined\n}\n\n/**\n * RPC block overrides.\n */\nexport type Rpc = BlockOverrides<Hex.Hex, Hex.Hex>\n\n/**\n * Converts an {@link ox#BlockOverrides.Rpc} to an {@link ox#BlockOverrides.BlockOverrides}.\n *\n * @example\n * ```ts twoslash\n * import { BlockOverrides } from 'ox'\n *\n * const blockOverrides = BlockOverrides.fromRpc({\n *   baseFeePerGas: '0x1',\n *   blobBaseFee: '0x2',\n *   feeRecipient: '0x0000000000000000000000000000000000000000',\n *   gasLimit: '0x4',\n *   number: '0x5',\n *   prevRandao: '0x6',\n *   time: '0x1234567890',\n *   withdrawals: [\n *     {\n *       address: '0x0000000000000000000000000000000000000000',\n *       amount: '0x1',\n *       index: '0x0',\n *       validatorIndex: '0x1',\n *     },\n *   ],\n * })\n * ```\n *\n * @param rpcBlockOverrides - The RPC block overrides to convert.\n * @returns An instantiated {@link ox#BlockOverrides.BlockOverrides}.\n */\nexport function fromRpc(rpcBlockOverrides: Rpc): BlockOverrides {\n  return {\n    ...(rpcBlockOverrides.baseFeePerGas && {\n      baseFeePerGas: BigInt(rpcBlockOverrides.baseFeePerGas),\n    }),\n    ...(rpcBlockOverrides.blobBaseFee && {\n      blobBaseFee: BigInt(rpcBlockOverrides.blobBaseFee),\n    }),\n    ...(rpcBlockOverrides.feeRecipient && {\n      feeRecipient: rpcBlockOverrides.feeRecipient,\n    }),\n    ...(rpcBlockOverrides.gasLimit && {\n      gasLimit: BigInt(rpcBlockOverrides.gasLimit),\n    }),\n    ...(rpcBlockOverrides.number && {\n      number: BigInt(rpcBlockOverrides.number),\n    }),\n    ...(rpcBlockOverrides.prevRandao && {\n      prevRandao: BigInt(rpcBlockOverrides.prevRandao),\n    }),\n    ...(rpcBlockOverrides.time && {\n      time: BigInt(rpcBlockOverrides.time),\n    }),\n    ...(rpcBlockOverrides.withdrawals && {\n      withdrawals: rpcBlockOverrides.withdrawals.map(Withdrawal.fromRpc),\n    }),\n  }\n}\n\n/**\n * Converts an {@link ox#BlockOverrides.BlockOverrides} to an {@link ox#BlockOverrides.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { BlockOverrides } from 'ox'\n *\n * const blockOverrides = BlockOverrides.toRpc({\n *   baseFeePerGas: 1n,\n *   blobBaseFee: 2n,\n *   feeRecipient: '0x0000000000000000000000000000000000000000',\n *   gasLimit: 4n,\n *   number: 5n,\n *   prevRandao: 6n,\n *   time: 78187493520n,\n *   withdrawals: [\n *     {\n *       address: '0x0000000000000000000000000000000000000000',\n *       amount: 1n,\n *       index: 0,\n *       validatorIndex: 1,\n *     },\n *   ],\n * })\n * ```\n *\n * @param blockOverrides - The block overrides to convert.\n * @returns An instantiated {@link ox#BlockOverrides.Rpc}.\n */\nexport function toRpc(blockOverrides: BlockOverrides): Rpc {\n  return {\n    ...(typeof blockOverrides.baseFeePerGas === 'bigint' && {\n      baseFeePerGas: Hex.fromNumber(blockOverrides.baseFeePerGas),\n    }),\n    ...(typeof blockOverrides.blobBaseFee === 'bigint' && {\n      blobBaseFee: Hex.fromNumber(blockOverrides.blobBaseFee),\n    }),\n    ...(typeof blockOverrides.feeRecipient === 'string' && {\n      feeRecipient: blockOverrides.feeRecipient,\n    }),\n    ...(typeof blockOverrides.gasLimit === 'bigint' && {\n      gasLimit: Hex.fromNumber(blockOverrides.gasLimit),\n    }),\n    ...(typeof blockOverrides.number === 'bigint' && {\n      number: Hex.fromNumber(blockOverrides.number),\n    }),\n    ...(typeof blockOverrides.prevRandao === 'bigint' && {\n      prevRandao: Hex.fromNumber(blockOverrides.prevRandao),\n    }),\n    ...(typeof blockOverrides.time === 'bigint' && {\n      time: Hex.fromNumber(blockOverrides.time),\n    }),\n    ...(blockOverrides.withdrawals && {\n      withdrawals: blockOverrides.withdrawals.map(Withdrawal.toRpc),\n    }),\n  }\n}\n", "/* [Multicall3](https://github.com/mds1/multicall) */\nexport const multicall3Abi = [\n  {\n    inputs: [\n      {\n        components: [\n          {\n            name: 'target',\n            type: 'address',\n          },\n          {\n            name: 'allowFailure',\n            type: 'bool',\n          },\n          {\n            name: 'callData',\n            type: 'bytes',\n          },\n        ],\n        name: 'calls',\n        type: 'tuple[]',\n      },\n    ],\n    name: 'aggregate3',\n    outputs: [\n      {\n        components: [\n          {\n            name: 'success',\n            type: 'bool',\n          },\n          {\n            name: 'returnData',\n            type: 'bytes',\n          },\n        ],\n        name: 'returnData',\n        type: 'tuple[]',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'addr',\n        type: 'address',\n      },\n    ],\n    name: 'getEthBalance',\n    outputs: [\n      {\n        name: 'balance',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'getCurrentBlockTimestamp',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: 'timestamp',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n] as const\n\nexport const batchGatewayAbi = [\n  {\n    name: 'query',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      {\n        type: 'tuple[]',\n        name: 'queries',\n        components: [\n          {\n            type: 'address',\n            name: 'sender',\n          },\n          {\n            type: 'string[]',\n            name: 'urls',\n          },\n          {\n            type: 'bytes',\n            name: 'data',\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool[]',\n        name: 'failures',\n      },\n      {\n        type: 'bytes[]',\n        name: 'responses',\n      },\n    ],\n  },\n  {\n    name: 'HttpError',\n    type: 'error',\n    inputs: [\n      {\n        type: 'uint16',\n        name: 'status',\n      },\n      {\n        type: 'string',\n        name: 'message',\n      },\n    ],\n  },\n] as const\n\nconst universalResolverErrors = [\n  {\n    inputs: [\n      {\n        name: 'dns',\n        type: 'bytes',\n      },\n    ],\n    name: 'DNSDecodingFailed',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        name: 'ens',\n        type: 'string',\n      },\n    ],\n    name: 'DNSEncodingFailed',\n    type: 'error',\n  },\n  {\n    inputs: [],\n    name: 'EmptyAddress',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        name: 'status',\n        type: 'uint16',\n      },\n      {\n        name: 'message',\n        type: 'string',\n      },\n    ],\n    name: 'HttpError',\n    type: 'error',\n  },\n  {\n    inputs: [],\n    name: 'InvalidBatchGatewayResponse',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        name: 'errorData',\n        type: 'bytes',\n      },\n    ],\n    name: 'ResolverError',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        name: 'name',\n        type: 'bytes',\n      },\n      {\n        name: 'resolver',\n        type: 'address',\n      },\n    ],\n    name: 'ResolverNotContract',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        name: 'name',\n        type: 'bytes',\n      },\n    ],\n    name: 'ResolverNotFound',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        name: 'primary',\n        type: 'string',\n      },\n      {\n        name: 'primaryAddress',\n        type: 'bytes',\n      },\n    ],\n    name: 'ReverseAddressMismatch',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes4',\n        name: 'selector',\n        type: 'bytes4',\n      },\n    ],\n    name: 'UnsupportedResolverProfile',\n    type: 'error',\n  },\n] as const\n\nexport const universalResolverResolveAbi = [\n  ...universalResolverErrors,\n  {\n    name: 'resolveWithGateways',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      { name: 'name', type: 'bytes' },\n      { name: 'data', type: 'bytes' },\n      { name: 'gateways', type: 'string[]' },\n    ],\n    outputs: [\n      { name: '', type: 'bytes' },\n      { name: 'address', type: 'address' },\n    ],\n  },\n] as const\n\nexport const universalResolverReverseAbi = [\n  ...universalResolverErrors,\n  {\n    name: 'reverseWithGateways',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      { type: 'bytes', name: 'reverseName' },\n      { type: 'uint256', name: 'coinType' },\n      { type: 'string[]', name: 'gateways' },\n    ],\n    outputs: [\n      { type: 'string', name: 'resolvedName' },\n      { type: 'address', name: 'resolver' },\n      { type: 'address', name: 'reverseResolver' },\n    ],\n  },\n] as const\n\nexport const textResolverAbi = [\n  {\n    name: 'text',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      { name: 'name', type: 'bytes32' },\n      { name: 'key', type: 'string' },\n    ],\n    outputs: [{ name: '', type: 'string' }],\n  },\n] as const\n\nexport const addressResolverAbi = [\n  {\n    name: 'addr',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [{ name: 'name', type: 'bytes32' }],\n    outputs: [{ name: '', type: 'address' }],\n  },\n  {\n    name: 'addr',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      { name: 'name', type: 'bytes32' },\n      { name: 'coinType', type: 'uint256' },\n    ],\n    outputs: [{ name: '', type: 'bytes' }],\n  },\n] as const\n\n// ERC-1271\n// isValidSignature(bytes32 hash, bytes signature) \u2192 bytes4 magicValue\n/** @internal */\nexport const erc1271Abi = [\n  {\n    name: 'isValidSignature',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      { name: 'hash', type: 'bytes32' },\n      { name: 'signature', type: 'bytes' },\n    ],\n    outputs: [{ name: '', type: 'bytes4' }],\n  },\n] as const\n\n// ERC-6492 - universal deployless signature validator contract\n// constructor(address _signer, bytes32 _hash, bytes _signature) \u2192 bytes4 returnValue\n// returnValue is either 0x1 (valid) or 0x0 (invalid)\nexport const erc6492SignatureValidatorAbi = [\n  {\n    inputs: [\n      {\n        name: '_signer',\n        type: 'address',\n      },\n      {\n        name: '_hash',\n        type: 'bytes32',\n      },\n      {\n        name: '_signature',\n        type: 'bytes',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'constructor',\n  },\n  {\n    inputs: [\n      {\n        name: '_signer',\n        type: 'address',\n      },\n      {\n        name: '_hash',\n        type: 'bytes32',\n      },\n      {\n        name: '_signature',\n        type: 'bytes',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n    name: 'isValidSig',\n  },\n] as const\n\n/** [ERC-20 Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20) */\nexport const erc20Abi = [\n  {\n    type: 'event',\n    name: 'Approval',\n    inputs: [\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'event',\n    name: 'Transfer',\n    inputs: [\n      {\n        indexed: true,\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'allowance',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        name: 'spender',\n        type: 'address',\n      },\n    ],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'approve',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'balanceOf',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'account',\n        type: 'address',\n      },\n    ],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'decimals',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'uint8',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'name',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'string',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'symbol',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'string',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'totalSupply',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'transfer',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'transferFrom',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n] as const\n\n/**\n * [bytes32-flavored ERC-20](https://docs.makerdao.com/smart-contract-modules/mkr-module#4.-gotchas-potential-source-of-user-error)\n * for tokens (ie. Maker) that use bytes32 instead of string.\n */\nexport const erc20Abi_bytes32 = [\n  {\n    type: 'event',\n    name: 'Approval',\n    inputs: [\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'event',\n    name: 'Transfer',\n    inputs: [\n      {\n        indexed: true,\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'allowance',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        name: 'spender',\n        type: 'address',\n      },\n    ],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'approve',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'balanceOf',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'account',\n        type: 'address',\n      },\n    ],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'decimals',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'uint8',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'name',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'bytes32',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'symbol',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'bytes32',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'totalSupply',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'transfer',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'transferFrom',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n] as const\n\n/** [ERC-1155 Multi Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-1155) */\nexport const erc1155Abi = [\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'balance',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'needed',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    name: 'ERC1155InsufficientBalance',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'approver',\n        type: 'address',\n      },\n    ],\n    name: 'ERC1155InvalidApprover',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint256',\n        name: 'idsLength',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'valuesLength',\n        type: 'uint256',\n      },\n    ],\n    name: 'ERC1155InvalidArrayLength',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n    ],\n    name: 'ERC1155InvalidOperator',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'receiver',\n        type: 'address',\n      },\n    ],\n    name: 'ERC1155InvalidReceiver',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'sender',\n        type: 'address',\n      },\n    ],\n    name: 'ERC1155InvalidSender',\n    type: 'error',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n    name: 'ERC1155MissingApprovalForAll',\n    type: 'error',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'account',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'bool',\n        name: 'approved',\n        type: 'bool',\n      },\n    ],\n    name: 'ApprovalForAll',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256[]',\n        name: 'ids',\n        type: 'uint256[]',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256[]',\n        name: 'values',\n        type: 'uint256[]',\n      },\n    ],\n    name: 'TransferBatch',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n    name: 'TransferSingle',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'string',\n        name: 'value',\n        type: 'string',\n      },\n      {\n        indexed: true,\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n    ],\n    name: 'URI',\n    type: 'event',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'account',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n    ],\n    name: 'balanceOf',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address[]',\n        name: 'accounts',\n        type: 'address[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'ids',\n        type: 'uint256[]',\n      },\n    ],\n    name: 'balanceOfBatch',\n    outputs: [\n      {\n        internalType: 'uint256[]',\n        name: '',\n        type: 'uint256[]',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'account',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n    ],\n    name: 'isApprovedForAll',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'ids',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'values',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'bytes',\n        name: 'data',\n        type: 'bytes',\n      },\n    ],\n    name: 'safeBatchTransferFrom',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'value',\n        type: 'uint256',\n      },\n      {\n        internalType: 'bytes',\n        name: 'data',\n        type: 'bytes',\n      },\n    ],\n    name: 'safeTransferFrom',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        internalType: 'bool',\n        name: 'approved',\n        type: 'bool',\n      },\n    ],\n    name: 'setApprovalForAll',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes4',\n        name: 'interfaceId',\n        type: 'bytes4',\n      },\n    ],\n    name: 'supportsInterface',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    name: 'uri',\n    outputs: [\n      {\n        internalType: 'string',\n        name: '',\n        type: 'string',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n] as const\n\n/** [ERC-721 Non-Fungible Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-721) */\nexport const erc721Abi = [\n  {\n    type: 'event',\n    name: 'Approval',\n    inputs: [\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'event',\n    name: 'ApprovalForAll',\n    inputs: [\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'approved',\n        type: 'bool',\n      },\n    ],\n  },\n  {\n    type: 'event',\n    name: 'Transfer',\n    inputs: [\n      {\n        indexed: true,\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'approve',\n    stateMutability: 'payable',\n    inputs: [\n      {\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    outputs: [],\n  },\n  {\n    type: 'function',\n    name: 'balanceOf',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'account',\n        type: 'address',\n      },\n    ],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'getApproved',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'address',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'isApprovedForAll',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        name: 'operator',\n        type: 'address',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'name',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'string',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'ownerOf',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'safeTransferFrom',\n    stateMutability: 'payable',\n    inputs: [\n      {\n        name: 'from',\n        type: 'address',\n      },\n      {\n        name: 'to',\n        type: 'address',\n      },\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    outputs: [],\n  },\n  {\n    type: 'function',\n    name: 'safeTransferFrom',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'from',\n        type: 'address',\n      },\n      {\n        name: 'to',\n        type: 'address',\n      },\n      {\n        name: 'id',\n        type: 'uint256',\n      },\n      {\n        name: 'data',\n        type: 'bytes',\n      },\n    ],\n    outputs: [],\n  },\n  {\n    type: 'function',\n    name: 'setApprovalForAll',\n    stateMutability: 'nonpayable',\n    inputs: [\n      {\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        name: 'approved',\n        type: 'bool',\n      },\n    ],\n    outputs: [],\n  },\n  {\n    type: 'function',\n    name: 'symbol',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'string',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'tokenByIndex',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'index',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'tokenByIndex',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        name: 'index',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'tokenURI',\n    stateMutability: 'view',\n    inputs: [\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    outputs: [\n      {\n        type: 'string',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'totalSupply',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n  },\n  {\n    type: 'function',\n    name: 'transferFrom',\n    stateMutability: 'payable',\n    inputs: [\n      {\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    outputs: [],\n  },\n] as const\n\n/** [ERC-4626 Tokenized Vaults Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-4626) */\nexport const erc4626Abi = [\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n    name: 'Approval',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'receiver',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'assets',\n        type: 'uint256',\n      },\n      {\n        indexed: false,\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    name: 'Deposit',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n    name: 'Transfer',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'receiver',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'assets',\n        type: 'uint256',\n      },\n      {\n        indexed: false,\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    name: 'Withdraw',\n    type: 'event',\n  },\n  {\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        name: 'spender',\n        type: 'address',\n      },\n    ],\n    name: 'allowance',\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    name: 'approve',\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'asset',\n    outputs: [\n      {\n        name: 'assetTokenAddress',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'account',\n        type: 'address',\n      },\n    ],\n    name: 'balanceOf',\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    name: 'convertToAssets',\n    outputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    name: 'convertToShares',\n    outputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n      {\n        name: 'receiver',\n        type: 'address',\n      },\n    ],\n    name: 'deposit',\n    outputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'caller',\n        type: 'address',\n      },\n    ],\n    name: 'maxDeposit',\n    outputs: [\n      {\n        name: 'maxAssets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'caller',\n        type: 'address',\n      },\n    ],\n    name: 'maxMint',\n    outputs: [\n      {\n        name: 'maxShares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n    name: 'maxRedeem',\n    outputs: [\n      {\n        name: 'maxShares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n    name: 'maxWithdraw',\n    outputs: [\n      {\n        name: 'maxAssets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n      {\n        name: 'receiver',\n        type: 'address',\n      },\n    ],\n    name: 'mint',\n    outputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    name: 'previewDeposit',\n    outputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    name: 'previewMint',\n    outputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    name: 'previewRedeem',\n    outputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    name: 'previewWithdraw',\n    outputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n      {\n        name: 'receiver',\n        type: 'address',\n      },\n      {\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n    name: 'redeem',\n    outputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'totalAssets',\n    outputs: [\n      {\n        name: 'totalManagedAssets',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'totalSupply',\n    outputs: [\n      {\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'to',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    name: 'transfer',\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'from',\n        type: 'address',\n      },\n      {\n        name: 'to',\n        type: 'address',\n      },\n      {\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    name: 'transferFrom',\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        name: 'assets',\n        type: 'uint256',\n      },\n      {\n        name: 'receiver',\n        type: 'address',\n      },\n      {\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n    name: 'withdraw',\n    outputs: [\n      {\n        name: 'shares',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n] as const\n", "export const aggregate3Signature = '0x82ad56cb'\n", "export const deploylessCallViaBytecodeBytecode =\n  '0x608060405234801561001057600080fd5b5060405161018e38038061018e83398101604081905261002f91610124565b6000808351602085016000f59050803b61004857600080fd5b6000808351602085016000855af16040513d6000823e81610067573d81fd5b3d81f35b634e487b7160e01b600052604160045260246000fd5b600082601f83011261009257600080fd5b81516001600160401b038111156100ab576100ab61006b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100d9576100d961006b565b6040528181528382016020018510156100f157600080fd5b60005b82811015610110576020818601810151838301820152016100f4565b506000918101602001919091529392505050565b6000806040838503121561013757600080fd5b82516001600160401b0381111561014d57600080fd5b61015985828601610081565b602085015190935090506001600160401b0381111561017757600080fd5b61018385828601610081565b915050925092905056fe'\n\nexport const deploylessCallViaFactoryBytecode =\n  '0x608060405234801561001057600080fd5b506040516102c03803806102c083398101604081905261002f916101e6565b836001600160a01b03163b6000036100e457600080836001600160a01b03168360405161005c9190610270565b6000604051808303816000865af19150503d8060008114610099576040519150601f19603f3d011682016040523d82523d6000602084013e61009e565b606091505b50915091508115806100b857506001600160a01b0386163b155b156100e1578060405163101bb98d60e01b81526004016100d8919061028c565b60405180910390fd5b50505b6000808451602086016000885af16040513d6000823e81610103573d81fd5b3d81f35b80516001600160a01b038116811461011e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561015457818101518382015260200161013c565b50506000910152565b600082601f83011261016e57600080fd5b81516001600160401b0381111561018757610187610123565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101b5576101b5610123565b6040528181528382016020018510156101cd57600080fd5b6101de826020830160208701610139565b949350505050565b600080600080608085870312156101fc57600080fd5b61020585610107565b60208601519094506001600160401b0381111561022157600080fd5b61022d8782880161015d565b93505061023c60408601610107565b60608601519092506001600160401b0381111561025857600080fd5b6102648782880161015d565b91505092959194509250565b60008251610282818460208701610139565b9190910192915050565b60208152600082518060208401526102ab816040850160208701610139565b601f01601f1916919091016040019291505056fe'\n\nexport const erc6492SignatureValidatorByteCode =\n  '0x608060405234801561001057600080fd5b5060405161069438038061069483398101604081905261002f9161051e565b600061003c848484610048565b9050806000526001601ff35b60007f64926492649264926492649264926492649264926492649264926492649264926100748361040c565b036101e7576000606080848060200190518101906100929190610577565b60405192955090935091506000906001600160a01b038516906100b69085906105dd565b6000604051808303816000865af19150503d80600081146100f3576040519150601f19603f3d011682016040523d82523d6000602084013e6100f8565b606091505b50509050876001600160a01b03163b60000361016057806101605760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90610190908b9087906004016105f9565b602060405180830381865afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d19190610633565b6001600160e01b03191614945050505050610405565b6001600160a01b0384163b1561027a57604051630b135d3f60e11b808252906001600160a01b03861690631626ba7e9061022790879087906004016105f9565b602060405180830381865afa158015610244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102689190610633565b6001600160e01b031916149050610405565b81516041146102df5760405162461bcd60e51b815260206004820152603a602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e6774680000000000006064820152608401610157565b6102e7610425565b5060208201516040808401518451859392600091859190811061030c5761030c61065d565b016020015160f81c9050601b811480159061032b57508060ff16601c14155b1561038c5760405162461bcd60e51b815260206004820152603b602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c756500000000006064820152608401610157565b60408051600081526020810180835289905260ff83169181019190915260608101849052608081018390526001600160a01b0389169060019060a0016020604051602081039080840390855afa1580156103ea573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149450505050505b9392505050565b600060208251101561041d57600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461045857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561048c578181015183820152602001610474565b50506000910152565b600082601f8301126104a657600080fd5b81516001600160401b038111156104bf576104bf61045b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104ed576104ed61045b565b60405281815283820160200185101561050557600080fd5b610516826020830160208701610471565b949350505050565b60008060006060848603121561053357600080fd5b835161053e81610443565b6020850151604086015191945092506001600160401b0381111561056157600080fd5b61056d86828701610495565b9150509250925092565b60008060006060848603121561058c57600080fd5b835161059781610443565b60208501519093506001600160401b038111156105b357600080fd5b6105bf86828701610495565b604086015190935090506001600160401b0381111561056157600080fd5b600082516105ef818460208701610471565b9190910192915050565b828152604060208201526000825180604084015261061e816060850160208701610471565b601f01601f1916919091016060019392505050565b60006020828403121561064557600080fd5b81516001600160e01b03198116811461040557600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572'\n\nexport const multicall3Bytecode =\n  '0x608060405234801561001057600080fd5b506115b9806100206000396000f3fe6080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e14610325578063bce38bd714610350578063c3077fa914610380578063ee82ac5e146103b2576100f3565b80634d2301cc1461026257806372425d9d1461029f57806382ad56cb146102ca57806386d516e8146102fa576100f3565b80633408e470116100c65780633408e470146101af578063399542e9146101da5780633e64a6961461020c57806342cbb15c14610237576100f3565b80630f28c97d146100f8578063174dea7114610123578063252dba421461015357806327e86d6e14610184575b600080fd5b34801561010457600080fd5b5061010d6103ef565b60405161011a9190610c0a565b60405180910390f35b61013d60048036038101906101389190610c94565b6103f7565b60405161014a9190610e94565b60405180910390f35b61016d60048036038101906101689190610f0c565b610615565b60405161017b92919061101b565b60405180910390f35b34801561019057600080fd5b506101996107ab565b6040516101a69190611064565b60405180910390f35b3480156101bb57600080fd5b506101c46107b7565b6040516101d19190610c0a565b60405180910390f35b6101f460048036038101906101ef91906110ab565b6107bf565b6040516102039392919061110b565b60405180910390f35b34801561021857600080fd5b506102216107e1565b60405161022e9190610c0a565b60405180910390f35b34801561024357600080fd5b5061024c6107e9565b6040516102599190610c0a565b60405180910390f35b34801561026e57600080fd5b50610289600480360381019061028491906111a7565b6107f1565b6040516102969190610c0a565b60405180910390f35b3480156102ab57600080fd5b506102b4610812565b6040516102c19190610c0a565b60405180910390f35b6102e460048036038101906102df919061122a565b61081a565b6040516102f19190610e94565b60405180910390f35b34801561030657600080fd5b5061030f6109e4565b60405161031c9190610c0a565b60405180910390f35b34801561033157600080fd5b5061033a6109ec565b6040516103479190611286565b60405180910390f35b61036a600480360381019061036591906110ab565b6109f4565b6040516103779190610e94565b60405180910390f35b61039a60048036038101906103959190610f0c565b610ba6565b6040516103a99392919061110b565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d491906112cd565b610bca565b6040516103e69190611064565b60405180910390f35b600042905090565b60606000808484905090508067ffffffffffffffff81111561041c5761041b6112fa565b5b60405190808252806020026020018201604052801561045557816020015b610442610bd5565b81526020019060019003908161043a5790505b5092503660005b828110156105c957600085828151811061047957610478611329565b5b6020026020010151905087878381811061049657610495611329565b5b90506020028101906104a89190611367565b925060008360400135905080860195508360000160208101906104cb91906111a7565b73ffffffffffffffffffffffffffffffffffffffff16818580606001906104f2919061138f565b604051610500929190611431565b60006040518083038185875af1925050503d806000811461053d576040519150601f19603f3d011682016040523d82523d6000602084013e610542565b606091505b5083600001846020018290528215151515815250505081516020850135176105bc577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b826001019250505061045c565b5082341461060c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610603906114a7565b60405180910390fd5b50505092915050565b6000606043915060008484905090508067ffffffffffffffff81111561063e5761063d6112fa565b5b60405190808252806020026020018201604052801561067157816020015b606081526020019060019003908161065c5790505b5091503660005b828110156107a157600087878381811061069557610694611329565b5b90506020028101906106a791906114c7565b92508260000160208101906106bc91906111a7565b73ffffffffffffffffffffffffffffffffffffffff168380602001906106e2919061138f565b6040516106f0929190611431565b6000604051808303816000865af19150503d806000811461072d576040519150601f19603f3d011682016040523d82523d6000602084013e610732565b606091505b5086848151811061074657610745611329565b5b60200260200101819052819250505080610795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078c9061153b565b60405180910390fd5b81600101915050610678565b5050509250929050565b60006001430340905090565b600046905090565b6000806060439250434091506107d68686866109f4565b905093509350939050565b600048905090565b600043905090565b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b600044905090565b606060008383905090508067ffffffffffffffff81111561083e5761083d6112fa565b5b60405190808252806020026020018201604052801561087757816020015b610864610bd5565b81526020019060019003908161085c5790505b5091503660005b828110156109db57600084828151811061089b5761089a611329565b5b602002602001015190508686838181106108b8576108b7611329565b5b90506020028101906108ca919061155b565b92508260000160208101906108df91906111a7565b73ffffffffffffffffffffffffffffffffffffffff16838060400190610905919061138f565b604051610913929190611431565b6000604051808303816000865af19150503d8060008114610950576040519150601f19603f3d011682016040523d82523d6000602084013e610955565b606091505b5082600001836020018290528215151515815250505080516020840135176109cf577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b8160010191505061087e565b50505092915050565b600045905090565b600041905090565b606060008383905090508067ffffffffffffffff811115610a1857610a176112fa565b5b604051908082528060200260200182016040528015610a5157816020015b610a3e610bd5565b815260200190600190039081610a365790505b5091503660005b82811015610b9c576000848281518110610a7557610a74611329565b5b60200260200101519050868683818110610a9257610a91611329565b5b9050602002810190610aa491906114c7565b9250826000016020810190610ab991906111a7565b73ffffffffffffffffffffffffffffffffffffffff16838060200190610adf919061138f565b604051610aed929190611431565b6000604051808303816000865af19150503d8060008114610b2a576040519150601f19603f3d011682016040523d82523d6000602084013e610b2f565b606091505b508260000183602001829052821515151581525050508715610b90578060000151610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b869061153b565b60405180910390fd5b5b81600101915050610a58565b5050509392505050565b6000806060610bb7600186866107bf565b8093508194508295505050509250925092565b600081409050919050565b6040518060400160405280600015158152602001606081525090565b6000819050919050565b610c0481610bf1565b82525050565b6000602082019050610c1f6000830184610bfb565b92915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610c5457610c53610c2f565b5b8235905067ffffffffffffffff811115610c7157610c70610c34565b5b602083019150836020820283011115610c8d57610c8c610c39565b5b9250929050565b60008060208385031215610cab57610caa610c25565b5b600083013567ffffffffffffffff811115610cc957610cc8610c2a565b5b610cd585828601610c3e565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60008115159050919050565b610d2281610d0d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610d62578082015181840152602081019050610d47565b83811115610d71576000848401525b50505050565b6000601f19601f8301169050919050565b6000610d9382610d28565b610d9d8185610d33565b9350610dad818560208601610d44565b610db681610d77565b840191505092915050565b6000604083016000830151610dd96000860182610d19565b5060208301518482036020860152610df18282610d88565b9150508091505092915050565b6000610e0a8383610dc1565b905092915050565b6000602082019050919050565b6000610e2a82610ce1565b610e348185610cec565b935083602082028501610e4685610cfd565b8060005b85811015610e825784840389528151610e638582610dfe565b9450610e6e83610e12565b925060208a01995050600181019050610e4a565b50829750879550505050505092915050565b60006020820190508181036000830152610eae8184610e1f565b905092915050565b60008083601f840112610ecc57610ecb610c2f565b5b8235905067ffffffffffffffff811115610ee957610ee8610c34565b5b602083019150836020820283011115610f0557610f04610c39565b5b9250929050565b60008060208385031215610f2357610f22610c25565b5b600083013567ffffffffffffffff811115610f4157610f40610c2a565b5b610f4d85828601610eb6565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000610f918383610d88565b905092915050565b6000602082019050919050565b6000610fb182610f59565b610fbb8185610f64565b935083602082028501610fcd85610f75565b8060005b858110156110095784840389528151610fea8582610f85565b9450610ff583610f99565b925060208a01995050600181019050610fd1565b50829750879550505050505092915050565b60006040820190506110306000830185610bfb565b81810360208301526110428184610fa6565b90509392505050565b6000819050919050565b61105e8161104b565b82525050565b60006020820190506110796000830184611055565b92915050565b61108881610d0d565b811461109357600080fd5b50565b6000813590506110a58161107f565b92915050565b6000806000604084860312156110c4576110c3610c25565b5b60006110d286828701611096565b935050602084013567ffffffffffffffff8111156110f3576110f2610c2a565b5b6110ff86828701610eb6565b92509250509250925092565b60006060820190506111206000830186610bfb565b61112d6020830185611055565b818103604083015261113f8184610e1f565b9050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061117482611149565b9050919050565b61118481611169565b811461118f57600080fd5b50565b6000813590506111a18161117b565b92915050565b6000602082840312156111bd576111bc610c25565b5b60006111cb84828501611192565b91505092915050565b60008083601f8401126111ea576111e9610c2f565b5b8235905067ffffffffffffffff81111561120757611206610c34565b5b60208301915083602082028301111561122357611222610c39565b5b9250929050565b6000806020838503121561124157611240610c25565b5b600083013567ffffffffffffffff81111561125f5761125e610c2a565b5b61126b858286016111d4565b92509250509250929050565b61128081611169565b82525050565b600060208201905061129b6000830184611277565b92915050565b6112aa81610bf1565b81146112b557600080fd5b50565b6000813590506112c7816112a1565b92915050565b6000602082840312156112e3576112e2610c25565b5b60006112f1848285016112b8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600160800383360303811261138357611382611358565b5b80830191505092915050565b600080833560016020038436030381126113ac576113ab611358565b5b80840192508235915067ffffffffffffffff8211156113ce576113cd61135d565b5b6020830192506001820236038313156113ea576113e9611362565b5b509250929050565b600081905092915050565b82818337600083830152505050565b600061141883856113f2565b93506114258385846113fd565b82840190509392505050565b600061143e82848661140c565b91508190509392505050565b600082825260208201905092915050565b7f4d756c746963616c6c333a2076616c7565206d69736d61746368000000000000600082015250565b6000611491601a8361144a565b915061149c8261145b565b602082019050919050565b600060208201905081810360008301526114c081611484565b9050919050565b6000823560016040038336030381126114e3576114e2611358565b5b80830191505092915050565b7f4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000600082015250565b600061152560178361144a565b9150611530826114ef565b602082019050919050565b6000602082019050818103600083015261155481611518565b9050919050565b60008235600160600383360303811261157757611576611358565b5b8083019150509291505056fea264697066735822122020c1bc9aacf8e4a6507193432a895a8e77094f45a1395583f07b24e860ef06cd64736f6c634300080c0033'\n", "import type { Chain } from '../types/chain.js'\n\nimport { BaseError } from './base.js'\n\nexport type ChainDoesNotSupportContractErrorType =\n  ChainDoesNotSupportContract & {\n    name: 'ChainDoesNotSupportContract'\n  }\nexport class ChainDoesNotSupportContract extends BaseError {\n  constructor({\n    blockNumber,\n    chain,\n    contract,\n  }: {\n    blockNumber?: bigint | undefined\n    chain: Chain\n    contract: { name: string; blockCreated?: number | undefined }\n  }) {\n    super(\n      `Chain \"${chain.name}\" does not support contract \"${contract.name}\".`,\n      {\n        metaMessages: [\n          'This could be due to any of the following:',\n          ...(blockNumber &&\n          contract.blockCreated &&\n          contract.blockCreated > blockNumber\n            ? [\n                `- The contract \"${contract.name}\" was not deployed until block ${contract.blockCreated} (current block ${blockNumber}).`,\n              ]\n            : [\n                `- The chain does not have the contract \"${contract.name}\" configured.`,\n              ]),\n        ],\n        name: 'ChainDoesNotSupportContract',\n      },\n    )\n  }\n}\n\nexport type ChainMismatchErrorType = ChainMismatchError & {\n  name: 'ChainMismatchError'\n}\nexport class ChainMismatchError extends BaseError {\n  constructor({\n    chain,\n    currentChainId,\n  }: {\n    chain: Chain\n    currentChainId: number\n  }) {\n    super(\n      `The current chain of the wallet (id: ${currentChainId}) does not match the target chain for the transaction (id: ${chain.id} \u2013 ${chain.name}).`,\n      {\n        metaMessages: [\n          `Current Chain ID:  ${currentChainId}`,\n          `Expected Chain ID: ${chain.id} \u2013 ${chain.name}`,\n        ],\n        name: 'ChainMismatchError',\n      },\n    )\n  }\n}\n\nexport type ChainNotFoundErrorType = ChainNotFoundError & {\n  name: 'ChainNotFoundError'\n}\nexport class ChainNotFoundError extends BaseError {\n  constructor() {\n    super(\n      [\n        'No chain was provided to the request.',\n        'Please provide a chain with the `chain` argument on the Action, or by supplying a `chain` to WalletClient.',\n      ].join('\\n'),\n      {\n        name: 'ChainNotFoundError',\n      },\n    )\n  }\n}\n\nexport type ClientChainNotConfiguredErrorType =\n  ClientChainNotConfiguredError & {\n    name: 'ClientChainNotConfiguredError'\n  }\nexport class ClientChainNotConfiguredError extends BaseError {\n  constructor() {\n    super('No chain was provided to the Client.', {\n      name: 'ClientChainNotConfiguredError',\n    })\n  }\n}\n\nexport type InvalidChainIdErrorType = InvalidChainIdError & {\n  name: 'InvalidChainIdError'\n}\nexport class InvalidChainIdError extends BaseError {\n  constructor({ chainId }: { chainId?: number | undefined }) {\n    super(\n      typeof chainId === 'number'\n        ? `Chain ID \"${chainId}\" is invalid.`\n        : 'Chain ID is invalid.',\n      { name: 'InvalidChainIdError' },\n    )\n  }\n}\n", "import type { Abi } from 'abitype'\n\nimport {\n  AbiConstructorNotFoundError,\n  type AbiConstructorNotFoundErrorType,\n  AbiConstructorParamsNotFoundError,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ContractConstructorArgs } from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { UnionEvaluate } from '../../types/utils.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport {\n  type EncodeAbiParametersErrorType,\n  encodeAbiParameters,\n} from './encodeAbiParameters.js'\n\nconst docsPath = '/docs/contract/encodeDeployData'\n\nexport type EncodeDeployDataParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  ///\n  hasConstructor = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [Extract<abi[number], { type: 'constructor' }>] extends [never]\n        ? false\n        : true\n    : true,\n  allArgs = ContractConstructorArgs<abi>,\n> = {\n  abi: abi\n  bytecode: Hex\n} & UnionEvaluate<\n  hasConstructor extends false\n    ? { args?: undefined }\n    : readonly [] extends allArgs\n      ? { args?: allArgs | undefined }\n      : { args: allArgs }\n>\n\nexport type EncodeDeployDataReturnType = Hex\n\nexport type EncodeDeployDataErrorType =\n  | AbiConstructorNotFoundErrorType\n  | ConcatHexErrorType\n  | EncodeAbiParametersErrorType\n  | ErrorType\n\nexport function encodeDeployData<const abi extends Abi | readonly unknown[]>(\n  parameters: EncodeDeployDataParameters<abi>,\n): EncodeDeployDataReturnType {\n  const { abi, args, bytecode } = parameters as EncodeDeployDataParameters\n  if (!args || args.length === 0) return bytecode\n\n  const description = abi.find((x) => 'type' in x && x.type === 'constructor')\n  if (!description) throw new AbiConstructorNotFoundError({ docsPath })\n  if (!('inputs' in description))\n    throw new AbiConstructorParamsNotFoundError({ docsPath })\n  if (!description.inputs || description.inputs.length === 0)\n    throw new AbiConstructorParamsNotFoundError({ docsPath })\n\n  const data = encodeAbiParameters(description.inputs, args)\n  return concatHex([bytecode, data!])\n}\n", "import {\n  ChainDoesNotSupportContract,\n  type ChainDoesNotSupportContractErrorType,\n} from '../../errors/chain.js'\nimport type { Chain, ChainContract } from '../../types/chain.js'\n\nexport type GetChainContractAddressErrorType =\n  ChainDoesNotSupportContractErrorType\n\nexport function getChainContractAddress({\n  blockNumber,\n  chain,\n  contract: name,\n}: {\n  blockNumber?: bigint | undefined\n  chain: Chain\n  contract: string\n}) {\n  const contract = (chain?.contracts as Record<string, ChainContract>)?.[name]\n  if (!contract)\n    throw new ChainDoesNotSupportContract({\n      chain,\n      contract: { name },\n    })\n\n  if (\n    blockNumber &&\n    contract.blockCreated &&\n    contract.blockCreated > blockNumber\n  )\n    throw new ChainDoesNotSupportContract({\n      blockNumber,\n      chain,\n      contract: {\n        name,\n        blockCreated: contract.blockCreated,\n      },\n    })\n\n  return contract.address\n}\n", "import type { CallParameters } from '../../actions/public/call.js'\nimport type { BaseError } from '../../errors/base.js'\nimport {\n  CallExecutionError,\n  type CallExecutionErrorType,\n} from '../../errors/contract.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\n\nimport {\n  type GetNodeErrorParameters,\n  type GetNodeErrorReturnType,\n  getNodeError,\n} from './getNodeError.js'\n\nexport type GetCallErrorReturnType<cause = ErrorType> = Omit<\n  CallExecutionErrorType,\n  'cause'\n> & {\n  cause: cause | GetNodeErrorReturnType\n}\n\nexport function getCallError<err extends ErrorType<string>>(\n  err: err,\n  {\n    docsPath,\n    ...args\n  }: CallParameters & {\n    chain?: Chain | undefined\n    docsPath?: string | undefined\n  },\n): GetCallErrorReturnType<err> {\n  const cause = (() => {\n    const cause = getNodeError(\n      err as {} as BaseError,\n      args as GetNodeErrorParameters,\n    )\n    if (cause instanceof UnknownNodeError) return err as {} as BaseError\n    return cause\n  })()\n  return new CallExecutionError(cause, {\n    docsPath,\n    ...args,\n  }) as GetCallErrorReturnType<err>\n}\n", "/** @internal */\nexport type PromiseWithResolvers<type> = {\n  promise: Promise<type>\n  resolve: (value: type | PromiseLike<type>) => void\n  reject: (reason?: unknown) => void\n}\n\n/** @internal */\nexport function withResolvers<type>(): PromiseWithResolvers<type> {\n  let resolve: PromiseWithResolvers<type>['resolve'] = () => undefined\n  let reject: PromiseWithResolvers<type>['reject'] = () => undefined\n\n  const promise = new Promise<type>((resolve_, reject_) => {\n    resolve = resolve_\n    reject = reject_\n  })\n\n  return { promise, resolve, reject }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport { type PromiseWithResolvers, withResolvers } from './withResolvers.js'\n\ntype Resolved<returnType extends readonly unknown[] = any> = [\n  result: returnType[number],\n  results: returnType,\n]\n\ntype SchedulerItem = {\n  args: unknown\n  resolve: PromiseWithResolvers<unknown>['resolve']\n  reject: PromiseWithResolvers<unknown>['reject']\n}\n\ntype BatchResultsCompareFn<result = unknown> = (a: result, b: result) => number\n\ntype CreateBatchSchedulerArguments<\n  parameters = unknown,\n  returnType extends readonly unknown[] = readonly unknown[],\n> = {\n  fn: (args: parameters[]) => Promise<returnType>\n  id: number | string\n  shouldSplitBatch?: ((args: parameters[]) => boolean) | undefined\n  wait?: number | undefined\n  sort?: BatchResultsCompareFn<returnType[number]> | undefined\n}\n\ntype CreateBatchSchedulerReturnType<\n  parameters = unknown,\n  returnType extends readonly unknown[] = readonly unknown[],\n> = {\n  flush: () => void\n  schedule: parameters extends undefined\n    ? (args?: parameters | undefined) => Promise<Resolved<returnType>>\n    : (args: parameters) => Promise<Resolved<returnType>>\n}\n\nexport type CreateBatchSchedulerErrorType = ErrorType\n\nconst schedulerCache = /*#__PURE__*/ new Map<number | string, SchedulerItem[]>()\n\n/** @internal */\nexport function createBatchScheduler<\n  parameters,\n  returnType extends readonly unknown[],\n>({\n  fn,\n  id,\n  shouldSplitBatch,\n  wait = 0,\n  sort,\n}: CreateBatchSchedulerArguments<\n  parameters,\n  returnType\n>): CreateBatchSchedulerReturnType<parameters, returnType> {\n  const exec = async () => {\n    const scheduler = getScheduler()\n    flush()\n\n    const args = scheduler.map(({ args }) => args)\n\n    if (args.length === 0) return\n\n    fn(args as parameters[])\n      .then((data) => {\n        if (sort && Array.isArray(data)) data.sort(sort)\n        for (let i = 0; i < scheduler.length; i++) {\n          const { resolve } = scheduler[i]\n          resolve?.([data[i], data])\n        }\n      })\n      .catch((err) => {\n        for (let i = 0; i < scheduler.length; i++) {\n          const { reject } = scheduler[i]\n          reject?.(err)\n        }\n      })\n  }\n\n  const flush = () => schedulerCache.delete(id)\n\n  const getBatchedArgs = () =>\n    getScheduler().map(({ args }) => args) as parameters[]\n\n  const getScheduler = () => schedulerCache.get(id) || []\n\n  const setScheduler = (item: SchedulerItem) =>\n    schedulerCache.set(id, [...getScheduler(), item])\n\n  return {\n    flush,\n    async schedule(args: parameters) {\n      const { promise, resolve, reject } = withResolvers()\n\n      const split = shouldSplitBatch?.([...getBatchedArgs(), args])\n\n      if (split) exec()\n\n      const hasActiveScheduler = getScheduler().length > 0\n      if (hasActiveScheduler) {\n        setScheduler({ args, resolve, reject })\n        return promise\n      }\n\n      setScheduler({ args, resolve, reject })\n      setTimeout(exec, wait)\n      return promise\n    },\n  } as unknown as CreateBatchSchedulerReturnType<parameters, returnType>\n}\n", "import type { Address } from 'abitype'\n\nimport type { Hex } from '../types/misc.js'\nimport { stringify } from '../utils/stringify.js'\n\nimport { BaseError } from './base.js'\nimport { getUrl } from './utils.js'\n\nexport type OffchainLookupErrorType = OffchainLookupError & {\n  name: 'OffchainLookupError'\n}\nexport class OffchainLookupError extends BaseError {\n  constructor({\n    callbackSelector,\n    cause,\n    data,\n    extraData,\n    sender,\n    urls,\n  }: {\n    callbackSelector: Hex\n    cause: BaseError\n    data: Hex\n    extraData: Hex\n    sender: Address\n    urls: readonly string[]\n  }) {\n    super(\n      cause.shortMessage ||\n        'An error occurred while fetching for an offchain result.',\n      {\n        cause,\n        metaMessages: [\n          ...(cause.metaMessages || []),\n          cause.metaMessages?.length ? '' : [],\n          'Offchain Gateway Call:',\n          urls && [\n            '  Gateway URL(s):',\n            ...urls.map((url) => `    ${getUrl(url)}`),\n          ],\n          `  Sender: ${sender}`,\n          `  Data: ${data}`,\n          `  Callback selector: ${callbackSelector}`,\n          `  Extra data: ${extraData}`,\n        ].flat(),\n        name: 'OffchainLookupError',\n      },\n    )\n  }\n}\n\nexport type OffchainLookupResponseMalformedErrorType =\n  OffchainLookupResponseMalformedError & {\n    name: 'OffchainLookupResponseMalformedError'\n  }\nexport class OffchainLookupResponseMalformedError extends BaseError {\n  constructor({ result, url }: { result: any; url: string }) {\n    super(\n      'Offchain gateway response is malformed. Response data must be a hex value.',\n      {\n        metaMessages: [\n          `Gateway URL: ${getUrl(url)}`,\n          `Response: ${stringify(result)}`,\n        ],\n        name: 'OffchainLookupResponseMalformedError',\n      },\n    )\n  }\n}\n\n/** @internal */\nexport type OffchainLookupSenderMismatchErrorType =\n  OffchainLookupSenderMismatchError & {\n    name: 'OffchainLookupSenderMismatchError'\n  }\nexport class OffchainLookupSenderMismatchError extends BaseError {\n  constructor({ sender, to }: { sender: Address; to: Address }) {\n    super(\n      'Reverted sender address does not match target contract address (`to`).',\n      {\n        metaMessages: [\n          `Contract address: ${to}`,\n          `OffchainLookup sender address: ${sender}`,\n        ],\n        name: 'OffchainLookupSenderMismatchError',\n      },\n    )\n  }\n}\n", "import type { Abi, AbiStateMutability } from 'abitype'\n\nimport { AbiFunctionSignatureNotFoundError } from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type SliceErrorType, slice } from '../data/slice.js'\nimport {\n  type ToFunctionSelectorErrorType,\n  toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\nimport {\n  type DecodeAbiParametersErrorType,\n  decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\n\nexport type DecodeFunctionDataParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n> = {\n  abi: abi\n  data: Hex\n}\n\nexport type DecodeFunctionDataReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  ///\n  allFunctionNames extends\n    ContractFunctionName<abi> = ContractFunctionName<abi>,\n> = IsNarrowable<abi, Abi> extends true\n  ? UnionEvaluate<\n      {\n        [functionName in allFunctionNames]: {\n          args: ContractFunctionArgs<abi, AbiStateMutability, functionName>\n          functionName: functionName\n        }\n      }[allFunctionNames]\n    >\n  : {\n      args: readonly unknown[] | undefined\n      functionName: string\n    }\n\nexport type DecodeFunctionDataErrorType =\n  | AbiFunctionSignatureNotFoundError\n  | DecodeAbiParametersErrorType\n  | FormatAbiItemErrorType\n  | ToFunctionSelectorErrorType\n  | SliceErrorType\n  | ErrorType\n\nexport function decodeFunctionData<const abi extends Abi | readonly unknown[]>(\n  parameters: DecodeFunctionDataParameters<abi>,\n) {\n  const { abi, data } = parameters as DecodeFunctionDataParameters\n  const signature = slice(data, 0, 4)\n  const description = abi.find(\n    (x) =>\n      x.type === 'function' &&\n      signature === toFunctionSelector(formatAbiItem(x)),\n  )\n  if (!description)\n    throw new AbiFunctionSignatureNotFoundError(signature, {\n      docsPath: '/docs/contract/decodeFunctionData',\n    })\n  return {\n    functionName: (description as { name: string }).name,\n    args: ('inputs' in description &&\n    description.inputs &&\n    description.inputs.length > 0\n      ? decodeAbiParameters(description.inputs, slice(data, 4))\n      : undefined) as readonly unknown[] | undefined,\n  } as DecodeFunctionDataReturnType<abi>\n}\n", "import type { Abi, ExtractAbiErrors } from 'abitype'\n\nimport {\n  AbiErrorInputsNotFoundError,\n  AbiErrorNotFoundError,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractErrorArgs,\n  ContractErrorName,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport {\n  type ToFunctionSelectorErrorType,\n  toFunctionSelector,\n} from '../hash/toFunctionSelector.js'\nimport {\n  type EncodeAbiParametersErrorType,\n  encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeErrorResult'\n\nexport type EncodeErrorResultParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  errorName extends ContractErrorName<abi> | undefined = ContractErrorName<abi>,\n  ///\n  hasErrors = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [ExtractAbiErrors<abi>] extends [never]\n        ? false\n        : true\n    : true,\n  allArgs = ContractErrorArgs<\n    abi,\n    errorName extends ContractErrorName<abi>\n      ? errorName\n      : ContractErrorName<abi>\n  >,\n  allErrorNames = ContractErrorName<abi>,\n> = {\n  abi: abi\n  args?: allArgs | undefined\n} & UnionEvaluate<\n  IsNarrowable<abi, Abi> extends true\n    ? abi['length'] extends 1\n      ? { errorName?: errorName | allErrorNames | undefined }\n      : { errorName: errorName | allErrorNames }\n    : { errorName?: errorName | allErrorNames | undefined }\n> &\n  (hasErrors extends true ? unknown : never)\n\nexport type EncodeErrorResultReturnType = Hex\n\nexport type EncodeErrorResultErrorType =\n  | GetAbiItemErrorType\n  | FormatAbiItemErrorType\n  | ToFunctionSelectorErrorType\n  | EncodeAbiParametersErrorType\n  | ConcatHexErrorType\n  | ErrorType\n\nexport function encodeErrorResult<\n  const abi extends Abi | readonly unknown[],\n  errorName extends ContractErrorName<abi> | undefined = undefined,\n>(\n  parameters: EncodeErrorResultParameters<abi, errorName>,\n): EncodeErrorResultReturnType {\n  const { abi, errorName, args } = parameters as EncodeErrorResultParameters\n\n  let abiItem = abi[0]\n  if (errorName) {\n    const item = getAbiItem({ abi, args, name: errorName })\n    if (!item) throw new AbiErrorNotFoundError(errorName, { docsPath })\n    abiItem = item\n  }\n\n  if (abiItem.type !== 'error')\n    throw new AbiErrorNotFoundError(undefined, { docsPath })\n\n  const definition = formatAbiItem(abiItem)\n  const signature = toFunctionSelector(definition)\n\n  let data: Hex = '0x'\n  if (args && args.length > 0) {\n    if (!abiItem.inputs)\n      throw new AbiErrorInputsNotFoundError(abiItem.name, { docsPath })\n    data = encodeAbiParameters(abiItem.inputs, args)\n  }\n  return concatHex([signature, data])\n}\n", "import type { Abi, AbiStateMutability, ExtractAbiFunctions } from 'abitype'\n\nimport {\n  AbiFunctionNotFoundError,\n  AbiFunctionOutputsNotFoundError,\n  InvalidArrayError,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractFunctionName,\n  ContractFunctionReturnType,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport {\n  type EncodeAbiParametersErrorType,\n  encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeFunctionResult'\n\nexport type EncodeFunctionResultParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends\n    | ContractFunctionName<abi>\n    | undefined = ContractFunctionName<abi>,\n  ///\n  hasFunctions = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [ExtractAbiFunctions<abi>] extends [never]\n        ? false\n        : true\n    : true,\n  allFunctionNames = ContractFunctionName<abi>,\n> = {\n  abi: abi\n  result?:\n    | ContractFunctionReturnType<\n        abi,\n        AbiStateMutability,\n        functionName extends ContractFunctionName<abi>\n          ? functionName\n          : ContractFunctionName<abi>,\n        never // allow all args. required for overloads to work.\n      >\n    | undefined\n} & UnionEvaluate<\n  IsNarrowable<abi, Abi> extends true\n    ? abi['length'] extends 1\n      ? { functionName?: functionName | allFunctionNames | undefined }\n      : { functionName: functionName | allFunctionNames }\n    : { functionName?: functionName | allFunctionNames | undefined }\n> &\n  (hasFunctions extends true ? unknown : never)\n\nexport type EncodeFunctionResultReturnType = Hex\n\nexport type EncodeFunctionResultErrorType =\n  | AbiFunctionOutputsNotFoundError\n  | AbiFunctionNotFoundError\n  | EncodeAbiParametersErrorType\n  | GetAbiItemErrorType\n  | ErrorType\n\nexport function encodeFunctionResult<\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi> | undefined = undefined,\n>(\n  parameters: EncodeFunctionResultParameters<abi, functionName>,\n): EncodeFunctionResultReturnType {\n  const { abi, functionName, result } =\n    parameters as EncodeFunctionResultParameters\n\n  let abiItem = abi[0]\n  if (functionName) {\n    const item = getAbiItem({ abi, name: functionName })\n    if (!item) throw new AbiFunctionNotFoundError(functionName, { docsPath })\n    abiItem = item\n  }\n\n  if (abiItem.type !== 'function')\n    throw new AbiFunctionNotFoundError(undefined, { docsPath })\n\n  if (!abiItem.outputs)\n    throw new AbiFunctionOutputsNotFoundError(abiItem.name, { docsPath })\n\n  const values = (() => {\n    if (abiItem.outputs.length === 0) return []\n    if (abiItem.outputs.length === 1) return [result]\n    if (Array.isArray(result)) return result\n    throw new InvalidArrayError(result)\n  })()\n\n  return encodeAbiParameters(abiItem.outputs, values)\n}\n", "import { batchGatewayAbi } from '../../constants/abis.js'\nimport { solidityError } from '../../constants/solidity.js'\nimport type { Hex } from '../../types/misc.js'\nimport { decodeFunctionData } from '../abi/decodeFunctionData.js'\nimport { encodeErrorResult } from '../abi/encodeErrorResult.js'\nimport { encodeFunctionResult } from '../abi/encodeFunctionResult.js'\nimport type {\n  CcipRequestErrorType,\n  CcipRequestParameters,\n  CcipRequestReturnType,\n} from '../ccip.js'\n\nexport const localBatchGatewayUrl = 'x-batch-gateway:true'\n\nexport async function localBatchGatewayRequest(parameters: {\n  data: Hex\n  ccipRequest: (\n    parameters: CcipRequestParameters,\n  ) => Promise<CcipRequestReturnType>\n}): Promise<Hex> {\n  const { data, ccipRequest } = parameters\n\n  const {\n    args: [queries],\n  } = decodeFunctionData({ abi: batchGatewayAbi, data })\n\n  const failures: boolean[] = []\n  const responses: Hex[] = []\n  await Promise.all(\n    queries.map(async (query, i) => {\n      try {\n        responses[i] = query.urls.includes(localBatchGatewayUrl)\n          ? await localBatchGatewayRequest({ data: query.data, ccipRequest })\n          : await ccipRequest(query)\n        failures[i] = false\n      } catch (err) {\n        failures[i] = true\n        responses[i] = encodeError(err as CcipRequestErrorType)\n      }\n    }),\n  )\n\n  return encodeFunctionResult({\n    abi: batchGatewayAbi,\n    functionName: 'query',\n    result: [failures, responses],\n  })\n}\n\nfunction encodeError(error: CcipRequestErrorType): Hex {\n  if (error.name === 'HttpRequestError' && error.status)\n    return encodeErrorResult({\n      abi: batchGatewayAbi,\n      errorName: 'HttpError',\n      args: [error.status, error.shortMessage],\n    })\n  return encodeErrorResult({\n    abi: [solidityError],\n    errorName: 'Error',\n    args: ['shortMessage' in error ? error.shortMessage : error.message],\n  })\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport { type CallParameters, call } from '../actions/public/call.js'\nimport type { Client } from '../clients/createClient.js'\nimport type { Transport } from '../clients/transports/createTransport.js'\nimport type { BaseError } from '../errors/base.js'\nimport {\n  OffchainLookupError,\n  type OffchainLookupErrorType as OffchainLookupErrorType_,\n  OffchainLookupResponseMalformedError,\n  type OffchainLookupResponseMalformedErrorType,\n  OffchainLookupSenderMismatchError,\n} from '../errors/ccip.js'\nimport {\n  HttpRequestError,\n  type HttpRequestErrorType,\n} from '../errors/request.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Chain } from '../types/chain.js'\nimport type { Hex } from '../types/misc.js'\nimport { decodeErrorResult } from './abi/decodeErrorResult.js'\nimport { encodeAbiParameters } from './abi/encodeAbiParameters.js'\nimport { isAddressEqual } from './address/isAddressEqual.js'\nimport { concat } from './data/concat.js'\nimport { isHex } from './data/isHex.js'\nimport {\n  localBatchGatewayRequest,\n  localBatchGatewayUrl,\n} from './ens/localBatchGatewayRequest.js'\nimport { stringify } from './stringify.js'\n\nexport const offchainLookupSignature = '0x556f1830'\nexport const offchainLookupAbiItem = {\n  name: 'OffchainLookup',\n  type: 'error',\n  inputs: [\n    {\n      name: 'sender',\n      type: 'address',\n    },\n    {\n      name: 'urls',\n      type: 'string[]',\n    },\n    {\n      name: 'callData',\n      type: 'bytes',\n    },\n    {\n      name: 'callbackFunction',\n      type: 'bytes4',\n    },\n    {\n      name: 'extraData',\n      type: 'bytes',\n    },\n  ],\n} as const satisfies Abi[number]\n\nexport type OffchainLookupErrorType = OffchainLookupErrorType_ | ErrorType\n\nexport async function offchainLookup<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    blockNumber,\n    blockTag,\n    data,\n    to,\n  }: Pick<CallParameters, 'blockNumber' | 'blockTag'> & {\n    data: Hex\n    to: Address\n  },\n): Promise<Hex> {\n  const { args } = decodeErrorResult({\n    data,\n    abi: [offchainLookupAbiItem],\n  })\n  const [sender, urls, callData, callbackSelector, extraData] = args\n\n  const { ccipRead } = client\n  const ccipRequest_ =\n    ccipRead && typeof ccipRead?.request === 'function'\n      ? ccipRead.request\n      : ccipRequest\n\n  try {\n    if (!isAddressEqual(to, sender))\n      throw new OffchainLookupSenderMismatchError({ sender, to })\n\n    const result = urls.includes(localBatchGatewayUrl)\n      ? await localBatchGatewayRequest({\n          data: callData,\n          ccipRequest: ccipRequest_,\n        })\n      : await ccipRequest_({ data: callData, sender, urls })\n\n    const { data: data_ } = await call(client, {\n      blockNumber,\n      blockTag,\n      data: concat([\n        callbackSelector,\n        encodeAbiParameters(\n          [{ type: 'bytes' }, { type: 'bytes' }],\n          [result, extraData],\n        ),\n      ]),\n      to,\n    } as CallParameters)\n\n    return data_!\n  } catch (err) {\n    throw new OffchainLookupError({\n      callbackSelector,\n      cause: err as BaseError,\n      data,\n      extraData,\n      sender,\n      urls,\n    })\n  }\n}\n\nexport type CcipRequestParameters = {\n  data: Hex\n  sender: Address\n  urls: readonly string[]\n}\n\nexport type CcipRequestReturnType = Hex\n\nexport type CcipRequestErrorType =\n  | HttpRequestErrorType\n  | OffchainLookupResponseMalformedErrorType\n  | ErrorType\n\nexport async function ccipRequest({\n  data,\n  sender,\n  urls,\n}: CcipRequestParameters): Promise<CcipRequestReturnType> {\n  let error = new Error('An unknown error occurred.')\n\n  for (let i = 0; i < urls.length; i++) {\n    const url = urls[i]\n    const method = url.includes('{data}') ? 'GET' : 'POST'\n    const body = method === 'POST' ? { data, sender } : undefined\n    const headers: HeadersInit =\n      method === 'POST' ? { 'Content-Type': 'application/json' } : {}\n\n    try {\n      const response = await fetch(\n        url.replace('{sender}', sender.toLowerCase()).replace('{data}', data),\n        {\n          body: JSON.stringify(body),\n          headers,\n          method,\n        },\n      )\n\n      let result: any\n      if (\n        response.headers.get('Content-Type')?.startsWith('application/json')\n      ) {\n        result = (await response.json()).data\n      } else {\n        result = (await response.text()) as any\n      }\n\n      if (!response.ok) {\n        error = new HttpRequestError({\n          body,\n          details: result?.error\n            ? stringify(result.error)\n            : response.statusText,\n          headers: response.headers,\n          status: response.status,\n          url,\n        })\n        continue\n      }\n\n      if (!isHex(result)) {\n        error = new OffchainLookupResponseMalformedError({\n          result,\n          url,\n        })\n        continue\n      }\n\n      return result\n    } catch (err) {\n      error = new HttpRequestError({\n        body,\n        details: (err as Error).message,\n        url,\n      })\n    }\n  }\n\n  throw error\n}\n", "import { type Address, parseAbi } from 'abitype'\nimport * as BlockOverrides from 'ox/BlockOverrides'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { multicall3Abi } from '../../constants/abis.js'\nimport { aggregate3Signature } from '../../constants/contract.js'\nimport {\n  deploylessCallViaBytecodeBytecode,\n  deploylessCallViaFactoryBytecode,\n  multicall3Bytecode,\n} from '../../constants/contracts.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n  ChainDoesNotSupportContract,\n  ClientChainNotConfiguredError,\n} from '../../errors/chain.js'\nimport {\n  CounterfactualDeploymentFailedError,\n  RawContractError,\n  type RawContractErrorType,\n} from '../../errors/contract.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RpcTransactionRequest } from '../../types/rpc.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { ExactPartial, UnionOmit } from '../../types/utils.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeDeployDataErrorType,\n  encodeDeployData,\n} from '../../utils/abi/encodeDeployData.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type GetCallErrorReturnType,\n  getCallError,\n} from '../../utils/errors/getCallError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n  type FormatTransactionRequestErrorType,\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport {\n  type CreateBatchSchedulerErrorType,\n  createBatchScheduler,\n} from '../../utils/promise/createBatchScheduler.js'\nimport {\n  type SerializeStateOverrideErrorType,\n  serializeStateOverride,\n} from '../../utils/stateOverride.js'\nimport type {\n  AssertRequestErrorType,\n  AssertRequestParameters,\n} from '../../utils/transaction/assertRequest.js'\nimport { assertRequest } from '../../utils/transaction/assertRequest.js'\n\nexport type CallParameters<\n  chain extends Chain | undefined = Chain | undefined,\n> = UnionOmit<FormattedCall<chain>, 'from'> & {\n  /** Account attached to the call (msg.sender). */\n  account?: Account | Address | undefined\n  /** Whether or not to enable multicall batching on this call. */\n  batch?: boolean | undefined\n  /** Block overrides for the call. */\n  blockOverrides?: BlockOverrides.BlockOverrides | undefined\n  /** Bytecode to perform the call on. */\n  code?: Hex | undefined\n  /** Contract deployment factory address (ie. Create2 factory, Smart Account factory, etc). */\n  factory?: Address | undefined\n  /** Calldata to execute on the factory to deploy the contract. */\n  factoryData?: Hex | undefined\n  /** State overrides for the call. */\n  stateOverride?: StateOverride | undefined\n} & (\n    | {\n        /** The balance of the account at a block number. */\n        blockNumber?: bigint | undefined\n        blockTag?: undefined\n      }\n    | {\n        blockNumber?: undefined\n        /**\n         * The balance of the account at a block tag.\n         * @default 'latest'\n         */\n        blockTag?: BlockTag | undefined\n      }\n  )\ntype FormattedCall<chain extends Chain | undefined = Chain | undefined> =\n  FormattedTransactionRequest<chain>\n\nexport type CallReturnType = { data: Hex | undefined }\n\nexport type CallErrorType = GetCallErrorReturnType<\n  | ParseAccountErrorType\n  | SerializeStateOverrideErrorType\n  | AssertRequestErrorType\n  | NumberToHexErrorType\n  | FormatTransactionRequestErrorType\n  | ScheduleMulticallErrorType\n  | RequestErrorType\n  | ToDeploylessCallViaBytecodeDataErrorType\n  | ToDeploylessCallViaFactoryDataErrorType\n>\n\n/**\n * Executes a new message call immediately without submitting a transaction to the network.\n *\n * - Docs: https://viem.sh/docs/actions/public/call\n * - JSON-RPC Methods: [`eth_call`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_call)\n *\n * @param client - Client to use\n * @param parameters - {@link CallParameters}\n * @returns The call data. {@link CallReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { call } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const data = await call(client, {\n *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n *   data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * })\n */\nexport async function call<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  args: CallParameters<chain>,\n): Promise<CallReturnType> {\n  const {\n    account: account_ = client.account,\n    authorizationList,\n    batch = Boolean(client.batch?.multicall),\n    blockNumber,\n    blockTag = client.experimental_blockTag ?? 'latest',\n    accessList,\n    blobs,\n    blockOverrides,\n    code,\n    data: data_,\n    factory,\n    factoryData,\n    gas,\n    gasPrice,\n    maxFeePerBlobGas,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    nonce,\n    to,\n    value,\n    stateOverride,\n    ...rest\n  } = args\n  const account = account_ ? parseAccount(account_) : undefined\n\n  if (code && (factory || factoryData))\n    throw new BaseError(\n      'Cannot provide both `code` & `factory`/`factoryData` as parameters.',\n    )\n  if (code && to)\n    throw new BaseError('Cannot provide both `code` & `to` as parameters.')\n\n  // Check if the call is deployless via bytecode.\n  const deploylessCallViaBytecode = code && data_\n  // Check if the call is deployless via a factory.\n  const deploylessCallViaFactory = factory && factoryData && to && data_\n  const deploylessCall = deploylessCallViaBytecode || deploylessCallViaFactory\n\n  const data = (() => {\n    if (deploylessCallViaBytecode)\n      return toDeploylessCallViaBytecodeData({\n        code,\n        data: data_,\n      })\n    if (deploylessCallViaFactory)\n      return toDeploylessCallViaFactoryData({\n        data: data_,\n        factory,\n        factoryData,\n        to,\n      })\n    return data_\n  })()\n\n  try {\n    assertRequest(args as AssertRequestParameters)\n\n    const blockNumberHex =\n      typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n    const block = blockNumberHex || blockTag\n\n    const rpcBlockOverrides = blockOverrides\n      ? BlockOverrides.toRpc(blockOverrides)\n      : undefined\n    const rpcStateOverride = serializeStateOverride(stateOverride)\n\n    const chainFormat = client.chain?.formatters?.transactionRequest?.format\n    const format = chainFormat || formatTransactionRequest\n\n    const request = format(\n      {\n        // Pick out extra data that might exist on the chain's transaction request type.\n        ...extract(rest, { format: chainFormat }),\n        accessList,\n        account,\n        authorizationList,\n        blobs,\n        data,\n        gas,\n        gasPrice,\n        maxFeePerBlobGas,\n        maxFeePerGas,\n        maxPriorityFeePerGas,\n        nonce,\n        to: deploylessCall ? undefined : to,\n        value,\n      } as TransactionRequest,\n      'call',\n    ) as TransactionRequest\n\n    if (\n      batch &&\n      shouldPerformMulticall({ request }) &&\n      !rpcStateOverride &&\n      !rpcBlockOverrides\n    ) {\n      try {\n        return await scheduleMulticall(client, {\n          ...request,\n          blockNumber,\n          blockTag,\n        } as unknown as ScheduleMulticallParameters<chain>)\n      } catch (err) {\n        if (\n          !(err instanceof ClientChainNotConfiguredError) &&\n          !(err instanceof ChainDoesNotSupportContract)\n        )\n          throw err\n      }\n    }\n\n    const params = (() => {\n      const base = [\n        request as ExactPartial<RpcTransactionRequest>,\n        block,\n      ] as const\n      if (rpcStateOverride && rpcBlockOverrides)\n        return [...base, rpcStateOverride, rpcBlockOverrides] as const\n      if (rpcStateOverride) return [...base, rpcStateOverride] as const\n      if (rpcBlockOverrides) return [...base, {}, rpcBlockOverrides] as const\n      return base\n    })()\n\n    const response = await client.request({\n      method: 'eth_call',\n      params,\n    })\n    if (response === '0x') return { data: undefined }\n    return { data: response }\n  } catch (err) {\n    const data = getRevertErrorData(err)\n\n    // Check for CCIP-Read offchain lookup signature.\n    const { offchainLookup, offchainLookupSignature } = await import(\n      '../../utils/ccip.js'\n    )\n    if (\n      client.ccipRead !== false &&\n      data?.slice(0, 10) === offchainLookupSignature &&\n      to\n    )\n      return { data: await offchainLookup(client, { data, to }) }\n\n    // Check for counterfactual deployment error.\n    if (deploylessCall && data?.slice(0, 10) === '0x101bb98d')\n      throw new CounterfactualDeploymentFailedError({ factory })\n\n    throw getCallError(err as ErrorType, {\n      ...args,\n      account,\n      chain: client.chain,\n    })\n  }\n}\n\n// We only want to perform a scheduled multicall if:\n// - The request has calldata,\n// - The request has a target address,\n// - The target address is not already the aggregate3 signature,\n// - The request has no other properties (`nonce`, `gas`, etc cannot be sent with a multicall).\nfunction shouldPerformMulticall({ request }: { request: TransactionRequest }) {\n  const { data, to, ...request_ } = request\n  if (!data) return false\n  if (data.startsWith(aggregate3Signature)) return false\n  if (!to) return false\n  if (\n    Object.values(request_).filter((x) => typeof x !== 'undefined').length > 0\n  )\n    return false\n  return true\n}\n\ntype ScheduleMulticallParameters<chain extends Chain | undefined> = Pick<\n  CallParameters<chain>,\n  'blockNumber' | 'blockTag'\n> & {\n  data: Hex\n  multicallAddress?: Address | undefined\n  to: Address\n}\n\ntype ScheduleMulticallErrorType =\n  | GetChainContractAddressErrorType\n  | NumberToHexErrorType\n  | CreateBatchSchedulerErrorType\n  | EncodeFunctionDataErrorType\n  | DecodeFunctionResultErrorType\n  | RawContractErrorType\n  | ErrorType\n\nasync function scheduleMulticall<chain extends Chain | undefined>(\n  client: Client<Transport>,\n  args: ScheduleMulticallParameters<chain>,\n) {\n  const {\n    batchSize = 1024,\n    deployless = false,\n    wait = 0,\n  } = typeof client.batch?.multicall === 'object' ? client.batch.multicall : {}\n  const {\n    blockNumber,\n    blockTag = client.experimental_blockTag ?? 'latest',\n    data,\n    to,\n  } = args\n\n  const multicallAddress = (() => {\n    if (deployless) return null\n    if (args.multicallAddress) return args.multicallAddress\n    if (client.chain) {\n      return getChainContractAddress({\n        blockNumber,\n        chain: client.chain,\n        contract: 'multicall3',\n      })\n    }\n    throw new ClientChainNotConfiguredError()\n  })()\n\n  const blockNumberHex =\n    typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n  const block = blockNumberHex || blockTag\n\n  const { schedule } = createBatchScheduler({\n    id: `${client.uid}.${block}`,\n    wait,\n    shouldSplitBatch(args) {\n      const size = args.reduce((size, { data }) => size + (data.length - 2), 0)\n      return size > batchSize * 2\n    },\n    fn: async (\n      requests: {\n        data: Hex\n        to: Address\n      }[],\n    ) => {\n      const calls = requests.map((request) => ({\n        allowFailure: true,\n        callData: request.data,\n        target: request.to,\n      }))\n\n      const calldata = encodeFunctionData({\n        abi: multicall3Abi,\n        args: [calls],\n        functionName: 'aggregate3',\n      })\n\n      const data = await client.request({\n        method: 'eth_call',\n        params: [\n          {\n            ...(multicallAddress === null\n              ? {\n                  data: toDeploylessCallViaBytecodeData({\n                    code: multicall3Bytecode,\n                    data: calldata,\n                  }),\n                }\n              : { to: multicallAddress, data: calldata }),\n          },\n          block,\n        ],\n      })\n\n      return decodeFunctionResult({\n        abi: multicall3Abi,\n        args: [calls],\n        functionName: 'aggregate3',\n        data: data || '0x',\n      })\n    },\n  })\n\n  const [{ returnData, success }] = await schedule({ data, to })\n\n  if (!success) throw new RawContractError({ data: returnData })\n  if (returnData === '0x') return { data: undefined }\n  return { data: returnData }\n}\n\ntype ToDeploylessCallViaBytecodeDataErrorType =\n  | EncodeDeployDataErrorType\n  | ErrorType\n\nfunction toDeploylessCallViaBytecodeData(parameters: { code: Hex; data: Hex }) {\n  const { code, data } = parameters\n  return encodeDeployData({\n    abi: parseAbi(['constructor(bytes, bytes)']),\n    bytecode: deploylessCallViaBytecodeBytecode,\n    args: [code, data],\n  })\n}\n\ntype ToDeploylessCallViaFactoryDataErrorType =\n  | EncodeDeployDataErrorType\n  | ErrorType\n\nfunction toDeploylessCallViaFactoryData(parameters: {\n  data: Hex\n  factory: Address\n  factoryData: Hex\n  to: Address\n}) {\n  const { data, factory, factoryData, to } = parameters\n  return encodeDeployData({\n    abi: parseAbi(['constructor(address, bytes, address, bytes)']),\n    bytecode: deploylessCallViaFactoryBytecode,\n    args: [to, data, factory, factoryData],\n  })\n}\n\n/** @internal */\nexport type GetRevertErrorDataErrorType = ErrorType\n\n/** @internal */\nexport function getRevertErrorData(err: unknown) {\n  if (!(err instanceof BaseError)) return undefined\n  const error = err.walk() as RawContractError\n  return typeof error?.data === 'object' ? error.data?.data : error.data\n}\n", "import type { Abi } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n  ContractFunctionParameters,\n  ContractFunctionReturnType,\n} from '../../types/contract.js'\nimport type { UnionEvaluate } from '../../types/utils.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  type EncodeFunctionDataParameters,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\n\nimport { type CallErrorType, type CallParameters, call } from './call.js'\n\nexport type ReadContractParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends ContractFunctionName<\n    abi,\n    'pure' | 'view'\n  > = ContractFunctionName<abi, 'pure' | 'view'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'pure' | 'view',\n    functionName\n  > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n> = UnionEvaluate<\n  Pick<\n    CallParameters,\n    | 'account'\n    | 'authorizationList'\n    | 'blockNumber'\n    | 'blockOverrides'\n    | 'blockTag'\n    | 'factory'\n    | 'factoryData'\n    | 'stateOverride'\n  >\n> &\n  ContractFunctionParameters<abi, 'pure' | 'view', functionName, args, boolean>\n\nexport type ReadContractReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends ContractFunctionName<\n    abi,\n    'pure' | 'view'\n  > = ContractFunctionName<abi, 'pure' | 'view'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'pure' | 'view',\n    functionName\n  > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n> = ContractFunctionReturnType<abi, 'pure' | 'view', functionName, args>\n\nexport type ReadContractErrorType = GetContractErrorReturnType<\n  CallErrorType | EncodeFunctionDataErrorType | DecodeFunctionResultErrorType\n>\n\n/**\n * Calls a read-only function on a contract, and returns the response.\n *\n * - Docs: https://viem.sh/docs/contract/readContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_reading-contracts\n *\n * A \"read-only\" function (constant function) on a Solidity contract is denoted by a `view` or `pure` keyword. They can only read the state of the contract, and cannot make any changes to it. Since read-only methods do not change the state of the contract, they do not require any gas to be executed, and can be called by any user without the need to pay for gas.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link ReadContractParameters}\n * @returns The response from the contract. Type is inferred. {@link ReadContractReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { readContract } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const result = await readContract(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   abi: parseAbi(['function balanceOf(address) view returns (uint256)']),\n *   functionName: 'balanceOf',\n *   args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // 424122n\n */\nexport async function readContract<\n  chain extends Chain | undefined,\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi, 'pure' | 'view'>,\n  const args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n>(\n  client: Client<Transport, chain>,\n  parameters: ReadContractParameters<abi, functionName, args>,\n): Promise<ReadContractReturnType<abi, functionName, args>> {\n  const { abi, address, args, functionName, ...rest } =\n    parameters as ReadContractParameters\n  const calldata = encodeFunctionData({\n    abi,\n    args,\n    functionName,\n  } as EncodeFunctionDataParameters)\n  try {\n    const { data } = await getAction(\n      client,\n      call,\n      'call',\n    )({\n      ...(rest as CallParameters),\n      data: calldata,\n      to: address!,\n    })\n    return decodeFunctionResult({\n      abi,\n      args,\n      functionName,\n      data: data || '0x',\n    }) as ReadContractReturnType<abi, functionName>\n  } catch (error) {\n    throw getContractError(error as BaseError, {\n      abi,\n      address,\n      args,\n      docsPath: '/docs/contract/readContract',\n      functionName,\n    })\n  }\n}\n", "import type { Abi, AbiFunction, AbiStateMutability, Address } from 'abitype'\n\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account, ParseAccount } from '../../types/account.js'\nimport type { Chain, DeriveChain } from '../../types/chain.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n  ContractFunctionParameters,\n  ContractFunctionReturnType,\n  ExtractAbiFunctionForArgs,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type {\n  IsNarrowable,\n  NoInfer,\n  Prettify,\n  UnionEvaluate,\n  UnionOmit,\n} from '../../types/utils.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { WriteContractParameters } from '../wallet/writeContract.js'\nimport { type CallErrorType, type CallParameters, call } from './call.js'\n\nexport type GetMutabilityAwareValue<\n  abi extends Abi | readonly unknown[],\n  mutability extends AbiStateMutability = AbiStateMutability,\n  functionName extends ContractFunctionName<\n    abi,\n    mutability\n  > = ContractFunctionName<abi, mutability>,\n  valueType = TransactionRequest['value'],\n  args extends ContractFunctionArgs<\n    abi,\n    mutability,\n    functionName\n  > = ContractFunctionArgs<abi, mutability, functionName>,\n  abiFunction extends AbiFunction = abi extends Abi\n    ? ExtractAbiFunctionForArgs<abi, mutability, functionName, args>\n    : AbiFunction,\n  _Narrowable extends boolean = IsNarrowable<abi, Abi>,\n> = _Narrowable extends true\n  ? abiFunction['stateMutability'] extends 'payable'\n    ? { value?: NoInfer<valueType> | undefined }\n    : abiFunction['payable'] extends true\n      ? { value?: NoInfer<valueType> | undefined }\n      : { value?: undefined }\n  : { value?: NoInfer<valueType> | undefined }\n\nexport type SimulateContractParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends ContractFunctionName<\n    abi,\n    'nonpayable' | 'payable'\n  > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  accountOverride extends Account | Address | null | undefined = undefined,\n  ///\n  derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n  callParameters extends\n    CallParameters<derivedChain> = CallParameters<derivedChain>,\n> = {\n  account?: accountOverride | null | undefined\n  chain?: chainOverride | undefined\n  /** Data to append to the end of the calldata. Useful for adding a [\"domain\" tag](https://opensea.notion.site/opensea/Seaport-Order-Attributions-ec2d69bf455041a5baa490941aad307f). */\n  dataSuffix?: Hex | undefined\n} & ContractFunctionParameters<\n  abi,\n  'nonpayable' | 'payable',\n  functionName,\n  args\n> &\n  UnionOmit<\n    callParameters,\n    | 'account'\n    | 'batch'\n    | 'code'\n    | 'to'\n    | 'data'\n    | 'factory'\n    | 'factoryData'\n    | 'value'\n  > &\n  GetMutabilityAwareValue<\n    abi,\n    'nonpayable' | 'payable',\n    functionName,\n    callParameters['value'],\n    args\n  >\n\nexport type SimulateContractReturnType<\n  out abi extends Abi | readonly unknown[] = Abi,\n  in out functionName extends ContractFunctionName<\n    abi,\n    'nonpayable' | 'payable'\n  > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  in out args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n  /** @ts-expect-error cast variance */\n  out chain extends Chain | undefined = Chain | undefined,\n  out account extends Account | undefined = Account | undefined,\n  out chainOverride extends Chain | undefined = Chain | undefined,\n  out accountOverride extends Account | Address | null | undefined =\n    | Account\n    | Address\n    | null\n    | undefined,\n  ///\n  in out minimizedAbi extends Abi = readonly [\n    ExtractAbiFunctionForArgs<\n      abi extends Abi ? abi : Abi,\n      'nonpayable' | 'payable',\n      functionName,\n      args\n    >,\n  ],\n  out resolvedAccount extends\n    | Account\n    | null\n    | undefined = accountOverride extends Account | Address | null\n    ? ParseAccount<accountOverride>\n    : account,\n> = {\n  result: ContractFunctionReturnType<\n    minimizedAbi,\n    'nonpayable' | 'payable',\n    functionName,\n    args\n  >\n  request: Prettify<\n    UnionEvaluate<\n      UnionOmit<\n        WriteContractParameters<\n          minimizedAbi,\n          functionName,\n          args,\n          chain,\n          undefined,\n          chainOverride\n        >,\n        'account' | 'abi' | 'args' | 'chain' | 'functionName'\n      >\n    > &\n      ContractFunctionParameters<\n        minimizedAbi,\n        'nonpayable' | 'payable',\n        functionName,\n        args\n      > & {\n        chain: DeriveChain<chain, chainOverride>\n      } & (resolvedAccount extends Account | null\n        ? { account: resolvedAccount }\n        : { account?: undefined })\n  >\n}\n\nexport type SimulateContractErrorType =\n  | ParseAccountErrorType\n  | EncodeFunctionDataErrorType\n  | GetContractErrorReturnType<CallErrorType | DecodeFunctionResultErrorType>\n  | ErrorType\n\n/**\n * Simulates/validates a contract interaction. This is useful for retrieving **return data** and **revert reasons** of contract write functions.\n *\n * - Docs: https://viem.sh/docs/contract/simulateContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts\n *\n * This function does not require gas to execute and _**does not**_ change the state of the blockchain. It is almost identical to [`readContract`](https://viem.sh/docs/contract/readContract), but also supports contract write functions.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link SimulateContractParameters}\n * @returns The simulation result and write request. {@link SimulateContractReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { simulateContract } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const result = await simulateContract(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   abi: parseAbi(['function mint(uint32) view returns (uint32)']),\n *   functionName: 'mint',\n *   args: ['69420'],\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function simulateContract<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  const args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  >,\n  chainOverride extends Chain | undefined = undefined,\n  accountOverride extends Account | Address | null | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: SimulateContractParameters<\n    abi,\n    functionName,\n    args,\n    chain,\n    chainOverride,\n    accountOverride\n  >,\n): Promise<\n  SimulateContractReturnType<\n    abi,\n    functionName,\n    args,\n    chain,\n    account,\n    chainOverride,\n    accountOverride\n  >\n> {\n  const {\n    abi,\n    address,\n    args,\n    functionName,\n    dataSuffix = typeof client.dataSuffix === 'string'\n      ? client.dataSuffix\n      : client.dataSuffix?.value,\n    ...callRequest\n  } = parameters as SimulateContractParameters\n\n  const account = callRequest.account\n    ? parseAccount(callRequest.account)\n    : client.account\n  const calldata = encodeFunctionData({ abi, args, functionName })\n\n  try {\n    const { data } = await getAction(\n      client,\n      call,\n      'call',\n    )({\n      batch: false,\n      data: `${calldata}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n      to: address,\n      ...callRequest,\n      account,\n    })\n    const result = decodeFunctionResult({\n      abi,\n      args,\n      functionName,\n      data: data || '0x',\n    })\n    const minimizedAbi = abi.filter(\n      (abiItem) =>\n        'name' in abiItem && abiItem.name === parameters.functionName,\n    )\n    return {\n      result,\n      request: {\n        abi: minimizedAbi,\n        address,\n        args,\n        dataSuffix,\n        functionName,\n        ...callRequest,\n        account,\n      },\n    } as unknown as SimulateContractReturnType<\n      abi,\n      functionName,\n      args,\n      chain,\n      account,\n      chainOverride,\n      accountOverride\n    >\n  } catch (error) {\n    throw getContractError(error as BaseError, {\n      abi,\n      address,\n      args,\n      docsPath: '/docs/contract/simulateContract',\n      functionName,\n      sender: account?.address,\n    })\n  }\n}\n", "import type { ErrorType } from '../errors/utils.js'\nimport type { MaybePromise } from '../types/utils.js'\n\ntype Callback = ((...args: any[]) => any) | undefined\ntype Callbacks = Record<string, Callback>\n\nexport type ObserveErrorType = ErrorType\n\n/** @internal */\nexport const listenersCache = /*#__PURE__*/ new Map<\n  string,\n  { id: number; fns: Callbacks }[]\n>()\n/** @internal */\nexport const cleanupCache = /*#__PURE__*/ new Map<\n  string,\n  () => void | Promise<void>\n>()\n\ntype EmitFunction<callbacks extends Callbacks> = (\n  emit: callbacks,\n) => MaybePromise<void | (() => void) | (() => Promise<void>)>\n\nlet callbackCount = 0\n\n/**\n * @description Sets up an observer for a given function. If another function\n * is set up under the same observer id, the function will only be called once\n * for both instances of the observer.\n */\nexport function observe<callbacks extends Callbacks>(\n  observerId: string,\n  callbacks: callbacks,\n  fn: EmitFunction<callbacks>,\n) {\n  const callbackId = ++callbackCount\n\n  const getListeners = () => listenersCache.get(observerId) || []\n\n  const unsubscribe = () => {\n    const listeners = getListeners()\n    listenersCache.set(\n      observerId,\n      listeners.filter((cb: any) => cb.id !== callbackId),\n    )\n  }\n\n  const unwatch = () => {\n    const listeners = getListeners()\n    if (!listeners.some((cb: any) => cb.id === callbackId)) return\n    const cleanup = cleanupCache.get(observerId)\n    if (listeners.length === 1 && cleanup) {\n      const p = cleanup()\n      if (p instanceof Promise) p.catch(() => {})\n    }\n    unsubscribe()\n  }\n\n  const listeners = getListeners()\n  listenersCache.set(observerId, [\n    ...listeners,\n    { id: callbackId, fns: callbacks },\n  ])\n\n  if (listeners && listeners.length > 0) return unwatch\n\n  const emit: callbacks = {} as callbacks\n  for (const key in callbacks) {\n    emit[key] = ((\n      ...args: Parameters<NonNullable<callbacks[keyof callbacks]>>\n    ) => {\n      const listeners = getListeners()\n      if (listeners.length === 0) return\n      for (const listener of listeners) listener.fns[key]?.(...args)\n    }) as callbacks[Extract<keyof callbacks, string>]\n  }\n\n  const cleanup = fn(emit)\n  if (typeof cleanup === 'function') cleanupCache.set(observerId, cleanup)\n\n  return unwatch\n}\n", "export async function wait(time: number) {\n  return new Promise((res) => setTimeout(res, time))\n}\n", "import type { ErrorType } from '../errors/utils.js'\nimport { wait } from './wait.js'\n\ntype PollOptions<data> = {\n  // Whether or not to emit when the polling starts.\n  emitOnBegin?: boolean | undefined\n  // The initial wait time (in ms) before polling.\n  initialWaitTime?: ((data: data | void) => Promise<number>) | undefined\n  // The interval (in ms).\n  interval: number\n}\n\nexport type PollErrorType = ErrorType\n\n/**\n * @description Polls a function at a specified interval.\n */\nexport function poll<data>(\n  fn: ({ unpoll }: { unpoll: () => void }) => Promise<data | void>,\n  { emitOnBegin, initialWaitTime, interval }: PollOptions<data>,\n) {\n  let active = true\n\n  const unwatch = () => (active = false)\n\n  const watch = async () => {\n    let data: data | undefined | void\n    if (emitOnBegin) data = await fn({ unpoll: unwatch })\n\n    const initialWait = (await initialWaitTime?.(data)) ?? interval\n    await wait(initialWait)\n\n    const poll = async () => {\n      if (!active) return\n      await fn({ unpoll: unwatch })\n      await wait(interval)\n      poll()\n    }\n\n    poll()\n  }\n  watch()\n\n  return unwatch\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\n/** @internal */\nexport const promiseCache = /*#__PURE__*/ new Map()\n/** @internal */\nexport const responseCache = /*#__PURE__*/ new Map()\n\nexport type GetCacheErrorType = ErrorType\n\nexport function getCache<data>(cacheKey: string) {\n  const buildCache = <data>(cacheKey: string, cache: Map<string, data>) => ({\n    clear: () => cache.delete(cacheKey),\n    get: () => cache.get(cacheKey),\n    set: (data: data) => cache.set(cacheKey, data),\n  })\n\n  const promise = buildCache<Promise<data>>(cacheKey, promiseCache)\n  const response = buildCache<{ created: Date; data: data }>(\n    cacheKey,\n    responseCache,\n  )\n\n  return {\n    clear: () => {\n      promise.clear()\n      response.clear()\n    },\n    promise,\n    response,\n  }\n}\n\ntype WithCacheParameters = {\n  /** The key to cache the data against. */\n  cacheKey: string\n  /** The time that cached data will remain in memory. Default: Infinity (no expiry) */\n  cacheTime?: number | undefined\n}\n\n/**\n * @description Returns the result of a given promise, and caches the result for\n * subsequent invocations against a provided cache key.\n */\nexport async function withCache<data>(\n  fn: () => Promise<data>,\n  { cacheKey, cacheTime = Number.POSITIVE_INFINITY }: WithCacheParameters,\n) {\n  const cache = getCache<data>(cacheKey)\n\n  // If a response exists in the cache, and it's not expired, return it\n  // and do not invoke the promise.\n  // If the max age is 0, the cache is disabled.\n  const response = cache.response.get()\n  if (response && cacheTime > 0) {\n    const age = Date.now() - response.created.getTime()\n    if (age < cacheTime) return response.data\n  }\n\n  let promise = cache.promise.get()\n  if (!promise) {\n    promise = fn()\n\n    // Store the promise in the cache so that subsequent invocations\n    // will wait for the same promise to resolve (deduping).\n    cache.promise.set(promise)\n  }\n\n  try {\n    const data = await promise\n\n    // Store the response in the cache so that subsequent invocations\n    // will return the same response.\n    cache.response.set({ created: new Date(), data })\n\n    return data\n  } finally {\n    // Clear the promise cache so that subsequent invocations will\n    // invoke the promise again.\n    cache.promise.clear()\n  }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type GetCacheErrorType,\n  getCache,\n  withCache,\n} from '../../utils/promise/withCache.js'\n\nexport type GetBlockNumberParameters = {\n  /** Time (in ms) that cached block number will remain in memory. */\n  cacheTime?: number | undefined\n}\n\nexport type GetBlockNumberReturnType = bigint\n\nexport type GetBlockNumberErrorType = RequestErrorType | ErrorType\n\nconst cacheKey = (id: string) => `blockNumber.${id}`\n\n/** @internal */\nexport type GetBlockNumberCacheErrorType = GetCacheErrorType | ErrorType\n\n/** @internal */\nexport function getBlockNumberCache(id: string) {\n  return getCache(cacheKey(id))\n}\n\n/**\n * Returns the number of the most recent block seen.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlockNumber\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods: [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber)\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockNumberParameters}\n * @returns The number of the block. {@link GetBlockNumberReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlockNumber } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const blockNumber = await getBlockNumber(client)\n * // 69420n\n */\nexport async function getBlockNumber<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { cacheTime = client.cacheTime }: GetBlockNumberParameters = {},\n): Promise<GetBlockNumberReturnType> {\n  const blockNumberHex = await withCache(\n    () =>\n      client.request({\n        method: 'eth_blockNumber',\n      }),\n    { cacheKey: cacheKey(client.uid), cacheTime },\n  )\n  return BigInt(blockNumberHex)\n}\n", "import type { Abi, AbiEvent, ExtractAbiEvent } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { RpcLog } from '../../index.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter, FilterType } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { DecodeEventLogErrorType } from '../../utils/abi/decodeEventLog.js'\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type FormatLogErrorType,\n  formatLog,\n} from '../../utils/formatters/log.js'\n\nexport type GetFilterChangesParameters<\n  filterType extends FilterType = FilterType,\n  abi extends Abi | readonly unknown[] | undefined = undefined,\n  eventName extends string | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n  filter: Filter<filterType, abi, eventName, any, strict, fromBlock, toBlock>\n}\n\nexport type GetFilterChangesReturnType<\n  filterType extends FilterType = FilterType,\n  abi extends Abi | readonly unknown[] | undefined = undefined,\n  eventName extends string | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  _AbiEvent extends AbiEvent | undefined = abi extends Abi\n    ? eventName extends string\n      ? ExtractAbiEvent<abi, eventName>\n      : undefined\n    : undefined,\n  _Pending extends boolean =\n    | (fromBlock extends 'pending' ? true : false)\n    | (toBlock extends 'pending' ? true : false),\n> = filterType extends 'event'\n  ? Log<bigint, number, _Pending, _AbiEvent, strict, abi, eventName>[]\n  : Hash[]\n\nexport type GetFilterChangesErrorType =\n  | RequestErrorType\n  | DecodeEventLogErrorType\n  | FormatLogErrorType\n  | ErrorType\n\n/**\n * Returns a list of logs or hashes based on a [Filter](/docs/glossary/terms#filter) since the last time it was called.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFilterChanges\n * - JSON-RPC Methods: [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges)\n *\n * A Filter can be created from the following actions:\n *\n * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n * - [`createContractEventFilter`](https://viem.sh/docs/contract/createContractEventFilter)\n * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n *\n * Depending on the type of filter, the return value will be different:\n *\n * - If the filter was created with `createContractEventFilter` or `createEventFilter`, it returns a list of logs.\n * - If the filter was created with `createPendingTransactionFilter`, it returns a list of transaction hashes.\n * - If the filter was created with `createBlockFilter`, it returns a list of block hashes.\n *\n * @param client - Client to use\n * @param parameters - {@link GetFilterChangesParameters}\n * @returns Logs or hashes. {@link GetFilterChangesReturnType}\n *\n * @example\n * // Blocks\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createBlockFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createBlockFilter(client)\n * const hashes = await getFilterChanges(client, { filter })\n *\n * @example\n * // Contract Events\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createContractEventFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createContractEventFilter(client, {\n *   address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n *   abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n *   eventName: 'Transfer',\n * })\n * const logs = await getFilterChanges(client, { filter })\n *\n * @example\n * // Raw Events\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createEventFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createEventFilter(client, {\n *   address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n *   event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n * })\n * const logs = await getFilterChanges(client, { filter })\n *\n * @example\n * // Transactions\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createPendingTransactionFilter(client)\n * const hashes = await getFilterChanges(client, { filter })\n */\nexport async function getFilterChanges<\n  transport extends Transport,\n  chain extends Chain | undefined,\n  filterType extends FilterType,\n  const abi extends Abi | readonly unknown[] | undefined,\n  eventName extends string | undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n  _client: Client<transport, chain>,\n  {\n    filter,\n  }: GetFilterChangesParameters<\n    filterType,\n    abi,\n    eventName,\n    strict,\n    fromBlock,\n    toBlock\n  >,\n): Promise<\n  GetFilterChangesReturnType<\n    filterType,\n    abi,\n    eventName,\n    strict,\n    fromBlock,\n    toBlock\n  >\n> {\n  const strict = 'strict' in filter && filter.strict\n\n  const logs = await filter.request({\n    method: 'eth_getFilterChanges',\n    params: [filter.id],\n  })\n\n  if (typeof logs[0] === 'string')\n    return logs as GetFilterChangesReturnType<\n      filterType,\n      abi,\n      eventName,\n      strict,\n      fromBlock,\n      toBlock\n    >\n\n  const formattedLogs = logs.map((log) => formatLog(log as RpcLog))\n  if (!('abi' in filter) || !filter.abi)\n    return formattedLogs as GetFilterChangesReturnType<\n      filterType,\n      abi,\n      eventName,\n      strict,\n      fromBlock,\n      toBlock\n    >\n  return parseEventLogs({\n    abi: filter.abi,\n    logs: formattedLogs,\n    strict,\n  }) as unknown as GetFilterChangesReturnType<\n    filterType,\n    abi,\n    eventName,\n    strict,\n    fromBlock,\n    toBlock\n  >\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type UninstallFilterParameters = {\n  filter: Filter<any>\n}\nexport type UninstallFilterReturnType = boolean\n\nexport type UninstallFilterErrorType = RequestErrorType | ErrorType\n\n/**\n * Destroys a [`Filter`](https://viem.sh/docs/glossary/types#filter).\n *\n * - Docs: https://viem.sh/docs/actions/public/uninstallFilter\n * - JSON-RPC Methods: [`eth_uninstallFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_uninstallFilter)\n *\n * Destroys a Filter that was created from one of the following Actions:\n * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n *\n * @param client - Client to use\n * @param parameters - {@link UninstallFilterParameters}\n * @returns A boolean indicating if the Filter was successfully uninstalled. {@link UninstallFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter, uninstallFilter } from 'viem/public'\n *\n * const filter = await createPendingTransactionFilter(client)\n * const uninstalled = await uninstallFilter(client, { filter })\n * // true\n */\nexport async function uninstallFilter<\n  transport extends Transport,\n  chain extends Chain | undefined,\n>(\n  _client: Client<transport, chain>,\n  { filter }: UninstallFilterParameters,\n): Promise<UninstallFilterReturnType> {\n  return filter.request({\n    method: 'eth_uninstallFilter',\n    params: [filter.id],\n  })\n}\n", "import type { Abi, Address, ExtractAbiEvent } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  DecodeLogDataMismatch,\n  DecodeLogTopicsMismatch,\n} from '../../errors/abi.js'\nimport { InvalidInputRpcError } from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractEventArgs,\n  ContractEventName,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { LogTopic } from '../../types/misc.js'\nimport type { GetPollOptions } from '../../types/transport.js'\nimport { decodeEventLog } from '../../utils/abi/decodeEventLog.js'\nimport {\n  type EncodeEventTopicsParameters,\n  encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport { formatLog } from '../../utils/formatters/log.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\nimport { createContractEventFilter } from './createContractEventFilter.js'\nimport { getBlockNumber } from './getBlockNumber.js'\nimport {\n  type GetContractEventsParameters,\n  getContractEvents,\n} from './getContractEvents.js'\nimport { getFilterChanges } from './getFilterChanges.js'\nimport { uninstallFilter } from './uninstallFilter.js'\n\nexport type WatchContractEventOnLogsParameter<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> = ContractEventName<abi>,\n  strict extends boolean | undefined = undefined,\n> = abi extends Abi\n  ? Abi extends abi\n    ? Log[]\n    : Log<bigint, number, false, ExtractAbiEvent<abi, eventName>, strict>[]\n  : Log[]\n\nexport type WatchContractEventOnLogsFn<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> = ContractEventName<abi>,\n  strict extends boolean | undefined = undefined,\n> = (logs: WatchContractEventOnLogsParameter<abi, eventName, strict>) => void\n\nexport type WatchContractEventParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined = ContractEventName<abi>,\n  strict extends boolean | undefined = undefined,\n  transport extends Transport = Transport,\n> = {\n  /** The address of the contract. */\n  address?: Address | Address[] | undefined\n  /** Contract ABI. */\n  abi: abi\n  args?:\n    | ContractEventArgs<\n        abi,\n        eventName extends ContractEventName<abi>\n          ? eventName\n          : ContractEventName<abi>\n      >\n    | undefined\n  /** Contract event. */\n  eventName?: eventName | ContractEventName<abi> | undefined\n  /** Block to start listening from. */\n  fromBlock?: BlockNumber<bigint> | undefined\n  /** The callback to call when an error occurred when trying to get for a new block. */\n  onError?: ((error: Error) => void) | undefined\n  /** The callback to call when new event logs are received. */\n  onLogs: WatchContractEventOnLogsFn<\n    abi,\n    eventName extends ContractEventName<abi>\n      ? eventName\n      : ContractEventName<abi>,\n    strict\n  >\n  /**\n   * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n   * @default false\n   */\n  strict?: strict | boolean | undefined\n} & GetPollOptions<transport>\n\nexport type WatchContractEventReturnType = () => void\n\nexport type WatchContractEventErrorType =\n  | StringifyErrorType\n  | ObserveErrorType\n  | ErrorType\n\n/**\n * Watches and returns emitted contract event logs.\n *\n * - Docs: https://viem.sh/docs/contract/watchContractEvent\n *\n * This Action will batch up all the event logs found within the [`pollingInterval`](https://viem.sh/docs/contract/watchContractEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/contract/watchContractEvent#onLogs).\n *\n * `watchContractEvent` will attempt to create an [Event Filter](https://viem.sh/docs/contract/createContractEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchContractEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchContractEventParameters}\n * @returns A function that can be invoked to stop watching for new event logs. {@link WatchContractEventReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchContractEvent } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const unwatch = watchContractEvent(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   abi: parseAbi(['event Transfer(address indexed from, address indexed to, uint256 value)']),\n *   eventName: 'Transfer',\n *   args: { from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b' },\n *   onLogs: (logs) => console.log(logs),\n * })\n */\nexport function watchContractEvent<\n  chain extends Chain | undefined,\n  const abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi> | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  transport extends Transport = Transport,\n>(\n  client: Client<transport, chain>,\n  parameters: WatchContractEventParameters<abi, eventName, strict, transport>,\n): WatchContractEventReturnType {\n  const {\n    abi,\n    address,\n    args,\n    batch = true,\n    eventName,\n    fromBlock,\n    onError,\n    onLogs,\n    poll: poll_,\n    pollingInterval = client.pollingInterval,\n    strict: strict_,\n  } = parameters\n\n  const enablePolling = (() => {\n    if (typeof poll_ !== 'undefined') return poll_\n    if (typeof fromBlock === 'bigint') return true\n    if (\n      client.transport.type === 'webSocket' ||\n      client.transport.type === 'ipc'\n    )\n      return false\n    if (\n      client.transport.type === 'fallback' &&\n      (client.transport.transports[0].config.type === 'webSocket' ||\n        client.transport.transports[0].config.type === 'ipc')\n    )\n      return false\n    return true\n  })()\n\n  const pollContractEvent = () => {\n    const strict = strict_ ?? false\n    const observerId = stringify([\n      'watchContractEvent',\n      address,\n      args,\n      batch,\n      client.uid,\n      eventName,\n      pollingInterval,\n      strict,\n      fromBlock,\n    ])\n\n    return observe(observerId, { onLogs, onError }, (emit) => {\n      let previousBlockNumber: bigint\n      if (fromBlock !== undefined) previousBlockNumber = fromBlock - 1n\n      let filter: Filter<'event', abi, eventName> | undefined\n      let initialized = false\n\n      const unwatch = poll(\n        async () => {\n          if (!initialized) {\n            try {\n              filter = (await getAction(\n                client,\n                createContractEventFilter,\n                'createContractEventFilter',\n              )({\n                abi,\n                address,\n                args: args as any,\n                eventName: eventName as any,\n                strict: strict as any,\n                fromBlock,\n              })) as Filter<'event', abi, eventName>\n            } catch {}\n            initialized = true\n            return\n          }\n\n          try {\n            let logs: Log[]\n            if (filter) {\n              logs = await getAction(\n                client,\n                getFilterChanges,\n                'getFilterChanges',\n              )({ filter })\n            } else {\n              // If the filter doesn't exist, we will fall back to use `getLogs`.\n              // The fall back exists because some RPC Providers do not support filters.\n\n              // Fetch the block number to use for `getLogs`.\n              const blockNumber = await getAction(\n                client,\n                getBlockNumber,\n                'getBlockNumber',\n              )({})\n\n              // If the block number has changed, we will need to fetch the logs.\n              // If the block number doesn't exist, we are yet to reach the first poll interval,\n              // so do not emit any logs.\n              if (previousBlockNumber && previousBlockNumber < blockNumber) {\n                logs = await getAction(\n                  client,\n                  getContractEvents,\n                  'getContractEvents',\n                )({\n                  abi,\n                  address,\n                  args,\n                  eventName,\n                  fromBlock: previousBlockNumber + 1n,\n                  toBlock: blockNumber,\n                  strict,\n                } as {} as GetContractEventsParameters)\n              } else {\n                logs = []\n              }\n              previousBlockNumber = blockNumber\n            }\n\n            if (logs.length === 0) return\n            if (batch) emit.onLogs(logs as any)\n            else for (const log of logs) emit.onLogs([log] as any)\n          } catch (err) {\n            // If a filter has been set and gets uninstalled, providers will throw an InvalidInput error.\n            // Reinitialize the filter when this occurs\n            if (filter && err instanceof InvalidInputRpcError)\n              initialized = false\n            emit.onError?.(err as Error)\n          }\n        },\n        {\n          emitOnBegin: true,\n          interval: pollingInterval,\n        },\n      )\n\n      return async () => {\n        if (filter)\n          await getAction(\n            client,\n            uninstallFilter,\n            'uninstallFilter',\n          )({ filter })\n        unwatch()\n      }\n    })\n  }\n\n  const subscribeContractEvent = () => {\n    const strict = strict_ ?? false\n    const observerId = stringify([\n      'watchContractEvent',\n      address,\n      args,\n      batch,\n      client.uid,\n      eventName,\n      pollingInterval,\n      strict,\n    ])\n\n    let active = true\n    let unsubscribe = () => (active = false)\n    return observe(observerId, { onLogs, onError }, (emit) => {\n      ;(async () => {\n        try {\n          const transport = (() => {\n            if (client.transport.type === 'fallback') {\n              const transport = client.transport.transports.find(\n                (transport: ReturnType<Transport>) =>\n                  transport.config.type === 'webSocket' ||\n                  transport.config.type === 'ipc',\n              )\n              if (!transport) return client.transport\n              return transport.value\n            }\n            return client.transport\n          })()\n\n          const topics: LogTopic[] = eventName\n            ? encodeEventTopics({\n                abi: abi,\n                eventName: eventName,\n                args,\n              } as EncodeEventTopicsParameters)\n            : []\n\n          const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n            params: ['logs', { address, topics }],\n            onData(data: any) {\n              if (!active) return\n              const log = data.result\n              try {\n                const { eventName, args } = decodeEventLog({\n                  abi: abi,\n                  data: log.data,\n                  topics: log.topics as any,\n                  strict: strict_,\n                })\n                const formatted = formatLog(log, {\n                  args,\n                  eventName: eventName as string,\n                })\n                emit.onLogs([formatted] as any)\n              } catch (err) {\n                let eventName: string | undefined\n                let isUnnamed: boolean | undefined\n                if (\n                  err instanceof DecodeLogDataMismatch ||\n                  err instanceof DecodeLogTopicsMismatch\n                ) {\n                  // If strict mode is on, and log data/topics do not match event definition, skip.\n                  if (strict_) return\n                  eventName = err.abiItem.name\n                  isUnnamed = err.abiItem.inputs?.some(\n                    (x) => !('name' in x && x.name),\n                  )\n                }\n\n                // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).\n                const formatted = formatLog(log, {\n                  args: isUnnamed ? [] : {},\n                  eventName,\n                })\n                emit.onLogs([formatted] as any)\n              }\n            },\n            onError(error: Error) {\n              emit.onError?.(error)\n            },\n          })\n          unsubscribe = unsubscribe_\n          if (!active) unsubscribe()\n        } catch (err) {\n          onError?.(err as Error)\n        }\n      })()\n      return () => unsubscribe()\n    })\n  }\n\n  return enablePolling ? pollContractEvent() : subscribeContractEvent()\n}\n", "import { BaseError } from './base.js'\n\nexport type AccountNotFoundErrorType = AccountNotFoundError & {\n  name: 'AccountNotFoundError'\n}\nexport class AccountNotFoundError extends BaseError {\n  constructor({ docsPath }: { docsPath?: string | undefined } = {}) {\n    super(\n      [\n        'Could not find an Account to execute with this Action.',\n        'Please provide an Account with the `account` argument on the Action, or by supplying an `account` to the Client.',\n      ].join('\\n'),\n      {\n        docsPath,\n        docsSlug: 'account',\n        name: 'AccountNotFoundError',\n      },\n    )\n  }\n}\n\nexport type AccountTypeNotSupportedErrorType = AccountTypeNotSupportedError & {\n  name: 'AccountTypeNotSupportedError'\n}\nexport class AccountTypeNotSupportedError extends BaseError {\n  constructor({\n    docsPath,\n    metaMessages,\n    type,\n  }: {\n    docsPath?: string | undefined\n    metaMessages?: string[] | undefined\n    type: string\n  }) {\n    super(`Account type \"${type}\" is not supported.`, {\n      docsPath,\n      metaMessages,\n      name: 'AccountTypeNotSupportedError',\n    })\n  }\n}\n", "import {\n  ChainMismatchError,\n  type ChainMismatchErrorType,\n  ChainNotFoundError,\n  type ChainNotFoundErrorType,\n} from '../../errors/chain.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\n\nexport type AssertCurrentChainParameters = {\n  chain?: Chain | undefined\n  currentChainId: number\n}\n\nexport type AssertCurrentChainErrorType =\n  | ChainNotFoundErrorType\n  | ChainMismatchErrorType\n  | ErrorType\n\nexport function assertCurrentChain({\n  chain,\n  currentChainId,\n}: AssertCurrentChainParameters): void {\n  if (!chain) throw new ChainNotFoundError()\n  if (currentChainId !== chain.id)\n    throw new ChainMismatchError({ chain, currentChainId })\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { TransactionSerializedGeneric } from '../../types/transaction.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type SendRawTransactionParameters = {\n  /** The signed serialized transaction. */\n  serializedTransaction: TransactionSerializedGeneric\n}\n\nexport type SendRawTransactionReturnType = Hash\n\nexport type SendRawTransactionErrorType = RequestErrorType | ErrorType\n\n/**\n * Sends a **signed** transaction to the network\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransaction\n * - JSON-RPC Method: [`eth_sendRawTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)\n *\n * @param client - Client to use\n * @param parameters - {@link SendRawTransactionParameters}\n * @returns The transaction hash. {@link SendRawTransactionReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendRawTransaction } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n *\n * const hash = await sendRawTransaction(client, {\n *   serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n * })\n */\nexport async function sendRawTransaction<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { serializedTransaction }: SendRawTransactionParameters,\n): Promise<SendRawTransactionReturnType> {\n  return client.request(\n    {\n      method: 'eth_sendRawTransaction',\n      params: [serializedTransaction],\n    },\n    { retryCount: 0 },\n  )\n}\n", "import type { Address } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { SignTransactionErrorType } from '../../accounts/utils/signTransaction.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  AccountNotFoundError,\n  type AccountNotFoundErrorType,\n  AccountTypeNotSupportedError,\n  type AccountTypeNotSupportedErrorType,\n} from '../../errors/account.js'\nimport { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { GetAccountParameter } from '../../types/account.js'\nimport type {\n  Chain,\n  DeriveChain,\n  GetChainParameter,\n} from '../../types/chain.js'\nimport type { GetTransactionRequestKzgParameter } from '../../types/kzg.js'\nimport type { Hash, Hex } from '../../types/misc.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n  type RecoverAuthorizationAddressErrorType,\n  recoverAuthorizationAddress,\n} from '../../utils/authorization/recoverAuthorizationAddress.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type AssertCurrentChainErrorType,\n  assertCurrentChain,\n} from '../../utils/chain/assertCurrentChain.js'\nimport { concat } from '../../utils/data/concat.js'\nimport {\n  type GetTransactionErrorReturnType,\n  getTransactionError,\n} from '../../utils/errors/getTransactionError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { LruMap } from '../../utils/lru.js'\nimport {\n  type AssertRequestErrorType,\n  type AssertRequestParameters,\n  assertRequest,\n} from '../../utils/transaction/assertRequest.js'\nimport { type GetChainIdErrorType, getChainId } from '../public/getChainId.js'\nimport {\n  defaultParameters,\n  type PrepareTransactionRequestErrorType,\n  prepareTransactionRequest,\n} from './prepareTransactionRequest.js'\nimport {\n  type SendRawTransactionErrorType,\n  sendRawTransaction,\n} from './sendRawTransaction.js'\n\nconst supportsWalletNamespace = new LruMap<boolean>(128)\n\nexport type SendTransactionRequest<\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  ///\n  _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = UnionOmit<FormattedTransactionRequest<_derivedChain>, 'from'> &\n  GetTransactionRequestKzgParameter\n\nexport type SendTransactionParameters<\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  request extends SendTransactionRequest<\n    chain,\n    chainOverride\n  > = SendTransactionRequest<chain, chainOverride>,\n> = request &\n  GetAccountParameter<account, Account | Address, true, true> &\n  GetChainParameter<chain, chainOverride> &\n  GetTransactionRequestKzgParameter<request> & {\n    /** Whether to assert that the client chain is on the correct chain. @default true */\n    assertChainId?: boolean | undefined\n    /** Data to append to the end of the calldata. Takes precedence over `client.dataSuffix`. */\n    dataSuffix?: Hex | undefined\n  }\n\nexport type SendTransactionReturnType = Hash\n\nexport type SendTransactionErrorType =\n  | ParseAccountErrorType\n  | GetTransactionErrorReturnType<\n      | AccountNotFoundErrorType\n      | AccountTypeNotSupportedErrorType\n      | AssertCurrentChainErrorType\n      | AssertRequestErrorType\n      | GetChainIdErrorType\n      | PrepareTransactionRequestErrorType\n      | SendRawTransactionErrorType\n      | RecoverAuthorizationAddressErrorType\n      | SignTransactionErrorType\n      | RequestErrorType\n    >\n  | ErrorType\n\n/**\n * Creates, signs, and sends a new transaction to the network.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendTransaction\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions\n * - JSON-RPC Methods:\n *   - JSON-RPC Accounts: [`eth_sendTransaction`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sendtransaction)\n *   - Local Accounts: [`eth_sendRawTransaction`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sendrawtransaction)\n *\n * @param client - Client to use\n * @param parameters - {@link SendTransactionParameters}\n * @returns The [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash. {@link SendTransactionReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendTransaction } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const hash = await sendTransaction(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *   value: 1000000000000000000n,\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { sendTransaction } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   account: privateKeyToAccount('0x\u2026'),\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const hash = await sendTransaction(client, {\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *   value: 1000000000000000000n,\n * })\n */\nexport async function sendTransaction<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  const request extends SendTransactionRequest<chain, chainOverride>,\n  chainOverride extends Chain | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: SendTransactionParameters<chain, account, chainOverride, request>,\n): Promise<SendTransactionReturnType> {\n  const {\n    account: account_ = client.account,\n    assertChainId = true,\n    chain = client.chain,\n    accessList,\n    authorizationList,\n    blobs,\n    data,\n    dataSuffix = typeof client.dataSuffix === 'string'\n      ? client.dataSuffix\n      : client.dataSuffix?.value,\n    gas,\n    gasPrice,\n    maxFeePerBlobGas,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    nonce,\n    type,\n    value,\n    ...rest\n  } = parameters\n\n  if (typeof account_ === 'undefined')\n    throw new AccountNotFoundError({\n      docsPath: '/docs/actions/wallet/sendTransaction',\n    })\n  const account = account_ ? parseAccount(account_) : null\n\n  try {\n    assertRequest(parameters as AssertRequestParameters)\n\n    const to = await (async () => {\n      // If `to` exists on the parameters, use that.\n      if (parameters.to) return parameters.to\n\n      // If `to` is null, we are sending a deployment transaction.\n      if (parameters.to === null) return undefined\n\n      // If no `to` exists, and we are sending a EIP-7702 transaction, use the\n      // address of the first authorization in the list.\n      if (authorizationList && authorizationList.length > 0)\n        return await recoverAuthorizationAddress({\n          authorization: authorizationList[0],\n        }).catch(() => {\n          throw new BaseError(\n            '`to` is required. Could not infer from `authorizationList`.',\n          )\n        })\n\n      // Otherwise, we are sending a deployment transaction.\n      return undefined\n    })()\n\n    if (account?.type === 'json-rpc' || account === null) {\n      let chainId: number | undefined\n      if (chain !== null) {\n        chainId = await getAction(client, getChainId, 'getChainId')({})\n        if (assertChainId)\n          assertCurrentChain({\n            currentChainId: chainId,\n            chain,\n          })\n      }\n\n      const chainFormat = client.chain?.formatters?.transactionRequest?.format\n      const format = chainFormat || formatTransactionRequest\n\n      const request = format(\n        {\n          // Pick out extra data that might exist on the chain's transaction request type.\n          ...extract(rest, { format: chainFormat }),\n          accessList,\n          account,\n          authorizationList,\n          blobs,\n          chainId,\n          data: dataSuffix ? concat([data ?? '0x', dataSuffix]) : data,\n          gas,\n          gasPrice,\n          maxFeePerBlobGas,\n          maxFeePerGas,\n          maxPriorityFeePerGas,\n          nonce,\n          to,\n          type,\n          value,\n        } as TransactionRequest,\n        'sendTransaction',\n      )\n\n      const isWalletNamespaceSupported = supportsWalletNamespace.get(client.uid)\n      const method = isWalletNamespaceSupported\n        ? 'wallet_sendTransaction'\n        : 'eth_sendTransaction'\n\n      try {\n        return await client.request(\n          {\n            method,\n            params: [request],\n          },\n          { retryCount: 0 },\n        )\n      } catch (e) {\n        if (isWalletNamespaceSupported === false) throw e\n\n        const error = e as BaseError\n        // If the transport does not support the method or input, attempt to use the\n        // `wallet_sendTransaction` method.\n        if (\n          error.name === 'InvalidInputRpcError' ||\n          error.name === 'InvalidParamsRpcError' ||\n          error.name === 'MethodNotFoundRpcError' ||\n          error.name === 'MethodNotSupportedRpcError'\n        ) {\n          return await client\n            .request(\n              {\n                method: 'wallet_sendTransaction',\n                params: [request],\n              },\n              { retryCount: 0 },\n            )\n            .then((hash) => {\n              supportsWalletNamespace.set(client.uid, true)\n              return hash\n            })\n            .catch((e) => {\n              const walletNamespaceError = e as BaseError\n              if (\n                walletNamespaceError.name === 'MethodNotFoundRpcError' ||\n                walletNamespaceError.name === 'MethodNotSupportedRpcError'\n              ) {\n                supportsWalletNamespace.set(client.uid, false)\n                throw error\n              }\n\n              throw walletNamespaceError\n            })\n        }\n\n        throw error\n      }\n    }\n\n    if (account?.type === 'local') {\n      // Prepare the request for signing (assign appropriate fees, etc.)\n      const request = await getAction(\n        client,\n        prepareTransactionRequest,\n        'prepareTransactionRequest',\n      )({\n        account,\n        accessList,\n        authorizationList,\n        blobs,\n        chain,\n        data: dataSuffix ? concat([data ?? '0x', dataSuffix]) : data,\n        gas,\n        gasPrice,\n        maxFeePerBlobGas,\n        maxFeePerGas,\n        maxPriorityFeePerGas,\n        nonce,\n        nonceManager: account.nonceManager,\n        parameters: [...defaultParameters, 'sidecars'],\n        type,\n        value,\n        ...rest,\n        to,\n      } as any)\n\n      const serializer = chain?.serializers?.transaction\n      const serializedTransaction = (await account.signTransaction(\n        request as never,\n        {\n          serializer,\n        },\n      )) as Hash\n      return await getAction(\n        client,\n        sendRawTransaction,\n        'sendRawTransaction',\n      )({\n        serializedTransaction,\n      })\n    }\n\n    if (account?.type === 'smart')\n      throw new AccountTypeNotSupportedError({\n        metaMessages: [\n          'Consider using the `sendUserOperation` Action instead.',\n        ],\n        docsPath: '/docs/actions/bundler/sendUserOperation',\n        type: 'smart',\n      })\n\n    throw new AccountTypeNotSupportedError({\n      docsPath: '/docs/actions/wallet/sendTransaction',\n      type: (account as any)?.type,\n    })\n  } catch (err) {\n    if (err instanceof AccountTypeNotSupportedError) throw err\n    throw getTransactionError(err as BaseError, {\n      ...parameters,\n      account,\n      chain: parameters.chain || undefined,\n    })\n  }\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  AccountNotFoundError,\n  type AccountNotFoundErrorType,\n} from '../../errors/account.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { GetAccountParameter } from '../../types/account.js'\nimport type {\n  Chain,\n  DeriveChain,\n  GetChainParameter,\n} from '../../types/chain.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n  ContractFunctionParameters,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { Prettify, UnionEvaluate, UnionOmit } from '../../types/utils.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  type EncodeFunctionDataParameters,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from '../../utils/errors/getContractError.js'\nimport type { FormattedTransactionRequest } from '../../utils/formatters/transactionRequest.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { GetMutabilityAwareValue } from '../public/simulateContract.js'\nimport {\n  type SendTransactionErrorType,\n  type SendTransactionReturnType,\n  sendTransaction,\n} from './sendTransaction.js'\nimport type { sendTransactionSync } from './sendTransactionSync.js'\n\nexport type WriteContractParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends ContractFunctionName<\n    abi,\n    'nonpayable' | 'payable'\n  > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  ///\n  allFunctionNames = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = ContractFunctionParameters<\n  abi,\n  'nonpayable' | 'payable',\n  functionName,\n  args,\n  false,\n  allFunctionNames\n> &\n  GetChainParameter<chain, chainOverride> &\n  Prettify<\n    GetAccountParameter<account, Account | Address, true, true> &\n      GetMutabilityAwareValue<\n        abi,\n        'nonpayable' | 'payable',\n        functionName,\n        FormattedTransactionRequest<derivedChain>['value'],\n        args\n      > & {\n        /** Data to append to the end of the calldata. Useful for adding a [\"domain\" tag](https://opensea.notion.site/opensea/Seaport-Order-Attributions-ec2d69bf455041a5baa490941aad307f). */\n        dataSuffix?: Hex | undefined\n      }\n  > &\n  UnionEvaluate<\n    UnionOmit<\n      FormattedTransactionRequest<derivedChain>,\n      'data' | 'from' | 'to' | 'value'\n    >\n  >\n\nexport type WriteContractReturnType = SendTransactionReturnType\n\nexport type WriteContractErrorType =\n  | EncodeFunctionDataErrorType\n  | AccountNotFoundErrorType\n  | ParseAccountErrorType\n  | GetContractErrorReturnType<SendTransactionErrorType>\n  | ErrorType\n\n/**\n * Executes a write function on a contract.\n *\n * - Docs: https://viem.sh/docs/contract/writeContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts\n *\n * A \"write\" function on a Solidity contract modifies the state of the blockchain. These types of functions require gas to be executed, and hence a [Transaction](https://viem.sh/docs/glossary/terms) is needed to be broadcast in order to change the state.\n *\n * Internally, uses a [Wallet Client](https://viem.sh/docs/clients/wallet) to call the [`sendTransaction` action](https://viem.sh/docs/actions/wallet/sendTransaction) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * __Warning: The `write` internally sends a transaction \u2013 it does not validate if the contract write will succeed (the contract may throw an error). It is highly recommended to [simulate the contract write with `contract.simulate`](https://viem.sh/docs/contract/writeContract#usage) before you execute it.__\n *\n * @param client - Client to use\n * @param parameters - {@link WriteContractParameters}\n * @returns A [Transaction Hash](https://viem.sh/docs/glossary/terms#hash). {@link WriteContractReturnType}\n *\n * @example\n * import { createWalletClient, custom, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { writeContract } from 'viem/contract'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const hash = await writeContract(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),\n *   functionName: 'mint',\n *   args: [69420],\n * })\n *\n * @example\n * // With Validation\n * import { createWalletClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { simulateContract, writeContract } from 'viem/contract'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const { request } = await simulateContract(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),\n *   functionName: 'mint',\n *   args: [69420],\n * }\n * const hash = await writeContract(client, request)\n */\nexport async function writeContract<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  >,\n  chainOverride extends Chain | undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: WriteContractParameters<\n    abi,\n    functionName,\n    args,\n    chain,\n    account,\n    chainOverride\n  >,\n): Promise<WriteContractReturnType> {\n  return writeContract.internal(\n    client,\n    sendTransaction,\n    'sendTransaction',\n    parameters,\n  ) as never\n}\n\nexport namespace writeContract {\n  export async function internal<\n    chain extends Chain | undefined,\n    account extends Account | undefined,\n    const abi extends Abi | readonly unknown[],\n    functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n    args extends ContractFunctionArgs<\n      abi,\n      'nonpayable' | 'payable',\n      functionName\n    >,\n    chainOverride extends Chain | undefined,\n  >(\n    client: Client<Transport, chain, account>,\n    actionFn: typeof sendTransaction | typeof sendTransactionSync,\n    name: 'sendTransaction' | 'sendTransactionSync',\n    parameters: WriteContractParameters<\n      abi,\n      functionName,\n      args,\n      chain,\n      account,\n      chainOverride\n    >,\n  ) {\n    const {\n      abi,\n      account: account_ = client.account,\n      address,\n      args,\n      functionName,\n      ...request\n    } = parameters as WriteContractParameters\n\n    if (typeof account_ === 'undefined')\n      throw new AccountNotFoundError({\n        docsPath: '/docs/contract/writeContract',\n      })\n    const account = account_ ? parseAccount(account_) : null\n\n    const data = encodeFunctionData({\n      abi,\n      args,\n      functionName,\n    } as EncodeFunctionDataParameters)\n\n    try {\n      return await getAction(\n        client,\n        actionFn as never,\n        name,\n      )({\n        data,\n        to: address,\n        account,\n        ...request,\n      })\n    } catch (error) {\n      throw getContractError(error as BaseError, {\n        abi,\n        address,\n        args,\n        docsPath: '/docs/contract/writeContract',\n        functionName,\n        sender: account?.address,\n      })\n    }\n  }\n}\n", "import type {\n  Abi,\n  AbiEvent,\n  AbiFunction,\n  AbiParametersToPrimitiveTypes,\n  Address,\n  ExtractAbiEvent,\n  ExtractAbiEventNames,\n  ExtractAbiFunction,\n  ExtractAbiFunctionNames,\n} from 'abitype'\n\nimport type { Account } from '../accounts/types.js'\nimport type { Client } from '../clients/createClient.js'\nimport type { Transport } from '../clients/transports/createTransport.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Chain } from '../types/chain.js'\nimport type {\n  AbiEventParametersToPrimitiveTypes,\n  ContractEventName,\n  ContractFunctionArgs,\n  ContractFunctionName,\n  MaybeExtractEventArgsFromAbi,\n} from '../types/contract.js'\nimport type {\n  IsNarrowable,\n  IsNever,\n  IsUndefined,\n  Or,\n  Prettify,\n  UnionOmit,\n} from '../types/utils.js'\nimport { getAction } from '../utils/getAction.js'\nimport {\n  type CreateContractEventFilterParameters,\n  type CreateContractEventFilterReturnType,\n  createContractEventFilter,\n} from './public/createContractEventFilter.js'\nimport {\n  type EstimateContractGasParameters,\n  type EstimateContractGasReturnType,\n  estimateContractGas,\n} from './public/estimateContractGas.js'\nimport {\n  type GetContractEventsParameters,\n  type GetContractEventsReturnType,\n  getContractEvents,\n} from './public/getContractEvents.js'\nimport {\n  type ReadContractParameters,\n  type ReadContractReturnType,\n  readContract,\n} from './public/readContract.js'\nimport {\n  type SimulateContractParameters,\n  type SimulateContractReturnType,\n  simulateContract,\n} from './public/simulateContract.js'\nimport {\n  type WatchContractEventParameters,\n  type WatchContractEventReturnType,\n  watchContractEvent,\n} from './public/watchContractEvent.js'\nimport {\n  type WriteContractParameters,\n  type WriteContractReturnType,\n  writeContract,\n} from './wallet/writeContract.js'\n\ntype KeyedClient<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n> =\n  | {\n      public?: Client<transport, chain> | undefined\n      wallet: Client<transport, chain, account>\n    }\n  | {\n      public: Client<transport, chain>\n      wallet?: Client<transport, chain, account> | undefined\n    }\n\nexport type GetContractParameters<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  abi extends Abi | readonly unknown[] = Abi,\n  client extends\n    | Client<transport, chain, account>\n    | KeyedClient<transport, chain, account> =\n    | Client<transport, chain, account>\n    | KeyedClient<transport, chain, account>,\n  address extends Address = Address,\n> = {\n  /** Contract ABI */\n  abi: abi\n  /** Contract address */\n  address: address\n  /** The Client.\n   *\n   * If you pass in a [`publicClient`](https://viem.sh/docs/clients/public), the following methods are available:\n   *\n   * - [`createEventFilter`](https://viem.sh/docs/contract/createContractEventFilter)\n   * - [`estimateGas`](https://viem.sh/docs/contract/estimateContractGas)\n   * - [`getEvents`](https://viem.sh/docs/contract/getContractEvents)\n   * - [`read`](https://viem.sh/docs/contract/readContract)\n   * - [`simulate`](https://viem.sh/docs/contract/simulateContract)\n   * - [`watchEvent`](https://viem.sh/docs/contract/watchContractEvent)\n   *\n   * If you pass in a [`walletClient`](https://viem.sh/docs/clients/wallet), the following methods are available:\n   *\n   * - [`estimateGas`](https://viem.sh/docs/contract/estimateContractGas)\n   * - [`write`](https://viem.sh/docs/contract/writeContract)\n   */\n  client: client\n}\n\nexport type GetContractReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  client extends Client | KeyedClient = Client | KeyedClient,\n  address extends Address = Address,\n  //\n  _eventNames extends string = abi extends Abi\n    ? Abi extends abi\n      ? string\n      : ExtractAbiEventNames<abi>\n    : string,\n  _readFunctionNames extends string = abi extends Abi\n    ? Abi extends abi\n      ? string\n      : ExtractAbiFunctionNames<abi, 'pure' | 'view'>\n    : string,\n  _writeFunctionNames extends string = abi extends Abi\n    ? Abi extends abi\n      ? string\n      : ExtractAbiFunctionNames<abi, 'nonpayable' | 'payable'>\n    : string,\n  _narrowable extends boolean = IsNarrowable<abi, Abi>,\n  _publicClient extends Client | unknown = client extends {\n    public: Client\n  }\n    ? client['public']\n    : client,\n  _walletClient extends Client | unknown = client extends {\n    wallet: Client\n  }\n    ? client['wallet']\n    : client,\n> = Prettify<\n  Prettify<\n    (_publicClient extends Client\n      ? (IsNever<_readFunctionNames> extends true\n          ? unknown\n          : {\n              /**\n               * Calls a read-only function on a contract, and returns the response.\n               *\n               * A \"read-only\" function (constant function) on a Solidity contract is denoted by a `view` or `pure` keyword. They can only read the state of the contract, and cannot make any changes to it. Since read-only methods do not change the state of the contract, they do not require any gas to be executed, and can be called by any user without the need to pay for gas.\n               *\n               * Internally, `read` uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n               *\n               * @example\n               * import { createPublicClient, getContract, http, parseAbi } from 'viem'\n               * import { mainnet } from 'viem/chains'\n               *\n               * const publicClient = createPublicClient({\n               *   chain: mainnet,\n               *   transport: http(),\n               * })\n               * const contract = getContract({\n               *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n               *   abi: parseAbi([\n               *     'function balanceOf(address owner) view returns (uint256)',\n               *   ]),\n               *   client: publicClient,\n               * })\n               * const result = await contract.read.balanceOf(['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'])\n               * // 424122n\n               */\n              read: {\n                [functionName in _readFunctionNames]: GetReadFunction<\n                  _narrowable,\n                  abi,\n                  functionName extends ContractFunctionName<\n                    abi,\n                    'pure' | 'view'\n                  >\n                    ? functionName\n                    : never\n                >\n              }\n            }) &\n          (IsNever<_writeFunctionNames> extends true\n            ? unknown\n            : {\n                /**\n                 * Estimates the gas necessary to complete a transaction without submitting it to the network.\n                 *\n                 * @example\n                 * import { createPublicClient, getContract, http, parseAbi } from 'viem'\n                 * import { mainnet } from 'viem/chains'\n                 *\n                 * const publicClient = createPublicClient({\n                 *   chain: mainnet,\n                 *   transport: http(),\n                 * })\n                 * const contract = getContract({\n                 *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n                 *   abi: parseAbi(['function mint() public']),\n                 *   client: publicClient,\n                 * })\n                 * const gas = await contract.estimateGas.mint({\n                 *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n                 * })\n                 */\n                estimateGas: {\n                  [functionName in _writeFunctionNames]: GetEstimateFunction<\n                    _narrowable,\n                    _publicClient['chain'],\n                    undefined,\n                    abi,\n                    functionName extends ContractFunctionName<\n                      abi,\n                      'nonpayable' | 'payable'\n                    >\n                      ? functionName\n                      : never\n                  >\n                }\n                /**\n                 * Simulates/validates a contract interaction. This is useful for retrieving return data and revert reasons of contract write functions.\n                 *\n                 * This function does not require gas to execute and does not change the state of the blockchain. It is almost identical to [`readContract`](https://viem.sh/docs/contract/readContract), but also supports contract write functions.\n                 *\n                 * Internally, `simulate` uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n                 *\n                 * @example\n                 * import { createPublicClient, getContract, http, parseAbi } from 'viem'\n                 * import { mainnet } from 'viem/chains'\n                 *\n                 * const publicClient = createPublicClient({\n                 *   chain: mainnet,\n                 *   transport: http(),\n                 * })\n                 * const contract = getContract({\n                 *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n                 *   abi: parseAbi(['function mint() public']),\n                 *   client: publicClient,\n                 * })\n                 * const result = await contract.simulate.mint({\n                 *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n                 * })\n                 */\n                simulate: {\n                  [functionName in _writeFunctionNames]: GetSimulateFunction<\n                    _narrowable,\n                    _publicClient['chain'],\n                    _walletClient extends Client\n                      ? _walletClient['account']\n                      : _publicClient['account'],\n                    abi,\n                    functionName extends ContractFunctionName<\n                      abi,\n                      'nonpayable' | 'payable'\n                    >\n                      ? functionName\n                      : never\n                  >\n                }\n              }) &\n          (IsNever<_eventNames> extends true\n            ? unknown\n            : {\n                /**\n                 * Creates a Filter to retrieve event logs that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges) or [`getFilterLogs`](https://viem.sh/docs/actions/public/getFilterLogs).\n                 *\n                 * @example\n                 * import { createPublicClient, getContract, http, parseAbi } from 'viem'\n                 * import { mainnet } from 'viem/chains'\n                 *\n                 * const publicClient = createPublicClient({\n                 *   chain: mainnet,\n                 *   transport: http(),\n                 * })\n                 * const contract = getContract({\n                 *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n                 *   abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n                 *   client: publicClient,\n                 * })\n                 * const filter = await contract.createEventFilter.Transfer()\n                 */\n                createEventFilter: {\n                  [EventName in _eventNames]: GetEventFilter<\n                    _narrowable,\n                    abi,\n                    EventName extends ContractEventName<abi> ? EventName : never\n                  >\n                }\n                /**\n                 * Creates a Filter to retrieve event logs that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges) or [`getFilterLogs`](https://viem.sh/docs/actions/public/getFilterLogs).\n                 *\n                 * @example\n                 * import { createPublicClient, getContract, http, parseAbi } from 'viem'\n                 * import { mainnet } from 'viem/chains'\n                 *\n                 * const publicClient = createPublicClient({\n                 *   chain: mainnet,\n                 *   transport: http(),\n                 * })\n                 * const contract = getContract({\n                 *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n                 *   abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n                 *   client: publicClient,\n                 * })\n                 * const filter = await contract.createEventFilter.Transfer()\n                 */\n                getEvents: {\n                  [EventName in _eventNames]: GetEventsFunction<\n                    _narrowable,\n                    abi,\n                    EventName extends ContractEventName<abi> ? EventName : never\n                  >\n                }\n                /**\n                 * Watches and returns emitted contract event logs.\n                 *\n                 * This Action will batch up all the event logs found within the [`pollingInterval`](https://viem.sh/docs/contract/watchContractEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/contract/watchContractEvent#onLogs).\n                 *\n                 * `watchEvent` will attempt to create an [Event Filter](https://viem.sh/docs/contract/createContractEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n                 *\n                 * @example\n                 * import { createPublicClient, getContract, http, parseAbi } from 'viem'\n                 * import { mainnet } from 'viem/chains'\n                 *\n                 * const publicClient = createPublicClient({\n                 *   chain: mainnet,\n                 *   transport: http(),\n                 * })\n                 * const contract = getContract({\n                 *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n                 *   abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n                 *   client: publicClient,\n                 * })\n                 * const filter = await contract.createEventFilter.Transfer()\n                 * const unwatch = contract.watchEvent.Transfer(\n                 *   { from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b' },\n                 *   { onLogs: (logs) => console.log(logs) },\n                 * )\n                 */\n                watchEvent: {\n                  [EventName in _eventNames]: GetWatchEvent<\n                    _narrowable,\n                    abi,\n                    EventName extends ContractEventName<abi> ? EventName : never\n                  >\n                }\n              })\n      : unknown) &\n      (_walletClient extends Client\n        ? IsNever<_writeFunctionNames> extends true\n          ? unknown\n          : {\n              /**\n               * Estimates the gas necessary to complete a transaction without submitting it to the network.\n               *\n               * @example\n               * import { createWalletClient, getContract, http, parseAbi } from 'viem'\n               * import { mainnet } from 'viem/chains'\n               *\n               * const walletClient = createWalletClient({\n               *   chain: mainnet,\n               *   transport: http(),\n               * })\n               * const contract = getContract({\n               *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n               *   abi: parseAbi(['function mint() public']),\n               *   client: walletClient,\n               * })\n               * const gas = await contract.estimateGas.mint({\n               *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n               * })\n               */\n              estimateGas: {\n                [functionName in _writeFunctionNames]: GetEstimateFunction<\n                  _narrowable,\n                  _walletClient['chain'],\n                  _walletClient['account'],\n                  abi,\n                  functionName extends ContractFunctionName<\n                    abi,\n                    'nonpayable' | 'payable'\n                  >\n                    ? functionName\n                    : never\n                >\n              }\n              /**\n               * Executes a write function on a contract.\n               *\n               * A \"write\" function on a Solidity contract modifies the state of the blockchain. These types of functions require gas to be executed, and hence a [Transaction](https://viem.sh/docs/glossary/terms) is needed to be broadcast in order to change the state.\n               *\n               * Internally, `write` uses a [Wallet Client](https://viem.sh/docs/clients/wallet) to call the [`sendTransaction` action](https://viem.sh/docs/actions/wallet/sendTransaction) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n               *\n               * __Warning: The `write` internally sends a transaction \u2013 it does not validate if the contract write will succeed (the contract may throw an error). It is highly recommended to [simulate the contract write with `contract.simulate`](https://viem.sh/docs/contract/writeContract#usage) before you execute it.__\n               *\n               * @example\n               * import { createWalletClient, getContract, http, parseAbi } from 'viem'\n               * import { mainnet } from 'viem/chains'\n               *\n               * const walletClient = createWalletClient({\n               *   chain: mainnet,\n               *   transport: http(),\n               * })\n               * const contract = getContract({\n               *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n               *   abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),\n               *   client: walletClient,\n               * })\n               * const hash = await contract.write.min([69420], {\n               *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n               * })\n               */\n              write: {\n                [functionName in _writeFunctionNames]: GetWriteFunction<\n                  _narrowable,\n                  _walletClient['chain'],\n                  _walletClient['account'],\n                  abi,\n                  functionName extends ContractFunctionName<\n                    abi,\n                    'nonpayable' | 'payable'\n                  >\n                    ? functionName\n                    : never\n                >\n              }\n            }\n        : unknown)\n  > & { address: address; abi: abi }\n>\n\nexport type GetContractErrorType = ErrorType\n\n/**\n * Gets type-safe interface for performing contract-related actions with a specific `abi` and `address`.\n *\n * - Docs https://viem.sh/docs/contract/getContract\n *\n * Using Contract Instances can make it easier to work with contracts if you don't want to pass the `abi` and `address` properties every time you perform contract actions, e.g. [`readContract`](https://viem.sh/docs/contract/readContract), [`writeContract`](https://viem.sh/docs/contract/writeContract), [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas), etc.\n *\n * @example\n * import { createPublicClient, getContract, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const publicClient = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const contract = getContract({\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   abi: parseAbi([\n *     'function balanceOf(address owner) view returns (uint256)',\n *     'function ownerOf(uint256 tokenId) view returns (address)',\n *     'function totalSupply() view returns (uint256)',\n *   ]),\n *   client: publicClient,\n * })\n */\nexport function getContract<\n  transport extends Transport,\n  address extends Address,\n  const abi extends Abi | readonly unknown[],\n  const client extends\n    | Client<transport, chain, account>\n    | KeyedClient<transport, chain, account>,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n>({\n  abi,\n  address,\n  client: client_,\n}: GetContractParameters<\n  transport,\n  chain,\n  account,\n  abi,\n  client,\n  address\n>): GetContractReturnType<abi, client, address> {\n  const client = client_ as\n    | Client<transport, chain, account>\n    | KeyedClient<transport, chain, account>\n\n  const [publicClient, walletClient] = (() => {\n    if (!client) return [undefined, undefined]\n    if ('public' in client && 'wallet' in client)\n      return [client.public as Client, client.wallet as Client]\n    if ('public' in client) return [client.public as Client, undefined]\n    if ('wallet' in client) return [undefined, client.wallet as Client]\n    return [client, client]\n  })()\n\n  const hasPublicClient = publicClient !== undefined && publicClient !== null\n  const hasWalletClient = walletClient !== undefined && walletClient !== null\n\n  const contract: {\n    [_ in\n      | 'abi'\n      | 'address'\n      | 'createEventFilter'\n      | 'estimateGas'\n      | 'getEvents'\n      | 'read'\n      | 'simulate'\n      | 'watchEvent'\n      | 'write']?: unknown\n  } = {}\n\n  let hasReadFunction = false\n  let hasWriteFunction = false\n  let hasEvent = false\n  for (const item of abi as Abi) {\n    if (item.type === 'function')\n      if (item.stateMutability === 'view' || item.stateMutability === 'pure')\n        hasReadFunction = true\n      else hasWriteFunction = true\n    else if (item.type === 'event') hasEvent = true\n    // Exit early if all flags are `true`\n    if (hasReadFunction && hasWriteFunction && hasEvent) break\n  }\n\n  if (hasPublicClient) {\n    if (hasReadFunction)\n      contract.read = new Proxy(\n        {},\n        {\n          get(_, functionName: string) {\n            return (\n              ...parameters: [\n                args?: readonly unknown[] | undefined,\n                options?: UnionOmit<\n                  ReadContractParameters,\n                  'abi' | 'address' | 'functionName' | 'args'\n                >,\n              ]\n            ) => {\n              const { args, options } = getFunctionParameters(parameters)\n              return getAction(\n                publicClient,\n                readContract,\n                'readContract',\n              )({\n                abi,\n                address,\n                functionName,\n                args,\n                ...options,\n              } as ReadContractParameters)\n            }\n          },\n        },\n      )\n\n    if (hasWriteFunction)\n      contract.simulate = new Proxy(\n        {},\n        {\n          get(_, functionName: string) {\n            return (\n              ...parameters: [\n                args?: readonly unknown[],\n                options?: UnionOmit<\n                  SimulateContractParameters,\n                  'abi' | 'address' | 'functionName' | 'args'\n                >,\n              ]\n            ) => {\n              const { args, options } = getFunctionParameters(parameters)\n              return getAction(\n                publicClient,\n                simulateContract,\n                'simulateContract',\n              )({\n                abi,\n                address,\n                functionName,\n                args,\n                ...options,\n              } as SimulateContractParameters)\n            }\n          },\n        },\n      )\n\n    if (hasEvent) {\n      contract.createEventFilter = new Proxy(\n        {},\n        {\n          get(_, eventName: string) {\n            return (\n              ...parameters: [\n                args?: readonly unknown[] | object,\n                options?: Omit<\n                  CreateContractEventFilterParameters,\n                  'abi' | 'address' | 'eventName' | 'args'\n                >,\n              ]\n            ) => {\n              const abiEvent = (abi as readonly AbiEvent[]).find(\n                (x: AbiEvent) => x.type === 'event' && x.name === eventName,\n              )\n              const { args, options } = getEventParameters(\n                parameters,\n                abiEvent!,\n              )\n              return getAction(\n                publicClient,\n                createContractEventFilter,\n                'createContractEventFilter',\n              )({\n                abi,\n                address,\n                eventName,\n                args,\n                ...options,\n              } as CreateContractEventFilterParameters)\n            }\n          },\n        },\n      )\n      contract.getEvents = new Proxy(\n        {},\n        {\n          get(_, eventName: string) {\n            return (\n              ...parameters: [\n                args?: readonly unknown[] | object,\n                options?: Omit<\n                  GetContractEventsParameters,\n                  'abi' | 'address' | 'eventName'\n                >,\n              ]\n            ) => {\n              const abiEvent = (abi as readonly AbiEvent[]).find(\n                (x: AbiEvent) => x.type === 'event' && x.name === eventName,\n              )\n              const { args, options } = getEventParameters(\n                parameters,\n                abiEvent!,\n              )\n              return getAction(\n                publicClient,\n                getContractEvents,\n                'getContractEvents',\n              )({\n                abi,\n                address,\n                eventName,\n                args,\n                ...options,\n              } as unknown as GetContractEventsParameters)\n            }\n          },\n        },\n      )\n      contract.watchEvent = new Proxy(\n        {},\n        {\n          get(_, eventName: string) {\n            return (\n              ...parameters: [\n                args?: readonly unknown[] | object,\n                options?: Omit<\n                  WatchContractEventParameters,\n                  'abi' | 'address' | 'eventName'\n                >,\n              ]\n            ) => {\n              const abiEvent = (abi as readonly AbiEvent[]).find(\n                (x: AbiEvent) => x.type === 'event' && x.name === eventName,\n              )\n              const { args, options } = getEventParameters(\n                parameters,\n                abiEvent!,\n              )\n              return getAction(\n                publicClient,\n                watchContractEvent,\n                'watchContractEvent',\n              )({\n                abi,\n                address,\n                eventName,\n                args,\n                ...options,\n              } as unknown as WatchContractEventParameters)\n            }\n          },\n        },\n      )\n    }\n  }\n\n  if (hasWalletClient) {\n    if (hasWriteFunction)\n      contract.write = new Proxy(\n        {},\n        {\n          get(_, functionName: string) {\n            return (\n              ...parameters: [\n                args?: readonly unknown[],\n                options?: UnionOmit<\n                  WriteContractParameters,\n                  'abi' | 'address' | 'functionName' | 'args'\n                >,\n              ]\n            ) => {\n              const { args, options } = getFunctionParameters(parameters)\n              return getAction(\n                walletClient,\n                writeContract,\n                'writeContract',\n              )({\n                abi,\n                address,\n                functionName,\n                args,\n                ...(options as any),\n              })\n            }\n          },\n        },\n      )\n  }\n\n  if (hasPublicClient || hasWalletClient)\n    if (hasWriteFunction)\n      contract.estimateGas = new Proxy(\n        {},\n        {\n          get(_, functionName: string) {\n            return (\n              ...parameters: [\n                args?: readonly unknown[],\n                options?: UnionOmit<\n                  EstimateContractGasParameters,\n                  'abi' | 'address' | 'functionName' | 'args'\n                >,\n              ]\n            ) => {\n              const { args, options } = getFunctionParameters(parameters)\n              const client = (publicClient ?? walletClient)!\n              return getAction(\n                client,\n                estimateContractGas,\n                'estimateContractGas',\n              )({\n                abi,\n                address,\n                functionName,\n                args,\n                ...options,\n                account:\n                  (options as EstimateContractGasParameters).account ??\n                  (walletClient as unknown as Client).account,\n              } as any)\n            }\n          },\n        },\n      )\n  contract.address = address\n  contract.abi = abi\n\n  return contract as unknown as GetContractReturnType<abi, client, address>\n}\n\n/**\n * @internal exporting for testing only\n */\nexport function getFunctionParameters(\n  values: [args?: readonly unknown[] | undefined, options?: object | undefined],\n) {\n  const hasArgs = values.length && Array.isArray(values[0])\n  const args = hasArgs ? values[0]! : []\n  const options = (hasArgs ? values[1] : values[0]) ?? {}\n  return { args, options }\n}\n\n/**\n * @internal exporting for testing only\n */\nexport function getEventParameters(\n  values: [args?: object | unknown[], options?: object],\n  abiEvent: AbiEvent,\n) {\n  let hasArgs = false\n  // If first item is array, must be `args`\n  if (Array.isArray(values[0])) hasArgs = true\n  // Check if first item is `args` or `options`\n  else if (values.length === 1) {\n    // if event has indexed inputs, must have `args`\n    hasArgs = abiEvent.inputs.some((x) => x.indexed)\n    // If there are two items in array, must have `args`\n  } else if (values.length === 2) {\n    hasArgs = true\n  }\n\n  const args = hasArgs ? values[0]! : undefined\n  const options = (hasArgs ? values[1] : values[0]) ?? {}\n  return { args, options }\n}\n\ntype GetReadFunction<\n  narrowable extends boolean,\n  abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi, 'pure' | 'view'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'pure' | 'view',\n    functionName\n  > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n  abiFunction extends AbiFunction = abi extends Abi\n    ? ExtractAbiFunction<abi, functionName>\n    : AbiFunction,\n  //\n  _args = AbiParametersToPrimitiveTypes<abiFunction['inputs'], 'inputs', true>,\n  _options = Prettify<\n    UnionOmit<\n      ReadContractParameters<abi, functionName, args>,\n      'abi' | 'address' | 'args' | 'functionName'\n    >\n  >,\n> = narrowable extends true\n  ? (\n      ...parameters: _args extends readonly []\n        ? [options?: _options]\n        : [args: _args, options?: _options]\n    ) => Promise<ReadContractReturnType<abi, functionName, args>>\n  : (\n      ...parameters:\n        | [options?: _options]\n        | [args: readonly unknown[], options?: _options]\n    ) => Promise<ReadContractReturnType>\n\ntype GetEstimateFunction<\n  narrowable extends boolean,\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n  abiFunction extends AbiFunction = abi extends Abi\n    ? ExtractAbiFunction<abi, functionName>\n    : AbiFunction,\n  //\n  _args = AbiParametersToPrimitiveTypes<abiFunction['inputs'], 'inputs', true>,\n  _options = Prettify<\n    UnionOmit<\n      EstimateContractGasParameters<abi, functionName, args, chain>,\n      'abi' | 'address' | 'args' | 'functionName'\n    >\n  >,\n  // For making `options` parameter required if `account`\n  IsOptionsRequired = IsUndefined<account>,\n> = narrowable extends true\n  ? (\n      ...parameters: _args extends readonly []\n        ? IsOptionsRequired extends true\n          ? [options: _options]\n          : [options?: _options]\n        : [\n            args: _args,\n            ...parameters: IsOptionsRequired extends true\n              ? [options: _options]\n              : [options?: _options],\n          ]\n    ) => Promise<EstimateContractGasReturnType>\n  : (\n      ...parameters:\n        | (IsOptionsRequired extends true\n            ? [options: _options]\n            : [options?: _options])\n        | [\n            args: readonly unknown[],\n            ...parameters: IsOptionsRequired extends true\n              ? [options: _options]\n              : [options?: _options],\n          ]\n    ) => Promise<EstimateContractGasReturnType>\n\ntype GetSimulateFunction<\n  narrowable extends boolean,\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n  abiFunction extends AbiFunction = abi extends Abi\n    ? ExtractAbiFunction<abi, functionName>\n    : AbiFunction,\n  //\n  _args = AbiParametersToPrimitiveTypes<abiFunction['inputs'], 'inputs', true>,\n> = narrowable extends true\n  ? <\n      chainOverride extends Chain | undefined = undefined,\n      accountOverride extends Account | Address | undefined = undefined,\n    >(\n      ...parameters: _args extends readonly []\n        ? [\n            options?: Omit<\n              SimulateContractParameters<\n                abi,\n                functionName,\n                args,\n                chain,\n                chainOverride,\n                accountOverride\n              >,\n              'abi' | 'address' | 'args' | 'functionName'\n            >,\n          ]\n        : [\n            args: _args,\n            options?: Omit<\n              SimulateContractParameters<\n                abi,\n                functionName,\n                args,\n                chain,\n                chainOverride,\n                accountOverride\n              >,\n              'abi' | 'address' | 'args' | 'functionName'\n            >,\n          ]\n    ) => Promise<\n      SimulateContractReturnType<\n        abi,\n        functionName,\n        args,\n        chain,\n        account,\n        chainOverride,\n        accountOverride\n      >\n    >\n  : <\n      chainOverride extends Chain | undefined = undefined,\n      accountOverride extends Account | Address | undefined = undefined,\n    >(\n      ...parameters:\n        | [\n            options?: Omit<\n              SimulateContractParameters<\n                abi,\n                functionName,\n                args,\n                chain,\n                chainOverride,\n                accountOverride\n              >,\n              'abi' | 'address' | 'args' | 'functionName'\n            >,\n          ]\n        | [\n            args: readonly unknown[],\n            options?: Omit<\n              SimulateContractParameters<\n                abi,\n                functionName,\n                args,\n                chain,\n                chainOverride,\n                accountOverride\n              >,\n              'abi' | 'address' | 'args' | 'functionName'\n            >,\n          ]\n    ) => Promise<SimulateContractReturnType>\n\ntype GetWriteFunction<\n  narrowable extends boolean,\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n  abiFunction extends AbiFunction = abi extends Abi\n    ? ExtractAbiFunction<abi, functionName>\n    : AbiFunction,\n  //\n  _args = AbiParametersToPrimitiveTypes<abiFunction['inputs'], 'inputs', true>,\n  // For making `options` parameter required if `account` or `chain` is undefined\n  _isOptionsRequired = Or<[IsUndefined<account>, IsUndefined<chain>]>,\n> = narrowable extends true\n  ? <\n      chainOverride extends Chain | undefined,\n      options extends Prettify<\n        UnionOmit<\n          WriteContractParameters<\n            abi,\n            functionName,\n            args,\n            chain,\n            account,\n            chainOverride\n          >,\n          'abi' | 'address' | 'args' | 'functionName'\n        >\n      >,\n    >(\n      ...parameters: _args extends readonly []\n        ? _isOptionsRequired extends true\n          ? [options: options]\n          : [options?: options]\n        : [\n            args: _args,\n            ...parameters: _isOptionsRequired extends true\n              ? [options: options]\n              : [options?: options],\n          ]\n    ) => Promise<WriteContractReturnType>\n  : <\n      chainOverride extends Chain | undefined,\n      options extends Prettify<\n        UnionOmit<\n          WriteContractParameters<\n            abi,\n            functionName,\n            args,\n            chain,\n            account,\n            chainOverride\n          >,\n          'abi' | 'address' | 'args' | 'functionName'\n        >\n      >,\n      Rest extends unknown[] = _isOptionsRequired extends true\n        ? [options: options]\n        : [options?: options],\n    >(\n      ...parameters: Rest | [args: readonly unknown[], ...parameters: Rest]\n    ) => Promise<WriteContractReturnType>\n\ntype GetEventFilter<\n  narrowable extends boolean,\n  abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi>,\n  abiEvent extends AbiEvent = abi extends Abi\n    ? ExtractAbiEvent<abi, eventName>\n    : AbiEvent,\n  //\n  _args = AbiEventParametersToPrimitiveTypes<abiEvent['inputs']>,\n  _options = Prettify<\n    Omit<\n      CreateContractEventFilterParameters<abi, eventName>,\n      'abi' | 'address' | 'args' | 'eventName' | 'strict'\n    >\n  >,\n  IndexedInputs = Extract<abiEvent['inputs'][number], { indexed: true }>,\n> = narrowable extends true\n  ? <\n      const args extends\n        | MaybeExtractEventArgsFromAbi<abi, eventName>\n        | undefined,\n      strict extends boolean | undefined = undefined,\n    >(\n      ...parameters: IsNever<IndexedInputs> extends true\n        ? [options?: _options & { strict?: strict }]\n        : [\n            args: _args | (_args extends args ? Readonly<args> : never),\n            options?: _options & { strict?: strict },\n          ]\n    ) => Promise<\n      CreateContractEventFilterReturnType<abi, eventName, args, strict>\n    >\n  : <strict extends boolean | undefined = undefined>(\n      ...parameters:\n        | [options?: _options & { strict?: strict }]\n        | [\n            args: readonly unknown[] | CreateContractFilterOptions,\n            options?: _options & { strict?: strict },\n          ]\n    ) => Promise<CreateContractEventFilterReturnType>\n\ntype GetEventsFunction<\n  narrowable extends boolean,\n  abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi>,\n  abiEvent extends AbiEvent = abi extends Abi\n    ? ExtractAbiEvent<abi, eventName>\n    : AbiEvent,\n  //\n  _args = AbiEventParametersToPrimitiveTypes<abiEvent['inputs']>,\n  _options = Prettify<\n    Omit<\n      GetContractEventsParameters<abi, eventName>,\n      'abi' | 'address' | 'args' | 'eventName'\n    >\n  >,\n  IndexedInputs = Extract<abiEvent['inputs'][number], { indexed: true }>,\n> = narrowable extends true\n  ? (\n      ...parameters: IsNever<IndexedInputs> extends true\n        ? [options?: _options]\n        : [args?: _args, options?: _options]\n    ) => Promise<GetContractEventsReturnType<abi, eventName>>\n  : (\n      ...parameters:\n        | [options?: _options]\n        | [\n            args?: readonly unknown[] | WatchContractEventOptions,\n            options?: _options,\n          ]\n    ) => Promise<GetContractEventsReturnType<abi, eventName>>\n\ntype GetWatchEvent<\n  narrowable extends boolean,\n  abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi>,\n  abiEvent extends AbiEvent = abi extends Abi\n    ? ExtractAbiEvent<abi, eventName>\n    : AbiEvent,\n  //\n  _args = AbiEventParametersToPrimitiveTypes<abiEvent['inputs']>,\n  _options = Prettify<\n    Omit<\n      WatchContractEventParameters<abi, eventName>,\n      'abi' | 'address' | 'args' | 'eventName'\n    >\n  >,\n  _indexedInputs = Extract<abiEvent['inputs'][number], { indexed: true }>,\n> = narrowable extends true\n  ? (\n      ...parameters: IsNever<_indexedInputs> extends true\n        ? [options: _options]\n        : [args: _args, options: _options]\n    ) => WatchContractEventReturnType\n  : (\n      ...parameters:\n        | [options?: _options]\n        | [\n            args: readonly unknown[] | WatchContractEventOptions,\n            options?: _options,\n          ]\n    ) => WatchContractEventReturnType\n\ntype CreateContractFilterOptions =\n  RemoveProperties<CreateContractEventFilterParameters>\ntype WatchContractEventOptions = RemoveProperties<WatchContractEventParameters>\n\ntype RemoveProperties<T extends object> = Prettify<\n  {\n    [key: string]: unknown\n  } & {\n    [_ in keyof T]?: never\n  }\n>\n", "import type { GetCallsStatusReturnType } from '../actions/wallet/getCallsStatus.js'\nimport { BaseError } from './base.js'\n\nexport type BundleFailedErrorType = BundleFailedError & {\n  name: 'BundleFailedError'\n}\nexport class BundleFailedError extends BaseError {\n  result: GetCallsStatusReturnType\n\n  constructor(result: GetCallsStatusReturnType) {\n    super(`Call bundle failed with status: ${result.statusCode}`, {\n      name: 'BundleFailedError',\n    })\n\n    this.result = result\n  }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport { wait } from '../wait.js'\n\nexport type WithRetryParameters = {\n  // The delay (in ms) between retries.\n  delay?:\n    | ((config: { count: number; error: Error }) => number)\n    | number\n    | undefined\n  // The max number of times to retry.\n  retryCount?: number | undefined\n  // Whether or not to retry when an error is thrown.\n  shouldRetry?:\n    | (({\n        count,\n        error,\n      }: {\n        count: number\n        error: Error\n      }) => Promise<boolean> | boolean)\n    | undefined\n}\n\nexport type WithRetryErrorType = ErrorType\n\nexport function withRetry<data>(\n  fn: () => Promise<data>,\n  {\n    delay: delay_ = 100,\n    retryCount = 2,\n    shouldRetry = () => true,\n  }: WithRetryParameters = {},\n) {\n  return new Promise<data>((resolve, reject) => {\n    const attemptRetry = async ({ count = 0 } = {}) => {\n      const retry = async ({ error }: { error: Error }) => {\n        const delay =\n          typeof delay_ === 'function' ? delay_({ count, error }) : delay_\n        if (delay) await wait(delay)\n        attemptRetry({ count: count + 1 })\n      }\n\n      try {\n        const data = await fn()\n        resolve(data)\n      } catch (err) {\n        if (\n          count < retryCount &&\n          (await shouldRetry({ count, error: err as Error }))\n        )\n          return retry({ error: err as Error })\n        reject(err)\n      }\n    }\n    attemptRetry()\n  })\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type {\n  Chain,\n  ExtractChainFormatterReturnType,\n} from '../../types/chain.js'\nimport type { RpcTransactionReceipt } from '../../types/rpc.js'\nimport type { TransactionReceipt } from '../../types/transaction.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { hexToNumber } from '../encoding/fromHex.js'\n\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\nimport { formatLog } from './log.js'\nimport { transactionType } from './transaction.js'\n\nexport type FormattedTransactionReceipt<\n  chain extends Chain | undefined = undefined,\n> = ExtractChainFormatterReturnType<\n  chain,\n  'transactionReceipt',\n  TransactionReceipt\n>\n\nexport const receiptStatuses = {\n  '0x0': 'reverted',\n  '0x1': 'success',\n} as const\n\nexport type FormatTransactionReceiptErrorType = ErrorType\n\nexport function formatTransactionReceipt(\n  transactionReceipt: ExactPartial<RpcTransactionReceipt>,\n  _?: string | undefined,\n) {\n  const receipt = {\n    ...transactionReceipt,\n    blockNumber: transactionReceipt.blockNumber\n      ? BigInt(transactionReceipt.blockNumber)\n      : null,\n    contractAddress: transactionReceipt.contractAddress\n      ? transactionReceipt.contractAddress\n      : null,\n    cumulativeGasUsed: transactionReceipt.cumulativeGasUsed\n      ? BigInt(transactionReceipt.cumulativeGasUsed)\n      : null,\n    effectiveGasPrice: transactionReceipt.effectiveGasPrice\n      ? BigInt(transactionReceipt.effectiveGasPrice)\n      : null,\n    gasUsed: transactionReceipt.gasUsed\n      ? BigInt(transactionReceipt.gasUsed)\n      : null,\n    logs: transactionReceipt.logs\n      ? transactionReceipt.logs.map((log) => formatLog(log))\n      : null,\n    to: transactionReceipt.to ? transactionReceipt.to : null,\n    transactionIndex: transactionReceipt.transactionIndex\n      ? hexToNumber(transactionReceipt.transactionIndex)\n      : null,\n    status: transactionReceipt.status\n      ? receiptStatuses[transactionReceipt.status]\n      : null,\n    type: transactionReceipt.type\n      ? transactionType[\n          transactionReceipt.type as keyof typeof transactionType\n        ] || transactionReceipt.type\n      : null,\n  } as TransactionReceipt\n\n  if (transactionReceipt.blobGasPrice)\n    receipt.blobGasPrice = BigInt(transactionReceipt.blobGasPrice)\n  if (transactionReceipt.blobGasUsed)\n    receipt.blobGasUsed = BigInt(transactionReceipt.blobGasUsed)\n\n  return receipt\n}\n\nexport type DefineTransactionReceiptErrorType =\n  | DefineFormatterErrorType\n  | ErrorType\n\nexport const defineTransactionReceipt = /*#__PURE__*/ defineFormatter(\n  'transactionReceipt',\n  formatTransactionReceipt,\n)\n", "import type { Address, Narrow } from 'abitype'\nimport { parseAccount } from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n  AtomicityNotSupportedError,\n  UnsupportedNonOptionalCapabilityError,\n} from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account, GetAccountParameter } from '../../types/account.js'\nimport type { Call, Calls } from '../../types/calls.js'\nimport type { ExtractCapabilities } from '../../types/capabilities.js'\nimport type { Chain, DeriveChain } from '../../types/chain.js'\nimport type { WalletSendCallsParameters } from '../../types/eip1193.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport { encodeFunctionData } from '../../utils/abi/encodeFunctionData.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { concat } from '../../utils/data/concat.js'\nimport { hexToBigInt } from '../../utils/encoding/fromHex.js'\nimport { numberToHex } from '../../utils/encoding/toHex.js'\nimport { getTransactionError } from '../../utils/errors/getTransactionError.js'\nimport { sendTransaction } from './sendTransaction.js'\n\nexport const fallbackMagicIdentifier =\n  '0x5792579257925792579257925792579257925792579257925792579257925792'\nexport const fallbackTransactionErrorMagicIdentifier = numberToHex(0, {\n  size: 32,\n})\n\nexport type SendCallsParameters<\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  calls extends readonly unknown[] = readonly unknown[],\n  //\n  _chain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = {\n  chain?: chainOverride | Chain | undefined\n  calls: Calls<Narrow<calls>>\n  capabilities?: ExtractCapabilities<'sendCalls', 'Request'> | undefined\n  experimental_fallback?: boolean | undefined\n  experimental_fallbackDelay?: number | undefined\n  forceAtomic?: boolean | undefined\n  id?: string | undefined\n  version?: WalletSendCallsParameters[number]['version'] | undefined\n} & GetAccountParameter<account, Account | Address, false, true>\n\nexport type SendCallsReturnType = Prettify<{\n  capabilities?: ExtractCapabilities<'sendCalls', 'ReturnType'> | undefined\n  id: string\n}>\n\nexport type SendCallsErrorType = RequestErrorType | ErrorType\n\n/**\n * Requests the connected wallet to send a batch of calls.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendCalls\n * - JSON-RPC Methods: [`wallet_sendCalls`](https://eips.ethereum.org/EIPS/eip-5792)\n *\n * @param client - Client to use\n * @returns Transaction identifier. {@link SendCallsReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendCalls } from 'viem/actions'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const id = await sendCalls(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   calls: [\n *     {\n *       data: '0xdeadbeef',\n *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *     },\n *     {\n *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *       value: 69420n,\n *     },\n *   ],\n * })\n */\nexport async function sendCalls<\n  const calls extends readonly unknown[],\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n  chainOverride extends Chain | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: SendCallsParameters<chain, account, chainOverride, calls>,\n): Promise<SendCallsReturnType> {\n  const {\n    account: account_ = client.account,\n    chain = client.chain,\n    experimental_fallback,\n    experimental_fallbackDelay = 32,\n    forceAtomic = false,\n    id,\n    version = '2.0.0',\n  } = parameters\n\n  const account = account_ ? parseAccount(account_) : null\n\n  let capabilities = parameters.capabilities\n\n  if (client.dataSuffix && !parameters.capabilities?.dataSuffix) {\n    if (typeof client.dataSuffix === 'string')\n      capabilities = {\n        ...parameters.capabilities,\n        dataSuffix: { value: client.dataSuffix, optional: true },\n      }\n    else\n      capabilities = {\n        ...parameters.capabilities,\n        dataSuffix: {\n          value: client.dataSuffix.value,\n          ...(client.dataSuffix.required ? {} : { optional: true }),\n        },\n      }\n  }\n\n  const calls = parameters.calls.map((call_: unknown) => {\n    const call = call_ as Call\n\n    const data = call.abi\n      ? encodeFunctionData({\n          abi: call.abi,\n          functionName: call.functionName,\n          args: call.args,\n        })\n      : call.data\n\n    return {\n      data: call.dataSuffix && data ? concat([data, call.dataSuffix]) : data,\n      to: call.to,\n      value: call.value ? numberToHex(call.value) : undefined,\n    }\n  })\n\n  try {\n    const response = await client.request(\n      {\n        method: 'wallet_sendCalls',\n        params: [\n          {\n            atomicRequired: forceAtomic,\n            calls,\n            capabilities,\n            chainId: numberToHex(chain!.id),\n            from: account?.address,\n            id,\n            version,\n          },\n        ],\n      },\n      { retryCount: 0 },\n    )\n    if (typeof response === 'string') return { id: response }\n    return response as never\n  } catch (err) {\n    const error = err as BaseError\n\n    // If the transport does not support EIP-5792, fall back to\n    // `eth_sendTransaction`.\n    if (\n      experimental_fallback &&\n      (error.name === 'MethodNotFoundRpcError' ||\n        error.name === 'MethodNotSupportedRpcError' ||\n        error.name === 'UnknownRpcError' ||\n        error.details\n          .toLowerCase()\n          .includes('does not exist / is not available') ||\n        error.details.toLowerCase().includes('missing or invalid. request()') ||\n        error.details\n          .toLowerCase()\n          .includes('did not match any variant of untagged enum') ||\n        error.details\n          .toLowerCase()\n          .includes('account upgraded to unsupported contract') ||\n        error.details.toLowerCase().includes('eip-7702 not supported') ||\n        error.details.toLowerCase().includes('unsupported wc_ method') ||\n        // magic.link\n        error.details\n          .toLowerCase()\n          .includes('feature toggled misconfigured') ||\n        // Trust Wallet\n        error.details\n          .toLowerCase()\n          .includes(\n            'jsonrpcengine: response has no error or result for request',\n          ))\n    ) {\n      if (capabilities) {\n        const hasNonOptionalCapability = Object.values(capabilities).some(\n          (capability) => !capability.optional,\n        )\n        if (hasNonOptionalCapability) {\n          const message =\n            'non-optional `capabilities` are not supported on fallback to `eth_sendTransaction`.'\n          throw new UnsupportedNonOptionalCapabilityError(\n            new BaseError(message, {\n              details: message,\n            }),\n          )\n        }\n      }\n      if (forceAtomic && calls.length > 1) {\n        const message =\n          '`forceAtomic` is not supported on fallback to `eth_sendTransaction`.'\n        throw new AtomicityNotSupportedError(\n          new BaseError(message, {\n            details: message,\n          }),\n        )\n      }\n\n      const promises: Promise<Hex>[] = []\n      for (const call of calls) {\n        const promise = sendTransaction(client, {\n          account,\n          chain,\n          data: call.data,\n          to: call.to,\n          value: call.value ? hexToBigInt(call.value) : undefined,\n        })\n        promises.push(promise)\n\n        // Note: some browser wallets require a small delay between transactions\n        // to prevent duplicate JSON-RPC requests.\n        if (experimental_fallbackDelay > 0)\n          await new Promise((resolve) =>\n            setTimeout(resolve, experimental_fallbackDelay),\n          )\n      }\n\n      const results = await Promise.allSettled(promises)\n      if (results.every((r) => r.status === 'rejected')) throw results[0].reason\n\n      const hashes = results.map((result) => {\n        if (result.status === 'fulfilled') return result.value\n        return fallbackTransactionErrorMagicIdentifier\n      })\n      return {\n        id: concat([\n          ...hashes,\n          numberToHex(chain!.id, { size: 32 }),\n          fallbackMagicIdentifier,\n        ]),\n      }\n    }\n\n    throw getTransactionError(err as BaseError, {\n      ...parameters,\n      account,\n      chain: parameters.chain!,\n    })\n  }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { ExtractCapabilities } from '../../types/capabilities.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { WalletGetCallsStatusReturnType } from '../../types/eip1193.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RpcTransactionReceipt } from '../../types/rpc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { sliceHex } from '../../utils/data/slice.js'\nimport { trim } from '../../utils/data/trim.js'\nimport { hexToBigInt, hexToNumber } from '../../utils/encoding/fromHex.js'\nimport { receiptStatuses } from '../../utils/formatters/transactionReceipt.js'\nimport {\n  fallbackMagicIdentifier,\n  fallbackTransactionErrorMagicIdentifier,\n} from './sendCalls.js'\n\nexport type GetCallsStatusParameters = { id: string }\n\nexport type GetCallsStatusReturnType = Prettify<\n  Omit<\n    WalletGetCallsStatusReturnType<\n      ExtractCapabilities<'getCallsStatus', 'ReturnType'>,\n      number,\n      bigint,\n      'success' | 'reverted'\n    >,\n    'status'\n  > & {\n    statusCode: number\n    status: 'pending' | 'success' | 'failure' | undefined\n  }\n>\n\nexport type GetCallsStatusErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns the status of a call batch that was sent via `sendCalls`.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/getCallsStatus\n * - JSON-RPC Methods: [`wallet_getCallsStatus`](https://eips.ethereum.org/EIPS/eip-5792)\n *\n * @param client - Client to use\n * @returns Status of the calls. {@link GetCallsStatusReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getCallsStatus } from 'viem/actions'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const { receipts, status } = await getCallsStatus(client, { id: '0xdeadbeef' })\n */\nexport async function getCallsStatus<\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: GetCallsStatusParameters,\n): Promise<GetCallsStatusReturnType> {\n  async function getStatus(id: Hex) {\n    const isTransactions = id.endsWith(fallbackMagicIdentifier.slice(2))\n    if (isTransactions) {\n      const chainId = trim(sliceHex(id, -64, -32))\n      const hashes = sliceHex(id, 0, -64)\n        .slice(2)\n        .match(/.{1,64}/g)\n\n      const receipts = await Promise.all(\n        hashes!.map((hash) =>\n          fallbackTransactionErrorMagicIdentifier.slice(2) !== hash\n            ? client.request(\n                {\n                  method: 'eth_getTransactionReceipt',\n                  params: [`0x${hash}`],\n                },\n                { dedupe: true },\n              )\n            : undefined,\n        ),\n      )\n\n      const status = (() => {\n        if (receipts.some((r) => r === null)) return 100 // pending\n        if (receipts.every((r) => r?.status === '0x1')) return 200 // success\n        if (receipts.every((r) => r?.status === '0x0')) return 500 // complete failure\n        return 600 // partial failure\n      })()\n\n      return {\n        atomic: false,\n        chainId: hexToNumber(chainId),\n        receipts: receipts.filter(Boolean) as RpcTransactionReceipt[],\n        status,\n        version: '2.0.0',\n      }\n    }\n    return client.request({\n      method: 'wallet_getCallsStatus',\n      params: [id],\n    })\n  }\n\n  const {\n    atomic = false,\n    chainId,\n    receipts,\n    version = '2.0.0',\n    ...response\n  } = await getStatus(parameters.id as Hex)\n  const [status, statusCode] = (() => {\n    const statusCode = response.status\n    if (statusCode >= 100 && statusCode < 200)\n      return ['pending', statusCode] as const\n    if (statusCode >= 200 && statusCode < 300)\n      return ['success', statusCode] as const\n    if (statusCode >= 300 && statusCode < 700)\n      return ['failure', statusCode] as const\n    // @ts-expect-error: for backwards compatibility\n    if (statusCode === 'CONFIRMED') return ['success', 200] as const\n    // @ts-expect-error: for backwards compatibility\n    if (statusCode === 'PENDING') return ['pending', 100] as const\n    return [undefined, statusCode]\n  })()\n  return {\n    ...response,\n    atomic,\n    // @ts-expect-error: for backwards compatibility\n    chainId: chainId ? hexToNumber(chainId) : undefined,\n    receipts:\n      receipts?.map((receipt) => ({\n        ...receipt,\n        blockNumber: hexToBigInt(receipt.blockNumber),\n        gasUsed: hexToBigInt(receipt.gasUsed),\n        status: receiptStatuses[receipt.status as '0x0' | '0x1'],\n      })) ?? [],\n    statusCode,\n    status,\n    version,\n  }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { BaseError } from '../../errors/base.js'\nimport { BundleFailedError } from '../../errors/calls.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { type PollErrorType, poll } from '../../utils/poll.js'\nimport { withResolvers } from '../../utils/promise/withResolvers.js'\nimport {\n  type WithRetryParameters,\n  withRetry,\n} from '../../utils/promise/withRetry.js'\nimport { stringify } from '../../utils/stringify.js'\nimport {\n  type GetCallsStatusErrorType,\n  type GetCallsStatusReturnType,\n  getCallsStatus,\n} from './getCallsStatus.js'\n\nexport type WaitForCallsStatusParameters = {\n  /**\n   * The id of the call batch to wait for.\n   */\n  id: string\n  /**\n   * Polling frequency (in ms). Defaults to the client's pollingInterval config.\n   *\n   * @default client.pollingInterval\n   */\n  pollingInterval?: number | undefined\n  /**\n   * Number of times to retry if the call bundle failed.\n   * @default 4 (exponential backoff)\n   */\n  retryCount?: WithRetryParameters['retryCount'] | undefined\n  /**\n   * Time to wait (in ms) between retries.\n   * @default `({ count }) => ~~(1 << count) * 200` (exponential backoff)\n   */\n  retryDelay?: WithRetryParameters['delay'] | undefined\n  /**\n   * The status range to wait for.\n   *\n   * @default (status) => status >= 200\n   */\n  status?: ((parameters: GetCallsStatusReturnType) => boolean) | undefined\n  /**\n   * Whether to throw an error if the call bundle fails.\n   *\n   * @default false\n   */\n  throwOnFailure?: boolean | undefined\n  /**\n   * Optional timeout (in milliseconds) to wait before stopping polling.\n   *\n   * @default 60_000\n   */\n  timeout?: number | undefined\n}\n\nexport type WaitForCallsStatusReturnType = GetCallsStatusReturnType\n\nexport type WaitForCallsStatusErrorType =\n  | ObserveErrorType\n  | PollErrorType\n  | GetCallsStatusErrorType\n  | WaitForCallsStatusTimeoutError\n  | ErrorType\n\n/**\n * Waits for the status & receipts of a call bundle that was sent via `sendCalls`.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/waitForCallsStatus\n * - JSON-RPC Methods: [`wallet_getCallsStatus`](https://eips.ethereum.org/EIPS/eip-5792)\n *\n * @param client - Client to use\n * @param parameters - {@link WaitForCallsStatusParameters}\n * @returns Status & receipts of the call bundle. {@link WaitForCallsStatusReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { waitForCallsStatus } from 'viem/actions'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n *\n * const { receipts, status } = await waitForCallsStatus(client, { id: '0xdeadbeef' })\n */\nexport async function waitForCallsStatus<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: WaitForCallsStatusParameters,\n): Promise<WaitForCallsStatusReturnType> {\n  const {\n    id,\n    pollingInterval = client.pollingInterval,\n    status = ({ statusCode }) => statusCode === 200 || statusCode >= 300,\n    retryCount = 4,\n    retryDelay = ({ count }) => ~~(1 << count) * 200, // exponential backoff\n    timeout = 60_000,\n    throwOnFailure = false,\n  } = parameters\n  const observerId = stringify(['waitForCallsStatus', client.uid, id])\n\n  const { promise, resolve, reject } =\n    withResolvers<WaitForCallsStatusReturnType>()\n\n  let timer: ReturnType<typeof setTimeout> | undefined\n\n  const unobserve = observe(observerId, { resolve, reject }, (emit) => {\n    const unpoll = poll(\n      async () => {\n        const done = (fn: () => void) => {\n          clearTimeout(timer)\n          unpoll()\n          fn()\n          unobserve()\n        }\n\n        try {\n          const result = await withRetry(\n            async () => {\n              const result = await getAction(\n                client,\n                getCallsStatus,\n                'getCallsStatus',\n              )({ id })\n              if (throwOnFailure && result.status === 'failure')\n                throw new BundleFailedError(result)\n              return result\n            },\n            {\n              retryCount,\n              delay: retryDelay,\n            },\n          )\n          if (!status(result)) return\n          done(() => emit.resolve(result))\n        } catch (error) {\n          done(() => emit.reject(error))\n        }\n      },\n      {\n        interval: pollingInterval,\n        emitOnBegin: true,\n      },\n    )\n\n    return unpoll\n  })\n\n  timer = timeout\n    ? setTimeout(() => {\n        unobserve()\n        clearTimeout(timer)\n        reject(new WaitForCallsStatusTimeoutError({ id }))\n      }, timeout)\n    : undefined\n\n  return await promise\n}\n\nexport type WaitForCallsStatusTimeoutErrorType =\n  WaitForCallsStatusTimeoutError & {\n    name: 'WaitForCallsStatusTimeoutError'\n  }\nexport class WaitForCallsStatusTimeoutError extends BaseError {\n  constructor({ id }: { id: string }) {\n    super(\n      `Timed out while waiting for call bundle with id \"${id}\" to be confirmed.`,\n      { name: 'WaitForCallsStatusTimeoutError' },\n    )\n  }\n}\n", "const size = 256\nlet index = size\nlet buffer: string\n\nexport function uid(length = 11) {\n  if (!buffer || index + length > size * 2) {\n    buffer = ''\n    index = 0\n    for (let i = 0; i < size; i++) {\n      buffer += ((256 + Math.random() * 256) | 0).toString(16).substring(1)\n    }\n  }\n  return buffer.substring(index, index++ + length)\n}\n", "import type { Address } from 'abitype'\n\nimport type { JsonRpcAccount } from '../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../accounts/utils/parseAccount.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Account } from '../types/account.js'\nimport type { BlockTag } from '../types/block.js'\nimport type { Chain } from '../types/chain.js'\nimport type { DataSuffix } from '../types/dataSuffix.js'\nimport type {\n  EIP1193RequestFn,\n  EIP1474Methods,\n  RpcSchema,\n} from '../types/eip1193.js'\nimport type { ExactPartial, Prettify } from '../types/utils.js'\nimport type {\n  CcipRequestParameters,\n  CcipRequestReturnType,\n} from '../utils/ccip.js'\nimport { uid } from '../utils/uid.js'\nimport type { PublicActions } from './decorators/public.js'\nimport type { WalletActions } from './decorators/wallet.js'\nimport type { Transport } from './transports/createTransport.js'\n\nexport type ClientConfig<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  accountOrAddress extends Account | Address | undefined =\n    | Account\n    | Address\n    | undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = {\n  /** The Account to use for the Client. This will be used for Actions that require an account as an argument. */\n  account?: accountOrAddress | Account | Address | undefined\n  /** Flags for batch settings. */\n  batch?:\n    | {\n        /** Toggle to enable `eth_call` multicall aggregation. */\n        multicall?: boolean | Prettify<MulticallBatchOptions> | undefined\n      }\n    | undefined\n  /**\n   * Default block tag to use for RPC requests.\n   *\n   * If the chain supports a pre-confirmation mechanism\n   * (set via `chain.experimental_preconfirmationTime`), defaults to `'pending'`.\n   *\n   * @default 'latest'\n   */\n  experimental_blockTag?: BlockTag | undefined\n  /**\n   * Time (in ms) that cached data will remain in memory.\n   * @default chain.blockTime / 3\n   */\n  cacheTime?: number | undefined\n  /**\n   * [CCIP Read](https://eips.ethereum.org/EIPS/eip-3668) configuration.\n   * If `false`, the client will not support offchain CCIP lookups.\n   */\n  ccipRead?:\n    | {\n        /**\n         * A function that will be called to make the offchain CCIP lookup request.\n         * @see https://eips.ethereum.org/EIPS/eip-3668#client-lookup-protocol\n         */\n        request?: (\n          parameters: CcipRequestParameters,\n        ) => Promise<CcipRequestReturnType>\n      }\n    | false\n    | undefined\n  /** Chain for the client. */\n  chain?: Chain | undefined | chain\n  /** Data suffix to append to transaction data. */\n  dataSuffix?: DataSuffix | undefined\n  /** A key for the client. */\n  key?: string | undefined\n  /** A name for the client. */\n  name?: string | undefined\n  /**\n   * Frequency (in ms) for polling enabled actions & events.\n   * @default chain.blockTime / 3\n   */\n  pollingInterval?: number | undefined\n  /**\n   * Typed JSON-RPC schema for the client.\n   */\n  rpcSchema?: rpcSchema | undefined\n  /** The RPC transport */\n  transport: transport\n  /** The type of client. */\n  type?: string | undefined\n}\n\n// Actions that are used internally by other Actions (ie. `call` is used by `readContract`).\n// They are allowed to be extended, but must conform to their parameter & return type interfaces.\n// Example: an extended `call` action must accept `CallParameters` as parameters,\n// and conform to the `CallReturnType` return type.\ntype ExtendableProtectedActions<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n> = Pick<\n  PublicActions<transport, chain, account>,\n  | 'call'\n  | 'createContractEventFilter'\n  | 'createEventFilter'\n  | 'estimateContractGas'\n  | 'estimateGas'\n  | 'getBlock'\n  | 'getBlockNumber'\n  | 'getChainId'\n  | 'getContractEvents'\n  | 'getEnsText'\n  | 'getFilterChanges'\n  | 'getGasPrice'\n  | 'getLogs'\n  | 'getTransaction'\n  | 'getTransactionCount'\n  | 'getTransactionReceipt'\n  | 'prepareTransactionRequest'\n  | 'readContract'\n  | 'sendRawTransaction'\n  | 'simulateContract'\n  | 'uninstallFilter'\n  | 'watchBlockNumber'\n  | 'watchContractEvent'\n> &\n  Pick<WalletActions<chain, account>, 'sendTransaction' | 'writeContract'>\n\n// TODO: Move `transport` to slot index 2 since `chain` and `account` used more frequently.\n// Otherwise, we end up with a lot of `Client<Transport, chain, account>` in actions.\nexport type Client<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n  extended extends Extended | undefined = Extended | undefined,\n> = Client_Base<transport, chain, account, rpcSchema> &\n  (extended extends Extended ? extended : unknown) & {\n    extend: <\n      const client extends Extended &\n        ExactPartial<ExtendableProtectedActions<transport, chain, account>>,\n    >(\n      fn: (\n        client: Client<transport, chain, account, rpcSchema, extended>,\n      ) => client,\n    ) => Client<\n      transport,\n      chain,\n      account,\n      rpcSchema,\n      Prettify<client> & (extended extends Extended ? extended : unknown)\n    >\n  }\n\ntype Client_Base<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = {\n  /** The Account of the Client. */\n  account: account\n  /** Flags for batch settings. */\n  batch?: ClientConfig['batch'] | undefined\n  /** Time (in ms) that cached data will remain in memory. */\n  cacheTime: number\n  /** [CCIP Read](https://eips.ethereum.org/EIPS/eip-3668) configuration. */\n  ccipRead?: ClientConfig['ccipRead'] | undefined\n  /** Chain for the client. */\n  chain: chain\n  /** Data suffix to append to transaction data. */\n  dataSuffix?: DataSuffix | undefined\n  /** Default block tag to use for RPC requests. */\n  experimental_blockTag?: BlockTag | undefined\n  /** A key for the client. */\n  key: string\n  /** A name for the client. */\n  name: string\n  /** Frequency (in ms) for polling enabled actions & events. Defaults to 4_000 milliseconds. */\n  pollingInterval: number\n  /** Request function wrapped with friendly error handling */\n  request: EIP1193RequestFn<\n    rpcSchema extends undefined ? EIP1474Methods : rpcSchema\n  >\n  /** The RPC transport */\n  transport: ReturnType<transport>['config'] & ReturnType<transport>['value']\n  /** The type of client. */\n  type: string\n  /** A unique ID for the client. */\n  uid: string\n}\n\ntype Extended = Prettify<\n  // disallow redefining base properties\n  { [_ in keyof Client_Base]?: undefined } & {\n    [key: string]: unknown\n  }\n>\n\nexport type MulticallBatchOptions = {\n  /** The maximum size (in bytes) for each calldata chunk. @default 1_024 */\n  batchSize?: number | undefined\n  /** Enable deployless multicall. */\n  deployless?: boolean | undefined\n  /** The maximum number of milliseconds to wait before sending a batch. @default 0 */\n  wait?: number | undefined\n}\n\nexport type CreateClientErrorType = ParseAccountErrorType | ErrorType\n\nexport function createClient<\n  transport extends Transport,\n  chain extends Chain | undefined = undefined,\n  accountOrAddress extends Account | Address | undefined = undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n>(\n  parameters: ClientConfig<transport, chain, accountOrAddress, rpcSchema>,\n): Prettify<\n  Client<\n    transport,\n    chain,\n    accountOrAddress extends Address\n      ? Prettify<JsonRpcAccount<accountOrAddress>>\n      : accountOrAddress,\n    rpcSchema\n  >\n>\n\nexport function createClient(parameters: ClientConfig): Client {\n  const {\n    batch,\n    chain,\n    ccipRead,\n    dataSuffix,\n    key = 'base',\n    name = 'Base Client',\n    type = 'base',\n  } = parameters\n\n  const experimental_blockTag =\n    parameters.experimental_blockTag ??\n    (typeof chain?.experimental_preconfirmationTime === 'number'\n      ? 'pending'\n      : undefined)\n  const blockTime = chain?.blockTime ?? 12_000\n\n  const defaultPollingInterval = Math.min(\n    Math.max(Math.floor(blockTime / 2), 500),\n    4_000,\n  )\n  const pollingInterval = parameters.pollingInterval ?? defaultPollingInterval\n  const cacheTime = parameters.cacheTime ?? pollingInterval\n\n  const account = parameters.account\n    ? parseAccount(parameters.account)\n    : undefined\n  const { config, request, value } = parameters.transport({\n    account,\n    chain,\n    pollingInterval,\n  })\n  const transport = { ...config, ...value }\n\n  const client = {\n    account,\n    batch,\n    cacheTime,\n    ccipRead,\n    chain,\n    dataSuffix,\n    key,\n    name,\n    pollingInterval,\n    request,\n    transport,\n    type,\n    uid: uid(),\n    ...(experimental_blockTag ? { experimental_blockTag } : {}),\n  }\n\n  function extend(base: typeof client) {\n    type ExtendFn = (base: typeof client) => unknown\n    return (extendFn: ExtendFn) => {\n      const extended = extendFn(base) as Extended\n      for (const key in client) delete extended[key]\n      const combined = { ...base, ...extended }\n      return Object.assign(combined, { extend: extend(combined as any) })\n    }\n  }\n\n  return Object.assign(client, { extend: extend(client) as any })\n}\n\n/**\n * Defines a typed JSON-RPC schema for the client.\n * Note: This is a runtime noop function.\n */\nexport function rpcSchema<rpcSchema extends RpcSchema>(): rpcSchema {\n  return null as any\n}\n", "import { BaseError } from '../../errors/base.js'\nimport { ContractFunctionRevertedError } from '../../errors/contract.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\n/** @internal */\nexport type IsNullUniversalResolverErrorErrorType = ErrorType\n\n/*\n * @description Checks if error is a valid null result UniversalResolver error\n */\nexport function isNullUniversalResolverError(err: unknown): boolean {\n  if (!(err instanceof BaseError)) return false\n  const cause = err.walk((e) => e instanceof ContractFunctionRevertedError)\n  if (!(cause instanceof ContractFunctionRevertedError)) return false\n\n  if (cause.data?.errorName === 'HttpError') return true\n  if (cause.data?.errorName === 'ResolverError') return true\n  if (cause.data?.errorName === 'ResolverNotContract') return true\n  if (cause.data?.errorName === 'ResolverNotFound') return true\n  if (cause.data?.errorName === 'ReverseAddressMismatch') return true\n  if (cause.data?.errorName === 'UnsupportedResolverProfile') return true\n\n  return false\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\n\nexport type EncodedLabelToLabelhashErrorType = IsHexErrorType | ErrorType\n\nexport function encodedLabelToLabelhash(label: string): Hex | null {\n  if (label.length !== 66) return null\n  if (label.indexOf('[') !== 0) return null\n  if (label.indexOf(']') !== 65) return null\n  const hash = `0x${label.slice(1, 65)}`\n  if (!isHex(hash)) return null\n  return hash\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray } from '../../types/misc.js'\nimport { type ConcatErrorType, concat } from '../data/concat.js'\nimport {\n  type StringToBytesErrorType,\n  stringToBytes,\n  type ToBytesErrorType,\n  toBytes,\n} from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n  type EncodedLabelToLabelhashErrorType,\n  encodedLabelToLabelhash,\n} from './encodedLabelToLabelhash.js'\n\nexport type NamehashErrorType =\n  | BytesToHexErrorType\n  | EncodedLabelToLabelhashErrorType\n  | ToBytesErrorType\n  | Keccak256ErrorType\n  | StringToBytesErrorType\n  | ConcatErrorType\n  | ErrorType\n\n/**\n * @description Hashes ENS name\n *\n * - Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `namehash`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @example\n * namehash('wevm.eth')\n * '0x08c85f2f4059e930c45a6aeff9dcd3bd95dc3c5c1cddef6a0626b31152248560'\n *\n * @link https://eips.ethereum.org/EIPS/eip-137\n */\nexport function namehash(name: string) {\n  let result = new Uint8Array(32).fill(0) as ByteArray\n  if (!name) return bytesToHex(result)\n\n  const labels = name.split('.')\n  // Iterate in reverse order building up hash\n  for (let i = labels.length - 1; i >= 0; i -= 1) {\n    const hashFromEncodedLabel = encodedLabelToLabelhash(labels[i])\n    const hashed = hashFromEncodedLabel\n      ? toBytes(hashFromEncodedLabel)\n      : keccak256(stringToBytes(labels[i]), 'bytes')\n    result = keccak256(concat([result, hashed]), 'bytes')\n  }\n\n  return bytesToHex(result)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\n\nexport type EncodeLabelhashErrorType = ErrorType\n\nexport function encodeLabelhash(hash: Hex): `[${string}]` {\n  return `[${hash.slice(2)}]`\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport {\n  type StringToBytesErrorType,\n  stringToBytes,\n} from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n  type EncodedLabelToLabelhashErrorType,\n  encodedLabelToLabelhash,\n} from './encodedLabelToLabelhash.js'\n\nexport type LabelhashErrorType =\n  | BytesToHexErrorType\n  | EncodedLabelToLabelhashErrorType\n  | Keccak256ErrorType\n  | StringToBytesErrorType\n  | ErrorType\n\n/**\n * @description Hashes ENS label\n *\n * - Since ENS labels prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS labels](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `labelhash`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @example\n * labelhash('eth')\n * '0x4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0'\n */\nexport function labelhash(label: string) {\n  const result = new Uint8Array(32).fill(0)\n  if (!label) return bytesToHex(result)\n  return encodedLabelToLabelhash(label) || keccak256(stringToBytes(label))\n}\n", "// Adapted from https://github.com/mafintosh/dns-packet\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray } from '../../types/misc.js'\nimport {\n  type StringToBytesErrorType,\n  stringToBytes,\n} from '../encoding/toBytes.js'\nimport {\n  type EncodeLabelhashErrorType,\n  encodeLabelhash,\n} from './encodeLabelhash.js'\nimport { type LabelhashErrorType, labelhash } from './labelhash.js'\n\nexport type PacketToBytesErrorType =\n  | EncodeLabelhashErrorType\n  | LabelhashErrorType\n  | StringToBytesErrorType\n  | ErrorType\n\n/*\n * @description Encodes a DNS packet into a ByteArray containing a UDP payload.\n *\n * @example\n * packetToBytes('awkweb.eth')\n * '0x0661776b7765620365746800'\n *\n * @see https://docs.ens.domains/resolution/names#dns\n *\n */\nexport function packetToBytes(packet: string): ByteArray {\n  // strip leading and trailing `.`\n  const value = packet.replace(/^\\.|\\.$/gm, '')\n  if (value.length === 0) return new Uint8Array(1)\n\n  const bytes = new Uint8Array(stringToBytes(value).byteLength + 2)\n\n  let offset = 0\n  const list = value.split('.')\n  for (let i = 0; i < list.length; i++) {\n    let encoded = stringToBytes(list[i])\n    // if the length is > 255, make the encoded label value a labelhash\n    // this is compatible with the universal resolver\n    if (encoded.byteLength > 255)\n      encoded = stringToBytes(encodeLabelhash(labelhash(list[i])))\n    bytes[offset] = encoded.length\n    bytes.set(encoded, offset + 1)\n    offset += encoded.length + 1\n  }\n\n  if (bytes.byteLength !== offset + 1) return bytes.slice(0, offset + 1)\n\n  return bytes\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  addressResolverAbi,\n  universalResolverResolveAbi,\n} from '../../constants/abis.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type TrimErrorType, trim } from '../../utils/data/trim.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport { isNullUniversalResolverError } from '../../utils/ens/errors.js'\nimport { localBatchGatewayUrl } from '../../utils/ens/localBatchGatewayRequest.js'\nimport { type NamehashErrorType, namehash } from '../../utils/ens/namehash.js'\nimport {\n  type PacketToBytesErrorType,\n  packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type ReadContractParameters,\n  readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsAddressParameters = Prettify<\n  Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {\n    /**\n     * ENSIP-9 compliant coinType (chain) to get ENS address for.\n     *\n     * To get the `coinType` for a chain id, use the `toCoinType` function:\n     * ```ts\n     * import { toCoinType } from 'viem'\n     * import { base } from 'viem/chains'\n     *\n     * const coinType = toCoinType(base.id)\n     * ```\n     *\n     * @default 60n\n     */\n    coinType?: bigint | undefined\n    /**\n     * Universal Resolver gateway URLs to use for resolving CCIP-read requests.\n     */\n    gatewayUrls?: string[] | undefined\n    /**\n     * Name to get the address for.\n     */\n    name: string\n    /**\n     * Whether or not to throw errors propagated from the ENS Universal Resolver Contract.\n     */\n    strict?: boolean | undefined\n    /**\n     * Address of ENS Universal Resolver Contract.\n     */\n    universalResolverAddress?: Address | undefined\n  }\n>\n\nexport type GetEnsAddressReturnType = Address | null\n\nexport type GetEnsAddressErrorType =\n  | GetChainContractAddressErrorType\n  | EncodeFunctionDataErrorType\n  | NamehashErrorType\n  | ToHexErrorType\n  | PacketToBytesErrorType\n  | DecodeFunctionResultErrorType\n  | TrimErrorType\n  | ErrorType\n\n/**\n * Gets address for ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsAddress\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsAddressParameters}\n * @returns Address for ENS name or `null` if not found. {@link GetEnsAddressReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsAddress, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const ensAddress = await getEnsAddress(client, {\n *   name: normalize('wevm.eth'),\n * })\n * // '0xd2135CfB216b74109775236E36d4b433F1DF507B'\n */\nexport async function getEnsAddress<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: GetEnsAddressParameters,\n): Promise<GetEnsAddressReturnType> {\n  const { blockNumber, blockTag, coinType, name, gatewayUrls, strict } =\n    parameters\n  const { chain } = client\n\n  const universalResolverAddress = (() => {\n    if (parameters.universalResolverAddress)\n      return parameters.universalResolverAddress\n    if (!chain)\n      throw new Error(\n        'client chain not configured. universalResolverAddress is required.',\n      )\n    return getChainContractAddress({\n      blockNumber,\n      chain,\n      contract: 'ensUniversalResolver',\n    })\n  })()\n\n  const tlds = chain?.ensTlds\n  if (tlds && !tlds.some((tld) => name.endsWith(tld))) return null\n\n  const args = (() => {\n    if (coinType != null) return [namehash(name), BigInt(coinType)] as const\n    return [namehash(name)] as const\n  })()\n\n  try {\n    const functionData = encodeFunctionData({\n      abi: addressResolverAbi,\n      functionName: 'addr',\n      args,\n    })\n\n    const readContractParameters = {\n      address: universalResolverAddress,\n      abi: universalResolverResolveAbi,\n      functionName: 'resolveWithGateways',\n      args: [\n        toHex(packetToBytes(name)),\n        functionData,\n        gatewayUrls ?? [localBatchGatewayUrl],\n      ],\n      blockNumber,\n      blockTag,\n    } as const\n\n    const readContractAction = getAction(client, readContract, 'readContract')\n\n    const res = await readContractAction(readContractParameters)\n\n    if (res[0] === '0x') return null\n\n    const address = decodeFunctionResult({\n      abi: addressResolverAbi,\n      args,\n      functionName: 'addr',\n      data: res[0],\n    })\n\n    if (address === '0x') return null\n    if (trim(address) === '0x00') return null\n    return address\n  } catch (err) {\n    if (strict) throw err\n    if (isNullUniversalResolverError(err)) return null\n    throw err\n  }\n}\n", "import { BaseError } from './base.js'\n\nexport type EnsAvatarInvalidMetadataErrorType =\n  EnsAvatarInvalidMetadataError & {\n    name: 'EnsAvatarInvalidMetadataError'\n  }\nexport class EnsAvatarInvalidMetadataError extends BaseError {\n  constructor({ data }: { data: any }) {\n    super(\n      'Unable to extract image from metadata. The metadata may be malformed or invalid.',\n      {\n        metaMessages: [\n          '- Metadata must be a JSON object with at least an `image`, `image_url` or `image_data` property.',\n          '',\n          `Provided data: ${JSON.stringify(data)}`,\n        ],\n        name: 'EnsAvatarInvalidMetadataError',\n      },\n    )\n  }\n}\n\nexport type EnsAvatarInvalidNftUriErrorType = EnsAvatarInvalidNftUriError & {\n  name: 'EnsAvatarInvalidNftUriError'\n}\nexport class EnsAvatarInvalidNftUriError extends BaseError {\n  constructor({ reason }: { reason: string }) {\n    super(`ENS NFT avatar URI is invalid. ${reason}`, {\n      name: 'EnsAvatarInvalidNftUriError',\n    })\n  }\n}\n\nexport type EnsAvatarUriResolutionErrorType = EnsAvatarUriResolutionError & {\n  name: 'EnsAvatarUriResolutionError'\n}\nexport class EnsAvatarUriResolutionError extends BaseError {\n  constructor({ uri }: { uri: string }) {\n    super(\n      `Unable to resolve ENS avatar URI \"${uri}\". The URI may be malformed, invalid, or does not respond with a valid image.`,\n      { name: 'EnsAvatarUriResolutionError' },\n    )\n  }\n}\n\nexport type EnsAvatarUnsupportedNamespaceErrorType =\n  EnsAvatarUnsupportedNamespaceError & {\n    name: 'EnsAvatarUnsupportedNamespaceError'\n  }\nexport class EnsAvatarUnsupportedNamespaceError extends BaseError {\n  constructor({ namespace }: { namespace: string }) {\n    super(\n      `ENS NFT avatar namespace \"${namespace}\" is not supported. Must be \"erc721\" or \"erc1155\".`,\n      { name: 'EnsAvatarUnsupportedNamespaceError' },\n    )\n  }\n}\n\nexport type EnsInvalidChainIdErrorType = EnsInvalidChainIdError & {\n  name: 'EnsInvalidChainIdError'\n}\nexport class EnsInvalidChainIdError extends BaseError {\n  constructor({ chainId }: { chainId: number }) {\n    super(\n      `Invalid ENSIP-11 chainId: ${chainId}. Must be between 0 and 0x7fffffff, or 1.`,\n      {\n        name: 'EnsInvalidChainIdError',\n      },\n    )\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport {\n  type ReadContractErrorType,\n  readContract,\n} from '../../../actions/public/readContract.js'\nimport type { Client } from '../../../clients/createClient.js'\nimport type { Transport } from '../../../clients/transports/createTransport.js'\nimport {\n  EnsAvatarInvalidMetadataError,\n  type EnsAvatarInvalidMetadataErrorType,\n  EnsAvatarInvalidNftUriError,\n  type EnsAvatarInvalidNftUriErrorType,\n  EnsAvatarUnsupportedNamespaceError,\n  type EnsAvatarUnsupportedNamespaceErrorType,\n  EnsAvatarUriResolutionError,\n  type EnsAvatarUriResolutionErrorType,\n} from '../../../errors/ens.js'\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { Chain } from '../../../types/chain.js'\nimport type { AssetGatewayUrls } from '../../../types/ens.js'\n\ntype UriItem = {\n  uri: string\n  isOnChain: boolean\n  isEncoded: boolean\n}\n\nconst networkRegex =\n  /(?<protocol>https?:\\/\\/[^/]*|ipfs:\\/|ipns:\\/|ar:\\/)?(?<root>\\/)?(?<subpath>ipfs\\/|ipns\\/)?(?<target>[\\w\\-.]+)(?<subtarget>\\/.*)?/\nconst ipfsHashRegex =\n  /^(Qm[1-9A-HJ-NP-Za-km-z]{44,}|b[A-Za-z2-7]{58,}|B[A-Z2-7]{58,}|z[1-9A-HJ-NP-Za-km-z]{48,}|F[0-9A-F]{50,})(\\/(?<target>[\\w\\-.]+))?(?<subtarget>\\/.*)?$/\nconst base64Regex = /^data:([a-zA-Z\\-/+]*);base64,([^\"].*)/\nconst dataURIRegex = /^data:([a-zA-Z\\-/+]*)?(;[a-zA-Z0-9].*?)?(,)/\n\ntype IsImageUriErrorType = ErrorType\n\n/** @internal */\nexport async function isImageUri(uri: string) {\n  try {\n    const res = await fetch(uri, { method: 'HEAD' })\n    // retrieve content type header to check if content is image\n    if (res.status === 200) {\n      const contentType = res.headers.get('content-type')\n      return contentType?.startsWith('image/')\n    }\n    return false\n  } catch (error: any) {\n    // if error is not cors related then fail\n    if (typeof error === 'object' && typeof error.response !== 'undefined') {\n      return false\n    }\n    // fail in NodeJS, since the error is not cors but any other network issue\n    if (!Object.hasOwn(globalThis, 'Image')) return false\n    // in case of cors, use image api to validate if given url is an actual image\n    return new Promise((resolve) => {\n      const img = new Image()\n      img.onload = () => {\n        resolve(true)\n      }\n      img.onerror = () => {\n        resolve(false)\n      }\n      img.src = uri\n    })\n  }\n}\n\ntype GetGatewayErrorType = ErrorType\n\n/** @internal */\nexport function getGateway(custom: string | undefined, defaultGateway: string) {\n  if (!custom) return defaultGateway\n  if (custom.endsWith('/')) return custom.slice(0, -1)\n  return custom\n}\n\nexport type ResolveAvatarUriErrorType =\n  | GetGatewayErrorType\n  | EnsAvatarUriResolutionErrorType\n  | ErrorType\n\nexport function resolveAvatarUri({\n  uri,\n  gatewayUrls,\n}: {\n  uri: string\n  gatewayUrls?: AssetGatewayUrls | undefined\n}): UriItem {\n  const isEncoded = base64Regex.test(uri)\n  if (isEncoded) return { uri, isOnChain: true, isEncoded }\n\n  const ipfsGateway = getGateway(gatewayUrls?.ipfs, 'https://ipfs.io')\n  const arweaveGateway = getGateway(gatewayUrls?.arweave, 'https://arweave.net')\n\n  const networkRegexMatch = uri.match(networkRegex)\n  const {\n    protocol,\n    subpath,\n    target,\n    subtarget = '',\n  } = networkRegexMatch?.groups || {}\n\n  const isIPNS = protocol === 'ipns:/' || subpath === 'ipns/'\n  const isIPFS =\n    protocol === 'ipfs:/' || subpath === 'ipfs/' || ipfsHashRegex.test(uri)\n\n  if (uri.startsWith('http') && !isIPNS && !isIPFS) {\n    let replacedUri = uri\n    if (gatewayUrls?.arweave)\n      replacedUri = uri.replace(/https:\\/\\/arweave.net/g, gatewayUrls?.arweave)\n    return { uri: replacedUri, isOnChain: false, isEncoded: false }\n  }\n\n  if ((isIPNS || isIPFS) && target) {\n    return {\n      uri: `${ipfsGateway}/${isIPNS ? 'ipns' : 'ipfs'}/${target}${subtarget}`,\n      isOnChain: false,\n      isEncoded: false,\n    }\n  }\n\n  if (protocol === 'ar:/' && target) {\n    return {\n      uri: `${arweaveGateway}/${target}${subtarget || ''}`,\n      isOnChain: false,\n      isEncoded: false,\n    }\n  }\n\n  let parsedUri = uri.replace(dataURIRegex, '')\n  if (parsedUri.startsWith('<svg')) {\n    // if svg, base64 encode\n    parsedUri = `data:image/svg+xml;base64,${btoa(parsedUri)}`\n  }\n\n  if (parsedUri.startsWith('data:') || parsedUri.startsWith('{')) {\n    return {\n      uri: parsedUri,\n      isOnChain: true,\n      isEncoded: false,\n    }\n  }\n\n  throw new EnsAvatarUriResolutionError({ uri })\n}\n\nexport type GetJsonImageErrorType =\n  | EnsAvatarInvalidMetadataErrorType\n  | ErrorType\n\nexport function getJsonImage(data: any) {\n  // validation check for json data, must include one of theses properties\n  if (\n    typeof data !== 'object' ||\n    (!('image' in data) && !('image_url' in data) && !('image_data' in data))\n  ) {\n    throw new EnsAvatarInvalidMetadataError({ data })\n  }\n\n  return data.image || data.image_url || data.image_data\n}\n\nexport type GetMetadataAvatarUriErrorType =\n  | EnsAvatarUriResolutionErrorType\n  | ParseAvatarUriErrorType\n  | GetJsonImageErrorType\n  | ErrorType\n\nexport async function getMetadataAvatarUri({\n  gatewayUrls,\n  uri,\n}: {\n  gatewayUrls?: AssetGatewayUrls | undefined\n  uri: string\n}): Promise<string> {\n  try {\n    const res = await fetch(uri).then((res) => res.json())\n    const image = await parseAvatarUri({\n      gatewayUrls,\n      uri: getJsonImage(res),\n    })\n    return image\n  } catch {\n    throw new EnsAvatarUriResolutionError({ uri })\n  }\n}\n\nexport type ParseAvatarUriErrorType =\n  | ResolveAvatarUriErrorType\n  | IsImageUriErrorType\n  | EnsAvatarUriResolutionErrorType\n  | ErrorType\n\nexport async function parseAvatarUri({\n  gatewayUrls,\n  uri,\n}: {\n  gatewayUrls?: AssetGatewayUrls | undefined\n  uri: string\n}): Promise<string> {\n  const { uri: resolvedURI, isOnChain } = resolveAvatarUri({ uri, gatewayUrls })\n  if (isOnChain) return resolvedURI\n\n  // check if resolvedURI is an image, if it is return the url\n  const isImage = await isImageUri(resolvedURI)\n  if (isImage) return resolvedURI\n\n  throw new EnsAvatarUriResolutionError({ uri })\n}\n\ntype ParsedNft = {\n  chainID: number\n  namespace: string\n  contractAddress: Address\n  tokenID: string\n}\n\nexport type ParseNftUriErrorType = EnsAvatarInvalidNftUriErrorType | ErrorType\n\nexport function parseNftUri(uri_: string): ParsedNft {\n  let uri = uri_\n  // parse valid nft spec (CAIP-22/CAIP-29)\n  // @see: https://github.com/ChainAgnostic/CAIPs/tree/master/CAIPs\n  if (uri.startsWith('did:nft:')) {\n    // convert DID to CAIP\n    uri = uri.replace('did:nft:', '').replace(/_/g, '/')\n  }\n\n  const [reference, asset_namespace, tokenID] = uri.split('/')\n  const [eip_namespace, chainID] = reference.split(':')\n  const [erc_namespace, contractAddress] = asset_namespace.split(':')\n\n  if (!eip_namespace || eip_namespace.toLowerCase() !== 'eip155')\n    throw new EnsAvatarInvalidNftUriError({ reason: 'Only EIP-155 supported' })\n  if (!chainID)\n    throw new EnsAvatarInvalidNftUriError({ reason: 'Chain ID not found' })\n  if (!contractAddress)\n    throw new EnsAvatarInvalidNftUriError({\n      reason: 'Contract address not found',\n    })\n  if (!tokenID)\n    throw new EnsAvatarInvalidNftUriError({ reason: 'Token ID not found' })\n  if (!erc_namespace)\n    throw new EnsAvatarInvalidNftUriError({ reason: 'ERC namespace not found' })\n\n  return {\n    chainID: Number.parseInt(chainID, 10),\n    namespace: erc_namespace.toLowerCase(),\n    contractAddress: contractAddress as Address,\n    tokenID,\n  }\n}\n\nexport type GetNftTokenUriErrorType =\n  | ReadContractErrorType\n  | EnsAvatarUnsupportedNamespaceErrorType\n  | ErrorType\n\nexport async function getNftTokenUri<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { nft }: { nft: ParsedNft },\n) {\n  if (nft.namespace === 'erc721') {\n    return readContract(client, {\n      address: nft.contractAddress,\n      abi: [\n        {\n          name: 'tokenURI',\n          type: 'function',\n          stateMutability: 'view',\n          inputs: [{ name: 'tokenId', type: 'uint256' }],\n          outputs: [{ name: '', type: 'string' }],\n        },\n      ],\n      functionName: 'tokenURI',\n      args: [BigInt(nft.tokenID)],\n    })\n  }\n  if (nft.namespace === 'erc1155') {\n    return readContract(client, {\n      address: nft.contractAddress,\n      abi: [\n        {\n          name: 'uri',\n          type: 'function',\n          stateMutability: 'view',\n          inputs: [{ name: '_id', type: 'uint256' }],\n          outputs: [{ name: '', type: 'string' }],\n        },\n      ],\n      functionName: 'uri',\n      args: [BigInt(nft.tokenID)],\n    })\n  }\n  throw new EnsAvatarUnsupportedNamespaceError({ namespace: nft.namespace })\n}\n", "import type { Client } from '../../../clients/createClient.js'\nimport type { Transport } from '../../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { Chain } from '../../../types/chain.js'\nimport type { AssetGatewayUrls } from '../../../types/ens.js'\n\nimport {\n  type GetJsonImageErrorType,\n  type GetMetadataAvatarUriErrorType,\n  type GetNftTokenUriErrorType,\n  getJsonImage,\n  getMetadataAvatarUri,\n  getNftTokenUri,\n  type ParseAvatarUriErrorType,\n  type ParseNftUriErrorType,\n  parseAvatarUri,\n  parseNftUri,\n  type ResolveAvatarUriErrorType,\n  resolveAvatarUri,\n} from './utils.js'\n\nexport type ParseAvatarRecordErrorType =\n  | ParseNftAvatarUriErrorType\n  | ParseAvatarUriErrorType\n  | ErrorType\n\n/*\n * @description Parses an ENS avatar record.\n *\n * @example\n * parseAvatarRecord('eip155:1/erc1155:0xb32979486938aa9694bfc898f35dbed459f44424/10063')\n * 'https://ipfs.io/ipfs/QmSP4nq9fnN9dAiCj42ug9Wa79rqmQerZXZch82VqpiH7U/image.gif'\n *\n * @see https://docs.ens.domains/web/avatars\n *\n */\nexport async function parseAvatarRecord<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    gatewayUrls,\n    record,\n  }: {\n    gatewayUrls?: AssetGatewayUrls | undefined\n    record: string\n  },\n): Promise<string> {\n  if (/eip155:/i.test(record))\n    return parseNftAvatarUri(client, { gatewayUrls, record })\n  return parseAvatarUri({ uri: record, gatewayUrls })\n}\n\ntype ParseNftAvatarUriErrorType =\n  | ParseNftUriErrorType\n  | GetNftTokenUriErrorType\n  | ResolveAvatarUriErrorType\n  | ParseAvatarUriErrorType\n  | GetJsonImageErrorType\n  | GetMetadataAvatarUriErrorType\n  | ErrorType\n\nasync function parseNftAvatarUri<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    gatewayUrls,\n    record,\n  }: {\n    gatewayUrls?: AssetGatewayUrls | undefined\n    record: string\n  },\n): Promise<string> {\n  // parse NFT URI into properties\n  const nft = parseNftUri(record)\n  // fetch tokenURI from the NFT contract\n  const nftUri = await getNftTokenUri(client, { nft })\n  // resolve the URI from the fetched tokenURI\n  const {\n    uri: resolvedNftUri,\n    isOnChain,\n    isEncoded,\n  } = resolveAvatarUri({ uri: nftUri, gatewayUrls })\n\n  // if the resolved URI is on chain, return the data\n  if (\n    isOnChain &&\n    (resolvedNftUri.includes('data:application/json;base64,') ||\n      resolvedNftUri.startsWith('{'))\n  ) {\n    const encodedJson = isEncoded\n      ? // if it is encoded, decode it\n        atob(resolvedNftUri.replace('data:application/json;base64,', ''))\n      : // if it isn't encoded assume it is a JSON string, but it could be anything (it will error if it is)\n        resolvedNftUri\n\n    const decoded = JSON.parse(encodedJson)\n    return parseAvatarUri({ uri: getJsonImage(decoded), gatewayUrls })\n  }\n\n  let uriTokenId = nft.tokenID\n  if (nft.namespace === 'erc1155')\n    uriTokenId = uriTokenId.replace('0x', '').padStart(64, '0')\n\n  return getMetadataAvatarUri({\n    gatewayUrls,\n    uri: resolvedNftUri.replace(/(?:0x)?{id}/, uriTokenId),\n  })\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  textResolverAbi,\n  universalResolverResolveAbi,\n} from '../../constants/abis.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport { isNullUniversalResolverError } from '../../utils/ens/errors.js'\nimport { localBatchGatewayUrl } from '../../utils/ens/localBatchGatewayRequest.js'\nimport { type NamehashErrorType, namehash } from '../../utils/ens/namehash.js'\nimport {\n  type PacketToBytesErrorType,\n  packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type ReadContractErrorType,\n  type ReadContractParameters,\n  readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsTextParameters = Prettify<\n  Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {\n    /** ENS name to get Text for. */\n    name: string\n    /** Universal Resolver gateway URLs to use for resolving CCIP-read requests. */\n    gatewayUrls?: string[] | undefined\n    /** Text record to retrieve. */\n    key: string\n    /** Whether or not to throw errors propagated from the ENS Universal Resolver Contract. */\n    strict?: boolean | undefined\n    /** Address of ENS Universal Resolver Contract. */\n    universalResolverAddress?: Address | undefined\n  }\n>\n\nexport type GetEnsTextReturnType = string | null\n\nexport type GetEnsTextErrorType =\n  | GetChainContractAddressErrorType\n  | ReadContractErrorType\n  | ToHexErrorType\n  | PacketToBytesErrorType\n  | EncodeFunctionDataErrorType\n  | NamehashErrorType\n  | DecodeFunctionResultErrorType\n\n/**\n * Gets a text record for specified ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsTextParameters}\n * @returns Address for ENS resolver. {@link GetEnsTextReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsText, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const twitterRecord = await getEnsText(client, {\n *   name: normalize('wevm.eth'),\n *   key: 'com.twitter',\n * })\n * // 'wevm_dev'\n */\nexport async function getEnsText<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: GetEnsTextParameters,\n): Promise<GetEnsTextReturnType> {\n  const { blockNumber, blockTag, key, name, gatewayUrls, strict } = parameters\n  const { chain } = client\n\n  const universalResolverAddress = (() => {\n    if (parameters.universalResolverAddress)\n      return parameters.universalResolverAddress\n    if (!chain)\n      throw new Error(\n        'client chain not configured. universalResolverAddress is required.',\n      )\n    return getChainContractAddress({\n      blockNumber,\n      chain,\n      contract: 'ensUniversalResolver',\n    })\n  })()\n\n  const tlds = chain?.ensTlds\n  if (tlds && !tlds.some((tld) => name.endsWith(tld))) return null\n\n  try {\n    const readContractParameters = {\n      address: universalResolverAddress,\n      abi: universalResolverResolveAbi,\n      args: [\n        toHex(packetToBytes(name)),\n        encodeFunctionData({\n          abi: textResolverAbi,\n          functionName: 'text',\n          args: [namehash(name), key],\n        }),\n        gatewayUrls ?? [localBatchGatewayUrl],\n      ],\n      functionName: 'resolveWithGateways',\n      blockNumber,\n      blockTag,\n    } as const\n\n    const readContractAction = getAction(client, readContract, 'readContract')\n\n    const res = await readContractAction(readContractParameters)\n\n    if (res[0] === '0x') return null\n\n    const record = decodeFunctionResult({\n      abi: textResolverAbi,\n      functionName: 'text',\n      data: res[0],\n    })\n\n    return record === '' ? null : record\n  } catch (err) {\n    if (strict) throw err\n    if (isNullUniversalResolverError(err)) return null\n    throw err\n  }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { AssetGatewayUrls } from '../../types/ens.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type ParseAvatarRecordErrorType,\n  parseAvatarRecord,\n} from '../../utils/ens/avatar/parseAvatarRecord.js'\nimport { getAction } from '../../utils/getAction.js'\n\nimport {\n  type GetEnsTextErrorType,\n  type GetEnsTextParameters,\n  getEnsText,\n} from './getEnsText.js'\n\nexport type GetEnsAvatarParameters = Prettify<\n  Omit<GetEnsTextParameters, 'key'> & {\n    /** Gateway urls to resolve IPFS and/or Arweave assets. */\n    assetGatewayUrls?: AssetGatewayUrls | undefined\n  }\n>\n\nexport type GetEnsAvatarReturnType = string | null\n\nexport type GetEnsAvatarErrorType =\n  | GetEnsTextErrorType\n  | ParseAvatarRecordErrorType\n  | ErrorType\n\n/**\n * Gets the avatar of an ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsAvatar\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls [`getEnsText`](https://viem.sh/docs/ens/actions/getEnsText) with `key` set to `'avatar'`.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsAvatarParameters}\n * @returns Avatar URI or `null` if not found. {@link GetEnsAvatarReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsAvatar, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const ensAvatar = await getEnsAvatar(client, {\n *   name: normalize('wevm.eth'),\n * })\n * // 'https://ipfs.io/ipfs/Qma8mnp6xV3J2cRNf3mTth5C8nV11CAnceVinc3y8jSbio'\n */\nexport async function getEnsAvatar<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    blockNumber,\n    blockTag,\n    assetGatewayUrls,\n    name,\n    gatewayUrls,\n    strict,\n    universalResolverAddress,\n  }: GetEnsAvatarParameters,\n): Promise<GetEnsAvatarReturnType> {\n  const record = await getAction(\n    client,\n    getEnsText,\n    'getEnsText',\n  )({\n    blockNumber,\n    blockTag,\n    key: 'avatar',\n    name,\n    universalResolverAddress,\n    gatewayUrls,\n    strict,\n  })\n  if (!record) return null\n  try {\n    return await parseAvatarRecord(client, {\n      record,\n      gatewayUrls: assetGatewayUrls,\n    })\n  } catch {\n    return null\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { universalResolverReverseAbi } from '../../constants/abis.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { isNullUniversalResolverError } from '../../utils/ens/errors.js'\nimport { localBatchGatewayUrl } from '../../utils/ens/localBatchGatewayRequest.js'\nimport type { PacketToBytesErrorType } from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type ReadContractErrorType,\n  type ReadContractParameters,\n  readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsNameParameters = Prettify<\n  Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {\n    /**\n     * Address to get ENS name for.\n     */\n    address: Address\n    /**\n     * ENSIP-9 compliant coinType (chain) to get ENS name for.\n     *\n     * To get the `coinType` for a chain id, use the `toCoinType` function:\n     * ```ts\n     * import { toCoinType } from 'viem'\n     * import { base } from 'viem/chains'\n     *\n     * const coinType = toCoinType(base.id)\n     * ```\n     *\n     * @default 60n\n     */\n    coinType?: bigint | undefined\n    /**\n     * Universal Resolver gateway URLs to use for resolving CCIP-read requests.\n     */\n    gatewayUrls?: string[] | undefined\n    /**\n     * Whether or not to throw errors propagated from the ENS Universal Resolver Contract.\n     */\n    strict?: boolean | undefined\n    /**\n     * Address of ENS Universal Resolver Contract.\n     */\n    universalResolverAddress?: Address | undefined\n  }\n>\n\nexport type GetEnsNameReturnType = string | null\n\nexport type GetEnsNameErrorType =\n  | GetChainContractAddressErrorType\n  | ReadContractErrorType\n  | PacketToBytesErrorType\n  | ErrorType\n\n/**\n * Gets primary name for specified address.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsName\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `reverse(bytes)` on ENS Universal Resolver Contract to \"reverse resolve\" the address to the primary ENS name.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsNameParameters}\n * @returns Name or `null` if not found. {@link GetEnsNameReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsName } from 'viem/ens'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const ensName = await getEnsName(client, {\n *   address: '0xd2135CfB216b74109775236E36d4b433F1DF507B',\n * })\n * // 'wevm.eth'\n */\nexport async function getEnsName<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: GetEnsNameParameters,\n): Promise<GetEnsNameReturnType> {\n  const {\n    address,\n    blockNumber,\n    blockTag,\n    coinType = 60n,\n    gatewayUrls,\n    strict,\n  } = parameters\n  const { chain } = client\n\n  const universalResolverAddress = (() => {\n    if (parameters.universalResolverAddress)\n      return parameters.universalResolverAddress\n    if (!chain)\n      throw new Error(\n        'client chain not configured. universalResolverAddress is required.',\n      )\n    return getChainContractAddress({\n      blockNumber,\n      chain,\n      contract: 'ensUniversalResolver',\n    })\n  })()\n\n  try {\n    const readContractParameters = {\n      address: universalResolverAddress,\n      abi: universalResolverReverseAbi,\n      args: [address, coinType, gatewayUrls ?? [localBatchGatewayUrl]],\n      functionName: 'reverseWithGateways',\n      blockNumber,\n      blockTag,\n    } as const\n\n    const readContractAction = getAction(client, readContract, 'readContract')\n\n    const [name] = await readContractAction(readContractParameters)\n\n    return name || null\n  } catch (err) {\n    if (strict) throw err\n    if (isNullUniversalResolverError(err)) return null\n    throw err\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport {\n  type PacketToBytesErrorType,\n  packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type ReadContractParameters,\n  readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsResolverParameters = Prettify<\n  Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {\n    /** Name to get the address for. */\n    name: string\n    /** Address of ENS Universal Resolver Contract. */\n    universalResolverAddress?: Address | undefined\n  }\n>\n\nexport type GetEnsResolverReturnType = Address\n\nexport type GetEnsResolverErrorType =\n  | GetChainContractAddressErrorType\n  | ToHexErrorType\n  | PacketToBytesErrorType\n  | ErrorType\n\n/**\n * Gets resolver for ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `findResolver(bytes)` on ENS Universal Resolver Contract to retrieve the resolver of an ENS name.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsResolverParameters}\n * @returns Address for ENS resolver. {@link GetEnsResolverReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsResolver, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const resolverAddress = await getEnsResolver(client, {\n *   name: normalize('wevm.eth'),\n * })\n * // '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41'\n */\nexport async function getEnsResolver<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: GetEnsResolverParameters,\n): Promise<GetEnsResolverReturnType> {\n  const { blockNumber, blockTag, name } = parameters\n  const { chain } = client\n\n  const universalResolverAddress = (() => {\n    if (parameters.universalResolverAddress)\n      return parameters.universalResolverAddress\n    if (!chain)\n      throw new Error(\n        'client chain not configured. universalResolverAddress is required.',\n      )\n    return getChainContractAddress({\n      blockNumber,\n      chain,\n      contract: 'ensUniversalResolver',\n    })\n  })()\n\n  const tlds = chain?.ensTlds\n  if (tlds && !tlds.some((tld) => name.endsWith(tld)))\n    throw new Error(\n      `${name} is not a valid ENS TLD (${tlds?.join(', ')}) for chain \"${chain.name}\" (id: ${chain.id}).`,\n    )\n\n  const [resolverAddress] = await getAction(\n    client,\n    readContract,\n    'readContract',\n  )({\n    address: universalResolverAddress,\n    abi: [\n      {\n        inputs: [{ type: 'bytes' }],\n        name: 'findResolver',\n        outputs: [\n          { type: 'address' },\n          { type: 'bytes32' },\n          { type: 'uint256' },\n        ],\n        stateMutability: 'view',\n        type: 'function',\n      },\n    ],\n    functionName: 'findResolver',\n    args: [toHex(packetToBytes(name))],\n    blockNumber,\n    blockTag,\n  })\n  return resolverAddress\n}\n", "import type { Address } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RpcTransactionRequest } from '../../types/rpc.js'\nimport type { AccessList, TransactionRequest } from '../../types/transaction.js'\nimport type { ExactPartial, Prettify, UnionOmit } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type GetCallErrorReturnType,\n  getCallError,\n} from '../../utils/errors/getCallError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n  type FormatTransactionRequestErrorType,\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport type {\n  AssertRequestErrorType,\n  AssertRequestParameters,\n} from '../../utils/transaction/assertRequest.js'\nimport { assertRequest } from '../../utils/transaction/assertRequest.js'\n\nexport type CreateAccessListParameters<\n  chain extends Chain | undefined = Chain | undefined,\n> = UnionOmit<\n  FormattedTransactionRequest<chain>,\n  'from' | 'nonce' | 'accessList'\n> & {\n  /** Account attached to the call (msg.sender). */\n  account?: Account | Address | undefined\n} & (\n    | {\n        /** The balance of the account at a block number. */\n        blockNumber?: bigint | undefined\n        blockTag?: undefined\n      }\n    | {\n        blockNumber?: undefined\n        /**\n         * The balance of the account at a block tag.\n         * @default 'latest'\n         */\n        blockTag?: BlockTag | undefined\n      }\n  )\n\nexport type CreateAccessListReturnType = Prettify<{\n  accessList: AccessList\n  gasUsed: bigint\n}>\n\nexport type CreateAccessListErrorType = GetCallErrorReturnType<\n  | ParseAccountErrorType\n  | AssertRequestErrorType\n  | NumberToHexErrorType\n  | FormatTransactionRequestErrorType\n  | RequestErrorType\n>\n\n/**\n * Creates an EIP-2930 access list.\n *\n * - Docs: https://viem.sh/docs/actions/public/createAccessList\n * - JSON-RPC Methods: `eth_createAccessList`\n *\n * @param client - Client to use\n * @param parameters - {@link CreateAccessListParameters}\n * @returns The access list. {@link CreateAccessListReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createAccessList } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const data = await createAccessList(client, {\n *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n *   data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * })\n */\nexport async function createAccessList<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  args: CreateAccessListParameters<chain>,\n): Promise<CreateAccessListReturnType> {\n  const {\n    account: account_ = client.account,\n    blockNumber,\n    blockTag = 'latest',\n    blobs,\n    data,\n    gas,\n    gasPrice,\n    maxFeePerBlobGas,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    to,\n    value,\n    ...rest\n  } = args\n  const account = account_ ? parseAccount(account_) : undefined\n\n  try {\n    assertRequest(args as AssertRequestParameters)\n\n    const blockNumberHex =\n      typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n    const block = blockNumberHex || blockTag\n\n    const chainFormat = client.chain?.formatters?.transactionRequest?.format\n    const format = chainFormat || formatTransactionRequest\n\n    const request = format(\n      {\n        // Pick out extra data that might exist on the chain's transaction request type.\n        ...extract(rest, { format: chainFormat }),\n        account,\n        blobs,\n        data,\n        gas,\n        gasPrice,\n        maxFeePerBlobGas,\n        maxFeePerGas,\n        maxPriorityFeePerGas,\n        to,\n        value,\n      } as TransactionRequest,\n      'createAccessList',\n    ) as TransactionRequest\n\n    const response = await client.request({\n      method: 'eth_createAccessList',\n      params: [request as ExactPartial<RpcTransactionRequest>, block],\n    })\n    return {\n      accessList: response.accessList,\n      gasUsed: BigInt(response.gasUsed),\n    }\n  } catch (err) {\n    throw getCallError(err as ErrorType, {\n      ...args,\n      account,\n      chain: client.chain,\n    })\n  }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreateBlockFilterReturnType = Filter<'block'>\n\nexport type CreateBlockFilterErrorType = RequestErrorType | ErrorType\n\n/**\n * Creates a [`Filter`](https://viem.sh/docs/glossary/types#filter) to listen for new block hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createBlockFilter\n * - JSON-RPC Methods: [`eth_newBlockFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newBlockFilter)\n *\n * @param client - Client to use\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateBlockFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createBlockFilter } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createBlockFilter(client)\n * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'block' }\n */\nexport async function createBlockFilter<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n): Promise<CreateBlockFilterReturnType> {\n  const getRequest = createFilterRequestScope(client, {\n    method: 'eth_newBlockFilter',\n  })\n  const id = await client.request({\n    method: 'eth_newBlockFilter',\n  })\n  return { id, request: getRequest(id), type: 'block' }\n}\n", "import type { AbiEvent, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  MaybeAbiEventName,\n  MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Hex, LogTopic } from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type EncodeEventTopicsErrorType,\n  type EncodeEventTopicsParameters,\n  encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreateEventFilterParameters<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  //\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n  _args extends\n    | MaybeExtractEventArgsFromAbi<abiEvents, _eventName>\n    | undefined = undefined,\n> = {\n  address?: Address | Address[] | undefined\n  fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n  toBlock?: toBlock | BlockNumber | BlockTag | undefined\n} & (MaybeExtractEventArgsFromAbi<\n  abiEvents,\n  _eventName\n> extends infer eventFilterArgs\n  ?\n      | {\n          args:\n            | eventFilterArgs\n            | (_args extends eventFilterArgs ? _args : never)\n          event: abiEvent\n          events?: undefined\n          /**\n           * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n           * @default false\n           */\n          strict?: strict | undefined\n        }\n      | {\n          args?: undefined\n          event?: abiEvent | undefined\n          events?: undefined\n          /**\n           * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n           * @default false\n           */\n          strict?: strict | undefined\n        }\n      | {\n          args?: undefined\n          event?: undefined\n          events: abiEvents | undefined\n          /**\n           * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n           * @default false\n           */\n          strict?: strict | undefined\n        }\n      | {\n          args?: undefined\n          event?: undefined\n          events?: undefined\n          strict?: undefined\n        }\n  : {\n      args?: undefined\n      event?: undefined\n      events?: undefined\n      strict?: undefined\n    })\n\nexport type CreateEventFilterReturnType<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n  _args extends\n    | MaybeExtractEventArgsFromAbi<abiEvents, _eventName>\n    | undefined = undefined,\n> = Prettify<\n  Filter<'event', abiEvents, _eventName, _args, strict, fromBlock, toBlock>\n>\n\nexport type CreateEventFilterErrorType =\n  | EncodeEventTopicsErrorType\n  | RequestErrorType\n  | NumberToHexErrorType\n  | ErrorType\n\n/**\n * Creates a [`Filter`](https://viem.sh/docs/glossary/types#filter) to listen for new events that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createEventFilter\n * - JSON-RPC Methods: [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter)\n *\n * @param client - Client to use\n * @param parameters - {@link CreateEventFilterParameters}\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateEventFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createEventFilter } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createEventFilter(client, {\n *   address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * })\n */\nexport async function createEventFilter<\n  chain extends Chain | undefined,\n  const abiEvent extends AbiEvent | undefined = undefined,\n  const abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber<bigint> | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber<bigint> | BlockTag | undefined = undefined,\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n  _args extends\n    | MaybeExtractEventArgsFromAbi<abiEvents, _eventName>\n    | undefined = undefined,\n>(\n  client: Client<Transport, chain>,\n  {\n    address,\n    args,\n    event,\n    events: events_,\n    fromBlock,\n    strict,\n    toBlock,\n  }: CreateEventFilterParameters<\n    abiEvent,\n    abiEvents,\n    strict,\n    fromBlock,\n    toBlock,\n    _eventName,\n    _args\n  > = {} as any,\n): Promise<\n  CreateEventFilterReturnType<\n    abiEvent,\n    abiEvents,\n    strict,\n    fromBlock,\n    toBlock,\n    _eventName,\n    _args\n  >\n> {\n  const events = events_ ?? (event ? [event] : undefined)\n\n  const getRequest = createFilterRequestScope(client, {\n    method: 'eth_newFilter',\n  })\n\n  let topics: LogTopic[] = []\n  if (events) {\n    const encoded = (events as AbiEvent[]).flatMap((event) =>\n      encodeEventTopics({\n        abi: [event],\n        eventName: (event as AbiEvent).name,\n        args,\n      } as EncodeEventTopicsParameters),\n    )\n    // TODO: Clean up type casting\n    topics = [encoded as LogTopic]\n    if (event) topics = topics[0] as LogTopic[]\n  }\n\n  const id: Hex = await client.request({\n    method: 'eth_newFilter',\n    params: [\n      {\n        address,\n        fromBlock:\n          typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n        toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n        ...(topics.length ? { topics } : {}),\n      },\n    ],\n  })\n\n  return {\n    abi: events,\n    args,\n    eventName: event ? (event as AbiEvent).name : undefined,\n    fromBlock,\n    id,\n    request: getRequest(id),\n    strict: Boolean(strict),\n    toBlock,\n    type: 'event',\n  } as unknown as CreateEventFilterReturnType<\n    abiEvent,\n    abiEvents,\n    strict,\n    fromBlock,\n    toBlock,\n    _eventName,\n    _args\n  >\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreatePendingTransactionFilterReturnType = Filter<'transaction'>\n\nexport type CreatePendingTransactionFilterErrorType =\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Creates a Filter to listen for new pending transaction hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createPendingTransactionFilter\n * - JSON-RPC Methods: [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter)\n *\n * @param client - Client to use\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateBlockFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createPendingTransactionFilter(client)\n * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'transaction' }\n */\nexport async function createPendingTransactionFilter<\n  transport extends Transport,\n  chain extends Chain | undefined,\n>(\n  client: Client<transport, chain>,\n): Promise<CreatePendingTransactionFilterReturnType> {\n  const getRequest = createFilterRequestScope(client, {\n    method: 'eth_newPendingTransactionFilter',\n  })\n  const id = await client.request({\n    method: 'eth_newPendingTransactionFilter',\n  })\n  return { id, request: getRequest(id), type: 'transaction' }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { multicall3Abi } from '../../constants/abis.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport { decodeFunctionResult } from '../../utils/abi/decodeFunctionResult.js'\nimport { encodeFunctionData } from '../../utils/abi/encodeFunctionData.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type CallParameters, call } from './call.js'\n\nexport type GetBalanceParameters = {\n  /** The address of the account. */\n  address: Address\n} & (\n  | {\n      /** The balance of the account at a block number. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n  | {\n      blockNumber?: undefined\n      /** The balance of the account at a block tag. */\n      blockTag?: BlockTag | undefined\n    }\n)\n\nexport type GetBalanceReturnType = bigint\n\nexport type GetBalanceErrorType =\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns the balance of an address in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBalance\n * - JSON-RPC Methods: [`eth_getBalance`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance)\n *\n * You can convert the balance to ether units with [`formatEther`](https://viem.sh/docs/utilities/formatEther).\n *\n * ```ts\n * const balance = await getBalance(client, {\n *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   blockTag: 'safe'\n * })\n * const balanceAsEther = formatEther(balance)\n * // \"6.942\"\n * ```\n *\n * @param client - Client to use\n * @param parameters - {@link GetBalanceParameters}\n * @returns The balance of the address in wei. {@link GetBalanceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBalance } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const balance = await getBalance(client, {\n *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n * // 10000000000000000000000n (wei)\n */\nexport async function getBalance<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    address,\n    blockNumber,\n    blockTag = client.experimental_blockTag ?? 'latest',\n  }: GetBalanceParameters,\n): Promise<GetBalanceReturnType> {\n  if (client.batch?.multicall && client.chain?.contracts?.multicall3) {\n    const multicall3Address = client.chain.contracts.multicall3.address\n\n    const calldata = encodeFunctionData({\n      abi: multicall3Abi,\n      functionName: 'getEthBalance',\n      args: [address],\n    })\n\n    const { data } = await getAction(\n      client,\n      call,\n      'call',\n    )({\n      to: multicall3Address,\n      data: calldata,\n      blockNumber,\n      blockTag,\n    } as unknown as CallParameters<chain>)\n\n    return decodeFunctionResult({\n      abi: multicall3Abi,\n      functionName: 'getEthBalance',\n      args: [address],\n      data: data || '0x',\n    })\n  }\n\n  const blockNumberHex =\n    typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n\n  const balance = await client.request({\n    method: 'eth_getBalance',\n    params: [address, blockNumberHex || blockTag],\n  })\n  return BigInt(balance)\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type GetBlobBaseFeeReturnType = bigint\n\nexport type GetBlobBaseFeeErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns the base fee per blob gas in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlobBaseFee\n * - JSON-RPC Methods: [`eth_blobBaseFee`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blobBaseFee)\n *\n * @param client - Client to use\n * @returns The blob base fee (in wei). {@link GetBlobBaseFeeReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlobBaseFee } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const blobBaseFee = await getBlobBaseFee(client)\n */\nexport async function getBlobBaseFee<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: Client<Transport, chain, account>,\n): Promise<GetBlobBaseFeeReturnType> {\n  const baseFee = await client.request({\n    method: 'eth_blobBaseFee',\n  })\n  return BigInt(baseFee)\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { Quantity } from '../../types/rpc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type HexToNumberErrorType,\n  hexToNumber,\n} from '../../utils/encoding/fromHex.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetBlockTransactionCountParameters =\n  | {\n      /** Hash of the block. */\n      blockHash?: Hash | undefined\n      blockNumber?: undefined\n      blockTag?: undefined\n    }\n  | {\n      blockHash?: undefined\n      /** The block number. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n  | {\n      blockHash?: undefined\n      blockNumber?: undefined\n      /** The block tag. Defaults to 'latest'. */\n      blockTag?: BlockTag | undefined\n    }\n\nexport type GetBlockTransactionCountReturnType = number\n\nexport type GetBlockTransactionCountErrorType =\n  | NumberToHexErrorType\n  | HexToNumberErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns the number of Transactions at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlockTransactionCount\n * - JSON-RPC Methods:\n *   - Calls [`eth_getBlockTransactionCountByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbynumber) for `blockNumber` & `blockTag`.\n *   - Calls [`eth_getBlockTransactionCountByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbyhash) for `blockHash`.\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockTransactionCountParameters}\n * @returns The block transaction count. {@link GetBlockTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlockTransactionCount } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const count = await getBlockTransactionCount(client)\n */\nexport async function getBlockTransactionCount<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    blockHash,\n    blockNumber,\n    blockTag = 'latest',\n  }: GetBlockTransactionCountParameters = {},\n): Promise<GetBlockTransactionCountReturnType> {\n  const blockNumberHex =\n    blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n  let count: Quantity\n  if (blockHash) {\n    count = await client.request(\n      {\n        method: 'eth_getBlockTransactionCountByHash',\n        params: [blockHash],\n      },\n      { dedupe: true },\n    )\n  } else {\n    count = await client.request(\n      {\n        method: 'eth_getBlockTransactionCountByNumber',\n        params: [blockNumberHex || blockTag],\n      },\n      { dedupe: Boolean(blockNumberHex) },\n    )\n  }\n\n  return hexToNumber(count)\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetCodeParameters = {\n  address: Address\n} & (\n  | {\n      blockNumber?: undefined\n      blockTag?: BlockTag | undefined\n    }\n  | {\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n)\n\nexport type GetCodeReturnType = Hex | undefined\n\nexport type GetCodeErrorType =\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Retrieves the bytecode at an address.\n *\n * - Docs: https://viem.sh/docs/contract/getCode\n * - JSON-RPC Methods: [`eth_getCode`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getcode)\n *\n * @param client - Client to use\n * @param parameters - {@link GetCodeParameters}\n * @returns The contract's bytecode. {@link GetCodeReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getCode } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const code = await getCode(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * })\n */\nexport async function getCode<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { address, blockNumber, blockTag = 'latest' }: GetCodeParameters,\n): Promise<GetCodeReturnType> {\n  const blockNumberHex =\n    blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n  const hex = await client.request(\n    {\n      method: 'eth_getCode',\n      params: [address, blockNumberHex || blockTag],\n    },\n    { dedupe: Boolean(blockNumberHex) },\n  )\n  if (hex === '0x') return undefined\n  return hex\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport {\n  type GetAddressErrorType,\n  getAddress,\n} from '../../utils/address/getAddress.js'\nimport { type SizeErrorType, size } from '../../utils/data/size.js'\nimport { type SliceErrorType, slice } from '../../utils/data/slice.js'\nimport { type GetCodeErrorType, getCode } from './getCode.js'\n\nexport type GetDelegationParameters = {\n  /** The address to check for delegation. */\n  address: Address\n} & (\n  | {\n      blockNumber?: undefined\n      blockTag?: BlockTag | undefined\n    }\n  | {\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n)\n\nexport type GetDelegationReturnType = Address | undefined\n\nexport type GetDelegationErrorType =\n  | GetAddressErrorType\n  | GetCodeErrorType\n  | SliceErrorType\n  | SizeErrorType\n  | ErrorType\n\n/**\n * Returns the address that an account has delegated to via EIP-7702.\n *\n * - Docs: https://viem.sh/docs/actions/public/getDelegation\n *\n * @param client - Client to use\n * @param parameters - {@link GetDelegationParameters}\n * @returns The delegated address, or undefined if not delegated. {@link GetDelegationReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getDelegation } from 'viem/actions'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const delegation = await getDelegation(client, {\n *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function getDelegation<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { address, blockNumber, blockTag = 'latest' }: GetDelegationParameters,\n): Promise<GetDelegationReturnType> {\n  const code = await getCode(client, {\n    address,\n    ...(blockNumber !== undefined ? { blockNumber } : { blockTag }),\n  } as GetDelegationParameters)\n\n  if (!code) return undefined\n\n  // EIP-7702 delegation designator: 0xef0100 prefix (3 bytes) + address (20 bytes) = 23 bytes\n  if (size(code) !== 23) return undefined\n\n  // Check for EIP-7702 delegation designator prefix\n  if (!code.startsWith('0xef0100')) return undefined\n\n  // Extract the delegated address (bytes 3-23) and checksum it\n  return getAddress(slice(code, 3, 23))\n}\n", "import type { Address } from 'abitype'\nimport { BaseError } from './base.js'\n\nexport type Eip712DomainNotFoundErrorType = Eip712DomainNotFoundError & {\n  name: 'Eip712DomainNotFoundError'\n}\nexport class Eip712DomainNotFoundError extends BaseError {\n  constructor({ address }: { address: Address }) {\n    super(`No EIP-712 domain found on contract \"${address}\".`, {\n      metaMessages: [\n        'Ensure that:',\n        `- The contract is deployed at the address \"${address}\".`,\n        '- `eip712Domain()` function exists on the contract.',\n        '- `eip712Domain()` function matches signature to ERC-5267 specification.',\n      ],\n      name: 'Eip712DomainNotFoundError',\n    })\n  }\n}\n", "import type { Address, TypedDataDomain } from 'abitype'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  Eip712DomainNotFoundError,\n  type Eip712DomainNotFoundErrorType,\n} from '../../errors/eip712.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequiredBy } from '../../types/utils.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type ReadContractErrorType,\n  type ReadContractParameters,\n  readContract,\n} from './readContract.js'\n\nexport type GetEip712DomainParameters = {\n  address: Address\n} & Pick<ReadContractParameters, 'factory' | 'factoryData'>\n\nexport type GetEip712DomainReturnType = {\n  domain: RequiredBy<\n    TypedDataDomain,\n    'chainId' | 'name' | 'verifyingContract' | 'salt' | 'version'\n  >\n  fields: Hex\n  extensions: readonly bigint[]\n}\n\nexport type GetEip712DomainErrorType =\n  | Eip712DomainNotFoundErrorType\n  | ReadContractErrorType\n  | ErrorType\n\n/**\n * Reads the EIP-712 domain from a contract, based on the ERC-5267 specification.\n *\n * @param client - A {@link Client} instance.\n * @param parameters - The parameters of the action. {@link GetEip712DomainParameters}\n * @returns The EIP-712 domain, fields, and extensions. {@link GetEip712DomainReturnType}\n *\n * @example\n * ```ts\n * import { createPublicClient, http, getEip712Domain } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n *\n * const domain = await getEip712Domain(client, {\n *   address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n * })\n * // {\n * //   domain: {\n * //     name: 'ExampleContract',\n * //     version: '1',\n * //     chainId: 1,\n * //     verifyingContract: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n * //   },\n * //   fields: '0x0f',\n * //   extensions: [],\n * // }\n * ```\n */\nexport async function getEip712Domain(\n  client: Client<Transport>,\n  parameters: GetEip712DomainParameters,\n): Promise<GetEip712DomainReturnType> {\n  const { address, factory, factoryData } = parameters\n\n  try {\n    const [\n      fields,\n      name,\n      version,\n      chainId,\n      verifyingContract,\n      salt,\n      extensions,\n    ] = await getAction(\n      client,\n      readContract,\n      'readContract',\n    )({\n      abi,\n      address,\n      functionName: 'eip712Domain',\n      factory,\n      factoryData,\n    })\n\n    return {\n      domain: {\n        name,\n        version,\n        chainId: Number(chainId),\n        verifyingContract,\n        salt,\n      },\n      extensions,\n      fields,\n    }\n  } catch (e) {\n    const error = e as ReadContractErrorType\n    if (\n      error.name === 'ContractFunctionExecutionError' &&\n      error.cause.name === 'ContractFunctionZeroDataError'\n    ) {\n      throw new Eip712DomainNotFoundError({ address })\n    }\n    throw error\n  }\n}\n\nconst abi = [\n  {\n    inputs: [],\n    name: 'eip712Domain',\n    outputs: [\n      { name: 'fields', type: 'bytes1' },\n      { name: 'name', type: 'string' },\n      { name: 'version', type: 'string' },\n      { name: 'chainId', type: 'uint256' },\n      { name: 'verifyingContract', type: 'address' },\n      { name: 'salt', type: 'bytes32' },\n      { name: 'extensions', type: 'uint256[]' },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n] as const\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { FeeHistory } from '../../types/fee.js'\nimport type { RpcFeeHistory } from '../../types/rpc.js'\n\nexport type FormatFeeHistoryErrorType = ErrorType\n\nexport function formatFeeHistory(feeHistory: RpcFeeHistory): FeeHistory {\n  return {\n    baseFeePerGas: feeHistory.baseFeePerGas.map((value) => BigInt(value)),\n    gasUsedRatio: feeHistory.gasUsedRatio,\n    oldestBlock: BigInt(feeHistory.oldestBlock),\n    reward: feeHistory.reward?.map((reward) =>\n      reward.map((value) => BigInt(value)),\n    ),\n  }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { FeeHistory } from '../../types/fee.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type FormatFeeHistoryErrorType,\n  formatFeeHistory,\n} from '../../utils/formatters/feeHistory.js'\n\nexport type GetFeeHistoryParameters = {\n  /**\n   * Number of blocks in the requested range. Between 1 and 1024 blocks can be requested in a single query. Less than requested may be returned if not all blocks are available.\n   */\n  blockCount: number\n  /**\n   * A monotonically increasing list of percentile values to sample from each block's effective priority fees per gas in ascending order, weighted by gas used.\n   */\n  rewardPercentiles: number[]\n} & (\n  | {\n      blockNumber?: undefined\n      /**\n       * Highest number block of the requested range.\n       * @default 'latest'\n       */\n      blockTag?: BlockTag | undefined\n    }\n  | {\n      /** Highest number block of the requested range. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n)\nexport type GetFeeHistoryReturnType = FeeHistory\n\nexport type GetFeeHistoryErrorType =\n  | NumberToHexErrorType\n  | RequestErrorType\n  | FormatFeeHistoryErrorType\n\n/**\n * Returns a collection of historical gas information.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFeeHistory\n * - JSON-RPC Methods: [`eth_feeHistory`](https://docs.alchemy.com/reference/eth-feehistory)\n *\n * @param client - Client to use\n * @param parameters - {@link GetFeeHistoryParameters}\n * @returns The gas estimate (in wei). {@link GetFeeHistoryReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getFeeHistory } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const feeHistory = await getFeeHistory(client, {\n *   blockCount: 4,\n *   rewardPercentiles: [25, 75],\n * })\n */\nexport async function getFeeHistory<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    blockCount,\n    blockNumber,\n    blockTag = 'latest',\n    rewardPercentiles,\n  }: GetFeeHistoryParameters,\n): Promise<GetFeeHistoryReturnType> {\n  const blockNumberHex =\n    typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n  const feeHistory = await client.request(\n    {\n      method: 'eth_feeHistory',\n      params: [\n        numberToHex(blockCount),\n        blockNumberHex || blockTag,\n        rewardPercentiles,\n      ],\n    },\n    { dedupe: Boolean(blockNumberHex) },\n  )\n  return formatFeeHistory(feeHistory)\n}\n", "import type { Abi, AbiEvent, ExtractAbiEvent } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { DecodeEventLogErrorType } from '../../utils/abi/decodeEventLog.js'\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type FormatLogErrorType,\n  formatLog,\n} from '../../utils/formatters/log.js'\n\nexport type GetFilterLogsParameters<\n  abi extends Abi | readonly unknown[] | undefined = undefined,\n  eventName extends string | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n  filter: Filter<'event', abi, eventName, any, strict, fromBlock, toBlock>\n}\nexport type GetFilterLogsReturnType<\n  abi extends Abi | readonly unknown[] | undefined = undefined,\n  eventName extends string | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  _AbiEvent extends AbiEvent | undefined = abi extends Abi\n    ? eventName extends string\n      ? ExtractAbiEvent<abi, eventName>\n      : undefined\n    : undefined,\n  _Pending extends boolean =\n    | (fromBlock extends 'pending' ? true : false)\n    | (toBlock extends 'pending' ? true : false),\n> = Log<bigint, number, _Pending, _AbiEvent, strict, abi, eventName>[]\n\nexport type GetFilterLogsErrorType =\n  | RequestErrorType\n  | DecodeEventLogErrorType\n  | FormatLogErrorType\n  | ErrorType\n\n/**\n * Returns a list of event logs since the filter was created.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFilterLogs\n * - JSON-RPC Methods: [`eth_getFilterLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterlogs)\n *\n * `getFilterLogs` is only compatible with **event filters**.\n *\n * @param client - Client to use\n * @param parameters - {@link GetFilterLogsParameters}\n * @returns A list of event logs. {@link GetFilterLogsReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createEventFilter, getFilterLogs } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createEventFilter(client, {\n *   address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n *   event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n * })\n * const logs = await getFilterLogs(client, { filter })\n */\nexport async function getFilterLogs<\n  chain extends Chain | undefined,\n  const abi extends Abi | readonly unknown[] | undefined,\n  eventName extends string | undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n  _client: Client<Transport, chain>,\n  {\n    filter,\n  }: GetFilterLogsParameters<abi, eventName, strict, fromBlock, toBlock>,\n): Promise<\n  GetFilterLogsReturnType<abi, eventName, strict, fromBlock, toBlock>\n> {\n  const strict = filter.strict ?? false\n\n  const logs = await filter.request({\n    method: 'eth_getFilterLogs',\n    params: [filter.id],\n  })\n\n  const formattedLogs = logs.map((log) => formatLog(log))\n  if (!filter.abi)\n    return formattedLogs as GetFilterLogsReturnType<\n      abi,\n      eventName,\n      strict,\n      fromBlock,\n      toBlock\n    >\n  return parseEventLogs({\n    abi: filter.abi,\n    logs: formattedLogs,\n    strict,\n  }) as unknown as GetFilterLogsReturnType<\n    abi,\n    eventName,\n    strict,\n    fromBlock,\n    toBlock\n  >\n}\n", "import type {\n  AbiParameterToPrimitiveType,\n  AbiType,\n  Address,\n  SolidityAddress,\n  SolidityArrayWithoutTuple,\n  SolidityBool,\n  SolidityBytes,\n  SolidityInt,\n  SolidityString,\n} from 'abitype'\n\nimport {\n  AbiEncodingLengthMismatchError,\n  type AbiEncodingLengthMismatchErrorType,\n  BytesSizeMismatchError,\n  type BytesSizeMismatchErrorType,\n  UnsupportedPackedAbiType,\n} from '../../errors/abi.js'\nimport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport { type PadErrorType, pad } from '../data/pad.js'\nimport {\n  type BoolToHexErrorType,\n  boolToHex,\n  type NumberToHexErrorType,\n  numberToHex,\n  type StringToHexErrorType,\n  stringToHex,\n} from '../encoding/toHex.js'\nimport { arrayRegex, bytesRegex, integerRegex } from '../regex.js'\n\ntype PackedAbiType =\n  | SolidityAddress\n  | SolidityBool\n  | SolidityBytes\n  | SolidityInt\n  | SolidityString\n  | SolidityArrayWithoutTuple\n\ntype EncodePackedValues<\n  packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n> = {\n  [K in keyof packedAbiTypes]: packedAbiTypes[K] extends AbiType\n    ? AbiParameterToPrimitiveType<{ type: packedAbiTypes[K] }>\n    : unknown\n}\n\nexport type EncodePackedErrorType =\n  | AbiEncodingLengthMismatchErrorType\n  | ConcatHexErrorType\n  | EncodeErrorType\n  | ErrorType\n\nexport function encodePacked<\n  const packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n>(types: packedAbiTypes, values: EncodePackedValues<packedAbiTypes>): Hex {\n  if (types.length !== values.length)\n    throw new AbiEncodingLengthMismatchError({\n      expectedLength: types.length as number,\n      givenLength: values.length as number,\n    })\n\n  const data: Hex[] = []\n  for (let i = 0; i < (types as unknown[]).length; i++) {\n    const type = types[i]\n    const value = values[i]\n    data.push(encode(type, value))\n  }\n  return concatHex(data)\n}\n\ntype EncodeErrorType =\n  | BoolToHexErrorType\n  | BytesSizeMismatchErrorType\n  | InvalidAddressErrorType\n  | IsAddressErrorType\n  | NumberToHexErrorType\n  | PadErrorType\n  | StringToHexErrorType\n  | UnsupportedPackedAbiType\n  | ErrorType\n\nfunction encode<const packedAbiType extends PackedAbiType | unknown>(\n  type: packedAbiType,\n  value: EncodePackedValues<[packedAbiType]>[0],\n  isArray = false,\n): Hex {\n  if (type === 'address') {\n    const address = value as Address\n    if (!isAddress(address)) throw new InvalidAddressError({ address })\n    return pad(address.toLowerCase() as Hex, {\n      size: isArray ? 32 : null,\n    }) as Address\n  }\n  if (type === 'string') return stringToHex(value as string)\n  if (type === 'bytes') return value as Hex\n  if (type === 'bool')\n    return pad(boolToHex(value as boolean), { size: isArray ? 32 : 1 })\n\n  const intMatch = (type as string).match(integerRegex)\n  if (intMatch) {\n    const [_type, baseType, bits = '256'] = intMatch\n    const size = Number.parseInt(bits, 10) / 8\n    return numberToHex(value as number, {\n      size: isArray ? 32 : size,\n      signed: baseType === 'int',\n    })\n  }\n\n  const bytesMatch = (type as string).match(bytesRegex)\n  if (bytesMatch) {\n    const [_type, size] = bytesMatch\n    if (Number.parseInt(size, 10) !== ((value as Hex).length - 2) / 2)\n      throw new BytesSizeMismatchError({\n        expectedSize: Number.parseInt(size, 10),\n        givenSize: ((value as Hex).length - 2) / 2,\n      })\n    return pad(value as Hex, { dir: 'right', size: isArray ? 32 : null }) as Hex\n  }\n\n  const arrayMatch = (type as string).match(arrayRegex)\n  if (arrayMatch && Array.isArray(value)) {\n    const [_type, childType] = arrayMatch\n    const data: Hex[] = []\n    for (let i = 0; i < value.length; i++) {\n      data.push(encode(childType, value[i], true))\n    }\n    if (data.length === 0) return '0x'\n    return concatHex(data)\n  }\n\n  throw new UnsupportedPackedAbiType(type)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray } from '../../types/misc.js'\n\nexport type IsBytesErrorType = ErrorType\n\nexport function isBytes(value: unknown): value is ByteArray {\n  if (!value) return false\n  if (typeof value !== 'object') return false\n  if (!('BYTES_PER_ELEMENT' in value)) return false\n  return (\n    value.BYTES_PER_ELEMENT === 1 && value.constructor.name === 'Uint8Array'\n  )\n}\n", "import type { Address } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type ConcatErrorType, concat } from '../data/concat.js'\nimport { type IsBytesErrorType, isBytes } from '../data/isBytes.js'\nimport { type PadErrorType, pad } from '../data/pad.js'\nimport { type SliceErrorType, slice } from '../data/slice.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type ToRlpErrorType, toRlp } from '../encoding/toRlp.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport { type GetAddressErrorType, getAddress } from './getAddress.js'\n\nexport type GetCreateAddressOptions = {\n  from: Address\n  nonce: bigint\n}\n\nexport type GetCreate2AddressOptions =\n  | {\n      bytecode: ByteArray | Hex\n      from: Address\n      salt: ByteArray | Hex\n    }\n  | {\n      bytecodeHash: ByteArray | Hex\n      from: Address\n      salt: ByteArray | Hex\n    }\n\nexport type GetContractAddressOptions =\n  | ({\n      opcode?: 'CREATE' | undefined\n    } & GetCreateAddressOptions)\n  | ({ opcode: 'CREATE2' } & GetCreate2AddressOptions)\n\nexport function getContractAddress(opts: GetContractAddressOptions) {\n  if (opts.opcode === 'CREATE2') return getCreate2Address(opts)\n  return getCreateAddress(opts)\n}\n\nexport type GetCreateAddressErrorType =\n  | Keccak256ErrorType\n  | GetAddressErrorType\n  | ToBytesErrorType\n  | ToRlpErrorType\n  | ErrorType\n\nexport function getCreateAddress(opts: GetCreateAddressOptions) {\n  const from = toBytes(getAddress(opts.from))\n\n  let nonce = toBytes(opts.nonce)\n  if (nonce[0] === 0) nonce = new Uint8Array([])\n\n  return getAddress(\n    `0x${keccak256(toRlp([from, nonce], 'bytes')).slice(26)}` as Address,\n  )\n}\n\nexport type GetCreate2AddressErrorType =\n  | ConcatErrorType\n  | Keccak256ErrorType\n  | GetAddressErrorType\n  | IsBytesErrorType\n  | PadErrorType\n  | SliceErrorType\n  | ToBytesErrorType\n  | ToRlpErrorType\n  | ErrorType\n\nexport function getCreate2Address(opts: GetCreate2AddressOptions) {\n  const from = toBytes(getAddress(opts.from))\n  const salt = pad(isBytes(opts.salt) ? opts.salt : toBytes(opts.salt), {\n    size: 32,\n  })\n\n  const bytecodeHash = (() => {\n    if ('bytecodeHash' in opts) {\n      if (isBytes(opts.bytecodeHash)) return opts.bytecodeHash\n      return toBytes(opts.bytecodeHash)\n    }\n    return keccak256(opts.bytecode, 'bytes')\n  })()\n\n  return getAddress(\n    slice(keccak256(concat([toBytes('0xff'), from, salt, bytecodeHash])), 12),\n  )\n}\n", "import { versionedHashVersionKzg } from '../../constants/kzg.js'\nimport { maxUint256 } from '../../constants/number.js'\nimport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport { BaseError, type BaseErrorType } from '../../errors/base.js'\nimport {\n  EmptyBlobError,\n  type EmptyBlobErrorType,\n  InvalidVersionedHashSizeError,\n  type InvalidVersionedHashSizeErrorType,\n  InvalidVersionedHashVersionError,\n  type InvalidVersionedHashVersionErrorType,\n} from '../../errors/blob.js'\nimport {\n  InvalidChainIdError,\n  type InvalidChainIdErrorType,\n} from '../../errors/chain.js'\nimport {\n  FeeCapTooHighError,\n  type FeeCapTooHighErrorType,\n  TipAboveFeeCapError,\n  type TipAboveFeeCapErrorType,\n} from '../../errors/node.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  TransactionSerializableEIP1559,\n  TransactionSerializableEIP2930,\n  TransactionSerializableEIP4844,\n  TransactionSerializableEIP7702,\n  TransactionSerializableLegacy,\n} from '../../types/transaction.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport { size } from '../data/size.js'\nimport { slice } from '../data/slice.js'\nimport { hexToNumber } from '../encoding/fromHex.js'\n\nexport type AssertTransactionEIP7702ErrorType =\n  | AssertTransactionEIP1559ErrorType\n  | InvalidAddressErrorType\n  | InvalidChainIdErrorType\n  | ErrorType\n\nexport function assertTransactionEIP7702(\n  transaction: TransactionSerializableEIP7702,\n) {\n  const { authorizationList } = transaction\n  if (authorizationList) {\n    for (const authorization of authorizationList) {\n      const { chainId } = authorization\n      const address = authorization.address\n      if (!isAddress(address)) throw new InvalidAddressError({ address })\n      if (chainId < 0) throw new InvalidChainIdError({ chainId })\n    }\n  }\n  assertTransactionEIP1559(transaction as {} as TransactionSerializableEIP1559)\n}\n\nexport type AssertTransactionEIP4844ErrorType =\n  | AssertTransactionEIP1559ErrorType\n  | EmptyBlobErrorType\n  | InvalidVersionedHashSizeErrorType\n  | InvalidVersionedHashVersionErrorType\n  | ErrorType\n\nexport function assertTransactionEIP4844(\n  transaction: TransactionSerializableEIP4844,\n) {\n  const { blobVersionedHashes } = transaction\n  if (blobVersionedHashes) {\n    if (blobVersionedHashes.length === 0) throw new EmptyBlobError()\n    for (const hash of blobVersionedHashes) {\n      const size_ = size(hash)\n      const version = hexToNumber(slice(hash, 0, 1))\n      if (size_ !== 32)\n        throw new InvalidVersionedHashSizeError({ hash, size: size_ })\n      if (version !== versionedHashVersionKzg)\n        throw new InvalidVersionedHashVersionError({\n          hash,\n          version,\n        })\n    }\n  }\n  assertTransactionEIP1559(transaction as {} as TransactionSerializableEIP1559)\n}\n\nexport type AssertTransactionEIP1559ErrorType =\n  | BaseErrorType\n  | IsAddressErrorType\n  | InvalidAddressErrorType\n  | InvalidChainIdErrorType\n  | FeeCapTooHighErrorType\n  | TipAboveFeeCapErrorType\n  | ErrorType\n\nexport function assertTransactionEIP1559(\n  transaction: TransactionSerializableEIP1559,\n) {\n  const { chainId, maxPriorityFeePerGas, maxFeePerGas, to } = transaction\n  if (chainId <= 0) throw new InvalidChainIdError({ chainId })\n  if (to && !isAddress(to)) throw new InvalidAddressError({ address: to })\n  if (maxFeePerGas && maxFeePerGas > maxUint256)\n    throw new FeeCapTooHighError({ maxFeePerGas })\n  if (\n    maxPriorityFeePerGas &&\n    maxFeePerGas &&\n    maxPriorityFeePerGas > maxFeePerGas\n  )\n    throw new TipAboveFeeCapError({ maxFeePerGas, maxPriorityFeePerGas })\n}\n\nexport type AssertTransactionEIP2930ErrorType =\n  | BaseErrorType\n  | IsAddressErrorType\n  | InvalidAddressErrorType\n  | InvalidChainIdErrorType\n  | FeeCapTooHighErrorType\n  | ErrorType\n\nexport function assertTransactionEIP2930(\n  transaction: TransactionSerializableEIP2930,\n) {\n  const { chainId, maxPriorityFeePerGas, gasPrice, maxFeePerGas, to } =\n    transaction\n  if (chainId <= 0) throw new InvalidChainIdError({ chainId })\n  if (to && !isAddress(to)) throw new InvalidAddressError({ address: to })\n  if (maxPriorityFeePerGas || maxFeePerGas)\n    throw new BaseError(\n      '`maxFeePerGas`/`maxPriorityFeePerGas` is not a valid EIP-2930 Transaction attribute.',\n    )\n  if (gasPrice && gasPrice > maxUint256)\n    throw new FeeCapTooHighError({ maxFeePerGas: gasPrice })\n}\n\nexport type AssertTransactionLegacyErrorType =\n  | BaseErrorType\n  | IsAddressErrorType\n  | InvalidAddressErrorType\n  | InvalidChainIdErrorType\n  | FeeCapTooHighErrorType\n  | ErrorType\n\nexport function assertTransactionLegacy(\n  transaction: TransactionSerializableLegacy,\n) {\n  const { chainId, maxPriorityFeePerGas, gasPrice, maxFeePerGas, to } =\n    transaction\n  if (to && !isAddress(to)) throw new InvalidAddressError({ address: to })\n  if (typeof chainId !== 'undefined' && chainId <= 0)\n    throw new InvalidChainIdError({ chainId })\n  if (maxPriorityFeePerGas || maxFeePerGas)\n    throw new BaseError(\n      '`maxFeePerGas`/`maxPriorityFeePerGas` is not a valid Legacy Transaction attribute.',\n    )\n  if (gasPrice && gasPrice > maxUint256)\n    throw new FeeCapTooHighError({ maxFeePerGas: gasPrice })\n}\n", "import {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport {\n  InvalidStorageKeySizeError,\n  type InvalidStorageKeySizeErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { AccessList } from '../../types/transaction.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport type { RecursiveArray } from '../encoding/toRlp.js'\n\nexport type SerializeAccessListErrorType =\n  | InvalidStorageKeySizeErrorType\n  | InvalidAddressErrorType\n  | IsAddressErrorType\n  | ErrorType\n\n/*\n * Serialize an  EIP-2930 access list\n * @remarks\n * Use to create a transaction serializer with support for EIP-2930 access lists\n *\n * @param accessList - Array of objects of address and arrays of Storage Keys\n * @throws InvalidAddressError, InvalidStorageKeySizeError\n * @returns Array of hex strings\n */\nexport function serializeAccessList(\n  accessList?: AccessList | undefined,\n): RecursiveArray<Hex> {\n  if (!accessList || accessList.length === 0) return []\n\n  const serializedAccessList = []\n  for (let i = 0; i < accessList.length; i++) {\n    const { address, storageKeys } = accessList[i]\n\n    for (let j = 0; j < storageKeys.length; j++) {\n      if (storageKeys[j].length - 2 !== 64) {\n        throw new InvalidStorageKeySizeError({ storageKey: storageKeys[j] })\n      }\n    }\n\n    if (!isAddress(address, { strict: false })) {\n      throw new InvalidAddressError({ address })\n    }\n\n    serializedAccessList.push([address, storageKeys])\n  }\n  return serializedAccessList\n}\n", "import {\n  InvalidLegacyVError,\n  type InvalidLegacyVErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ByteArray,\n  Hex,\n  Signature,\n  SignatureLegacy,\n} from '../../types/misc.js'\nimport type {\n  TransactionSerializable,\n  TransactionSerializableEIP1559,\n  TransactionSerializableEIP2930,\n  TransactionSerializableEIP4844,\n  TransactionSerializableEIP7702,\n  TransactionSerializableGeneric,\n  TransactionSerializableLegacy,\n  TransactionSerialized,\n  TransactionSerializedEIP1559,\n  TransactionSerializedEIP2930,\n  TransactionSerializedEIP4844,\n  TransactionSerializedEIP7702,\n  TransactionSerializedLegacy,\n  TransactionType,\n} from '../../types/transaction.js'\nimport type { MaybePromise, OneOf } from '../../types/utils.js'\nimport {\n  type SerializeAuthorizationListErrorType,\n  serializeAuthorizationList,\n} from '../authorization/serializeAuthorizationList.js'\nimport {\n  type BlobsToCommitmentsErrorType,\n  blobsToCommitments,\n} from '../blob/blobsToCommitments.js'\nimport {\n  blobsToProofs,\n  type blobsToProofsErrorType,\n} from '../blob/blobsToProofs.js'\nimport {\n  type CommitmentsToVersionedHashesErrorType,\n  commitmentsToVersionedHashes,\n} from '../blob/commitmentsToVersionedHashes.js'\nimport {\n  type ToBlobSidecarsErrorType,\n  toBlobSidecars,\n} from '../blob/toBlobSidecars.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport { trim } from '../data/trim.js'\nimport {\n  bytesToHex,\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../encoding/toHex.js'\nimport { type ToRlpErrorType, toRlp } from '../encoding/toRlp.js'\n\nimport {\n  type AssertTransactionEIP1559ErrorType,\n  type AssertTransactionEIP2930ErrorType,\n  type AssertTransactionEIP4844ErrorType,\n  type AssertTransactionEIP7702ErrorType,\n  type AssertTransactionLegacyErrorType,\n  assertTransactionEIP1559,\n  assertTransactionEIP2930,\n  assertTransactionEIP4844,\n  assertTransactionEIP7702,\n  assertTransactionLegacy,\n} from './assertTransaction.js'\nimport {\n  type GetTransactionType,\n  type GetTransactionTypeErrorType,\n  getTransactionType,\n} from './getTransactionType.js'\nimport {\n  type SerializeAccessListErrorType,\n  serializeAccessList,\n} from './serializeAccessList.js'\n\nexport type SerializedTransactionReturnType<\n  transaction extends TransactionSerializable = TransactionSerializable,\n  ///\n  _transactionType extends TransactionType = GetTransactionType<transaction>,\n> = TransactionSerialized<_transactionType>\n\nexport type SerializeTransactionFn<\n  transaction extends TransactionSerializableGeneric = TransactionSerializable,\n  ///\n  _transactionType extends TransactionType = never,\n> = (\n  transaction: OneOf<TransactionSerializable | transaction>,\n  signature?: Signature | undefined,\n) => MaybePromise<\n  SerializedTransactionReturnType<\n    OneOf<TransactionSerializable | transaction>,\n    _transactionType\n  >\n>\n\nexport type SerializeTransactionErrorType =\n  | GetTransactionTypeErrorType\n  | SerializeTransactionEIP1559ErrorType\n  | SerializeTransactionEIP2930ErrorType\n  | SerializeTransactionEIP4844ErrorType\n  | SerializeTransactionEIP7702ErrorType\n  | SerializeTransactionLegacyErrorType\n  | ErrorType\n\nexport function serializeTransaction<\n  const transaction extends TransactionSerializable,\n  ///\n  _transactionType extends TransactionType = GetTransactionType<transaction>,\n>(\n  transaction: transaction,\n  signature?: Signature | undefined,\n): SerializedTransactionReturnType<transaction, _transactionType> {\n  const type = getTransactionType(transaction) as GetTransactionType\n\n  if (type === 'eip1559')\n    return serializeTransactionEIP1559(\n      transaction as TransactionSerializableEIP1559,\n      signature,\n    ) as SerializedTransactionReturnType<transaction>\n\n  if (type === 'eip2930')\n    return serializeTransactionEIP2930(\n      transaction as TransactionSerializableEIP2930,\n      signature,\n    ) as SerializedTransactionReturnType<transaction>\n\n  if (type === 'eip4844')\n    return serializeTransactionEIP4844(\n      transaction as TransactionSerializableEIP4844,\n      signature,\n    ) as SerializedTransactionReturnType<transaction>\n\n  if (type === 'eip7702')\n    return serializeTransactionEIP7702(\n      transaction as TransactionSerializableEIP7702,\n      signature,\n    ) as SerializedTransactionReturnType<transaction>\n\n  return serializeTransactionLegacy(\n    transaction as TransactionSerializableLegacy,\n    signature as SignatureLegacy,\n  ) as SerializedTransactionReturnType<transaction>\n}\n\ntype SerializeTransactionEIP7702ErrorType =\n  | AssertTransactionEIP7702ErrorType\n  | SerializeAuthorizationListErrorType\n  | ConcatHexErrorType\n  | InvalidLegacyVErrorType\n  | NumberToHexErrorType\n  | ToRlpErrorType\n  | SerializeAccessListErrorType\n  | ErrorType\n\nfunction serializeTransactionEIP7702(\n  transaction: TransactionSerializableEIP7702,\n  signature?: Signature | undefined,\n): TransactionSerializedEIP7702 {\n  const {\n    authorizationList,\n    chainId,\n    gas,\n    nonce,\n    to,\n    value,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    accessList,\n    data,\n  } = transaction\n\n  assertTransactionEIP7702(transaction)\n\n  const serializedAccessList = serializeAccessList(accessList)\n  const serializedAuthorizationList =\n    serializeAuthorizationList(authorizationList)\n\n  return concatHex([\n    '0x04',\n    toRlp([\n      numberToHex(chainId),\n      nonce ? numberToHex(nonce) : '0x',\n      maxPriorityFeePerGas ? numberToHex(maxPriorityFeePerGas) : '0x',\n      maxFeePerGas ? numberToHex(maxFeePerGas) : '0x',\n      gas ? numberToHex(gas) : '0x',\n      to ?? '0x',\n      value ? numberToHex(value) : '0x',\n      data ?? '0x',\n      serializedAccessList,\n      serializedAuthorizationList,\n      ...toYParitySignatureArray(transaction, signature),\n    ]),\n  ]) as TransactionSerializedEIP7702\n}\n\ntype SerializeTransactionEIP4844ErrorType =\n  | AssertTransactionEIP4844ErrorType\n  | BlobsToCommitmentsErrorType\n  | CommitmentsToVersionedHashesErrorType\n  | blobsToProofsErrorType\n  | ToBlobSidecarsErrorType\n  | ConcatHexErrorType\n  | InvalidLegacyVErrorType\n  | NumberToHexErrorType\n  | ToRlpErrorType\n  | SerializeAccessListErrorType\n  | ErrorType\n\nfunction serializeTransactionEIP4844(\n  transaction: TransactionSerializableEIP4844,\n  signature?: Signature | undefined,\n): TransactionSerializedEIP4844 {\n  const {\n    chainId,\n    gas,\n    nonce,\n    to,\n    value,\n    maxFeePerBlobGas,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    accessList,\n    data,\n  } = transaction\n\n  assertTransactionEIP4844(transaction)\n\n  let blobVersionedHashes = transaction.blobVersionedHashes\n  let sidecars = transaction.sidecars\n  // If `blobs` are passed, we will need to compute the KZG commitments & proofs.\n  if (\n    transaction.blobs &&\n    (typeof blobVersionedHashes === 'undefined' ||\n      typeof sidecars === 'undefined')\n  ) {\n    const blobs = (\n      typeof transaction.blobs[0] === 'string'\n        ? transaction.blobs\n        : (transaction.blobs as ByteArray[]).map((x) => bytesToHex(x))\n    ) as Hex[]\n    const kzg = transaction.kzg!\n    const commitments = blobsToCommitments({\n      blobs,\n      kzg,\n    })\n\n    if (typeof blobVersionedHashes === 'undefined')\n      blobVersionedHashes = commitmentsToVersionedHashes({\n        commitments,\n      })\n    if (typeof sidecars === 'undefined') {\n      const proofs = blobsToProofs({ blobs, commitments, kzg })\n      sidecars = toBlobSidecars({ blobs, commitments, proofs })\n    }\n  }\n\n  const serializedAccessList = serializeAccessList(accessList)\n\n  const serializedTransaction = [\n    numberToHex(chainId),\n    nonce ? numberToHex(nonce) : '0x',\n    maxPriorityFeePerGas ? numberToHex(maxPriorityFeePerGas) : '0x',\n    maxFeePerGas ? numberToHex(maxFeePerGas) : '0x',\n    gas ? numberToHex(gas) : '0x',\n    to ?? '0x',\n    value ? numberToHex(value) : '0x',\n    data ?? '0x',\n    serializedAccessList,\n    maxFeePerBlobGas ? numberToHex(maxFeePerBlobGas) : '0x',\n    blobVersionedHashes ?? [],\n    ...toYParitySignatureArray(transaction, signature),\n  ] as const\n\n  const blobs: Hex[] = []\n  const commitments: Hex[] = []\n  const proofs: Hex[] = []\n  if (sidecars)\n    for (let i = 0; i < sidecars.length; i++) {\n      const { blob, commitment, proof } = sidecars[i]\n      blobs.push(blob)\n      commitments.push(commitment)\n      proofs.push(proof)\n    }\n\n  return concatHex([\n    '0x03',\n    sidecars\n      ? // If sidecars are enabled, envelope turns into a \"wrapper\":\n        toRlp([serializedTransaction, blobs, commitments, proofs])\n      : // If sidecars are disabled, standard envelope is used:\n        toRlp(serializedTransaction),\n  ]) as TransactionSerializedEIP4844\n}\n\ntype SerializeTransactionEIP1559ErrorType =\n  | AssertTransactionEIP1559ErrorType\n  | ConcatHexErrorType\n  | InvalidLegacyVErrorType\n  | NumberToHexErrorType\n  | ToRlpErrorType\n  | SerializeAccessListErrorType\n  | ErrorType\n\nfunction serializeTransactionEIP1559(\n  transaction: TransactionSerializableEIP1559,\n  signature?: Signature | undefined,\n): TransactionSerializedEIP1559 {\n  const {\n    chainId,\n    gas,\n    nonce,\n    to,\n    value,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    accessList,\n    data,\n  } = transaction\n\n  assertTransactionEIP1559(transaction)\n\n  const serializedAccessList = serializeAccessList(accessList)\n\n  const serializedTransaction = [\n    numberToHex(chainId),\n    nonce ? numberToHex(nonce) : '0x',\n    maxPriorityFeePerGas ? numberToHex(maxPriorityFeePerGas) : '0x',\n    maxFeePerGas ? numberToHex(maxFeePerGas) : '0x',\n    gas ? numberToHex(gas) : '0x',\n    to ?? '0x',\n    value ? numberToHex(value) : '0x',\n    data ?? '0x',\n    serializedAccessList,\n    ...toYParitySignatureArray(transaction, signature),\n  ]\n\n  return concatHex([\n    '0x02',\n    toRlp(serializedTransaction),\n  ]) as TransactionSerializedEIP1559\n}\n\ntype SerializeTransactionEIP2930ErrorType =\n  | AssertTransactionEIP2930ErrorType\n  | ConcatHexErrorType\n  | InvalidLegacyVErrorType\n  | NumberToHexErrorType\n  | ToRlpErrorType\n  | SerializeAccessListErrorType\n  | ErrorType\n\nfunction serializeTransactionEIP2930(\n  transaction: TransactionSerializableEIP2930,\n  signature?: Signature | undefined,\n): TransactionSerializedEIP2930 {\n  const { chainId, gas, data, nonce, to, value, accessList, gasPrice } =\n    transaction\n\n  assertTransactionEIP2930(transaction)\n\n  const serializedAccessList = serializeAccessList(accessList)\n\n  const serializedTransaction = [\n    numberToHex(chainId),\n    nonce ? numberToHex(nonce) : '0x',\n    gasPrice ? numberToHex(gasPrice) : '0x',\n    gas ? numberToHex(gas) : '0x',\n    to ?? '0x',\n    value ? numberToHex(value) : '0x',\n    data ?? '0x',\n    serializedAccessList,\n    ...toYParitySignatureArray(transaction, signature),\n  ]\n\n  return concatHex([\n    '0x01',\n    toRlp(serializedTransaction),\n  ]) as TransactionSerializedEIP2930\n}\n\ntype SerializeTransactionLegacyErrorType =\n  | AssertTransactionLegacyErrorType\n  | InvalidLegacyVErrorType\n  | NumberToHexErrorType\n  | ToRlpErrorType\n  | ErrorType\n\nfunction serializeTransactionLegacy(\n  transaction: TransactionSerializableLegacy,\n  signature?: SignatureLegacy | undefined,\n): TransactionSerializedLegacy {\n  const { chainId = 0, gas, data, nonce, to, value, gasPrice } = transaction\n\n  assertTransactionLegacy(transaction)\n\n  let serializedTransaction = [\n    nonce ? numberToHex(nonce) : '0x',\n    gasPrice ? numberToHex(gasPrice) : '0x',\n    gas ? numberToHex(gas) : '0x',\n    to ?? '0x',\n    value ? numberToHex(value) : '0x',\n    data ?? '0x',\n  ]\n\n  if (signature) {\n    const v = (() => {\n      // EIP-155 (inferred chainId)\n      if (signature.v >= 35n) {\n        const inferredChainId = (signature.v - 35n) / 2n\n        if (inferredChainId > 0) return signature.v\n        return 27n + (signature.v === 35n ? 0n : 1n)\n      }\n\n      // EIP-155 (explicit chainId)\n      if (chainId > 0)\n        return BigInt(chainId * 2) + BigInt(35n + signature.v - 27n)\n\n      // Pre-EIP-155 (no chainId)\n      const v = 27n + (signature.v === 27n ? 0n : 1n)\n      if (signature.v !== v) throw new InvalidLegacyVError({ v: signature.v })\n      return v\n    })()\n\n    const r = trim(signature.r)\n    const s = trim(signature.s)\n\n    serializedTransaction = [\n      ...serializedTransaction,\n      numberToHex(v),\n      r === '0x00' ? '0x' : r,\n      s === '0x00' ? '0x' : s,\n    ]\n  } else if (chainId > 0) {\n    serializedTransaction = [\n      ...serializedTransaction,\n      numberToHex(chainId),\n      '0x',\n      '0x',\n    ]\n  }\n\n  return toRlp(serializedTransaction) as TransactionSerializedLegacy\n}\n\nexport function toYParitySignatureArray(\n  transaction: TransactionSerializableGeneric,\n  signature_?: Signature | undefined,\n) {\n  const signature = signature_ ?? transaction\n  const { v, yParity } = signature\n\n  if (typeof signature.r === 'undefined') return []\n  if (typeof signature.s === 'undefined') return []\n  if (typeof v === 'undefined' && typeof yParity === 'undefined') return []\n\n  const r = trim(signature.r)\n  const s = trim(signature.s)\n\n  const yParity_ = (() => {\n    if (typeof yParity === 'number') return yParity ? numberToHex(1) : '0x'\n    if (v === 0n) return '0x'\n    if (v === 1n) return numberToHex(1)\n\n    return v === 27n ? '0x' : numberToHex(1)\n  })()\n\n  return [yParity_, r === '0x00' ? '0x' : r, s === '0x00' ? '0x' : s]\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type {\n  AuthorizationList,\n  SerializedAuthorizationList,\n} from '../../types/authorization.js'\nimport { toHex } from '../encoding/toHex.js'\nimport { toYParitySignatureArray } from '../transaction/serializeTransaction.js'\n\nexport type SerializeAuthorizationListReturnType = SerializedAuthorizationList\n\nexport type SerializeAuthorizationListErrorType = ErrorType\n\n/*\n * Serializes an EIP-7702 authorization list.\n */\nexport function serializeAuthorizationList(\n  authorizationList?: AuthorizationList<number, true> | undefined,\n): SerializeAuthorizationListReturnType {\n  if (!authorizationList || authorizationList.length === 0) return []\n\n  const serializedAuthorizationList = []\n  for (const authorization of authorizationList) {\n    const { chainId, nonce, ...signature } = authorization\n    const contractAddress = authorization.address\n    serializedAuthorizationList.push([\n      chainId ? toHex(chainId) : '0x',\n      contractAddress,\n      nonce ? toHex(nonce) : '0x',\n      ...toYParitySignatureArray({}, signature),\n    ])\n  }\n\n  return serializedAuthorizationList as {} as SerializeAuthorizationListReturnType\n}\n", "import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport { type GetAddressErrorType, getAddress } from '../address/getAddress.js'\nimport {\n  type IsAddressEqualErrorType,\n  isAddressEqual,\n} from '../address/isAddressEqual.js'\nimport {\n  type RecoverAuthorizationAddressErrorType,\n  type RecoverAuthorizationAddressParameters,\n  recoverAuthorizationAddress,\n} from './recoverAuthorizationAddress.js'\n\nexport type VerifyAuthorizationParameters =\n  RecoverAuthorizationAddressParameters & {\n    /** The address that signed the Authorization object. */\n    address: Address\n  }\n\nexport type VerifyAuthorizationReturnType = boolean\n\nexport type VerifyAuthorizationErrorType =\n  | IsAddressEqualErrorType\n  | GetAddressErrorType\n  | RecoverAuthorizationAddressErrorType\n  | ErrorType\n\n/**\n * Verify that an Authorization object was signed by the provided address.\n *\n * - Docs {@link https://viem.sh/docs/utilities/verifyAuthorization}\n *\n * @param parameters - {@link VerifyAuthorizationParameters}\n * @returns Whether or not the signature is valid. {@link VerifyAuthorizationReturnType}\n */\nexport async function verifyAuthorization({\n  address,\n  authorization,\n  signature,\n}: VerifyAuthorizationParameters): Promise<VerifyAuthorizationReturnType> {\n  return isAddressEqual(\n    getAddress(address),\n    await recoverAuthorizationAddress({\n      authorization,\n      signature,\n    }),\n  )\n}\n", "import { LruMap } from '../lru.js'\n\n/** @internal */\nexport const promiseCache = /*#__PURE__*/ new LruMap<Promise<any>>(8192)\n\ntype WithDedupeOptions = {\n  enabled?: boolean | undefined\n  id?: string | undefined\n}\n\n/** Deduplicates in-flight promises. */\nexport function withDedupe<data>(\n  fn: () => Promise<data>,\n  { enabled = true, id }: WithDedupeOptions,\n): Promise<data> {\n  if (!enabled || !id) return fn()\n  if (promiseCache.get(id)) return promiseCache.get(id)!\n  const promise = fn().finally(() => promiseCache.delete(id))\n  promiseCache.set(id, promise)\n  return promise\n}\n", "import { BaseError } from '../errors/base.js'\nimport {\n  HttpRequestError,\n  type HttpRequestErrorType,\n  type RpcRequestErrorType,\n  type TimeoutErrorType,\n  type WebSocketRequestErrorType,\n} from '../errors/request.js'\nimport {\n  AtomicityNotSupportedError,\n  type AtomicityNotSupportedErrorType,\n  AtomicReadyWalletRejectedUpgradeError,\n  type AtomicReadyWalletRejectedUpgradeErrorType,\n  BundleTooLargeError,\n  type BundleTooLargeErrorType,\n  ChainDisconnectedError,\n  type ChainDisconnectedErrorType,\n  DuplicateIdError,\n  type DuplicateIdErrorType,\n  InternalRpcError,\n  type InternalRpcErrorType,\n  InvalidInputRpcError,\n  type InvalidInputRpcErrorType,\n  InvalidParamsRpcError,\n  type InvalidParamsRpcErrorType,\n  InvalidRequestRpcError,\n  type InvalidRequestRpcErrorType,\n  JsonRpcVersionUnsupportedError,\n  type JsonRpcVersionUnsupportedErrorType,\n  LimitExceededRpcError,\n  type LimitExceededRpcErrorType,\n  MethodNotFoundRpcError,\n  type MethodNotFoundRpcErrorType,\n  MethodNotSupportedRpcError,\n  type MethodNotSupportedRpcErrorType,\n  ParseRpcError,\n  type ParseRpcErrorType,\n  ProviderDisconnectedError,\n  type ProviderDisconnectedErrorType,\n  type ProviderRpcErrorCode,\n  ResourceNotFoundRpcError,\n  type ResourceNotFoundRpcErrorType,\n  ResourceUnavailableRpcError,\n  type ResourceUnavailableRpcErrorType,\n  type RpcError,\n  type RpcErrorCode,\n  type RpcErrorType,\n  SwitchChainError,\n  type SwitchChainErrorType,\n  TransactionRejectedRpcError,\n  type TransactionRejectedRpcErrorType,\n  UnauthorizedProviderError,\n  type UnauthorizedProviderErrorType,\n  UnknownBundleIdError,\n  type UnknownBundleIdErrorType,\n  UnknownRpcError,\n  type UnknownRpcErrorType,\n  UnsupportedChainIdError,\n  type UnsupportedChainIdErrorType,\n  UnsupportedNonOptionalCapabilityError,\n  type UnsupportedNonOptionalCapabilityErrorType,\n  UnsupportedProviderMethodError,\n  type UnsupportedProviderMethodErrorType,\n  UserRejectedRequestError,\n  type UserRejectedRequestErrorType,\n  WalletConnectSessionSettlementError,\n  type WalletConnectSessionSettlementErrorType,\n} from '../errors/rpc.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type {\n  EIP1193RequestFn,\n  EIP1193RequestOptions,\n} from '../types/eip1193.js'\nimport { stringToHex } from './encoding/toHex.js'\nimport type { CreateBatchSchedulerErrorType } from './promise/createBatchScheduler.js'\nimport { withDedupe } from './promise/withDedupe.js'\nimport { type WithRetryErrorType, withRetry } from './promise/withRetry.js'\nimport type { GetSocketRpcClientErrorType } from './rpc/socket.js'\nimport { stringify } from './stringify.js'\n\nexport type RequestErrorType =\n  | AtomicityNotSupportedErrorType\n  | AtomicReadyWalletRejectedUpgradeErrorType\n  | BundleTooLargeErrorType\n  | ChainDisconnectedErrorType\n  | CreateBatchSchedulerErrorType\n  | DuplicateIdErrorType\n  | HttpRequestErrorType\n  | InternalRpcErrorType\n  | InvalidInputRpcErrorType\n  | InvalidParamsRpcErrorType\n  | InvalidRequestRpcErrorType\n  | GetSocketRpcClientErrorType\n  | JsonRpcVersionUnsupportedErrorType\n  | LimitExceededRpcErrorType\n  | MethodNotFoundRpcErrorType\n  | MethodNotSupportedRpcErrorType\n  | ParseRpcErrorType\n  | ProviderDisconnectedErrorType\n  | ResourceNotFoundRpcErrorType\n  | ResourceUnavailableRpcErrorType\n  | RpcErrorType\n  | RpcRequestErrorType\n  | SwitchChainErrorType\n  | TimeoutErrorType\n  | TransactionRejectedRpcErrorType\n  | UnauthorizedProviderErrorType\n  | UnknownBundleIdErrorType\n  | UnknownRpcErrorType\n  | UnsupportedChainIdErrorType\n  | UnsupportedNonOptionalCapabilityErrorType\n  | UnsupportedProviderMethodErrorType\n  | UserRejectedRequestErrorType\n  | WalletConnectSessionSettlementErrorType\n  | WebSocketRequestErrorType\n  | WithRetryErrorType\n  | ErrorType\n\nexport function buildRequest<request extends (args: any) => Promise<any>>(\n  request: request,\n  options: EIP1193RequestOptions = {},\n): EIP1193RequestFn {\n  return async (args, overrideOptions = {}) => {\n    const {\n      dedupe = false,\n      methods,\n      retryDelay = 150,\n      retryCount = 3,\n      uid,\n    } = {\n      ...options,\n      ...overrideOptions,\n    }\n\n    const { method } = args\n    if (methods?.exclude?.includes(method))\n      throw new MethodNotSupportedRpcError(new Error('method not supported'), {\n        method,\n      })\n    if (methods?.include && !methods.include.includes(method))\n      throw new MethodNotSupportedRpcError(new Error('method not supported'), {\n        method,\n      })\n\n    const requestId = dedupe\n      ? stringToHex(`${uid}.${stringify(args)}`)\n      : undefined\n    return withDedupe(\n      () =>\n        withRetry(\n          async () => {\n            try {\n              return await request(args)\n            } catch (err_) {\n              const err = err_ as unknown as RpcError<\n                RpcErrorCode | ProviderRpcErrorCode\n              >\n              switch (err.code) {\n                // -32700\n                case ParseRpcError.code:\n                  throw new ParseRpcError(err)\n                // -32600\n                case InvalidRequestRpcError.code:\n                  throw new InvalidRequestRpcError(err)\n                // -32601\n                case MethodNotFoundRpcError.code:\n                  throw new MethodNotFoundRpcError(err, { method: args.method })\n                // -32602\n                case InvalidParamsRpcError.code:\n                  throw new InvalidParamsRpcError(err)\n                // -32603\n                case InternalRpcError.code:\n                  throw new InternalRpcError(err)\n                // -32000\n                case InvalidInputRpcError.code:\n                  throw new InvalidInputRpcError(err)\n                // -32001\n                case ResourceNotFoundRpcError.code:\n                  throw new ResourceNotFoundRpcError(err)\n                // -32002\n                case ResourceUnavailableRpcError.code:\n                  throw new ResourceUnavailableRpcError(err)\n                // -32003\n                case TransactionRejectedRpcError.code:\n                  throw new TransactionRejectedRpcError(err)\n                // -32004\n                case MethodNotSupportedRpcError.code:\n                  throw new MethodNotSupportedRpcError(err, {\n                    method: args.method,\n                  })\n                // -32005\n                case LimitExceededRpcError.code:\n                  throw new LimitExceededRpcError(err)\n                // -32006\n                case JsonRpcVersionUnsupportedError.code:\n                  throw new JsonRpcVersionUnsupportedError(err)\n\n                // 4001\n                case UserRejectedRequestError.code:\n                  throw new UserRejectedRequestError(err)\n                // 4100\n                case UnauthorizedProviderError.code:\n                  throw new UnauthorizedProviderError(err)\n                // 4200\n                case UnsupportedProviderMethodError.code:\n                  throw new UnsupportedProviderMethodError(err)\n                // 4900\n                case ProviderDisconnectedError.code:\n                  throw new ProviderDisconnectedError(err)\n                // 4901\n                case ChainDisconnectedError.code:\n                  throw new ChainDisconnectedError(err)\n                // 4902\n                case SwitchChainError.code:\n                  throw new SwitchChainError(err)\n\n                // 5700\n                case UnsupportedNonOptionalCapabilityError.code:\n                  throw new UnsupportedNonOptionalCapabilityError(err)\n                // 5710\n                case UnsupportedChainIdError.code:\n                  throw new UnsupportedChainIdError(err)\n                // 5720\n                case DuplicateIdError.code:\n                  throw new DuplicateIdError(err)\n                // 5730\n                case UnknownBundleIdError.code:\n                  throw new UnknownBundleIdError(err)\n                // 5740\n                case BundleTooLargeError.code:\n                  throw new BundleTooLargeError(err)\n                // 5750\n                case AtomicReadyWalletRejectedUpgradeError.code:\n                  throw new AtomicReadyWalletRejectedUpgradeError(err)\n                // 5760\n                case AtomicityNotSupportedError.code:\n                  throw new AtomicityNotSupportedError(err)\n\n                // CAIP-25: User Rejected Error\n                // https://docs.walletconnect.com/2.0/specs/clients/sign/error-codes#rejected-caip-25\n                case 5000:\n                  throw new UserRejectedRequestError(err)\n\n                // WalletConnect: Session Settlement Failed\n                // https://docs.walletconnect.com/2.0/specs/clients/sign/error-codes\n                case WalletConnectSessionSettlementError.code:\n                  throw new WalletConnectSessionSettlementError(err)\n\n                default:\n                  if (err_ instanceof BaseError) throw err_\n                  throw new UnknownRpcError(err as Error)\n              }\n            }\n          },\n          {\n            delay: ({ count, error }) => {\n              // If we find a Retry-After header, let's retry after the given time.\n              if (error && error instanceof HttpRequestError) {\n                const retryAfter = error?.headers?.get('Retry-After')\n                if (retryAfter?.match(/\\d/))\n                  return Number.parseInt(retryAfter, 10) * 1000\n              }\n\n              // Otherwise, let's retry with an exponential backoff.\n              return ~~(1 << count) * retryDelay\n            },\n            retryCount,\n            shouldRetry: ({ error }) => shouldRetry(error),\n          },\n        ),\n      { enabled: dedupe, id: requestId },\n    )\n  }\n}\n\n/** @internal */\nexport function shouldRetry(error: Error) {\n  if ('code' in error && typeof error.code === 'number') {\n    if (error.code === -1) return true // Unknown error\n    if (error.code === LimitExceededRpcError.code) return true\n    if (error.code === InternalRpcError.code) return true\n    // Too Many Requests \u2014 some providers (e.g. Alchemy in batch mode) return\n    // HTTP 200 with a JSON-RPC body of `{ code: 429 }` instead of an HTTP 429,\n    // so we need to handle this code in addition to the HTTP status check below.\n    if (error.code === 429) return true\n    return false\n  }\n  if (error instanceof HttpRequestError && error.status) {\n    // Forbidden\n    if (error.status === 403) return true\n    // Request Timeout\n    if (error.status === 408) return true\n    // Request Entity Too Large\n    if (error.status === 413) return true\n    // Too Many Requests\n    if (error.status === 429) return true\n    // Internal Server Error\n    if (error.status === 500) return true\n    // Bad Gateway\n    if (error.status === 502) return true\n    // Service Unavailable\n    if (error.status === 503) return true\n    // Gateway Timeout\n    if (error.status === 504) return true\n    return false\n  }\n  return true\n}\n", "import type { Chain, ChainFormatters } from '../../types/chain.js'\nimport type { Assign, Prettify } from '../../types/utils.js'\n\nexport type DefineChainReturnType<chain extends Chain = Chain> = Prettify<\n  chain &\n    (chain['extendSchema'] extends Record<string, unknown>\n      ? {\n          extend: <const extended extends chain['extendSchema']>(\n            extended: extended,\n          ) => Assign<chain, extended>\n        }\n      : {})\n>\n\nexport function defineChain<\n  formatters extends ChainFormatters,\n  const chain extends Chain<formatters>,\n>(chain: chain): DefineChainReturnType<Assign<Chain<undefined>, chain>> {\n  const chainInstance = {\n    formatters: undefined,\n    fees: undefined,\n    serializers: undefined,\n    ...chain,\n  } as Assign<Chain<undefined>, chain>\n\n  function extend(base: typeof chainInstance) {\n    type ExtendFn = (base: typeof chainInstance) => unknown\n    return (fnOrExtended: ExtendFn | Record<string, unknown>) => {\n      const properties = (\n        typeof fnOrExtended === 'function' ? fnOrExtended(base) : fnOrExtended\n      ) as (typeof chainInstance)['extendSchema']\n      const combined = { ...base, ...properties }\n      return Object.assign(combined, { extend: extend(combined) })\n    }\n  }\n\n  return Object.assign(chainInstance, {\n    extend: extend(chainInstance),\n  }) as never\n}\n\nexport function extendSchema<schema extends Record<string, unknown>>(): schema {\n  return {} as schema\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\n\nexport type ExtractChainParameters<\n  chains extends readonly Chain[],\n  chainId extends chains[number]['id'],\n> = {\n  chains: chains\n  id: chainId | chains[number]['id']\n}\n\nexport type ExtractChainReturnType<\n  chains extends readonly Chain[],\n  chainId extends chains[number]['id'],\n> = Extract<chains[number], { id: chainId }>\n\nexport type ExtractChainErrorType = ErrorType\n\nexport function extractChain<\n  const chains extends readonly Chain[],\n  chainId extends chains[number]['id'],\n>({\n  chains,\n  id,\n}: ExtractChainParameters<chains, chainId>): ExtractChainReturnType<\n  chains,\n  chainId\n> {\n  return chains.find((chain) => chain.id === id) as ExtractChainReturnType<\n    chains,\n    chainId\n  >\n}\n", "import { BaseError, type BaseErrorType } from '../../errors/base.js'\nimport {\n  InvalidHexValueError,\n  type InvalidHexValueErrorType,\n} from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n  type CreateCursorErrorType,\n  type Cursor,\n  createCursor,\n} from '../cursor.js'\nimport { type HexToBytesErrorType, hexToBytes } from './toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from './toHex.js'\n\nimport type { RecursiveArray } from './toRlp.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type FromRlpReturnType<to extends To> =\n  | (to extends 'bytes' ? RecursiveArray<ByteArray> : never)\n  | (to extends 'hex' ? RecursiveArray<Hex> : never)\n\nexport type FromRlpErrorType =\n  | CreateCursorErrorType\n  | FromRlpCursorErrorType\n  | HexToBytesErrorType\n  | InvalidHexValueErrorType\n  | ErrorType\n\nexport function fromRlp<to extends To = 'hex'>(\n  value: ByteArray | Hex,\n  to: to | To | undefined = 'hex',\n): FromRlpReturnType<to> {\n  const bytes = (() => {\n    if (typeof value === 'string') {\n      if (value.length > 3 && value.length % 2 !== 0)\n        throw new InvalidHexValueError(value)\n      return hexToBytes(value)\n    }\n    return value\n  })()\n\n  const cursor = createCursor(bytes, {\n    recursiveReadLimit: Number.POSITIVE_INFINITY,\n  })\n  const result = fromRlpCursor(cursor, to)\n\n  return result as FromRlpReturnType<to>\n}\n\ntype FromRlpCursorErrorType =\n  | BytesToHexErrorType\n  | ReadLengthErrorType\n  | ReadListErrorType\n  | ErrorType\n\nfunction fromRlpCursor<to extends To = 'hex'>(\n  cursor: Cursor,\n  to: to | To | undefined = 'hex',\n): FromRlpReturnType<to> {\n  if (cursor.bytes.length === 0)\n    return (\n      to === 'hex' ? bytesToHex(cursor.bytes) : cursor.bytes\n    ) as FromRlpReturnType<to>\n\n  const prefix = cursor.readByte()\n  if (prefix < 0x80) cursor.decrementPosition(1)\n\n  // bytes\n  if (prefix < 0xc0) {\n    const length = readLength(cursor, prefix, 0x80)\n    const bytes = cursor.readBytes(length)\n    return (to === 'hex' ? bytesToHex(bytes) : bytes) as FromRlpReturnType<to>\n  }\n\n  // list\n  const length = readLength(cursor, prefix, 0xc0)\n  return readList(cursor, length, to) as {} as FromRlpReturnType<to>\n}\n\ntype ReadLengthErrorType = BaseErrorType | ErrorType\n\nfunction readLength(cursor: Cursor, prefix: number, offset: number) {\n  if (offset === 0x80 && prefix < 0x80) return 1\n  if (prefix <= offset + 55) return prefix - offset\n  if (prefix === offset + 55 + 1) return cursor.readUint8()\n  if (prefix === offset + 55 + 2) return cursor.readUint16()\n  if (prefix === offset + 55 + 3) return cursor.readUint24()\n  if (prefix === offset + 55 + 4) return cursor.readUint32()\n  throw new BaseError('Invalid RLP prefix')\n}\n\ntype ReadListErrorType = ErrorType\n\nfunction readList<to extends To>(cursor: Cursor, length: number, to: to | To) {\n  const position = cursor.position\n  const value: FromRlpReturnType<to>[] = []\n  while (cursor.position - position < length)\n    value.push(fromRlpCursor(cursor, to))\n  return value\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type SizeErrorType, size } from '../data/size.js'\n\nexport type IsHashErrorType = IsHexErrorType | SizeErrorType | ErrorType\n\nexport function isHash(hash: string): hash is Hex {\n  return isHex(hash) && size(hash) === 32\n}\n", "/**\n\nSHA1 (RFC 3174), MD5 (RFC 1321) and RIPEMD160 (RFC 2286) legacy, weak hash functions.\nDon't use them in a new protocol. What \"weak\" means:\n\n- Collisions can be made with 2^18 effort in MD5, 2^60 in SHA1, 2^80 in RIPEMD160.\n- No practical pre-image attacks (only theoretical, 2^123.4)\n- HMAC seems kinda ok: https://datatracker.ietf.org/doc/html/rfc6151\n * @module\n */\nimport { Chi, HashMD, Maj } from './_md.ts';\nimport { type CHash, clean, createHasher, rotl } from './utils.ts';\n\n/** Initial SHA1 state */\nconst SHA1_IV = /* @__PURE__ */ Uint32Array.from([\n  0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0,\n]);\n\n// Reusable temporary buffer\nconst SHA1_W = /* @__PURE__ */ new Uint32Array(80);\n\n/** SHA1 legacy hash class. */\nexport class SHA1 extends HashMD<SHA1> {\n  private A = SHA1_IV[0] | 0;\n  private B = SHA1_IV[1] | 0;\n  private C = SHA1_IV[2] | 0;\n  private D = SHA1_IV[3] | 0;\n  private E = SHA1_IV[4] | 0;\n\n  constructor() {\n    super(64, 20, 8, false);\n  }\n  protected get(): [number, number, number, number, number] {\n    const { A, B, C, D, E } = this;\n    return [A, B, C, D, E];\n  }\n  protected set(A: number, B: number, C: number, D: number, E: number): void {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    for (let i = 0; i < 16; i++, offset += 4) SHA1_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 80; i++)\n      SHA1_W[i] = rotl(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);\n    // Compression function main loop, 80 rounds\n    let { A, B, C, D, E } = this;\n    for (let i = 0; i < 80; i++) {\n      let F, K;\n      if (i < 20) {\n        F = Chi(B, C, D);\n        K = 0x5a827999;\n      } else if (i < 40) {\n        F = B ^ C ^ D;\n        K = 0x6ed9eba1;\n      } else if (i < 60) {\n        F = Maj(B, C, D);\n        K = 0x8f1bbcdc;\n      } else {\n        F = B ^ C ^ D;\n        K = 0xca62c1d6;\n      }\n      const T = (rotl(A, 5) + F + E + K + SHA1_W[i]) | 0;\n      E = D;\n      D = C;\n      C = rotl(B, 30);\n      B = A;\n      A = T;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    this.set(A, B, C, D, E);\n  }\n  protected roundClean(): void {\n    clean(SHA1_W);\n  }\n  destroy(): void {\n    this.set(0, 0, 0, 0, 0);\n    clean(this.buffer);\n  }\n}\n\n/** SHA1 (RFC 3174) legacy hash function. It was cryptographically broken. */\nexport const sha1: CHash = /* @__PURE__ */ createHasher(() => new SHA1());\n\n/** Per-round constants */\nconst p32 = /* @__PURE__ */ Math.pow(2, 32);\nconst K = /* @__PURE__ */ Array.from({ length: 64 }, (_, i) =>\n  Math.floor(p32 * Math.abs(Math.sin(i + 1)))\n);\n\n/** md5 initial state: same as sha1, but 4 u32 instead of 5. */\nconst MD5_IV = /* @__PURE__ */ SHA1_IV.slice(0, 4);\n\n// Reusable temporary buffer\nconst MD5_W = /* @__PURE__ */ new Uint32Array(16);\n/** MD5 legacy hash class. */\nexport class MD5 extends HashMD<MD5> {\n  private A = MD5_IV[0] | 0;\n  private B = MD5_IV[1] | 0;\n  private C = MD5_IV[2] | 0;\n  private D = MD5_IV[3] | 0;\n\n  constructor() {\n    super(64, 16, 8, true);\n  }\n  protected get(): [number, number, number, number] {\n    const { A, B, C, D } = this;\n    return [A, B, C, D];\n  }\n  protected set(A: number, B: number, C: number, D: number): void {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    for (let i = 0; i < 16; i++, offset += 4) MD5_W[i] = view.getUint32(offset, true);\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D } = this;\n    for (let i = 0; i < 64; i++) {\n      let F, g, s;\n      if (i < 16) {\n        F = Chi(B, C, D);\n        g = i;\n        s = [7, 12, 17, 22];\n      } else if (i < 32) {\n        F = Chi(D, B, C);\n        g = (5 * i + 1) % 16;\n        s = [5, 9, 14, 20];\n      } else if (i < 48) {\n        F = B ^ C ^ D;\n        g = (3 * i + 5) % 16;\n        s = [4, 11, 16, 23];\n      } else {\n        F = C ^ (B | ~D);\n        g = (7 * i) % 16;\n        s = [6, 10, 15, 21];\n      }\n      F = F + A + K[i] + MD5_W[g];\n      A = D;\n      D = C;\n      C = B;\n      B = B + rotl(F, s[i % 4]);\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    this.set(A, B, C, D);\n  }\n  protected roundClean(): void {\n    clean(MD5_W);\n  }\n  destroy(): void {\n    this.set(0, 0, 0, 0);\n    clean(this.buffer);\n  }\n}\n\n/**\n * MD5 (RFC 1321) legacy hash function. It was cryptographically broken.\n * MD5 architecture is similar to SHA1, with some differences:\n * - Reduced output length: 16 bytes (128 bit) instead of 20\n * - 64 rounds, instead of 80\n * - Little-endian: could be faster, but will require more code\n * - Non-linear index selection: huge speed-up for unroll\n * - Per round constants: more memory accesses, additional speed-up for unroll\n */\nexport const md5: CHash = /* @__PURE__ */ createHasher(() => new MD5());\n\n// RIPEMD-160\n\nconst Rho160 = /* @__PURE__ */ Uint8Array.from([\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n]);\nconst Id160 = /* @__PURE__ */ (() => Uint8Array.from(new Array(16).fill(0).map((_, i) => i)))();\nconst Pi160 = /* @__PURE__ */ (() => Id160.map((i) => (9 * i + 5) % 16))();\nconst idxLR = /* @__PURE__ */ (() => {\n  const L = [Id160];\n  const R = [Pi160];\n  const res = [L, R];\n  for (let i = 0; i < 4; i++) for (let j of res) j.push(j[i].map((k) => Rho160[k]));\n  return res;\n})();\nconst idxL = /* @__PURE__ */ (() => idxLR[0])();\nconst idxR = /* @__PURE__ */ (() => idxLR[1])();\n// const [idxL, idxR] = idxLR;\n\nconst shifts160 = /* @__PURE__ */ [\n  [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n  [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n  [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n  [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n  [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => Uint8Array.from(i));\nconst shiftsL160 = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst shiftsR160 = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst Kl160 = /* @__PURE__ */ Uint32Array.from([\n  0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\nconst Kr160 = /* @__PURE__ */ Uint32Array.from([\n  0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\n// It's called f() in spec.\nfunction ripemd_f(group: number, x: number, y: number, z: number): number {\n  if (group === 0) return x ^ y ^ z;\n  if (group === 1) return (x & y) | (~x & z);\n  if (group === 2) return (x | ~y) ^ z;\n  if (group === 3) return (x & z) | (y & ~z);\n  return x ^ (y | ~z);\n}\n// Reusable temporary buffer\nconst BUF_160 = /* @__PURE__ */ new Uint32Array(16);\nexport class RIPEMD160 extends HashMD<RIPEMD160> {\n  private h0 = 0x67452301 | 0;\n  private h1 = 0xefcdab89 | 0;\n  private h2 = 0x98badcfe | 0;\n  private h3 = 0x10325476 | 0;\n  private h4 = 0xc3d2e1f0 | 0;\n\n  constructor() {\n    super(64, 20, 8, true);\n  }\n  protected get(): [number, number, number, number, number] {\n    const { h0, h1, h2, h3, h4 } = this;\n    return [h0, h1, h2, h3, h4];\n  }\n  protected set(h0: number, h1: number, h2: number, h3: number, h4: number): void {\n    this.h0 = h0 | 0;\n    this.h1 = h1 | 0;\n    this.h2 = h2 | 0;\n    this.h3 = h3 | 0;\n    this.h4 = h4 | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    for (let i = 0; i < 16; i++, offset += 4) BUF_160[i] = view.getUint32(offset, true);\n    // prettier-ignore\n    let al = this.h0 | 0, ar = al,\n        bl = this.h1 | 0, br = bl,\n        cl = this.h2 | 0, cr = cl,\n        dl = this.h3 | 0, dr = dl,\n        el = this.h4 | 0, er = el;\n\n    // Instead of iterating 0 to 80, we split it into 5 groups\n    // And use the groups in constants, functions, etc. Much simpler\n    for (let group = 0; group < 5; group++) {\n      const rGroup = 4 - group;\n      const hbl = Kl160[group], hbr = Kr160[group]; // prettier-ignore\n      const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n      const sl = shiftsL160[group], sr = shiftsR160[group]; // prettier-ignore\n      for (let i = 0; i < 16; i++) {\n        const tl = (rotl(al + ripemd_f(group, bl, cl, dl) + BUF_160[rl[i]] + hbl, sl[i]) + el) | 0;\n        al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n      }\n      // 2 loops are 10% faster\n      for (let i = 0; i < 16; i++) {\n        const tr = (rotl(ar + ripemd_f(rGroup, br, cr, dr) + BUF_160[rr[i]] + hbr, sr[i]) + er) | 0;\n        ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n      }\n    }\n    // Add the compressed chunk to the current hash value\n    this.set(\n      (this.h1 + cl + dr) | 0,\n      (this.h2 + dl + er) | 0,\n      (this.h3 + el + ar) | 0,\n      (this.h4 + al + br) | 0,\n      (this.h0 + bl + cr) | 0\n    );\n  }\n  protected roundClean(): void {\n    clean(BUF_160);\n  }\n  destroy(): void {\n    this.destroyed = true;\n    clean(this.buffer);\n    this.set(0, 0, 0, 0, 0);\n  }\n}\n\n/**\n * RIPEMD-160 - a legacy hash function from 1990s.\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\n */\nexport const ripemd160: CHash = /* @__PURE__ */ createHasher(() => new RIPEMD160());\n", "/**\n * RIPEMD-160 legacy hash function.\n * https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n * https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\n * @module\n * @deprecated\n */\nimport { RIPEMD160 as RIPEMD160n, ripemd160 as ripemd160n } from './legacy.ts';\n/** @deprecated Use import from `noble/hashes/legacy` module */\nexport const RIPEMD160: typeof RIPEMD160n = RIPEMD160n;\n/** @deprecated Use import from `noble/hashes/legacy` module */\nexport const ripemd160: typeof ripemd160n = ripemd160n;\n", "import { ripemd160 as noble_ripemd160 } from '@noble/hashes/ripemd160'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type ToHexErrorType, toHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type Ripemd160Hash<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type Ripemd160ErrorType =\n  | IsHexErrorType\n  | ToBytesErrorType\n  | ToHexErrorType\n  | ErrorType\n\nexport function ripemd160<to extends To = 'hex'>(\n  value: Hex | ByteArray,\n  to_?: to | undefined,\n): Ripemd160Hash<to> {\n  const to = to_ || 'hex'\n  const bytes = noble_ripemd160(\n    isHex(value, { strict: false }) ? toBytes(value) : value,\n  )\n  if (to === 'bytes') return bytes as Ripemd160Hash<to>\n  return toHex(bytes) as Ripemd160Hash<to>\n}\n", "// biome-ignore lint/performance/noBarrelFile: intentional\nexport {\n  type ToSignatureHashErrorType as ToEventHashErrorType,\n  toSignatureHash as toEventHash,\n} from './toSignatureHash.js'\n", "// biome-ignore lint/performance/noBarrelFile: intentional\nexport {\n  type ToSignatureErrorType as ToEventSignatureErrorType,\n  toSignature as toEventSignature,\n} from './toSignature.js'\n", "// biome-ignore lint/performance/noBarrelFile: intentional\nexport {\n  type ToSignatureHashErrorType as ToFunctionHashErrorType,\n  toSignatureHash as toFunctionHash,\n} from './toSignatureHash.js'\n", "// biome-ignore lint/performance/noBarrelFile: intentional\nexport {\n  type ToSignatureErrorType as ToFunctionSignatureErrorType,\n  toSignature as toFunctionSignature,\n} from './toSignature.js'\n", "import type { Address } from 'abitype'\n\nimport { getTransactionCount } from '../actions/public/getTransactionCount.js'\nimport type { Client } from '../clients/createClient.js'\nimport type { MaybePromise } from '../types/utils.js'\nimport { LruMap } from './lru.js'\n\nexport type CreateNonceManagerParameters = {\n  source: NonceManagerSource\n}\n\ntype FunctionParameters = {\n  address: Address\n  chainId: number\n}\n\nexport type NonceManager = {\n  /** Get and increment a nonce. */\n  consume: (\n    parameters: FunctionParameters & { client: Client },\n  ) => Promise<number>\n  /** Increment a nonce. */\n  increment: (chainId: FunctionParameters) => void\n  /** Get a nonce. */\n  get: (chainId: FunctionParameters & { client: Client }) => Promise<number>\n  /** Reset a nonce. */\n  reset: (chainId: FunctionParameters) => void\n}\n\n/**\n * Creates a nonce manager for auto-incrementing transaction nonces.\n *\n * - Docs: https://viem.sh/docs/accounts/createNonceManager\n *\n * @example\n * ```ts\n * const nonceManager = createNonceManager({\n *   source: jsonRpc(),\n * })\n * ```\n */\nexport function createNonceManager(\n  parameters: CreateNonceManagerParameters,\n): NonceManager {\n  const { source } = parameters\n\n  const deltaMap = new Map()\n  const nonceMap = new LruMap<number>(8192)\n  const promiseMap = new Map<string, Promise<number>>()\n\n  const getKey = ({ address, chainId }: FunctionParameters) =>\n    `${address}.${chainId}`\n\n  return {\n    async consume({ address, chainId, client }) {\n      const key = getKey({ address, chainId })\n      const promise = this.get({ address, chainId, client })\n\n      this.increment({ address, chainId })\n      const nonce = await promise\n\n      await source.set({ address, chainId }, nonce)\n      nonceMap.set(key, nonce)\n\n      return nonce\n    },\n    async increment({ address, chainId }) {\n      const key = getKey({ address, chainId })\n      const delta = deltaMap.get(key) ?? 0\n      deltaMap.set(key, delta + 1)\n    },\n    async get({ address, chainId, client }) {\n      const key = getKey({ address, chainId })\n\n      let promise = promiseMap.get(key)\n      if (!promise) {\n        promise = (async () => {\n          try {\n            const nonce = await source.get({ address, chainId, client })\n            const previousNonce = nonceMap.get(key) ?? 0\n            if (previousNonce > 0 && nonce <= previousNonce)\n              return previousNonce + 1\n            nonceMap.delete(key)\n            return nonce\n          } finally {\n            this.reset({ address, chainId })\n          }\n        })()\n        promiseMap.set(key, promise)\n      }\n\n      const delta = deltaMap.get(key) ?? 0\n      return delta + (await promise)\n    },\n    reset({ address, chainId }) {\n      const key = getKey({ address, chainId })\n      deltaMap.delete(key)\n      promiseMap.delete(key)\n    },\n  }\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////\n// Sources\n\nexport type NonceManagerSource = {\n  /** Get a nonce. */\n  get(parameters: FunctionParameters & { client: Client }): MaybePromise<number>\n  /** Set a nonce. */\n  set(parameters: FunctionParameters, nonce: number): MaybePromise<void>\n}\n\n/** JSON-RPC source for a nonce manager. */\nexport function jsonRpc(): NonceManagerSource {\n  return {\n    async get(parameters) {\n      const { address, client } = parameters\n      return getTransactionCount(client, {\n        address,\n        blockTag: 'pending',\n      })\n    },\n    set() {},\n  }\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////\n// Default\n\n/** Default Nonce Manager with a JSON-RPC source. */\nexport const nonceManager = /*#__PURE__*/ createNonceManager({\n  source: jsonRpc(),\n})\n", "import type { ErrorType } from '../../errors/utils.js'\n\nexport type WithTimeoutErrorType = ErrorType\n\nexport function withTimeout<data>(\n  fn: ({\n    signal,\n  }: {\n    signal: AbortController['signal'] | null\n  }) => Promise<data>,\n  {\n    errorInstance = new Error('timed out'),\n    timeout,\n    signal,\n  }: {\n    // The error instance to throw when the timeout is reached.\n    errorInstance?: Error | undefined\n    // The timeout (in ms).\n    timeout: number\n    // Whether or not the timeout should use an abort signal.\n    signal?: boolean | undefined\n  },\n): Promise<data> {\n  return new Promise((resolve, reject) => {\n    ;(async () => {\n      let timeoutId!: NodeJS.Timeout\n      try {\n        const controller = new AbortController()\n        if (timeout > 0) {\n          timeoutId = setTimeout(() => {\n            if (signal) {\n              controller.abort()\n            } else {\n              reject(errorInstance)\n            }\n          }, timeout) as NodeJS.Timeout // need to cast because bun globals.d.ts overrides @types/node\n        }\n        resolve(await fn({ signal: controller?.signal || null }))\n      } catch (err) {\n        if ((err as Error)?.name === 'AbortError') reject(errorInstance)\n        reject(err)\n      } finally {\n        clearTimeout(timeoutId)\n      }\n    })()\n  })\n}\n", "function createIdStore() {\n  return {\n    current: 0,\n    take() {\n      return this.current++\n    },\n    reset() {\n      this.current = 0\n    },\n  }\n}\n\nexport const idCache = /*#__PURE__*/ createIdStore()\n", "import {\n  HttpRequestError,\n  type HttpRequestErrorType as HttpRequestErrorType_,\n  TimeoutError,\n  type TimeoutErrorType,\n} from '../../errors/request.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { RpcRequest, RpcResponse } from '../../types/rpc.js'\nimport type { MaybePromise } from '../../types/utils.js'\nimport {\n  type WithTimeoutErrorType,\n  withTimeout,\n} from '../promise/withTimeout.js'\nimport { stringify } from '../stringify.js'\nimport { idCache } from './id.js'\n\nexport type HttpRpcClientOptions = {\n  /** Override for the fetch function used to make requests. */\n  fetchFn?:\n    | ((input: string | URL | Request, init?: RequestInit) => Promise<Response>)\n    | undefined\n  /** Request configuration to pass to `fetch`. */\n  fetchOptions?: Omit<RequestInit, 'body'> | undefined\n  /** A callback to handle the request. */\n  onRequest?:\n    | ((\n        request: Request,\n        init: RequestInit,\n      ) => MaybePromise<\n        void | undefined | (RequestInit & { url?: string | undefined })\n      >)\n    | undefined\n  /** A callback to handle the response. */\n  onResponse?: ((response: Response) => Promise<void> | void) | undefined\n  /** The timeout (in ms) for the request. */\n  timeout?: number | undefined\n}\n\nexport type HttpRequestParameters<\n  body extends RpcRequest | RpcRequest[] = RpcRequest,\n> = {\n  /** The RPC request body. */\n  body: body\n  /** Override for the fetch function used to make requests. */\n  fetchFn?: HttpRpcClientOptions['fetchFn'] | undefined\n  /** Request configuration to pass to `fetch`. */\n  fetchOptions?: HttpRpcClientOptions['fetchOptions'] | undefined\n  /** A callback to handle the response. */\n  onRequest?:\n    | ((\n        request: Request,\n        init: RequestInit,\n      ) => MaybePromise<\n        void | undefined | (RequestInit & { url?: string | undefined })\n      >)\n    | undefined\n  /** A callback to handle the response. */\n  onResponse?: ((response: Response) => Promise<void> | void) | undefined\n  /** The timeout (in ms) for the request. */\n  timeout?: HttpRpcClientOptions['timeout'] | undefined\n}\n\nexport type HttpRequestReturnType<\n  body extends RpcRequest | RpcRequest[] = RpcRequest,\n> = body extends RpcRequest[] ? RpcResponse[] : RpcResponse\n\nexport type HttpRequestErrorType =\n  | HttpRequestErrorType_\n  | TimeoutErrorType\n  | WithTimeoutErrorType\n  | ErrorType\n\nexport type HttpRpcClient = {\n  request<body extends RpcRequest | RpcRequest[]>(\n    params: HttpRequestParameters<body>,\n  ): Promise<HttpRequestReturnType<body>>\n}\n\nexport function getHttpRpcClient(\n  url_: string,\n  options: HttpRpcClientOptions = {},\n): HttpRpcClient {\n  const { url, headers: headers_url } = parseUrl(url_)\n\n  return {\n    async request(params) {\n      const {\n        body,\n        fetchFn = options.fetchFn ?? fetch,\n        onRequest = options.onRequest,\n        onResponse = options.onResponse,\n        timeout = options.timeout ?? 10_000,\n      } = params\n\n      const fetchOptions = {\n        ...(options.fetchOptions ?? {}),\n        ...(params.fetchOptions ?? {}),\n      }\n\n      const { headers, method, signal: signal_ } = fetchOptions\n\n      try {\n        const response = await withTimeout(\n          async ({ signal }) => {\n            const init: RequestInit = {\n              ...fetchOptions,\n              body: Array.isArray(body)\n                ? stringify(\n                    body.map((body) => ({\n                      jsonrpc: '2.0',\n                      id: body.id ?? idCache.take(),\n                      ...body,\n                    })),\n                  )\n                : stringify({\n                    jsonrpc: '2.0',\n                    id: body.id ?? idCache.take(),\n                    ...body,\n                  }),\n              headers: {\n                ...headers_url,\n                'Content-Type': 'application/json',\n                ...headers,\n              },\n              method: method || 'POST',\n              signal: signal_ || (timeout > 0 ? signal : null),\n            }\n            const request = new Request(url, init)\n            const args = (await onRequest?.(request, init)) ?? { ...init, url }\n            const response = await fetchFn(args.url ?? url, args)\n            return response\n          },\n          {\n            errorInstance: new TimeoutError({ body, url }),\n            timeout,\n            signal: true,\n          },\n        )\n\n        if (onResponse) await onResponse(response)\n\n        let data: any\n        if (\n          response.headers.get('Content-Type')?.startsWith('application/json')\n        )\n          data = await response.json()\n        else {\n          data = await response.text()\n          try {\n            data = JSON.parse(data || '{}')\n          } catch (err) {\n            if (response.ok) throw err\n            data = { error: data }\n          }\n        }\n\n        if (!response.ok) {\n          // If the response body contains a valid JSON-RPC error, return it\n          // so it flows through the normal RPC error handling pipeline.\n          if (\n            typeof data.error?.code === 'number' &&\n            typeof data.error?.message === 'string'\n          )\n            return data\n\n          throw new HttpRequestError({\n            body,\n            details: stringify(data.error) || response.statusText,\n            headers: response.headers,\n            status: response.status,\n            url,\n          })\n        }\n\n        return data\n      } catch (err) {\n        if (err instanceof HttpRequestError) throw err\n        if (err instanceof TimeoutError) throw err\n        throw new HttpRequestError({\n          body,\n          cause: err as Error,\n          url,\n        })\n      }\n    },\n  }\n}\n\n/** @internal */\nexport function parseUrl(url_: string) {\n  try {\n    const url = new URL(url_)\n\n    const result = (() => {\n      // Handle Basic authentication credentials\n      if (url.username) {\n        const credentials = `${decodeURIComponent(url.username)}:${decodeURIComponent(url.password)}`\n        url.username = ''\n        url.password = ''\n\n        return {\n          url: url.toString(),\n          headers: { Authorization: `Basic ${btoa(credentials)}` },\n        }\n      }\n\n      return\n    })()\n\n    return { url: url.toString(), ...result }\n  } catch {\n    return { url: url_ }\n  }\n}\n", "import { SocketClosedError, TimeoutError } from '../../errors/request.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { RpcRequest, RpcResponse } from '../../types/rpc.js'\nimport {\n  type CreateBatchSchedulerErrorType,\n  createBatchScheduler,\n} from '../promise/createBatchScheduler.js'\nimport { withTimeout } from '../promise/withTimeout.js'\nimport { idCache } from './id.js'\n\ntype Id = string | number\ntype CallbackFn = {\n  onResponse: (message: any) => void\n  onError?: ((error?: Error | Event | undefined) => void) | undefined\n  body?: RpcRequest\n}\ntype CallbackMap = Map<Id, CallbackFn>\n\nexport type GetSocketParameters = {\n  onClose: () => void\n  onError: (error?: Error | Event | undefined) => void\n  onOpen: () => void\n  onResponse: (data: RpcResponse) => void\n}\n\nexport type Socket<socket extends {}> = socket & {\n  close(): void\n  ping?: (() => void) | undefined\n  request(params: { body: RpcRequest }): void\n}\n\nexport type SocketRpcClient<socket extends {}> = {\n  close(): void\n  socket: Socket<socket>\n  request(params: {\n    body: RpcRequest\n    onError?: ((error?: Error | Event | undefined) => void) | undefined\n    onResponse: (message: RpcResponse) => void\n  }): void\n  requestAsync(params: {\n    body: RpcRequest\n    timeout?: number | undefined\n  }): Promise<RpcResponse>\n  requests: CallbackMap\n  subscriptions: CallbackMap\n  url: string\n}\n\nexport type GetSocketRpcClientParameters<socket extends {} = {}> = {\n  getSocket(params: GetSocketParameters): Promise<Socket<socket>>\n  /**\n   * Whether or not to send keep-alive messages.\n   * @default true\n   */\n  keepAlive?:\n    | boolean\n    | {\n        /**\n         * The interval (in ms) to send keep-alive messages.\n         * @default 30_000\n         */\n        interval?: number | undefined\n      }\n    | undefined\n  key?: string\n  /**\n   * Whether or not to attempt to reconnect on socket failure or closure.\n   * @default true\n   */\n  reconnect?:\n    | boolean\n    | {\n        /**\n         * The maximum number of reconnection attempts.\n         * @default 5\n         */\n        attempts?: number | undefined\n        /**\n         * The delay (in ms) between reconnection attempts.\n         * @default 2_000\n         */\n        delay?: number | undefined\n      }\n    | undefined\n  url: string\n}\n\nexport type GetSocketRpcClientErrorType =\n  | CreateBatchSchedulerErrorType\n  | ErrorType\n\nexport const socketClientCache = /*#__PURE__*/ new Map<\n  string,\n  SocketRpcClient<Socket<{}>>\n>()\n\nexport async function getSocketRpcClient<socket extends {}>(\n  parameters: GetSocketRpcClientParameters<socket>,\n): Promise<SocketRpcClient<socket>> {\n  const {\n    getSocket,\n    keepAlive = true,\n    key = 'socket',\n    reconnect = true,\n    url,\n  } = parameters\n  const { interval: keepAliveInterval = 30_000 } =\n    typeof keepAlive === 'object' ? keepAlive : {}\n  const { attempts = 5, delay = 2_000 } =\n    typeof reconnect === 'object' ? reconnect : {}\n\n  const id = JSON.stringify({ keepAlive, key, url, reconnect })\n  let socketClient = socketClientCache.get(id)\n\n  // If the socket already exists, return it.\n  if (socketClient) return socketClient as {} as SocketRpcClient<socket>\n\n  let reconnectCount = 0\n  const { schedule } = createBatchScheduler<\n    undefined,\n    [SocketRpcClient<socket>]\n  >({\n    id,\n    fn: async () => {\n      // Set up a cache for incoming \"synchronous\" requests.\n      const requests = new Map<Id, CallbackFn>()\n\n      // Set up a cache for subscriptions (eth_subscribe).\n      const subscriptions = new Map<Id, CallbackFn>()\n\n      let error: Error | Event | undefined\n      let socket: Socket<{}>\n      let keepAliveTimer: ReturnType<typeof setInterval> | undefined\n\n      let reconnectInProgress = false\n      function attemptReconnect() {\n        // Attempt to reconnect.\n        if (reconnect && reconnectCount < attempts) {\n          if (reconnectInProgress) return\n          reconnectInProgress = true\n          reconnectCount++\n\n          // Make sure the previous socket is definitely closed.\n          socket?.close()\n\n          setTimeout(async () => {\n            // biome-ignore lint/suspicious/noConsole: _\n            await setup().catch(console.error)\n            reconnectInProgress = false\n          }, delay)\n        }\n        // Otherwise, clear all requests and subscriptions.\n        else {\n          requests.clear()\n          subscriptions.clear()\n        }\n      }\n\n      // Set up socket implementation.\n      async function setup() {\n        const result = await getSocket({\n          onClose() {\n            // Notify all requests and subscriptions of the closure error.\n            for (const request of requests.values())\n              request.onError?.(new SocketClosedError({ url }))\n            for (const subscription of subscriptions.values())\n              subscription.onError?.(new SocketClosedError({ url }))\n\n            attemptReconnect()\n          },\n          onError(error_) {\n            error = error_\n\n            // Notify all requests and subscriptions of the error.\n            for (const request of requests.values()) request.onError?.(error)\n            for (const subscription of subscriptions.values())\n              subscription.onError?.(error)\n\n            attemptReconnect()\n          },\n          onOpen() {\n            error = undefined\n            reconnectCount = 0\n          },\n          onResponse(data) {\n            const isSubscription = data.method === 'eth_subscription'\n            const id = isSubscription ? data.params.subscription : data.id\n            const cache = isSubscription ? subscriptions : requests\n            const callback = cache.get(id)\n            if (callback) callback.onResponse(data)\n            if (!isSubscription) cache.delete(id)\n          },\n        })\n\n        socket = result\n\n        if (keepAlive) {\n          if (keepAliveTimer) clearInterval(keepAliveTimer)\n          keepAliveTimer = setInterval(() => socket.ping?.(), keepAliveInterval)\n        }\n\n        if (reconnect && subscriptions.size > 0) {\n          const subscriptionEntries = subscriptions.entries()\n          for (const [\n            key,\n            { onResponse, body, onError },\n          ] of subscriptionEntries) {\n            if (!body) continue\n\n            subscriptions.delete(key)\n            socketClient?.request({ body, onResponse, onError })\n          }\n        }\n\n        return result\n      }\n      await setup()\n      error = undefined\n\n      // Create a new socket instance.\n      socketClient = {\n        close() {\n          keepAliveTimer && clearInterval(keepAliveTimer)\n          socket.close()\n          socketClientCache.delete(id)\n        },\n        get socket() {\n          return socket\n        },\n        request({ body, onError, onResponse }) {\n          if (error && onError) onError(error)\n\n          const id = body.id ?? idCache.take()\n\n          const callback = (response: RpcResponse) => {\n            if (typeof response.id === 'number' && id !== response.id) return\n\n            // If we are subscribing to a topic, we want to set up a listener for incoming\n            // messages.\n            if (\n              body.method === 'eth_subscribe' &&\n              typeof response.result === 'string'\n            )\n              subscriptions.set(response.result, {\n                onResponse: callback,\n                onError,\n                body,\n              })\n\n            onResponse(response)\n          }\n\n          // If we are unsubscribing from a topic, remove the listener immediately\n          // to prevent it from being re-subscribed on reconnect.\n          if (body.method === 'eth_unsubscribe')\n            subscriptions.delete(body.params?.[0])\n\n          requests.set(id, { onResponse: callback, onError })\n          try {\n            socket.request({\n              body: {\n                jsonrpc: '2.0',\n                id,\n                ...body,\n              },\n            })\n          } catch (error) {\n            onError?.(error as Error)\n          }\n        },\n        requestAsync({ body, timeout = 10_000 }) {\n          return withTimeout(\n            () =>\n              new Promise<RpcResponse>((onResponse, onError) =>\n                this.request({\n                  body,\n                  onError,\n                  onResponse,\n                }),\n              ),\n            {\n              errorInstance: new TimeoutError({ body, url }),\n              timeout,\n            },\n          )\n        },\n        requests,\n        subscriptions,\n        url,\n      }\n      socketClientCache.set(id, socketClient)\n\n      return [socketClient as {} as SocketRpcClient<socket>]\n    },\n  })\n\n  const [_, [socketClient_]] = await schedule()\n  return socketClient_\n}\n", "export function getNativeWebSocket() {\n  if (typeof WebSocket !== \"undefined\") return WebSocket;\n  if (typeof global.WebSocket !== \"undefined\") return global.WebSocket;\n  if (typeof window.WebSocket !== \"undefined\") return window.WebSocket;\n  if (typeof self.WebSocket !== \"undefined\") return self.WebSocket;\n  throw new Error(\"`WebSocket` is not supported in this environment\");\n}\n", "import * as WebSocket_ from \"ws\";\nimport { getNativeWebSocket } from \"./utils.js\";\n\nexport const WebSocket = (() => {\n  try {\n    return getNativeWebSocket();\n  } catch {\n    if (WebSocket_.WebSocket) return WebSocket_.WebSocket;\n    return WebSocket_;\n  }\n})();\n", "import type { MessageEvent } from 'isows'\n\nimport {\n  SocketClosedError,\n  WebSocketRequestError,\n} from '../../errors/request.js'\nimport type { RpcRequest } from '../../types/rpc.js'\nimport {\n  type GetSocketRpcClientParameters,\n  getSocketRpcClient,\n  type Socket,\n  type SocketRpcClient,\n} from './socket.js'\n\nexport type GetWebSocketRpcClientOptions = Pick<\n  GetSocketRpcClientParameters,\n  'keepAlive' | 'reconnect'\n>\n\nexport async function getWebSocketRpcClient(\n  url: string,\n  options: GetWebSocketRpcClientOptions | undefined = {},\n): Promise<SocketRpcClient<WebSocket>> {\n  const { keepAlive, reconnect } = options\n\n  return getSocketRpcClient({\n    async getSocket({ onClose, onError, onOpen, onResponse }) {\n      const WebSocket = await import('isows').then((module) => module.WebSocket)\n      const socket = new WebSocket(url)\n\n      function onClose_() {\n        socket.removeEventListener('close', onClose_)\n        socket.removeEventListener('message', onMessage)\n        socket.removeEventListener('error', onError)\n        socket.removeEventListener('open', onOpen)\n        onClose()\n      }\n      function onMessage({ data }: MessageEvent) {\n        // ignore empty messages\n        if (typeof data === 'string' && data.trim().length === 0) return\n\n        try {\n          const _data = JSON.parse(data)\n          onResponse(_data)\n        } catch (error) {\n          onError(error as Error)\n        }\n      }\n\n      // Setup event listeners for RPC & subscription responses.\n      socket.addEventListener('close', onClose_)\n      socket.addEventListener('message', onMessage)\n      socket.addEventListener('error', onError)\n      socket.addEventListener('open', onOpen)\n\n      // Wait for the socket to open.\n      if (socket.readyState === WebSocket.CONNECTING) {\n        await new Promise((resolve, reject) => {\n          if (!socket) return\n          socket.onopen = resolve\n          socket.onerror = reject\n        })\n      }\n\n      const { close: close_ } = socket\n\n      return Object.assign(socket, {\n        close() {\n          close_.bind(socket)()\n          onClose_()\n        },\n        ping() {\n          try {\n            if (\n              socket.readyState === socket.CLOSED ||\n              socket.readyState === socket.CLOSING\n            )\n              throw new WebSocketRequestError({\n                url: socket.url,\n                cause: new SocketClosedError({ url: socket.url }),\n              })\n\n            const body: RpcRequest = {\n              jsonrpc: '2.0',\n              id: null,\n              method: 'net_version',\n              params: [],\n            }\n            socket.send(JSON.stringify(body))\n          } catch (error) {\n            onError(error as Error)\n          }\n        },\n        request({ body }) {\n          if (\n            socket.readyState === socket.CLOSED ||\n            socket.readyState === socket.CLOSING\n          )\n            throw new WebSocketRequestError({\n              body,\n              url: socket.url,\n              cause: new SocketClosedError({ url: socket.url }),\n            })\n\n          return socket.send(JSON.stringify(body))\n        },\n      } as Socket<WebSocket>)\n    },\n    keepAlive,\n    reconnect,\n    url,\n  })\n}\n", "// TODO(v3): This file is here for backwards compatibility, and to prevent breaking changes.\n// These APIs will be removed in v3.\n\n/* c8 ignore start */\nimport type {\n  TimeoutErrorType,\n  WebSocketRequestError,\n} from '../../errors/request.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { RpcResponse } from '../../types/rpc.js'\nimport type { WithTimeoutErrorType } from '../promise/withTimeout.js'\nimport { getHttpRpcClient, type HttpRequestParameters } from './http.js'\nimport type { SocketRpcClient } from './socket.js'\nimport { getWebSocketRpcClient } from './webSocket.js'\n\nexport type WebSocketOptions = Parameters<\n  SocketRpcClient<WebSocket>['request']\n>[0]\nexport type WebSocketReturnType = SocketRpcClient<WebSocket>\nexport type WebSocketErrorType = WebSocketRequestError | ErrorType\n\nfunction webSocket(\n  socketClient: SocketRpcClient<WebSocket>,\n  { body, onError, onResponse }: WebSocketOptions,\n): WebSocketReturnType {\n  socketClient.request({\n    body,\n    onError,\n    onResponse,\n  })\n  return socketClient\n}\n\nexport type WebSocketAsyncOptions = Parameters<\n  SocketRpcClient<WebSocket>['requestAsync']\n>[0]\nexport type WebSocketAsyncReturnType = RpcResponse\nexport type WebSocketAsyncErrorType =\n  | WebSocketErrorType\n  | TimeoutErrorType\n  | WithTimeoutErrorType\n  | ErrorType\n\nasync function webSocketAsync(\n  socketClient: SocketRpcClient<WebSocket>,\n  { body, timeout = 10_000 }: WebSocketAsyncOptions,\n): Promise<WebSocketAsyncReturnType> {\n  return socketClient.requestAsync({\n    body,\n    timeout,\n  })\n}\n\n/**\n * @deprecated use `getSocketClient` instead.\n *\n * ```diff\n * -import { getSocket } from 'viem/utils'\n * +import { getSocketClient } from 'viem/utils'\n *\n * -const socket = await getSocket(url)\n * +const socketClient = await getSocketClient(url)\n * +const socket = socketClient.socket\n * ```\n */\nexport async function getSocket(url: string) {\n  const client = await getWebSocketRpcClient(url)\n  return Object.assign(client.socket, {\n    requests: client.requests,\n    subscriptions: client.subscriptions,\n  })\n}\n\nexport const rpc = {\n  /**\n   * @deprecated use `getHttpRpcClient` instead.\n   *\n   * ```diff\n   * -import { rpc } from 'viem/utils'\n   * +import { getHttpRpcClient } from 'viem/utils'\n   *\n   * -rpc.http(url, params)\n   * +const httpClient = getHttpRpcClient(url)\n   * +httpClient.request(params)\n   * ```\n   */\n  http(url: string, params: HttpRequestParameters) {\n    return getHttpRpcClient(url).request(params)\n  },\n  /**\n   * @deprecated use `getWebSocketRpcClient` instead.\n   *\n   * ```diff\n   * -import { rpc } from 'viem/utils'\n   * +import { getWebSocketRpcClient } from 'viem/utils'\n   *\n   * -rpc.webSocket(url, params)\n   * +const webSocketClient = getWebSocketRpcClient(url)\n   * +webSocketClient.request(params)\n   * ```\n   */\n  webSocket,\n  /**\n   * @deprecated use `getWebSocketRpcClient` instead.\n   *\n   * ```diff\n   * -import { rpc } from 'viem/utils'\n   * +import { getWebSocketRpcClient } from 'viem/utils'\n   *\n   * -const response = await rpc.webSocketAsync(url, params)\n   * +const webSocketClient = getWebSocketRpcClient(url)\n   * +const response = await webSocketClient.requestAsync(params)\n   * ```\n   */\n  webSocketAsync,\n}\n/* c8 ignore end */\n", "export const presignMessagePrefix = '\\x19Ethereum Signed Message:\\n'\n", "import { presignMessagePrefix } from '../../constants/strings.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex, SignableMessage } from '../../types/misc.js'\nimport { type ConcatErrorType, concat } from '../data/concat.js'\nimport { size } from '../data/size.js'\nimport {\n  type BytesToHexErrorType,\n  bytesToHex,\n  type StringToHexErrorType,\n  stringToHex,\n} from '../encoding/toHex.js'\n\nexport type ToPrefixedMessageErrorType =\n  | ConcatErrorType\n  | StringToHexErrorType\n  | BytesToHexErrorType\n  | ErrorType\n\nexport function toPrefixedMessage(message_: SignableMessage): Hex {\n  const message = (() => {\n    if (typeof message_ === 'string') return stringToHex(message_)\n    if (typeof message_.raw === 'string') return message_.raw\n    return bytesToHex(message_.raw)\n  })()\n  const prefix = stringToHex(`${presignMessagePrefix}${size(message)}`)\n  return concat([prefix, message])\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, SignableMessage } from '../../types/misc.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport { toPrefixedMessage } from './toPrefixedMessage.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type HashMessageReturnType<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type HashMessageErrorType = Keccak256ErrorType | ErrorType\n\nexport function hashMessage<to extends To = 'hex'>(\n  message: SignableMessage,\n  to_?: to | undefined,\n): HashMessageReturnType<to> {\n  return keccak256(toPrefixedMessage(message), to_)\n}\n", "import type { TypedData } from 'abitype'\n\nimport { stringify } from '../utils/stringify.js'\nimport { BaseError } from './base.js'\n\nexport type InvalidDomainErrorType = InvalidDomainError & {\n  name: 'InvalidDomainError'\n}\nexport class InvalidDomainError extends BaseError {\n  constructor({ domain }: { domain: unknown }) {\n    super(`Invalid domain \"${stringify(domain)}\".`, {\n      metaMessages: ['Must be a valid EIP-712 domain.'],\n    })\n  }\n}\n\nexport type InvalidPrimaryTypeErrorType = InvalidPrimaryTypeError & {\n  name: 'InvalidPrimaryTypeError'\n}\nexport class InvalidPrimaryTypeError extends BaseError {\n  constructor({\n    primaryType,\n    types,\n  }: { primaryType: string; types: TypedData | Record<string, unknown> }) {\n    super(\n      `Invalid primary type \\`${primaryType}\\` must be one of \\`${JSON.stringify(Object.keys(types))}\\`.`,\n      {\n        docsPath: '/api/glossary/Errors#typeddatainvalidprimarytypeerror',\n        metaMessages: ['Check that the primary type is a key in `types`.'],\n      },\n    )\n  }\n}\n\nexport type InvalidStructTypeErrorType = InvalidStructTypeError & {\n  name: 'InvalidStructTypeError'\n}\nexport class InvalidStructTypeError extends BaseError {\n  constructor({ type }: { type: string }) {\n    super(`Struct type \"${type}\" is invalid.`, {\n      metaMessages: ['Struct type must not be a Solidity type.'],\n      name: 'InvalidStructTypeError',\n    })\n  }\n}\n", "import type { TypedData, TypedDataDomain, TypedDataParameter } from 'abitype'\n\nimport { BytesSizeMismatchError } from '../errors/abi.js'\nimport { InvalidAddressError } from '../errors/address.js'\nimport {\n  InvalidDomainError,\n  InvalidPrimaryTypeError,\n  InvalidStructTypeError,\n} from '../errors/typedData.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Hex } from '../types/misc.js'\nimport type { TypedDataDefinition } from '../types/typedData.js'\nimport { type IsAddressErrorType, isAddress } from './address/isAddress.js'\nimport { type SizeErrorType, size } from './data/size.js'\nimport { type NumberToHexErrorType, numberToHex } from './encoding/toHex.js'\nimport { bytesRegex, integerRegex } from './regex.js'\nimport {\n  type HashDomainErrorType,\n  hashDomain,\n} from './signature/hashTypedData.js'\nimport { stringify } from './stringify.js'\n\nexport type SerializeTypedDataErrorType =\n  | HashDomainErrorType\n  | IsAddressErrorType\n  | NumberToHexErrorType\n  | SizeErrorType\n  | ErrorType\n\nexport function serializeTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n>(parameters: TypedDataDefinition<typedData, primaryType>) {\n  const {\n    domain: domain_,\n    message: message_,\n    primaryType,\n    types,\n  } = parameters as unknown as TypedDataDefinition\n\n  const normalizeData = (\n    struct: readonly TypedDataParameter[],\n    data_: Record<string, unknown>,\n  ) => {\n    const data = { ...data_ }\n    for (const param of struct) {\n      const { name, type } = param\n      if (type === 'address') data[name] = (data[name] as string).toLowerCase()\n    }\n    return data\n  }\n\n  const domain = (() => {\n    if (!types.EIP712Domain) return {}\n    if (!domain_) return {}\n    return normalizeData(types.EIP712Domain, domain_)\n  })()\n\n  const message = (() => {\n    if (primaryType === 'EIP712Domain') return undefined\n    return normalizeData(types[primaryType], message_)\n  })()\n\n  return stringify({ domain, message, primaryType, types })\n}\n\nexport type ValidateTypedDataErrorType =\n  | HashDomainErrorType\n  | IsAddressErrorType\n  | NumberToHexErrorType\n  | SizeErrorType\n  | ErrorType\n\nexport function validateTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n>(parameters: TypedDataDefinition<typedData, primaryType>) {\n  const { domain, message, primaryType, types } =\n    parameters as unknown as TypedDataDefinition\n\n  const validateData = (\n    struct: readonly TypedDataParameter[],\n    data: Record<string, unknown>,\n  ) => {\n    for (const param of struct) {\n      const { name, type } = param\n      const value = data[name]\n\n      const integerMatch = type.match(integerRegex)\n      if (\n        integerMatch &&\n        (typeof value === 'number' || typeof value === 'bigint')\n      ) {\n        const [_type, base, size_] = integerMatch\n        // If number cannot be cast to a sized hex value, it is out of range\n        // and will throw.\n        numberToHex(value, {\n          signed: base === 'int',\n          size: Number.parseInt(size_, 10) / 8,\n        })\n      }\n\n      if (type === 'address' && typeof value === 'string' && !isAddress(value))\n        throw new InvalidAddressError({ address: value })\n\n      const bytesMatch = type.match(bytesRegex)\n      if (bytesMatch) {\n        const [_type, size_] = bytesMatch\n        if (size_ && size(value as Hex) !== Number.parseInt(size_, 10))\n          throw new BytesSizeMismatchError({\n            expectedSize: Number.parseInt(size_, 10),\n            givenSize: size(value as Hex),\n          })\n      }\n\n      const struct = types[type]\n      if (struct) {\n        validateReference(type)\n        validateData(struct, value as Record<string, unknown>)\n      }\n    }\n  }\n\n  // Validate domain types.\n  if (types.EIP712Domain && domain) {\n    if (typeof domain !== 'object') throw new InvalidDomainError({ domain })\n    validateData(types.EIP712Domain, domain)\n  }\n\n  // Validate message types.\n  if (primaryType !== 'EIP712Domain') {\n    if (types[primaryType]) validateData(types[primaryType], message)\n    else throw new InvalidPrimaryTypeError({ primaryType, types })\n  }\n}\n\nexport type GetTypesForEIP712DomainErrorType = ErrorType\n\nexport function getTypesForEIP712Domain({\n  domain,\n}: {\n  domain?: TypedDataDomain | undefined\n}): TypedDataParameter[] {\n  return [\n    typeof domain?.name === 'string' && { name: 'name', type: 'string' },\n    domain?.version && { name: 'version', type: 'string' },\n    (typeof domain?.chainId === 'number' ||\n      typeof domain?.chainId === 'bigint') && {\n      name: 'chainId',\n      type: 'uint256',\n    },\n    domain?.verifyingContract && {\n      name: 'verifyingContract',\n      type: 'address',\n    },\n    domain?.salt && { name: 'salt', type: 'bytes32' },\n  ].filter(Boolean) as TypedDataParameter[]\n}\n\nexport type DomainSeparatorErrorType =\n  | GetTypesForEIP712DomainErrorType\n  | HashDomainErrorType\n  | ErrorType\n\nexport function domainSeparator({ domain }: { domain: TypedDataDomain }): Hex {\n  return hashDomain({\n    domain: domain as never,\n    types: {\n      EIP712Domain: getTypesForEIP712Domain({ domain }),\n    },\n  })\n}\n\n/** @internal */\nfunction validateReference(type: string) {\n  // Struct type must not be a Solidity type.\n  if (\n    type === 'address' ||\n    type === 'bool' ||\n    type === 'string' ||\n    type.startsWith('bytes') ||\n    type.startsWith('uint') ||\n    type.startsWith('int')\n  )\n    throw new InvalidStructTypeError({ type })\n}\n", "// Implementation forked and adapted from https://github.com/MetaMask/eth-sig-util/blob/main/src/sign-typed-data.ts\n\nimport type { AbiParameter, TypedData } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n  EIP712DomainDefinition,\n  MessageDefinition,\n  TypedDataDefinition,\n} from '../../types/typedData.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n  type EncodeAbiParametersErrorType,\n  encodeAbiParameters,\n} from '../abi/encodeAbiParameters.js'\nimport { concat } from '../data/concat.js'\nimport { type ToHexErrorType, toHex } from '../encoding/toHex.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n  type GetTypesForEIP712DomainErrorType,\n  getTypesForEIP712Domain,\n  type ValidateTypedDataErrorType,\n  validateTypedData,\n} from '../typedData.js'\n\ntype MessageTypeProperty = {\n  name: string\n  type: string\n}\n\nexport type HashTypedDataParameters<\n  typedData extends TypedData | Record<string, unknown> = TypedData,\n  primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n> = TypedDataDefinition<typedData, primaryType>\n\nexport type HashTypedDataReturnType = Hex\n\nexport type HashTypedDataErrorType =\n  | GetTypesForEIP712DomainErrorType\n  | HashDomainErrorType\n  | HashStructErrorType\n  | ValidateTypedDataErrorType\n  | ErrorType\n\nexport function hashTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n>(\n  parameters: HashTypedDataParameters<typedData, primaryType>,\n): HashTypedDataReturnType {\n  const {\n    domain = {},\n    message,\n    primaryType,\n  } = parameters as HashTypedDataParameters\n  const types = {\n    EIP712Domain: getTypesForEIP712Domain({ domain }),\n    ...parameters.types,\n  }\n\n  // Need to do a runtime validation check on addresses, byte ranges, integer ranges, etc\n  // as we can't statically check this with TypeScript.\n  validateTypedData({\n    domain,\n    message,\n    primaryType,\n    types,\n  })\n\n  const parts: Hex[] = ['0x1901']\n  if (domain)\n    parts.push(\n      hashDomain({\n        domain,\n        types: types as Record<string, MessageTypeProperty[]>,\n      }),\n    )\n\n  if (primaryType !== 'EIP712Domain')\n    parts.push(\n      hashStruct({\n        data: message,\n        primaryType,\n        types: types as Record<string, MessageTypeProperty[]>,\n      }),\n    )\n\n  return keccak256(concat(parts))\n}\n\nexport type HashDomainErrorType = HashStructErrorType | ErrorType\n\nexport function hashDomain<\n  const typedData extends TypedData | Record<string, unknown> = TypedData,\n>({\n  domain,\n  types,\n}: UnionOmit<EIP712DomainDefinition<typedData>, 'primaryType'>) {\n  return hashStruct({\n    data: domain as Record<string, unknown>,\n    primaryType: 'EIP712Domain',\n    types: types as Record<string, readonly MessageTypeProperty[]>,\n  })\n}\n\nexport type HashStructErrorType =\n  | EncodeDataErrorType\n  | Keccak256ErrorType\n  | ErrorType\n\nexport function hashStruct<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n>({\n  data,\n  primaryType,\n  types,\n}: MessageDefinition<typedData, primaryType, 'data'>) {\n  const encoded = encodeData({\n    data: data as Record<string, unknown>,\n    primaryType,\n    types: types as Record<string, readonly MessageTypeProperty[]>,\n  })\n  return keccak256(encoded)\n}\n\ntype EncodeDataErrorType =\n  | EncodeAbiParametersErrorType\n  | EncodeFieldErrorType\n  | HashTypeErrorType\n  | ErrorType\n\nfunction encodeData({\n  data,\n  primaryType,\n  types,\n}: {\n  data: Record<string, unknown>\n  primaryType: string\n  types: Record<string, readonly MessageTypeProperty[]>\n}) {\n  const encodedTypes: AbiParameter[] = [{ type: 'bytes32' }]\n  const encodedValues: unknown[] = [hashType({ primaryType, types })]\n\n  for (const field of types[primaryType]) {\n    const [type, value] = encodeField({\n      types,\n      name: field.name,\n      type: field.type,\n      value: data[field.name],\n    })\n    encodedTypes.push(type)\n    encodedValues.push(value)\n  }\n\n  return encodeAbiParameters(encodedTypes, encodedValues)\n}\n\ntype HashTypeErrorType =\n  | ToHexErrorType\n  | EncodeTypeErrorType\n  | Keccak256ErrorType\n  | ErrorType\n\nfunction hashType({\n  primaryType,\n  types,\n}: {\n  primaryType: string\n  types: Record<string, readonly MessageTypeProperty[]>\n}) {\n  const encodedHashType = toHex(encodeType({ primaryType, types }))\n  return keccak256(encodedHashType)\n}\n\ntype EncodeTypeErrorType = FindTypeDependenciesErrorType\n\nexport function encodeType({\n  primaryType,\n  types,\n}: {\n  primaryType: string\n  types: Record<string, readonly MessageTypeProperty[]>\n}) {\n  let result = ''\n  const unsortedDeps = findTypeDependencies({ primaryType, types })\n  unsortedDeps.delete(primaryType)\n\n  const deps = [primaryType, ...Array.from(unsortedDeps).sort()]\n  for (const type of deps) {\n    result += `${type}(${types[type]\n      .map(({ name, type: t }) => `${t} ${name}`)\n      .join(',')})`\n  }\n\n  return result\n}\n\ntype FindTypeDependenciesErrorType = ErrorType\n\nfunction findTypeDependencies(\n  {\n    primaryType: primaryType_,\n    types,\n  }: {\n    primaryType: string\n    types: Record<string, readonly MessageTypeProperty[]>\n  },\n  results: Set<string> = new Set(),\n): Set<string> {\n  const match = primaryType_.match(/^\\w*/u)\n  const primaryType = match?.[0]!\n  if (results.has(primaryType) || types[primaryType] === undefined) {\n    return results\n  }\n\n  results.add(primaryType)\n\n  for (const field of types[primaryType]) {\n    findTypeDependencies({ primaryType: field.type, types }, results)\n  }\n  return results\n}\n\ntype EncodeFieldErrorType =\n  | Keccak256ErrorType\n  | EncodeAbiParametersErrorType\n  | ToHexErrorType\n  | ErrorType\n\nfunction encodeField({\n  types,\n  name,\n  type,\n  value,\n}: {\n  types: Record<string, readonly MessageTypeProperty[]>\n  name: string\n  type: string\n  value: any\n}): [type: AbiParameter, value: any] {\n  if (types[type] !== undefined) {\n    return [\n      { type: 'bytes32' },\n      keccak256(encodeData({ data: value, primaryType: type, types })),\n    ]\n  }\n\n  if (type === 'bytes') return [{ type: 'bytes32' }, keccak256(value)]\n\n  if (type === 'string') return [{ type: 'bytes32' }, keccak256(toHex(value))]\n\n  if (type.lastIndexOf(']') === type.length - 1) {\n    const parsedType = type.slice(0, type.lastIndexOf('['))\n    const typeValuePairs = (value as [AbiParameter, any][]).map((item) =>\n      encodeField({\n        name,\n        type: parsedType,\n        types,\n        value: item,\n      }),\n    )\n    return [\n      { type: 'bytes32' },\n      keccak256(\n        encodeAbiParameters(\n          typeValuePairs.map(([t]) => t),\n          typeValuePairs.map(([, v]) => v),\n        ),\n      ),\n    ]\n  }\n\n  return [{ type }, value]\n}\n", "export const erc6492MagicBytes =\n  '0x6492649264926492649264926492649264926492649264926492649264926492' as const\n\nexport const zeroHash =\n  '0x0000000000000000000000000000000000000000000000000000000000000000' as const\n", "import { erc6492MagicBytes } from '../../constants/bytes.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type SliceHexErrorType, sliceHex } from '../data/slice.js'\n\nexport type IsErc6492SignatureParameters = Hex\nexport type IsErc6492SignatureReturnType = boolean\nexport type IsErc6492SignatureErrorType = SliceHexErrorType | ErrorType\n\n/** Whether or not the signature is an ERC-6492 formatted signature. */\nexport function isErc6492Signature(\n  signature: IsErc6492SignatureParameters,\n): IsErc6492SignatureReturnType {\n  return sliceHex(signature, -32) === erc6492MagicBytes\n}\n", "/**\n * @internal\n *\n * Map with a LRU (Least recently used) policy.\n * @see https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU\n */\nexport class LruMap<value = unknown> extends Map<string, value> {\n  maxSize: number\n\n  constructor(size: number) {\n    super()\n    this.maxSize = size\n  }\n\n  override get(key: string) {\n    const value = super.get(key)\n\n    if (super.has(key) && value !== undefined) {\n      this.delete(key)\n      super.set(key, value)\n    }\n\n    return value\n  }\n\n  override set(key: string, value: value) {\n    super.set(key, value)\n    if (this.maxSize && this.size > this.maxSize) {\n      const firstKey = this.keys().next().value\n      if (firstKey) this.delete(firstKey)\n    }\n    return this\n  }\n}\n", "import type * as Address from './Address.js'\nimport { LruMap } from './internal/lru.js'\n\nconst caches = {\n  checksum: /*#__PURE__*/ new LruMap<Address.Address>(8192),\n}\n\nexport const checksum = caches.checksum\n\n/**\n * Clears all global caches.\n *\n * @example\n * ```ts\n * import { Caches } from 'ox'\n * Caches.clear()\n * ```\n */\nexport function clear() {\n  for (const cache of Object.values(caches)) cache.clear()\n}\n", "import { hmac } from '@noble/hashes/hmac'\nimport { ripemd160 as noble_ripemd160 } from '@noble/hashes/ripemd160'\nimport { keccak_256 as noble_keccak256 } from '@noble/hashes/sha3'\nimport { sha256 as noble_sha256 } from '@noble/hashes/sha256'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\n\n/**\n * Calculates the [Keccak256](https://en.wikipedia.org/wiki/SHA-3) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `keccak_256` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.keccak256('0xdeadbeef')\n * // @log: '0xd4fd4e189132273036449fc9e11198c739161b4c0116a9a2dccdfa1c492006f1'\n * ```\n *\n * @example\n * ### Calculate Hash of a String\n *\n * ```ts twoslash\n * import { Hash, Hex } from 'ox'\n *\n * Hash.keccak256(Hex.fromString('hello world'))\n * // @log: '0x3ea2f1d0abf3fc66cf29eebb70cbd4e7fe762ef8a09bcc06c8edf641230afec0'\n * ```\n *\n * @example\n * ### Configure Return Type\n *\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.keccak256('0xdeadbeef', { as: 'Bytes' })\n * // @log: Uint8Array [...]\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Keccak256 hash.\n */\nexport function keccak256<\n  value extends Hex.Hex | Bytes.Bytes,\n  as extends 'Hex' | 'Bytes' =\n    | (value extends Hex.Hex ? 'Hex' : never)\n    | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n  value: value | Hex.Hex | Bytes.Bytes,\n  options: keccak256.Options<as> = {},\n): keccak256.ReturnType<as> {\n  const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n  const bytes = noble_keccak256(Bytes.from(value))\n  if (as === 'Bytes') return bytes as never\n  return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace keccak256 {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> = {\n    /** The return type. @default 'Hex' */\n    as?: as | 'Hex' | 'Bytes' | undefined\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType =\n    | Bytes.from.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Calculates the [HMAC-SHA256](https://en.wikipedia.org/wiki/HMAC) of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `hmac` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash, Hex } from 'ox'\n *\n * Hash.hmac256(Hex.fromString('key'), '0xdeadbeef')\n * // @log: '0x...'\n * ```\n *\n * @example\n * ### Configure Return Type\n *\n * ```ts twoslash\n * import { Hash, Hex } from 'ox'\n *\n * Hash.hmac256(Hex.fromString('key'), '0xdeadbeef', { as: 'Bytes' })\n * // @log: Uint8Array [...]\n * ```\n *\n * @param key - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} key.\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns HMAC-SHA256 hash.\n */\nexport function hmac256<\n  value extends Hex.Hex | Bytes.Bytes,\n  as extends 'Hex' | 'Bytes' =\n    | (value extends Hex.Hex ? 'Hex' : never)\n    | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n  key: Hex.Hex | Bytes.Bytes,\n  value: value | Hex.Hex | Bytes.Bytes,\n  options: hmac256.Options<as> = {},\n): hmac256.ReturnType<as> {\n  const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n  const bytes = hmac(noble_sha256, Bytes.from(key), Bytes.from(value))\n  if (as === 'Bytes') return bytes as never\n  return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace hmac256 {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> = {\n    /** The return type. @default 'Hex' */\n    as?: as | 'Hex' | 'Bytes' | undefined\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType =\n    | Bytes.from.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Calculates the [Ripemd160](https://en.wikipedia.org/wiki/RIPEMD) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `ripemd160` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.ripemd160('0xdeadbeef')\n * // '0x226821c2f5423e11fe9af68bd285c249db2e4b5a'\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Ripemd160 hash.\n */\nexport function ripemd160<\n  value extends Hex.Hex | Bytes.Bytes,\n  as extends 'Hex' | 'Bytes' =\n    | (value extends Hex.Hex ? 'Hex' : never)\n    | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n  value: value | Hex.Hex | Bytes.Bytes,\n  options: ripemd160.Options<as> = {},\n): ripemd160.ReturnType<as> {\n  const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n  const bytes = noble_ripemd160(Bytes.from(value))\n  if (as === 'Bytes') return bytes as never\n  return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace ripemd160 {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> = {\n    /** The return type. @default 'Hex' */\n    as?: as | 'Hex' | 'Bytes' | undefined\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType =\n    | Bytes.from.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Calculates the [Sha256](https://en.wikipedia.org/wiki/SHA-256) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `sha256` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.sha256('0xdeadbeef')\n * // '0x5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953'\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Sha256 hash.\n */\nexport function sha256<\n  value extends Hex.Hex | Bytes.Bytes,\n  as extends 'Hex' | 'Bytes' =\n    | (value extends Hex.Hex ? 'Hex' : never)\n    | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n  value: value | Hex.Hex | Bytes.Bytes,\n  options: sha256.Options<as> = {},\n): sha256.ReturnType<as> {\n  const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n  const bytes = noble_sha256(Bytes.from(value))\n  if (as === 'Bytes') return bytes as never\n  return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace sha256 {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n    /** The return type. @default 'Hex' */\n    as?: as | 'Hex' | 'Bytes' | undefined\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType =\n    | Bytes.from.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Checks if a string is a valid hash value.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.validate('0x')\n * // @log: false\n *\n * Hash.validate('0x3ea2f1d0abf3fc66cf29eebb70cbd4e7fe762ef8a09bcc06c8edf641230afec0')\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns Whether the value is a valid hash.\n */\nexport function validate(value: string): value is Hex.Hex {\n  return Hex.validate(value) && Hex.size(value) === 32\n}\n\nexport declare namespace validate {\n  type ErrorType =\n    | Hex.validate.ErrorType\n    | Hex.size.ErrorType\n    | Errors.GlobalErrorType\n}\n", "import * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type { Compute, ExactPartial } from './internal/types.js'\nimport * as Json from './Json.js'\n\n/** Root type for an ECDSA Public Key. */\nexport type PublicKey<\n  compressed extends boolean = false,\n  bigintType = bigint,\n  numberType = number,\n> = Compute<\n  compressed extends true\n    ? {\n        prefix: numberType\n        x: bigintType\n        y?: undefined\n      }\n    : {\n        prefix: numberType\n        x: bigintType\n        y: bigintType\n      }\n>\n\n/**\n * Asserts that a {@link ox#PublicKey.PublicKey} is valid.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * PublicKey.assert({\n *   prefix: 4,\n *   y: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * })\n * // @error: PublicKey.InvalidError: Value \\`{\"y\":\"1\"}\\` is not a valid public key.\n * // @error: Public key must contain:\n * // @error: - an `x` and `prefix` value (compressed)\n * // @error: - an `x`, `y`, and `prefix` value (uncompressed)\n * ```\n *\n * @param publicKey - The public key object to assert.\n */\nexport function assert(\n  publicKey: ExactPartial<PublicKey>,\n  options: assert.Options = {},\n): asserts publicKey is PublicKey {\n  const { compressed } = options\n  const { prefix, x, y } = publicKey\n\n  // Uncompressed\n  if (\n    compressed === false ||\n    (typeof x === 'bigint' && typeof y === 'bigint')\n  ) {\n    if (prefix !== 4)\n      throw new InvalidPrefixError({\n        prefix,\n        cause: new InvalidUncompressedPrefixError(),\n      })\n    return\n  }\n\n  // Compressed\n  if (\n    compressed === true ||\n    (typeof x === 'bigint' && typeof y === 'undefined')\n  ) {\n    if (prefix !== 3 && prefix !== 2)\n      throw new InvalidPrefixError({\n        prefix,\n        cause: new InvalidCompressedPrefixError(),\n      })\n    return\n  }\n\n  // Unknown/invalid\n  throw new InvalidError({ publicKey })\n}\n\nexport declare namespace assert {\n  type Options = {\n    /** Whether or not the public key should be compressed. */\n    compressed?: boolean\n  }\n\n  type ErrorType = InvalidError | InvalidPrefixError | Errors.GlobalErrorType\n}\n\n/**\n * Compresses a {@link ox#PublicKey.PublicKey}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n *   prefix: 4,\n *   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n *   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const compressed = PublicKey.compress(publicKey) // [!code focus]\n * // @log: {\n * // @log:   prefix: 3,\n * // @log:   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: }\n * ```\n *\n * @param publicKey - The public key to compress.\n * @returns The compressed public key.\n */\nexport function compress(publicKey: PublicKey<false>): PublicKey<true> {\n  const { x, y } = publicKey\n  return {\n    prefix: y % 2n === 0n ? 2 : 3,\n    x,\n  }\n}\n\nexport declare namespace compress {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a typed {@link ox#PublicKey.PublicKey} object from a {@link ox#PublicKey.PublicKey}, {@link ox#Bytes.Bytes}, or {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n *   prefix: 4,\n *   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n *   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n * // @log: {\n * // @log:   prefix: 4,\n * // @log:   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log:   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from('0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5')\n * // @log: {\n * // @log:   prefix: 4,\n * // @log:   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log:   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @param value - The public key value to instantiate.\n * @returns The instantiated {@link ox#PublicKey.PublicKey}.\n */\nexport function from<\n  const publicKey extends\n    | CompressedPublicKey\n    | UncompressedPublicKey\n    | Hex.Hex\n    | Bytes.Bytes,\n>(value: from.Value<publicKey>): from.ReturnType<publicKey> {\n  const publicKey = (() => {\n    if (Hex.validate(value)) return fromHex(value)\n    if (Bytes.validate(value)) return fromBytes(value)\n\n    const { prefix, x, y } = value\n    if (typeof x === 'bigint' && typeof y === 'bigint')\n      return { prefix: prefix ?? 0x04, x, y }\n    return { prefix, x }\n  })()\n\n  assert(publicKey)\n\n  return publicKey as never\n}\n\n/** @internal */\ntype CompressedPublicKey = PublicKey<true>\n\n/** @internal */\ntype UncompressedPublicKey = Omit<PublicKey<false>, 'prefix'> & {\n  prefix?: PublicKey['prefix'] | undefined\n}\n\nexport declare namespace from {\n  type Value<\n    publicKey extends\n      | CompressedPublicKey\n      | UncompressedPublicKey\n      | Hex.Hex\n      | Bytes.Bytes = PublicKey,\n  > = publicKey | CompressedPublicKey | UncompressedPublicKey\n\n  type ReturnType<\n    publicKey extends\n      | CompressedPublicKey\n      | UncompressedPublicKey\n      | Hex.Hex\n      | Bytes.Bytes = PublicKey,\n  > = publicKey extends CompressedPublicKey | UncompressedPublicKey\n    ? publicKey extends UncompressedPublicKey\n      ? Compute<publicKey & { readonly prefix: 0x04 }>\n      : publicKey\n    : PublicKey\n\n  type ErrorType = assert.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#PublicKey.PublicKey} from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromBytes(new Uint8Array([128, 3, 131, ...]))\n * // @log: {\n * // @log:   prefix: 4,\n * // @log:   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log:   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @param publicKey - The serialized public key.\n * @returns The deserialized public key.\n */\nexport function fromBytes(publicKey: Bytes.Bytes): PublicKey {\n  return fromHex(Hex.fromBytes(publicKey))\n}\n\nexport declare namespace fromBytes {\n  type ErrorType =\n    | fromHex.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#PublicKey.PublicKey} from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromHex('0x8318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5')\n * // @log: {\n * // @log:   prefix: 4,\n * // @log:   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log:   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @example\n * ### Deserializing a Compressed Public Key\n *\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromHex('0x038318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed75')\n * // @log: {\n * // @log:   prefix: 3,\n * // @log:   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: }\n * ```\n *\n * @param publicKey - The serialized public key.\n * @returns The deserialized public key.\n */\nexport function fromHex(publicKey: Hex.Hex): PublicKey {\n  if (\n    publicKey.length !== 132 &&\n    publicKey.length !== 130 &&\n    publicKey.length !== 68\n  )\n    throw new InvalidSerializedSizeError({ publicKey })\n\n  if (publicKey.length === 130) {\n    const x = BigInt(Hex.slice(publicKey, 0, 32))\n    const y = BigInt(Hex.slice(publicKey, 32, 64))\n    return {\n      prefix: 4,\n      x,\n      y,\n    } as never\n  }\n\n  if (publicKey.length === 132) {\n    const prefix = Number(Hex.slice(publicKey, 0, 1))\n    const x = BigInt(Hex.slice(publicKey, 1, 33))\n    const y = BigInt(Hex.slice(publicKey, 33, 65))\n    return {\n      prefix,\n      x,\n      y,\n    } as never\n  }\n\n  const prefix = Number(Hex.slice(publicKey, 0, 1))\n  const x = BigInt(Hex.slice(publicKey, 1, 33))\n  return {\n    prefix,\n    x,\n  } as never\n}\n\nexport declare namespace fromHex {\n  type ErrorType = Hex.slice.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#PublicKey.PublicKey} to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n *   prefix: 4,\n *   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n *   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const bytes = PublicKey.toBytes(publicKey) // [!code focus]\n * // @log: Uint8Array [128, 3, 131, ...]\n * ```\n *\n * @param publicKey - The public key to serialize.\n * @returns The serialized public key.\n */\nexport function toBytes(\n  publicKey: PublicKey<boolean>,\n  options: toBytes.Options = {},\n): Bytes.Bytes {\n  return Bytes.fromHex(toHex(publicKey, options))\n}\n\nexport declare namespace toBytes {\n  type Options = {\n    /**\n     * Whether to include the prefix in the serialized public key.\n     * @default true\n     */\n    includePrefix?: boolean | undefined\n  }\n\n  type ErrorType =\n    | Hex.fromNumber.ErrorType\n    | Bytes.fromHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#PublicKey.PublicKey} to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n *   prefix: 4,\n *   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n *   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const hex = PublicKey.toHex(publicKey) // [!code focus]\n * // @log: '0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5'\n * ```\n *\n * @param publicKey - The public key to serialize.\n * @returns The serialized public key.\n */\nexport function toHex(\n  publicKey: PublicKey<boolean>,\n  options: toHex.Options = {},\n): Hex.Hex {\n  assert(publicKey)\n\n  const { prefix, x, y } = publicKey\n  const { includePrefix = true } = options\n\n  const publicKey_ = Hex.concat(\n    includePrefix ? Hex.fromNumber(prefix, { size: 1 }) : '0x',\n    Hex.fromNumber(x, { size: 32 }),\n    // If the public key is not compressed, add the y coordinate.\n    typeof y === 'bigint' ? Hex.fromNumber(y, { size: 32 }) : '0x',\n  )\n\n  return publicKey_\n}\n\nexport declare namespace toHex {\n  type Options = {\n    /**\n     * Whether to include the prefix in the serialized public key.\n     * @default true\n     */\n    includePrefix?: boolean | undefined\n  }\n\n  type ErrorType = Hex.fromNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Validates a {@link ox#PublicKey.PublicKey}. Returns `true` if valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const valid = PublicKey.validate({\n *   prefix: 4,\n *   y: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * })\n * // @log: false\n * ```\n *\n * @param publicKey - The public key object to assert.\n */\nexport function validate(\n  publicKey: ExactPartial<PublicKey>,\n  options: validate.Options = {},\n): boolean {\n  try {\n    assert(publicKey, options)\n    return true\n  } catch (_error) {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  type Options = {\n    /** Whether or not the public key should be compressed. */\n    compressed?: boolean\n  }\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Thrown when a public key is invalid.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * PublicKey.assert({ y: 1n })\n * // @error: PublicKey.InvalidError: Value `{\"y\":1n}` is not a valid public key.\n * // @error: Public key must contain:\n * // @error: - an `x` and `prefix` value (compressed)\n * // @error: - an `x`, `y`, and `prefix` value (uncompressed)\n * ```\n */\nexport class InvalidError extends Errors.BaseError {\n  override readonly name = 'PublicKey.InvalidError'\n\n  constructor({ publicKey }: { publicKey: unknown }) {\n    super(`Value \\`${Json.stringify(publicKey)}\\` is not a valid public key.`, {\n      metaMessages: [\n        'Public key must contain:',\n        '- an `x` and `prefix` value (compressed)',\n        '- an `x`, `y`, and `prefix` value (uncompressed)',\n      ],\n    })\n  }\n}\n\n/** Thrown when a public key has an invalid prefix. */\nexport class InvalidPrefixError<\n  cause extends InvalidCompressedPrefixError | InvalidUncompressedPrefixError =\n    | InvalidCompressedPrefixError\n    | InvalidUncompressedPrefixError,\n> extends Errors.BaseError<cause> {\n  override readonly name = 'PublicKey.InvalidPrefixError'\n\n  constructor({ prefix, cause }: { prefix: number | undefined; cause: cause }) {\n    super(`Prefix \"${prefix}\" is invalid.`, {\n      cause,\n    })\n  }\n}\n\n/** Thrown when the public key has an invalid prefix for a compressed public key. */\nexport class InvalidCompressedPrefixError extends Errors.BaseError {\n  override readonly name = 'PublicKey.InvalidCompressedPrefixError'\n\n  constructor() {\n    super('Prefix must be 2 or 3 for compressed public keys.')\n  }\n}\n\n/** Thrown when the public key has an invalid prefix for an uncompressed public key. */\nexport class InvalidUncompressedPrefixError extends Errors.BaseError {\n  override readonly name = 'PublicKey.InvalidUncompressedPrefixError'\n\n  constructor() {\n    super('Prefix must be 4 for uncompressed public keys.')\n  }\n}\n\n/** Thrown when the public key has an invalid serialized size. */\nexport class InvalidSerializedSizeError extends Errors.BaseError {\n  override readonly name = 'PublicKey.InvalidSerializedSizeError'\n\n  constructor({ publicKey }: { publicKey: Hex.Hex | Bytes.Bytes }) {\n    super(`Value \\`${publicKey}\\` is an invalid public key size.`, {\n      metaMessages: [\n        'Expected: 33 bytes (compressed + prefix), 64 bytes (uncompressed) or 65 bytes (uncompressed + prefix).',\n        `Received ${Hex.size(Hex.from(publicKey))} bytes.`,\n      ],\n    })\n  }\n}\n", "import type { Address as abitype_Address } from 'abitype'\nimport * as Bytes from './Bytes.js'\nimport * as Caches from './Caches.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as PublicKey from './PublicKey.js'\n\nconst addressRegex = /^0x[a-fA-F0-9]{40}$/\n\n/** Root type for Address. */\nexport type Address = abitype_Address\n\n/**\n * Asserts that the given value is a valid {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.assert('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.assert('0xdeadbeef')\n * // @error: InvalidAddressError: Address \"0xdeadbeef\" is invalid.\n * ```\n *\n * @param value - Value to assert if it is a valid address.\n * @param options - Assertion options.\n */\nexport function assert(\n  value: string,\n  options: assert.Options = {},\n): asserts value is Address {\n  const { strict = true } = options\n\n  if (!addressRegex.test(value))\n    throw new InvalidAddressError({\n      address: value,\n      cause: new InvalidInputError(),\n    })\n\n  if (strict) {\n    if (value.toLowerCase() === value) return\n    if (checksum(value as Address) !== value)\n      throw new InvalidAddressError({\n        address: value,\n        cause: new InvalidChecksumError(),\n      })\n  }\n}\n\nexport declare namespace assert {\n  type Options = {\n    /**\n     * Enables strict mode. Whether or not to compare the address against its checksum.\n     *\n     * @default true\n     */\n    strict?: boolean | undefined\n  }\n\n  type ErrorType = InvalidAddressError | Errors.GlobalErrorType\n}\n\n/**\n * Computes the checksum address for the given {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.checksum('0xa0cf798816d4b9b9866b5330eea46a18382f251e')\n * // @log: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * ```\n *\n * @param address - The address to compute the checksum for.\n * @returns The checksummed address.\n */\nexport function checksum(address: string): Address {\n  if (Caches.checksum.has(address)) return Caches.checksum.get(address)!\n\n  assert(address, { strict: false })\n\n  const hexAddress = address.substring(2).toLowerCase()\n  const hash = Hash.keccak256(Bytes.fromString(hexAddress), { as: 'Bytes' })\n\n  const characters = hexAddress.split('')\n  for (let i = 0; i < 40; i += 2) {\n    if (hash[i >> 1]! >> 4 >= 8 && characters[i]) {\n      characters[i] = characters[i]!.toUpperCase()\n    }\n    if ((hash[i >> 1]! & 0x0f) >= 8 && characters[i + 1]) {\n      characters[i + 1] = characters[i + 1]!.toUpperCase()\n    }\n  }\n\n  const result = `0x${characters.join('')}` as const\n  Caches.checksum.set(address, result)\n  return result\n}\n\nexport declare namespace checksum {\n  type ErrorType =\n    | assert.ErrorType\n    | Hash.keccak256.ErrorType\n    | Bytes.fromString.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Converts a stringified address to a typed (optionally checksummed) {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0xa0cf798816d4b9b9866b5330eea46a18382f251e')\n * // @log: '0xa0cf798816d4b9b9866b5330eea46a18382f251e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0xa0cf798816d4b9b9866b5330eea46a18382f251e', {\n *   checksum: true\n * })\n * // @log: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('hello')\n * // @error: InvalidAddressError: Address \"0xa\" is invalid.\n * ```\n *\n * @param address - An address string to convert to a typed Address.\n * @param options - Conversion options.\n * @returns The typed Address.\n */\nexport function from(address: string, options: from.Options = {}): Address {\n  const { checksum: checksumVal = false } = options\n  assert(address)\n  if (checksumVal) return checksum(address)\n  return address as Address\n}\n\nexport declare namespace from {\n  type Options = {\n    /**\n     * Whether to checksum the address.\n     *\n     * @default false\n     */\n    checksum?: boolean | undefined\n  }\n\n  type ErrorType =\n    | assert.ErrorType\n    | checksum.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Converts an ECDSA public key to an {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address, PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from(\n *   '0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5',\n * )\n * const address = Address.fromPublicKey(publicKey)\n * // @log: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266'\n * ```\n *\n * @param publicKey - The ECDSA public key to convert to an {@link ox#Address.Address}.\n * @param options - Conversion options.\n * @returns The {@link ox#Address.Address} corresponding to the public key.\n */\nexport function fromPublicKey(\n  publicKey: PublicKey.PublicKey,\n  options: fromPublicKey.Options = {},\n): Address {\n  const address = Hash.keccak256(\n    `0x${PublicKey.toHex(publicKey).slice(4)}`,\n  ).substring(26)\n  return from(`0x${address}`, options)\n}\n\nexport declare namespace fromPublicKey {\n  type Options = {\n    /**\n     * Whether to checksum the address.\n     *\n     * @default false\n     */\n    checksum?: boolean | undefined\n  }\n\n  type ErrorType =\n    | Hash.keccak256.ErrorType\n    | PublicKey.toHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Checks if two {@link ox#Address.Address} are equal.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.isEqual(\n *   '0xa0cf798816d4b9b9866b5330eea46a18382f251e',\n *   '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * )\n * // @log: true\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.isEqual(\n *   '0xa0cf798816d4b9b9866b5330eea46a18382f251e',\n *   '0xA0Cf798816D4b9b9866b5330EEa46a18382f251f'\n * )\n * // @log: false\n * ```\n *\n * @param addressA - The first address to compare.\n * @param addressB - The second address to compare.\n * @returns Whether the addresses are equal.\n */\nexport function isEqual(addressA: Address, addressB: Address): boolean {\n  assert(addressA, { strict: false })\n  assert(addressB, { strict: false })\n  return addressA.toLowerCase() === addressB.toLowerCase()\n}\n\nexport declare namespace isEqual {\n  type ErrorType = assert.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if the given address is a valid {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.validate('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')\n * // @log: true\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.validate('0xdeadbeef')\n * // @log: false\n * ```\n *\n * @param address - Value to check if it is a valid address.\n * @param options - Check options.\n * @returns Whether the address is a valid address.\n */\nexport function validate(\n  address: string,\n  options: validate.Options = {},\n): address is Address {\n  const { strict = true } = options ?? {}\n  try {\n    assert(address, { strict })\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  type Options = {\n    /**\n     * Enables strict mode. Whether or not to compare the address against its checksum.\n     *\n     * @default true\n     */\n    strict?: boolean | undefined\n  }\n}\n\n/**\n * Thrown when an address is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0x123')\n * // @error: Address.InvalidAddressError: Address `0x123` is invalid.\n * ```\n */\nexport class InvalidAddressError<\n  cause extends InvalidInputError | InvalidChecksumError =\n    | InvalidInputError\n    | InvalidChecksumError,\n> extends Errors.BaseError<cause> {\n  override readonly name = 'Address.InvalidAddressError'\n\n  constructor({ address, cause }: { address: string; cause: cause }) {\n    super(`Address \"${address}\" is invalid.`, {\n      cause,\n    })\n  }\n}\n\n/** Thrown when an address is not a 20 byte (40 hexadecimal character) value. */\nexport class InvalidInputError extends Errors.BaseError {\n  override readonly name = 'Address.InvalidInputError'\n\n  constructor() {\n    super('Address is not a 20 byte (40 hexadecimal character) value.')\n  }\n}\n\n/** Thrown when an address does not match its checksum counterpart. */\nexport class InvalidChecksumError extends Errors.BaseError {\n  override readonly name = 'Address.InvalidChecksumError'\n\n  constructor() {\n    super('Address does not match its checksum counterpart.')\n  }\n}\n", "export const arrayRegex = /^(.*)\\[([0-9]*)\\]$/\n\n// `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n// https://regexr.com/6va55\nexport const bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/\n\n// `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nexport const integerRegex =\n  /^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/\n\nexport const maxInt8 = 2n ** (8n - 1n) - 1n\nexport const maxInt16 = 2n ** (16n - 1n) - 1n\nexport const maxInt24 = 2n ** (24n - 1n) - 1n\nexport const maxInt32 = 2n ** (32n - 1n) - 1n\nexport const maxInt40 = 2n ** (40n - 1n) - 1n\nexport const maxInt48 = 2n ** (48n - 1n) - 1n\nexport const maxInt56 = 2n ** (56n - 1n) - 1n\nexport const maxInt64 = 2n ** (64n - 1n) - 1n\nexport const maxInt72 = 2n ** (72n - 1n) - 1n\nexport const maxInt80 = 2n ** (80n - 1n) - 1n\nexport const maxInt88 = 2n ** (88n - 1n) - 1n\nexport const maxInt96 = 2n ** (96n - 1n) - 1n\nexport const maxInt104 = 2n ** (104n - 1n) - 1n\nexport const maxInt112 = 2n ** (112n - 1n) - 1n\nexport const maxInt120 = 2n ** (120n - 1n) - 1n\nexport const maxInt128 = 2n ** (128n - 1n) - 1n\nexport const maxInt136 = 2n ** (136n - 1n) - 1n\nexport const maxInt144 = 2n ** (144n - 1n) - 1n\nexport const maxInt152 = 2n ** (152n - 1n) - 1n\nexport const maxInt160 = 2n ** (160n - 1n) - 1n\nexport const maxInt168 = 2n ** (168n - 1n) - 1n\nexport const maxInt176 = 2n ** (176n - 1n) - 1n\nexport const maxInt184 = 2n ** (184n - 1n) - 1n\nexport const maxInt192 = 2n ** (192n - 1n) - 1n\nexport const maxInt200 = 2n ** (200n - 1n) - 1n\nexport const maxInt208 = 2n ** (208n - 1n) - 1n\nexport const maxInt216 = 2n ** (216n - 1n) - 1n\nexport const maxInt224 = 2n ** (224n - 1n) - 1n\nexport const maxInt232 = 2n ** (232n - 1n) - 1n\nexport const maxInt240 = 2n ** (240n - 1n) - 1n\nexport const maxInt248 = 2n ** (248n - 1n) - 1n\nexport const maxInt256 = 2n ** (256n - 1n) - 1n\n\nexport const minInt8 = -(2n ** (8n - 1n))\nexport const minInt16 = -(2n ** (16n - 1n))\nexport const minInt24 = -(2n ** (24n - 1n))\nexport const minInt32 = -(2n ** (32n - 1n))\nexport const minInt40 = -(2n ** (40n - 1n))\nexport const minInt48 = -(2n ** (48n - 1n))\nexport const minInt56 = -(2n ** (56n - 1n))\nexport const minInt64 = -(2n ** (64n - 1n))\nexport const minInt72 = -(2n ** (72n - 1n))\nexport const minInt80 = -(2n ** (80n - 1n))\nexport const minInt88 = -(2n ** (88n - 1n))\nexport const minInt96 = -(2n ** (96n - 1n))\nexport const minInt104 = -(2n ** (104n - 1n))\nexport const minInt112 = -(2n ** (112n - 1n))\nexport const minInt120 = -(2n ** (120n - 1n))\nexport const minInt128 = -(2n ** (128n - 1n))\nexport const minInt136 = -(2n ** (136n - 1n))\nexport const minInt144 = -(2n ** (144n - 1n))\nexport const minInt152 = -(2n ** (152n - 1n))\nexport const minInt160 = -(2n ** (160n - 1n))\nexport const minInt168 = -(2n ** (168n - 1n))\nexport const minInt176 = -(2n ** (176n - 1n))\nexport const minInt184 = -(2n ** (184n - 1n))\nexport const minInt192 = -(2n ** (192n - 1n))\nexport const minInt200 = -(2n ** (200n - 1n))\nexport const minInt208 = -(2n ** (208n - 1n))\nexport const minInt216 = -(2n ** (216n - 1n))\nexport const minInt224 = -(2n ** (224n - 1n))\nexport const minInt232 = -(2n ** (232n - 1n))\nexport const minInt240 = -(2n ** (240n - 1n))\nexport const minInt248 = -(2n ** (248n - 1n))\nexport const minInt256 = -(2n ** (256n - 1n))\n\nexport const maxUint8 = 2n ** 8n - 1n\nexport const maxUint16 = 2n ** 16n - 1n\nexport const maxUint24 = 2n ** 24n - 1n\nexport const maxUint32 = 2n ** 32n - 1n\nexport const maxUint40 = 2n ** 40n - 1n\nexport const maxUint48 = 2n ** 48n - 1n\nexport const maxUint56 = 2n ** 56n - 1n\nexport const maxUint64 = 2n ** 64n - 1n\nexport const maxUint72 = 2n ** 72n - 1n\nexport const maxUint80 = 2n ** 80n - 1n\nexport const maxUint88 = 2n ** 88n - 1n\nexport const maxUint96 = 2n ** 96n - 1n\nexport const maxUint104 = 2n ** 104n - 1n\nexport const maxUint112 = 2n ** 112n - 1n\nexport const maxUint120 = 2n ** 120n - 1n\nexport const maxUint128 = 2n ** 128n - 1n\nexport const maxUint136 = 2n ** 136n - 1n\nexport const maxUint144 = 2n ** 144n - 1n\nexport const maxUint152 = 2n ** 152n - 1n\nexport const maxUint160 = 2n ** 160n - 1n\nexport const maxUint168 = 2n ** 168n - 1n\nexport const maxUint176 = 2n ** 176n - 1n\nexport const maxUint184 = 2n ** 184n - 1n\nexport const maxUint192 = 2n ** 192n - 1n\nexport const maxUint200 = 2n ** 200n - 1n\nexport const maxUint208 = 2n ** 208n - 1n\nexport const maxUint216 = 2n ** 216n - 1n\nexport const maxUint224 = 2n ** 224n - 1n\nexport const maxUint232 = 2n ** 232n - 1n\nexport const maxUint240 = 2n ** 240n - 1n\nexport const maxUint248 = 2n ** 248n - 1n\nexport const maxUint256 = 2n ** 256n - 1n\n", "import type {\n  AbiParameter,\n  AbiParameterKind,\n  AbiParametersToPrimitiveTypes,\n  AbiParameterToPrimitiveType,\n} from 'abitype'\nimport * as AbiParameters from '../AbiParameters.js'\nimport * as Address from '../Address.js'\nimport * as Bytes from '../Bytes.js'\nimport * as Errors from '../Errors.js'\nimport * as Hex from '../Hex.js'\nimport { integerRegex } from '../Solidity.js'\nimport type * as Cursor from './cursor.js'\nimport type { Compute, IsNarrowable, UnionToIntersection } from './types.js'\n\n/** @internal */\nexport type ParameterToPrimitiveType<\n  abiParameter extends AbiParameter | { name: string; type: unknown },\n  abiParameterKind extends AbiParameterKind = AbiParameterKind,\n> = AbiParameterToPrimitiveType<abiParameter, abiParameterKind>\n\n/** @internal */\nexport type PreparedParameter = { dynamic: boolean; encoded: Hex.Hex }\n\n/** @internal */\nexport type ToObject<\n  parameters extends readonly AbiParameter[],\n  kind extends AbiParameterKind = AbiParameterKind,\n> = IsNarrowable<parameters, AbiParameters.AbiParameters> extends true\n  ? Compute<\n      UnionToIntersection<\n        {\n          [index in keyof parameters]: parameters[index] extends {\n            name: infer name extends string\n          }\n            ? {\n                [key in name]: AbiParameterToPrimitiveType<\n                  parameters[index],\n                  kind\n                >\n              }\n            : {\n                [key in index]: AbiParameterToPrimitiveType<\n                  parameters[index],\n                  kind\n                >\n              }\n        }[number]\n      >\n    >\n  : unknown\n\n/** @internal */\nexport type ToPrimitiveTypes<\n  abiParameters extends readonly AbiParameter[],\n  abiParameterKind extends AbiParameterKind = AbiParameterKind,\n> = AbiParametersToPrimitiveTypes<abiParameters, abiParameterKind>\n\n/** @internal */\nexport type Tuple = ParameterToPrimitiveType<TupleAbiParameter>\n\n/** @internal */\nexport function decodeParameter(\n  cursor: Cursor.Cursor,\n  param: AbiParameters.Parameter,\n  options: { checksumAddress?: boolean | undefined; staticPosition: number },\n) {\n  const { checksumAddress, staticPosition } = options\n  const arrayComponents = getArrayComponents(param.type)\n  if (arrayComponents) {\n    const [length, type] = arrayComponents\n    return decodeArray(\n      cursor,\n      { ...param, type },\n      { checksumAddress, length, staticPosition },\n    )\n  }\n  if (param.type === 'tuple')\n    return decodeTuple(cursor, param as TupleAbiParameter, {\n      checksumAddress,\n      staticPosition,\n    })\n  if (param.type === 'address')\n    return decodeAddress(cursor, { checksum: checksumAddress })\n  if (param.type === 'bool') return decodeBool(cursor)\n  if (param.type.startsWith('bytes'))\n    return decodeBytes(cursor, param, { staticPosition })\n  if (param.type.startsWith('uint') || param.type.startsWith('int'))\n    return decodeNumber(cursor, param)\n  if (param.type === 'string') return decodeString(cursor, { staticPosition })\n  throw new AbiParameters.InvalidTypeError(param.type)\n}\n\nexport declare namespace decodeParameter {\n  type ErrorType =\n    | decodeArray.ErrorType\n    | decodeTuple.ErrorType\n    | decodeAddress.ErrorType\n    | decodeBool.ErrorType\n    | decodeBytes.ErrorType\n    | decodeNumber.ErrorType\n    | decodeString.ErrorType\n    | AbiParameters.InvalidTypeError\n    | Errors.GlobalErrorType\n}\n\nconst sizeOfLength = 32\nconst sizeOfOffset = 32\n\n/** @internal */\nexport function decodeAddress(\n  cursor: Cursor.Cursor,\n  options: { checksum?: boolean | undefined } = {},\n) {\n  const { checksum = false } = options\n  const value = cursor.readBytes(32)\n  const wrap = (address: Hex.Hex) =>\n    checksum ? Address.checksum(address) : address\n  return [wrap(Hex.fromBytes(Bytes.slice(value, -20))), 32]\n}\n\nexport declare namespace decodeAddress {\n  type ErrorType =\n    | Hex.fromBytes.ErrorType\n    | Bytes.slice.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeArray(\n  cursor: Cursor.Cursor,\n  param: AbiParameters.Parameter,\n  options: {\n    checksumAddress?: boolean | undefined\n    length: number | null\n    staticPosition: number\n  },\n) {\n  const { checksumAddress, length, staticPosition } = options\n\n  // If the length of the array is not known in advance (dynamic array),\n  // this means we will need to wonder off to the pointer and decode.\n  if (!length) {\n    // Dealing with a dynamic type, so get the offset of the array data.\n    const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset))\n\n    // Start is the static position of current slot + offset.\n    const start = staticPosition + offset\n    const startOfData = start + sizeOfLength\n\n    // Get the length of the array from the offset.\n    cursor.setPosition(start)\n    const length = Bytes.toNumber(cursor.readBytes(sizeOfLength))\n\n    // Check if the array has any dynamic children.\n    const dynamicChild = hasDynamicChild(param)\n\n    let consumed = 0\n    const value: unknown[] = []\n    for (let i = 0; i < length; ++i) {\n      // If any of the children is dynamic, then all elements will be offset pointer, thus size of one slot (32 bytes).\n      // Otherwise, elements will be the size of their encoding (consumed bytes).\n      cursor.setPosition(startOfData + (dynamicChild ? i * 32 : consumed))\n      const [data, consumed_] = decodeParameter(cursor, param, {\n        checksumAddress,\n        staticPosition: startOfData,\n      })\n      consumed += consumed_\n      value.push(data)\n    }\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [value, 32]\n  }\n\n  // If the length of the array is known in advance,\n  // and the length of an element deeply nested in the array is not known,\n  // we need to decode the offset of the array data.\n  if (hasDynamicChild(param)) {\n    // Dealing with dynamic types, so get the offset of the array data.\n    const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset))\n\n    // Start is the static position of current slot + offset.\n    const start = staticPosition + offset\n\n    const value: unknown[] = []\n    for (let i = 0; i < length; ++i) {\n      // Move cursor along to the next slot (next offset pointer).\n      cursor.setPosition(start + i * 32)\n      const [data] = decodeParameter(cursor, param, {\n        checksumAddress,\n        staticPosition: start,\n      })\n      value.push(data)\n    }\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [value, 32]\n  }\n\n  // If the length of the array is known in advance and the array is deeply static,\n  // then we can just decode each element in sequence.\n  let consumed = 0\n  const value: unknown[] = []\n  for (let i = 0; i < length; ++i) {\n    const [data, consumed_] = decodeParameter(cursor, param, {\n      checksumAddress,\n      staticPosition: staticPosition + consumed,\n    })\n    consumed += consumed_\n    value.push(data)\n  }\n  return [value, consumed]\n}\n\nexport declare namespace decodeArray {\n  type ErrorType = Bytes.toNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeBool(cursor: Cursor.Cursor) {\n  return [Bytes.toBoolean(cursor.readBytes(32), { size: 32 }), 32]\n}\n\nexport declare namespace decodeBool {\n  type ErrorType = Bytes.toBoolean.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeBytes(\n  cursor: Cursor.Cursor,\n  param: AbiParameters.Parameter,\n  { staticPosition }: { staticPosition: number },\n) {\n  const [_, size] = param.type.split('bytes')\n  if (!size) {\n    // Dealing with dynamic types, so get the offset of the bytes data.\n    const offset = Bytes.toNumber(cursor.readBytes(32))\n\n    // Set position of the cursor to start of bytes data.\n    cursor.setPosition(staticPosition + offset)\n\n    const length = Bytes.toNumber(cursor.readBytes(32))\n\n    // If there is no length, we have zero data.\n    if (length === 0) {\n      // As we have gone wondering, restore to the original position + next slot.\n      cursor.setPosition(staticPosition + 32)\n      return ['0x', 32]\n    }\n\n    const data = cursor.readBytes(length)\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [Hex.fromBytes(data), 32]\n  }\n\n  const value = Hex.fromBytes(cursor.readBytes(Number.parseInt(size, 10), 32))\n  return [value, 32]\n}\n\nexport declare namespace decodeBytes {\n  type ErrorType =\n    | Hex.fromBytes.ErrorType\n    | Bytes.toNumber.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeNumber(\n  cursor: Cursor.Cursor,\n  param: AbiParameters.Parameter,\n) {\n  const signed = param.type.startsWith('int')\n  const size = Number.parseInt(param.type.split('int')[1] || '256', 10)\n  const value = cursor.readBytes(32)\n  return [\n    size > 48\n      ? Bytes.toBigInt(value, { signed })\n      : Bytes.toNumber(value, { signed }),\n    32,\n  ]\n}\n\nexport declare namespace decodeNumber {\n  type ErrorType =\n    | Bytes.toNumber.ErrorType\n    | Bytes.toBigInt.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport type TupleAbiParameter = AbiParameters.Parameter & {\n  components: readonly AbiParameters.Parameter[]\n}\n\n/** @internal */\nexport function decodeTuple(\n  cursor: Cursor.Cursor,\n  param: TupleAbiParameter,\n  options: { checksumAddress?: boolean | undefined; staticPosition: number },\n) {\n  const { checksumAddress, staticPosition } = options\n\n  // Tuples can have unnamed components (i.e. they are arrays), so we must\n  // determine whether the tuple is named or unnamed. In the case of a named\n  // tuple, the value will be an object where each property is the name of the\n  // component. In the case of an unnamed tuple, the value will be an array.\n  const hasUnnamedChild =\n    param.components.length === 0 || param.components.some(({ name }) => !name)\n\n  // Initialize the value to an object or an array, depending on whether the\n  // tuple is named or unnamed.\n  const value: any = hasUnnamedChild ? [] : {}\n  let consumed = 0\n\n  // If the tuple has a dynamic child, we must first decode the offset to the\n  // tuple data.\n  if (hasDynamicChild(param)) {\n    // Dealing with dynamic types, so get the offset of the tuple data.\n    const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset))\n\n    // Start is the static position of referencing slot + offset.\n    const start = staticPosition + offset\n\n    for (let i = 0; i < param.components.length; ++i) {\n      const component = param.components[i]!\n      cursor.setPosition(start + consumed)\n      const [data, consumed_] = decodeParameter(cursor, component, {\n        checksumAddress,\n        staticPosition: start,\n      })\n      consumed += consumed_\n      value[hasUnnamedChild ? i : component?.name!] = data\n    }\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [value, 32]\n  }\n\n  // If the tuple has static children, we can just decode each component\n  // in sequence.\n  for (let i = 0; i < param.components.length; ++i) {\n    const component = param.components[i]!\n    const [data, consumed_] = decodeParameter(cursor, component, {\n      checksumAddress,\n      staticPosition,\n    })\n    value[hasUnnamedChild ? i : component?.name!] = data\n    consumed += consumed_\n  }\n  return [value, consumed]\n}\n\nexport declare namespace decodeTuple {\n  type ErrorType = Bytes.toNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeString(\n  cursor: Cursor.Cursor,\n  { staticPosition }: { staticPosition: number },\n) {\n  // Get offset to start of string data.\n  const offset = Bytes.toNumber(cursor.readBytes(32))\n\n  // Start is the static position of current slot + offset.\n  const start = staticPosition + offset\n  cursor.setPosition(start)\n\n  const length = Bytes.toNumber(cursor.readBytes(32))\n\n  // If there is no length, we have zero data (empty string).\n  if (length === 0) {\n    cursor.setPosition(staticPosition + 32)\n    return ['', 32]\n  }\n\n  const data = cursor.readBytes(length, 32)\n  const value = Bytes.toString(Bytes.trimLeft(data))\n\n  // As we have gone wondering, restore to the original position + next slot.\n  cursor.setPosition(staticPosition + 32)\n\n  return [value, 32]\n}\n\nexport declare namespace decodeString {\n  type ErrorType =\n    | Bytes.toNumber.ErrorType\n    | Bytes.toString.ErrorType\n    | Bytes.trimLeft.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function prepareParameters<\n  const parameters extends AbiParameters.AbiParameters,\n>({\n  checksumAddress,\n  parameters,\n  values,\n}: {\n  checksumAddress?: boolean | undefined\n  parameters: parameters\n  values: parameters extends AbiParameters.AbiParameters\n    ? ToPrimitiveTypes<parameters>\n    : never\n}) {\n  const preparedParameters: PreparedParameter[] = []\n  for (let i = 0; i < parameters.length; i++) {\n    preparedParameters.push(\n      prepareParameter({\n        checksumAddress,\n        parameter: parameters[i]!,\n        value: values[i],\n      }),\n    )\n  }\n  return preparedParameters\n}\n\n/** @internal */\nexport declare namespace prepareParameters {\n  type ErrorType = prepareParameter.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function prepareParameter<\n  const parameter extends AbiParameters.Parameter,\n>({\n  checksumAddress = false,\n  parameter: parameter_,\n  value,\n}: {\n  parameter: parameter\n  value: parameter extends AbiParameters.Parameter\n    ? ParameterToPrimitiveType<parameter>\n    : never\n  checksumAddress?: boolean | undefined\n}): PreparedParameter {\n  const parameter = parameter_ as AbiParameters.Parameter\n\n  const arrayComponents = getArrayComponents(parameter.type)\n  if (arrayComponents) {\n    const [length, type] = arrayComponents\n    return encodeArray(value, {\n      checksumAddress,\n      length,\n      parameter: {\n        ...parameter,\n        type,\n      },\n    })\n  }\n  if (parameter.type === 'tuple') {\n    return encodeTuple(value as unknown as Tuple, {\n      checksumAddress,\n      parameter: parameter as TupleAbiParameter,\n    })\n  }\n  if (parameter.type === 'address') {\n    return encodeAddress(value as unknown as Hex.Hex, {\n      checksum: checksumAddress,\n    })\n  }\n  if (parameter.type === 'bool') {\n    return encodeBoolean(value as unknown as boolean)\n  }\n  if (parameter.type.startsWith('uint') || parameter.type.startsWith('int')) {\n    const signed = parameter.type.startsWith('int')\n    const [, , size = '256'] = integerRegex.exec(parameter.type) ?? []\n    return encodeNumber(value as unknown as number, {\n      signed,\n      size: Number(size),\n    })\n  }\n  if (parameter.type.startsWith('bytes')) {\n    return encodeBytes(value as unknown as Hex.Hex, { type: parameter.type })\n  }\n  if (parameter.type === 'string') {\n    return encodeString(value as unknown as string)\n  }\n  throw new AbiParameters.InvalidTypeError(parameter.type)\n}\n\n/** @internal */\nexport declare namespace prepareParameter {\n  type ErrorType =\n    | encodeArray.ErrorType\n    | encodeTuple.ErrorType\n    | encodeAddress.ErrorType\n    | encodeBoolean.ErrorType\n    | encodeBytes.ErrorType\n    | encodeString.ErrorType\n    | AbiParameters.InvalidTypeError\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encode(preparedParameters: PreparedParameter[]): Hex.Hex {\n  // 1. Compute the size of the static part of the parameters.\n  let staticSize = 0\n  for (let i = 0; i < preparedParameters.length; i++) {\n    const { dynamic, encoded } = preparedParameters[i]!\n    if (dynamic) staticSize += 32\n    else staticSize += Hex.size(encoded)\n  }\n\n  // 2. Split the parameters into static and dynamic parts.\n  const staticParameters: Hex.Hex[] = []\n  const dynamicParameters: Hex.Hex[] = []\n  let dynamicSize = 0\n  for (let i = 0; i < preparedParameters.length; i++) {\n    const { dynamic, encoded } = preparedParameters[i]!\n    if (dynamic) {\n      staticParameters.push(\n        Hex.fromNumber(staticSize + dynamicSize, { size: 32 }),\n      )\n      dynamicParameters.push(encoded)\n      dynamicSize += Hex.size(encoded)\n    } else {\n      staticParameters.push(encoded)\n    }\n  }\n\n  // 3. Concatenate static and dynamic parts.\n  return Hex.concat(...staticParameters, ...dynamicParameters)\n}\n\n/** @internal */\nexport declare namespace encode {\n  type ErrorType =\n    | Hex.concat.ErrorType\n    | Hex.fromNumber.ErrorType\n    | Hex.size.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeAddress(\n  value: Hex.Hex,\n  options: { checksum: boolean },\n): PreparedParameter {\n  const { checksum = false } = options\n  Address.assert(value, { strict: checksum })\n  return {\n    dynamic: false,\n    encoded: Hex.padLeft(value.toLowerCase() as Hex.Hex),\n  }\n}\n\n/** @internal */\nexport declare namespace encodeAddress {\n  type ErrorType =\n    | Address.assert.ErrorType\n    | Hex.padLeft.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeArray<const parameter extends AbiParameters.Parameter>(\n  value: ParameterToPrimitiveType<parameter>,\n  options: {\n    checksumAddress?: boolean | undefined\n    length: number | null\n    parameter: parameter\n  },\n): PreparedParameter {\n  const { checksumAddress, length, parameter } = options\n\n  const dynamic = length === null\n\n  if (!Array.isArray(value)) throw new AbiParameters.InvalidArrayError(value)\n  if (!dynamic && value.length !== length)\n    throw new AbiParameters.ArrayLengthMismatchError({\n      expectedLength: length!,\n      givenLength: value.length,\n      type: `${parameter.type}[${length}]`,\n    })\n\n  let dynamicChild = false\n  const preparedParameters: PreparedParameter[] = []\n  for (let i = 0; i < value.length; i++) {\n    const preparedParam = prepareParameter({\n      checksumAddress,\n      parameter,\n      value: value[i],\n    })\n    if (preparedParam.dynamic) dynamicChild = true\n    preparedParameters.push(preparedParam)\n  }\n\n  if (dynamic || dynamicChild) {\n    const data = encode(preparedParameters)\n    if (dynamic) {\n      const length = Hex.fromNumber(preparedParameters.length, { size: 32 })\n      return {\n        dynamic: true,\n        encoded:\n          preparedParameters.length > 0 ? Hex.concat(length, data) : length,\n      }\n    }\n    if (dynamicChild) return { dynamic: true, encoded: data }\n  }\n  return {\n    dynamic: false,\n    encoded: Hex.concat(...preparedParameters.map(({ encoded }) => encoded)),\n  }\n}\n\n/** @internal */\nexport declare namespace encodeArray {\n  type ErrorType =\n    | AbiParameters.InvalidArrayError\n    | AbiParameters.ArrayLengthMismatchError\n    | Hex.concat.ErrorType\n    | Hex.fromNumber.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeBytes(\n  value: Hex.Hex,\n  { type }: { type: string },\n): PreparedParameter {\n  const [, parametersize] = type.split('bytes')\n  const bytesSize = Hex.size(value)\n  if (!parametersize) {\n    let value_ = value\n    // If the size is not divisible by 32 bytes, pad the end\n    // with empty bytes to the ceiling 32 bytes.\n    if (bytesSize % 32 !== 0)\n      value_ = Hex.padRight(value_, Math.ceil((value.length - 2) / 2 / 32) * 32)\n    return {\n      dynamic: true,\n      encoded: Hex.concat(\n        Hex.padLeft(Hex.fromNumber(bytesSize, { size: 32 })),\n        value_,\n      ),\n    }\n  }\n  if (bytesSize !== Number.parseInt(parametersize, 10))\n    throw new AbiParameters.BytesSizeMismatchError({\n      expectedSize: Number.parseInt(parametersize, 10),\n      value,\n    })\n  return { dynamic: false, encoded: Hex.padRight(value) }\n}\n\n/** @internal */\nexport declare namespace encodeBytes {\n  type ErrorType =\n    | Hex.padLeft.ErrorType\n    | Hex.padRight.ErrorType\n    | Hex.fromNumber.ErrorType\n    | Hex.slice.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeBoolean(value: boolean): PreparedParameter {\n  if (typeof value !== 'boolean')\n    throw new Errors.BaseError(\n      `Invalid boolean value: \"${value}\" (type: ${typeof value}). Expected: \\`true\\` or \\`false\\`.`,\n    )\n  return { dynamic: false, encoded: Hex.padLeft(Hex.fromBoolean(value)) }\n}\n\n/** @internal */\nexport declare namespace encodeBoolean {\n  type ErrorType =\n    | Hex.padLeft.ErrorType\n    | Hex.fromBoolean.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeNumber(\n  value: number,\n  { signed, size }: { signed: boolean; size: number },\n): PreparedParameter {\n  if (typeof size === 'number') {\n    const max = 2n ** (BigInt(size) - (signed ? 1n : 0n)) - 1n\n    const min = signed ? -max - 1n : 0n\n    if (value > max || value < min)\n      throw new Hex.IntegerOutOfRangeError({\n        max: max.toString(),\n        min: min.toString(),\n        signed,\n        size: size / 8,\n        value: value.toString(),\n      })\n  }\n  return {\n    dynamic: false,\n    encoded: Hex.fromNumber(value, {\n      size: 32,\n      signed,\n    }),\n  }\n}\n\n/** @internal */\nexport declare namespace encodeNumber {\n  type ErrorType = Hex.fromNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeString(value: string): PreparedParameter {\n  const hexValue = Hex.fromString(value)\n  const partsLength = Math.ceil(Hex.size(hexValue) / 32)\n  const parts: Hex.Hex[] = []\n  for (let i = 0; i < partsLength; i++) {\n    parts.push(Hex.padRight(Hex.slice(hexValue, i * 32, (i + 1) * 32)))\n  }\n  return {\n    dynamic: true,\n    encoded: Hex.concat(\n      Hex.padRight(Hex.fromNumber(Hex.size(hexValue), { size: 32 })),\n      ...parts,\n    ),\n  }\n}\n\n/** @internal */\nexport declare namespace encodeString {\n  type ErrorType =\n    | Hex.fromNumber.ErrorType\n    | Hex.padRight.ErrorType\n    | Hex.slice.ErrorType\n    | Hex.size.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeTuple<\n  const parameter extends AbiParameters.Parameter & {\n    components: readonly AbiParameters.Parameter[]\n  },\n>(\n  value: ParameterToPrimitiveType<parameter>,\n  options: {\n    checksumAddress?: boolean | undefined\n    parameter: parameter\n  },\n): PreparedParameter {\n  const { checksumAddress, parameter } = options\n\n  let dynamic = false\n  const preparedParameters: PreparedParameter[] = []\n  for (let i = 0; i < parameter.components.length; i++) {\n    const param_ = parameter.components[i]!\n    const index = Array.isArray(value) ? i : param_.name\n    const preparedParam = prepareParameter({\n      checksumAddress,\n      parameter: param_,\n      value: (value as any)[index!] as readonly unknown[],\n    })\n    preparedParameters.push(preparedParam)\n    if (preparedParam.dynamic) dynamic = true\n  }\n  return {\n    dynamic,\n    encoded: dynamic\n      ? encode(preparedParameters)\n      : Hex.concat(...preparedParameters.map(({ encoded }) => encoded)),\n  }\n}\n\n/** @internal */\nexport declare namespace encodeTuple {\n  type ErrorType = Hex.concat.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function getArrayComponents(\n  type: string,\n): [length: number | null, innerType: string] | undefined {\n  const matches = type.match(/^(.*)\\[(\\d+)?\\]$/)\n  return matches\n    ? // Return `null` if the array is dynamic.\n      [matches[2]! ? Number(matches[2]!) : null, matches[1]!]\n    : undefined\n}\n\n/** @internal */\nexport function hasDynamicChild(param: AbiParameters.Parameter) {\n  const { type } = param\n  if (type === 'string') return true\n  if (type === 'bytes') return true\n  if (type.endsWith('[]')) return true\n\n  if (type === 'tuple') return (param as any).components?.some(hasDynamicChild)\n\n  const arrayComponents = getArrayComponents(param.type)\n  if (\n    arrayComponents &&\n    hasDynamicChild({\n      ...param,\n      type: arrayComponents[1],\n    } as AbiParameters.Parameter)\n  )\n    return true\n\n  return false\n}\n", "import type { Bytes } from '../Bytes.js'\nimport * as Errors from '../Errors.js'\n\n/** @internal */\nexport type Cursor = {\n  bytes: Bytes\n  dataView: DataView\n  position: number\n  positionReadCount: Map<number, number>\n  recursiveReadCount: number\n  recursiveReadLimit: number\n  remaining: number\n  assertReadLimit(position?: number): void\n  assertPosition(position: number): void\n  decrementPosition(offset: number): void\n  getReadCount(position?: number): number\n  incrementPosition(offset: number): void\n  inspectByte(position?: number): Bytes[number]\n  inspectBytes(length: number, position?: number): Bytes\n  inspectUint8(position?: number): number\n  inspectUint16(position?: number): number\n  inspectUint24(position?: number): number\n  inspectUint32(position?: number): number\n  pushByte(byte: Bytes[number]): void\n  pushBytes(bytes: Bytes): void\n  pushUint8(value: number): void\n  pushUint16(value: number): void\n  pushUint24(value: number): void\n  pushUint32(value: number): void\n  readByte(): Bytes[number]\n  readBytes(length: number, size?: number): Bytes\n  readUint8(): number\n  readUint16(): number\n  readUint24(): number\n  readUint32(): number\n  setPosition(position: number): () => void\n  _touch(): void\n}\n\nconst staticCursor: Cursor = {\n  bytes: new Uint8Array(),\n  dataView: new DataView(new ArrayBuffer(0)),\n  position: 0,\n  positionReadCount: new Map(),\n  recursiveReadCount: 0,\n  recursiveReadLimit: Number.POSITIVE_INFINITY,\n  assertReadLimit() {\n    if (this.recursiveReadCount >= this.recursiveReadLimit)\n      throw new RecursiveReadLimitExceededError({\n        count: this.recursiveReadCount + 1,\n        limit: this.recursiveReadLimit,\n      })\n  },\n  assertPosition(position) {\n    if (position < 0 || position > this.bytes.length - 1)\n      throw new PositionOutOfBoundsError({\n        length: this.bytes.length,\n        position,\n      })\n  },\n  decrementPosition(offset) {\n    if (offset < 0) throw new NegativeOffsetError({ offset })\n    const position = this.position - offset\n    this.assertPosition(position)\n    this.position = position\n  },\n  getReadCount(position) {\n    return this.positionReadCount.get(position || this.position) || 0\n  },\n  incrementPosition(offset) {\n    if (offset < 0) throw new NegativeOffsetError({ offset })\n    const position = this.position + offset\n    this.assertPosition(position)\n    this.position = position\n  },\n  inspectByte(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position)\n    return this.bytes[position]!\n  },\n  inspectBytes(length, position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + length - 1)\n    return this.bytes.subarray(position, position + length)\n  },\n  inspectUint8(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position)\n    return this.bytes[position]!\n  },\n  inspectUint16(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + 1)\n    return this.dataView.getUint16(position)\n  },\n  inspectUint24(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + 2)\n    return (\n      (this.dataView.getUint16(position) << 8) +\n      this.dataView.getUint8(position + 2)\n    )\n  },\n  inspectUint32(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + 3)\n    return this.dataView.getUint32(position)\n  },\n  pushByte(byte: Bytes[number]) {\n    this.assertPosition(this.position)\n    this.bytes[this.position] = byte\n    this.position++\n  },\n  pushBytes(bytes: Bytes) {\n    this.assertPosition(this.position + bytes.length - 1)\n    this.bytes.set(bytes, this.position)\n    this.position += bytes.length\n  },\n  pushUint8(value: number) {\n    this.assertPosition(this.position)\n    this.bytes[this.position] = value\n    this.position++\n  },\n  pushUint16(value: number) {\n    this.assertPosition(this.position + 1)\n    this.dataView.setUint16(this.position, value)\n    this.position += 2\n  },\n  pushUint24(value: number) {\n    this.assertPosition(this.position + 2)\n    this.dataView.setUint16(this.position, value >> 8)\n    this.dataView.setUint8(this.position + 2, value & ~4294967040)\n    this.position += 3\n  },\n  pushUint32(value: number) {\n    this.assertPosition(this.position + 3)\n    this.dataView.setUint32(this.position, value)\n    this.position += 4\n  },\n  readByte() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectByte()\n    this.position++\n    return value\n  },\n  readBytes(length, size) {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectBytes(length)\n    this.position += size ?? length\n    return value\n  },\n  readUint8() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint8()\n    this.position += 1\n    return value\n  },\n  readUint16() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint16()\n    this.position += 2\n    return value\n  },\n  readUint24() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint24()\n    this.position += 3\n    return value\n  },\n  readUint32() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint32()\n    this.position += 4\n    return value\n  },\n  get remaining() {\n    return this.bytes.length - this.position\n  },\n  setPosition(position) {\n    const oldPosition = this.position\n    this.assertPosition(position)\n    this.position = position\n    return () => (this.position = oldPosition)\n  },\n  _touch() {\n    if (this.recursiveReadLimit === Number.POSITIVE_INFINITY) return\n    const count = this.getReadCount()\n    this.positionReadCount.set(this.position, count + 1)\n    if (count > 0) this.recursiveReadCount++\n  },\n}\n\n/** @internal */\nexport function create(\n  bytes: Bytes,\n  { recursiveReadLimit = 8_192 }: create.Config = {},\n): Cursor {\n  const cursor: Cursor = Object.create(staticCursor)\n  cursor.bytes = bytes\n  cursor.dataView = new DataView(\n    bytes.buffer,\n    bytes.byteOffset,\n    bytes.byteLength,\n  )\n  cursor.positionReadCount = new Map()\n  cursor.recursiveReadLimit = recursiveReadLimit\n  return cursor\n}\n\n/** @internal */\nexport declare namespace create {\n  type Config = { recursiveReadLimit?: number | undefined }\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/** @internal */\nexport class NegativeOffsetError extends Errors.BaseError {\n  override readonly name = 'Cursor.NegativeOffsetError'\n\n  constructor({ offset }: { offset: number }) {\n    super(`Offset \\`${offset}\\` cannot be negative.`)\n  }\n}\n\n/** @internal */\nexport class PositionOutOfBoundsError extends Errors.BaseError {\n  override readonly name = 'Cursor.PositionOutOfBoundsError'\n\n  constructor({ length, position }: { length: number; position: number }) {\n    super(\n      `Position \\`${position}\\` is out of bounds (\\`0 < position < ${length}\\`).`,\n    )\n  }\n}\n\n/** @internal */\nexport class RecursiveReadLimitExceededError extends Errors.BaseError {\n  override readonly name = 'Cursor.RecursiveReadLimitExceededError'\n\n  constructor({ count, limit }: { count: number; limit: number }) {\n    super(\n      `Recursive read limit of \\`${limit}\\` exceeded (recursive read count: \\`${count}\\`).`,\n    )\n  }\n}\n", "import * as abitype from 'abitype'\nimport * as Address from './Address.js'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as internal from './internal/abiParameters.js'\nimport * as Cursor from './internal/cursor.js'\nimport * as Solidity from './Solidity.js'\n\n/** Root type for ABI parameters. */\nexport type AbiParameters = readonly abitype.AbiParameter[]\n\n/** A parameter on an {@link ox#AbiParameters.AbiParameters}. */\nexport type Parameter = abitype.AbiParameter\n\n/** A packed ABI type. */\nexport type PackedAbiType =\n  | abitype.SolidityAddress\n  | abitype.SolidityBool\n  | abitype.SolidityBytes\n  | abitype.SolidityInt\n  | abitype.SolidityString\n  | abitype.SolidityArrayWithoutTuple\n\n/**\n * Decodes ABI-encoded data into its respective primitive values based on ABI Parameters.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.decode(\n *   AbiParameters.from(['string', 'uint', 'bool']),\n *   '0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',\n * )\n * // @log: ['wagmi', 420n, true]\n * ```\n *\n * @example\n * ### JSON Parameters\n *\n * You can pass **JSON ABI** Parameters:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.decode(\n *   [\n *     { name: 'x', type: 'string' },\n *     { name: 'y', type: 'uint' },\n *     { name: 'z', type: 'bool' },\n *   ],\n *   '0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',\n * )\n * // @log: ['wagmi', 420n, true]\n * ```\n *\n * @param parameters - The set of ABI parameters to decode, in the shape of the `inputs` or `outputs` attribute of an ABI Item. These parameters must include valid [ABI types](https://docs.soliditylang.org/en/latest/types.html).\n * @param data - ABI encoded data.\n * @param options - Decoding options.\n * @returns Array of decoded values.\n */\nexport function decode<\n  const parameters extends AbiParameters,\n  as extends 'Object' | 'Array' = 'Array',\n>(\n  parameters: parameters,\n  data: Bytes.Bytes | Hex.Hex,\n  options?: decode.Options<as>,\n): decode.ReturnType<parameters, as>\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decode(\n  parameters: AbiParameters,\n  data: Bytes.Bytes | Hex.Hex,\n  options: {\n    as?: 'Array' | 'Object' | undefined\n    checksumAddress?: boolean | undefined\n  } = {},\n): readonly unknown[] | Record<string, unknown> {\n  const { as = 'Array', checksumAddress = false } = options\n\n  const bytes = typeof data === 'string' ? Bytes.fromHex(data) : data\n  const cursor = Cursor.create(bytes)\n\n  if (Bytes.size(bytes) === 0 && parameters.length > 0)\n    throw new ZeroDataError()\n  if (Bytes.size(bytes) && Bytes.size(bytes) < 32)\n    throw new DataSizeTooSmallError({\n      data: typeof data === 'string' ? data : Hex.fromBytes(data),\n      parameters: parameters as readonly Parameter[],\n      size: Bytes.size(bytes),\n    })\n\n  let consumed = 0\n  const values: any = as === 'Array' ? [] : {}\n  for (let i = 0; i < parameters.length; ++i) {\n    const param = parameters[i] as Parameter\n    cursor.setPosition(consumed)\n    const [data, consumed_] = internal.decodeParameter(cursor, param, {\n      checksumAddress,\n      staticPosition: 0,\n    })\n    consumed += consumed_\n    if (as === 'Array') values.push(data)\n    else values[param.name ?? i] = data\n  }\n  return values\n}\n\nexport declare namespace decode {\n  type Options<as extends 'Object' | 'Array'> = {\n    /**\n     * Whether the decoded values should be returned as an `Object` or `Array`.\n     *\n     * @default \"Array\"\n     */\n    as?: as | 'Object' | 'Array' | undefined\n    /**\n     * Whether decoded addresses should be checksummed.\n     *\n     * @default false\n     */\n    checksumAddress?: boolean | undefined\n  }\n\n  type ReturnType<\n    parameters extends AbiParameters = AbiParameters,\n    as extends 'Object' | 'Array' = 'Array',\n  > = parameters extends readonly []\n    ? as extends 'Object'\n      ? {}\n      : []\n    : as extends 'Object'\n      ? internal.ToObject<parameters>\n      : internal.ToPrimitiveTypes<parameters>\n\n  type ErrorType =\n    | Bytes.fromHex.ErrorType\n    | internal.decodeParameter.ErrorType\n    | ZeroDataError\n    | DataSizeTooSmallError\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes primitive values into ABI encoded data as per the [Application Binary Interface (ABI) Specification](https://docs.soliditylang.org/en/latest/abi-spec).\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.encode(\n *   AbiParameters.from(['string', 'uint', 'bool']),\n *   ['wagmi', 420n, true],\n * )\n * ```\n *\n * @example\n * ### JSON Parameters\n *\n * Specify **JSON ABI** Parameters as schema:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.encode(\n *   [\n *     { type: 'string', name: 'name' },\n *     { type: 'uint', name: 'age' },\n *     { type: 'bool', name: 'isOwner' },\n *   ],\n *   ['wagmi', 420n, true],\n * )\n * ```\n *\n * @param parameters - The set of ABI parameters to encode, in the shape of the `inputs` or `outputs` attribute of an ABI Item. These parameters must include valid [ABI types](https://docs.soliditylang.org/en/latest/types.html).\n * @param values - The set of primitive values that correspond to the ABI types defined in `parameters`.\n * @returns ABI encoded data.\n */\nexport function encode<\n  const parameters extends AbiParameters | readonly unknown[],\n>(\n  parameters: parameters,\n  values: parameters extends AbiParameters\n    ? internal.ToPrimitiveTypes<parameters>\n    : never,\n  options?: encode.Options,\n): Hex.Hex {\n  const { checksumAddress = false } = options ?? {}\n\n  if (parameters.length !== values.length)\n    throw new LengthMismatchError({\n      expectedLength: parameters.length as number,\n      givenLength: values.length as any,\n    })\n  // Prepare the parameters to determine dynamic types to encode.\n  const preparedParameters = internal.prepareParameters({\n    checksumAddress,\n    parameters: parameters as readonly Parameter[],\n    values: values as any,\n  })\n  const data = internal.encode(preparedParameters)\n  if (data.length === 0) return '0x'\n  return data\n}\n\nexport declare namespace encode {\n  type ErrorType =\n    | LengthMismatchError\n    | internal.encode.ErrorType\n    | internal.prepareParameters.ErrorType\n    | Errors.GlobalErrorType\n\n  type Options = {\n    /**\n     * Whether addresses should be checked against their checksum.\n     *\n     * @default false\n     */\n    checksumAddress?: boolean | undefined\n  }\n}\n\n/**\n * Encodes an array of primitive values to a [packed ABI encoding](https://docs.soliditylang.org/en/latest/abi-spec.html#non-standard-packed-mode).\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const encoded = AbiParameters.encodePacked(\n *   ['address', 'string'],\n *   ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 'hello world'],\n * )\n * // @log: '0xd8da6bf26964af9d7eed9e03e53415d37aa9604568656c6c6f20776f726c64'\n * ```\n *\n * @param types - Set of ABI types to pack encode.\n * @param values - The set of primitive values that correspond to the ABI types defined in `types`.\n * @returns The encoded packed data.\n */\nexport function encodePacked<\n  const packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n>(types: packedAbiTypes, values: encodePacked.Values<packedAbiTypes>): Hex.Hex {\n  if (types.length !== values.length)\n    throw new LengthMismatchError({\n      expectedLength: types.length as number,\n      givenLength: values.length as number,\n    })\n\n  const data: Hex.Hex[] = []\n  for (let i = 0; i < (types as unknown[]).length; i++) {\n    const type = types[i]\n    const value = values[i]\n    data.push(encodePacked.encode(type, value))\n  }\n  return Hex.concat(...data)\n}\n\nexport namespace encodePacked {\n  export type ErrorType =\n    | Hex.concat.ErrorType\n    | LengthMismatchError\n    | Errors.GlobalErrorType\n\n  export type Values<\n    packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n  > = {\n    [key in keyof packedAbiTypes]: packedAbiTypes[key] extends abitype.AbiType\n      ? abitype.AbiParameterToPrimitiveType<{ type: packedAbiTypes[key] }>\n      : unknown\n  }\n\n  // eslint-disable-next-line jsdoc/require-jsdoc\n  export function encode<const packedAbiType extends PackedAbiType | unknown>(\n    type: packedAbiType,\n    value: Values<[packedAbiType]>[0],\n    isArray = false,\n  ): Hex.Hex {\n    if (type === 'address') {\n      const address = value as Address.Address\n      Address.assert(address)\n      return Hex.padLeft(\n        address.toLowerCase() as Hex.Hex,\n        isArray ? 32 : 0,\n      ) as Address.Address\n    }\n    if (type === 'string') return Hex.fromString(value as string)\n    if (type === 'bytes') return value as Hex.Hex\n    if (type === 'bool')\n      return Hex.padLeft(Hex.fromBoolean(value as boolean), isArray ? 32 : 1)\n\n    const intMatch = (type as string).match(Solidity.integerRegex)\n    if (intMatch) {\n      const [_type, baseType, bits = '256'] = intMatch\n      const size = Number.parseInt(bits, 10) / 8\n      return Hex.fromNumber(value as number, {\n        size: isArray ? 32 : size,\n        signed: baseType === 'int',\n      })\n    }\n\n    const bytesMatch = (type as string).match(Solidity.bytesRegex)\n    if (bytesMatch) {\n      const [_type, size] = bytesMatch\n      if (Number.parseInt(size!, 10) !== ((value as Hex.Hex).length - 2) / 2)\n        throw new BytesSizeMismatchError({\n          expectedSize: Number.parseInt(size!, 10),\n          value: value as Hex.Hex,\n        })\n      return Hex.padRight(value as Hex.Hex, isArray ? 32 : 0) as Hex.Hex\n    }\n\n    const arrayMatch = (type as string).match(Solidity.arrayRegex)\n    if (arrayMatch && Array.isArray(value)) {\n      const [_type, childType] = arrayMatch\n      const data: Hex.Hex[] = []\n      for (let i = 0; i < value.length; i++) {\n        data.push(encode(childType, value[i], true))\n      }\n      if (data.length === 0) return '0x'\n      return Hex.concat(...data)\n    }\n\n    throw new InvalidTypeError(type as string)\n  }\n}\n\n/**\n * Formats {@link ox#AbiParameters.AbiParameters} into **Human Readable ABI Parameters**.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const formatted = AbiParameters.format([\n *   {\n *     name: 'spender',\n *     type: 'address',\n *   },\n *   {\n *     name: 'amount',\n *     type: 'uint256',\n *   },\n * ])\n *\n * formatted\n * //    ^?\n *\n *\n * ```\n *\n * @param parameters - The ABI Parameters to format.\n * @returns The formatted ABI Parameters  .\n */\nexport function format<\n  const parameters extends readonly [\n    Parameter | abitype.AbiEventParameter,\n    ...(readonly (Parameter | abitype.AbiEventParameter)[]),\n  ],\n>(\n  parameters:\n    | parameters\n    | readonly [\n        Parameter | abitype.AbiEventParameter,\n        ...(readonly (Parameter | abitype.AbiEventParameter)[]),\n      ],\n): abitype.FormatAbiParameters<parameters> {\n  return abitype.formatAbiParameters(parameters)\n}\n\nexport declare namespace format {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses arbitrary **JSON ABI Parameters** or **Human Readable ABI Parameters** into typed {@link ox#AbiParameters.AbiParameters}.\n *\n * @example\n * ### JSON Parameters\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from([\n *   {\n *     name: 'spender',\n *     type: 'address',\n *   },\n *   {\n *     name: 'amount',\n *     type: 'uint256',\n *   },\n * ])\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable Parameters\n *\n * Human Readable ABI Parameters can be parsed into a typed {@link ox#AbiParameters.AbiParameters}:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from('address spender, uint256 amount')\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from([\n *   'struct Foo { address spender; uint256 amount; }', // [!code hl]\n *   'Foo foo, address bar',\n * ])\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param parameters - The ABI Parameters to parse.\n * @returns The typed ABI Parameters.\n */\nexport function from<\n  const parameters extends AbiParameters | string | readonly string[],\n>(\n  parameters: parameters | AbiParameters | string | readonly string[],\n): from.ReturnType<parameters> {\n  if (Array.isArray(parameters) && typeof parameters[0] === 'string')\n    return abitype.parseAbiParameters(parameters) as never\n  if (typeof parameters === 'string')\n    return abitype.parseAbiParameters(parameters) as never\n  return parameters as never\n}\n\nexport declare namespace from {\n  type ReturnType<\n    parameters extends AbiParameters | string | readonly string[],\n  > = parameters extends string\n    ? abitype.ParseAbiParameters<parameters>\n    : parameters extends readonly string[]\n      ? abitype.ParseAbiParameters<parameters>\n      : parameters\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Throws when the data size is too small for the given parameters.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x010f')\n * //                                             \u2191 \u274C 2 bytes\n * // @error: AbiParameters.DataSizeTooSmallError: Data size of 2 bytes is too small for given parameters.\n * // @error: Params: (uint256)\n * // @error: Data:   0x010f (2 bytes)\n * ```\n *\n * ### Solution\n *\n * Pass a valid data size.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * //                                             \u2191 \u2705 32 bytes\n * ```\n */\nexport class DataSizeTooSmallError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.DataSizeTooSmallError'\n  constructor({\n    data,\n    parameters,\n    size,\n  }: { data: Hex.Hex; parameters: readonly Parameter[]; size: number }) {\n    super(`Data size of ${size} bytes is too small for given parameters.`, {\n      metaMessages: [\n        `Params: (${abitype.formatAbiParameters(parameters as readonly [Parameter])})`,\n        `Data:   ${data} (${size} bytes)`,\n      ],\n    })\n  }\n}\n\n/**\n * Throws when zero data is provided, but data is expected.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x')\n * //                                           \u2191 \u274C zero data\n * // @error: AbiParameters.DataSizeTooSmallError: Data size of 2 bytes is too small for given parameters.\n * // @error: Params: (uint256)\n * // @error: Data:   0x010f (2 bytes)\n * ```\n *\n * ### Solution\n *\n * Pass valid data.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * //                                             \u2191 \u2705 32 bytes\n * ```\n */\nexport class ZeroDataError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.ZeroDataError'\n  constructor() {\n    super('Cannot decode zero data (\"0x\") with ABI parameters.')\n  }\n}\n\n/**\n * The length of the array value does not match the length specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from('uint256[3]'), [[69n, 420n]])\n * //                                               \u2191 expected: 3  \u2191 \u274C length: 2\n * // @error: AbiParameters.ArrayLengthMismatchError: ABI encoding array length mismatch\n * // @error: for type `uint256[3]`. Expected: `3`. Given: `2`.\n * ```\n *\n * ### Solution\n *\n * Pass an array of the correct length.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['uint256[3]']), [[69n, 420n, 69n]])\n * //                                                         \u2191 \u2705 length: 3\n * ```\n */\nexport class ArrayLengthMismatchError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.ArrayLengthMismatchError'\n  constructor({\n    expectedLength,\n    givenLength,\n    type,\n  }: { expectedLength: number; givenLength: number; type: string }) {\n    super(\n      `Array length mismatch for type \\`${type}\\`. Expected: \\`${expectedLength}\\`. Given: \\`${givenLength}\\`.`,\n    )\n  }\n}\n\n/**\n * The size of the bytes value does not match the size specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from('bytes8'), [['0xdeadbeefdeadbeefdeadbeef']])\n * //                                            \u2191 expected: 8 bytes  \u2191 \u274C size: 12 bytes\n * // @error: BytesSizeMismatchError: Size of bytes \"0xdeadbeefdeadbeefdeadbeef\"\n * // @error: (bytes12) does not match expected size (bytes8).\n * ```\n *\n * ### Solution\n *\n * Pass a bytes value of the correct size.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['bytes8']), ['0xdeadbeefdeadbeef'])\n * //                                                       \u2191 \u2705 size: 8 bytes\n * ```\n */\nexport class BytesSizeMismatchError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.BytesSizeMismatchError'\n  constructor({\n    expectedSize,\n    value,\n  }: { expectedSize: number; value: Hex.Hex }) {\n    super(\n      `Size of bytes \"${value}\" (bytes${Hex.size(\n        value,\n      )}) does not match expected size (bytes${expectedSize}).`,\n    )\n  }\n}\n\n/**\n * The length of the values to encode does not match the length of the ABI parameters.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['string', 'uint256']), ['hello'])\n * // @error: LengthMismatchError: ABI encoding params/values length mismatch.\n * // @error: Expected length (params): 2\n * // @error: Given length (values): 1\n * ```\n *\n * ### Solution\n *\n * Pass the correct number of values to encode.\n *\n * ### Solution\n *\n * Pass a [valid ABI type](https://docs.soliditylang.org/en/develop/abi-spec.html#types).\n */\nexport class LengthMismatchError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.LengthMismatchError'\n  constructor({\n    expectedLength,\n    givenLength,\n  }: { expectedLength: number; givenLength: number }) {\n    super(\n      [\n        'ABI encoding parameters/values length mismatch.',\n        `Expected length (parameters): ${expectedLength}`,\n        `Given length (values): ${givenLength}`,\n      ].join('\\n'),\n    )\n  }\n}\n\n/**\n * The value provided is not a valid array as specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['uint256[3]']), [69])\n * ```\n *\n * ### Solution\n *\n * Pass an array value.\n */\nexport class InvalidArrayError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.InvalidArrayError'\n  constructor(value: unknown) {\n    super(`Value \\`${value}\\` is not a valid array.`)\n  }\n}\n\n/**\n * Throws when the ABI parameter type is invalid.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'lol' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * //                             \u2191 \u274C invalid type\n * // @error: AbiParameters.InvalidTypeError: Type `lol` is not a valid ABI Type.\n * ```\n */\nexport class InvalidTypeError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.InvalidTypeError'\n  constructor(type: string) {\n    super(`Type \\`${type}\\` is not a valid ABI Type.`)\n  }\n}\n", "import * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Cursor from './internal/cursor.js'\nimport type { ExactPartial, RecursiveArray } from './internal/types.js'\n\n/**\n * Decodes a Recursive-Length Prefix (RLP) value into a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n * Rlp.toBytes('0x8b68656c6c6f20776f726c64')\n * // Uint8Array([139, 104, 101, 108, 108, 111,  32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param value - The value to decode.\n * @returns The decoded {@link ox#Bytes.Bytes} value.\n */\nexport function toBytes(\n  value: Bytes.Bytes | Hex.Hex,\n): RecursiveArray<Bytes.Bytes> {\n  return to(value, 'Bytes')\n}\n\nexport declare namespace toBytes {\n  type ErrorType = to.ErrorType\n}\n\n/**\n * Decodes a Recursive-Length Prefix (RLP) value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n * Rlp.toHex('0x8b68656c6c6f20776f726c64')\n * // 0x68656c6c6f20776f726c64\n * ```\n *\n * @param value - The value to decode.\n * @returns The decoded {@link ox#Hex.Hex} value.\n */\nexport function toHex(value: Bytes.Bytes | Hex.Hex): RecursiveArray<Hex.Hex> {\n  return to(value, 'Hex')\n}\n\nexport declare namespace toHex {\n  type ErrorType = to.ErrorType\n}\n\n/////////////////////////////////////////////////////////////////////////////////\n// Internal\n/////////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport function to<\n  value extends Bytes.Bytes | Hex.Hex,\n  to extends 'Hex' | 'Bytes',\n>(value: value, to: to | 'Hex' | 'Bytes'): to.ReturnType<to> {\n  const to_ = to ?? (typeof value === 'string' ? 'Hex' : 'Bytes')\n\n  const bytes = (() => {\n    if (typeof value === 'string') {\n      if (value.length > 3 && value.length % 2 !== 0)\n        throw new Hex.InvalidLengthError(value)\n      return Bytes.fromHex(value)\n    }\n    return value as Bytes.Bytes\n  })()\n\n  const cursor = Cursor.create(bytes, {\n    recursiveReadLimit: Number.POSITIVE_INFINITY,\n  })\n  const result = decodeRlpCursor(cursor, to_)\n\n  return result as to.ReturnType<to>\n}\n\n/** @internal */\nexport declare namespace to {\n  type ReturnType<to extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n    | (to extends 'Bytes' ? RecursiveArray<Bytes.Bytes> : never)\n    | (to extends 'Hex' ? RecursiveArray<Hex.Hex> : never)\n\n  type ErrorType =\n    | Bytes.fromHex.ErrorType\n    | decodeRlpCursor.ErrorType\n    | Cursor.create.ErrorType\n    | Hex.InvalidLengthError\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\n\n/** @internal */\nexport function decodeRlpCursor<to extends 'Hex' | 'Bytes' = 'Hex'>(\n  cursor: Cursor.Cursor,\n  to: to | 'Hex' | 'Bytes' | undefined = 'Hex',\n): decodeRlpCursor.ReturnType<to> {\n  if (cursor.bytes.length === 0)\n    return (\n      to === 'Hex' ? Hex.fromBytes(cursor.bytes) : cursor.bytes\n    ) as decodeRlpCursor.ReturnType<to>\n\n  const prefix = cursor.readByte()\n  if (prefix < 0x80) cursor.decrementPosition(1)\n\n  // bytes\n  if (prefix < 0xc0) {\n    const length = readLength(cursor, prefix, 0x80)\n    const bytes = cursor.readBytes(length)\n    return (\n      to === 'Hex' ? Hex.fromBytes(bytes) : bytes\n    ) as decodeRlpCursor.ReturnType<to>\n  }\n\n  // list\n  const length = readLength(cursor, prefix, 0xc0)\n  return readList(cursor, length, to) as {} as decodeRlpCursor.ReturnType<to>\n}\n\n/** @internal */\nexport declare namespace decodeRlpCursor {\n  type ReturnType<to extends 'Hex' | 'Bytes' = 'Hex'> = to.ReturnType<to>\n  type ErrorType =\n    | Hex.fromBytes.ErrorType\n    | readLength.ErrorType\n    | readList.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function readLength(\n  cursor: Cursor.Cursor,\n  prefix: number,\n  offset: number,\n) {\n  if (offset === 0x80 && prefix < 0x80) return 1\n  if (prefix <= offset + 55) return prefix - offset\n  if (prefix === offset + 55 + 1) return cursor.readUint8()\n  if (prefix === offset + 55 + 2) return cursor.readUint16()\n  if (prefix === offset + 55 + 3) return cursor.readUint24()\n  if (prefix === offset + 55 + 4) return cursor.readUint32()\n  throw new Errors.BaseError('Invalid RLP prefix')\n}\n\n/** @internal */\nexport declare namespace readLength {\n  type ErrorType = Errors.BaseError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function readList<to extends 'Hex' | 'Bytes'>(\n  cursor: Cursor.Cursor,\n  length: number,\n  to: to | 'Hex' | 'Bytes',\n) {\n  const position = cursor.position\n  const value: decodeRlpCursor.ReturnType<to>[] = []\n  while (cursor.position - position < length)\n    value.push(decodeRlpCursor(cursor, to))\n  return value\n}\n\n/** @internal */\nexport declare namespace readList {\n  type ErrorType = Errors.GlobalErrorType\n}\n\ntype Encodable = {\n  length: number\n  encode(cursor: Cursor.Cursor): void\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Rlp } from 'ox'\n *\n * Rlp.from('0x68656c6c6f20776f726c64', { as: 'Hex' })\n * // @log: 0x8b68656c6c6f20776f726c64\n *\n * Rlp.from(Bytes.from([139, 104, 101, 108, 108, 111,  32, 119, 111, 114, 108, 100]), { as: 'Bytes' })\n * // @log: Uint8Array([104, 101, 108, 108, 111,  32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function from<as extends 'Hex' | 'Bytes'>(\n  value: RecursiveArray<Bytes.Bytes> | RecursiveArray<Hex.Hex>,\n  options: from.Options<as>,\n): from.ReturnType<as> {\n  const { as } = options\n\n  const encodable = getEncodable(value)\n  const cursor = Cursor.create(new Uint8Array(encodable.length))\n  encodable.encode(cursor)\n\n  if (as === 'Hex') return Hex.fromBytes(cursor.bytes) as from.ReturnType<as>\n  return cursor.bytes as from.ReturnType<as>\n}\n\nexport declare namespace from {\n  type Options<as extends 'Hex' | 'Bytes'> = {\n    /** The type to convert the RLP value to. */\n    as: as | 'Hex' | 'Bytes'\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType =\n    | Cursor.create.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Bytes.fromHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Rlp } from 'ox'\n *\n * Rlp.fromBytes(Bytes.from([139, 104, 101, 108, 108, 111,  32, 119, 111, 114, 108, 100]))\n * // @log: Uint8Array([104, 101, 108, 108, 111,  32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function fromBytes<as extends 'Hex' | 'Bytes' = 'Bytes'>(\n  bytes: RecursiveArray<Bytes.Bytes>,\n  options: fromBytes.Options<as> = {},\n): fromBytes.ReturnType<as> {\n  const { as = 'Bytes' } = options\n  return from(bytes, { as }) as never\n}\n\nexport declare namespace fromBytes {\n  type Options<as extends 'Hex' | 'Bytes' = 'Bytes'> = ExactPartial<\n    from.Options<as>\n  >\n\n  type ReturnType<as extends 'Hex' | 'Bytes' = 'Bytes'> = from.ReturnType<as>\n\n  type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Hex.Hex} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n *\n * Rlp.fromHex('0x68656c6c6f20776f726c64')\n * // @log: 0x8b68656c6c6f20776f726c64\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function fromHex<as extends 'Hex' | 'Bytes' = 'Hex'>(\n  hex: RecursiveArray<Hex.Hex>,\n  options: fromHex.Options<as> = {},\n): fromHex.ReturnType<as> {\n  const { as = 'Hex' } = options\n  return from(hex, { as }) as never\n}\n\nexport declare namespace fromHex {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = ExactPartial<\n    from.Options<as>\n  >\n\n  type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex'> = from.ReturnType<as>\n\n  type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/////////////////////////////////////////////////////////////////////////////////\n// Internal\n/////////////////////////////////////////////////////////////////////////////////\n\nfunction getEncodable(\n  bytes: RecursiveArray<Bytes.Bytes> | RecursiveArray<Hex.Hex>,\n): Encodable {\n  if (Array.isArray(bytes))\n    return getEncodableList(bytes.map((x) => getEncodable(x)))\n  return getEncodableBytes(bytes as any)\n}\n\nfunction getEncodableList(list: Encodable[]): Encodable {\n  const bodyLength = list.reduce((acc, x) => acc + x.length, 0)\n\n  const sizeOfBodyLength = getSizeOfLength(bodyLength)\n  const length = (() => {\n    if (bodyLength <= 55) return 1 + bodyLength\n    return 1 + sizeOfBodyLength + bodyLength\n  })()\n\n  return {\n    length,\n    encode(cursor: Cursor.Cursor) {\n      if (bodyLength <= 55) {\n        cursor.pushByte(0xc0 + bodyLength)\n      } else {\n        cursor.pushByte(0xc0 + 55 + sizeOfBodyLength)\n        if (sizeOfBodyLength === 1) cursor.pushUint8(bodyLength)\n        else if (sizeOfBodyLength === 2) cursor.pushUint16(bodyLength)\n        else if (sizeOfBodyLength === 3) cursor.pushUint24(bodyLength)\n        else cursor.pushUint32(bodyLength)\n      }\n      for (const { encode } of list) {\n        encode(cursor)\n      }\n    },\n  }\n}\n\nfunction getEncodableBytes(bytesOrHex: Bytes.Bytes | Hex.Hex): Encodable {\n  const bytes =\n    typeof bytesOrHex === 'string' ? Bytes.fromHex(bytesOrHex) : bytesOrHex\n\n  const sizeOfBytesLength = getSizeOfLength(bytes.length)\n  const length = (() => {\n    if (bytes.length === 1 && bytes[0]! < 0x80) return 1\n    if (bytes.length <= 55) return 1 + bytes.length\n    return 1 + sizeOfBytesLength + bytes.length\n  })()\n\n  return {\n    length,\n    encode(cursor: Cursor.Cursor) {\n      if (bytes.length === 1 && bytes[0]! < 0x80) {\n        cursor.pushBytes(bytes)\n      } else if (bytes.length <= 55) {\n        cursor.pushByte(0x80 + bytes.length)\n        cursor.pushBytes(bytes)\n      } else {\n        cursor.pushByte(0x80 + 55 + sizeOfBytesLength)\n        if (sizeOfBytesLength === 1) cursor.pushUint8(bytes.length)\n        else if (sizeOfBytesLength === 2) cursor.pushUint16(bytes.length)\n        else if (sizeOfBytesLength === 3) cursor.pushUint24(bytes.length)\n        else cursor.pushUint32(bytes.length)\n        cursor.pushBytes(bytes)\n      }\n    },\n  }\n}\n\nfunction getSizeOfLength(length: number) {\n  if (length <= 0xff) return 1\n  if (length <= 0xff_ff) return 2\n  if (length <= 0xff_ff_ff) return 3\n  if (length <= 0xff_ff_ff_ff) return 4\n  throw new Errors.BaseError('Length is too large.')\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type { Compute, ExactPartial, OneOf } from './internal/types.js'\nimport * as Json from './Json.js'\nimport * as Solidity from './Solidity.js'\n\n/** Root type for an ECDSA signature. */\nexport type Signature<\n  recovered extends boolean = true,\n  bigintType = bigint,\n  numberType = number,\n> = Compute<\n  recovered extends true\n    ? {\n        r: bigintType\n        s: bigintType\n        yParity: numberType\n      }\n    : {\n        r: bigintType\n        s: bigintType\n        yParity?: numberType | undefined\n      }\n>\n\n/** RPC-formatted ECDSA signature. */\nexport type Rpc<recovered extends boolean = true> = Signature<\n  recovered,\n  Hex.Hex,\n  Hex.Hex\n>\n\n/** (Legacy) ECDSA signature. */\nexport type Legacy<bigintType = bigint, numberType = number> = {\n  r: bigintType\n  s: bigintType\n  v: numberType\n}\n\n/** RPC-formatted (Legacy) ECDSA signature. */\nexport type LegacyRpc = Legacy<Hex.Hex, Hex.Hex>\n\nexport type Tuple = readonly [yParity: Hex.Hex, r: Hex.Hex, s: Hex.Hex]\n\n/**\n * Asserts that a Signature is valid.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.assert({\n *   r: -49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1,\n * })\n * // @error: InvalidSignatureRError:\n * // @error: Value `-549...n` is an invalid r value.\n * // @error: r must be a positive integer less than 2^256.\n * ```\n *\n * @param signature - The signature object to assert.\n */\nexport function assert(\n  signature: ExactPartial<Signature>,\n  options: assert.Options = {},\n): asserts signature is Signature {\n  const { recovered } = options\n  if (typeof signature.r === 'undefined')\n    throw new MissingPropertiesError({ signature })\n  if (typeof signature.s === 'undefined')\n    throw new MissingPropertiesError({ signature })\n  if (recovered && typeof signature.yParity === 'undefined')\n    throw new MissingPropertiesError({ signature })\n  if (signature.r < 0n || signature.r > Solidity.maxUint256)\n    throw new InvalidRError({ value: signature.r })\n  if (signature.s < 0n || signature.s > Solidity.maxUint256)\n    throw new InvalidSError({ value: signature.s })\n  if (\n    typeof signature.yParity === 'number' &&\n    signature.yParity !== 0 &&\n    signature.yParity !== 1\n  )\n    throw new InvalidYParityError({ value: signature.yParity })\n}\n\nexport declare namespace assert {\n  type Options = {\n    /** Whether or not the signature should be recovered (contain `yParity`). */\n    recovered?: boolean\n  }\n\n  type ErrorType =\n    | MissingPropertiesError\n    | InvalidRError\n    | InvalidSError\n    | InvalidYParityError\n    | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#Bytes.Bytes} signature into a structured {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * Signature.fromBytes(new Uint8Array([128, 3, 131, ...]))\n * // @log: { r: 5231...n, s: 3522...n, yParity: 0 }\n * ```\n *\n * @param signature - The serialized signature.\n * @returns The deserialized {@link ox#Signature.Signature}.\n */\nexport function fromBytes(signature: Bytes.Bytes): Signature {\n  return fromHex(Hex.fromBytes(signature))\n}\n\nexport declare namespace fromBytes {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#Hex.Hex} signature into a structured {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.fromHex('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c')\n * // @log: { r: 5231...n, s: 3522...n, yParity: 0 }\n * ```\n *\n * @param serialized - The serialized signature.\n * @returns The deserialized {@link ox#Signature.Signature}.\n */\nexport function fromHex(signature: Hex.Hex): Signature {\n  if (signature.length !== 130 && signature.length !== 132)\n    throw new InvalidSerializedSizeError({ signature })\n\n  const r = BigInt(Hex.slice(signature, 0, 32))\n  const s = BigInt(Hex.slice(signature, 32, 64))\n\n  const yParity = (() => {\n    const yParity = Number(`0x${signature.slice(130)}`)\n    if (Number.isNaN(yParity)) return undefined\n    try {\n      return vToYParity(yParity)\n    } catch {\n      throw new InvalidYParityError({ value: yParity })\n    }\n  })()\n\n  if (typeof yParity === 'undefined')\n    return {\n      r,\n      s,\n    } as never\n  return {\n    r,\n    s,\n    yParity,\n  } as never\n}\n\nexport declare namespace fromHex {\n  type ErrorType =\n    | Hex.from.ErrorType\n    | InvalidSerializedSizeError\n    | Errors.GlobalErrorType\n}\n\n/**\n * Extracts a {@link ox#Signature.Signature} from an arbitrary object that may include signature properties.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * Signature.extract({\n *   baz: 'barry',\n *   foo: 'bar',\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1,\n *   zebra: 'stripes',\n * })\n * // @log: {\n * // @log:   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log:   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log:   yParity: 1\n * // @log: }\n * ```\n *\n * @param value - The arbitrary object to extract the signature from.\n * @returns The extracted {@link ox#Signature.Signature}.\n */\nexport function extract(value: extract.Value): Signature | undefined {\n  if (typeof value.r === 'undefined') return undefined\n  if (typeof value.s === 'undefined') return undefined\n  return from(value as any)\n}\n\nexport declare namespace extract {\n  type Value = {\n    r?: bigint | Hex.Hex | undefined\n    s?: bigint | Hex.Hex | undefined\n    yParity?: number | Hex.Hex | undefined\n    v?: number | Hex.Hex | undefined\n  }\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a typed {@link ox#Signature.Signature} object from a {@link ox#Signature.Signature}, {@link ox#Signature.Legacy}, {@link ox#Bytes.Bytes}, or {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from({\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1,\n * })\n * // @log: {\n * // @log:   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log:   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log:   yParity: 1\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db801')\n * // @log: {\n * // @log:   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log:   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log:   yParity: 1,\n * // @log: }\n * ```\n *\n * @example\n * ### From Legacy\n *\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from({\n *   r: 47323457007453657207889730243826965761922296599680473886588287015755652701072n,\n *   s: 57228803202727131502949358313456071280488184270258293674242124340113824882788n,\n *   v: 27,\n * })\n * // @log: {\n * // @log:   r: 47323457007453657207889730243826965761922296599680473886588287015755652701072n,\n * // @log:   s: 57228803202727131502949358313456071280488184270258293674242124340113824882788n,\n * // @log:   yParity: 0\n * // @log: }\n * ```\n *\n * @param signature - The signature value to instantiate.\n * @returns The instantiated {@link ox#Signature.Signature}.\n */\nexport function from<\n  const signature extends\n    | OneOf<Signature<boolean> | Rpc<boolean> | Legacy | LegacyRpc>\n    | Hex.Hex\n    | Bytes.Bytes,\n>(\n  signature:\n    | signature\n    | OneOf<Signature<boolean> | Rpc<boolean> | Legacy | LegacyRpc>\n    | Hex.Hex\n    | Bytes.Bytes,\n): from.ReturnType<signature> {\n  const signature_ = (() => {\n    if (typeof signature === 'string') return fromHex(signature)\n    if (signature instanceof Uint8Array) return fromBytes(signature)\n    if (typeof signature.r === 'string') return fromRpc(signature)\n    if (signature.v) return fromLegacy(signature)\n    return {\n      r: signature.r,\n      s: signature.s,\n      ...(typeof signature.yParity !== 'undefined'\n        ? { yParity: signature.yParity }\n        : {}),\n    }\n  })()\n  assert(signature_)\n  return signature_ as never\n}\n\nexport declare namespace from {\n  type ReturnType<\n    signature extends\n      | OneOf<Signature<boolean> | Rpc<boolean> | Legacy | LegacyRpc>\n      | Hex.Hex\n      | Bytes.Bytes,\n  > = signature extends Signature<boolean> & { v?: undefined }\n    ? signature\n    : Signature\n\n  type ErrorType =\n    | assert.ErrorType\n    | fromBytes.ErrorType\n    | fromHex.ErrorType\n    | vToYParity.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Converts a DER-encoded signature to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromDerBytes(new Uint8Array([132, 51, 23, ...]))\n * // @log: {\n * // @log:   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log:   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: }\n * ```\n *\n * @param signature - The DER-encoded signature to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromDerBytes(signature: Bytes.Bytes): Signature<false> {\n  return fromDerHex(Hex.fromBytes(signature))\n}\n\nexport declare namespace fromDerBytes {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a DER-encoded signature to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromDerHex('0x304402206e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf02204a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8')\n * // @log: {\n * // @log:   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log:   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: }\n * ```\n *\n * @param signature - The DER-encoded signature to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromDerHex(signature: Hex.Hex): Signature<false> {\n  const { r, s } = secp256k1.Signature.fromDER(Hex.from(signature).slice(2))\n  return { r, s }\n}\n\nexport declare namespace fromDerHex {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Legacy} into a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const legacy = Signature.fromLegacy({ r: 1n, s: 2n, v: 28 })\n * // @log: { r: 1n, s: 2n, yParity: 1 }\n * ```\n *\n * @param signature - The {@link ox#Signature.Legacy} to convert.\n * @returns The converted {@link ox#Signature.Signature}.\n */\nexport function fromLegacy(signature: Legacy): Signature {\n  return {\n    r: signature.r,\n    s: signature.s,\n    yParity: vToYParity(signature.v),\n  }\n}\n\nexport declare namespace fromLegacy {\n  type ErrorType = vToYParity.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Rpc} into a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromRpc({\n *   r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n *   s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n *   yParity: '0x0',\n * })\n * ```\n *\n * @param signature - The {@link ox#Signature.Rpc} to convert.\n * @returns The converted {@link ox#Signature.Signature}.\n */\nexport function fromRpc(signature: {\n  r: Hex.Hex\n  s: Hex.Hex\n  yParity?: Hex.Hex | undefined\n  v?: Hex.Hex | undefined\n}): Signature {\n  const yParity = (() => {\n    const v = signature.v ? Number(signature.v) : undefined\n    let yParity = signature.yParity ? Number(signature.yParity) : undefined\n    if (typeof v === 'number' && typeof yParity !== 'number')\n      yParity = vToYParity(v)\n    if (typeof yParity !== 'number')\n      throw new InvalidYParityError({ value: signature.yParity })\n    return yParity\n  })()\n\n  return {\n    r: BigInt(signature.r),\n    s: BigInt(signature.s),\n    yParity,\n  }\n}\n\nexport declare namespace fromRpc {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Tuple} to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromTuple(['0x01', '0x7b', '0x1c8'])\n * // @log: {\n * // @log:   r: 123n,\n * // @log:   s: 456n,\n * // @log:   yParity: 1,\n * // @log: }\n * ```\n *\n * @param tuple - The {@link ox#Signature.Tuple} to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromTuple(tuple: Tuple): Signature {\n  const [yParity, r, s] = tuple\n  return from({\n    r: r === '0x' ? 0n : BigInt(r),\n    s: s === '0x' ? 0n : BigInt(s),\n    yParity: yParity === '0x' ? 0 : Number(yParity),\n  })\n}\n\nexport declare namespace fromTuple {\n  type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#Signature.Signature} to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toBytes({\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1\n * })\n * // @log: Uint8Array [102, 16, 10, ...]\n * ```\n *\n * @param signature - The signature to serialize.\n * @returns The serialized signature.\n */\nexport function toBytes(signature: Signature<boolean>): Bytes.Bytes {\n  return Bytes.fromHex(toHex(signature))\n}\n\nexport declare namespace toBytes {\n  type ErrorType =\n    | toHex.ErrorType\n    | Bytes.fromHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#Signature.Signature} to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toHex({\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1\n * })\n * // @log: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c'\n * ```\n *\n * @param signature - The signature to serialize.\n * @returns The serialized signature.\n */\nexport function toHex(signature: Signature<boolean>): Hex.Hex {\n  assert(signature)\n\n  const r = signature.r\n  const s = signature.s\n\n  const signature_ = Hex.concat(\n    Hex.fromNumber(r, { size: 32 }),\n    Hex.fromNumber(s, { size: 32 }),\n    // If the signature is recovered, add the recovery byte to the signature.\n    typeof signature.yParity === 'number'\n      ? Hex.fromNumber(yParityToV(signature.yParity), { size: 1 })\n      : '0x',\n  )\n\n  return signature_\n}\n\nexport declare namespace toHex {\n  type ErrorType =\n    | Hex.concat.ErrorType\n    | Hex.fromNumber.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} to DER-encoded format.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.from({\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * })\n *\n * const signature_der = Signature.toDerBytes(signature)\n * // @log: Uint8Array [132, 51, 23, ...]\n * ```\n *\n * @param signature - The signature to convert.\n * @returns The DER-encoded signature.\n */\nexport function toDerBytes(signature: Signature<boolean>): Bytes.Bytes {\n  const sig = new secp256k1.Signature(signature.r, signature.s)\n  return sig.toDERRawBytes()\n}\n\nexport declare namespace toDerBytes {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} to DER-encoded format.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.from({\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * })\n *\n * const signature_der = Signature.toDerHex(signature)\n * // @log: '0x304402206e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf02204a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8'\n * ```\n *\n * @param signature - The signature to convert.\n * @returns The DER-encoded signature.\n */\nexport function toDerHex(signature: Signature<boolean>): Hex.Hex {\n  const sig = new secp256k1.Signature(signature.r, signature.s)\n  return `0x${sig.toDERHex()}`\n}\n\nexport declare namespace toDerHex {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} into a {@link ox#Signature.Legacy}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const legacy = Signature.toLegacy({ r: 1n, s: 2n, yParity: 1 })\n * // @log: { r: 1n, s: 2n, v: 28 }\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The converted {@link ox#Signature.Legacy}.\n */\nexport function toLegacy(signature: Signature): Legacy {\n  return {\n    r: signature.r,\n    s: signature.s,\n    v: yParityToV(signature.yParity),\n  }\n}\n\nexport declare namespace toLegacy {\n  type ErrorType = yParityToV.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} into a {@link ox#Signature.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toRpc({\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1\n * })\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The converted {@link ox#Signature.Rpc}.\n */\nexport function toRpc(signature: Signature): Rpc {\n  const { r, s, yParity } = signature\n  return {\n    r: Hex.fromNumber(r, { size: 32 }),\n    s: Hex.fromNumber(s, { size: 32 }),\n    yParity: yParity === 0 ? '0x0' : '0x1',\n  }\n}\n\nexport declare namespace toRpc {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} to a serialized {@link ox#Signature.Tuple} to be used for signatures in Transaction Envelopes, EIP-7702 Authorization Lists, etc.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signatureTuple = Signature.toTuple({\n *   r: 123n,\n *   s: 456n,\n *   yParity: 1,\n * })\n * // @log: [yParity: '0x01', r: '0x7b', s: '0x1c8']\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The {@link ox#Signature.Tuple}.\n */\nexport function toTuple(signature: Signature): Tuple {\n  const { r, s, yParity } = signature\n\n  return [\n    yParity ? '0x01' : '0x',\n    r === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(r!)),\n    s === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(s!)),\n  ] as const\n}\n\nexport declare namespace toTuple {\n  type ErrorType =\n    | Hex.trimLeft.ErrorType\n    | Hex.fromNumber.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Validates a Signature. Returns `true` if the signature is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const valid = Signature.validate({\n *   r: -49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1,\n * })\n * // @log: false\n * ```\n *\n * @param signature - The signature object to assert.\n */\nexport function validate(\n  signature: ExactPartial<Signature>,\n  options: validate.Options = {},\n): boolean {\n  try {\n    assert(signature, options)\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  type Options = {\n    /** Whether or not the signature should be recovered (contain `yParity`). */\n    recovered?: boolean\n  }\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a ECDSA `v` value to a `yParity` value.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const yParity = Signature.vToYParity(28)\n * // @log: 1\n * ```\n *\n * @param v - The ECDSA `v` value to convert.\n * @returns The `yParity` value.\n */\nexport function vToYParity(v: number): Signature['yParity'] {\n  if (v === 0 || v === 27) return 0\n  if (v === 1 || v === 28) return 1\n  if (v >= 35) return v % 2 === 0 ? 1 : 0\n  throw new InvalidVError({ value: v })\n}\n\nexport declare namespace vToYParity {\n  type ErrorType = InvalidVError | Errors.GlobalErrorType\n}\n\n/**\n * Converts a ECDSA `v` value to a `yParity` value.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const v = Signature.yParityToV(1)\n * // @log: 28\n * ```\n *\n * @param yParity - The ECDSA `yParity` value to convert.\n * @returns The `v` value.\n */\nexport function yParityToV(yParity: number): number {\n  if (yParity === 0) return 27\n  if (yParity === 1) return 28\n  throw new InvalidYParityError({ value: yParity })\n}\n\nexport declare namespace yParityToV {\n  type ErrorType = InvalidVError | Errors.GlobalErrorType\n}\n\n/** Thrown when the serialized signature is of an invalid size. */\nexport class InvalidSerializedSizeError extends Errors.BaseError {\n  override readonly name = 'Signature.InvalidSerializedSizeError'\n\n  constructor({ signature }: { signature: Hex.Hex | Bytes.Bytes }) {\n    super(`Value \\`${signature}\\` is an invalid signature size.`, {\n      metaMessages: [\n        'Expected: 64 bytes or 65 bytes.',\n        `Received ${Hex.size(Hex.from(signature))} bytes.`,\n      ],\n    })\n  }\n}\n\n/** Thrown when the signature is missing either an `r`, `s`, or `yParity` property. */\nexport class MissingPropertiesError extends Errors.BaseError {\n  override readonly name = 'Signature.MissingPropertiesError'\n\n  constructor({ signature }: { signature: unknown }) {\n    super(\n      `Signature \\`${Json.stringify(signature)}\\` is missing either an \\`r\\`, \\`s\\`, or \\`yParity\\` property.`,\n    )\n  }\n}\n\n/** Thrown when the signature has an invalid `r` value. */\nexport class InvalidRError extends Errors.BaseError {\n  override readonly name = 'Signature.InvalidRError'\n\n  constructor({ value }: { value: unknown }) {\n    super(\n      `Value \\`${value}\\` is an invalid r value. r must be a positive integer less than 2^256.`,\n    )\n  }\n}\n\n/** Thrown when the signature has an invalid `s` value. */\nexport class InvalidSError extends Errors.BaseError {\n  override readonly name = 'Signature.InvalidSError'\n\n  constructor({ value }: { value: unknown }) {\n    super(\n      `Value \\`${value}\\` is an invalid s value. s must be a positive integer less than 2^256.`,\n    )\n  }\n}\n\n/** Thrown when the signature has an invalid `yParity` value. */\nexport class InvalidYParityError extends Errors.BaseError {\n  override readonly name = 'Signature.InvalidYParityError'\n\n  constructor({ value }: { value: unknown }) {\n    super(\n      `Value \\`${value}\\` is an invalid y-parity value. Y-parity must be 0 or 1.`,\n    )\n  }\n}\n\n/** Thrown when the signature has an invalid `v` value. */\nexport class InvalidVError extends Errors.BaseError {\n  override readonly name = 'Signature.InvalidVError'\n\n  constructor({ value }: { value: number }) {\n    super(`Value \\`${value}\\` is an invalid v value. v must be 27, 28 or >=35.`)\n  }\n}\n", "import type * as Address from './Address.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport type { Compute, Mutable, Undefined } from './internal/types.js'\nimport * as Rlp from './Rlp.js'\nimport * as Signature from './Signature.js'\n\n/** Root type for an EIP-7702 Authorization. */\nexport type Authorization<\n  signed extends boolean = boolean,\n  bigintType = bigint,\n  numberType = number,\n> = Compute<\n  {\n    /** Address of the contract to set as code for the Authority. */\n    address: Address.Address\n    /** Chain ID to authorize. */\n    chainId: numberType\n    /** Nonce of the Authority to authorize. */\n    nonce: bigintType\n  } & (signed extends true\n    ? Signature.Signature<true, bigintType, numberType>\n    : Undefined<Signature.Signature>)\n>\n\n/** RPC representation of an {@link ox#Authorization.Authorization}. */\nexport type Rpc = Authorization<true, Hex.Hex, Hex.Hex>\n\n/** List of {@link ox#Authorization.Authorization}. */\nexport type List<\n  signed extends boolean = boolean,\n  bigintType = bigint,\n  numberType = number,\n> = Compute<readonly Authorization<signed, bigintType, numberType>[]>\n\n/** RPC representation of an {@link ox#Authorization.List}. */\nexport type ListRpc = List<true, Hex.Hex, Hex.Hex>\n\n/** Signed representation of a list of {@link ox#Authorization.Authorization}. */\nexport type ListSigned<bigintType = bigint, numberType = number> = List<\n  true,\n  bigintType,\n  numberType\n>\n\n/** Signed representation of an {@link ox#Authorization.Authorization}. */\nexport type Signed<bigintType = bigint, numberType = number> = Authorization<\n  true,\n  bigintType,\n  numberType\n>\n\n/** Tuple representation of an {@link ox#Authorization.Authorization}. */\nexport type Tuple<signed extends boolean = boolean> = signed extends true\n  ? readonly [\n      chainId: Hex.Hex,\n      address: Hex.Hex,\n      nonce: Hex.Hex,\n      yParity: Hex.Hex,\n      r: Hex.Hex,\n      s: Hex.Hex,\n    ]\n  : readonly [chainId: Hex.Hex, address: Hex.Hex, nonce: Hex.Hex]\n\n/** Tuple representation of a signed {@link ox#Authorization.Authorization}. */\nexport type TupleSigned = Tuple<true>\n\n/** Tuple representation of a list of {@link ox#Authorization.Authorization}. */\nexport type TupleList<signed extends boolean = boolean> =\n  readonly Tuple<signed>[]\n\n/** Tuple representation of a list of signed {@link ox#Authorization.Authorization}. */\nexport type TupleListSigned = TupleList<true>\n\n/**\n * Converts an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization object into a typed {@link ox#Authorization.Authorization}.\n *\n * @example\n * An Authorization can be instantiated from an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple in object format.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 1,\n *   nonce: 69n,\n * })\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * A {@link ox#Signature.Signature} can be attached with the `signature` option. The example below demonstrates signing\n * an Authorization with {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * import { Authorization, Secp256k1 } from 'ox'\n *\n * const authorization = Authorization.from({\n *   address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n *   chainId: 1,\n *   nonce: 40n,\n * })\n *\n * const signature = Secp256k1.sign({\n *   payload: Authorization.getSignPayload(authorization),\n *   privateKey: '0x...',\n * })\n *\n * const authorization_signed = Authorization.from(authorization, { signature }) // [!code focus]\n * ```\n *\n * @param authorization - An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple in object format.\n * @param options - Authorization options.\n * @returns The {@link ox#Authorization.Authorization}.\n */\nexport function from<\n  const authorization extends Authorization | Rpc,\n  const signature extends Signature.Signature | undefined = undefined,\n>(\n  authorization: authorization | Authorization,\n  options: from.Options<signature> = {},\n): from.ReturnType<authorization, signature> {\n  if (typeof authorization.chainId === 'string')\n    return fromRpc(authorization) as never\n  return { ...authorization, ...options.signature } as never\n}\n\nexport declare namespace from {\n  type Options<\n    signature extends Signature.Signature | undefined =\n      | Signature.Signature\n      | undefined,\n  > = {\n    /** The {@link ox#Signature.Signature} to attach to the Authorization. */\n    signature?: signature | Signature.Signature | undefined\n  }\n\n  type ReturnType<\n    authorization extends Authorization | Rpc = Authorization,\n    signature extends Signature.Signature | undefined =\n      | Signature.Signature\n      | undefined,\n  > = Compute<\n    authorization extends Rpc\n      ? Signed\n      : authorization &\n          (signature extends Signature.Signature ? Readonly<signature> : {})\n  >\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Rpc} to an {@link ox#Authorization.Authorization}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromRpc({\n *   address: '0x0000000000000000000000000000000000000000',\n *   chainId: '0x1',\n *   nonce: '0x1',\n *   r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n *   s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n *   yParity: '0x0',\n * })\n * ```\n *\n * @param authorization - The RPC-formatted Authorization.\n * @returns A signed {@link ox#Authorization.Authorization}.\n */\nexport function fromRpc(authorization: Rpc): Signed {\n  const { address, chainId, nonce } = authorization\n  const signature = Signature.extract(authorization)!\n\n  return {\n    address,\n    chainId: Number(chainId),\n    nonce: BigInt(nonce),\n    ...signature,\n  }\n}\n\nexport declare namespace fromRpc {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.ListRpc} to an {@link ox#Authorization.List}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromRpcList([{\n *   address: '0x0000000000000000000000000000000000000000',\n *   chainId: '0x1',\n *   nonce: '0x1',\n *   r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n *   s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n *   yParity: '0x0',\n * }])\n * ```\n *\n * @param authorizationList - The RPC-formatted Authorization list.\n * @returns A signed {@link ox#Authorization.List}.\n */\nexport function fromRpcList(authorizationList: ListRpc): ListSigned {\n  return authorizationList.map(fromRpc)\n}\n\nexport declare namespace fromRpcList {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Tuple} to an {@link ox#Authorization.Authorization}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromTuple([\n *   '0x1',\n *   '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n *   '0x3'\n * ])\n * // @log: {\n * // @log:   address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log:   chainId: 1,\n * // @log:   nonce: 3n\n * // @log: }\n * ```\n *\n * @example\n * It is also possible to append a Signature tuple to the end of an Authorization tuple.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromTuple([\n *   '0x1',\n *   '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n *   '0x3',\n *   '0x1',\n *   '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90',\n *   '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064',\n * ])\n * // @log: {\n * // @log:   address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log:   chainId: 1,\n * // @log:   nonce: 3n\n * // @log:   r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log:   s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log:   yParity: 0,\n * // @log: }\n * ```\n *\n * @param tuple - The [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple.\n * @returns The {@link ox#Authorization.Authorization}.\n */\nexport function fromTuple<const tuple extends Tuple>(\n  tuple: tuple,\n): fromTuple.ReturnType<tuple> {\n  const [chainId, address, nonce, yParity, r, s] = tuple\n  let args = {\n    address,\n    chainId: chainId === '0x' ? 0 : Number(chainId),\n    nonce: nonce === '0x' ? 0n : BigInt(nonce),\n  }\n  if (yParity && r && s)\n    args = { ...args, ...Signature.fromTuple([yParity, r, s]) }\n  return from(args) as never\n}\n\nexport declare namespace fromTuple {\n  type ReturnType<authorization extends Tuple = Tuple> = Compute<\n    Authorization<authorization extends Tuple<true> ? true : false>\n  >\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.TupleList} to an {@link ox#Authorization.List}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromTupleList([\n *   ['0x1', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x3'],\n *   ['0x3', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x14'],\n * ])\n * // @log: [\n * // @log:   {\n * // @log:     address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log:     chainId: 1,\n * // @log:     nonce: 3n,\n * // @log:   },\n * // @log:   {\n * // @log:     address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log:     chainId: 3,\n * // @log:     nonce: 20n,\n * // @log:   },\n * // @log: ]\n * ```\n *\n * @example\n * It is also possible to append a Signature tuple to the end of an Authorization tuple.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromTupleList([\n *   ['0x1', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x3', '0x1', '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90', '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'],\n *   ['0x3', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x14', '0x1', '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90', '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'],\n * ])\n * // @log: [\n * // @log:   {\n * // @log:     address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log:     chainId: 1,\n * // @log:     nonce: 3n,\n * // @log:     r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log:     s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log:     yParity: 0,\n * // @log:   },\n * // @log:   {\n * // @log:     address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log:     chainId: 3,\n * // @log:     nonce: 20n,\n * // @log:     r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log:     s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log:     yParity: 0,\n * // @log:   },\n * // @log: ]\n * ```\n *\n * @param tupleList - The [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple list.\n * @returns An {@link ox#Authorization.List}.\n */\nexport function fromTupleList<const tupleList extends TupleList>(\n  tupleList: tupleList,\n): fromTupleList.ReturnType<tupleList> {\n  const list: Mutable<List> = []\n  for (const tuple of tupleList) list.push(fromTuple(tuple))\n  return list as never\n}\n\nexport declare namespace fromTupleList {\n  type ReturnType<tupleList extends TupleList> = Compute<\n    TupleList<tupleList extends TupleList<true> ? true : false>\n  >\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Computes the sign payload for an {@link ox#Authorization.Authorization} in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n *\n * @example\n * The example below demonstrates computing the sign payload for an {@link ox#Authorization.Authorization}. This payload\n * can then be passed to signing functions like {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * import { Authorization, Secp256k1 } from 'ox'\n *\n * const authorization = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 1,\n *   nonce: 69n,\n * })\n *\n * const payload = Authorization.getSignPayload(authorization) // [!code focus]\n *\n * const signature = Secp256k1.sign({\n *   payload,\n *   privateKey: '0x...',\n * })\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns The sign payload.\n */\nexport function getSignPayload(authorization: Authorization): Hex.Hex {\n  return hash(authorization, { presign: true })\n}\n\nexport declare namespace getSignPayload {\n  type ErrorType = hash.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Computes the hash for an {@link ox#Authorization.Authorization} in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 1,\n *   nonce: 69n,\n * })\n *\n * const hash = Authorization.hash(authorization) // [!code focus]\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns The hash.\n */\nexport function hash(\n  authorization: Authorization,\n  options: hash.Options = {},\n): Hex.Hex {\n  const { presign } = options\n  return Hash.keccak256(\n    Hex.concat(\n      '0x05',\n      Rlp.fromHex(\n        toTuple(\n          presign\n            ? {\n                address: authorization.address,\n                chainId: authorization.chainId,\n                nonce: authorization.nonce,\n              }\n            : authorization,\n        ),\n      ),\n    ),\n  )\n}\n\nexport declare namespace hash {\n  type ErrorType =\n    | toTuple.ErrorType\n    | Hash.keccak256.ErrorType\n    | Hex.concat.ErrorType\n    | Rlp.fromHex.ErrorType\n    | Errors.GlobalErrorType\n\n  type Options = {\n    /** Whether to hash this authorization for signing. @default false */\n    presign?: boolean | undefined\n  }\n}\n\n/**\n * Converts an {@link ox#Authorization.Authorization} to an {@link ox#Authorization.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.toRpc({\n *   address: '0x0000000000000000000000000000000000000000',\n *   chainId: 1,\n *   nonce: 1n,\n *   r: 44944627813007772897391531230081695102703289123332187696115181104739239197517n,\n *   s: 36528503505192438307355164441104001310566505351980369085208178712678799181120n,\n *   yParity: 0,\n * })\n * ```\n *\n * @param authorization - An Authorization.\n * @returns An RPC-formatted Authorization.\n */\nexport function toRpc(authorization: Signed): Rpc {\n  const { address, chainId, nonce, ...signature } = authorization\n\n  return {\n    address,\n    chainId: Hex.fromNumber(chainId),\n    nonce: Hex.fromNumber(nonce),\n    ...Signature.toRpc(signature),\n  }\n}\n\nexport declare namespace toRpc {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.List} to an {@link ox#Authorization.ListRpc}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.toRpcList([{\n *   address: '0x0000000000000000000000000000000000000000',\n *   chainId: 1,\n *   nonce: 1n,\n *   r: 44944627813007772897391531230081695102703289123332187696115181104739239197517n,\n *   s: 36528503505192438307355164441104001310566505351980369085208178712678799181120n,\n *   yParity: 0,\n * }])\n * ```\n *\n * @param authorizationList - An Authorization List.\n * @returns An RPC-formatted Authorization List.\n */\nexport function toRpcList(authorizationList: ListSigned): ListRpc {\n  return authorizationList.map(toRpc)\n}\n\nexport declare namespace toRpcList {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Authorization} to an {@link ox#Authorization.Tuple}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 1,\n *   nonce: 69n,\n * })\n *\n * const tuple = Authorization.toTuple(authorization) // [!code focus]\n * // @log: [\n * // @log:   address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log:   chainId: 1,\n * // @log:   nonce: 69n,\n * // @log: ]\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple.\n */\nexport function toTuple<const authorization extends Authorization>(\n  authorization: authorization,\n): toTuple.ReturnType<authorization> {\n  const { address, chainId, nonce } = authorization\n  const signature = Signature.extract(authorization)\n  return [\n    chainId ? Hex.fromNumber(chainId) : '0x',\n    address,\n    nonce ? Hex.fromNumber(nonce) : '0x',\n    ...(signature ? Signature.toTuple(signature) : []),\n  ] as never\n}\n\nexport declare namespace toTuple {\n  type ReturnType<authorization extends Authorization = Authorization> =\n    Compute<Tuple<authorization extends Signature.Signature ? true : false>>\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.List} to an {@link ox#Authorization.TupleList}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization_1 = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 1,\n *   nonce: 69n,\n * })\n * const authorization_2 = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 3,\n *   nonce: 20n,\n * })\n *\n * const tuple = Authorization.toTupleList([authorization_1, authorization_2]) // [!code focus]\n * // @log: [\n * // @log:   [\n * // @log:     address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log:     chainId: 1,\n * // @log:     nonce: 69n,\n * // @log:   ],\n * // @log:   [\n * // @log:     address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log:     chainId: 3,\n * // @log:     nonce: 20n,\n * // @log:   ],\n * // @log: ]\n * ```\n *\n * @param list - An {@link ox#Authorization.List}.\n * @returns An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple list.\n */\nexport function toTupleList<\n  const list extends\n    | readonly Authorization<true>[]\n    | readonly Authorization<false>[],\n>(list?: list | undefined): toTupleList.ReturnType<list> {\n  if (!list || list.length === 0) return []\n\n  const tupleList: Mutable<TupleList> = []\n  for (const authorization of list) tupleList.push(toTuple(authorization))\n\n  return tupleList as never\n}\n\nexport declare namespace toTupleList {\n  type ReturnType<\n    list extends\n      | readonly Authorization<true>[]\n      | readonly Authorization<false>[],\n  > = Compute<\n    TupleList<list extends readonly Authorization<true>[] ? true : false>\n  >\n\n  type ErrorType = Errors.GlobalErrorType\n}\n", "export let extraEntropy = false\n\n/** @internal */\nexport function setExtraEntropy(entropy: boolean) {\n  extraEntropy = entropy\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\nimport * as Address from './Address.js'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Entropy from './internal/entropy.js'\nimport type { OneOf } from './internal/types.js'\nimport * as PublicKey from './PublicKey.js'\nimport type * as Signature from './Signature.js'\n\n/** Re-export of noble/curves secp256k1 utilities. */\nexport const noble = secp256k1\n\n/**\n * Creates a new secp256k1 ECDSA key pair consisting of a private key and its corresponding public key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const { privateKey, publicKey } = Secp256k1.createKeyPair()\n * ```\n *\n * @param options - The options to generate the key pair.\n * @returns The generated key pair containing both private and public keys.\n */\nexport function createKeyPair<as extends 'Hex' | 'Bytes' = 'Hex'>(\n  options: createKeyPair.Options<as> = {},\n): createKeyPair.ReturnType<as> {\n  const { as = 'Hex' } = options\n  const privateKey = randomPrivateKey({ as })\n  const publicKey = getPublicKey({ privateKey })\n\n  return {\n    privateKey: privateKey as never,\n    publicKey,\n  }\n}\n\nexport declare namespace createKeyPair {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n    /**\n     * Format of the returned private key.\n     * @default 'Hex'\n     */\n    as?: as | 'Hex' | 'Bytes' | undefined\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes'> = {\n    privateKey:\n      | (as extends 'Bytes' ? Bytes.Bytes : never)\n      | (as extends 'Hex' ? Hex.Hex : never)\n    publicKey: PublicKey.PublicKey\n  }\n\n  type ErrorType =\n    | Hex.fromBytes.ErrorType\n    | PublicKey.from.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Computes the secp256k1 ECDSA public key from a provided private key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const publicKey = Secp256k1.getPublicKey({ privateKey: '0x...' })\n * ```\n *\n * @param options - The options to compute the public key.\n * @returns The computed public key.\n */\nexport function getPublicKey(\n  options: getPublicKey.Options,\n): PublicKey.PublicKey {\n  const { privateKey } = options\n  const point = secp256k1.ProjectivePoint.fromPrivateKey(\n    Hex.from(privateKey).slice(2),\n  )\n  return PublicKey.from(point)\n}\n\nexport declare namespace getPublicKey {\n  type Options = {\n    /**\n     * Private key to compute the public key from.\n     */\n    privateKey: Hex.Hex | Bytes.Bytes\n  }\n\n  type ErrorType =\n    | Hex.from.ErrorType\n    | PublicKey.from.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Computes a shared secret using ECDH (Elliptic Curve Diffie-Hellman) between a private key and a public key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const { privateKey: privateKeyA } = Secp256k1.createKeyPair()\n * const { publicKey: publicKeyB } = Secp256k1.createKeyPair()\n *\n * const sharedSecret = Secp256k1.getSharedSecret({\n *   privateKey: privateKeyA,\n *   publicKey: publicKeyB\n * })\n * ```\n *\n * @param options - The options to compute the shared secret.\n * @returns The computed shared secret.\n */\nexport function getSharedSecret<as extends 'Hex' | 'Bytes' = 'Hex'>(\n  options: getSharedSecret.Options<as>,\n): getSharedSecret.ReturnType<as> {\n  const { as = 'Hex', privateKey, publicKey } = options\n  const point = secp256k1.ProjectivePoint.fromHex(\n    PublicKey.toHex(publicKey).slice(2),\n  )\n  const sharedPoint = point.multiply(\n    secp256k1.utils.normPrivateKeyToScalar(Hex.from(privateKey).slice(2)),\n  )\n  const sharedSecret = sharedPoint.toRawBytes(true) // compressed format\n  if (as === 'Hex') return Hex.fromBytes(sharedSecret) as never\n  return sharedSecret as never\n}\n\nexport declare namespace getSharedSecret {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n    /**\n     * Format of the returned shared secret.\n     * @default 'Hex'\n     */\n    as?: as | 'Hex' | 'Bytes' | undefined\n    /**\n     * Private key to use for the shared secret computation.\n     */\n    privateKey: Hex.Hex | Bytes.Bytes\n    /**\n     * Public key to use for the shared secret computation.\n     */\n    publicKey: PublicKey.PublicKey<boolean>\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType =\n    | Hex.from.ErrorType\n    | PublicKey.toHex.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Generates a random ECDSA private key on the secp256k1 curve.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const privateKey = Secp256k1.randomPrivateKey()\n * ```\n *\n * @param options - The options to generate the private key.\n * @returns The generated private key.\n */\nexport function randomPrivateKey<as extends 'Hex' | 'Bytes' = 'Hex'>(\n  options: randomPrivateKey.Options<as> = {},\n): randomPrivateKey.ReturnType<as> {\n  const { as = 'Hex' } = options\n  const bytes = secp256k1.utils.randomPrivateKey()\n  if (as === 'Hex') return Hex.fromBytes(bytes) as never\n  return bytes as never\n}\n\nexport declare namespace randomPrivateKey {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n    /**\n     * Format of the returned private key.\n     * @default 'Hex'\n     */\n    as?: as | 'Hex' | 'Bytes' | undefined\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType = Hex.fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Recovers the signing address from the signed payload and signature.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const address = Secp256k1.recoverAddress({ // [!code focus]\n *   payload: '0xdeadbeef', // [!code focus]\n *   signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The recovery options.\n * @returns The recovered address.\n */\nexport function recoverAddress(\n  options: recoverAddress.Options,\n): recoverAddress.ReturnType {\n  return Address.fromPublicKey(recoverPublicKey(options))\n}\n\nexport declare namespace recoverAddress {\n  type Options = {\n    /** Payload that was signed. */\n    payload: Hex.Hex | Bytes.Bytes\n    /** Signature of the payload. */\n    signature: Signature.Signature\n  }\n\n  type ReturnType = Address.Address\n\n  type ErrorType =\n    | Address.fromPublicKey.ErrorType\n    | recoverPublicKey.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Recovers the signing public key from the signed payload and signature.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const publicKey = Secp256k1.recoverPublicKey({ // [!code focus]\n *   payload: '0xdeadbeef', // [!code focus]\n *   signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The recovery options.\n * @returns The recovered public key.\n */\nexport function recoverPublicKey(\n  options: recoverPublicKey.Options,\n): PublicKey.PublicKey {\n  const { payload, signature } = options\n  const { r, s, yParity } = signature\n  const signature_ = new secp256k1.Signature(\n    BigInt(r),\n    BigInt(s),\n  ).addRecoveryBit(yParity)\n  const point = signature_.recoverPublicKey(Hex.from(payload).substring(2))\n  return PublicKey.from(point)\n}\n\nexport declare namespace recoverPublicKey {\n  type Options = {\n    /** Payload that was signed. */\n    payload: Hex.Hex | Bytes.Bytes\n    /** Signature of the payload. */\n    signature: Signature.Signature\n  }\n\n  type ErrorType =\n    | PublicKey.from.ErrorType\n    | Hex.from.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Signs the payload with the provided private key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ // [!code focus]\n *   payload: '0xdeadbeef', // [!code focus]\n *   privateKey: '0x...' // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The signing options.\n * @returns The ECDSA {@link ox#Signature.Signature}.\n */\nexport function sign(options: sign.Options): Signature.Signature {\n  const {\n    extraEntropy = Entropy.extraEntropy,\n    hash,\n    payload,\n    privateKey,\n  } = options\n  const { r, s, recovery } = secp256k1.sign(\n    Bytes.from(payload),\n    Bytes.from(privateKey),\n    {\n      extraEntropy:\n        typeof extraEntropy === 'boolean'\n          ? extraEntropy\n          : Hex.from(extraEntropy).slice(2),\n      lowS: true,\n      ...(hash ? { prehash: true } : {}),\n    },\n  )\n  return {\n    r,\n    s,\n    yParity: recovery,\n  }\n}\n\nexport declare namespace sign {\n  type Options = {\n    /**\n     * Extra entropy to add to the signing process. Setting to `false` will disable it.\n     * @default true\n     */\n    extraEntropy?: boolean | Hex.Hex | Bytes.Bytes | undefined\n    /**\n     *  If set to `true`, the payload will be hashed (sha256) before being signed.\n     */\n    hash?: boolean | undefined\n    /**\n     * Payload to sign.\n     */\n    payload: Hex.Hex | Bytes.Bytes\n    /**\n     * ECDSA private key.\n     */\n    privateKey: Hex.Hex | Bytes.Bytes\n  }\n\n  type ErrorType = Bytes.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Verifies a payload was signed by the provided address.\n *\n * @example\n * ### Verify with Ethereum Address\n *\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const verified = Secp256k1.verify({ // [!code focus]\n *   address: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', // [!code focus]\n *   payload: '0xdeadbeef', // [!code focus]\n *   signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### Verify with Public Key\n *\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const privateKey = '0x...'\n * const publicKey = Secp256k1.getPublicKey({ privateKey })\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey })\n *\n * const verified = Secp256k1.verify({ // [!code focus]\n *   publicKey, // [!code focus]\n *   payload: '0xdeadbeef', // [!code focus]\n *   signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The verification options.\n * @returns Whether the payload was signed by the provided address.\n */\nexport function verify(options: verify.Options): boolean {\n  const { address, hash, payload, publicKey, signature } = options\n  if (address)\n    return Address.isEqual(address, recoverAddress({ payload, signature }))\n  return secp256k1.verify(\n    signature,\n    Bytes.from(payload),\n    PublicKey.toBytes(publicKey),\n    ...(hash ? [{ prehash: true, lowS: true }] : []),\n  )\n}\n\nexport declare namespace verify {\n  type Options = {\n    /** If set to `true`, the payload will be hashed (sha256) before being verified. */\n    hash?: boolean | undefined\n    /** Payload that was signed. */\n    payload: Hex.Hex | Bytes.Bytes\n  } & OneOf<\n    | {\n        /** Address that signed the payload. */\n        address: Address.Address\n        /** Signature of the payload. */\n        signature: Signature.Signature\n      }\n    | {\n        /** Public key that signed the payload. */\n        publicKey: PublicKey.PublicKey<boolean>\n        /** Signature of the payload. */\n        signature: Signature.Signature<false>\n      }\n  >\n\n  type ErrorType = Errors.GlobalErrorType\n}\n", "import * as AbiParameters from '../core/AbiParameters.js'\nimport type * as Address from '../core/Address.js'\nimport * as Authorization from '../core/Authorization.js'\nimport * as Errors from '../core/Errors.js'\nimport * as Hex from '../core/Hex.js'\nimport * as Secp256k1 from '../core/Secp256k1.js'\nimport * as Signature from '../core/Signature.js'\n\n/** Unwrapped ERC-8010 signature. */\nexport type Unwrapped = {\n  /** Authorization signed by the delegatee. */\n  authorization: Authorization.Authorization<true>\n  /** Data to initialize the delegation. */\n  data?: Hex.Hex | undefined\n  /** The original signature. */\n  signature: Hex.Hex\n  /** Address of the initializer. */\n  to?: Address.Address | undefined\n}\n\n/** Wrapped ERC-8010 signature. */\nexport type Wrapped = Hex.Hex\n\n/**\n * Magic bytes used to identify ERC-8010 wrapped signatures.\n */\nexport const magicBytes =\n  '0x8010801080108010801080108010801080108010801080108010801080108010' as const\n\n/** Suffix ABI parameters for the ERC-8010 wrapped signature. */\nexport const suffixParameters = AbiParameters.from(\n  '(uint256 chainId, address delegation, uint256 nonce, uint8 yParity, uint256 r, uint256 s), address to, bytes data',\n)\n\n/**\n * Asserts that the wrapped signature is valid.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc8010 } from 'ox/erc8010'\n *\n * SignatureErc8010.assert('0xdeadbeef')\n * // @error: InvalidWrappedSignatureError: Value `0xdeadbeef` is an invalid ERC-8010 wrapped signature.\n * ```\n *\n * @param value - The value to assert.\n */\nexport function assert(value: Unwrapped | Wrapped) {\n  if (typeof value === 'string') {\n    if (Hex.slice(value, -32) !== magicBytes)\n      throw new InvalidWrappedSignatureError(value)\n  } else Signature.assert(value.authorization)\n}\n\nexport declare namespace assert {\n  type ErrorType =\n    | InvalidWrappedSignatureError\n    | Hex.slice.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Parses an [ERC-8010 wrapped signature](https://github.com/jxom/ERCs/blob/16f7e3891fff2e1e9c25dea0485497739db8a816/ERCS/erc-8010.md) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1 } from 'ox'\n * import { SignatureErc8010 } from 'ox/erc8010' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n *   payload: '0x...',\n *   privateKey: '0x...',\n * })\n *\n * // Instantiate from serialized format. // [!code focus]\n * const wrapped = SignatureErc8010.from('0x...') // [!code focus]\n * // @log: { authorization: { ... }, data: '0x...', signature: { ... } } // [!code focus]\n *\n * // Instantiate from constituent parts. // [!code focus]\n * const wrapped = SignatureErc8010.from({ // [!code focus]\n *   authorization: { ... }, // [!code focus]\n *   data: '0x...', // [!code focus]\n *   signature, // [!code focus]\n * })\n * // @log: { authorization: { ... }, data: '0x...', signature: { ... } }\n * ```\n *\n * @param value - Value to parse.\n * @returns Parsed value.\n */\nexport function from(value: Unwrapped | Wrapped): Unwrapped {\n  if (typeof value === 'string') return unwrap(value)\n  return value\n}\n\nexport declare namespace from {\n  type ErrorType = unwrap.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Unwraps an [ERC-8010 wrapped signature](https://github.com/jxom/ERCs/blob/16f7e3891fff2e1e9c25dea0485497739db8a816/ERCS/erc-8010.md) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc8010 } from 'ox/erc8010'\n *\n * const { authorization, data, signature } = SignatureErc8010.unwrap('0x...')\n * ```\n *\n * @param wrapped - Wrapped signature to unwrap.\n * @returns Unwrapped signature.\n */\nexport function unwrap(wrapped: Wrapped): Unwrapped {\n  assert(wrapped)\n\n  const suffixLength = Hex.toNumber(Hex.slice(wrapped, -64, -32))\n  const suffix = Hex.slice(wrapped, -suffixLength - 64, -64)\n  const signature = Hex.slice(wrapped, 0, -suffixLength - 64)\n\n  const [auth, to, data] = AbiParameters.decode(suffixParameters, suffix)\n\n  const authorization = Authorization.from({\n    address: auth.delegation,\n    chainId: Number(auth.chainId),\n    nonce: auth.nonce,\n    yParity: auth.yParity,\n    r: auth.r,\n    s: auth.s,\n  })\n\n  return {\n    authorization,\n    signature,\n    ...(data && data !== '0x' ? { data, to } : {}),\n  }\n}\n\nexport declare namespace unwrap {\n  type ErrorType = assert.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Wraps a signature into [ERC-8010 format](https://github.com/jxom/ERCs/blob/16f7e3891fff2e1e9c25dea0485497739db8a816/ERCS/erc-8010.md).\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1, Signature } from 'ox'\n * import { SignatureErc8010 } from 'ox/erc8010' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n *   payload: '0x...',\n *   privateKey: '0x...',\n * })\n *\n * const wrapped = SignatureErc8010.wrap({ // [!code focus]\n *   authorization: { ... }, // [!code focus]\n *   data: '0xdeadbeef', // [!code focus]\n *   signature: Signature.toHex(signature), // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param value - Values to wrap.\n * @returns Wrapped signature.\n */\nexport function wrap(value: Unwrapped): Wrapped {\n  const { data, signature } = value\n\n  assert(value)\n\n  const self = Secp256k1.recoverAddress({\n    payload: Authorization.getSignPayload(value.authorization),\n    signature: Signature.from(value.authorization),\n  })\n\n  const suffix = AbiParameters.encode(suffixParameters, [\n    {\n      ...value.authorization,\n      delegation: value.authorization.address,\n      chainId: BigInt(value.authorization.chainId),\n    },\n    value.to ?? self,\n    data ?? '0x',\n  ])\n  const suffixLength = Hex.fromNumber(Hex.size(suffix), { size: 32 })\n  return Hex.concat(signature, suffix, suffixLength, magicBytes)\n}\n\nexport declare namespace wrap {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Validates a wrapped signature. Returns `true` if the wrapped signature is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc8010 } from 'ox/erc8010'\n *\n * const valid = SignatureErc8010.validate('0xdeadbeef')\n * // @log: false\n * ```\n *\n * @param value - The value to validate.\n * @returns `true` if the value is valid, `false` otherwise.\n */\nexport function validate(value: Unwrapped | Wrapped): boolean {\n  try {\n    assert(value)\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/** Thrown when the ERC-8010 wrapped signature is invalid. */\nexport class InvalidWrappedSignatureError extends Errors.BaseError {\n  override readonly name = 'SignatureErc8010.InvalidWrappedSignatureError'\n\n  constructor(wrapped: Wrapped) {\n    super(`Value \\`${wrapped}\\` is an invalid ERC-8010 wrapped signature.`)\n  }\n}\n", "/** @entrypointCategory ERCs */\n// biome-ignore lint/complexity/noUselessEmptyExport: tsdoc\nexport type {}\n\n/**\n * Utility functions for working with [ERC-8010 wrapped signatures](https://eips.ethereum.org/EIPS/eip-8010#specification).\n *\n * @example\n * ```ts twoslash\n * import { Authorization, PersonalMessage, Secp256k1, Signature } from 'ox'\n * import { SignatureErc8010 } from 'ox/erc8010' // [!code focus]\n *\n * const authorization = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 1,\n *   nonce: 69n,\n * })\n *\n * const authorizationSignature = Secp256k1.sign({\n *   payload: Authorization.getSignPayload(authorization),\n *   privateKey: '0x...',\n * })\n *\n * const authorizationSigned = Authorization.from(authorization, {\n *   signature: authorizationSignature,\n * })\n *\n * const signature = Secp256k1.sign({\n *   payload: PersonalMessage.getSignPayload('0xdeadbeef'),\n *   privateKey: '0x...',\n * })\n *\n * const wrapped = SignatureErc8010.wrap({ // [!code focus]\n *   authorization: authorizationSigned, // [!code focus]\n *   data: '0xcafebabe', // [!code focus]\n *   signature: Signature.toHex(signature), // [!code focus]\n * }) // [!code focus]\n * // @log: '0x000000000000000000000000cafebabecafebabecafebabecafebabecafebabe000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000004deadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041fa78c5905fb0b9d6066ef531f962a62bc6ef0d5eb59ecb134056d206f75aaed7780926ff2601a935c2c79707d9e1799948c9f19dcdde1e090e903b19a07923d01c000000000000000000000000000000000000000000000000000000000000008010801080108010801080108010801080108010801080108010801080108010'\n * ```\n *\n * @category ERC-8010\n */\nexport * as SignatureErc8010 from './SignatureErc8010.js'\n", "import { SignatureErc8010 } from 'ox/erc8010'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\n\nexport type IsErc8010SignatureParameters = Hex\nexport type IsErc8010SignatureReturnType = boolean\nexport type IsErc8010SignatureErrorType = ErrorType\n\n/** Whether or not the signature is an ERC-8010 formatted signature. */\nexport function isErc8010Signature(\n  signature: IsErc8010SignatureParameters,\n): IsErc8010SignatureReturnType {\n  return SignatureErc8010.validate(signature)\n}\n", "import type { Address } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { OneOf, Prettify } from '../../types/utils.js'\nimport {\n  type DecodeAbiParametersErrorType,\n  decodeAbiParameters,\n} from '../abi/decodeAbiParameters.js'\nimport {\n  type IsErc6492SignatureErrorType,\n  isErc6492Signature,\n} from './isErc6492Signature.js'\n\nexport type ParseErc6492SignatureParameters = Hex\n\nexport type ParseErc6492SignatureReturnType = Prettify<\n  OneOf<\n    | {\n        /**\n         * The ERC-4337 Account Factory or preparation address to use for counterfactual verification.\n         * `undefined` if the signature is not in ERC-6492 format.\n         */\n        address: Address\n        /**\n         * Calldata to pass to deploy account (if not deployed) for counterfactual verification.\n         * `undefined` if the signature is not in ERC-6492 format.\n         */\n        data: Hex\n        /** The original signature. */\n        signature: Hex\n      }\n    | {\n        /** The original signature. */\n        signature: Hex\n      }\n  >\n>\n\nexport type ParseErc6492SignatureErrorType =\n  | IsErc6492SignatureErrorType\n  | DecodeAbiParametersErrorType\n  | ErrorType\n\n/**\n * @description Parses a hex-formatted ERC-6492 flavoured signature.\n * If the signature is not in ERC-6492 format, then the underlying (original) signature is returned.\n *\n * @param signature ERC-6492 signature in hex format.\n * @returns The parsed ERC-6492 signature.\n *\n * @example\n * parseSignature('0x000000000000000000000000cafebabecafebabecafebabecafebabecafebabe000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000004deadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a461f509887bd19e312c0c58467ce8ff8e300d3c1a90b608a760c5b80318eaf15fe57c96f9175d6cd4daad4663763baa7e78836e067d0163e9a2ccf2ff753f5b1b000000000000000000000000000000000000000000000000000000000000006492649264926492649264926492649264926492649264926492649264926492')\n * // { address: '0x...', data: '0x...', signature: '0x...' }\n */\nexport function parseErc6492Signature(\n  signature: ParseErc6492SignatureParameters,\n): ParseErc6492SignatureReturnType {\n  if (!isErc6492Signature(signature)) return { signature }\n\n  const [address, data, signature_] = decodeAbiParameters(\n    [{ type: 'address' }, { type: 'bytes' }, { type: 'bytes' }],\n    signature,\n  )\n  return { address, data, signature: signature_ }\n}\n", "import type { Address } from 'abitype'\nimport { SignatureErc8010 } from 'ox/erc8010'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { SignedAuthorization } from '../../types/authorization.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { OneOf, Prettify } from '../../types/utils.js'\nimport { numberToHex } from '../encoding/toHex.js'\nimport {\n  type IsErc8010SignatureErrorType,\n  isErc8010Signature,\n} from './isErc8010Signature.js'\n\nexport type ParseErc8010SignatureParameters = Hex\n\nexport type ParseErc8010SignatureReturnType = Prettify<\n  OneOf<\n    | {\n        /** Address of the initializer. */\n        address?: Address | undefined\n        /** Authorization signed by the delegatee. */\n        authorization: SignedAuthorization\n        /** Data to initialize the delegation. */\n        data?: Hex | undefined\n        /** The original signature. */\n        signature: Hex\n      }\n    | {\n        /** The original signature. */\n        signature: Hex\n      }\n  >\n>\n\nexport type ParseErc8010SignatureErrorType =\n  | IsErc8010SignatureErrorType\n  | ErrorType\n\n/**\n * @description Parses a hex-formatted ERC-8010 flavoured signature.\n * If the signature is not in ERC-8010 format, then the underlying (original) signature is returned.\n *\n * @param signature ERC-8010 signature in hex format.\n * @returns The parsed ERC-8010 signature.\n */\nexport function parseErc8010Signature(\n  signature: ParseErc8010SignatureParameters,\n): ParseErc8010SignatureReturnType {\n  if (!isErc8010Signature(signature)) return { signature }\n\n  const {\n    authorization: authorization_ox,\n    to,\n    ...rest\n  } = SignatureErc8010.unwrap(signature)\n  return {\n    authorization: {\n      address: authorization_ox.address,\n      chainId: authorization_ox.chainId,\n      nonce: Number(authorization_ox.nonce),\n      r: numberToHex(authorization_ox.r, { size: 32 }),\n      s: numberToHex(authorization_ox.s, { size: 32 }),\n      yParity: authorization_ox.yParity,\n    },\n    ...(to ? { address: to } : {}),\n    ...rest,\n  }\n}\n", "import type { Address } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ByteArray,\n  Hex,\n  SignableMessage,\n  Signature,\n} from '../../types/misc.js'\nimport { type HashMessageErrorType, hashMessage } from './hashMessage.js'\nimport {\n  type RecoverAddressErrorType,\n  recoverAddress,\n} from './recoverAddress.js'\n\nexport type RecoverMessageAddressParameters = {\n  message: SignableMessage\n  signature: Hex | ByteArray | Signature\n}\n\nexport type RecoverMessageAddressReturnType = Address\n\nexport type RecoverMessageAddressErrorType =\n  | HashMessageErrorType\n  | RecoverAddressErrorType\n  | ErrorType\n\nexport async function recoverMessageAddress({\n  message,\n  signature,\n}: RecoverMessageAddressParameters): Promise<RecoverMessageAddressReturnType> {\n  return recoverAddress({ hash: hashMessage(message), signature })\n}\n", "import type { Address, TypedData } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { TypedDataDefinition } from '../../types/typedData.js'\nimport { type HashTypedDataErrorType, hashTypedData } from './hashTypedData.js'\nimport {\n  type RecoverAddressErrorType,\n  recoverAddress,\n} from './recoverAddress.js'\n\nexport type RecoverTypedDataAddressParameters<\n  typedData extends TypedData | Record<string, unknown> = TypedData,\n  primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n> = TypedDataDefinition<typedData, primaryType> & {\n  signature: Hex | ByteArray | Signature\n}\n\nexport type RecoverTypedDataAddressReturnType = Address\n\nexport type RecoverTypedDataAddressErrorType =\n  | RecoverAddressErrorType\n  | HashTypedDataErrorType\n  | ErrorType\n\nexport async function recoverTypedDataAddress<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n>(\n  parameters: RecoverTypedDataAddressParameters<typedData, primaryType>,\n): Promise<RecoverTypedDataAddressReturnType> {\n  const { domain, message, primaryType, signature, types } =\n    parameters as unknown as RecoverTypedDataAddressParameters\n  return recoverAddress({\n    hash: hashTypedData({\n      domain,\n      message,\n      primaryType,\n      types,\n    }),\n    signature,\n  })\n}\n", "import type { Address } from 'abitype'\nimport { erc6492MagicBytes } from '../../constants/bytes.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { encodeAbiParameters } from '../abi/encodeAbiParameters.js'\nimport { concatHex } from '../data/concat.js'\nimport { hexToBytes } from '../encoding/toBytes.js'\n\ntype To = 'bytes' | 'hex'\n\nexport type SerializeErc6492SignatureParameters<to extends To = 'hex'> = {\n  /** The ERC-4337 Account Factory address to use for counterfactual verification. */\n  address: Address\n  /** Calldata to pass to deploy account (if not deployed) for counterfactual verification. */\n  data: Hex\n  /** The original signature. */\n  signature: Hex\n  to?: to | To | undefined\n}\n\nexport type SerializeErc6492SignatureReturnType<to extends To = 'hex'> =\n  | (to extends 'hex' ? Hex : never)\n  | (to extends 'bytes' ? ByteArray : never)\n\nexport type SerializeErc6492SignatureErrorType = ErrorType\n\n/**\n * @description Serializes a ERC-6492 flavoured signature into hex format.\n *\n * @param signature ERC-6492 signature in object format.\n * @returns ERC-6492 signature in hex format.\n *\n * @example\n * serializeSignature({ address: '0x...', data: '0x...', signature: '0x...' })\n * // '0x000000000000000000000000cafebabecafebabecafebabecafebabecafebabe000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000004deadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a461f509887bd19e312c0c58467ce8ff8e300d3c1a90b608a760c5b80318eaf15fe57c96f9175d6cd4daad4663763baa7e78836e067d0163e9a2ccf2ff753f5b1b000000000000000000000000000000000000000000000000000000000000006492649264926492649264926492649264926492649264926492649264926492'\n */\nexport function serializeErc6492Signature<to extends To = 'hex'>(\n  parameters: SerializeErc6492SignatureParameters<to>,\n): SerializeErc6492SignatureReturnType<to> {\n  const { address, data, signature, to = 'hex' } = parameters\n  const signature_ = concatHex([\n    encodeAbiParameters(\n      [{ type: 'address' }, { type: 'bytes' }, { type: 'bytes' }],\n      [address, data, signature],\n    ),\n    erc6492MagicBytes,\n  ])\n\n  if (to === 'hex') return signature_ as SerializeErc6492SignatureReturnType<to>\n  return hexToBytes(signature_) as SerializeErc6492SignatureReturnType<to>\n}\n", "import type { Address } from 'abitype'\nimport { SignatureErc8010 } from 'ox/erc8010'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { SignedAuthorization } from '../../types/authorization.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { hexToBytes } from '../encoding/toBytes.js'\n\ntype To = 'bytes' | 'hex'\n\nexport type SerializeErc8010SignatureParameters<to extends To = 'hex'> = {\n  /** Address of the initializer. */\n  address?: Address | undefined\n  /** Authorization signed by the delegatee. */\n  authorization: SignedAuthorization\n  /** Data to initialize the delegation. */\n  data?: Hex | undefined\n  /** The original signature. */\n  signature: Hex\n  to?: to | To | undefined\n}\n\nexport type SerializeErc8010SignatureReturnType<to extends To = 'hex'> =\n  | (to extends 'hex' ? Hex : never)\n  | (to extends 'bytes' ? ByteArray : never)\n\nexport type SerializeErc8010SignatureErrorType = ErrorType\n\n/**\n * @description Serializes a ERC-8010 flavoured signature into hex format.\n *\n * @param signature ERC-8010 signature in object format.\n * @returns ERC-8010 signature in hex format.\n */\nexport function serializeErc8010Signature<to extends To = 'hex'>(\n  parameters: SerializeErc8010SignatureParameters<to>,\n): SerializeErc8010SignatureReturnType<to> {\n  const { address, data, signature, to = 'hex' } = parameters\n  const signature_ = SignatureErc8010.wrap({\n    authorization: {\n      address: parameters.authorization.address,\n      chainId: parameters.authorization.chainId,\n      nonce: BigInt(parameters.authorization.nonce),\n      r: BigInt(parameters.authorization.r),\n      s: BigInt(parameters.authorization.s),\n      yParity: parameters.authorization.yParity!,\n    },\n    data,\n    signature,\n    to: address,\n  })\n  if (to === 'hex') return signature_ as SerializeErc8010SignatureReturnType<to>\n  return hexToBytes(signature_) as SerializeErc8010SignatureReturnType<to>\n}\n", "import type { Address } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hash, Hex, Signature } from '../../types/misc.js'\nimport { type GetAddressErrorType, getAddress } from '../address/getAddress.js'\nimport {\n  type IsAddressEqualErrorType,\n  isAddressEqual,\n} from '../address/isAddressEqual.js'\nimport {\n  type RecoverAddressErrorType,\n  recoverAddress,\n} from './recoverAddress.js'\n\nexport type VerifyHashParameters = {\n  /** The address that signed the original message. */\n  address: Address\n  /** The hash to be verified. */\n  hash: Hash\n  /** The signature that was generated by signing the message with the address's private key. */\n  signature: Hex | ByteArray | Signature\n}\n\nexport type VerifyHashReturnType = boolean\n\nexport type VerifyHashErrorType =\n  | IsAddressEqualErrorType\n  | GetAddressErrorType\n  | RecoverAddressErrorType\n  | ErrorType\n\n/**\n * Verify that a message was signed by the provided address.\n *\n * Note:  Only supports Externally Owned Accounts. Does not support Contract Accounts.\n *        It is highly recommended to use `publicClient.verifyHash` instead to ensure\n *        wallet interoperability.\n *\n * - Docs {@link https://viem.sh/docs/utilities/verifyHash}\n *\n * @param parameters - {@link VerifyHashParameters}\n * @returns Whether or not the signature is valid. {@link VerifyHashReturnType}\n */\nexport async function verifyHash({\n  address,\n  hash,\n  signature,\n}: VerifyHashParameters): Promise<VerifyHashReturnType> {\n  return isAddressEqual(\n    getAddress(address),\n    await recoverAddress({ hash, signature }),\n  )\n}\n", "import type { Address } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ByteArray,\n  Hex,\n  SignableMessage,\n  Signature,\n} from '../../types/misc.js'\nimport { type GetAddressErrorType, getAddress } from '../address/getAddress.js'\nimport {\n  type IsAddressEqualErrorType,\n  isAddressEqual,\n} from '../address/isAddressEqual.js'\nimport {\n  type RecoverMessageAddressErrorType,\n  recoverMessageAddress,\n} from './recoverMessageAddress.js'\n\nexport type VerifyMessageParameters = {\n  /** The address that signed the original message. */\n  address: Address\n  /** The message to be verified. */\n  message: SignableMessage\n  /** The signature that was generated by signing the message with the address's private key. */\n  signature: Hex | ByteArray | Signature\n}\n\nexport type VerifyMessageReturnType = boolean\n\nexport type VerifyMessageErrorType =\n  | IsAddressEqualErrorType\n  | GetAddressErrorType\n  | RecoverMessageAddressErrorType\n  | ErrorType\n\n/**\n * Verify that a message was signed by the provided address.\n *\n * Note:  Only supports Externally Owned Accounts. Does not support Contract Accounts.\n *        It is highly recommended to use `publicClient.verifyMessage` instead to ensure\n *        wallet interoperability.\n *\n * - Docs {@link https://viem.sh/docs/utilities/verifyMessage}\n *\n * @param parameters - {@link VerifyMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifyMessageReturnType}\n */\nexport async function verifyMessage({\n  address,\n  message,\n  signature,\n}: VerifyMessageParameters): Promise<VerifyMessageReturnType> {\n  return isAddressEqual(\n    getAddress(address),\n    await recoverMessageAddress({ message, signature }),\n  )\n}\n", "import type { Address, TypedData } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { TypedDataDefinition } from '../../types/typedData.js'\nimport { type GetAddressErrorType, getAddress } from '../address/getAddress.js'\nimport {\n  type IsAddressEqualErrorType,\n  isAddressEqual,\n} from '../address/isAddressEqual.js'\nimport {\n  type RecoverTypedDataAddressParameters,\n  recoverTypedDataAddress,\n} from './recoverTypedDataAddress.js'\n\nexport type VerifyTypedDataParameters<\n  typedData extends TypedData | Record<string, unknown> = TypedData,\n  primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n> = TypedDataDefinition<typedData, primaryType> & {\n  /** The address to verify the typed data for. */\n  address: Address\n  /** The signature to verify */\n  signature: Hex | ByteArray | Signature\n}\n\nexport type VerifyTypedDataReturnType = boolean\n\nexport type VerifyTypedDataErrorType =\n  | IsAddressEqualErrorType\n  | GetAddressErrorType\n  | RecoverTypedDataAddressParameters\n  | ErrorType\n\n/**\n * Verify that typed data was signed by the provided address.\n *\n * Note:  Only supports Externally Owned Accounts. Does not support Contract Accounts.\n *        It is highly recommended to use `publicClient.verifyTypedData` instead to ensure\n *        wallet interoperability.\n *\n * - Docs {@link https://viem.sh/docs/utilities/verifyTypedData}\n *\n * @param parameters - {@link VerifyTypedDataParameters}\n * @returns Whether or not the signature is valid. {@link VerifyTypedDataReturnType}\n */\nexport async function verifyTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n>(\n  parameters: VerifyTypedDataParameters<typedData, primaryType>,\n): Promise<VerifyTypedDataReturnType> {\n  const { address, domain, message, primaryType, signature, types } =\n    parameters as unknown as VerifyTypedDataParameters\n  return isAddressEqual(\n    getAddress(address),\n    await recoverTypedDataAddress({\n      domain,\n      message,\n      primaryType,\n      signature,\n      types,\n    } as RecoverTypedDataAddressParameters),\n  )\n}\n", "import {\n  InvalidSerializedTransactionTypeError,\n  type InvalidSerializedTransactionTypeErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../index.js'\nimport type {\n  TransactionSerialized,\n  TransactionSerializedEIP1559,\n  TransactionSerializedEIP2930,\n  TransactionSerializedEIP4844,\n  TransactionSerializedEIP7702,\n  TransactionSerializedGeneric,\n  TransactionSerializedLegacy,\n  TransactionType,\n} from '../../types/transaction.js'\nimport type { IsNarrowable, IsNever } from '../../types/utils.js'\nimport { type SliceHexErrorType, sliceHex } from '../data/slice.js'\nimport { type HexToNumberErrorType, hexToNumber } from '../encoding/fromHex.js'\n\nexport type GetSerializedTransactionType<\n  serializedTransaction extends\n    TransactionSerializedGeneric = TransactionSerialized,\n  result =\n    | (serializedTransaction extends TransactionSerializedEIP1559\n        ? 'eip1559'\n        : never)\n    | (serializedTransaction extends TransactionSerializedEIP2930\n        ? 'eip2930'\n        : never)\n    | (serializedTransaction extends TransactionSerializedEIP4844\n        ? 'eip4844'\n        : never)\n    | (serializedTransaction extends TransactionSerializedEIP7702\n        ? 'eip7702'\n        : never)\n    | (serializedTransaction extends TransactionSerializedLegacy\n        ? 'legacy'\n        : never),\n> = IsNarrowable<serializedTransaction, Hex> extends true\n  ? IsNever<result> extends false\n    ? result\n    : 'legacy'\n  : TransactionType\n\nexport type GetSerializedTransactionTypeErrorType =\n  | HexToNumberErrorType\n  | InvalidSerializedTransactionTypeErrorType\n  | SliceHexErrorType\n  | ErrorType\n\nexport function getSerializedTransactionType<\n  const serializedTransaction extends TransactionSerializedGeneric,\n>(\n  serializedTransaction: serializedTransaction,\n): GetSerializedTransactionType<serializedTransaction> {\n  const serializedType = sliceHex(serializedTransaction, 0, 1)\n\n  if (serializedType === '0x04')\n    return 'eip7702' as GetSerializedTransactionType<serializedTransaction>\n\n  if (serializedType === '0x03')\n    return 'eip4844' as GetSerializedTransactionType<serializedTransaction>\n\n  if (serializedType === '0x02')\n    return 'eip1559' as GetSerializedTransactionType<serializedTransaction>\n\n  if (serializedType === '0x01')\n    return 'eip2930' as GetSerializedTransactionType<serializedTransaction>\n\n  if (serializedType !== '0x' && hexToNumber(serializedType) >= 0xc0)\n    return 'legacy' as GetSerializedTransactionType<serializedTransaction>\n\n  throw new InvalidSerializedTransactionTypeError({ serializedType })\n}\n", "import {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport {\n  InvalidLegacyVError,\n  type InvalidLegacyVErrorType,\n  InvalidSerializedTransactionError,\n  type InvalidSerializedTransactionErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  SerializedAuthorizationList,\n  SignedAuthorizationList,\n} from '../../types/authorization.js'\nimport type { Hex, Signature } from '../../types/misc.js'\nimport type {\n  AccessList,\n  TransactionRequestEIP2930,\n  TransactionRequestLegacy,\n  TransactionSerializable,\n  TransactionSerializableEIP1559,\n  TransactionSerializableEIP2930,\n  TransactionSerializableEIP4844,\n  TransactionSerializableEIP7702,\n  TransactionSerializableLegacy,\n  TransactionSerialized,\n  TransactionSerializedEIP1559,\n  TransactionSerializedEIP2930,\n  TransactionSerializedEIP4844,\n  TransactionSerializedEIP7702,\n  TransactionSerializedGeneric,\n  TransactionType,\n} from '../../types/transaction.js'\nimport type { IsNarrowable, Mutable } from '../../types/utils.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport { toBlobSidecars } from '../blob/toBlobSidecars.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type PadHexErrorType, padHex } from '../data/pad.js'\nimport { trim } from '../data/trim.js'\nimport {\n  type HexToBigIntErrorType,\n  type HexToNumberErrorType,\n  hexToBigInt,\n  hexToNumber,\n} from '../encoding/fromHex.js'\nimport { type FromRlpErrorType, fromRlp } from '../encoding/fromRlp.js'\nimport type { RecursiveArray } from '../encoding/toRlp.js'\nimport { isHash } from '../hash/isHash.js'\n\nimport {\n  type AssertTransactionEIP1559ErrorType,\n  type AssertTransactionEIP2930ErrorType,\n  type AssertTransactionEIP4844ErrorType,\n  type AssertTransactionEIP7702ErrorType,\n  type AssertTransactionLegacyErrorType,\n  assertTransactionEIP1559,\n  assertTransactionEIP2930,\n  assertTransactionEIP4844,\n  assertTransactionEIP7702,\n  assertTransactionLegacy,\n} from './assertTransaction.js'\nimport {\n  type GetSerializedTransactionType,\n  type GetSerializedTransactionTypeErrorType,\n  getSerializedTransactionType,\n} from './getSerializedTransactionType.js'\n\nexport type ParseTransactionReturnType<\n  serialized extends TransactionSerializedGeneric = TransactionSerialized,\n  type extends TransactionType = GetSerializedTransactionType<serialized>,\n> = IsNarrowable<serialized, Hex> extends true\n  ?\n      | (type extends 'eip1559' ? TransactionSerializableEIP1559 : never)\n      | (type extends 'eip2930' ? TransactionSerializableEIP2930 : never)\n      | (type extends 'eip4844'\n          ? TransactionSerializableEIP4844<bigint, number, false>\n          : never)\n      | (type extends 'eip7702' ? TransactionSerializableEIP7702 : never)\n      | (type extends 'legacy' ? TransactionSerializableLegacy : never)\n  : TransactionSerializable\n\nexport type ParseTransactionErrorType =\n  | GetSerializedTransactionTypeErrorType\n  | ParseTransactionEIP1559ErrorType\n  | ParseTransactionEIP2930ErrorType\n  | ParseTransactionEIP4844ErrorType\n  | ParseTransactionEIP7702ErrorType\n  | ParseTransactionLegacyErrorType\n\nexport function parseTransaction<\n  const serialized extends TransactionSerializedGeneric,\n>(serializedTransaction: serialized): ParseTransactionReturnType<serialized> {\n  const type = getSerializedTransactionType(serializedTransaction)\n\n  if (type === 'eip1559')\n    return parseTransactionEIP1559(\n      serializedTransaction as TransactionSerializedEIP1559,\n    ) as ParseTransactionReturnType<serialized>\n\n  if (type === 'eip2930')\n    return parseTransactionEIP2930(\n      serializedTransaction as TransactionSerializedEIP2930,\n    ) as ParseTransactionReturnType<serialized>\n\n  if (type === 'eip4844')\n    return parseTransactionEIP4844(\n      serializedTransaction as TransactionSerializedEIP4844,\n    ) as ParseTransactionReturnType<serialized>\n\n  if (type === 'eip7702')\n    return parseTransactionEIP7702(\n      serializedTransaction as TransactionSerializedEIP7702,\n    ) as ParseTransactionReturnType<serialized>\n\n  return parseTransactionLegacy(\n    serializedTransaction,\n  ) as ParseTransactionReturnType<serialized>\n}\n\ntype ParseTransactionEIP7702ErrorType =\n  | ToTransactionArrayErrorType\n  | AssertTransactionEIP7702ErrorType\n  | ToTransactionArrayErrorType\n  | HexToBigIntErrorType\n  | HexToNumberErrorType\n  | InvalidLegacyVErrorType\n  | InvalidSerializedTransactionErrorType\n  | IsHexErrorType\n  | ParseAuthorizationListErrorType\n  | ParseEIP155SignatureErrorType\n  | ErrorType\n\nfunction parseTransactionEIP7702(\n  serializedTransaction: TransactionSerializedEIP7702,\n): TransactionSerializableEIP7702 {\n  const transactionArray = toTransactionArray(serializedTransaction)\n\n  const [\n    chainId,\n    nonce,\n    maxPriorityFeePerGas,\n    maxFeePerGas,\n    gas,\n    to,\n    value,\n    data,\n    accessList,\n    authorizationList,\n    v,\n    r,\n    s,\n  ] = transactionArray\n\n  if (transactionArray.length !== 10 && transactionArray.length !== 13)\n    throw new InvalidSerializedTransactionError({\n      attributes: {\n        chainId,\n        nonce,\n        maxPriorityFeePerGas,\n        maxFeePerGas,\n        gas,\n        to,\n        value,\n        data,\n        accessList,\n        authorizationList,\n        ...(transactionArray.length > 9\n          ? {\n              v,\n              r,\n              s,\n            }\n          : {}),\n      },\n      serializedTransaction,\n      type: 'eip7702',\n    })\n\n  const transaction = {\n    chainId: hexToNumber(chainId as Hex),\n    type: 'eip7702',\n  } as TransactionSerializableEIP7702\n  if (isHex(to) && to !== '0x') transaction.to = to\n  if (isHex(gas) && gas !== '0x') transaction.gas = hexToBigInt(gas)\n  if (isHex(data) && data !== '0x') transaction.data = data\n  if (isHex(nonce)) transaction.nonce = nonce === '0x' ? 0 : hexToNumber(nonce)\n  if (isHex(value) && value !== '0x') transaction.value = hexToBigInt(value)\n  if (isHex(maxFeePerGas) && maxFeePerGas !== '0x')\n    transaction.maxFeePerGas = hexToBigInt(maxFeePerGas)\n  if (isHex(maxPriorityFeePerGas) && maxPriorityFeePerGas !== '0x')\n    transaction.maxPriorityFeePerGas = hexToBigInt(maxPriorityFeePerGas)\n  if (accessList.length !== 0 && accessList !== '0x')\n    transaction.accessList = parseAccessList(accessList as RecursiveArray<Hex>)\n  if (authorizationList.length !== 0 && authorizationList !== '0x')\n    transaction.authorizationList = parseAuthorizationList(\n      authorizationList as SerializedAuthorizationList,\n    )\n\n  assertTransactionEIP7702(transaction)\n\n  const signature =\n    transactionArray.length === 13\n      ? parseEIP155Signature(transactionArray as RecursiveArray<Hex>)\n      : undefined\n\n  return { ...signature, ...transaction }\n}\n\ntype ParseTransactionEIP4844ErrorType =\n  | ToTransactionArrayErrorType\n  | AssertTransactionEIP4844ErrorType\n  | ToTransactionArrayErrorType\n  | HexToBigIntErrorType\n  | HexToNumberErrorType\n  | InvalidLegacyVErrorType\n  | InvalidSerializedTransactionErrorType\n  | IsHexErrorType\n  | ParseEIP155SignatureErrorType\n  | ErrorType\n\nfunction parseTransactionEIP4844(\n  serializedTransaction: TransactionSerializedEIP4844,\n): TransactionSerializableEIP4844 {\n  const transactionOrWrapperArray = toTransactionArray(serializedTransaction)\n\n  const hasNetworkWrapper = transactionOrWrapperArray.length === 4\n\n  const transactionArray = hasNetworkWrapper\n    ? transactionOrWrapperArray[0]\n    : transactionOrWrapperArray\n  const wrapperArray = hasNetworkWrapper\n    ? transactionOrWrapperArray.slice(1)\n    : []\n\n  const [\n    chainId,\n    nonce,\n    maxPriorityFeePerGas,\n    maxFeePerGas,\n    gas,\n    to,\n    value,\n    data,\n    accessList,\n    maxFeePerBlobGas,\n    blobVersionedHashes,\n    v,\n    r,\n    s,\n  ] = transactionArray\n  const [blobs, commitments, proofs] = wrapperArray\n\n  if (!(transactionArray.length === 11 || transactionArray.length === 14))\n    throw new InvalidSerializedTransactionError({\n      attributes: {\n        chainId,\n        nonce,\n        maxPriorityFeePerGas,\n        maxFeePerGas,\n        gas,\n        to,\n        value,\n        data,\n        accessList,\n        ...(transactionArray.length > 9\n          ? {\n              v,\n              r,\n              s,\n            }\n          : {}),\n      },\n      serializedTransaction,\n      type: 'eip4844',\n    })\n\n  const transaction = {\n    blobVersionedHashes: blobVersionedHashes as Hex[],\n    chainId: hexToNumber(chainId as Hex),\n    to,\n    type: 'eip4844',\n  } as TransactionSerializableEIP4844\n  if (isHex(gas) && gas !== '0x') transaction.gas = hexToBigInt(gas)\n  if (isHex(data) && data !== '0x') transaction.data = data\n  if (isHex(nonce)) transaction.nonce = nonce === '0x' ? 0 : hexToNumber(nonce)\n  if (isHex(value) && value !== '0x') transaction.value = hexToBigInt(value)\n  if (isHex(maxFeePerBlobGas) && maxFeePerBlobGas !== '0x')\n    transaction.maxFeePerBlobGas = hexToBigInt(maxFeePerBlobGas)\n  if (isHex(maxFeePerGas) && maxFeePerGas !== '0x')\n    transaction.maxFeePerGas = hexToBigInt(maxFeePerGas)\n  if (isHex(maxPriorityFeePerGas) && maxPriorityFeePerGas !== '0x')\n    transaction.maxPriorityFeePerGas = hexToBigInt(maxPriorityFeePerGas)\n  if (accessList.length !== 0 && accessList !== '0x')\n    transaction.accessList = parseAccessList(accessList as RecursiveArray<Hex>)\n  if (blobs && commitments && proofs)\n    transaction.sidecars = toBlobSidecars({\n      blobs: blobs as Hex[],\n      commitments: commitments as Hex[],\n      proofs: proofs as Hex[],\n    })\n\n  assertTransactionEIP4844(transaction)\n\n  const signature =\n    transactionArray.length === 14\n      ? parseEIP155Signature(transactionArray as RecursiveArray<Hex>)\n      : undefined\n\n  return { ...signature, ...transaction }\n}\n\ntype ParseTransactionEIP1559ErrorType =\n  | ToTransactionArrayErrorType\n  | AssertTransactionEIP1559ErrorType\n  | ToTransactionArrayErrorType\n  | HexToBigIntErrorType\n  | HexToNumberErrorType\n  | InvalidLegacyVErrorType\n  | InvalidSerializedTransactionErrorType\n  | IsHexErrorType\n  | ParseEIP155SignatureErrorType\n  | ParseAccessListErrorType\n  | ErrorType\n\nfunction parseTransactionEIP1559(\n  serializedTransaction: TransactionSerializedEIP1559,\n): TransactionSerializableEIP1559 {\n  const transactionArray = toTransactionArray(serializedTransaction)\n\n  const [\n    chainId,\n    nonce,\n    maxPriorityFeePerGas,\n    maxFeePerGas,\n    gas,\n    to,\n    value,\n    data,\n    accessList,\n    v,\n    r,\n    s,\n  ] = transactionArray\n\n  if (!(transactionArray.length === 9 || transactionArray.length === 12))\n    throw new InvalidSerializedTransactionError({\n      attributes: {\n        chainId,\n        nonce,\n        maxPriorityFeePerGas,\n        maxFeePerGas,\n        gas,\n        to,\n        value,\n        data,\n        accessList,\n        ...(transactionArray.length > 9\n          ? {\n              v,\n              r,\n              s,\n            }\n          : {}),\n      },\n      serializedTransaction,\n      type: 'eip1559',\n    })\n\n  const transaction: TransactionSerializableEIP1559 = {\n    chainId: hexToNumber(chainId as Hex),\n    type: 'eip1559',\n  }\n  if (isHex(to) && to !== '0x') transaction.to = to\n  if (isHex(gas) && gas !== '0x') transaction.gas = hexToBigInt(gas)\n  if (isHex(data) && data !== '0x') transaction.data = data\n  if (isHex(nonce)) transaction.nonce = nonce === '0x' ? 0 : hexToNumber(nonce)\n  if (isHex(value) && value !== '0x') transaction.value = hexToBigInt(value)\n  if (isHex(maxFeePerGas) && maxFeePerGas !== '0x')\n    transaction.maxFeePerGas = hexToBigInt(maxFeePerGas)\n  if (isHex(maxPriorityFeePerGas) && maxPriorityFeePerGas !== '0x')\n    transaction.maxPriorityFeePerGas = hexToBigInt(maxPriorityFeePerGas)\n  if (accessList.length !== 0 && accessList !== '0x')\n    transaction.accessList = parseAccessList(accessList as RecursiveArray<Hex>)\n\n  assertTransactionEIP1559(transaction)\n\n  const signature =\n    transactionArray.length === 12\n      ? parseEIP155Signature(transactionArray)\n      : undefined\n\n  return { ...signature, ...transaction }\n}\n\ntype ParseTransactionEIP2930ErrorType =\n  | ToTransactionArrayErrorType\n  | AssertTransactionEIP2930ErrorType\n  | ToTransactionArrayErrorType\n  | HexToBigIntErrorType\n  | HexToNumberErrorType\n  | InvalidLegacyVErrorType\n  | InvalidSerializedTransactionErrorType\n  | IsHexErrorType\n  | ParseEIP155SignatureErrorType\n  | ParseAccessListErrorType\n  | ErrorType\n\nfunction parseTransactionEIP2930(\n  serializedTransaction: TransactionSerializedEIP2930,\n): Omit<TransactionRequestEIP2930, 'from'> &\n  ({ chainId: number } | ({ chainId: number } & Signature)) {\n  const transactionArray = toTransactionArray(serializedTransaction)\n\n  const [chainId, nonce, gasPrice, gas, to, value, data, accessList, v, r, s] =\n    transactionArray\n\n  if (!(transactionArray.length === 8 || transactionArray.length === 11))\n    throw new InvalidSerializedTransactionError({\n      attributes: {\n        chainId,\n        nonce,\n        gasPrice,\n        gas,\n        to,\n        value,\n        data,\n        accessList,\n        ...(transactionArray.length > 8\n          ? {\n              v,\n              r,\n              s,\n            }\n          : {}),\n      },\n      serializedTransaction,\n      type: 'eip2930',\n    })\n\n  const transaction: TransactionSerializableEIP2930 = {\n    chainId: hexToNumber(chainId as Hex),\n    type: 'eip2930',\n  }\n  if (isHex(to) && to !== '0x') transaction.to = to\n  if (isHex(gas) && gas !== '0x') transaction.gas = hexToBigInt(gas)\n  if (isHex(data) && data !== '0x') transaction.data = data\n  if (isHex(nonce)) transaction.nonce = nonce === '0x' ? 0 : hexToNumber(nonce)\n  if (isHex(value) && value !== '0x') transaction.value = hexToBigInt(value)\n  if (isHex(gasPrice) && gasPrice !== '0x')\n    transaction.gasPrice = hexToBigInt(gasPrice)\n  if (accessList.length !== 0 && accessList !== '0x')\n    transaction.accessList = parseAccessList(accessList as RecursiveArray<Hex>)\n\n  assertTransactionEIP2930(transaction)\n\n  const signature =\n    transactionArray.length === 11\n      ? parseEIP155Signature(transactionArray)\n      : undefined\n\n  return { ...signature, ...transaction }\n}\n\ntype ParseTransactionLegacyErrorType =\n  | AssertTransactionLegacyErrorType\n  | FromRlpErrorType\n  | HexToBigIntErrorType\n  | HexToNumberErrorType\n  | InvalidLegacyVErrorType\n  | InvalidSerializedTransactionErrorType\n  | IsHexErrorType\n  | ErrorType\n\nfunction parseTransactionLegacy(\n  serializedTransaction: Hex,\n): Omit<TransactionRequestLegacy, 'from'> &\n  ({ chainId?: number | undefined } | ({ chainId: number } & Signature)) {\n  const transactionArray = fromRlp(serializedTransaction, 'hex')\n\n  const [nonce, gasPrice, gas, to, value, data, chainIdOrV_, r, s] =\n    transactionArray\n\n  if (!(transactionArray.length === 6 || transactionArray.length === 9))\n    throw new InvalidSerializedTransactionError({\n      attributes: {\n        nonce,\n        gasPrice,\n        gas,\n        to,\n        value,\n        data,\n        ...(transactionArray.length > 6\n          ? {\n              v: chainIdOrV_,\n              r,\n              s,\n            }\n          : {}),\n      },\n      serializedTransaction,\n      type: 'legacy',\n    })\n\n  const transaction: TransactionSerializableLegacy = {\n    type: 'legacy',\n  }\n  if (isHex(to) && to !== '0x') transaction.to = to\n  if (isHex(gas) && gas !== '0x') transaction.gas = hexToBigInt(gas)\n  if (isHex(data) && data !== '0x') transaction.data = data\n  if (isHex(nonce)) transaction.nonce = nonce === '0x' ? 0 : hexToNumber(nonce)\n  if (isHex(value) && value !== '0x') transaction.value = hexToBigInt(value)\n  if (isHex(gasPrice) && gasPrice !== '0x')\n    transaction.gasPrice = hexToBigInt(gasPrice)\n\n  assertTransactionLegacy(transaction)\n\n  if (transactionArray.length === 6) return transaction\n\n  const chainIdOrV =\n    isHex(chainIdOrV_) && chainIdOrV_ !== '0x'\n      ? hexToBigInt(chainIdOrV_ as Hex)\n      : 0n\n\n  if (s === '0x' && r === '0x') {\n    if (chainIdOrV > 0) transaction.chainId = Number(chainIdOrV)\n    return transaction\n  }\n\n  const v = chainIdOrV\n\n  const chainId: number | undefined = Number((v - 35n) / 2n)\n  if (chainId > 0) transaction.chainId = chainId\n  else if (v !== 27n && v !== 28n) throw new InvalidLegacyVError({ v })\n\n  transaction.v = v\n  transaction.s = s as Hex\n  transaction.r = r as Hex\n  transaction.yParity = v % 2n === 0n ? 1 : 0\n\n  return transaction\n}\n\ntype ToTransactionArrayErrorType = FromRlpErrorType | ErrorType\n\nexport function toTransactionArray(serializedTransaction: string) {\n  return fromRlp(`0x${serializedTransaction.slice(4)}` as Hex, 'hex')\n}\n\ntype ParseAccessListErrorType =\n  | InvalidAddressErrorType\n  | IsAddressErrorType\n  | ErrorType\n\nexport function parseAccessList(accessList_: RecursiveArray<Hex>): AccessList {\n  const accessList: Mutable<AccessList> = []\n  for (let i = 0; i < accessList_.length; i++) {\n    const [address, storageKeys] = accessList_[i] as [Hex, Hex[]]\n\n    if (!isAddress(address, { strict: false }))\n      throw new InvalidAddressError({ address })\n\n    accessList.push({\n      address: address,\n      storageKeys: storageKeys.map((key) => (isHash(key) ? key : trim(key))),\n    })\n  }\n  return accessList\n}\n\ntype ParseAuthorizationListErrorType =\n  | HexToNumberErrorType\n  | ParseEIP155SignatureErrorType\n  | ErrorType\n\nfunction parseAuthorizationList(\n  serializedAuthorizationList: SerializedAuthorizationList,\n): SignedAuthorizationList {\n  const authorizationList: Mutable<SignedAuthorizationList> = []\n  for (let i = 0; i < serializedAuthorizationList.length; i++) {\n    const [chainId, address, nonce, yParity, r, s] =\n      serializedAuthorizationList[i]\n\n    authorizationList.push({\n      address,\n      chainId: chainId === '0x' ? 0 : hexToNumber(chainId),\n      nonce: nonce === '0x' ? 0 : hexToNumber(nonce),\n      ...parseEIP155Signature([yParity, r, s]),\n    })\n  }\n  return authorizationList\n}\n\ntype ParseEIP155SignatureErrorType =\n  | HexToBigIntErrorType\n  | PadHexErrorType\n  | ErrorType\n\nfunction parseEIP155Signature(\n  transactionArray: RecursiveArray<Hex>,\n): Signature & { yParity: number } {\n  const signature = transactionArray.slice(-3)\n  const v =\n    signature[0] === '0x' || hexToBigInt(signature[0] as Hex) === 0n ? 27n : 28n\n  return {\n    r: padHex(signature[1] as Hex, { size: 32 }),\n    s: padHex(signature[2] as Hex, { size: 32 }),\n    v,\n    yParity: v === 27n ? 0 : 1,\n  }\n}\n", "import { BaseError } from './base.js'\n\nexport type InvalidDecimalNumberErrorType = InvalidDecimalNumberError & {\n  name: 'InvalidDecimalNumberError'\n}\nexport class InvalidDecimalNumberError extends BaseError {\n  constructor({ value }: { value: string }) {\n    super(`Number \\`${value}\\` is not a valid decimal number.`, {\n      name: 'InvalidDecimalNumberError',\n    })\n  }\n}\n", "import { InvalidDecimalNumberError } from '../../errors/unit.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nexport type ParseUnitsErrorType = ErrorType\n\n/**\n * Multiplies a string representation of a number by a given exponent of base 10 (10exponent).\n *\n * - Docs: https://viem.sh/docs/utilities/parseUnits\n *\n * @example\n * import { parseUnits } from 'viem'\n *\n * parseUnits('420', 9)\n * // 420000000000n\n */\nexport function parseUnits(value: string, decimals: number) {\n  if (!/^(-?)([0-9]*)\\.?([0-9]*)$/.test(value))\n    throw new InvalidDecimalNumberError({ value })\n\n  let [integer, fraction = '0'] = value.split('.')\n\n  const negative = integer.startsWith('-')\n  if (negative) integer = integer.slice(1)\n\n  // trim trailing zeros.\n  fraction = fraction.replace(/(0+)$/, '')\n\n  // round off if the fraction is larger than the number of decimals.\n  if (decimals === 0) {\n    if (Math.round(Number(`.${fraction}`)) === 1)\n      integer = `${BigInt(integer) + 1n}`\n    fraction = ''\n  } else if (fraction.length > decimals) {\n    const [left, unit, right] = [\n      fraction.slice(0, decimals - 1),\n      fraction.slice(decimals - 1, decimals),\n      fraction.slice(decimals),\n    ]\n\n    const rounded = Math.round(Number(`${unit}.${right}`))\n    if (rounded > 9)\n      fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, '0')\n    else fraction = `${left}${rounded}`\n\n    if (fraction.length > decimals) {\n      fraction = fraction.slice(1)\n      integer = `${BigInt(integer) + 1n}`\n    }\n\n    fraction = fraction.slice(0, decimals)\n  } else {\n    fraction = fraction.padEnd(decimals, '0')\n  }\n\n  return BigInt(`${negative ? '-' : ''}${integer}${fraction}`)\n}\n", "import { etherUnits } from '../../constants/unit.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nimport { type ParseUnitsErrorType, parseUnits } from './parseUnits.js'\n\nexport type ParseEtherErrorType = ParseUnitsErrorType | ErrorType\n\n/**\n * Converts a string representation of ether to numerical wei.\n *\n * - Docs: https://viem.sh/docs/utilities/parseEther\n *\n * @example\n * import { parseEther } from 'viem'\n *\n * parseEther('420')\n * // 420000000000000000000n\n */\nexport function parseEther(ether: string, unit: 'wei' | 'gwei' = 'wei') {\n  return parseUnits(ether, etherUnits[unit])\n}\n", "import { gweiUnits } from '../../constants/unit.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nimport { type ParseUnitsErrorType, parseUnits } from './parseUnits.js'\n\nexport type ParseGweiErrorType = ParseUnitsErrorType | ErrorType\n\n/**\n * Converts a string representation of gwei to numerical wei.\n *\n * - Docs: https://viem.sh/docs/utilities/parseGwei\n *\n * @example\n * import { parseGwei } from 'viem'\n *\n * parseGwei('420')\n * // 420000000000n\n */\nexport function parseGwei(ether: string, unit: 'wei' = 'wei') {\n  return parseUnits(ether, gweiUnits[unit])\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n  type ParseAbi,\n  type ParseAbiItem,\n  type ParseAbiParameter,\n  type ParseAbiParameters,\n  parseAbi,\n  parseAbiItem,\n  parseAbiParameter,\n  parseAbiParameters,\n} from 'abitype'\nexport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../accounts/utils/parseAccount.js'\nexport {\n  type PublicKeyToAddressErrorType,\n  publicKeyToAddress,\n} from '../accounts/utils/publicKeyToAddress.js'\nexport {\n  type DecodeAbiParametersErrorType,\n  type DecodeAbiParametersReturnType,\n  decodeAbiParameters,\n} from './abi/decodeAbiParameters.js'\nexport {\n  type DecodeErrorResultErrorType,\n  type DecodeErrorResultParameters,\n  type DecodeErrorResultReturnType,\n  decodeErrorResult,\n} from './abi/decodeErrorResult.js'\nexport {\n  type DecodeEventLogErrorType,\n  type DecodeEventLogParameters,\n  type DecodeEventLogReturnType,\n  decodeEventLog,\n} from './abi/decodeEventLog.js'\nexport {\n  type DecodeFunctionDataErrorType,\n  type DecodeFunctionDataParameters,\n  type DecodeFunctionDataReturnType,\n  decodeFunctionData,\n} from './abi/decodeFunctionData.js'\nexport {\n  type DecodeFunctionResultErrorType,\n  type DecodeFunctionResultParameters,\n  type DecodeFunctionResultReturnType,\n  decodeFunctionResult,\n} from './abi/decodeFunctionResult.js'\nexport {\n  type EncodeAbiParametersErrorType,\n  type EncodeAbiParametersReturnType,\n  encodeAbiParameters,\n} from './abi/encodeAbiParameters.js'\nexport {\n  type EncodeDeployDataErrorType,\n  type EncodeDeployDataParameters,\n  encodeDeployData,\n} from './abi/encodeDeployData.js'\nexport {\n  type EncodeErrorResultErrorType,\n  type EncodeErrorResultParameters,\n  encodeErrorResult,\n} from './abi/encodeErrorResult.js'\nexport {\n  type EncodeArgErrorType,\n  type EncodeEventTopicsParameters,\n  type EncodeEventTopicsReturnType,\n  encodeEventTopics,\n} from './abi/encodeEventTopics.js'\nexport {\n  type EncodeFunctionDataErrorType,\n  type EncodeFunctionDataParameters,\n  encodeFunctionData,\n} from './abi/encodeFunctionData.js'\nexport {\n  type EncodeFunctionResultErrorType,\n  type EncodeFunctionResultParameters,\n  encodeFunctionResult,\n} from './abi/encodeFunctionResult.js'\nexport { type EncodePackedErrorType, encodePacked } from './abi/encodePacked.js'\nexport {\n  type FormatAbiItemErrorType,\n  type FormatAbiParamErrorType,\n  type FormatAbiParamsErrorType,\n  formatAbiItem,\n  formatAbiParams,\n} from './abi/formatAbiItem.js'\nexport {\n  type FormatAbiItemWithArgsErrorType,\n  formatAbiItemWithArgs,\n} from './abi/formatAbiItemWithArgs.js'\nexport {\n  type GetAbiItemErrorType,\n  type GetAbiItemParameters,\n  getAbiItem,\n} from './abi/getAbiItem.js'\nexport {\n  type ParseEventLogsErrorType,\n  type ParseEventLogsParameters,\n  type ParseEventLogsReturnType,\n  parseEventLogs,\n} from './abi/parseEventLogs.js'\nexport {\n  type ChecksumAddressErrorType,\n  getAddress,\n} from './address/getAddress.js'\nexport {\n  type GetContractAddressOptions,\n  type GetCreate2AddressErrorType,\n  type GetCreate2AddressOptions,\n  type GetCreateAddressErrorType,\n  type GetCreateAddressOptions,\n  getContractAddress,\n  getCreate2Address,\n  getCreateAddress,\n} from './address/getContractAddress.js'\nexport { type IsAddressErrorType, isAddress } from './address/isAddress.js'\nexport {\n  type IsAddressEqualErrorType,\n  isAddressEqual,\n} from './address/isAddressEqual.js'\nexport {\n  type HashAuthorizationErrorType,\n  type HashAuthorizationParameters,\n  type HashAuthorizationReturnType,\n  hashAuthorization,\n} from './authorization/hashAuthorization.js'\nexport {\n  type RecoverAuthorizationAddressErrorType,\n  type RecoverAuthorizationAddressParameters,\n  type RecoverAuthorizationAddressReturnType,\n  recoverAuthorizationAddress,\n} from './authorization/recoverAuthorizationAddress.js'\nexport {\n  type SerializeAuthorizationListErrorType,\n  type SerializeAuthorizationListReturnType,\n  serializeAuthorizationList,\n} from './authorization/serializeAuthorizationList.js'\nexport {\n  type VerifyAuthorizationErrorType,\n  type VerifyAuthorizationParameters,\n  type VerifyAuthorizationReturnType,\n  verifyAuthorization,\n} from './authorization/verifyAuthorization.js'\nexport {\n  buildRequest,\n  type RequestErrorType,\n} from './buildRequest.js'\nexport {\n  ccipRequest,\n  /** @deprecated Use `ccipRequest`. */\n  ccipRequest as ccipFetch,\n  type OffchainLookupErrorType,\n  offchainLookup,\n  offchainLookupAbiItem,\n  offchainLookupSignature,\n} from './ccip.js'\nexport {\n  type AssertCurrentChainErrorType,\n  type AssertCurrentChainParameters,\n  assertCurrentChain,\n} from './chain/assertCurrentChain.js'\nexport { defineChain } from './chain/defineChain.js'\nexport {\n  type ExtractChainErrorType,\n  type ExtractChainParameters,\n  type ExtractChainReturnType,\n  extractChain,\n} from './chain/extractChain.js'\nexport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from './chain/getChainContractAddress.js'\nexport {\n  type ConcatBytesErrorType,\n  type ConcatErrorType,\n  type ConcatHexErrorType,\n  concat,\n  concatBytes,\n  concatHex,\n} from './data/concat.js'\nexport { type IsBytesErrorType, isBytes } from './data/isBytes.js'\nexport { type IsHexErrorType, isHex } from './data/isHex.js'\nexport {\n  type PadBytesErrorType,\n  type PadErrorType,\n  type PadHexErrorType,\n  pad,\n  padBytes,\n  padHex,\n} from './data/pad.js'\nexport { type SizeErrorType, size } from './data/size.js'\nexport {\n  type AssertEndOffsetErrorType,\n  type AssertStartOffsetErrorType,\n  type SliceBytesErrorType,\n  type SliceErrorType,\n  type SliceHexErrorType,\n  type SliceReturnType,\n  slice,\n  sliceBytes,\n  sliceHex,\n} from './data/slice.js'\nexport { type TrimErrorType, type TrimReturnType, trim } from './data/trim.js'\nexport {\n  type BytesToBigIntErrorType,\n  type BytesToBigIntOpts,\n  type BytesToBoolErrorType,\n  type BytesToBoolOpts,\n  type BytesToNumberErrorType,\n  type BytesToNumberOpts,\n  type BytesToStringErrorType,\n  type BytesToStringOpts,\n  bytesToBigInt,\n  bytesToBigInt as bytesToBigint,\n  bytesToBool,\n  bytesToNumber,\n  bytesToString,\n  type FromBytesErrorType,\n  type FromBytesParameters,\n  type FromBytesReturnType,\n  fromBytes,\n} from './encoding/fromBytes.js'\nexport {\n  type AssertSizeErrorType,\n  type FromHexErrorType,\n  type FromHexParameters,\n  type FromHexReturnType,\n  fromHex,\n  type HexToBigIntErrorType,\n  type HexToBigIntOpts,\n  type HexToBoolErrorType,\n  type HexToBoolOpts,\n  type HexToNumberErrorType,\n  type HexToNumberOpts,\n  type HexToStringErrorType,\n  type HexToStringOpts,\n  hexToBigInt,\n  hexToBool,\n  hexToNumber,\n  hexToString,\n} from './encoding/fromHex.js'\nexport {\n  type FromRlpErrorType,\n  fromRlp,\n} from './encoding/fromRlp.js'\nexport {\n  type BoolToBytesErrorType,\n  type BoolToBytesOpts,\n  boolToBytes,\n  type HexToBytesErrorType,\n  type HexToBytesOpts,\n  hexToBytes,\n  type NumberToBytesErrorType,\n  numberToBytes,\n  type StringToBytesErrorType,\n  type StringToBytesOpts,\n  stringToBytes,\n  type ToBytesErrorType,\n  type ToBytesParameters,\n  toBytes,\n} from './encoding/toBytes.js'\nexport {\n  type BoolToHexErrorType,\n  type BoolToHexOpts,\n  type BytesToHexErrorType,\n  type BytesToHexOpts,\n  boolToHex,\n  bytesToHex,\n  type NumberToHexErrorType,\n  type NumberToHexOpts,\n  numberToHex,\n  type StringToHexErrorType,\n  type StringToHexOpts,\n  stringToHex,\n  type ToHexErrorType,\n  type ToHexParameters,\n  toHex,\n} from './encoding/toHex.js'\nexport {\n  type BytesToRlpErrorType,\n  type HexToRlpErrorType,\n  type ToRlpErrorType,\n  type ToRlpReturnType,\n  toRlp,\n} from './encoding/toRlp.js'\nexport {\n  type GetCallErrorReturnType,\n  getCallError,\n} from './errors/getCallError.js'\nexport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from './errors/getContractError.js'\nexport {\n  type GetEstimateGasErrorReturnType,\n  getEstimateGasError,\n} from './errors/getEstimateGasError.js'\nexport {\n  containsNodeError,\n  type GetNodeErrorParameters,\n  type GetNodeErrorReturnType,\n  getNodeError,\n} from './errors/getNodeError.js'\nexport {\n  type GetTransactionErrorParameters,\n  type GetTransactionErrorReturnType,\n  getTransactionError,\n} from './errors/getTransactionError.js'\nexport {\n  type DefineBlockErrorType,\n  defineBlock,\n  type FormatBlockErrorType,\n  type FormattedBlock,\n  formatBlock,\n} from './formatters/block.js'\nexport { type ExtractErrorType, extract } from './formatters/extract.js'\nexport {\n  type DefineFormatterErrorType,\n  defineFormatter,\n} from './formatters/formatter.js'\nexport { type FormatLogErrorType, formatLog } from './formatters/log.js'\nexport {\n  type DefineTransactionErrorType,\n  defineTransaction,\n  type FormatTransactionErrorType,\n  type FormattedTransaction,\n  formatTransaction,\n  transactionType,\n} from './formatters/transaction.js'\nexport {\n  type DefineTransactionReceiptErrorType,\n  defineTransactionReceipt,\n  type FormatTransactionReceiptErrorType,\n  type FormattedTransactionReceipt,\n} from './formatters/transactionReceipt.js'\nexport {\n  type DefineTransactionRequestErrorType,\n  defineTransactionRequest,\n  type FormatTransactionRequestErrorType,\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from './formatters/transactionRequest.js'\nexport { getAction } from './getAction.js'\nexport { type IsHashErrorType, isHash } from './hash/isHash.js'\nexport { type Keccak256ErrorType, keccak256 } from './hash/keccak256.js'\nexport { type Ripemd160ErrorType, ripemd160 } from './hash/ripemd160.js'\nexport { type Sha256ErrorType, sha256 } from './hash/sha256.js'\nexport {\n  type ToEventHashErrorType,\n  toEventHash,\n} from './hash/toEventHash.js'\nexport {\n  type ToEventSelectorErrorType,\n  /** @deprecated use `ToEventSelectorErrorType`. */\n  type ToEventSelectorErrorType as GetEventSelectorErrorType,\n  toEventSelector,\n  /** @deprecated use `toEventSelector`. */\n  toEventSelector as getEventSelector,\n} from './hash/toEventSelector.js'\nexport {\n  type ToEventSignatureErrorType,\n  /** @deprecated use `ToEventSignatureErrorType`. */\n  type ToEventSignatureErrorType as GetEventSignatureErrorType,\n  toEventSignature,\n  /** @deprecated use `toEventSignature`. */\n  toEventSignature as getEventSignature,\n} from './hash/toEventSignature.js'\nexport {\n  type ToFunctionHashErrorType,\n  toFunctionHash,\n} from './hash/toFunctionHash.js'\nexport {\n  type ToFunctionSelectorErrorType,\n  /** @deprecated use `ToFunctionSelectorErrorType`. */\n  type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n  toFunctionSelector,\n  /** @deprecated use `toFunctionSelector`. */\n  toFunctionSelector as getFunctionSelector,\n} from './hash/toFunctionSelector.js'\nexport {\n  type ToFunctionSignatureErrorType,\n  /** @deprecated use `ToFunctionSignatureErrorType`. */\n  type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n  toFunctionSignature,\n  /** @deprecated use `toFunctionSignature`. */\n  toFunctionSignature as getFunctionSignature,\n} from './hash/toFunctionSignature.js'\nexport {\n  type CreateNonceManagerParameters,\n  createNonceManager,\n  type NonceManager,\n  type NonceManagerSource,\n  nonceManager,\n} from './nonceManager.js'\nexport { arrayRegex, bytesRegex, integerRegex } from './regex.js'\nexport {\n  getSocket,\n  rpc,\n  type WebSocketAsyncErrorType,\n  type WebSocketAsyncOptions,\n  type WebSocketAsyncReturnType,\n  type WebSocketErrorType,\n  type WebSocketOptions,\n  type WebSocketReturnType,\n} from './rpc/compat.js'\nexport {\n  getHttpRpcClient,\n  type HttpRequestErrorType,\n  type HttpRequestParameters,\n  type HttpRequestReturnType,\n  type HttpRpcClient,\n  type HttpRpcClientOptions,\n} from './rpc/http.js'\nexport {\n  type GetSocketParameters,\n  type GetSocketRpcClientErrorType,\n  type GetSocketRpcClientParameters,\n  getSocketRpcClient,\n  type Socket,\n  type SocketRpcClient,\n  socketClientCache,\n} from './rpc/socket.js'\nexport { getWebSocketRpcClient } from './rpc/webSocket.js'\nexport {\n  type HashMessageErrorType,\n  type HashMessageReturnType,\n  hashMessage,\n} from './signature/hashMessage.js'\nexport {\n  type HashDomainErrorType,\n  type HashStructErrorType,\n  type HashTypedDataParameters,\n  type HashTypedDataReturnType,\n  hashStruct,\n  hashTypedData,\n} from './signature/hashTypedData.js'\nexport {\n  type IsErc6492SignatureErrorType,\n  type IsErc6492SignatureParameters,\n  type IsErc6492SignatureReturnType,\n  isErc6492Signature,\n} from './signature/isErc6492Signature.js'\nexport {\n  type IsErc8010SignatureErrorType,\n  type IsErc8010SignatureParameters,\n  type IsErc8010SignatureReturnType,\n  isErc8010Signature,\n} from './signature/isErc8010Signature.js'\nexport {\n  type ParseErc6492SignatureErrorType,\n  type ParseErc6492SignatureParameters,\n  type ParseErc6492SignatureReturnType,\n  parseErc6492Signature,\n} from './signature/parseErc6492Signature.js'\nexport {\n  type ParseErc8010SignatureErrorType,\n  type ParseErc8010SignatureParameters,\n  type ParseErc8010SignatureReturnType,\n  parseErc8010Signature,\n} from './signature/parseErc8010Signature.js'\nexport {\n  type RecoverAddressErrorType,\n  type RecoverAddressParameters,\n  type RecoverAddressReturnType,\n  recoverAddress,\n} from './signature/recoverAddress.js'\nexport {\n  type RecoverMessageAddressErrorType,\n  type RecoverMessageAddressParameters,\n  type RecoverMessageAddressReturnType,\n  recoverMessageAddress,\n} from './signature/recoverMessageAddress.js'\nexport {\n  type RecoverPublicKeyErrorType,\n  type RecoverPublicKeyParameters,\n  type RecoverPublicKeyReturnType,\n  recoverPublicKey,\n} from './signature/recoverPublicKey.js'\nexport {\n  type RecoverTypedDataAddressErrorType,\n  type RecoverTypedDataAddressParameters,\n  type RecoverTypedDataAddressReturnType,\n  recoverTypedDataAddress,\n} from './signature/recoverTypedDataAddress.js'\nexport {\n  type SerializeErc6492SignatureErrorType,\n  type SerializeErc6492SignatureParameters,\n  type SerializeErc6492SignatureReturnType,\n  serializeErc6492Signature,\n} from './signature/serializeErc6492Signature.js'\nexport {\n  type SerializeErc8010SignatureErrorType,\n  type SerializeErc8010SignatureParameters,\n  type SerializeErc8010SignatureReturnType,\n  serializeErc8010Signature,\n} from './signature/serializeErc8010Signature.js'\nexport {\n  type VerifyHashErrorType,\n  type VerifyHashParameters,\n  type VerifyHashReturnType,\n  verifyHash,\n} from './signature/verifyHash.js'\nexport {\n  type VerifyMessageErrorType,\n  type VerifyMessageParameters,\n  type VerifyMessageReturnType,\n  verifyMessage,\n} from './signature/verifyMessage.js'\nexport {\n  type VerifyTypedDataErrorType,\n  type VerifyTypedDataParameters,\n  type VerifyTypedDataReturnType,\n  verifyTypedData,\n} from './signature/verifyTypedData.js'\nexport { type StringifyErrorType, stringify } from './stringify.js'\nexport {\n  type AssertRequestErrorType,\n  assertRequest,\n} from './transaction/assertRequest.js'\nexport {\n  type AssertTransactionEIP1559ErrorType,\n  type AssertTransactionEIP2930ErrorType,\n  type AssertTransactionLegacyErrorType,\n  assertTransactionEIP1559,\n  assertTransactionEIP2930,\n  assertTransactionLegacy,\n} from './transaction/assertTransaction.js'\nexport {\n  type GetSerializedTransactionType,\n  type GetSerializedTransactionTypeErrorType,\n  getSerializedTransactionType,\n} from './transaction/getSerializedTransactionType.js'\nexport {\n  type GetTransactionType,\n  type GetTransactionTypeErrorType,\n  getTransactionType,\n} from './transaction/getTransactionType.js'\nexport {\n  type ParseTransactionErrorType,\n  parseTransaction,\n} from './transaction/parseTransaction.js'\nexport {\n  type SerializeAccessListErrorType,\n  serializeAccessList,\n} from './transaction/serializeAccessList.js'\nexport {\n  type SerializeTransactionErrorType,\n  type SerializeTransactionFn,\n  serializeTransaction,\n} from './transaction/serializeTransaction.js'\nexport {\n  type DomainSeparatorErrorType,\n  type SerializeTypedDataErrorType,\n  serializeTypedData,\n  type ValidateTypedDataErrorType,\n  validateTypedData,\n} from './typedData.js'\nexport { type FormatEtherErrorType, formatEther } from './unit/formatEther.js'\nexport { type FormatGweiErrorType, formatGwei } from './unit/formatGwei.js'\nexport { type FormatUnitsErrorType, formatUnits } from './unit/formatUnits.js'\nexport { type ParseEtherErrorType, parseEther } from './unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './unit/parseGwei.js'\nexport { type ParseUnitsErrorType, parseUnits } from './unit/parseUnits.js'\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Proof } from '../../types/proof.js'\nimport type { RpcProof } from '../../types/rpc.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { hexToNumber } from '../index.js'\n\nexport type FormatProofErrorType = ErrorType\n\nfunction formatStorageProof(storageProof: RpcProof['storageProof']) {\n  return storageProof.map((proof) => ({\n    ...proof,\n    value: BigInt(proof.value),\n  }))\n}\n\nexport function formatProof(proof: ExactPartial<RpcProof>) {\n  return {\n    ...proof,\n    balance: proof.balance ? BigInt(proof.balance) : undefined,\n    nonce: proof.nonce ? hexToNumber(proof.nonce) : undefined,\n    storageProof: proof.storageProof\n      ? formatStorageProof(proof.storageProof)\n      : undefined,\n  } as Proof\n}\n", "import type { Address } from 'abitype'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { Proof } from '../../types/proof.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type FormatProofErrorType,\n  formatProof,\n} from '../../utils/formatters/proof.js'\n\nexport type GetProofParameters = {\n  /** Account address. */\n  address: Address\n  /** Array of storage-keys that should be proofed and included. */\n  storageKeys: Hash[]\n} & (\n  | {\n      /** The block number. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n  | {\n      blockNumber?: undefined\n      /**\n       * The block tag.\n       * @default 'latest'\n       */\n      blockTag?: BlockTag | undefined\n    }\n)\n\nexport type GetProofReturnType = Proof\n\nexport type GetProofErrorType =\n  | NumberToHexErrorType\n  | FormatProofErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns the account and storage values of the specified account including the Merkle-proof.\n *\n * - Docs: https://viem.sh/docs/actions/public/getProof\n * - JSON-RPC Methods:\n *   - Calls [`eth_getProof`](https://eips.ethereum.org/EIPS/eip-1186)\n *\n * @param client - Client to use\n * @param parameters - {@link GetProofParameters}\n * @returns Proof data. {@link GetProofReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getProof } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const block = await getProof(client, {\n *  address: '0x...',\n *  storageKeys: ['0x...'],\n * })\n */\nexport async function getProof<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    address,\n    blockNumber,\n    blockTag: blockTag_,\n    storageKeys,\n  }: GetProofParameters,\n): Promise<GetProofReturnType> {\n  const blockTag = blockTag_ ?? 'latest'\n\n  const blockNumberHex =\n    blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n  const proof = await client.request({\n    method: 'eth_getProof',\n    params: [address, storageKeys, blockNumberHex || blockTag],\n  })\n\n  return formatProof(proof)\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetStorageAtParameters = {\n  address: Address\n  slot: Hex\n} & (\n  | {\n      blockNumber?: undefined\n      blockTag?: BlockTag | undefined\n    }\n  | {\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n)\n\nexport type GetStorageAtReturnType = Hex | undefined\n\nexport type GetStorageAtErrorType =\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns the value from a storage slot at a given address.\n *\n * - Docs: https://viem.sh/docs/contract/getStorageAt\n * - JSON-RPC Methods: [`eth_getStorageAt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getstorageat)\n *\n * @param client - Client to use\n * @param parameters - {@link GetStorageAtParameters}\n * @returns The value of the storage slot. {@link GetStorageAtReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getStorageAt } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const code = await getStorageAt(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   slot: toHex(0),\n * })\n */\nexport async function getStorageAt<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { address, blockNumber, blockTag = 'latest', slot }: GetStorageAtParameters,\n): Promise<GetStorageAtReturnType> {\n  const blockNumberHex =\n    blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n  const data = await client.request({\n    method: 'eth_getStorageAt',\n    params: [address, slot, blockNumberHex || blockTag],\n  })\n  return data\n}\n", "import type { Address } from '../../accounts/index.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  TransactionNotFoundError,\n  type TransactionNotFoundErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RpcTransaction } from '../../types/rpc.js'\nimport type { OneOf, Prettify } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type FormattedTransaction,\n  formatTransaction,\n} from '../../utils/formatters/transaction.js'\n\nexport type GetTransactionParameters<blockTag extends BlockTag = 'latest'> =\n  OneOf<\n    // eth_getTransactionByBlockHashAndIndex\n    | {\n        /** The block hash */\n        blockHash: Hash\n        /** The index of the transaction on the block. */\n        index: number\n      }\n    // eth_getTransactionByBlockNumberAndIndex\n    | {\n        /** The block number */\n        blockNumber: bigint\n        /** The index of the transaction on the block. */\n        index: number\n      }\n    // eth_getTransactionByBlockNumberAndIndex\n    | {\n        /** The block tag. */\n        blockTag: blockTag | BlockTag\n        /** The index of the transaction on the block. */\n        index: number\n      }\n    // eth_getTransactionByHash\n    | {\n        /** The hash of the transaction. */\n        hash: Hash\n      }\n    // eth_getTransactionBySenderAndNonce\n    | {\n        /** The sender of the transaction. */\n        sender: Address\n        /** The nonce of the transaction on the sender. */\n        nonce: number\n      }\n  >\n\nexport type GetTransactionReturnType<\n  chain extends Chain | undefined = undefined,\n  blockTag extends BlockTag = 'latest',\n> = Prettify<FormattedTransaction<chain, blockTag>>\n\nexport type GetTransactionErrorType =\n  | TransactionNotFoundErrorType\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns information about a [Transaction](https://viem.sh/docs/glossary/terms#transaction) given a hash or block identifier.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransaction\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionByHash)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionParameters}\n * @returns The transaction information. {@link GetTransactionReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransaction } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const transaction = await getTransaction(client, {\n *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function getTransaction<\n  chain extends Chain | undefined,\n  blockTag extends BlockTag = 'latest',\n>(\n  client: Client<Transport, chain>,\n  {\n    blockHash,\n    blockNumber,\n    blockTag: blockTag_,\n    hash,\n    index,\n    sender,\n    nonce,\n  }: GetTransactionParameters<blockTag>,\n): Promise<GetTransactionReturnType<chain, blockTag>> {\n  const blockTag = blockTag_ || 'latest'\n\n  const blockNumberHex =\n    blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n  let transaction: RpcTransaction | null = null\n  if (hash) {\n    transaction = await client.request(\n      {\n        method: 'eth_getTransactionByHash',\n        params: [hash],\n      },\n      { dedupe: true },\n    )\n  } else if (blockHash) {\n    transaction = await client.request(\n      {\n        method: 'eth_getTransactionByBlockHashAndIndex',\n        params: [blockHash, numberToHex(index)],\n      },\n      { dedupe: true },\n    )\n  } else if ((blockNumberHex || blockTag) && typeof index === 'number') {\n    transaction = await client.request(\n      {\n        method: 'eth_getTransactionByBlockNumberAndIndex',\n        params: [blockNumberHex || blockTag, numberToHex(index)],\n      },\n      { dedupe: Boolean(blockNumberHex) },\n    )\n  } else if (sender && typeof nonce === 'number') {\n    transaction = await client.request(\n      {\n        method: 'eth_getTransactionBySenderAndNonce',\n        params: [sender, numberToHex(nonce)],\n      },\n      { dedupe: true },\n    )\n  }\n\n  if (!transaction)\n    throw new TransactionNotFoundError({\n      blockHash,\n      blockNumber,\n      blockTag,\n      hash,\n      index,\n    })\n\n  const format =\n    client.chain?.formatters?.transaction?.format || formatTransaction\n  return format(transaction, 'getTransaction')\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { FormattedTransactionReceipt } from '../../utils/formatters/transactionReceipt.js'\nimport { getAction } from '../../utils/getAction.js'\n\nimport {\n  type GetBlockNumberErrorType,\n  getBlockNumber,\n} from './getBlockNumber.js'\nimport {\n  type GetTransactionErrorType,\n  getTransaction,\n} from './getTransaction.js'\n\nexport type GetTransactionConfirmationsParameters<\n  chain extends Chain | undefined = Chain,\n> =\n  | {\n      /** The transaction hash. */\n      hash: Hash\n      transactionReceipt?: undefined\n    }\n  | {\n      hash?: undefined\n      /** The transaction receipt. */\n      transactionReceipt: FormattedTransactionReceipt<chain>\n    }\n\nexport type GetTransactionConfirmationsReturnType = bigint\n\nexport type GetTransactionConfirmationsErrorType =\n  | GetBlockNumberErrorType\n  | GetTransactionErrorType\n  | ErrorType\n\n/**\n * Returns the number of blocks passed (confirmations) since the transaction was processed on a block.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionConfirmations\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionConfirmations`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionConfirmations)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionConfirmationsParameters}\n * @returns The number of blocks passed since the transaction was processed. If confirmations is 0, then the Transaction has not been confirmed & processed yet. {@link GetTransactionConfirmationsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionConfirmations } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const confirmations = await getTransactionConfirmations(client, {\n *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function getTransactionConfirmations<\n  chain extends Chain | undefined,\n>(\n  client: Client<Transport, chain>,\n  { hash, transactionReceipt }: GetTransactionConfirmationsParameters<chain>,\n): Promise<GetTransactionConfirmationsReturnType> {\n  const [blockNumber, transaction] = await Promise.all([\n    getAction(client, getBlockNumber, 'getBlockNumber')({}),\n    hash\n      ? getAction(client, getTransaction, 'getTransaction')({ hash })\n      : undefined,\n  ])\n  const transactionBlockNumber =\n    transactionReceipt?.blockNumber || transaction?.blockNumber\n  if (!transactionBlockNumber) return 0n\n  return blockNumber - transactionBlockNumber! + 1n\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  TransactionReceiptNotFoundError,\n  type TransactionReceiptNotFoundErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type FormattedTransactionReceipt,\n  formatTransactionReceipt,\n} from '../../utils/formatters/transactionReceipt.js'\n\nexport type GetTransactionReceiptParameters = {\n  /** The hash of the transaction. */\n  hash: Hash\n}\n\nexport type GetTransactionReceiptReturnType<\n  chain extends Chain | undefined = undefined,\n> = FormattedTransactionReceipt<chain>\n\nexport type GetTransactionReceiptErrorType =\n  | RequestErrorType\n  | TransactionReceiptNotFoundErrorType\n  | ErrorType\n\n/**\n * Returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt) given a [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionReceipt\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactionreceipt)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionReceiptParameters}\n * @returns The transaction receipt. {@link GetTransactionReceiptReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionReceipt } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const transactionReceipt = await getTransactionReceipt(client, {\n *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function getTransactionReceipt<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { hash }: GetTransactionReceiptParameters,\n) {\n  const receipt = await client.request(\n    {\n      method: 'eth_getTransactionReceipt',\n      params: [hash],\n    },\n    { dedupe: true },\n  )\n\n  if (!receipt) throw new TransactionReceiptNotFoundError({ hash })\n\n  const format =\n    client.chain?.formatters?.transactionReceipt?.format ||\n    formatTransactionReceipt\n  return format(\n    receipt,\n    'getTransactionReceipt',\n  ) as GetTransactionReceiptReturnType<chain>\n}\n", "import type { AbiStateMutability, Address, Narrow } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { multicall3Abi } from '../../constants/abis.js'\nimport { multicall3Bytecode } from '../../constants/contracts.js'\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js'\nimport { BaseError } from '../../errors/base.js'\nimport { RawContractError } from '../../errors/contract.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ContractFunctionParameters } from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n  MulticallContracts,\n  MulticallResults,\n} from '../../types/multicall.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { CallParameters } from './call.js'\nimport { type ReadContractErrorType, readContract } from './readContract.js'\n\nexport type MulticallParameters<\n  contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n  allowFailure extends boolean = true,\n  options extends {\n    optional?: boolean\n    properties?: Record<string, any>\n  } = {},\n> = Pick<\n  CallParameters,\n  | 'authorizationList'\n  | 'blockNumber'\n  | 'blockOverrides'\n  | 'blockTag'\n  | 'stateOverride'\n> & {\n  /** The account to use for the multicall. */\n  account?: Address | undefined\n  /** Whether to allow failures. */\n  allowFailure?: allowFailure | boolean | undefined\n  /** The size of each batch of calls. */\n  batchSize?: number | undefined\n  /** Enable deployless multicall. */\n  deployless?: boolean | undefined\n  /** The contracts to call. */\n  contracts: MulticallContracts<\n    Narrow<contracts>,\n    { mutability: AbiStateMutability } & options\n  >\n  /** The address of the multicall3 contract to use. */\n  multicallAddress?: Address | undefined\n}\n\nexport type MulticallReturnType<\n  contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n  allowFailure extends boolean = true,\n  options extends {\n    error?: Error\n  } = { error: Error },\n> = MulticallResults<\n  Narrow<contracts>,\n  allowFailure,\n  { mutability: AbiStateMutability } & options\n>\n\nexport type MulticallErrorType =\n  | GetChainContractAddressErrorType\n  | ReadContractErrorType\n  | GetContractErrorReturnType<\n      EncodeFunctionDataErrorType | DecodeFunctionResultErrorType\n    >\n  | ErrorType\n\n/**\n * Similar to [`readContract`](https://viem.sh/docs/contract/readContract), but batches up multiple functions on a contract in a single RPC call via the [`multicall3` contract](https://github.com/mds1/multicall).\n *\n * - Docs: https://viem.sh/docs/contract/multicall\n *\n * @param client - Client to use\n * @param parameters - {@link MulticallParameters}\n * @returns An array of results with accompanying status. {@link MulticallReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { multicall } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const abi = parseAbi([\n *   'function balanceOf(address) view returns (uint256)',\n *   'function totalSupply() view returns (uint256)',\n * ])\n * const results = await multicall(client, {\n *   contracts: [\n *     {\n *       address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *       abi,\n *       functionName: 'balanceOf',\n *       args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n *     },\n *     {\n *       address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *       abi,\n *       functionName: 'totalSupply',\n *     },\n *   ],\n * })\n * // [{ result: 424122n, status: 'success' }, { result: 1000000n, status: 'success' }]\n */\nexport async function multicall<\n  const contracts extends readonly unknown[],\n  chain extends Chain | undefined,\n  allowFailure extends boolean = true,\n>(\n  client: Client<Transport, chain>,\n  parameters: MulticallParameters<contracts, allowFailure>,\n): Promise<MulticallReturnType<contracts, allowFailure>> {\n  const {\n    account,\n    authorizationList,\n    allowFailure = true,\n    blockNumber,\n    blockOverrides,\n    blockTag,\n    stateOverride,\n  } = parameters\n  const contracts = parameters.contracts as ContractFunctionParameters[]\n\n  const {\n    batchSize = parameters.batchSize ?? 1024,\n    deployless = parameters.deployless ?? false,\n  } = typeof client.batch?.multicall === 'object' ? client.batch.multicall : {}\n\n  const multicallAddress = (() => {\n    if (parameters.multicallAddress) return parameters.multicallAddress\n    if (deployless) return null\n    if (client.chain) {\n      return getChainContractAddress({\n        blockNumber,\n        chain: client.chain,\n        contract: 'multicall3',\n      })\n    }\n    throw new Error(\n      'client chain not configured. multicallAddress is required.',\n    )\n  })()\n\n  type Aggregate3Calls = {\n    allowFailure: boolean\n    callData: Hex\n    target: Address\n  }[]\n\n  const chunkedCalls: Aggregate3Calls[] = [[]]\n  let currentChunk = 0\n  let currentChunkSize = 0\n  for (let i = 0; i < contracts.length; i++) {\n    const { abi, address, args, functionName } = contracts[i]\n    try {\n      const callData = encodeFunctionData({ abi, args, functionName })\n\n      currentChunkSize += (callData.length - 2) / 2\n      // Check to see if we need to create a new chunk.\n      if (\n        // Check if batching is enabled.\n        batchSize > 0 &&\n        // Check if the current size of the batch exceeds the size limit.\n        currentChunkSize > batchSize &&\n        // Check if the current chunk is not already empty.\n        chunkedCalls[currentChunk].length > 0\n      ) {\n        currentChunk++\n        currentChunkSize = (callData.length - 2) / 2\n        chunkedCalls[currentChunk] = []\n      }\n\n      chunkedCalls[currentChunk] = [\n        ...chunkedCalls[currentChunk],\n        {\n          allowFailure: true,\n          callData,\n          target: address,\n        },\n      ]\n    } catch (err) {\n      const error = getContractError(err as BaseError, {\n        abi,\n        address,\n        args,\n        docsPath: '/docs/contract/multicall',\n        functionName,\n        sender: account,\n      })\n      if (!allowFailure) throw error\n      chunkedCalls[currentChunk] = [\n        ...chunkedCalls[currentChunk],\n        {\n          allowFailure: true,\n          callData: '0x' as Hex,\n          target: address,\n        },\n      ]\n    }\n  }\n\n  const aggregate3Results = await Promise.allSettled(\n    chunkedCalls.map((calls) =>\n      getAction(\n        client,\n        readContract,\n        'readContract',\n      )({\n        ...(multicallAddress === null\n          ? { code: multicall3Bytecode }\n          : { address: multicallAddress }),\n        abi: multicall3Abi,\n        account,\n        args: [calls],\n        authorizationList,\n        blockNumber,\n        blockOverrides,\n        blockTag,\n        functionName: 'aggregate3',\n        stateOverride,\n      }),\n    ),\n  )\n\n  const results = []\n  for (let i = 0; i < aggregate3Results.length; i++) {\n    const result = aggregate3Results[i]\n\n    // If an error occurred in a `readContract` invocation (ie. network error),\n    // then append the failure reason to each contract result.\n    if (result.status === 'rejected') {\n      if (!allowFailure) throw result.reason\n      for (let j = 0; j < chunkedCalls[i].length; j++) {\n        results.push({\n          status: 'failure',\n          error: result.reason,\n          result: undefined,\n        })\n      }\n      continue\n    }\n\n    // If the `readContract` call was successful, then decode the results.\n    const aggregate3Result = result.value\n    for (let j = 0; j < aggregate3Result.length; j++) {\n      // Extract the response from `readContract`\n      const { returnData, success } = aggregate3Result[j]\n\n      // Extract the request call data from the original call.\n      const { callData } = chunkedCalls[i][j]\n\n      // Extract the contract config for this call from the `contracts` argument\n      // for decoding.\n      const { abi, address, functionName, args } = contracts[\n        results.length\n      ] as ContractFunctionParameters\n\n      try {\n        if (callData === '0x') throw new AbiDecodingZeroDataError()\n        if (!success) throw new RawContractError({ data: returnData })\n        const result = decodeFunctionResult({\n          abi,\n          args,\n          data: returnData,\n          functionName,\n        })\n        results.push(allowFailure ? { result, status: 'success' } : result)\n      } catch (err) {\n        const error = getContractError(err as BaseError, {\n          abi,\n          address,\n          args,\n          docsPath: '/docs/contract/multicall',\n          functionName,\n        })\n        if (!allowFailure) throw error\n        results.push({ error, result: undefined, status: 'failure' })\n      }\n    }\n  }\n\n  if (results.length !== contracts.length)\n    throw new BaseError('multicall results mismatch')\n  return results as MulticallReturnType<contracts, allowFailure>\n}\n", "import type { Abi, AbiStateMutability, Address, Narrow } from 'abitype'\nimport * as BlockOverrides from 'ox/BlockOverrides'\n\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js'\nimport type { BaseError } from '../../errors/base.js'\nimport { RawContractError } from '../../errors/contract.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block, BlockTag } from '../../types/block.js'\nimport type { Call, Calls } from '../../types/calls.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { MulticallResults } from '../../types/multicall.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { ExactPartial, UnionOmit } from '../../types/utils.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport { concat } from '../../utils/data/concat.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { getContractError } from '../../utils/errors/getContractError.js'\nimport {\n  type GetNodeErrorReturnType,\n  getNodeError,\n} from '../../utils/errors/getNodeError.js'\nimport {\n  type FormatBlockErrorType,\n  formatBlock,\n} from '../../utils/formatters/block.js'\nimport { formatLog } from '../../utils/formatters/log.js'\nimport {\n  type FormatTransactionRequestErrorType,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport {\n  type SerializeStateOverrideErrorType,\n  serializeStateOverride,\n} from '../../utils/stateOverride.js'\nimport {\n  type AssertRequestErrorType,\n  assertRequest,\n} from '../../utils/transaction/assertRequest.js'\n\ntype CallExtraProperties = ExactPartial<\n  UnionOmit<\n    TransactionRequest,\n    'blobs' | 'data' | 'kzg' | 'to' | 'sidecars' | 'value'\n  >\n> & {\n  /** Account attached to the call (msg.sender). */\n  account?: Account | Address | undefined\n  /** Recipient. `null` if contract deployment. */\n  to?: Address | null | undefined\n}\n\nexport type SimulateBlocksParameters<\n  calls extends readonly unknown[] = readonly unknown[],\n> = {\n  /** Blocks to simulate. */\n  blocks: readonly {\n    /** Block overrides. */\n    blockOverrides?: BlockOverrides.BlockOverrides | undefined\n    /** Calls to execute. */\n    calls: Calls<Narrow<calls>, CallExtraProperties>\n    /** State overrides. */\n    stateOverrides?: StateOverride | undefined\n  }[]\n  /** Whether to return the full transactions. */\n  returnFullTransactions?: boolean | undefined\n  /** Whether to trace transfers. */\n  traceTransfers?: boolean | undefined\n  /** Whether to enable validation mode. */\n  validation?: boolean | undefined\n} & (\n  | {\n      /** The balance of the account at a block number. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n  | {\n      blockNumber?: undefined\n      /**\n       * The balance of the account at a block tag.\n       * @default 'latest'\n       */\n      blockTag?: BlockTag | undefined\n    }\n)\n\nexport type SimulateBlocksReturnType<\n  calls extends readonly unknown[] = readonly unknown[],\n> = readonly (Block & {\n  calls: MulticallResults<\n    Narrow<calls>,\n    true,\n    {\n      extraProperties: {\n        data: Hex\n        gasUsed: bigint\n        logs?: Log[] | undefined\n      }\n      error: Error\n      mutability: AbiStateMutability\n    }\n  >\n})[]\n\nexport type SimulateBlocksErrorType =\n  | AssertRequestErrorType\n  | DecodeFunctionResultErrorType\n  | EncodeFunctionDataErrorType\n  | FormatBlockErrorType\n  | FormatTransactionRequestErrorType\n  | GetNodeErrorReturnType\n  | ParseAccountErrorType\n  | SerializeStateOverrideErrorType\n  | NumberToHexErrorType\n  | ErrorType\n\n/**\n * Simulates a set of calls on block(s) with optional block and state overrides.\n *\n * @example\n * ```ts\n * import { createClient, http, parseEther } from 'viem'\n * import { simulate } from 'viem/actions'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n *\n * const result = await simulate(client, {\n *   blocks: [{\n *     blockOverrides: {\n *       number: 69420n,\n *     },\n *     calls: [{\n *       {\n *         account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n *         data: '0xdeadbeef',\n *         to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *       },\n *       {\n *         account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n *         to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *         value: parseEther('1'),\n *       },\n *     }],\n *     stateOverrides: [{\n *       address: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n *       balance: parseEther('10'),\n *     }],\n *   }]\n * })\n * ```\n *\n * @param client - Client to use.\n * @param parameters - {@link SimulateBlocksParameters}\n * @returns Simulated blocks. {@link SimulateBlocksReturnType}\n */\nexport async function simulateBlocks<\n  chain extends Chain | undefined,\n  const calls extends readonly unknown[],\n>(\n  client: Client<Transport, chain>,\n  parameters: SimulateBlocksParameters<calls>,\n): Promise<SimulateBlocksReturnType<calls>> {\n  const {\n    blockNumber,\n    blockTag = client.experimental_blockTag ?? 'latest',\n    blocks,\n    returnFullTransactions,\n    traceTransfers,\n    validation,\n  } = parameters\n\n  try {\n    const blockStateCalls = []\n    for (const block of blocks) {\n      const blockOverrides = block.blockOverrides\n        ? BlockOverrides.toRpc(block.blockOverrides)\n        : undefined\n      const calls = block.calls.map((call_) => {\n        const call = call_ as Call<unknown, CallExtraProperties>\n        const account = call.account ? parseAccount(call.account) : undefined\n        const data = call.abi ? encodeFunctionData(call) : call.data\n        const request = {\n          ...call,\n          account,\n          data: call.dataSuffix\n            ? concat([data || '0x', call.dataSuffix])\n            : data,\n          from: call.from ?? account?.address,\n        } as const\n        assertRequest(request)\n        return formatTransactionRequest(request)\n      })\n      const stateOverrides = block.stateOverrides\n        ? serializeStateOverride(block.stateOverrides)\n        : undefined\n\n      blockStateCalls.push({\n        blockOverrides,\n        calls,\n        stateOverrides,\n      })\n    }\n\n    const blockNumberHex =\n      typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n    const block = blockNumberHex || blockTag\n\n    const result = await client.request({\n      method: 'eth_simulateV1',\n      params: [\n        { blockStateCalls, returnFullTransactions, traceTransfers, validation },\n        block,\n      ],\n    })\n\n    return result.map((block, i) => ({\n      ...formatBlock(block),\n      calls: block.calls.map((call, j) => {\n        const { abi, args, functionName, to } = blocks[i].calls[j] as Call<\n          unknown,\n          CallExtraProperties\n        >\n\n        const data = call.error?.data ?? call.returnData\n        const gasUsed = BigInt(call.gasUsed)\n        const logs = call.logs?.map((log) => formatLog(log))\n        const status = call.status === '0x1' ? 'success' : 'failure'\n\n        const result =\n          abi && status === 'success' && data !== '0x'\n            ? decodeFunctionResult({\n                abi,\n                data,\n                functionName,\n              })\n            : null\n\n        const error = (() => {\n          if (status === 'success') return undefined\n\n          let error: Error | undefined\n          if (data === '0x') error = new AbiDecodingZeroDataError()\n          else if (data) error = new RawContractError({ data })\n\n          if (!error) return undefined\n          return getContractError(error, {\n            abi: (abi ?? []) as Abi,\n            address: to ?? '0x',\n            args,\n            functionName: functionName ?? '<unknown>',\n          })\n        })()\n\n        return {\n          data,\n          gasUsed,\n          logs,\n          status,\n          ...(status === 'success'\n            ? {\n                result,\n              }\n            : {\n                error,\n              }),\n        }\n      }),\n    })) as unknown as SimulateBlocksReturnType<calls>\n  } catch (e) {\n    const cause = e as BaseError\n    const error = getNodeError(cause, {})\n    if (error instanceof UnknownNodeError) throw cause\n    throw error\n  }\n}\n", "import type * as abitype from 'abitype'\nimport type * as Abi from '../Abi.js'\nimport type * as AbiItem from '../AbiItem.js'\nimport type * as AbiParameters from '../AbiParameters.js'\nimport * as Address from '../Address.js'\nimport * as Errors from '../Errors.js'\nimport type {\n  Compute,\n  IsNever,\n  IsUnion,\n  TypeErrorMessage,\n  UnionToTuple,\n} from './types.js'\n\n/** @internal */\nexport type ExtractArgs<\n  abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n  name extends AbiItem.Name<abi> = AbiItem.Name<abi>,\n> = abitype.AbiParametersToPrimitiveTypes<\n  AbiItem.FromAbi<abi extends Abi.Abi ? abi : Abi.Abi, name>['inputs'],\n  'inputs'\n> extends infer args\n  ? [args] extends [never]\n    ? readonly unknown[]\n    : args\n  : readonly unknown[]\n\n/** @internal */\nexport type ExtractForArgs<\n  abi extends Abi.Abi,\n  name extends AbiItem.Name<abi>,\n  args extends ExtractArgs<abi, name>,\n> = IsUnion<name> extends true\n  ? {\n      [key in keyof abi]: abi[key] extends { name: name } ? abi[key] : never\n    }[number]\n  : AbiItem.FromAbi<abi, name> extends infer abiItem extends AbiItem.AbiItem & {\n        inputs: readonly abitype.AbiParameter[]\n      }\n    ? IsUnion<abiItem> extends true // narrow overloads using `args` by converting to tuple and filtering out overloads that don't match\n      ? UnionToTuple<abiItem> extends infer abiItems extends\n          readonly (AbiItem.AbiItem & {\n            inputs: readonly abitype.AbiParameter[]\n          })[]\n        ? IsNever<TupleToUnion<abiItems, abi, name, args>> extends true\n          ? Compute<\n              abiItems[0] & {\n                readonly overloads: UnionToTuple<\n                  Exclude<abiItems[number], abiItems[0]>\n                >\n              }\n            >\n          : TupleToUnion<abiItems, abi, name, args> // convert back to union (removes `never` tuple entries: `['foo', never, 'bar'][number]` => `'foo' | 'bar'`)\n        : never\n      : abiItem\n    : never\n\n/** @internal */\nexport type TupleToUnion<\n  abiItems extends readonly {\n    inputs: readonly abitype.AbiParameter[]\n  }[],\n  abi extends Abi.Abi,\n  name extends AbiItem.Name<abi>,\n  args extends ExtractArgs<abi, name>,\n> = {\n  [k in keyof abiItems]: (\n    readonly [] extends args\n      ? readonly [] // fallback to `readonly []` if `args` has no value (e.g. `args` property not provided)\n      : args\n  ) extends abitype.AbiParametersToPrimitiveTypes<\n    abiItems[k]['inputs'],\n    'inputs'\n  >\n    ? abiItems[k]\n    : never\n}[number]\n\n/** @internal */\nexport type ErrorSignature<\n  name extends string = string,\n  parameters extends string = string,\n> = `error ${name}(${parameters})`\n\n/** @internal */\nexport type IsErrorSignature<signature extends string> =\n  signature extends ErrorSignature<infer name> ? IsName<name> : false\n\n/** @internal */\nexport type EventSignature<\n  name extends string = string,\n  parameters extends string = string,\n> = `event ${name}(${parameters})`\n\n/** @internal */\nexport type IsEventSignature<signature extends string> =\n  signature extends EventSignature<infer name> ? IsName<name> : false\n\n/** @internal */\nexport type FunctionSignature<\n  name extends string = string,\n  tail extends string = string,\n> = `function ${name}(${tail}`\nexport type IsFunctionSignature<signature> =\n  signature extends FunctionSignature<infer name>\n    ? IsName<name> extends true\n      ? signature extends ValidFunctionSignatures\n        ? true\n        : // Check that `Parameters` is not absorbing other types (e.g. `returns`)\n          signature extends `function ${string}(${infer parameters})`\n          ? parameters extends InvalidFunctionParameters\n            ? false\n            : true\n          : false\n      : false\n    : false\n/** @internal */\nexport type Scope = 'public' | 'external' // `internal` or `private` functions wouldn't make it to ABI so can ignore\n\n/** @internal */\nexport type Returns = `returns (${string})` | `returns(${string})`\n\n// Almost all valid function signatures, except `function ${string}(${infer parameters})` since `parameters` can absorb returns\n/** @internal */\nexport type ValidFunctionSignatures =\n  | `function ${string}()`\n  // basic\n  | `function ${string}() ${Returns}`\n  | `function ${string}() ${abitype.AbiStateMutability}`\n  | `function ${string}() ${Scope}`\n  // combinations\n  | `function ${string}() ${abitype.AbiStateMutability} ${Returns}`\n  | `function ${string}() ${Scope} ${Returns}`\n  | `function ${string}() ${Scope} ${abitype.AbiStateMutability}`\n  | `function ${string}() ${Scope} ${abitype.AbiStateMutability} ${Returns}`\n  // Parameters\n  | `function ${string}(${string}) ${Returns}`\n  | `function ${string}(${string}) ${abitype.AbiStateMutability}`\n  | `function ${string}(${string}) ${Scope}`\n  | `function ${string}(${string}) ${abitype.AbiStateMutability} ${Returns}`\n  | `function ${string}(${string}) ${Scope} ${Returns}`\n  | `function ${string}(${string}) ${Scope} ${abitype.AbiStateMutability}`\n  | `function ${string}(${string}) ${Scope} ${abitype.AbiStateMutability} ${Returns}`\n\n/** @internal */\nexport type StructSignature<\n  name extends string = string,\n  properties extends string = string,\n> = `struct ${name} {${properties}}`\n\n/** @internal */\nexport type IsStructSignature<signature extends string> =\n  signature extends StructSignature<infer name> ? IsName<name> : false\n\n/** @internal */\nexport type ConstructorSignature<tail extends string = string> =\n  `constructor(${tail}`\n\n/** @internal */\nexport type IsConstructorSignature<signature> =\n  signature extends ConstructorSignature\n    ? signature extends ValidConstructorSignatures\n      ? true\n      : false\n    : false\n\n/** @internal */\nexport type ValidConstructorSignatures =\n  | `constructor(${string})`\n  | `constructor(${string}) payable`\n\n/** @internal */\nexport type FallbackSignature<abiStateMutability extends '' | ' payable' = ''> =\n  `fallback() external${abiStateMutability}`\n\n/** @internal */\nexport type ReceiveSignature = 'receive() external payable'\n\n// TODO: Maybe use this for signature validation one day\n// https://twitter.com/devanshj__/status/1610423724708343808\n/** @internal */\nexport type IsSignature<type extends string> =\n  | (IsErrorSignature<type> extends true ? true : never)\n  | (IsEventSignature<type> extends true ? true : never)\n  | (IsFunctionSignature<type> extends true ? true : never)\n  | (IsStructSignature<type> extends true ? true : never)\n  | (IsConstructorSignature<type> extends true ? true : never)\n  | (type extends FallbackSignature ? true : never)\n  | (type extends ReceiveSignature ? true : never) extends infer condition\n  ? [condition] extends [never]\n    ? false\n    : true\n  : false\n\n/** @internal */\nexport type Signature<\n  string1 extends string,\n  string2 extends string | unknown = unknown,\n> = IsSignature<string1> extends true\n  ? string1\n  : string extends string1 // if exactly `string` (not narrowed), then pass through as valid\n    ? string1\n    : TypeErrorMessage<`Signature \"${string1}\" is invalid${string2 extends string\n        ? ` at position ${string2}`\n        : ''}.`>\n\n/** @internal */\nexport type Signatures<signatures extends readonly string[]> = {\n  [key in keyof signatures]: Signature<signatures[key], key>\n}\n\n/** @internal */\nexport type IsName<name extends string> = name extends ''\n  ? false\n  : ValidateName<name> extends name\n    ? true\n    : false\n\n/** @internal */\nexport type ValidateName<\n  name extends string,\n  checkCharacters extends boolean = false,\n> = name extends `${string}${' '}${string}`\n  ? TypeErrorMessage<`Identifier \"${name}\" cannot contain whitespace.`>\n  : IsSolidityKeyword<name> extends true\n    ? TypeErrorMessage<`\"${name}\" is a protected Solidity keyword.`>\n    : name extends `${number}`\n      ? TypeErrorMessage<`Identifier \"${name}\" cannot be a number string.`>\n      : name extends `${number}${string}`\n        ? TypeErrorMessage<`Identifier \"${name}\" cannot start with a number.`>\n        : checkCharacters extends true\n          ? IsValidCharacter<name> extends true\n            ? name\n            : TypeErrorMessage<`\"${name}\" contains invalid character.`>\n          : name\n\n/** @internal */\nexport type IsSolidityKeyword<type extends string> =\n  type extends SolidityKeywords ? true : false\n\n/** @internal */\nexport type SolidityKeywords =\n  | 'after'\n  | 'alias'\n  | 'anonymous'\n  | 'apply'\n  | 'auto'\n  | 'byte'\n  | 'calldata'\n  | 'case'\n  | 'catch'\n  | 'constant'\n  | 'copyof'\n  | 'default'\n  | 'defined'\n  | 'error'\n  | 'event'\n  | 'external'\n  | 'false'\n  | 'final'\n  | 'function'\n  | 'immutable'\n  | 'implements'\n  | 'in'\n  | 'indexed'\n  | 'inline'\n  | 'internal'\n  | 'let'\n  | 'mapping'\n  | 'match'\n  | 'memory'\n  | 'mutable'\n  | 'null'\n  | 'of'\n  | 'override'\n  | 'partial'\n  | 'private'\n  | 'promise'\n  | 'public'\n  | 'pure'\n  | 'reference'\n  | 'relocatable'\n  | 'return'\n  | 'returns'\n  | 'sizeof'\n  | 'static'\n  | 'storage'\n  | 'struct'\n  | 'super'\n  | 'supports'\n  | 'switch'\n  | 'this'\n  | 'true'\n  | 'try'\n  | 'typedef'\n  | 'typeof'\n  | 'var'\n  | 'view'\n  | 'virtual'\n  | `address${`[${string}]` | ''}`\n  | `bool${`[${string}]` | ''}`\n  | `string${`[${string}]` | ''}`\n  | `tuple${`[${string}]` | ''}`\n  | `bytes${number | ''}${`[${string}]` | ''}`\n  | `${'u' | ''}int${number | ''}${`[${string}]` | ''}`\n\n/** @internal */\nexport type IsValidCharacter<character extends string> =\n  character extends `${ValidCharacters}${infer tail}`\n    ? tail extends ''\n      ? true\n      : IsValidCharacter<tail>\n    : false\n\n// biome-ignore format: no formatting\n/** @internal */\nexport type ValidCharacters =\n  // uppercase letters\n  | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z'\n  // lowercase letters\n  | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z'\n  // numbers\n  | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n  // special characters\n  | '_' | '$'\n\n// Template string inference can absorb `returns`:\n// type Result = `function foo(string) return s (uint256)` extends `function ${string}(${infer Parameters})` ? Parameters : never\n// //   ^? type Result = \"string ) return s (uint256\"\n// So we need to validate against `returns` keyword with all combinations of whitespace\n/** @internal */\nexport type InvalidFunctionParameters =\n  | `${string}${MangledReturns} (${string}`\n  | `${string}) ${MangledReturns}${string}`\n  | `${string})${string}${MangledReturns}${string}(${string}`\n\n// r_e_t_u_r_n_s\n/** @internal */\nexport type MangledReturns =\n  // Single\n  | `r${string}eturns`\n  | `re${string}turns`\n  | `ret${string}urns`\n  | `retu${string}rns`\n  | `retur${string}ns`\n  | `return${string}s`\n  // Double\n  // `r_e*`\n  | `r${string}e${string}turns`\n  | `r${string}et${string}urns`\n  | `r${string}etu${string}rns`\n  | `r${string}etur${string}ns`\n  | `r${string}eturn${string}s`\n  // `re_t*`\n  | `re${string}t${string}urns`\n  | `re${string}tu${string}rns`\n  | `re${string}tur${string}ns`\n  | `re${string}turn${string}s`\n  // `ret_u*`\n  | `ret${string}u${string}rns`\n  | `ret${string}ur${string}ns`\n  | `ret${string}urn${string}s`\n  // `retu_r*`\n  | `retu${string}r${string}ns`\n  | `retu${string}rn${string}s`\n  // `retur_n*`\n  | `retur${string}n${string}s`\n  // Triple\n  // `r_e_t*`\n  | `r${string}e${string}t${string}urns`\n  | `r${string}e${string}tu${string}rns`\n  | `r${string}e${string}tur${string}ns`\n  | `r${string}e${string}turn${string}s`\n  // `re_t_u*`\n  | `re${string}t${string}u${string}rns`\n  | `re${string}t${string}ur${string}ns`\n  | `re${string}t${string}urn${string}s`\n  // `ret_u_r*`\n  | `ret${string}u${string}r${string}ns`\n  | `ret${string}u${string}rn${string}s`\n  // `retu_r_n*`\n  | `retu${string}r${string}n${string}s`\n  // Quadruple\n  // `r_e_t_u*`\n  | `r${string}e${string}t${string}u${string}rns`\n  | `r${string}e${string}t${string}ur${string}ns`\n  | `r${string}e${string}t${string}urn${string}s`\n  // `re_t_u_r*`\n  | `re${string}t${string}u${string}r${string}ns`\n  | `re${string}t${string}u${string}rn${string}s`\n  // `ret_u_r_n*`\n  | `ret${string}u${string}r${string}n${string}s`\n  // Quintuple\n  // `r_e_t_u_r*`\n  | `r${string}e${string}t${string}u${string}r${string}ns`\n  | `r${string}e${string}t${string}u${string}rn${string}s`\n  // `re_t_u_r_n*`\n  | `re${string}t${string}u${string}r${string}n${string}s`\n  // Sextuple\n  // `r_e_t_u_r_n_s`\n  | `r${string}e${string}t${string}u${string}r${string}n${string}s`\n\n/** @internal */\nexport type Widen<type> =\n  | ([unknown] extends [type] ? unknown : never)\n  | (type extends Function ? type : never)\n  | (type extends abitype.ResolvedRegister['bigIntType'] ? bigint : never)\n  | (type extends boolean ? boolean : never)\n  | (type extends abitype.ResolvedRegister['intType'] ? number : never)\n  | (type extends string\n      ? type extends abitype.ResolvedRegister['addressType']\n        ? abitype.ResolvedRegister['addressType']\n        : type extends abitype.ResolvedRegister['bytesType']['inputs']\n          ? abitype.ResolvedRegister['bytesType']\n          : string\n      : never)\n  | (type extends readonly [] ? readonly [] : never)\n  | (type extends Record<string, unknown>\n      ? { [K in keyof type]: Widen<type[K]> }\n      : never)\n  | (type extends { length: number }\n      ? {\n          [K in keyof type]: Widen<type[K]>\n        } extends infer Val extends readonly unknown[]\n        ? readonly [...Val]\n        : never\n      : never)\n\n/** @internal */\nexport function normalizeSignature(signature: string): string {\n  let active = true\n  let current = ''\n  let level = 0\n  let result = ''\n  let valid = false\n\n  for (let i = 0; i < signature.length; i++) {\n    const char = signature[i]!\n\n    // If the character is a separator, we want to reactivate.\n    if (['(', ')', ','].includes(char)) active = true\n\n    // If the character is a \"level\" token, we want to increment/decrement.\n    if (char === '(') level++\n    if (char === ')') level--\n\n    // If we aren't active, we don't want to mutate the result.\n    if (!active) continue\n\n    // If level === 0, we are at the definition level.\n    if (level === 0) {\n      if (char === ' ' && ['event', 'function', 'error', ''].includes(result))\n        result = ''\n      else {\n        result += char\n\n        // If we are at the end of the definition, we must be finished.\n        if (char === ')') {\n          valid = true\n          break\n        }\n      }\n\n      continue\n    }\n\n    // Ignore spaces\n    if (char === ' ') {\n      // If the previous character is a separator, and the current section isn't empty, we want to deactivate.\n      if (signature[i - 1] !== ',' && current !== ',' && current !== ',(') {\n        current = ''\n        active = false\n      }\n      continue\n    }\n\n    result += char\n    current += char\n  }\n\n  if (!valid) throw new Errors.BaseError('Unable to normalize signature.')\n\n  return result\n}\n\n/** @internal */\nexport declare namespace normalizeSignature {\n  export type ErrorType = Errors.BaseError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function isArgOfType(\n  arg: unknown,\n  abiParameter: AbiParameters.Parameter,\n): boolean {\n  const argType = typeof arg\n  const abiParameterType = abiParameter.type\n  switch (abiParameterType) {\n    case 'address':\n      return Address.validate(arg as Address.Address, { strict: false })\n    case 'bool':\n      return argType === 'boolean'\n    case 'function':\n      return argType === 'string'\n    case 'string':\n      return argType === 'string'\n    default: {\n      if (abiParameterType === 'tuple' && 'components' in abiParameter)\n        return Object.values(abiParameter.components).every(\n          (component, index) => {\n            return isArgOfType(\n              Object.values(arg as unknown[] | Record<string, unknown>)[index],\n              component as AbiParameters.Parameter,\n            )\n          },\n        )\n\n      // `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n      // https://regexr.com/6v8hp\n      if (\n        /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(\n          abiParameterType,\n        )\n      )\n        return argType === 'number' || argType === 'bigint'\n\n      // `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n      // https://regexr.com/6va55\n      if (/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(abiParameterType))\n        return argType === 'string' || arg instanceof Uint8Array\n\n      // fixed-length (`<type>[M]`) and dynamic (`<type>[]`) arrays\n      // https://regexr.com/6va6i\n      if (/[a-z]+[1-9]{0,3}(\\[[0-9]{0,}\\])+$/.test(abiParameterType)) {\n        return (\n          Array.isArray(arg) &&\n          arg.every((x: unknown) =>\n            isArgOfType(x, {\n              ...abiParameter,\n              // Pop off `[]` or `[M]` from end of type\n              type: abiParameterType.replace(/(\\[[0-9]{0,}\\])$/, ''),\n            } as AbiParameters.Parameter),\n          )\n        )\n      }\n\n      return false\n    }\n  }\n}\n\n/** @internal */\nexport function getAmbiguousTypes(\n  sourceParameters: readonly AbiParameters.Parameter[],\n  targetParameters: readonly AbiParameters.Parameter[],\n  args: ExtractArgs,\n): AbiParameters.Parameter['type'][] | undefined {\n  for (const parameterIndex in sourceParameters) {\n    const sourceParameter = sourceParameters[parameterIndex]!\n    const targetParameter = targetParameters[parameterIndex]!\n\n    if (\n      sourceParameter.type === 'tuple' &&\n      targetParameter.type === 'tuple' &&\n      'components' in sourceParameter &&\n      'components' in targetParameter\n    )\n      return getAmbiguousTypes(\n        sourceParameter.components,\n        targetParameter.components,\n        (args as any)[parameterIndex],\n      )\n\n    const types = [sourceParameter.type, targetParameter.type]\n\n    const ambiguous = (() => {\n      if (types.includes('address') && types.includes('bytes20')) return true\n      if (types.includes('address') && types.includes('string'))\n        return Address.validate(args[parameterIndex] as Address.Address, {\n          strict: false,\n        })\n      if (types.includes('address') && types.includes('bytes'))\n        return Address.validate(args[parameterIndex] as Address.Address, {\n          strict: false,\n        })\n      return false\n    })()\n\n    if (ambiguous) return types\n  }\n\n  return\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as internal from './internal/abiItem.js'\nimport type { UnionCompute } from './internal/types.js'\n\n/** Root type for an item on an {@link ox#Abi.Abi}. */\nexport type AbiItem = Abi.Abi[number]\n\n/**\n * Extracts an {@link ox#AbiItem.AbiItem} item from an {@link ox#Abi.Abi}, given a name.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n *   'error Foo(string)',\n *   'function foo(string)',\n *   'event Bar(uint256)',\n * ])\n *\n * type Foo = AbiItem.FromAbi<typeof abi, 'Foo'>\n * //   ^?\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type FromAbi<\n  abi extends Abi.Abi,\n  name extends ExtractNames<abi>,\n> = Extract<abi[number], { name: name }>\n\n/**\n * Extracts the names of all {@link ox#AbiItem.AbiItem} items in an {@link ox#Abi.Abi}.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n *   'error Foo(string)',\n *   'function foo(string)',\n *   'event Bar(uint256)',\n * ])\n *\n * type names = AbiItem.Name<typeof abi>\n * //   ^?\n *\n * ```\n */\nexport type Name<abi extends Abi.Abi | readonly unknown[] = Abi.Abi> =\n  abi extends Abi.Abi ? ExtractNames<abi> : string\n\nexport type ExtractNames<abi extends Abi.Abi> = Extract<\n  abi[number],\n  { name: string }\n>['name']\n\n/**\n * Formats an {@link ox#AbiItem.AbiItem} into a **Human Readable ABI Item**.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const formatted = AbiItem.format({\n *   type: 'function',\n *   name: 'approve',\n *   stateMutability: 'nonpayable',\n *   inputs: [\n *     {\n *       name: 'spender',\n *       type: 'address',\n *     },\n *     {\n *       name: 'amount',\n *       type: 'uint256',\n *     },\n *   ],\n *   outputs: [{ type: 'bool' }],\n * })\n *\n * formatted\n * //    ^?\n *\n *\n * ```\n *\n * @param abiItem - The ABI Item to format.\n * @returns The formatted ABI Item  .\n */\nexport function format<const abiItem extends AbiItem>(\n  abiItem: abiItem | AbiItem,\n): abitype.FormatAbiItem<abiItem> {\n  return abitype.formatAbiItem(abiItem) as never\n}\n\nexport declare namespace format {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses an arbitrary **JSON ABI Item** or **Human Readable ABI Item** into a typed {@link ox#AbiItem.AbiItem}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from({\n *   type: 'function',\n *   name: 'approve',\n *   stateMutability: 'nonpayable',\n *   inputs: [\n *     {\n *       name: 'spender',\n *       type: 'address',\n *     },\n *     {\n *       name: 'amount',\n *       type: 'uint256',\n *     },\n *   ],\n *   outputs: [{ type: 'bool' }],\n * })\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from(\n *   'function approve(address spender, uint256 amount) returns (bool)' // [!code hl]\n * )\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from([\n *   'struct Foo { address spender; uint256 amount; }', // [!code hl]\n *   'function approve(Foo foo) returns (bool)',\n * ])\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiItem - The ABI Item to parse.\n * @returns The typed ABI Item.\n */\nexport function from<\n  const abiItem extends AbiItem | string | readonly string[],\n>(\n  abiItem: (abiItem | AbiItem | string | readonly string[]) &\n    (\n      | (abiItem extends string ? internal.Signature<abiItem> : never)\n      | (abiItem extends readonly string[]\n          ? internal.Signatures<abiItem>\n          : never)\n      | AbiItem\n    ),\n  options: from.Options = {},\n): from.ReturnType<abiItem> {\n  const { prepare = true } = options\n  const item = (() => {\n    if (Array.isArray(abiItem)) return abitype.parseAbiItem(abiItem)\n    if (typeof abiItem === 'string')\n      return abitype.parseAbiItem(abiItem as never)\n    return abiItem\n  })() as AbiItem\n  return {\n    ...item,\n    ...(prepare ? { hash: getSignatureHash(item) } : {}),\n  } as never\n}\n\nexport declare namespace from {\n  type Options = {\n    /**\n     * Whether or not to prepare the extracted item (optimization for encoding performance).\n     * When `true`, the `hash` property is computed and included in the returned value.\n     *\n     * @default true\n     */\n    prepare?: boolean | undefined\n  }\n\n  type ReturnType<abiItem extends AbiItem | string | readonly string[]> =\n    abiItem extends string\n      ? abitype.ParseAbiItem<abiItem>\n      : abiItem extends readonly string[]\n        ? abitype.ParseAbiItem<abiItem>\n        : abiItem\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Extracts an {@link ox#AbiItem.AbiItem} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ABI Items can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n *   'function foo()',\n *   'event Transfer(address owner, address to, uint256 tokenId)',\n *   'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiItem.fromAbi(abi, 'Transfer') // [!code focus]\n * //    ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Items can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n *   'function foo()',\n *   'event Transfer(address owner, address to, uint256 tokenId)',\n *   'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiItem.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * //    ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Item from an `eth_call` RPC response,\n * a Transaction `input`, or from Event Log `topics`.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi<\n  const abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n  const args extends internal.ExtractArgs<abi, name> | undefined = undefined,\n  //\n  allNames = Name<abi>,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  name: Hex.Hex | (name extends allNames ? name : never),\n  options?: fromAbi.Options<abi, name, args>,\n): fromAbi.ReturnType<abi, name, args> {\n  const { args = [], prepare = true } = (options ??\n    {}) as unknown as fromAbi.Options\n\n  const isSelector = Hex.validate(name, { strict: false })\n  const abiItems = (abi as Abi.Abi).filter((abiItem) => {\n    if (isSelector) {\n      if (abiItem.type === 'function' || abiItem.type === 'error')\n        return getSelector(abiItem) === Hex.slice(name, 0, 4)\n      if (abiItem.type === 'event') return getSignatureHash(abiItem) === name\n      return false\n    }\n    return 'name' in abiItem && abiItem.name === name\n  })\n\n  if (abiItems.length === 0) throw new NotFoundError({ name: name as string })\n  if (abiItems.length === 1)\n    return {\n      ...abiItems[0],\n      ...(prepare ? { hash: getSignatureHash(abiItems[0]!) } : {}),\n    } as never\n\n  let matchedAbiItem: AbiItem | undefined\n  for (const abiItem of abiItems) {\n    if (!('inputs' in abiItem)) continue\n    if (!args || args.length === 0) {\n      if (!abiItem.inputs || abiItem.inputs.length === 0)\n        return {\n          ...abiItem,\n          ...(prepare ? { hash: getSignatureHash(abiItem) } : {}),\n        } as never\n      continue\n    }\n    if (!abiItem.inputs) continue\n    if (abiItem.inputs.length === 0) continue\n    if (abiItem.inputs.length !== args.length) continue\n    const matched = args.every((arg, index) => {\n      const abiParameter = 'inputs' in abiItem && abiItem.inputs![index]\n      if (!abiParameter) return false\n      return internal.isArgOfType(arg, abiParameter)\n    })\n    if (matched) {\n      // Check for ambiguity against already matched parameters (e.g. `address` vs `bytes20`).\n      if (\n        matchedAbiItem &&\n        'inputs' in matchedAbiItem &&\n        matchedAbiItem.inputs\n      ) {\n        const ambiguousTypes = internal.getAmbiguousTypes(\n          abiItem.inputs,\n          matchedAbiItem.inputs,\n          args as readonly unknown[],\n        )\n        if (ambiguousTypes)\n          throw new AmbiguityError(\n            {\n              abiItem,\n              type: ambiguousTypes[0]!,\n            },\n            {\n              abiItem: matchedAbiItem,\n              type: ambiguousTypes[1]!,\n            },\n          )\n      }\n\n      matchedAbiItem = abiItem\n    }\n  }\n\n  const abiItem = (() => {\n    if (matchedAbiItem) return matchedAbiItem\n    const [abiItem, ...overloads] = abiItems\n    return { ...abiItem!, overloads }\n  })()\n\n  if (!abiItem) throw new NotFoundError({ name: name as string })\n  return {\n    ...abiItem,\n    ...(prepare ? { hash: getSignatureHash(abiItem) } : {}),\n  } as never\n}\n\nexport declare namespace fromAbi {\n  type Options<\n    abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n    name extends Name<abi> = Name<abi>,\n    args extends\n      | internal.ExtractArgs<abi, name>\n      | undefined = internal.ExtractArgs<abi, name>,\n    ///\n    allArgs = internal.ExtractArgs<abi, name>,\n  > = {\n    /**\n     * Whether or not to prepare the extracted item (optimization for encoding performance).\n     * When `true`, the `hash` property is computed and included in the returned value.\n     *\n     * @default true\n     */\n    prepare?: boolean | undefined\n  } & UnionCompute<\n    readonly [] extends allArgs\n      ? {\n          args?:\n            | allArgs // show all options\n            // infer value, widen inferred value of `args` conditionally to match `allArgs`\n            | (abi extends Abi.Abi\n                ? args extends allArgs\n                  ? internal.Widen<args>\n                  : never\n                : never)\n            | undefined\n        }\n      : {\n          args?:\n            | allArgs // show all options\n            | (internal.Widen<args> & (args extends allArgs ? unknown : never)) // infer value, widen inferred value of `args` match `allArgs` (e.g. avoid union `args: readonly [123n] | readonly [bigint]`)\n            | undefined\n        }\n  >\n\n  type ReturnType<\n    abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n    name extends Name<abi> = Name<abi>,\n    args extends\n      | internal.ExtractArgs<abi, name>\n      | undefined = internal.ExtractArgs<abi, name>,\n    fallback = AbiItem,\n  > = abi extends Abi.Abi\n    ? Abi.Abi extends abi\n      ? fallback\n      : internal.ExtractForArgs<\n          abi,\n          name,\n          args extends internal.ExtractArgs<abi, name>\n            ? args\n            : internal.ExtractArgs<abi, name>\n        >\n    : fallback\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiItem.AbiItem}.\n *\n * Useful for computing function selectors for calldata.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const selector = AbiItem.getSelector('function ownerOf(uint256 tokenId)')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiItem } from 'ox'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const selector = AbiItem.getSelector(erc20Abi, 'ownerOf')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const selector = AbiItem.getSelector({\n *   inputs: [{ type: 'uint256' }],\n *   name: 'ownerOf',\n *   outputs: [],\n *   stateMutability: 'view',\n *   type: 'function'\n * })\n * // @log: '0x6352211e'\n * ```\n *\n * @param abiItem - The ABI item to compute the selector for. Can be a signature or an ABI item for an error, event, function, etc.\n * @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the function signature.\n */\nexport function getSelector<\n  abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n>(abi: abi | Abi.Abi | readonly unknown[], name: name): Hex.Hex\nexport function getSelector(abiItem: string | AbiItem): Hex.Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getSelector(\n  ...parameters:\n    | [abi: Abi.Abi | readonly unknown[], name: string]\n    | [string | AbiItem]\n): Hex.Hex {\n  const abiItem = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name] = parameters as [Abi.Abi | readonly unknown[], string]\n      return fromAbi(abi, name)\n    }\n    return parameters[0] as string | AbiItem\n  })()\n  return Hex.slice(getSignatureHash(abiItem), 0, 4)\n}\n\nexport declare namespace getSelector {\n  type ErrorType =\n    | getSignatureHash.ErrorType\n    | Hex.slice.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Computes the stringified signature for a given {@link ox#AbiItem.AbiItem}.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const signature = AbiItem.getSignature('function ownerOf(uint256 tokenId)')\n * // @log: 'ownerOf(uint256)'\n * ```\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiItem } from 'ox'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const signature = AbiItem.getSignature(erc20Abi, 'ownerOf')\n * // @log: 'ownerOf(uint256)'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const signature = AbiItem.getSignature({\n *   name: 'ownerOf',\n *   type: 'function',\n *   inputs: [{ name: 'tokenId', type: 'uint256' }],\n *   outputs: [],\n *   stateMutability: 'view',\n * })\n * // @log: 'ownerOf(uint256)'\n * ```\n *\n * @param abiItem - The ABI Item to compute the signature for.\n * @returns The stringified signature of the ABI Item.\n */\nexport function getSignature<\n  abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n>(abi: abi | Abi.Abi | readonly unknown[], name: name): string\nexport function getSignature(abiItem: string | AbiItem): string\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getSignature(\n  ...parameters:\n    | [abi: Abi.Abi | readonly unknown[], name: string]\n    | [string | AbiItem]\n): string {\n  const abiItem = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name] = parameters as [Abi.Abi | readonly unknown[], string]\n      return fromAbi(abi, name)\n    }\n    return parameters[0] as string | AbiItem\n  })()\n  const signature = (() => {\n    if (typeof abiItem === 'string') return abiItem\n    return abitype.formatAbiItem(abiItem)\n  })()\n  return internal.normalizeSignature(signature)\n}\n\nexport declare namespace getSignature {\n  type ErrorType =\n    | internal.normalizeSignature.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Computes the signature hash for an {@link ox#AbiItem.AbiItem}.\n *\n * Useful for computing Event Topic values.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const hash = AbiItem.getSignatureHash('event Transfer(address indexed from, address indexed to, uint256 amount)')\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'\n * ```\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiItem } from 'ox'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const hash = AbiItem.getSignatureHash(erc20Abi, 'Transfer')\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const hash = AbiItem.getSignatureHash({\n *   name: 'Transfer',\n *   type: 'event',\n *   inputs: [\n *     { name: 'from', type: 'address', indexed: true },\n *     { name: 'to', type: 'address', indexed: true },\n *     { name: 'amount', type: 'uint256', indexed: false },\n *   ],\n * })\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'\n * ```\n *\n * @param abiItem - The ABI Item to compute the signature hash for.\n * @returns The {@link ox#Hash.(keccak256:function)} hash of the ABI item's signature.\n */\nexport function getSignatureHash<\n  abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n>(abi: abi | Abi.Abi | readonly unknown[], name: name): Hex.Hex\nexport function getSignatureHash(abiItem: string | AbiItem): Hex.Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getSignatureHash(\n  ...parameters:\n    | [abi: Abi.Abi | readonly unknown[], name: string]\n    | [string | AbiItem]\n): Hex.Hex {\n  const abiItem = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name] = parameters as [Abi.Abi | readonly unknown[], string]\n      return fromAbi(abi, name)\n    }\n    return parameters[0] as string | AbiItem\n  })()\n  if (typeof abiItem !== 'string' && 'hash' in abiItem && abiItem.hash)\n    return abiItem.hash as Hex.Hex\n  return Hash.keccak256(Hex.fromString(getSignature(abiItem)))\n}\n\nexport declare namespace getSignatureHash {\n  type ErrorType =\n    | getSignature.ErrorType\n    | Hash.keccak256.ErrorType\n    | Hex.fromString.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Throws when ambiguous types are found on overloaded ABI items.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from(['function foo(address)', 'function foo(bytes20)'])\n * AbiFunction.fromAbi(foo, 'foo', {\n *   args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // @error: AbiItem.AmbiguityError: Found ambiguous types in overloaded ABI Items.\n * // @error: `bytes20` in `foo(bytes20)`, and\n * // @error: `address` in `foo(address)`\n * // @error: These types encode differently and cannot be distinguished at runtime.\n * // @error: Remove one of the ambiguous items in the ABI.\n * ```\n *\n * ### Solution\n *\n * Remove one of the ambiguous types from the ABI.\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n *   'function foo(address)',\n *   'function foo(bytes20)' // [!code --]\n * ])\n * AbiFunction.fromAbi(foo, 'foo', {\n *   args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // @error: AbiItem.AmbiguityError: Found ambiguous types in overloaded ABI Items.\n * // @error: `bytes20` in `foo(bytes20)`, and\n * // @error: `address` in `foo(address)`\n * // @error: These types encode differently and cannot be distinguished at runtime.\n * // @error: Remove one of the ambiguous items in the ABI.\n * ```\n */\nexport class AmbiguityError extends Errors.BaseError {\n  override readonly name = 'AbiItem.AmbiguityError'\n  constructor(\n    x: { abiItem: Abi.Abi[number]; type: string },\n    y: { abiItem: Abi.Abi[number]; type: string },\n  ) {\n    super('Found ambiguous types in overloaded ABI Items.', {\n      metaMessages: [\n        // TODO: abitype to add support for signature-formatted ABI items.\n        `\\`${x.type}\\` in \\`${internal.normalizeSignature(abitype.formatAbiItem(x.abiItem))}\\`, and`,\n        `\\`${y.type}\\` in \\`${internal.normalizeSignature(abitype.formatAbiItem(y.abiItem))}\\``,\n        '',\n        'These types encode differently and cannot be distinguished at runtime.',\n        'Remove one of the ambiguous items in the ABI.',\n      ],\n    })\n  }\n}\n\n/**\n * Throws when an ABI item is not found in the ABI.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n *   'function foo(address)',\n *   'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, 'baz')\n * // @error: AbiItem.NotFoundError: ABI function with name \"baz\" not found.\n * ```\n *\n * ### Solution\n *\n * Ensure the ABI item exists on the ABI.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n *   'function foo(address)',\n *   'function bar(uint)',\n *   'function baz(bool)' // [!code ++]\n * ])\n * AbiFunction.fromAbi(foo, 'baz')\n * ```\n */\nexport class NotFoundError extends Errors.BaseError {\n  override readonly name = 'AbiItem.NotFoundError'\n  constructor({\n    name,\n    data,\n    type = 'item',\n  }: {\n    name?: string | undefined\n    data?: Hex.Hex | undefined\n    type?: string | undefined\n  }) {\n    const selector = (() => {\n      if (name) return ` with name \"${name}\"`\n      if (data) return ` with data \"${data}\"`\n      return ''\n    })()\n    super(`ABI ${type}${selector} not found.`)\n  }\n}\n\n/**\n * Throws when the selector size is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n *   'function foo(address)',\n *   'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, '0xaaa')\n * // @error: AbiItem.InvalidSelectorSizeError: Selector size is invalid. Expected 4 bytes. Received 2 bytes (\"0xaaa\").\n * ```\n *\n * ### Solution\n *\n * Ensure the selector size is 4 bytes.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n *   'function foo(address)',\n *   'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, '0x7af82b1a')\n * ```\n */\nexport class InvalidSelectorSizeError extends Errors.BaseError {\n  override readonly name = 'AbiItem.InvalidSelectorSizeError'\n  constructor({ data }: { data: Hex.Hex }) {\n    super(\n      `Selector size is invalid. Expected 4 bytes. Received ${Hex.size(data)} bytes (\"${data}\").`,\n    )\n  }\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as AbiItem from './AbiItem.js'\nimport * as AbiParameters from './AbiParameters.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type * as internal from './internal/abiConstructor.js'\nimport type { IsNarrowable } from './internal/types.js'\n\n/** Root type for an {@link ox#AbiItem.AbiItem} with a `constructor` type. */\nexport type AbiConstructor = abitype.AbiConstructor\n\n/**\n * ABI-decodes the provided constructor input (`inputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from('constructor(address, uint256)')\n *\n * const bytecode = '0x...'\n *\n * const data = AbiConstructor.encode(constructor, {\n *   bytecode,\n *   args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n *\n * const decoded = AbiConstructor.decode(constructor, { // [!code focus]\n *   bytecode, // [!code focus]\n *   data, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object as a parameter to `AbiConstructor.decode`.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiConstructor } from 'ox'\n *\n * const abi = Abi.from([...])\n *\n * const data = AbiConstructor.encode(abi, {\n *   bytecode: '0x...',\n *   args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n *\n * const decoded = AbiConstructor.decode(abi, { // [!code focus]\n *   bytecode: '0x...', // [!code focus]\n *   data, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param abiConstructor - The ABI Constructor to decode.\n * @param options - Decoding options.\n * @returns The decoded constructor inputs.\n */\nexport function decode<\n  const abi extends Abi.Abi | readonly unknown[],\n  abiConstructor extends\n    AbiConstructor = fromAbi.ReturnType<abi> extends AbiConstructor\n    ? fromAbi.ReturnType<abi>\n    : never,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  options: decode.Options,\n): decode.ReturnType<abiConstructor>\nexport function decode<const abiConstructor extends AbiConstructor>(\n  abiConstructor: abiConstructor | AbiConstructor,\n  options: decode.Options,\n): decode.ReturnType<abiConstructor>\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decode(\n  ...parameters:\n    | [abi: Abi.Abi | readonly unknown[], options: decode.Options]\n    | [abiConstructor: AbiConstructor, options: decode.Options]\n): decode.ReturnType {\n  const [abiConstructor, options] = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, options] = parameters as [\n        Abi.Abi | readonly unknown[],\n        decode.Options,\n      ]\n      return [fromAbi(abi), options] as [AbiConstructor, decode.Options]\n    }\n    return parameters as [AbiConstructor, decode.Options]\n  })()\n\n  const { bytecode } = options\n  if (abiConstructor.inputs?.length === 0) return undefined\n  const data = options.data.replace(bytecode, '0x') as Hex.Hex\n  return AbiParameters.decode(abiConstructor.inputs, data)\n}\n\nexport declare namespace decode {\n  interface Options {\n    /** The bytecode of the contract. */\n    bytecode: Hex.Hex\n    /** The encoded constructor. */\n    data: Hex.Hex\n  }\n\n  type ReturnType<abiConstructor extends AbiConstructor = AbiConstructor> =\n    | (abiConstructor['inputs']['length'] extends 0\n        ? undefined\n        : abitype.AbiParametersToPrimitiveTypes<abiConstructor['inputs']>)\n    | (IsNarrowable<abiConstructor, AbiConstructor> extends true\n        ? never\n        : undefined)\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes the provided constructor input (`inputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from('constructor(address, uint256)')\n *\n * const data = AbiConstructor.encode(constructor, {\n *   bytecode: '0x...',\n *   args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object as a parameter to `AbiConstructor.encode`.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiConstructor } from 'ox'\n *\n * const abi = Abi.from([...])\n *\n * const data = AbiConstructor.encode(abi, { // [!code focus]\n *   bytecode: '0x...', // [!code focus]\n *   args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n], // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiConstructor.encode` to encode the constructor of a contract and deploy it.\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { AbiConstructor, Hex } from 'ox'\n *\n * // 1. Instantiate the ABI Constructor.\n * const constructor = AbiConstructor.from(\n *   'constructor(address owner, uint256 amount)',\n * )\n *\n * // 2. Encode the ABI Constructor.\n * const data = AbiConstructor.encode(constructor, {\n *   bytecode: '0x...',\n *   args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n *\n * // 3. Deploy the contract.\n * const hash = await window.ethereum!.request({\n *   method: 'eth_sendTransaction',\n *   params: [{ data }],\n * })\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiConstructor - The ABI Constructor to encode.\n * @param options - Encoding options.\n * @returns The encoded constructor.\n */\nexport function encode<\n  const abi extends Abi.Abi | readonly unknown[],\n  abiConstructor extends\n    AbiConstructor = fromAbi.ReturnType<abi> extends AbiConstructor\n    ? fromAbi.ReturnType<abi>\n    : never,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  options: encode.Options<abiConstructor>,\n): encode.ReturnType\nexport function encode<const abiConstructor extends AbiConstructor>(\n  abiConstructor: abiConstructor | AbiConstructor,\n  options: encode.Options<abiConstructor>,\n): encode.ReturnType\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encode(\n  ...parameters:\n    | [abi: Abi.Abi | readonly unknown[], options: encode.Options]\n    | [abiConstructor: AbiConstructor, options: encode.Options]\n): encode.ReturnType {\n  const [abiConstructor, options] = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, options] = parameters as [\n        Abi.Abi | readonly unknown[],\n        encode.Options,\n      ]\n      return [fromAbi(abi), options] as [AbiConstructor, encode.Options]\n    }\n\n    return parameters as [AbiConstructor, encode.Options]\n  })()\n\n  const { bytecode, args } = options\n  return Hex.concat(\n    bytecode,\n    abiConstructor.inputs?.length && args?.length\n      ? AbiParameters.encode(abiConstructor.inputs, args as readonly unknown[])\n      : '0x',\n  )\n}\n\nexport declare namespace encode {\n  type Options<\n    abiConstructor extends AbiConstructor = AbiConstructor,\n    ///\n    args extends abitype.AbiParametersToPrimitiveTypes<\n      abiConstructor['inputs']\n    > = abitype.AbiParametersToPrimitiveTypes<abiConstructor['inputs']>,\n  > = {\n    /** The bytecode of the contract. */\n    bytecode: Hex.Hex\n    /** The constructor arguments to encode. */\n    args?: args | undefined\n  } & (readonly [] extends args\n    ? {}\n    : {\n        /** The constructor arguments to encode. */\n        args: args\n      })\n\n  type ReturnType = Hex.Hex\n\n  type ErrorType =\n    | Hex.concat.ErrorType\n    | AbiParameters.encode.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function format<const abiConstructor extends AbiConstructor>(\n  abiConstructor: abiConstructor,\n): format.ReturnType<abiConstructor>\n/**\n * Formats an {@link ox#AbiConstructor.AbiConstructor} into a **Human Readable ABI Function**.\n *\n * @example\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const formatted = AbiConstructor.format({\n *   inputs: [\n *     { name: 'owner', type: 'address' },\n *   ],\n *   payable: false,\n *   stateMutability: 'nonpayable',\n *   type: 'constructor',\n * })\n *\n * formatted\n * //    ^?\n *\n *\n * ```\n *\n * @param abiConstructor - The ABI Constructor to format.\n * @returns The formatted ABI Constructor.\n */\nexport function format(abiConstructor: AbiConstructor): string\n/** @internal */\nexport function format(abiConstructor: AbiConstructor): format.ReturnType {\n  return abitype.formatAbiItem(abiConstructor)\n}\n\nexport declare namespace format {\n  type ReturnType<abiConstructor extends AbiConstructor = AbiConstructor> =\n    abitype.FormatAbiItem<abiConstructor>\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function from<\n  const abiConstructor extends AbiConstructor | string | readonly string[],\n>(\n  abiConstructor: (abiConstructor | string | readonly string[]) &\n    (\n      | (abiConstructor extends string\n          ? internal.Signature<abiConstructor>\n          : never)\n      | (abiConstructor extends readonly string[]\n          ? internal.Signatures<abiConstructor>\n          : never)\n      | AbiConstructor\n    ),\n): from.ReturnType<abiConstructor>\n/**\n * Parses an arbitrary **JSON ABI Constructor** or **Human Readable ABI Constructor** into a typed {@link ox#AbiConstructor.AbiConstructor}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from({\n *   inputs: [\n *     { name: 'owner', type: 'address' },\n *   ],\n *   payable: false,\n *   stateMutability: 'nonpayable',\n *   type: 'constructor',\n * })\n *\n * constructor\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from(\n *   'constructor(address owner)' // [!code hl]\n * )\n *\n * constructor\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from([\n *   'struct Foo { address owner; uint256 amount; }', // [!code hl]\n *   'constructor(Foo foo)',\n * ])\n *\n * constructor\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiConstructor - The ABI Constructor to parse.\n * @returns Typed ABI Constructor.\n */\nexport function from(\n  abiConstructor: AbiConstructor | string | readonly string[],\n): AbiConstructor\n/** @internal */\nexport function from(\n  abiConstructor: AbiConstructor | string | readonly string[],\n): from.ReturnType {\n  return AbiItem.from(abiConstructor as AbiConstructor)\n}\n\nexport declare namespace from {\n  type ReturnType<\n    abiConstructor extends\n      | AbiConstructor\n      | string\n      | readonly string[] = AbiConstructor,\n  > = AbiItem.from.ReturnType<abiConstructor>\n\n  type ErrorType = AbiItem.from.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function fromAbi<const abi extends Abi.Abi | readonly unknown[]>(\n  abi: abi | Abi.Abi | readonly unknown[],\n): fromAbi.ReturnType<abi>\n/**\n * Extracts an {@link ox#AbiConstructor.AbiConstructor} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Events can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiConstructor } from 'ox'\n *\n * const abi = Abi.from([\n *   'constructor(address owner)',\n *   'function foo()',\n *   'event Transfer(address owner, address to, uint256 tokenId)',\n *   'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiConstructor.fromAbi(abi) // [!code focus]\n * //    ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @returns The ABI constructor.\n */\nexport function fromAbi(abi: Abi.Abi | readonly unknown[]): AbiConstructor\n/** @internal */\nexport function fromAbi(abi: Abi.Abi | readonly unknown[]): fromAbi.ReturnType {\n  const item = (abi as Abi.Abi).find((item) => item.type === 'constructor')\n  if (!item) throw new AbiItem.NotFoundError({ name: 'constructor' })\n  return item\n}\n\nexport declare namespace fromAbi {\n  type ReturnType<abi extends Abi.Abi | readonly unknown[] = Abi.Abi> = Extract<\n    abi[number],\n    { type: 'constructor' }\n  >\n\n  type ErrorType = AbiItem.NotFoundError | Errors.GlobalErrorType\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as AbiItem from './AbiItem.js'\nimport * as AbiParameters from './AbiParameters.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type * as internal from './internal/abiFunction.js'\nimport type * as AbiItem_internal from './internal/abiItem.js'\nimport type * as AbiParameters_internal from './internal/abiParameters.js'\nimport type { IsNarrowable } from './internal/types.js'\n\n/** Root type for an {@link ox#AbiItem.AbiItem} with a `function` type. */\nexport type AbiFunction = abitype.AbiFunction & {\n  hash?: Hex.Hex | undefined\n  overloads?: readonly AbiFunction[] | undefined\n}\n\n/**\n * Extracts an {@link ox#AbiFunction.AbiFunction} item from an {@link ox#Abi.Abi}, given a name.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n *   'function foo(string)',\n *   'function bar(uint256)',\n * ])\n *\n * type Foo = AbiFunction.FromAbi<typeof abi, 'foo'>\n * //   ^?\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type FromAbi<\n  abi extends Abi.Abi,\n  name extends ExtractNames<abi>,\n> = abitype.ExtractAbiFunction<abi, name>\n\n/**\n * Extracts the names of all {@link ox#AbiFunction.AbiFunction} items in an {@link ox#Abi.Abi}.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n *   'function foo(string)',\n *   'function bar(uint256)',\n * ])\n *\n * type names = AbiFunction.Name<typeof abi>\n * //   ^?\n *\n *\n * ```\n */\nexport type Name<abi extends Abi.Abi | readonly unknown[] = Abi.Abi> =\n  abi extends Abi.Abi ? ExtractNames<abi> : string\n\nexport type ExtractNames<\n  abi extends Abi.Abi,\n  abiStateMutability extends\n    abitype.AbiStateMutability = abitype.AbiStateMutability,\n> = abitype.ExtractAbiFunctionNames<abi, abiStateMutability>\n\n/**\n * ABI-decodes function arguments according to the ABI Item's input types (`inputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from('function approve(address, uint256)')\n *\n * const data = AbiFunction.encodeData(\n *   approve,\n *   ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n * // '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n *\n * const input = AbiFunction.decodeData(approve, data) // [!code focus]\n * // @log: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object and a function name as parameters to {@link ox#AbiFunction.(decodeData:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([...])\n * const data = '0x...\n *\n * const input = AbiFunction.decodeData(\n *   abi, // [!code focus]\n *   'approve', // [!code focus]\n *   data\n * )\n * // @log: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * ```\n *\n * @param abiFunction - The ABI Item to decode.\n * @param data - The data to decode.\n */\nexport function decodeData<\n  const abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n  const args extends\n    | AbiItem_internal.ExtractArgs<abi, name>\n    | undefined = undefined,\n  //\n  abiFunction extends AbiFunction = AbiItem.fromAbi.ReturnType<\n    abi,\n    name,\n    args,\n    AbiFunction\n  >,\n  allNames = Name<abi>,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  name: Hex.Hex | (name extends allNames ? name : never),\n  data: Hex.Hex,\n): decodeData.ReturnType<abiFunction>\nexport function decodeData<const abiItem extends AbiFunction>(\n  abiFunction: abiItem | AbiFunction,\n  data: Hex.Hex,\n): decodeData.ReturnType<abiItem>\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decodeData(\n  ...parameters:\n    | [abi: Abi.Abi | readonly unknown[], name: Hex.Hex | string, data: Hex.Hex]\n    | [abiFunction: AbiFunction, data: Hex.Hex]\n) {\n  const [abiFunction, data] = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name, data] = parameters as [\n        Abi.Abi | readonly unknown[],\n        Hex.Hex | string,\n        Hex.Hex,\n      ]\n      return [fromAbi(abi, name), data]\n    }\n    return parameters as [AbiFunction, Hex.Hex]\n  })()\n\n  const { overloads } = abiFunction\n\n  if (Hex.size(data) < 4) throw new AbiItem.InvalidSelectorSizeError({ data })\n  if (abiFunction.inputs?.length === 0) return undefined\n\n  const item = overloads\n    ? fromAbi([abiFunction, ...overloads], data as never)\n    : abiFunction\n\n  if (Hex.size(data) <= 4) return undefined\n  return AbiParameters.decode(item.inputs, Hex.slice(data, 4))\n}\n\nexport declare namespace decodeData {\n  type ReturnType<abiFunction extends AbiFunction = AbiFunction> = IsNarrowable<\n    abiFunction,\n    AbiFunction\n  > extends true\n    ? abiFunction['inputs'] extends readonly []\n      ? undefined\n      :\n          | AbiParameters_internal.ToPrimitiveTypes<abiFunction['inputs']>\n          | (abiFunction['overloads'] extends readonly AbiFunction[]\n              ? AbiParameters_internal.ToPrimitiveTypes<\n                  abiFunction['overloads'][number]['inputs']\n                >\n              : never)\n    : unknown\n\n  type ErrorType =\n    | fromAbi.ErrorType\n    | AbiParameters.decode.ErrorType\n    | Hex.size.ErrorType\n    | Hex.slice.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * ABI-decodes a function's result according to the ABI Item's output types (`outputs`).\n *\n * :::tip\n *\n * This function is typically used to decode contract function return values (e.g. the response of an `eth_call` or the `input` property of a Transaction).\n *\n * See the [End-to-end Example](#end-to-end).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const data = '0x000000000000000000000000000000000000000000000000000000000000002a'\n *\n * const totalSupply = AbiFunction.from('function totalSupply() returns (uint256)')\n *\n * const output = AbiFunction.decodeResult(totalSupply, data)\n * // @log: 42n\n * ```\n *\n * @example\n * You can extract an ABI Function from a JSON ABI with {@link ox#AbiFunction.(fromAbi:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const data = '0x000000000000000000000000000000000000000000000000000000000000002a'\n *\n * const erc20Abi = Abi.from([...]) // [!code hl]\n * const totalSupply = AbiFunction.fromAbi(erc20Abi, 'totalSupply') // [!code hl]\n *\n * const output = AbiFunction.decodeResult(totalSupply, data)\n * // @log: 42n\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object and a function name as parameters to {@link ox#AbiFunction.(decodeResult:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const data = '0x000000000000000000000000000000000000000000000000000000000000002a'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const output = AbiFunction.decodeResult(\n *   erc20Abi, // [!code focus]\n *   'totalSupply', // [!code focus]\n *   data\n * )\n * // @log: 42n\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiFunction.decodeResult` to decode the result of a `balanceOf` contract call on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { Abi, AbiFunction } from 'ox'\n *\n * // 1. Extract the Function from the Contract's ABI.\n * const abi = Abi.from([\n *   // ...\n *   {\n *     name: 'balanceOf',\n *     type: 'function',\n *     inputs: [{ name: 'account', type: 'address' }],\n *     outputs: [{ name: 'balance', type: 'uint256' }],\n *     stateMutability: 'view',\n *   },\n *   // ...\n * ])\n * const balanceOf = AbiFunction.fromAbi(abi, 'balanceOf')\n *\n * // 2. Encode the Function Input.\n * const data = AbiFunction.encodeData(\n *   balanceOf,\n *   ['0xd2135CfB216b74109775236E36d4b433F1DF507B']\n * )\n *\n * // 3. Perform the Contract Call.\n * const response = await window.ethereum!.request({\n *   method: 'eth_call',\n *   params: [\n *     {\n *       data,\n *       to: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n *     },\n *   ],\n * })\n *\n * // 4. Decode the Function Output. // [!code focus]\n * const balance = AbiFunction.decodeResult(balanceOf, response) // [!code focus]\n * // @log: 42n\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiFunction - ABI Function to decode\n * @param data - ABI-encoded function output\n * @param options - Decoding options\n * @returns Decoded function output\n */\nexport function decodeResult<\n  const abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n  const args extends\n    | AbiItem_internal.ExtractArgs<abi, name>\n    | undefined = undefined,\n  //\n  abiFunction extends AbiFunction = AbiItem.fromAbi.ReturnType<\n    abi,\n    name,\n    args,\n    AbiFunction\n  >,\n  allNames = Name<abi>,\n  as extends 'Object' | 'Array' = 'Array',\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  name: Hex.Hex | (name extends allNames ? name : never),\n  data: Hex.Hex,\n  options?: decodeResult.Options<as> | undefined,\n): decodeResult.ReturnType<abiFunction, as>\nexport function decodeResult<\n  const abiFunction extends AbiFunction,\n  as extends 'Object' | 'Array' = 'Array',\n>(\n  abiFunction: abiFunction | AbiFunction,\n  data: Hex.Hex,\n  options?: decodeResult.Options<as> | undefined,\n): decodeResult.ReturnType<abiFunction, as>\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decodeResult(\n  ...parameters:\n    | [\n        abi: Abi.Abi | readonly unknown[],\n        name: Hex.Hex | string,\n        data: Hex.Hex,\n        options?: decodeResult.Options | undefined,\n      ]\n    | [\n        abiFunction: AbiFunction,\n        data: Hex.Hex,\n        options?: decodeResult.Options | undefined,\n      ]\n) {\n  const [abiFunction, data, options = {}] = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name, data, options] = parameters as [\n        Abi.Abi | readonly unknown[],\n        Hex.Hex | string,\n        Hex.Hex,\n        decodeResult.Options | undefined,\n      ]\n      return [fromAbi(abi, name), data, options]\n    }\n    return parameters as [\n      AbiFunction,\n      Hex.Hex,\n      decodeResult.Options | undefined,\n    ]\n  })()\n\n  const values = AbiParameters.decode(abiFunction.outputs, data, options)\n  if (values && Object.keys(values).length === 0) return undefined\n  if (values && Object.keys(values).length === 1) {\n    if (Array.isArray(values)) return values[0]\n    return Object.values(values)[0]\n  }\n  return values\n}\n\nexport declare namespace decodeResult {\n  type Options<as extends 'Object' | 'Array' = 'Array'> = {\n    /**\n     * Whether the decoded values should be returned as an `Object` or `Array`.\n     *\n     * @default \"Array\"\n     */\n    as?: as | 'Array' | 'Object' | undefined\n  }\n\n  type ReturnType<\n    abiFunction extends AbiFunction = AbiFunction,\n    as extends 'Object' | 'Array' = 'Array',\n  > = IsNarrowable<abiFunction, AbiFunction> extends true\n    ? abiFunction['outputs'] extends readonly []\n      ? undefined\n      : abiFunction['outputs'] extends readonly [\n            infer type extends abitype.AbiParameter,\n          ]\n        ? abitype.AbiParameterToPrimitiveType<type>\n        : AbiParameters.decode.ReturnType<\n              abiFunction['outputs'],\n              as\n            > extends infer types\n          ? types extends readonly []\n            ? undefined\n            : types extends readonly [infer type]\n              ? type\n              : types\n          : never\n    : unknown\n\n  type ErrorType = AbiParameters.decode.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes function arguments (`inputs`), prefixed with the 4 byte function selector.\n *\n * :::tip\n *\n * This function is typically used to encode a contract function and its arguments for contract calls (e.g. `data` parameter of an `eth_call` or `eth_sendTransaction`).\n *\n * See the [End-to-end Example](#end-to-end).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from('function approve(address, uint256)')\n *\n * const data = AbiFunction.encodeData( // [!code focus]\n *   approve, // [!code focus]\n *   ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n] // [!code focus]\n * ) // [!code focus]\n * // @log: '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n * ```\n *\n * @example\n * You can extract an ABI Function from a JSON ABI with {@link ox#AbiFunction.(fromAbi:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const erc20Abi = Abi.from([...]) // [!code hl]\n * const approve = AbiFunction.fromAbi(erc20Abi, 'approve') // [!code hl]\n *\n * const data = AbiFunction.encodeData(\n *   approve,\n *   ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n * // @log: '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can specify an entire ABI object and a function name as parameters to {@link ox#AbiFunction.(encodeData:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const data = AbiFunction.encodeData(\n *   erc20Abi, // [!code focus]\n *   'approve', // [!code focus]\n *   ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiFunction.encodeData` to encode the input of a `balanceOf` contract call on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { Abi, AbiFunction } from 'ox'\n *\n * // 1. Extract the Function from the Contract's ABI.\n * const abi = Abi.from([\n *   // ...\n *   {\n *     name: 'balanceOf',\n *     type: 'function',\n *     inputs: [{ name: 'account', type: 'address' }],\n *     outputs: [{ name: 'balance', type: 'uint256' }],\n *     stateMutability: 'view',\n *   },\n *   // ...\n * ])\n * const balanceOf = AbiFunction.fromAbi(abi, 'balanceOf')\n *\n * // 2. Encode the Function Input. // [!code focus]\n * const data = AbiFunction.encodeData( // [!code focus]\n *   balanceOf, // [!code focus]\n *   ['0xd2135CfB216b74109775236E36d4b433F1DF507B'] // [!code focus]\n * ) // [!code focus]\n *\n * // 3. Perform the Contract Call.\n * const response = await window.ethereum!.request({\n *   method: 'eth_call',\n *   params: [\n *     {\n *       data,\n *       to: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n *     },\n *   ],\n * })\n *\n * // 4. Decode the Function Output.\n * const balance = AbiFunction.decodeResult(balanceOf, response)\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiFunction - ABI Function to encode\n * @param args - Function arguments\n * @returns ABI-encoded function name and arguments\n */\nexport function encodeData<\n  const abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n  const args extends\n    | AbiItem_internal.ExtractArgs<abi, name>\n    | undefined = undefined,\n  //\n  abiFunction extends AbiFunction = AbiItem.fromAbi.ReturnType<\n    abi,\n    name,\n    args,\n    AbiFunction\n  >,\n  allNames = Name<abi>,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  name: Hex.Hex | (name extends allNames ? name : never),\n  ...args: encodeData.Args<abiFunction>\n): Hex.Hex\nexport function encodeData<const abiFunction extends AbiFunction>(\n  abiFunction: abiFunction | AbiFunction,\n  ...args: encodeData.Args<abiFunction>\n): Hex.Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encodeData(\n  ...parameters:\n    | [\n        abi: Abi.Abi | readonly unknown[],\n        name: Hex.Hex | string,\n        ...args: readonly unknown[],\n      ]\n    | [abiFunction: AbiFunction, ...args: readonly unknown[]]\n) {\n  const [abiFunction, args = []] = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name, args] = parameters as [\n        Abi.Abi | readonly unknown[],\n        Hex.Hex | string,\n        readonly unknown[],\n      ]\n      return [fromAbi(abi, name, { args }), args]\n    }\n    const [abiFunction, args] = parameters as [AbiFunction, readonly unknown[]]\n    return [abiFunction, args]\n  })()\n\n  const { overloads } = abiFunction\n\n  const item = overloads\n    ? (fromAbi([abiFunction as AbiFunction, ...overloads], abiFunction.name, {\n        args,\n      }) as AbiFunction)\n    : abiFunction\n\n  const selector = getSelector(item)\n\n  const data =\n    args.length > 0 ? AbiParameters.encode(item.inputs, args) : undefined\n\n  return data ? Hex.concat(selector, data) : selector\n}\n\nexport declare namespace encodeData {\n  type Args<abiFunction extends AbiFunction = AbiFunction> = IsNarrowable<\n    abiFunction,\n    AbiFunction\n  > extends true\n    ?\n        | (abitype.AbiParametersToPrimitiveTypes<\n            abiFunction['inputs']\n          > extends readonly []\n            ? []\n            : [abitype.AbiParametersToPrimitiveTypes<abiFunction['inputs']>])\n        | (abiFunction['overloads'] extends readonly AbiFunction[]\n            ? [\n                abitype.AbiParametersToPrimitiveTypes<\n                  abiFunction['overloads'][number]['inputs']\n                >,\n              ]\n            : [])\n    : readonly unknown[]\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes a function's result (`outputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const totalSupply = AbiFunction.from('function totalSupply() returns (uint256)')\n * const output = AbiFunction.decodeResult(totalSupply, '0x000000000000000000000000000000000000000000000000000000000000002a')\n * // 42n\n *\n * const data = AbiFunction.encodeResult(totalSupply, 42n) // [!code focus]\n * // @log: '0x000000000000000000000000000000000000000000000000000000000000002a'\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object and a function name as parameters to {@link ox#AbiFunction.(encodeResult:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([...])\n *\n * const data = AbiFunction.encodeResult(\n *   abi, // [!code focus]\n *   'totalSupply', // [!code focus]\n *   42n\n * )\n * // @log: '0x000000000000000000000000000000000000000000000000000000000000002a'\n * ```\n *\n * @param abiFunction - The ABI item to encode the function output for.\n * @param output - The function output to encode.\n * @param options - Encoding options.\n * @returns The encoded function output.\n */\nexport function encodeResult<\n  const abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n  const args extends\n    | AbiItem_internal.ExtractArgs<abi, name>\n    | undefined = undefined,\n  as extends 'Object' | 'Array' = 'Array',\n  //\n  abiFunction extends AbiFunction = AbiItem.fromAbi.ReturnType<\n    abi,\n    name,\n    args,\n    AbiFunction\n  >,\n  allNames = Name<abi>,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  name: Hex.Hex | (name extends allNames ? name : never),\n  output: encodeResult.Output<abiFunction, as>,\n  options?: encodeResult.Options<as>,\n): Hex.Hex\nexport function encodeResult<\n  const abiFunction extends AbiFunction,\n  as extends 'Object' | 'Array' = 'Array',\n>(\n  abiFunction: abiFunction | AbiFunction,\n  output: encodeResult.Output<abiFunction, as>,\n  options?: encodeResult.Options<as>,\n): Hex.Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encodeResult(\n  ...parameters:\n    | [\n        abi: Abi.Abi | readonly unknown[],\n        name: Hex.Hex | string,\n        output: any,\n        options?: encodeResult.Options<any> | undefined,\n      ]\n    | [\n        abiFunction: AbiFunction,\n        output: any,\n        options?: encodeResult.Options<any> | undefined,\n      ]\n) {\n  const [abiFunction, output, options = {}] = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name, output, options] = parameters as [\n        Abi.Abi | readonly unknown[],\n        Hex.Hex | string,\n        any,\n        encodeResult.Options<any> | undefined,\n      ]\n      return [fromAbi(abi, name), output, options]\n    }\n    return parameters as [\n      AbiFunction,\n      any,\n      encodeResult.Options<any> | undefined,\n    ]\n  })()\n\n  const { as = 'Array' } = options\n\n  const values = (() => {\n    if (abiFunction.outputs.length === 1) return [output]\n    if (Array.isArray(output)) return output\n    if (as === 'Object') return Object.values(output as any)\n    return [output]\n  })()\n\n  return AbiParameters.encode(abiFunction.outputs, values)\n}\n\nexport declare namespace encodeResult {\n  type Output<\n    abiFunction extends AbiFunction = AbiFunction,\n    as extends 'Object' | 'Array' = 'Array',\n  > = abiFunction['outputs'] extends readonly []\n    ? never\n    : abiFunction['outputs']['length'] extends 1\n      ? AbiParameters_internal.ToPrimitiveTypes<abiFunction['outputs']>[0]\n      : as extends 'Object'\n        ? AbiParameters_internal.ToObject<abiFunction['outputs']>\n        : AbiParameters_internal.ToPrimitiveTypes<abiFunction['outputs']>\n\n  type Options<as extends 'Object' | 'Array'> = {\n    as?: as | 'Object' | 'Array' | undefined\n  }\n\n  type ErrorType = AbiParameters.encode.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Formats an {@link ox#AbiFunction.AbiFunction} into a **Human Readable ABI Function**.\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const formatted = AbiFunction.format({\n *   type: 'function',\n *   name: 'approve',\n *   stateMutability: 'nonpayable',\n *   inputs: [\n *     {\n *       name: 'spender',\n *       type: 'address',\n *     },\n *     {\n *       name: 'amount',\n *       type: 'uint256',\n *     },\n *   ],\n *   outputs: [{ type: 'bool' }],\n * })\n *\n * formatted\n * //    ^?\n *\n *\n * ```\n *\n * @param abiFunction - The ABI Function to format.\n * @returns The formatted ABI Function.\n */\nexport function format<const abiFunction extends AbiFunction>(\n  abiFunction: abiFunction | AbiFunction,\n): abitype.FormatAbiItem<abiFunction> {\n  return abitype.formatAbiItem(abiFunction) as never\n}\n\nexport declare namespace format {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses an arbitrary **JSON ABI Function** or **Human Readable ABI Function** into a typed {@link ox#AbiFunction.AbiFunction}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from({\n *   type: 'function',\n *   name: 'approve',\n *   stateMutability: 'nonpayable',\n *   inputs: [\n *     {\n *       name: 'spender',\n *       type: 'address',\n *     },\n *     {\n *       name: 'amount',\n *       type: 'uint256',\n *     },\n *   ],\n *   outputs: [{ type: 'bool' }],\n * })\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from(\n *   'function approve(address spender, uint256 amount) returns (bool)' // [!code hl]\n * )\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from([\n *   'struct Foo { address spender; uint256 amount; }', // [!code hl]\n *   'function approve(Foo foo) returns (bool)',\n * ])\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiFunction - The ABI Function to parse.\n * @returns Typed ABI Function.\n */\nexport function from<\n  const abiFunction extends AbiFunction | string | readonly string[],\n>(\n  abiFunction: (abiFunction | AbiFunction | string | readonly string[]) &\n    (\n      | (abiFunction extends string ? internal.Signature<abiFunction> : never)\n      | (abiFunction extends readonly string[]\n          ? internal.Signatures<abiFunction>\n          : never)\n      | AbiFunction\n    ),\n  options: from.Options = {},\n): from.ReturnType<abiFunction> {\n  return AbiItem.from(abiFunction as AbiFunction, options) as never\n}\n\nexport declare namespace from {\n  type Options = {\n    /**\n     * Whether or not to prepare the extracted function (optimization for encoding performance).\n     * When `true`, the `hash` property is computed and included in the returned value.\n     *\n     * @default true\n     */\n    prepare?: boolean | undefined\n  }\n\n  type ReturnType<\n    abiFunction extends AbiFunction | string | readonly string[],\n  > = AbiItem.from.ReturnType<abiFunction>\n\n  type ErrorType = AbiItem.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Extracts an {@link ox#AbiFunction.AbiFunction} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Functions can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n *   'function foo()',\n *   'event Transfer(address owner, address to, uint256 tokenId)',\n *   'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiFunction.fromAbi(abi, 'foo') // [!code focus]\n * //    ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Functions can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n *   'function foo()',\n *   'event Transfer(address owner, address to, uint256 tokenId)',\n *   'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiFunction.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * //    ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Function from an `eth_call` RPC response or\n * from a Transaction `input`.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi<\n  const abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n  const args extends\n    | AbiItem_internal.ExtractArgs<abi, name>\n    | undefined = undefined,\n  //\n  allNames = Name<abi>,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  name: Hex.Hex | (name extends allNames ? name : never),\n  options?: AbiItem.fromAbi.Options<\n    abi,\n    name,\n    args,\n    AbiItem_internal.ExtractArgs<abi, name>\n  >,\n): AbiItem.fromAbi.ReturnType<abi, name, args, AbiFunction> {\n  const item = AbiItem.fromAbi(abi, name, options as any)\n  if (item.type !== 'function')\n    throw new AbiItem.NotFoundError({ name, type: 'function' })\n  return item as never\n}\n\nexport declare namespace fromAbi {\n  type ErrorType = AbiItem.fromAbi.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiFunction.AbiFunction}.\n *\n * Useful for computing function selectors for calldata.\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const selector = AbiFunction.getSelector('function ownerOf(uint256 tokenId)')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const selector = AbiFunction.getSelector({\n *   inputs: [{ type: 'uint256' }],\n *   name: 'ownerOf',\n *   outputs: [],\n *   stateMutability: 'view',\n *   type: 'function'\n * })\n * // @log: '0x6352211e'\n * ```\n *\n * @param abiItem - The ABI item to compute the selector for.\n * @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the function signature.\n */\nexport function getSelector(abiItem: string | AbiFunction): Hex.Hex {\n  return AbiItem.getSelector(abiItem)\n}\n\nexport declare namespace getSelector {\n  type ErrorType = AbiItem.getSelector.ErrorType | Errors.GlobalErrorType\n}\n", "export const ethAddress = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' as const\n\nexport const zeroAddress = '0x0000000000000000000000000000000000000000' as const\n", "import type { AbiStateMutability, Address, Narrow } from 'abitype'\nimport * as AbiConstructor from 'ox/AbiConstructor'\nimport * as AbiFunction from 'ox/AbiFunction'\n\nimport { parseAccount } from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { ethAddress, zeroAddress } from '../../constants/address.js'\nimport { deploylessCallViaBytecodeBytecode } from '../../constants/contracts.js'\nimport { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type { Call, Calls } from '../../types/calls.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { MulticallResults } from '../../types/multicall.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { Mutable } from '../../types/utils.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport { hexToBigInt } from '../../utils/index.js'\nimport {\n  type CreateAccessListErrorType,\n  createAccessList,\n} from './createAccessList.js'\nimport {\n  type SimulateBlocksErrorType,\n  type SimulateBlocksParameters,\n  simulateBlocks,\n} from './simulateBlocks.js'\n\nconst getBalanceCode =\n  '0x6080604052348015600e575f80fd5b5061016d8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063f8b2cb4f1461002d575b5f80fd5b610047600480360381019061004291906100db565b61005d565b604051610054919061011e565b60405180910390f35b5f8173ffffffffffffffffffffffffffffffffffffffff16319050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100aa82610081565b9050919050565b6100ba816100a0565b81146100c4575f80fd5b50565b5f813590506100d5816100b1565b92915050565b5f602082840312156100f0576100ef61007d565b5b5f6100fd848285016100c7565b91505092915050565b5f819050919050565b61011881610106565b82525050565b5f6020820190506101315f83018461010f565b9291505056fea26469706673582212203b9fe929fe995c7cf9887f0bdba8a36dd78e8b73f149b17d2d9ad7cd09d2dc6264736f6c634300081a0033'\n\nexport type SimulateCallsParameters<\n  calls extends readonly unknown[] = readonly unknown[],\n  account extends Account | Address | undefined = Account | Address | undefined,\n> = Omit<SimulateBlocksParameters, 'blocks' | 'returnFullTransactions'> & {\n  /** Account attached to the calls (msg.sender). */\n  account?: account | undefined\n  /** Calls to simulate. */\n  calls: Calls<Narrow<calls>>\n  /** State overrides. */\n  stateOverrides?: StateOverride | undefined\n  /** Whether to trace asset changes. */\n  traceAssetChanges?: boolean | undefined\n}\n\nexport type SimulateCallsReturnType<\n  calls extends readonly unknown[] = readonly unknown[],\n> = {\n  /** Asset changes. */\n  assetChanges: readonly {\n    token: {\n      address: Address\n      decimals?: number | undefined\n      symbol?: string | undefined\n    }\n    value: { pre: bigint; post: bigint; diff: bigint }\n  }[]\n  /** Block results. */\n  block: Block\n  /** Call results. */\n  results: MulticallResults<\n    Narrow<calls>,\n    true,\n    {\n      extraProperties: {\n        data: Hex\n        gasUsed: bigint\n        logs?: Log[] | undefined\n      }\n      error: Error\n      mutability: AbiStateMutability\n    }\n  >\n}\n\nexport type SimulateCallsErrorType =\n  | AbiFunction.encodeData.ErrorType\n  | AbiFunction.from.ErrorType\n  | CreateAccessListErrorType\n  | EncodeFunctionDataErrorType\n  | SimulateBlocksErrorType\n  | ErrorType\n\n/**\n * Simulates execution of a batch of calls.\n *\n * @param client - Client to use\n * @param parameters - {@link SimulateCallsParameters}\n * @returns Results. {@link SimulateCallsReturnType}\n *\n * @example\n * ```ts\n * import { createPublicClient, http, parseEther } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { simulateCalls } from 'viem/actions'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n *\n * const result = await simulateCalls(client, {\n *   account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n *   calls: [{\n *     {\n *       data: '0xdeadbeef',\n *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *     },\n *     {\n *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *       value: parseEther('1'),\n *     },\n *   ]\n * })\n * ```\n */\nexport async function simulateCalls<\n  const calls extends readonly unknown[],\n  chain extends Chain | undefined,\n  account extends Account | Address | undefined = undefined,\n>(\n  client: Client<Transport, chain>,\n  parameters: SimulateCallsParameters<calls, account>,\n): Promise<SimulateCallsReturnType<calls>> {\n  const {\n    blockNumber,\n    blockTag,\n    calls,\n    stateOverrides,\n    traceAssetChanges,\n    traceTransfers,\n    validation,\n  } = parameters\n\n  const account = parameters.account\n    ? parseAccount(parameters.account)\n    : undefined\n\n  if (traceAssetChanges && !account)\n    throw new BaseError(\n      '`account` is required when `traceAssetChanges` is true',\n    )\n\n  // Derive bytecode to extract ETH balance via a contract call.\n  const getBalanceData = account\n    ? AbiConstructor.encode(AbiConstructor.from('constructor(bytes, bytes)'), {\n        bytecode: deploylessCallViaBytecodeBytecode,\n        args: [\n          getBalanceCode,\n          AbiFunction.encodeData(\n            AbiFunction.from('function getBalance(address)'),\n            [account.address],\n          ),\n        ],\n      })\n    : undefined\n\n  // Fetch ERC20/721 addresses that were \"touched\" from the calls.\n  const assetAddresses = traceAssetChanges\n    ? await Promise.all(\n        parameters.calls.map(async (call: any) => {\n          if (!call.data && !call.abi) return\n          const { accessList } = await createAccessList(client, {\n            account: account!.address,\n            ...call,\n            data: call.abi ? encodeFunctionData(call) : call.data,\n          })\n          return accessList.map(({ address, storageKeys }) =>\n            storageKeys.length > 0 ? address : null,\n          )\n        }),\n      ).then((x) => x.flat().filter(Boolean))\n    : []\n\n  const blocks = await simulateBlocks(client, {\n    blockNumber,\n    blockTag: blockTag as undefined,\n    blocks: [\n      ...(traceAssetChanges\n        ? [\n            // ETH pre balances\n            {\n              calls: [{ data: getBalanceData }],\n              stateOverrides,\n            },\n\n            // Asset pre balances\n            {\n              calls: assetAddresses.map((address, i) => ({\n                abi: [\n                  AbiFunction.from(\n                    'function balanceOf(address) returns (uint256)',\n                  ),\n                ],\n                functionName: 'balanceOf',\n                args: [account!.address],\n                to: address,\n                from: zeroAddress,\n                nonce: i,\n              })),\n              stateOverrides: [\n                {\n                  address: zeroAddress,\n                  nonce: 0,\n                },\n              ],\n            },\n          ]\n        : []),\n\n      {\n        calls: [...calls, { to: zeroAddress }].map((call) => ({\n          ...(call as Call),\n          from: account?.address,\n        })) as any,\n        stateOverrides,\n      },\n\n      ...(traceAssetChanges\n        ? [\n            // ETH post balances\n            {\n              calls: [{ data: getBalanceData }],\n            },\n\n            // Asset post balances\n            {\n              calls: assetAddresses.map((address, i) => ({\n                abi: [\n                  AbiFunction.from(\n                    'function balanceOf(address) returns (uint256)',\n                  ),\n                ],\n                functionName: 'balanceOf',\n                args: [account!.address],\n                to: address,\n                from: zeroAddress,\n                nonce: i,\n              })),\n              stateOverrides: [\n                {\n                  address: zeroAddress,\n                  nonce: 0,\n                },\n              ],\n            },\n\n            // Decimals\n            {\n              calls: assetAddresses.map((address, i) => ({\n                to: address,\n                abi: [\n                  AbiFunction.from('function decimals() returns (uint256)'),\n                ],\n                functionName: 'decimals',\n                from: zeroAddress,\n                nonce: i,\n              })),\n              stateOverrides: [\n                {\n                  address: zeroAddress,\n                  nonce: 0,\n                },\n              ],\n            },\n\n            // Token URI\n            {\n              calls: assetAddresses.map((address, i) => ({\n                to: address,\n                abi: [\n                  AbiFunction.from(\n                    'function tokenURI(uint256) returns (string)',\n                  ),\n                ],\n                functionName: 'tokenURI',\n                args: [0n],\n                from: zeroAddress,\n                nonce: i,\n              })),\n              stateOverrides: [\n                {\n                  address: zeroAddress,\n                  nonce: 0,\n                },\n              ],\n            },\n\n            // Symbols\n            {\n              calls: assetAddresses.map((address, i) => ({\n                to: address,\n                abi: [AbiFunction.from('function symbol() returns (string)')],\n                functionName: 'symbol',\n                from: zeroAddress,\n                nonce: i,\n              })),\n              stateOverrides: [\n                {\n                  address: zeroAddress,\n                  nonce: 0,\n                },\n              ],\n            },\n          ]\n        : []),\n    ],\n    traceTransfers,\n    validation,\n  })\n\n  const block_results = traceAssetChanges ? blocks[2] : blocks[0]\n  const [\n    block_ethPre,\n    block_assetsPre,\n    ,\n    block_ethPost,\n    block_assetsPost,\n    block_decimals,\n    block_tokenURI,\n    block_symbols,\n  ] = traceAssetChanges ? blocks : []\n\n  // Extract call results from the simulation.\n  const { calls: block_calls, ...block } = block_results\n  const results = block_calls.slice(0, -1) ?? []\n\n  // Extract pre-execution ETH and asset balances.\n  const ethPre = block_ethPre?.calls ?? []\n  const assetsPre = block_assetsPre?.calls ?? []\n  const balancesPre = [...ethPre, ...assetsPre].map((call) =>\n    call.status === 'success' ? hexToBigInt(call.data) : null,\n  )\n\n  // Extract post-execution ETH and asset balances.\n  const ethPost = block_ethPost?.calls ?? []\n  const assetsPost = block_assetsPost?.calls ?? []\n  const balancesPost = [...ethPost, ...assetsPost].map((call) =>\n    call.status === 'success' ? hexToBigInt(call.data) : null,\n  )\n\n  // Extract asset symbols & decimals.\n  const decimals = (block_decimals?.calls ?? []).map((x) =>\n    x.status === 'success' ? x.result : null,\n  ) as (number | null)[]\n  const symbols = (block_symbols?.calls ?? []).map((x) =>\n    x.status === 'success' ? x.result : null,\n  ) as (string | null)[]\n  const tokenURI = (block_tokenURI?.calls ?? []).map((x) =>\n    x.status === 'success' ? x.result : null,\n  ) as (string | null)[]\n\n  const changes: Mutable<SimulateCallsReturnType<calls>['assetChanges']> = []\n  for (const [i, balancePost] of balancesPost.entries()) {\n    const balancePre = balancesPre[i]\n\n    if (typeof balancePost !== 'bigint') continue\n    if (typeof balancePre !== 'bigint') continue\n\n    const decimals_ = decimals[i - 1]\n    const symbol_ = symbols[i - 1]\n    const tokenURI_ = tokenURI[i - 1]\n\n    const token = (() => {\n      if (i === 0)\n        return {\n          address: ethAddress,\n          decimals: 18,\n          symbol: 'ETH',\n        }\n\n      return {\n        address: assetAddresses[i - 1]! as Address,\n        decimals: tokenURI_ || decimals_ ? Number(decimals_ ?? 1) : undefined,\n        symbol: symbol_ ?? undefined,\n      }\n    })()\n\n    if (changes.some((change) => change.token.address === token.address))\n      continue\n\n    changes.push({\n      token,\n      value: {\n        pre: balancePre,\n        post: balancePost,\n        diff: balancePost - balancePre,\n      },\n    })\n  }\n\n  return {\n    assetChanges: changes,\n    block,\n    results,\n  } as unknown as SimulateCallsReturnType<calls>\n}\n", "import type * as Abi from '../core/Abi.js'\nimport * as AbiParameters from '../core/AbiParameters.js'\nimport type * as Address from '../core/Address.js'\nimport * as Errors from '../core/Errors.js'\nimport * as Hex from '../core/Hex.js'\nimport type * as Signature from '../core/Signature.js'\n\n/** Unwrapped ERC-6492 signature. */\nexport type Unwrapped = {\n  /** Calldata to pass to the target address for counterfactual verification. */\n  data: Hex.Hex\n  /** The original signature. */\n  signature: Hex.Hex\n  /** The target address to use for counterfactual verification. */\n  to: Address.Address\n}\n\n/** Wrapped ERC-6492 signature. */\nexport type Wrapped = Hex.Hex\n\n/**\n * Magic bytes used to identify ERC-6492 wrapped signatures.\n */\nexport const magicBytes =\n  '0x6492649264926492649264926492649264926492649264926492649264926492' as const\n\n/**\n * Deployless ERC-6492 signature verification bytecode.\n */\nexport const universalSignatureValidatorBytecode =\n  '0x608060405234801561001057600080fd5b5060405161069438038061069483398101604081905261002f9161051e565b600061003c848484610048565b9050806000526001601ff35b60007f64926492649264926492649264926492649264926492649264926492649264926100748361040c565b036101e7576000606080848060200190518101906100929190610577565b60405192955090935091506000906001600160a01b038516906100b69085906105dd565b6000604051808303816000865af19150503d80600081146100f3576040519150601f19603f3d011682016040523d82523d6000602084013e6100f8565b606091505b50509050876001600160a01b03163b60000361016057806101605760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90610190908b9087906004016105f9565b602060405180830381865afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d19190610633565b6001600160e01b03191614945050505050610405565b6001600160a01b0384163b1561027a57604051630b135d3f60e11b808252906001600160a01b03861690631626ba7e9061022790879087906004016105f9565b602060405180830381865afa158015610244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102689190610633565b6001600160e01b031916149050610405565b81516041146102df5760405162461bcd60e51b815260206004820152603a602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e6774680000000000006064820152608401610157565b6102e7610425565b5060208201516040808401518451859392600091859190811061030c5761030c61065d565b016020015160f81c9050601b811480159061032b57508060ff16601c14155b1561038c5760405162461bcd60e51b815260206004820152603b602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c756500000000006064820152608401610157565b60408051600081526020810180835289905260ff83169181019190915260608101849052608081018390526001600160a01b0389169060019060a0016020604051602081039080840390855afa1580156103ea573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149450505050505b9392505050565b600060208251101561041d57600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461045857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561048c578181015183820152602001610474565b50506000910152565b600082601f8301126104a657600080fd5b81516001600160401b038111156104bf576104bf61045b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104ed576104ed61045b565b60405281815283820160200185101561050557600080fd5b610516826020830160208701610471565b949350505050565b60008060006060848603121561053357600080fd5b835161053e81610443565b6020850151604086015191945092506001600160401b0381111561056157600080fd5b61056d86828701610495565b9150509250925092565b60008060006060848603121561058c57600080fd5b835161059781610443565b60208501519093506001600160401b038111156105b357600080fd5b6105bf86828701610495565b604086015190935090506001600160401b0381111561056157600080fd5b600082516105ef818460208701610471565b9190910192915050565b828152604060208201526000825180604084015261061e816060850160208701610471565b601f01601f1916919091016060019392505050565b60006020828403121561064557600080fd5b81516001600160e01b03198116811461040557600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572'\n\n/**\n * ABI for the ERC-6492 universal deployless signature validator contract.\n *\n * Constructor return value is `0x1` (valid) or `0x0` (invalid).\n */\nexport const universalSignatureValidatorAbi = [\n  {\n    inputs: [\n      {\n        name: '_signer',\n        type: 'address',\n      },\n      {\n        name: '_hash',\n        type: 'bytes32',\n      },\n      {\n        name: '_signature',\n        type: 'bytes',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'constructor',\n  },\n  {\n    inputs: [\n      {\n        name: '_signer',\n        type: 'address',\n      },\n      {\n        name: '_hash',\n        type: 'bytes32',\n      },\n      {\n        name: '_signature',\n        type: 'bytes',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n    name: 'isValidSig',\n  },\n] as const satisfies Abi.Abi\n\n/**\n * Asserts that the wrapped signature is valid.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc6492 } from 'ox/erc6492'\n *\n * SignatureErc6492.assert('0xdeadbeef')\n * // @error: InvalidWrappedSignatureError: Value `0xdeadbeef` is an invalid ERC-6492 wrapped signature.\n * ```\n *\n * @param wrapped - The wrapped signature to assert.\n */\nexport function assert(wrapped: Wrapped) {\n  if (Hex.slice(wrapped, -32) !== magicBytes)\n    throw new InvalidWrappedSignatureError(wrapped)\n}\n\nexport declare namespace assert {\n  type ErrorType =\n    | InvalidWrappedSignatureError\n    | Hex.slice.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Parses an [ERC-6492 wrapped signature](https://eips.ethereum.org/EIPS/eip-6492#specification) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1 } from 'ox'\n * import { SignatureErc6492 } from 'ox/erc6492' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n *   payload: '0x...',\n *   privateKey: '0x...',\n * })\n *\n * // Instantiate from serialized format. // [!code focus]\n * const wrapped = SignatureErc6492.from('0x...') // [!code focus]\n * // @log: { data: '0x...', signature: { ... }, to: '0x...', } // [!code focus]\n *\n * // Instantiate from constituent parts. // [!code focus]\n * const wrapped = SignatureErc6492.from({ // [!code focus]\n *   data: '0x...', // [!code focus]\n *   signature, // [!code focus]\n *   to: '0x...', // [!code focus]\n * })\n * // @log: { data: '0x...', signature: { ... }, to: '0x...', }\n * ```\n *\n * @param wrapped - Wrapped signature to parse.\n * @returns Wrapped signature.\n */\nexport function from(wrapped: Unwrapped | Wrapped): Unwrapped {\n  if (typeof wrapped === 'string') return unwrap(wrapped)\n  return wrapped\n}\n\nexport declare namespace from {\n  type ReturnType = Unwrapped\n\n  type ErrorType =\n    | AbiParameters.from.ErrorType\n    | AbiParameters.decode.ErrorType\n    | Signature.fromHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Parses an [ERC-6492 wrapped signature](https://eips.ethereum.org/EIPS/eip-6492#specification) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc6492 } from 'ox/erc6492'\n *\n * const { data, signature, to } = SignatureErc6492.unwrap('0x...')\n * ```\n *\n * @param wrapped - Wrapped signature to parse.\n * @returns Wrapped signature.\n */\nexport function unwrap(wrapped: Wrapped): Unwrapped {\n  assert(wrapped)\n\n  const [to, data, signature] = AbiParameters.decode(\n    AbiParameters.from('address, bytes, bytes'),\n    wrapped,\n  )\n\n  return { data, signature, to }\n}\n\nexport declare namespace unwrap {\n  type ErrorType =\n    | AbiParameters.from.ErrorType\n    | AbiParameters.decode.ErrorType\n    | Signature.fromHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Serializes an [ERC-6492 wrapped signature](https://eips.ethereum.org/EIPS/eip-6492#specification).\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1, Signature } from 'ox'\n * import { SignatureErc6492 } from 'ox/erc6492' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n *   payload: '0x...',\n *   privateKey: '0x...',\n * })\n *\n * const wrapped = SignatureErc6492.wrap({ // [!code focus]\n *   data: '0xdeadbeef', // [!code focus]\n *   signature: Signature.toHex(signature), // [!code focus]\n *   to: '0x00000000219ab540356cBB839Cbe05303d7705Fa', // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param value - Wrapped signature to serialize.\n * @returns Serialized wrapped signature.\n */\nexport function wrap(value: Unwrapped): Wrapped {\n  const { data, signature, to } = value\n\n  return Hex.concat(\n    AbiParameters.encode(AbiParameters.from('address, bytes, bytes'), [\n      to,\n      data,\n      signature,\n    ]),\n    magicBytes,\n  )\n}\n\nexport declare namespace wrap {\n  type ErrorType =\n    | AbiParameters.encode.ErrorType\n    | Hex.concat.ErrorType\n    | Signature.toHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Validates a wrapped signature. Returns `true` if the wrapped signature is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc6492 } from 'ox/erc6492'\n *\n * const valid = SignatureErc6492.validate('0xdeadbeef')\n * // @log: false\n * ```\n *\n * @param wrapped - The wrapped signature to validate.\n * @returns `true` if the wrapped signature is valid, `false` otherwise.\n */\nexport function validate(wrapped: Wrapped): boolean {\n  try {\n    assert(wrapped)\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/** Thrown when the ERC-6492 wrapped signature is invalid. */\nexport class InvalidWrappedSignatureError extends Errors.BaseError {\n  override readonly name = 'SignatureErc6492.InvalidWrappedSignatureError'\n\n  constructor(wrapped: Wrapped) {\n    super(`Value \\`${wrapped}\\` is an invalid ERC-6492 wrapped signature.`)\n  }\n}\n", "/** @entrypointCategory ERCs */\n// biome-ignore lint/complexity/noUselessEmptyExport: tsdoc\nexport type {}\n\n/**\n * Utility functions for working with [ERC-6492 wrapped signatures](https://eips.ethereum.org/EIPS/eip-6492#specification).\n *\n * @example\n * ```ts twoslash\n * import { PersonalMessage, Secp256k1, Signature } from 'ox'\n * import { SignatureErc6492 } from 'ox/erc6492' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n *   payload: PersonalMessage.getSignPayload('0xdeadbeef'),\n *   privateKey: '0x...',\n * })\n *\n * const wrapped = SignatureErc6492.wrap({ // [!code focus]\n *   data: '0xcafebabe', // [!code focus]\n *   signature: Signature.toHex(signature), // [!code focus]\n *   to: '0xcafebabecafebabecafebabecafebabecafebabe', // [!code focus]\n * }) // [!code focus]\n * // @log: '0x000000000000000000000000cafebabecafebabecafebabecafebabecafebabe000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000004deadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041fa78c5905fb0b9d6066ef531f962a62bc6ef0d5eb59ecb134056d206f75aaed7780926ff2601a935c2c79707d9e1799948c9f19dcdde1e090e903b19a07923d01c000000000000000000000000000000000000000000000000000000000000006492649264926492649264926492649264926492649264926492649264926492'\n * ```\n *\n * @category ERC-6492\n */\nexport * as SignatureErc6492 from './SignatureErc6492.js'\n", "import { secp256k1 } from '@noble/curves/secp256k1'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport { type HexToBigIntErrorType, hexToBigInt } from '../encoding/fromHex.js'\nimport { hexToBytes } from '../encoding/toBytes.js'\nimport type { ToHexErrorType } from '../encoding/toHex.js'\n\ntype To = 'bytes' | 'hex'\n\nexport type SerializeSignatureParameters<to extends To = 'hex'> = Signature & {\n  to?: to | To | undefined\n}\n\nexport type SerializeSignatureReturnType<to extends To = 'hex'> =\n  | (to extends 'hex' ? Hex : never)\n  | (to extends 'bytes' ? ByteArray : never)\n\nexport type SerializeSignatureErrorType =\n  | HexToBigIntErrorType\n  | ToHexErrorType\n  | ErrorType\n\n/**\n * @description Converts a signature into hex format.\n *\n * @param signature The signature to convert.\n * @returns The signature in hex format.\n *\n * @example\n * serializeSignature({\n *   r: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf',\n *   s: '0x4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8',\n *   yParity: 1\n * })\n * // \"0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c\"\n */\nexport function serializeSignature<to extends To = 'hex'>({\n  r,\n  s,\n  to = 'hex',\n  v,\n  yParity,\n}: SerializeSignatureParameters<to>): SerializeSignatureReturnType<to> {\n  const yParity_ = (() => {\n    if (yParity === 0 || yParity === 1) return yParity\n    if (v && (v === 27n || v === 28n || v >= 35n)) return v % 2n === 0n ? 1 : 0\n    throw new Error('Invalid `v` or `yParity` value')\n  })()\n  const signature = `0x${new secp256k1.Signature(\n    hexToBigInt(r),\n    hexToBigInt(s),\n  ).toCompactHex()}${yParity_ === 0 ? '1b' : '1c'}` as const\n\n  if (to === 'hex') return signature as SerializeSignatureReturnType<to>\n  return hexToBytes(signature) as SerializeSignatureReturnType<to>\n}\n", "import type { Address } from 'abitype'\nimport { SignatureErc6492 } from 'ox/erc6492'\nimport { SignatureErc8010 } from 'ox/erc8010'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  erc1271Abi,\n  erc6492SignatureValidatorAbi,\n  multicall3Abi,\n} from '../../constants/abis.js'\nimport {\n  erc6492SignatureValidatorByteCode,\n  multicall3Bytecode,\n} from '../../constants/contracts.js'\nimport {\n  CallExecutionError,\n  ContractFunctionExecutionError,\n} from '../../errors/contract.js'\nimport type { InvalidHexBooleanError } from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { OneOf } from '../../types/utils.js'\nimport {\n  type EncodeDeployDataErrorType,\n  encodeDeployData,\n} from '../../utils/abi/encodeDeployData.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetAddressErrorType,\n  getAddress,\n} from '../../utils/address/getAddress.js'\nimport {\n  type IsAddressEqualErrorType,\n  isAddressEqual,\n} from '../../utils/address/isAddressEqual.js'\nimport { verifyAuthorization } from '../../utils/authorization/verifyAuthorization.js'\nimport { type ConcatHexErrorType, concatHex } from '../../utils/data/concat.js'\nimport { type IsHexErrorType, isHex } from '../../utils/data/isHex.js'\nimport { hexToBool } from '../../utils/encoding/fromHex.js'\nimport {\n  type BytesToHexErrorType,\n  bytesToHex,\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type RecoverAddressErrorType,\n  recoverAddress,\n} from '../../utils/signature/recoverAddress.js'\nimport {\n  type SerializeSignatureErrorType,\n  serializeSignature,\n} from '../../utils/signature/serializeSignature.js'\nimport { type CallErrorType, type CallParameters, call } from './call.js'\nimport { type GetCodeErrorType, getCode } from './getCode.js'\nimport { type ReadContractErrorType, readContract } from './readContract.js'\n\nexport type VerifyHashParameters = Pick<\n  CallParameters,\n  'blockNumber' | 'blockTag'\n> & {\n  /** The address that signed the original message. */\n  address: Address\n  /** The chain to use. */\n  chain?: Chain | null | undefined\n  /** The address of the ERC-6492 signature verifier contract. */\n  erc6492VerifierAddress?: Address | undefined\n  /** The hash to be verified. */\n  hash: Hex\n  /** Multicall3 address for ERC-8010 verification. */\n  multicallAddress?: Address | undefined\n  /** The signature that was generated by signing the message with the address's private key. */\n  signature: Hex | ByteArray | Signature\n  /** @deprecated use `erc6492VerifierAddress` instead. */\n  universalSignatureVerifierAddress?: Address | undefined\n  /** Chooses which verification path to try first before falling back. */\n  mode?: 'auto' | 'eoa' | (string & {}) | undefined\n} & OneOf<{ factory: Address; factoryData: Hex } | {}>\n\nexport type VerifyHashReturnType = boolean\n\nexport type VerifyHashErrorType =\n  | BytesToHexErrorType\n  | CallErrorType\n  | ConcatHexErrorType\n  | EncodeDeployDataErrorType\n  | EncodeFunctionDataErrorType\n  | ErrorType\n  | GetAddressErrorType\n  | GetCodeErrorType\n  | InvalidHexBooleanError\n  | IsAddressEqualErrorType\n  | IsHexErrorType\n  | NumberToHexErrorType\n  | ReadContractErrorType\n  | RecoverAddressErrorType\n  | SerializeSignatureErrorType\n\n/**\n * Verifies a message hash onchain using ERC-6492.\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifyHashParameters}\n * @returns Whether or not the signature is valid. {@link VerifyHashReturnType}\n */\nexport async function verifyHash<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: VerifyHashParameters,\n): Promise<VerifyHashReturnType> {\n  const {\n    address,\n    chain = client.chain,\n    hash,\n    erc6492VerifierAddress:\n      verifierAddress = parameters.universalSignatureVerifierAddress ??\n      chain?.contracts?.erc6492Verifier?.address,\n    multicallAddress = parameters.multicallAddress ??\n      chain?.contracts?.multicall3?.address,\n    mode = 'auto',\n  } = parameters\n\n  if (chain?.verifyHash) return await chain.verifyHash(client, parameters)\n\n  const signature = (() => {\n    const signature = parameters.signature\n    if (isHex(signature)) return signature\n    if (typeof signature === 'object' && 'r' in signature && 's' in signature)\n      return serializeSignature(signature)\n    return bytesToHex(signature)\n  })()\n  try {\n    if (mode === 'eoa') {\n      try {\n        const verified = isAddressEqual(\n          getAddress(address),\n          await recoverAddress({ hash, signature }),\n        )\n        if (verified) return true\n      } catch {}\n    }\n\n    if (SignatureErc8010.validate(signature))\n      return await verifyErc8010(client, {\n        ...parameters,\n        multicallAddress,\n        signature,\n      })\n    return await verifyErc6492(client, {\n      ...parameters,\n      verifierAddress,\n      signature,\n    })\n  } catch (error) {\n    if (mode !== 'eoa') {\n      // Fallback attempt to verify the signature via ECDSA recovery.\n      try {\n        const verified = isAddressEqual(\n          getAddress(address),\n          await recoverAddress({ hash, signature }),\n        )\n        if (verified) return true\n      } catch {}\n    }\n\n    if (error instanceof VerificationError) {\n      // if the execution fails, the signature was not valid and an internal method inside of the validator reverted\n      // this can happen for many reasons, for example if signer can not be recovered from the signature\n      // or if the signature has no valid format\n      return false\n    }\n\n    throw error\n  }\n}\n\n/** @internal */\nexport async function verifyErc8010(\n  client: Client,\n  parameters: verifyErc8010.Parameters,\n) {\n  const { address, blockNumber, blockTag, hash, multicallAddress } = parameters\n\n  const {\n    authorization: authorization_ox,\n    data: initData,\n    signature,\n    to,\n  } = SignatureErc8010.unwrap(parameters.signature)\n\n  // Check if already delegated\n  const code = await getCode(client, {\n    address,\n    blockNumber,\n    blockTag,\n  } as never)\n\n  // If already delegated, perform standard ERC-1271 verification.\n  if (code === concatHex(['0xef0100', authorization_ox.address]))\n    return await verifyErc1271(client, {\n      address,\n      blockNumber,\n      blockTag,\n      hash,\n      signature,\n    })\n\n  const authorization = {\n    address: authorization_ox.address,\n    chainId: Number(authorization_ox.chainId),\n    nonce: Number(authorization_ox.nonce),\n    r: numberToHex(authorization_ox.r, { size: 32 }),\n    s: numberToHex(authorization_ox.s, { size: 32 }),\n    yParity: authorization_ox.yParity,\n  } as const\n\n  const valid = await verifyAuthorization({\n    address,\n    authorization,\n  })\n  if (!valid) throw new VerificationError()\n\n  // Deployless verification.\n  const results = await getAction(\n    client,\n    readContract,\n    'readContract',\n  )({\n    ...(multicallAddress\n      ? { address: multicallAddress }\n      : { code: multicall3Bytecode }),\n    authorizationList: [authorization],\n    abi: multicall3Abi,\n    blockNumber,\n    blockTag: 'pending',\n    functionName: 'aggregate3',\n    args: [\n      [\n        ...(initData\n          ? ([\n              {\n                allowFailure: true,\n                target: to ?? address,\n                callData: initData,\n              },\n            ] as const)\n          : []),\n        {\n          allowFailure: true,\n          target: address,\n          callData: encodeFunctionData({\n            abi: erc1271Abi,\n            functionName: 'isValidSignature',\n            args: [hash, signature],\n          }),\n        },\n      ],\n    ],\n  })\n\n  const data = results[results.length - 1]?.returnData\n\n  if (data?.startsWith('0x1626ba7e')) return true\n  throw new VerificationError()\n}\n\nexport namespace verifyErc8010 {\n  export type Parameters = Pick<CallParameters, 'blockNumber' | 'blockTag'> & {\n    /** The address that signed the original message. */\n    address: Address\n    /** The hash to be verified. */\n    hash: Hex\n    /** Multicall3 address for ERC-8010 verification. */\n    multicallAddress?: Address | undefined\n    /** The signature that was generated by signing the message with the address's private key. */\n    signature: Hex\n  }\n}\n\n/** @internal */\n// biome-ignore lint/correctness/noUnusedVariables: _\nasync function verifyErc6492(\n  client: Client,\n  parameters: verifyErc6492.Parameters,\n) {\n  const {\n    address,\n    factory,\n    factoryData,\n    hash,\n    signature,\n    verifierAddress,\n    ...rest\n  } = parameters\n\n  const wrappedSignature = await (async () => {\n    // If no `factory` or `factoryData` is provided, it is assumed that the\n    // address is not a Smart Account, or the Smart Account is already deployed.\n    if (!factory && !factoryData) return signature\n\n    // If the signature is already wrapped, return the signature.\n    if (SignatureErc6492.validate(signature)) return signature\n\n    // If the Smart Account is not deployed, wrap the signature with a 6492 wrapper\n    // to perform counterfactual validation.\n    return SignatureErc6492.wrap({\n      data: factoryData!,\n      signature,\n      to: factory!,\n    })\n  })()\n\n  const args = verifierAddress\n    ? ({\n        to: verifierAddress,\n        data: encodeFunctionData({\n          abi: erc6492SignatureValidatorAbi,\n          functionName: 'isValidSig',\n          args: [address, hash, wrappedSignature],\n        }),\n        ...rest,\n      } as unknown as CallParameters)\n    : ({\n        data: encodeDeployData({\n          abi: erc6492SignatureValidatorAbi,\n          args: [address, hash, wrappedSignature],\n          bytecode: erc6492SignatureValidatorByteCode,\n        }),\n        ...rest,\n      } as unknown as CallParameters)\n\n  const { data } = await getAction(\n    client,\n    call,\n    'call',\n  )(args).catch((error) => {\n    if (error instanceof CallExecutionError) throw new VerificationError()\n    throw error\n  })\n\n  if (hexToBool(data ?? '0x0')) return true\n  throw new VerificationError()\n}\n\nexport namespace verifyErc6492 {\n  export type Parameters = Pick<CallParameters, 'blockNumber' | 'blockTag'> & {\n    /** The address that signed the original message. */\n    address: Address\n    /** The hash to be verified. */\n    hash: Hex\n    /** The signature that was generated by signing the message with the address's private key. */\n    signature: Hex\n    /** The address of the ERC-6492 signature verifier contract. */\n    verifierAddress?: Address | undefined\n  } & OneOf<{ factory: Address; factoryData: Hex } | {}>\n}\n\n/** @internal */\nexport async function verifyErc1271(\n  client: Client,\n  parameters: verifyErc1271.Parameters,\n) {\n  const { address, blockNumber, blockTag, hash, signature } = parameters\n\n  const result = await getAction(\n    client,\n    readContract,\n    'readContract',\n  )({\n    address,\n    abi: erc1271Abi,\n    args: [hash, signature],\n    blockNumber,\n    blockTag,\n    functionName: 'isValidSignature',\n  }).catch((error) => {\n    if (error instanceof ContractFunctionExecutionError)\n      throw new VerificationError()\n    throw error\n  })\n\n  if (result.startsWith('0x1626ba7e')) return true\n  throw new VerificationError()\n}\n\nexport namespace verifyErc1271 {\n  export type Parameters = Pick<CallParameters, 'blockNumber' | 'blockTag'> & {\n    /** The address that signed the original message. */\n    address: Address\n    /** The hash to be verified. */\n    hash: Hex\n    /** The signature that was generated by signing the message with the address's private key. */\n    signature: Hex\n  }\n}\n\nclass VerificationError extends Error {}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ByteArray,\n  Hex,\n  SignableMessage,\n  Signature,\n} from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { HashMessageErrorType } from '../../utils/signature/hashMessage.js'\nimport { hashMessage } from '../../utils/signature/hashMessage.js'\nimport {\n  type VerifyHashErrorType,\n  type VerifyHashParameters,\n  verifyHash,\n} from './verifyHash.js'\n\nexport type VerifyMessageParameters = Prettify<\n  Omit<VerifyHashParameters, 'hash'> & {\n    /** The address that signed the original message. */\n    address: Address\n    /** The message to be verified. */\n    message: SignableMessage\n    /** The signature that was generated by signing the message with the address's private key. */\n    signature: Hex | ByteArray | Signature\n  }\n>\n\nexport type VerifyMessageReturnType = boolean\n\nexport type VerifyMessageErrorType =\n  | HashMessageErrorType\n  | VerifyHashErrorType\n  | ErrorType\n\n/**\n * Verify that a message was signed by the provided address.\n *\n * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyMessage}\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifyMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifyMessageReturnType}\n */\nexport async function verifyMessage<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    address,\n    message,\n    factory,\n    factoryData,\n    signature,\n    ...callRequest\n  }: VerifyMessageParameters,\n): Promise<VerifyMessageReturnType> {\n  const hash = hashMessage(message)\n  return getAction(\n    client,\n    verifyHash,\n    'verifyHash',\n  )({\n    address,\n    factory: factory!,\n    factoryData: factoryData!,\n    hash,\n    signature,\n    ...callRequest,\n  })\n}\n", "import type { Address, TypedData } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { TypedDataDefinition } from '../../types/typedData.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type HashTypedDataErrorType,\n  hashTypedData,\n} from '../../utils/signature/hashTypedData.js'\nimport {\n  type VerifyHashErrorType,\n  type VerifyHashParameters,\n  verifyHash,\n} from './verifyHash.js'\n\nexport type VerifyTypedDataParameters<\n  typedData extends TypedData | Record<string, unknown> = TypedData,\n  primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n> = Omit<VerifyHashParameters, 'hash'> &\n  TypedDataDefinition<typedData, primaryType> & {\n    /** The address to verify the typed data for. */\n    address: Address\n    /** The signature to verify */\n    signature: Hex | ByteArray | Signature\n  }\n\nexport type VerifyTypedDataReturnType = boolean\n\nexport type VerifyTypedDataErrorType =\n  | HashTypedDataErrorType\n  | VerifyHashErrorType\n  | ErrorType\n\n/**\n * Verify that typed data was signed by the provided address.\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyTypedData}\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifyTypedDataParameters}\n * @returns Whether or not the signature is valid. {@link VerifyTypedDataReturnType}\n */\nexport async function verifyTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n  chain extends Chain | undefined,\n>(\n  client: Client<Transport, chain>,\n  parameters: VerifyTypedDataParameters<typedData, primaryType>,\n): Promise<VerifyTypedDataReturnType> {\n  const {\n    address,\n    factory,\n    factoryData,\n    signature,\n    message,\n    primaryType,\n    types,\n    domain,\n    ...callRequest\n  } = parameters as VerifyTypedDataParameters\n  const hash = hashTypedData({ message, primaryType, types, domain })\n  return getAction(\n    client,\n    verifyHash,\n    'verifyHash',\n  )({\n    address,\n    factory: factory!,\n    factoryData: factoryData!,\n    hash,\n    signature,\n    ...callRequest,\n  })\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { HasTransportType } from '../../types/transport.js'\nimport { hexToBigInt } from '../../utils/encoding/fromHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { observe } from '../../utils/observe.js'\nimport { type PollErrorType, poll } from '../../utils/poll.js'\nimport { stringify } from '../../utils/stringify.js'\n\nimport {\n  type GetBlockNumberReturnType,\n  getBlockNumber,\n} from './getBlockNumber.js'\n\nexport type OnBlockNumberParameter = GetBlockNumberReturnType\nexport type OnBlockNumberFn = (\n  blockNumber: OnBlockNumberParameter,\n  prevBlockNumber: OnBlockNumberParameter | undefined,\n) => void\n\nexport type WatchBlockNumberParameters<\n  transport extends Transport = Transport,\n> = {\n  /** The callback to call when a new block number is received. */\n  onBlockNumber: OnBlockNumberFn\n  /** The callback to call when an error occurred when trying to get for a new block. */\n  onError?: ((error: Error) => void) | undefined\n} & (\n  | (HasTransportType<transport, 'webSocket' | 'ipc'> extends true\n      ? {\n          emitMissed?: undefined\n          emitOnBegin?: undefined\n          /** Whether or not the WebSocket Transport should poll the JSON-RPC, rather than using `eth_subscribe`. */\n          poll?: false | undefined\n          pollingInterval?: undefined\n        }\n      : never)\n  | {\n      /** Whether or not to emit the missed block numbers to the callback. */\n      emitMissed?: boolean | undefined\n      /** Whether or not to emit the latest block number to the callback when the subscription opens. */\n      emitOnBegin?: boolean | undefined\n      poll?: true | undefined\n      /** Polling frequency (in ms). Defaults to Client's pollingInterval config. */\n      pollingInterval?: number | undefined\n    }\n)\n\nexport type WatchBlockNumberReturnType = () => void\n\nexport type WatchBlockNumberErrorType = PollErrorType | ErrorType\n\n/**\n * Watches and returns incoming block numbers.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchBlockNumber\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n * - JSON-RPC Methods:\n *   - When `poll: true`, calls [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber) on a polling interval.\n *   - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchBlockNumberParameters}\n * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlockNumberReturnType}\n *\n * @example\n * import { createPublicClient, watchBlockNumber, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const unwatch = watchBlockNumber(client, {\n *   onBlockNumber: (blockNumber) => console.log(blockNumber),\n * })\n */\nexport function watchBlockNumber<\n  chain extends Chain | undefined,\n  transport extends Transport,\n>(\n  client: Client<transport, chain>,\n  {\n    emitOnBegin = false,\n    emitMissed = false,\n    onBlockNumber,\n    onError,\n    poll: poll_,\n    pollingInterval = client.pollingInterval,\n  }: WatchBlockNumberParameters<transport>,\n): WatchBlockNumberReturnType {\n  const enablePolling = (() => {\n    if (typeof poll_ !== 'undefined') return poll_\n    if (\n      client.transport.type === 'webSocket' ||\n      client.transport.type === 'ipc'\n    )\n      return false\n    if (\n      client.transport.type === 'fallback' &&\n      (client.transport.transports[0].config.type === 'webSocket' ||\n        client.transport.transports[0].config.type === 'ipc')\n    )\n      return false\n    return true\n  })()\n\n  let prevBlockNumber: GetBlockNumberReturnType | undefined\n\n  const pollBlockNumber = () => {\n    const observerId = stringify([\n      'watchBlockNumber',\n      client.uid,\n      emitOnBegin,\n      emitMissed,\n      pollingInterval,\n    ])\n\n    return observe(observerId, { onBlockNumber, onError }, (emit) =>\n      poll(\n        async () => {\n          try {\n            const blockNumber = await getAction(\n              client,\n              getBlockNumber,\n              'getBlockNumber',\n            )({ cacheTime: 0 })\n\n            if (prevBlockNumber !== undefined) {\n              // If the current block number is the same as the previous,\n              // we can skip.\n              if (blockNumber === prevBlockNumber) return\n\n              // If we have missed out on some previous blocks, and the\n              // `emitMissed` flag is truthy, let's emit those blocks.\n              if (blockNumber - prevBlockNumber > 1 && emitMissed) {\n                for (let i = prevBlockNumber + 1n; i < blockNumber; i++) {\n                  emit.onBlockNumber(i, prevBlockNumber)\n                  prevBlockNumber = i\n                }\n              }\n            }\n\n            // If the next block number is greater than the previous,\n            // it is not in the past, and we can emit the new block number.\n            if (\n              prevBlockNumber === undefined ||\n              blockNumber > prevBlockNumber\n            ) {\n              emit.onBlockNumber(blockNumber, prevBlockNumber)\n              prevBlockNumber = blockNumber\n            }\n          } catch (err) {\n            emit.onError?.(err as Error)\n          }\n        },\n        {\n          emitOnBegin,\n          interval: pollingInterval,\n        },\n      ),\n    )\n  }\n\n  const subscribeBlockNumber = () => {\n    const observerId = stringify([\n      'watchBlockNumber',\n      client.uid,\n      emitOnBegin,\n      emitMissed,\n    ])\n\n    return observe(observerId, { onBlockNumber, onError }, (emit) => {\n      let active = true\n      let unsubscribe = () => (active = false)\n      ;(async () => {\n        try {\n          const transport = (() => {\n            if (client.transport.type === 'fallback') {\n              const transport = client.transport.transports.find(\n                (transport: ReturnType<Transport>) =>\n                  transport.config.type === 'webSocket' ||\n                  transport.config.type === 'ipc',\n              )\n              if (!transport) return client.transport\n              return transport.value\n            }\n            return client.transport\n          })()\n\n          const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n            params: ['newHeads'],\n            onData(data: any) {\n              if (!active) return\n              const blockNumber = hexToBigInt(data.result?.number)\n              emit.onBlockNumber(blockNumber, prevBlockNumber)\n              prevBlockNumber = blockNumber\n            },\n            onError(error: Error) {\n              emit.onError?.(error)\n            },\n          })\n          unsubscribe = unsubscribe_\n          if (!active) unsubscribe()\n        } catch (err) {\n          onError?.(err as Error)\n        }\n      })()\n      return () => unsubscribe()\n    })\n  }\n\n  return enablePolling ? pollBlockNumber() : subscribeBlockNumber()\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { BlockNotFoundError } from '../../errors/block.js'\nimport {\n  TransactionNotFoundError,\n  TransactionReceiptNotFoundError,\n  WaitForTransactionReceiptTimeoutError,\n  type WaitForTransactionReceiptTimeoutErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { Transaction } from '../../types/transaction.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { withResolvers } from '../../utils/promise/withResolvers.js'\nimport {\n  type WithRetryParameters,\n  withRetry,\n} from '../../utils/promise/withRetry.js'\nimport { stringify } from '../../utils/stringify.js'\n\nimport { type GetBlockErrorType, getBlock } from './getBlock.js'\nimport {\n  type GetTransactionErrorType,\n  type GetTransactionReturnType,\n  getTransaction,\n} from './getTransaction.js'\nimport {\n  type GetTransactionReceiptErrorType,\n  type GetTransactionReceiptReturnType,\n  getTransactionReceipt,\n} from './getTransactionReceipt.js'\nimport {\n  type WatchBlockNumberErrorType,\n  watchBlockNumber,\n} from './watchBlockNumber.js'\n\nexport type ReplacementReason = 'cancelled' | 'replaced' | 'repriced'\nexport type ReplacementReturnType<\n  chain extends Chain | undefined = Chain | undefined,\n> = {\n  reason: ReplacementReason\n  replacedTransaction: Transaction\n  transaction: Transaction\n  transactionReceipt: GetTransactionReceiptReturnType<chain>\n}\n\nexport type WaitForTransactionReceiptReturnType<\n  chain extends Chain | undefined = Chain | undefined,\n> = GetTransactionReceiptReturnType<chain>\n\nexport type WaitForTransactionReceiptParameters<\n  chain extends Chain | undefined = Chain | undefined,\n> = {\n  /**\n   * Whether to check for transaction replacements.\n   * @default true\n   */\n  checkReplacement?: boolean | undefined\n  /**\n   * The number of confirmations (blocks that have passed) to wait before resolving.\n   * @default 1\n   */\n  confirmations?: number | undefined\n  /** The hash of the transaction. */\n  hash: Hash\n  /** Optional callback to emit if the transaction has been replaced. */\n  onReplaced?: ((response: ReplacementReturnType<chain>) => void) | undefined\n  /**\n   * Polling frequency (in ms). Defaults to the client's pollingInterval config.\n   * @default client.pollingInterval\n   */\n  pollingInterval?: number | undefined\n  /**\n   * Number of times to retry if the transaction or block is not found.\n   * @default 6 (exponential backoff)\n   */\n  retryCount?: WithRetryParameters['retryCount'] | undefined\n  /**\n   * Time to wait (in ms) between retries.\n   * @default `({ count }) => ~~(1 << count) * 200` (exponential backoff)\n   */\n  retryDelay?: WithRetryParameters['delay'] | undefined\n  /**\n   * Optional timeout (in milliseconds) to wait before stopping polling.\n   * @default 180_000\n   */\n  timeout?: number | undefined\n}\n\nexport type WaitForTransactionReceiptErrorType =\n  | ObserveErrorType\n  | GetBlockErrorType\n  | GetTransactionErrorType\n  | GetTransactionReceiptErrorType\n  | WatchBlockNumberErrorType\n  | WaitForTransactionReceiptTimeoutErrorType\n  | ErrorType\n\n/**\n * Waits for the [Transaction](https://viem.sh/docs/glossary/terms#transaction) to be included on a [Block](https://viem.sh/docs/glossary/terms#block) (one confirmation), and then returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt).\n *\n * - Docs: https://viem.sh/docs/actions/public/waitForTransactionReceipt\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions\n * - JSON-RPC Methods:\n *   - Polls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt) on each block until it has been processed.\n *   - If a Transaction has been replaced:\n *     - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) and extracts the transactions\n *     - Checks if one of the Transactions is a replacement\n *     - If so, calls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt).\n *\n * The `waitForTransactionReceipt` action additionally supports Replacement detection (e.g. sped up Transactions).\n *\n * Transactions can be replaced when a user modifies their transaction in their wallet (to speed up or cancel). Transactions are replaced when they are sent from the same nonce.\n *\n * There are 3 types of Transaction Replacement reasons:\n *\n * - `repriced`: The gas price has been modified (e.g. different `maxFeePerGas`)\n * - `cancelled`: The Transaction has been cancelled (e.g. `value === 0n`)\n * - `replaced`: The Transaction has been replaced (e.g. different `value` or `data`)\n *\n * @param client - Client to use\n * @param parameters - {@link WaitForTransactionReceiptParameters}\n * @returns The transaction receipt. {@link WaitForTransactionReceiptReturnType}\n *\n * @example\n * import { createPublicClient, waitForTransactionReceipt, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const transactionReceipt = await waitForTransactionReceipt(client, {\n *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function waitForTransactionReceipt<\n  chain extends Chain | undefined,\n>(\n  client: Client<Transport, chain>,\n  parameters: WaitForTransactionReceiptParameters<chain>,\n): Promise<WaitForTransactionReceiptReturnType<chain>> {\n  const {\n    checkReplacement = true,\n    confirmations = 1,\n    hash,\n    onReplaced,\n    retryCount = 6,\n    retryDelay = ({ count }) => ~~(1 << count) * 200, // exponential backoff\n    timeout = 180_000,\n  } = parameters\n\n  const observerId = stringify(['waitForTransactionReceipt', client.uid, hash])\n\n  const pollingInterval = (() => {\n    if (parameters.pollingInterval) return parameters.pollingInterval\n    if (client.chain?.experimental_preconfirmationTime)\n      return client.chain.experimental_preconfirmationTime\n    return client.pollingInterval\n  })()\n\n  let transaction: GetTransactionReturnType<chain> | undefined\n  let replacedTransaction: GetTransactionReturnType<chain> | undefined\n  let receipt: GetTransactionReceiptReturnType<chain> | undefined\n  let retrying = false\n\n  let _unobserve: () => void\n  let _unwatch: () => void\n\n  const { promise, resolve, reject } =\n    withResolvers<WaitForTransactionReceiptReturnType<chain>>()\n\n  const timer = timeout\n    ? setTimeout(() => {\n        _unwatch?.()\n        _unobserve?.()\n        reject(new WaitForTransactionReceiptTimeoutError({ hash }))\n      }, timeout)\n    : undefined\n\n  _unobserve = observe(\n    observerId,\n    { onReplaced, resolve, reject },\n    async (emit) => {\n      receipt = await getAction(\n        client,\n        getTransactionReceipt,\n        'getTransactionReceipt',\n      )({ hash }).catch(() => undefined)\n\n      if (receipt && confirmations <= 1) {\n        clearTimeout(timer)\n        emit.resolve(receipt)\n        _unobserve?.()\n        return\n      }\n\n      _unwatch = getAction(\n        client,\n        watchBlockNumber,\n        'watchBlockNumber',\n      )({\n        emitMissed: true,\n        emitOnBegin: true,\n        poll: true,\n        pollingInterval,\n        async onBlockNumber(blockNumber_) {\n          const done = (fn: () => void) => {\n            clearTimeout(timer)\n            _unwatch?.()\n            fn()\n            _unobserve?.()\n          }\n\n          let blockNumber = blockNumber_\n\n          if (retrying) return\n\n          try {\n            // If we already have a valid receipt, let's check if we have enough\n            // confirmations. If we do, then we can resolve.\n            if (receipt) {\n              if (\n                confirmations > 1 &&\n                (!receipt.blockNumber ||\n                  blockNumber - receipt.blockNumber + 1n < confirmations)\n              )\n                return\n\n              done(() => emit.resolve(receipt!))\n              return\n            }\n\n            // Get the transaction to check if it's been replaced.\n            // We need to retry as some RPC Providers may be slow to sync\n            // up mined transactions.\n            if (checkReplacement && !transaction) {\n              retrying = true\n              await withRetry(\n                async () => {\n                  transaction = (await getAction(\n                    client,\n                    getTransaction,\n                    'getTransaction',\n                  )({ hash })) as GetTransactionReturnType<chain>\n                  if (transaction.blockNumber)\n                    blockNumber = transaction.blockNumber\n                },\n                {\n                  delay: retryDelay,\n                  retryCount,\n                },\n              )\n              retrying = false\n            }\n\n            // Get the receipt to check if it's been processed.\n            receipt = await getAction(\n              client,\n              getTransactionReceipt,\n              'getTransactionReceipt',\n            )({ hash })\n\n            // Check if we have enough confirmations. If not, continue polling.\n            if (\n              confirmations > 1 &&\n              (!receipt.blockNumber ||\n                blockNumber - receipt.blockNumber + 1n < confirmations)\n            )\n              return\n\n            done(() => emit.resolve(receipt!))\n          } catch (err) {\n            // If the receipt is not found, the transaction will be pending.\n            // We need to check if it has potentially been replaced.\n            if (\n              err instanceof TransactionNotFoundError ||\n              err instanceof TransactionReceiptNotFoundError\n            ) {\n              if (!transaction) {\n                retrying = false\n                return\n              }\n\n              try {\n                replacedTransaction = transaction\n\n                // Let's retrieve the transactions from the current block.\n                // We need to retry as some RPC Providers may be slow to sync\n                // up mined blocks.\n                retrying = true\n                const block = await withRetry(\n                  () =>\n                    getAction(\n                      client,\n                      getBlock,\n                      'getBlock',\n                    )({\n                      blockNumber,\n                      includeTransactions: true,\n                    }),\n                  {\n                    delay: retryDelay,\n                    retryCount,\n                    shouldRetry: ({ error }) =>\n                      error instanceof BlockNotFoundError,\n                  },\n                )\n                retrying = false\n\n                const replacementTransaction = (\n                  block.transactions as {} as Transaction[]\n                ).find(\n                  ({ from, nonce }) =>\n                    from === replacedTransaction!.from &&\n                    nonce === replacedTransaction!.nonce,\n                )\n\n                // If we couldn't find a replacement transaction, continue polling.\n                if (!replacementTransaction) return\n\n                // If we found a replacement transaction, return it's receipt.\n                receipt = await getAction(\n                  client,\n                  getTransactionReceipt,\n                  'getTransactionReceipt',\n                )({\n                  hash: replacementTransaction.hash,\n                })\n\n                // Check if we have enough confirmations. If not, continue polling.\n                if (\n                  confirmations > 1 &&\n                  (!receipt.blockNumber ||\n                    blockNumber - receipt.blockNumber + 1n < confirmations)\n                )\n                  return\n\n                let reason: ReplacementReason = 'replaced'\n                if (\n                  replacementTransaction.to === replacedTransaction.to &&\n                  replacementTransaction.value === replacedTransaction.value &&\n                  replacementTransaction.input === replacedTransaction.input\n                ) {\n                  reason = 'repriced'\n                } else if (\n                  replacementTransaction.from === replacementTransaction.to &&\n                  replacementTransaction.value === 0n\n                ) {\n                  reason = 'cancelled'\n                }\n\n                done(() => {\n                  emit.onReplaced?.({\n                    reason,\n                    replacedTransaction: replacedTransaction! as any,\n                    transaction: replacementTransaction,\n                    transactionReceipt: receipt!,\n                  })\n                  emit.resolve(receipt!)\n                })\n              } catch (err_) {\n                done(() => emit.reject(err_))\n              }\n            } else {\n              done(() => emit.reject(err))\n            }\n          }\n        },\n      })\n    },\n  )\n\n  return promise\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { HasTransportType } from '../../types/transport.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { observe } from '../../utils/observe.js'\nimport { type PollErrorType, poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\n\nimport { type GetBlockReturnType, getBlock } from './getBlock.js'\n\nexport type OnBlockParameter<\n  chain extends Chain | undefined = Chain,\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n> = GetBlockReturnType<chain, includeTransactions, blockTag>\n\nexport type OnBlock<\n  chain extends Chain | undefined = Chain,\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n> = (\n  block: OnBlockParameter<chain, includeTransactions, blockTag>,\n  prevBlock: OnBlockParameter<chain, includeTransactions, blockTag> | undefined,\n) => void\n\nexport type WatchBlocksParameters<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain,\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n> = {\n  /** The callback to call when a new block is received. */\n  onBlock: OnBlock<chain, includeTransactions, blockTag>\n  /** The callback to call when an error occurred when trying to get for a new block. */\n  onError?: ((error: Error) => void) | undefined\n} & (\n  | (HasTransportType<transport, 'webSocket' | 'ipc'> extends true\n      ? {\n          blockTag?: undefined\n          emitMissed?: undefined\n          emitOnBegin?: undefined\n          includeTransactions?: undefined\n          /** Whether or not the WebSocket Transport should poll the JSON-RPC, rather than using `eth_subscribe`. */\n          poll?: false | undefined\n          pollingInterval?: undefined\n        }\n      : never)\n  | {\n      /** The block tag. Defaults to \"latest\". */\n      blockTag?: blockTag | BlockTag | undefined\n      /** Whether or not to emit the missed blocks to the callback. */\n      emitMissed?: boolean | undefined\n      /** Whether or not to emit the block to the callback when the subscription opens. */\n      emitOnBegin?: boolean | undefined\n      /** Whether or not to include transaction data in the response. */\n      includeTransactions?: includeTransactions | undefined\n      poll?: true | undefined\n      /** Polling frequency (in ms). Defaults to the client's pollingInterval config. */\n      pollingInterval?: number | undefined\n    }\n)\n\nexport type WatchBlocksReturnType = () => void\n\nexport type WatchBlocksErrorType =\n  | StringifyErrorType\n  | PollErrorType\n  | ErrorType\n\n/**\n * Watches and returns information for incoming blocks.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchBlocks\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n * - JSON-RPC Methods:\n *   - When `poll: true`, calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getBlockByNumber) on a polling interval.\n *   - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchBlocksParameters}\n * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlocksReturnType}\n *\n * @example\n * import { createPublicClient, watchBlocks, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const unwatch = watchBlocks(client, {\n *   onBlock: (block) => console.log(block),\n * })\n */\nexport function watchBlocks<\n  transport extends Transport,\n  chain extends Chain | undefined,\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n>(\n  client: Client<transport, chain>,\n  {\n    blockTag = client.experimental_blockTag ?? 'latest',\n    emitMissed = false,\n    emitOnBegin = false,\n    onBlock,\n    onError,\n    includeTransactions: includeTransactions_,\n    poll: poll_,\n    pollingInterval = client.pollingInterval,\n  }: WatchBlocksParameters<transport, chain, includeTransactions, blockTag>,\n): WatchBlocksReturnType {\n  const enablePolling = (() => {\n    if (typeof poll_ !== 'undefined') return poll_\n    if (\n      client.transport.type === 'webSocket' ||\n      client.transport.type === 'ipc'\n    )\n      return false\n    if (\n      client.transport.type === 'fallback' &&\n      (client.transport.transports[0].config.type === 'webSocket' ||\n        client.transport.transports[0].config.type === 'ipc')\n    )\n      return false\n    return true\n  })()\n  const includeTransactions = includeTransactions_ ?? false\n\n  let prevBlock:\n    | GetBlockReturnType<chain, false | includeTransactions, 'latest'>\n    | undefined\n\n  const pollBlocks = () => {\n    const observerId = stringify([\n      'watchBlocks',\n      client.uid,\n      blockTag,\n      emitMissed,\n      emitOnBegin,\n      includeTransactions,\n      pollingInterval,\n    ])\n\n    return observe(observerId, { onBlock, onError }, (emit) =>\n      poll(\n        async () => {\n          try {\n            const block = await getAction(\n              client,\n              getBlock,\n              'getBlock',\n            )({\n              blockTag,\n              includeTransactions,\n            })\n            if (block.number !== null && prevBlock?.number != null) {\n              // If the current block number is the same as the previous,\n              // we can skip.\n              if (block.number === prevBlock.number) return\n\n              // If we have missed out on some previous blocks, and the\n              // `emitMissed` flag is truthy, let's emit those blocks.\n              if (block.number - prevBlock.number > 1 && emitMissed) {\n                for (let i = prevBlock?.number + 1n; i < block.number; i++) {\n                  const block = (await getAction(\n                    client,\n                    getBlock,\n                    'getBlock',\n                  )({\n                    blockNumber: i,\n                    includeTransactions,\n                  })) as GetBlockReturnType<chain>\n                  emit.onBlock(block as any, prevBlock as any)\n                  prevBlock = block\n                }\n              }\n            }\n\n            if (\n              // If no previous block exists, emit.\n              prevBlock?.number == null ||\n              // If the block tag is \"pending\" with no block number, emit.\n              (blockTag === 'pending' && block?.number == null) ||\n              // If the next block number is greater than the previous block number, emit.\n              // We don't want to emit blocks in the past.\n              (block.number !== null && block.number > prevBlock.number)\n            ) {\n              emit.onBlock(block as any, prevBlock as any)\n              prevBlock = block as any\n            }\n          } catch (err) {\n            emit.onError?.(err as Error)\n          }\n        },\n        {\n          emitOnBegin,\n          interval: pollingInterval,\n        },\n      ),\n    )\n  }\n\n  const subscribeBlocks = () => {\n    let active = true\n    let emitFetched = true\n    let unsubscribe = () => (active = false)\n    ;(async () => {\n      try {\n        if (emitOnBegin) {\n          getAction(\n            client,\n            getBlock,\n            'getBlock',\n          )({\n            blockTag,\n            includeTransactions,\n          })\n            .then((block) => {\n              if (!active) return\n              if (!emitFetched) return\n              onBlock(block as any, undefined)\n              emitFetched = false\n            })\n            .catch(onError)\n        }\n\n        const transport = (() => {\n          if (client.transport.type === 'fallback') {\n            const transport = client.transport.transports.find(\n              (transport: ReturnType<Transport>) =>\n                transport.config.type === 'webSocket' ||\n                transport.config.type === 'ipc',\n            )\n            if (!transport) return client.transport\n            return transport.value\n          }\n          return client.transport\n        })()\n\n        const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n          params: ['newHeads'],\n          async onData(data: any) {\n            if (!active) return\n            const block = (await getAction(\n              client,\n              getBlock,\n              'getBlock',\n            )({\n              blockNumber: data.result?.number,\n              includeTransactions,\n            }).catch(() => {})) as GetBlockReturnType<chain>\n            if (!active) return\n            onBlock(block as any, prevBlock as any)\n            emitFetched = false\n            prevBlock = block\n          },\n          onError(error: Error) {\n            onError?.(error)\n          },\n        })\n        unsubscribe = unsubscribe_\n        if (!active) unsubscribe()\n      } catch (err) {\n        onError?.(err as Error)\n      }\n    })()\n    return () => unsubscribe()\n  }\n\n  return enablePolling ? pollBlocks() : subscribeBlocks()\n}\n", "import type { AbiEvent, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  DecodeLogDataMismatch,\n  DecodeLogTopicsMismatch,\n} from '../../errors/abi.js'\nimport { InvalidInputRpcError } from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  MaybeAbiEventName,\n  MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { LogTopic } from '../../types/misc.js'\nimport type { GetPollOptions } from '../../types/transport.js'\nimport { decodeEventLog } from '../../utils/abi/decodeEventLog.js'\nimport {\n  type EncodeEventTopicsParameters,\n  encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport { formatLog } from '../../utils/formatters/log.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\nimport {\n  type CreateEventFilterParameters,\n  createEventFilter,\n} from './createEventFilter.js'\nimport { getBlockNumber } from './getBlockNumber.js'\nimport { getFilterChanges } from './getFilterChanges.js'\nimport { type GetLogsParameters, getLogs } from './getLogs.js'\nimport { uninstallFilter } from './uninstallFilter.js'\n\nexport type WatchEventOnLogsParameter<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n> = Log<bigint, number, false, abiEvent, strict, abiEvents, eventName>[]\nexport type WatchEventOnLogsFn<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  //\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n> = (\n  logs: WatchEventOnLogsParameter<abiEvent, abiEvents, strict, _eventName>,\n) => void\n\nexport type WatchEventParameters<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  transport extends Transport = Transport,\n  //\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n> = {\n  /** The address of the contract. */\n  address?: Address | Address[] | undefined\n  /** Block to start listening from. */\n  fromBlock?: BlockNumber<bigint> | undefined\n  /** The callback to call when an error occurred when trying to get for a new block. */\n  onError?: ((error: Error) => void) | undefined\n  /** The callback to call when new event logs are received. */\n  onLogs: WatchEventOnLogsFn<abiEvent, abiEvents, strict, _eventName>\n} & GetPollOptions<transport> &\n  (\n    | {\n        event: abiEvent\n        events?: undefined\n        args?: MaybeExtractEventArgsFromAbi<abiEvents, _eventName> | undefined\n        /**\n         * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n         * @default false\n         */\n        strict?: strict | undefined\n      }\n    | {\n        event?: undefined\n        events?: abiEvents | undefined\n        args?: undefined\n        /**\n         * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n         * @default false\n         */\n        strict?: strict | undefined\n      }\n    | {\n        event?: undefined\n        events?: undefined\n        args?: undefined\n        strict?: undefined\n      }\n  )\n\nexport type WatchEventReturnType = () => void\n\nexport type WatchEventErrorType =\n  | StringifyErrorType\n  | ObserveErrorType\n  | ErrorType\n\n/**\n * Watches and returns emitted [Event Logs](https://viem.sh/docs/glossary/terms#event-log).\n *\n * - Docs: https://viem.sh/docs/actions/public/watchEvent\n * - JSON-RPC Methods:\n *   - **RPC Provider supports `eth_newFilter`:**\n *     - Calls [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter) to create a filter (called on initialize).\n *     - On a polling interval, it will call [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges).\n *   - **RPC Provider does not support `eth_newFilter`:**\n *     - Calls [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) for each block between the polling interval.\n *\n * This Action will batch up all the Event Logs found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/actions/public/watchEvent#onLogs).\n *\n * `watchEvent` will attempt to create an [Event Filter](https://viem.sh/docs/actions/public/createEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchEventParameters}\n * @returns A function that can be invoked to stop watching for new Event Logs. {@link WatchEventReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchEvent } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const unwatch = watchEvent(client, {\n *   onLogs: (logs) => console.log(logs),\n * })\n */\nexport function watchEvent<\n  chain extends Chain | undefined,\n  const abiEvent extends AbiEvent | undefined = undefined,\n  const abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  transport extends Transport = Transport,\n  _eventName extends string | undefined = undefined,\n>(\n  client: Client<transport, chain>,\n  {\n    address,\n    args,\n    batch = true,\n    event,\n    events,\n    fromBlock,\n    onError,\n    onLogs,\n    poll: poll_,\n    pollingInterval = client.pollingInterval,\n    strict: strict_,\n  }: WatchEventParameters<abiEvent, abiEvents, strict, transport>,\n): WatchEventReturnType {\n  const enablePolling = (() => {\n    if (typeof poll_ !== 'undefined') return poll_\n    if (typeof fromBlock === 'bigint') return true\n    if (\n      client.transport.type === 'webSocket' ||\n      client.transport.type === 'ipc'\n    )\n      return false\n    if (\n      client.transport.type === 'fallback' &&\n      (client.transport.transports[0].config.type === 'webSocket' ||\n        client.transport.transports[0].config.type === 'ipc')\n    )\n      return false\n    return true\n  })()\n  const strict = strict_ ?? false\n\n  const pollEvent = () => {\n    const observerId = stringify([\n      'watchEvent',\n      address,\n      args,\n      batch,\n      client.uid,\n      event,\n      pollingInterval,\n      fromBlock,\n    ])\n\n    return observe(observerId, { onLogs, onError }, (emit) => {\n      let previousBlockNumber: bigint\n      if (fromBlock !== undefined) previousBlockNumber = fromBlock - 1n\n      let filter: Filter<'event', abiEvents, _eventName, any>\n      let initialized = false\n\n      const unwatch = poll(\n        async () => {\n          if (!initialized) {\n            try {\n              filter = (await getAction(\n                client,\n                createEventFilter as any,\n                'createEventFilter',\n              )({\n                address,\n                args,\n                event: event!,\n                events,\n                strict,\n                fromBlock,\n              } as unknown as CreateEventFilterParameters)) as unknown as Filter<\n                'event',\n                abiEvents,\n                _eventName\n              >\n            } catch {}\n            initialized = true\n            return\n          }\n\n          try {\n            let logs: Log[]\n            if (filter) {\n              logs = await getAction(\n                client,\n                getFilterChanges,\n                'getFilterChanges',\n              )({ filter })\n            } else {\n              // If the filter doesn't exist, we will fall back to use `getLogs`.\n              // The fall back exists because some RPC Providers do not support filters.\n\n              // Fetch the block number to use for `getLogs`.\n              const blockNumber = await getAction(\n                client,\n                getBlockNumber,\n                'getBlockNumber',\n              )({})\n\n              // If the block number has changed, we will need to fetch the logs.\n              // If the block number doesn't exist, we are yet to reach the first poll interval,\n              // so do not emit any logs.\n              if (previousBlockNumber && previousBlockNumber !== blockNumber) {\n                logs = await getAction(\n                  client,\n                  getLogs,\n                  'getLogs',\n                )({\n                  address,\n                  args,\n                  event: event!,\n                  events,\n                  fromBlock: previousBlockNumber + 1n,\n                  toBlock: blockNumber,\n                } as unknown as GetLogsParameters)\n              } else {\n                logs = []\n              }\n              previousBlockNumber = blockNumber\n            }\n\n            if (logs.length === 0) return\n            if (batch) emit.onLogs(logs as any)\n            else for (const log of logs) emit.onLogs([log] as any)\n          } catch (err) {\n            // If a filter has been set and gets uninstalled, providers will throw an InvalidInput error.\n            // Reinitialize the filter when this occurs\n            if (filter && err instanceof InvalidInputRpcError)\n              initialized = false\n            emit.onError?.(err as Error)\n          }\n        },\n        {\n          emitOnBegin: true,\n          interval: pollingInterval,\n        },\n      )\n\n      return async () => {\n        if (filter)\n          await getAction(\n            client,\n            uninstallFilter,\n            'uninstallFilter',\n          )({ filter })\n        unwatch()\n      }\n    })\n  }\n\n  const subscribeEvent = () => {\n    let active = true\n    let unsubscribe = () => (active = false)\n    ;(async () => {\n      try {\n        const transport = (() => {\n          if (client.transport.type === 'fallback') {\n            const transport = client.transport.transports.find(\n              (transport: ReturnType<Transport>) =>\n                transport.config.type === 'webSocket' ||\n                transport.config.type === 'ipc',\n            )\n            if (!transport) return client.transport\n            return transport.value\n          }\n          return client.transport\n        })()\n\n        const events_ = events ?? (event ? [event] : undefined)\n        let topics: LogTopic[] = []\n        if (events_) {\n          const encoded = (events_ as AbiEvent[]).flatMap((event) =>\n            encodeEventTopics({\n              abi: [event],\n              eventName: (event as AbiEvent).name,\n              args,\n            } as EncodeEventTopicsParameters),\n          )\n          // TODO: Clean up type casting\n          topics = [encoded as LogTopic]\n          if (event) topics = topics[0] as LogTopic[]\n        }\n\n        const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n          params: ['logs', { address, topics }],\n          onData(data: any) {\n            if (!active) return\n            const log = data.result\n            try {\n              const { eventName, args } = decodeEventLog({\n                abi: events_ ?? [],\n                data: log.data,\n                topics: log.topics,\n                strict,\n              })\n              const formatted = formatLog(log, { args, eventName })\n              onLogs([formatted] as any)\n            } catch (err) {\n              let eventName: string | undefined\n              let isUnnamed: boolean | undefined\n              if (\n                err instanceof DecodeLogDataMismatch ||\n                err instanceof DecodeLogTopicsMismatch\n              ) {\n                // If strict mode is on, and log data/topics do not match event definition, skip.\n                if (strict_) return\n                eventName = err.abiItem.name\n                isUnnamed = err.abiItem.inputs?.some(\n                  (x) => !('name' in x && x.name),\n                )\n              }\n\n              // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).\n              const formatted = formatLog(log, {\n                args: isUnnamed ? [] : {},\n                eventName,\n              })\n              onLogs([formatted] as any)\n            }\n          },\n          onError(error: Error) {\n            onError?.(error)\n          },\n        })\n        unsubscribe = unsubscribe_\n        if (!active) unsubscribe()\n      } catch (err) {\n        onError?.(err as Error)\n      }\n    })()\n    return () => unsubscribe()\n  }\n\n  return enablePolling ? pollEvent() : subscribeEvent()\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { GetPollOptions } from '../../types/transport.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\n\nimport { createPendingTransactionFilter } from './createPendingTransactionFilter.js'\nimport { getFilterChanges } from './getFilterChanges.js'\nimport { uninstallFilter } from './uninstallFilter.js'\n\nexport type OnTransactionsParameter = Hash[]\nexport type OnTransactionsFn = (transactions: OnTransactionsParameter) => void\n\nexport type WatchPendingTransactionsParameters<\n  transport extends Transport = Transport,\n> = {\n  /** The callback to call when an error occurred when trying to get for a new block. */\n  onError?: ((error: Error) => void) | undefined\n  /** The callback to call when new transactions are received. */\n  onTransactions: OnTransactionsFn\n} & GetPollOptions<transport>\n\nexport type WatchPendingTransactionsReturnType = () => void\n\nexport type WatchPendingTransactionsErrorType =\n  | StringifyErrorType\n  | ObserveErrorType\n  | ErrorType\n\n/**\n * Watches and returns pending transaction hashes.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchPendingTransactions\n * - JSON-RPC Methods:\n *   - When `poll: true`\n *     - Calls [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter) to initialize the filter.\n *     - Calls [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getFilterChanges) on a polling interval.\n *   - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newPendingTransactions\"` event.\n *\n * This Action will batch up all the pending transactions found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchPendingTransactions#pollinginterval-optional), and invoke them via [`onTransactions`](https://viem.sh/docs/actions/public/watchPendingTransactions#ontransactions).\n *\n * @param client - Client to use\n * @param parameters - {@link WatchPendingTransactionsParameters}\n * @returns A function that can be invoked to stop watching for new pending transaction hashes. {@link WatchPendingTransactionsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchPendingTransactions } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const unwatch = await watchPendingTransactions(client, {\n *   onTransactions: (hashes) => console.log(hashes),\n * })\n */\nexport function watchPendingTransactions<\n  transport extends Transport,\n  chain extends Chain | undefined,\n>(\n  client: Client<transport, chain>,\n  {\n    batch = true,\n    onError,\n    onTransactions,\n    poll: poll_,\n    pollingInterval = client.pollingInterval,\n  }: WatchPendingTransactionsParameters<transport>,\n) {\n  const enablePolling =\n    typeof poll_ !== 'undefined'\n      ? poll_\n      : client.transport.type !== 'webSocket' && client.transport.type !== 'ipc'\n\n  const pollPendingTransactions = () => {\n    const observerId = stringify([\n      'watchPendingTransactions',\n      client.uid,\n      batch,\n      pollingInterval,\n    ])\n    return observe(observerId, { onTransactions, onError }, (emit) => {\n      let filter: Filter<'transaction'>\n\n      const unwatch = poll(\n        async () => {\n          try {\n            if (!filter) {\n              try {\n                filter = await getAction(\n                  client,\n                  createPendingTransactionFilter,\n                  'createPendingTransactionFilter',\n                )({})\n                return\n              } catch (err) {\n                unwatch()\n                throw err\n              }\n            }\n\n            const hashes = await getAction(\n              client,\n              getFilterChanges,\n              'getFilterChanges',\n            )({ filter })\n            if (hashes.length === 0) return\n            if (batch) emit.onTransactions(hashes)\n            else for (const hash of hashes) emit.onTransactions([hash])\n          } catch (err) {\n            emit.onError?.(err as Error)\n          }\n        },\n        {\n          emitOnBegin: true,\n          interval: pollingInterval,\n        },\n      )\n\n      return async () => {\n        if (filter)\n          await getAction(\n            client,\n            uninstallFilter,\n            'uninstallFilter',\n          )({ filter })\n        unwatch()\n      }\n    })\n  }\n\n  const subscribePendingTransactions = () => {\n    let active = true\n    let unsubscribe = () => (active = false)\n    ;(async () => {\n      try {\n        const { unsubscribe: unsubscribe_ } = await client.transport.subscribe({\n          params: ['newPendingTransactions'],\n          onData(data: any) {\n            if (!active) return\n            const transaction = data.result\n            onTransactions([transaction])\n          },\n          onError(error: Error) {\n            onError?.(error)\n          },\n        })\n        unsubscribe = unsubscribe_\n        if (!active) unsubscribe()\n      } catch (err) {\n        onError?.(err as Error)\n      }\n    })()\n    return () => unsubscribe()\n  }\n\n  return enablePolling\n    ? pollPendingTransactions()\n    : subscribePendingTransactions()\n}\n", "import type { Address } from 'abitype'\n\nimport type { ExactPartial, Prettify } from '../../types/utils.js'\nimport type { SiweMessage } from './types.js'\n\n/**\n * @description Parses EIP-4361 formatted message into message fields object.\n *\n * @see https://eips.ethereum.org/EIPS/eip-4361\n *\n * @returns EIP-4361 fields object\n */\nexport function parseSiweMessage(\n  message: string,\n): Prettify<ExactPartial<SiweMessage>> {\n  const { scheme, statement, ...prefix } = (message.match(prefixRegex)\n    ?.groups ?? {}) as {\n    address: Address\n    domain: string\n    scheme?: string\n    statement?: string\n  }\n  const { chainId, expirationTime, issuedAt, notBefore, requestId, ...suffix } =\n    (message.match(suffixRegex)?.groups ?? {}) as {\n      chainId: string\n      expirationTime?: string\n      issuedAt?: string\n      nonce: string\n      notBefore?: string\n      requestId?: string\n      uri: string\n      version: '1'\n    }\n  const resources = message.split('Resources:')[1]?.split('\\n- ').slice(1)\n  return {\n    ...prefix,\n    ...suffix,\n    ...(chainId ? { chainId: Number(chainId) } : {}),\n    ...(expirationTime ? { expirationTime: new Date(expirationTime) } : {}),\n    ...(issuedAt ? { issuedAt: new Date(issuedAt) } : {}),\n    ...(notBefore ? { notBefore: new Date(notBefore) } : {}),\n    ...(requestId ? { requestId } : {}),\n    ...(resources ? { resources } : {}),\n    ...(scheme ? { scheme } : {}),\n    ...(statement ? { statement } : {}),\n  }\n}\n\n// https://regexr.com/80gdj\nconst prefixRegex =\n  /^(?:(?<scheme>[a-zA-Z][a-zA-Z0-9+-.]*):\\/\\/)?(?<domain>[a-zA-Z0-9+-.]*(?::[0-9]{1,5})?) (?:wants you to sign in with your Ethereum account:\\n)(?<address>0x[a-fA-F0-9]{40})\\n\\n(?:(?<statement>.*)\\n\\n)?/\n\n// https://regexr.com/80gf9\nconst suffixRegex =\n  /(?:URI: (?<uri>.+))\\n(?:Version: (?<version>.+))\\n(?:Chain ID: (?<chainId>\\d+))\\n(?:Nonce: (?<nonce>[a-zA-Z0-9]+))\\n(?:Issued At: (?<issuedAt>.+))(?:\\nExpiration Time: (?<expirationTime>.+))?(?:\\nNot Before: (?<notBefore>.+))?(?:\\nRequest ID: (?<requestId>.+))?/\n", "import type { Address } from 'abitype'\n\nimport type { ExactPartial } from '../../types/utils.js'\nimport { isAddress } from '../address/isAddress.js'\nimport { isAddressEqual } from '../address/isAddressEqual.js'\nimport type { SiweMessage } from './types.js'\n\nexport type ValidateSiweMessageParameters = {\n  /**\n   * Ethereum address to check against.\n   */\n  address?: Address | undefined\n  /**\n   * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) authority to check against.\n   */\n  domain?: string | undefined\n  /**\n   * EIP-4361 message fields.\n   */\n  message: ExactPartial<SiweMessage>\n  /**\n   * Random string to check against.\n   */\n  nonce?: string | undefined\n  /**\n   * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) URI scheme to check against.\n   */\n  scheme?: string | undefined\n  /**\n   * Current time to check optional `expirationTime` and `notBefore` fields.\n   *\n   * @default new Date()\n   */\n  time?: Date | undefined\n}\n\nexport type ValidateSiweMessageReturnType = boolean\n\n/**\n * @description Validates EIP-4361 message.\n *\n * @see https://eips.ethereum.org/EIPS/eip-4361\n */\nexport function validateSiweMessage(\n  parameters: ValidateSiweMessageParameters,\n): ValidateSiweMessageReturnType {\n  const {\n    address,\n    domain,\n    message,\n    nonce,\n    scheme,\n    time = new Date(),\n  } = parameters\n\n  if (domain && message.domain !== domain) return false\n  if (nonce && message.nonce !== nonce) return false\n  if (scheme && message.scheme !== scheme) return false\n\n  if (message.expirationTime && time >= message.expirationTime) return false\n  if (message.notBefore && time < message.notBefore) return false\n\n  try {\n    if (!message.address) return false\n    if (!isAddress(message.address, { strict: false })) return false\n    if (address && !isAddressEqual(message.address, address)) return false\n  } catch {\n    return false\n  }\n\n  return true\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport type { HashMessageErrorType } from '../../utils/signature/hashMessage.js'\nimport { hashMessage } from '../../utils/signature/hashMessage.js'\nimport { parseSiweMessage } from '../../utils/siwe/parseSiweMessage.js'\nimport {\n  type ValidateSiweMessageParameters,\n  validateSiweMessage,\n} from '../../utils/siwe/validateSiweMessage.js'\nimport {\n  type VerifyHashErrorType,\n  type VerifyHashParameters,\n  verifyHash,\n} from '../public/verifyHash.js'\n\nexport type VerifySiweMessageParameters = Prettify<\n  Pick<VerifyHashParameters, 'blockNumber' | 'blockTag'> &\n    Pick<\n      ValidateSiweMessageParameters,\n      'address' | 'domain' | 'nonce' | 'scheme' | 'time'\n    > & {\n      /**\n       * EIP-4361 formatted message.\n       */\n      message: string\n      /**\n       * Signature to check against.\n       */\n      signature: Hex\n    }\n>\n\nexport type VerifySiweMessageReturnType = boolean\n\nexport type VerifySiweMessageErrorType =\n  | HashMessageErrorType\n  | VerifyHashErrorType\n  | ErrorType\n\n/**\n * Verifies [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message was signed.\n *\n * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n *\n * - Docs {@link https://viem.sh/docs/siwe/actions/verifySiweMessage}\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifySiweMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifySiweMessageReturnType}\n */\nexport async function verifySiweMessage<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: VerifySiweMessageParameters,\n): Promise<VerifySiweMessageReturnType> {\n  const {\n    address,\n    domain,\n    message,\n    nonce,\n    scheme,\n    signature,\n    time = new Date(),\n    ...callRequest\n  } = parameters\n\n  const parsed = parseSiweMessage(message)\n  if (!parsed.address) return false\n\n  const isValid = validateSiweMessage({\n    address,\n    domain,\n    message: parsed,\n    nonce,\n    scheme,\n    time,\n  })\n  if (!isValid) return false\n\n  const hash = hashMessage(message)\n  return verifyHash(client, {\n    address: parsed.address,\n    hash,\n    signature,\n    ...callRequest,\n  })\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { TransactionReceiptRevertedError } from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { TransactionSerializedGeneric } from '../../types/transaction.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { formatTransactionReceipt } from '../../utils/formatters/transactionReceipt.js'\nimport type { FormattedTransactionReceipt } from '../../utils/index.js'\n\nexport type SendRawTransactionSyncParameters = {\n  /** The signed serialized transaction. */\n  serializedTransaction: TransactionSerializedGeneric\n  /** Whether to throw an error if the transaction was detected as reverted. @default true */\n  throwOnReceiptRevert?: boolean | undefined\n  /** The timeout for the transaction. */\n  timeout?: number | undefined\n}\n\nexport type SendRawTransactionSyncReturnType<\n  chain extends Chain | undefined = undefined,\n> = FormattedTransactionReceipt<chain>\n\nexport type SendRawTransactionSyncErrorType = RequestErrorType | ErrorType\n\n/**\n * Sends a **signed** transaction to the network synchronously,\n * and waits for the transaction to be included in a block.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransactionSync\n * - JSON-RPC Method: [`eth_sendRawTransactionSync`](https://eips.ethereum.org/EIPS/eip-7966)\n *\n * @param client - Client to use\n * @param parameters - {@link SendRawTransactionParameters}\n * @returns The transaction receipt. {@link SendRawTransactionSyncReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendRawTransactionSync } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n *\n * const receipt = await sendRawTransactionSync(client, {\n *   serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n * })\n */\nexport async function sendRawTransactionSync<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    serializedTransaction,\n    throwOnReceiptRevert,\n    timeout,\n  }: SendRawTransactionSyncParameters,\n): Promise<SendRawTransactionSyncReturnType<chain>> {\n  const receipt = await client.request(\n    {\n      method: 'eth_sendRawTransactionSync',\n      params: timeout\n        ? [serializedTransaction, timeout]\n        : [serializedTransaction],\n    },\n    { retryCount: 0 },\n  )\n  const format =\n    client.chain?.formatters?.transactionReceipt?.format ||\n    formatTransactionReceipt\n\n  const formatted = format(receipt) as SendRawTransactionSyncReturnType<chain>\n  if (formatted.status === 'reverted' && throwOnReceiptRevert)\n    throw new TransactionReceiptRevertedError({ receipt: formatted })\n  return formatted\n}\n", "import type { Abi, AbiEvent, Address } from 'abitype'\n\nimport {\n  type GetEnsAddressParameters,\n  type GetEnsAddressReturnType,\n  getEnsAddress,\n} from '../../actions/ens/getEnsAddress.js'\nimport {\n  type GetEnsAvatarParameters,\n  type GetEnsAvatarReturnType,\n  getEnsAvatar,\n} from '../../actions/ens/getEnsAvatar.js'\nimport {\n  type GetEnsNameParameters,\n  type GetEnsNameReturnType,\n  getEnsName,\n} from '../../actions/ens/getEnsName.js'\nimport {\n  type GetEnsResolverParameters,\n  type GetEnsResolverReturnType,\n  getEnsResolver,\n} from '../../actions/ens/getEnsResolver.js'\nimport {\n  type GetEnsTextParameters,\n  type GetEnsTextReturnType,\n  getEnsText,\n} from '../../actions/ens/getEnsText.js'\nimport {\n  type CallParameters,\n  type CallReturnType,\n  call,\n} from '../../actions/public/call.js'\nimport {\n  type CreateAccessListParameters,\n  type CreateAccessListReturnType,\n  createAccessList,\n} from '../../actions/public/createAccessList.js'\nimport {\n  type CreateBlockFilterReturnType,\n  createBlockFilter,\n} from '../../actions/public/createBlockFilter.js'\nimport {\n  type CreateContractEventFilterParameters,\n  type CreateContractEventFilterReturnType,\n  createContractEventFilter,\n} from '../../actions/public/createContractEventFilter.js'\nimport {\n  type CreateEventFilterParameters,\n  type CreateEventFilterReturnType,\n  createEventFilter,\n} from '../../actions/public/createEventFilter.js'\nimport {\n  type CreatePendingTransactionFilterReturnType,\n  createPendingTransactionFilter,\n} from '../../actions/public/createPendingTransactionFilter.js'\nimport {\n  type EstimateContractGasParameters,\n  type EstimateContractGasReturnType,\n  estimateContractGas,\n} from '../../actions/public/estimateContractGas.js'\nimport {\n  type EstimateFeesPerGasParameters,\n  type EstimateFeesPerGasReturnType,\n  estimateFeesPerGas,\n} from '../../actions/public/estimateFeesPerGas.js'\nimport {\n  type EstimateGasParameters,\n  type EstimateGasReturnType,\n  estimateGas,\n} from '../../actions/public/estimateGas.js'\nimport {\n  type EstimateMaxPriorityFeePerGasParameters,\n  type EstimateMaxPriorityFeePerGasReturnType,\n  estimateMaxPriorityFeePerGas,\n} from '../../actions/public/estimateMaxPriorityFeePerGas.js'\nimport {\n  type FillTransactionParameters,\n  type FillTransactionReturnType,\n  fillTransaction,\n} from '../../actions/public/fillTransaction.js'\nimport {\n  type GetBalanceParameters,\n  type GetBalanceReturnType,\n  getBalance,\n} from '../../actions/public/getBalance.js'\nimport {\n  type GetBlobBaseFeeReturnType,\n  getBlobBaseFee,\n} from '../../actions/public/getBlobBaseFee.js'\nimport {\n  type GetBlockParameters,\n  type GetBlockReturnType,\n  getBlock,\n} from '../../actions/public/getBlock.js'\nimport {\n  type GetBlockNumberParameters,\n  type GetBlockNumberReturnType,\n  getBlockNumber,\n} from '../../actions/public/getBlockNumber.js'\nimport {\n  type GetBlockTransactionCountParameters,\n  type GetBlockTransactionCountReturnType,\n  getBlockTransactionCount,\n} from '../../actions/public/getBlockTransactionCount.js'\nimport {\n  type GetChainIdReturnType,\n  getChainId,\n} from '../../actions/public/getChainId.js'\nimport {\n  type GetCodeParameters,\n  type GetCodeReturnType,\n  getCode,\n} from '../../actions/public/getCode.js'\nimport {\n  type GetContractEventsParameters,\n  type GetContractEventsReturnType,\n  getContractEvents,\n} from '../../actions/public/getContractEvents.js'\nimport {\n  type GetDelegationParameters,\n  type GetDelegationReturnType,\n  getDelegation,\n} from '../../actions/public/getDelegation.js'\nimport {\n  type GetEip712DomainParameters,\n  type GetEip712DomainReturnType,\n  getEip712Domain,\n} from '../../actions/public/getEip712Domain.js'\nimport {\n  type GetFeeHistoryParameters,\n  type GetFeeHistoryReturnType,\n  getFeeHistory,\n} from '../../actions/public/getFeeHistory.js'\nimport {\n  type GetFilterChangesParameters,\n  type GetFilterChangesReturnType,\n  getFilterChanges,\n} from '../../actions/public/getFilterChanges.js'\nimport {\n  type GetFilterLogsParameters,\n  type GetFilterLogsReturnType,\n  getFilterLogs,\n} from '../../actions/public/getFilterLogs.js'\nimport {\n  type GetGasPriceReturnType,\n  getGasPrice,\n} from '../../actions/public/getGasPrice.js'\nimport {\n  type GetLogsParameters,\n  type GetLogsReturnType,\n  getLogs,\n} from '../../actions/public/getLogs.js'\nimport {\n  type GetProofParameters,\n  type GetProofReturnType,\n  getProof,\n} from '../../actions/public/getProof.js'\nimport {\n  type GetStorageAtParameters,\n  type GetStorageAtReturnType,\n  getStorageAt,\n} from '../../actions/public/getStorageAt.js'\nimport {\n  type GetTransactionParameters,\n  type GetTransactionReturnType,\n  getTransaction,\n} from '../../actions/public/getTransaction.js'\nimport {\n  type GetTransactionConfirmationsParameters,\n  type GetTransactionConfirmationsReturnType,\n  getTransactionConfirmations,\n} from '../../actions/public/getTransactionConfirmations.js'\nimport {\n  type GetTransactionCountParameters,\n  type GetTransactionCountReturnType,\n  getTransactionCount,\n} from '../../actions/public/getTransactionCount.js'\nimport {\n  type GetTransactionReceiptParameters,\n  type GetTransactionReceiptReturnType,\n  getTransactionReceipt,\n} from '../../actions/public/getTransactionReceipt.js'\nimport {\n  type MulticallParameters,\n  type MulticallReturnType,\n  multicall,\n} from '../../actions/public/multicall.js'\nimport {\n  type ReadContractParameters,\n  type ReadContractReturnType,\n  readContract,\n} from '../../actions/public/readContract.js'\nimport {\n  type SimulateBlocksParameters,\n  type SimulateBlocksReturnType,\n  simulateBlocks,\n} from '../../actions/public/simulateBlocks.js'\nimport {\n  type SimulateCallsParameters,\n  type SimulateCallsReturnType,\n  simulateCalls,\n} from '../../actions/public/simulateCalls.js'\nimport {\n  type SimulateContractParameters,\n  type SimulateContractReturnType,\n  simulateContract,\n} from '../../actions/public/simulateContract.js'\nimport {\n  type UninstallFilterParameters,\n  type UninstallFilterReturnType,\n  uninstallFilter,\n} from '../../actions/public/uninstallFilter.js'\nimport {\n  type VerifyHashParameters,\n  type VerifyHashReturnType,\n  verifyHash,\n} from '../../actions/public/verifyHash.js'\nimport {\n  type VerifyMessageParameters,\n  type VerifyMessageReturnType,\n  verifyMessage,\n} from '../../actions/public/verifyMessage.js'\nimport {\n  type VerifyTypedDataParameters,\n  type VerifyTypedDataReturnType,\n  verifyTypedData,\n} from '../../actions/public/verifyTypedData.js'\nimport {\n  type WaitForTransactionReceiptParameters,\n  type WaitForTransactionReceiptReturnType,\n  waitForTransactionReceipt,\n} from '../../actions/public/waitForTransactionReceipt.js'\nimport {\n  type WatchBlockNumberParameters,\n  type WatchBlockNumberReturnType,\n  watchBlockNumber,\n} from '../../actions/public/watchBlockNumber.js'\nimport {\n  type WatchBlocksParameters,\n  type WatchBlocksReturnType,\n  watchBlocks,\n} from '../../actions/public/watchBlocks.js'\nimport {\n  type WatchContractEventParameters,\n  type WatchContractEventReturnType,\n  watchContractEvent,\n} from '../../actions/public/watchContractEvent.js'\nimport {\n  type WatchEventParameters,\n  type WatchEventReturnType,\n  watchEvent,\n} from '../../actions/public/watchEvent.js'\nimport {\n  type WatchPendingTransactionsParameters,\n  type WatchPendingTransactionsReturnType,\n  watchPendingTransactions,\n} from '../../actions/public/watchPendingTransactions.js'\nimport {\n  type VerifySiweMessageParameters,\n  type VerifySiweMessageReturnType,\n  verifySiweMessage,\n} from '../../actions/siwe/verifySiweMessage.js'\nimport {\n  type PrepareTransactionRequestParameters,\n  type PrepareTransactionRequestRequest,\n  type PrepareTransactionRequestReturnType,\n  prepareTransactionRequest,\n} from '../../actions/wallet/prepareTransactionRequest.js'\nimport {\n  type SendRawTransactionParameters,\n  type SendRawTransactionReturnType,\n  sendRawTransaction,\n} from '../../actions/wallet/sendRawTransaction.js'\nimport {\n  type SendRawTransactionSyncParameters,\n  type SendRawTransactionSyncReturnType,\n  sendRawTransactionSync,\n} from '../../actions/wallet/sendRawTransactionSync.js'\nimport type { Account } from '../../types/account.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractEventName,\n  ContractFunctionArgs,\n  ContractFunctionName,\n  MaybeAbiEventName,\n  MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { FeeValuesType } from '../../types/fee.js'\nimport type { FilterType } from '../../types/filter.js'\nimport type { Client } from '../createClient.js'\nimport type { Transport } from '../transports/createTransport.js'\n\nexport type PublicActions<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n> = {\n  /**\n   * Executes a new message call immediately without submitting a transaction to the network.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/call\n   * - JSON-RPC Methods: [`eth_call`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_call)\n   *\n   * @param args - {@link CallParameters}\n   * @returns The call data. {@link CallReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const data = await client.call({\n   *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n   *   data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   * })\n   */\n  call: (parameters: CallParameters<chain>) => Promise<CallReturnType>\n  /**\n   * Creates an EIP-2930 access list that you can include in a transaction.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/createAccessList\n   * - JSON-RPC Methods: `eth_createAccessList`\n   *\n   * @param args - {@link CreateAccessListParameters}\n   * @returns The call data. {@link CreateAccessListReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   *\n   * const data = await client.createAccessList({\n   *   data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   * })\n   */\n  createAccessList: (\n    parameters: CreateAccessListParameters<chain>,\n  ) => Promise<CreateAccessListReturnType>\n  /**\n   * Creates a Filter to listen for new block hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n   *\n   * - Docs: https://viem.sh/docs/actions/public/createBlockFilter\n   * - JSON-RPC Methods: [`eth_newBlockFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newBlockFilter)\n   *\n   * @returns Filter. {@link CreateBlockFilterReturnType}\n   *\n   * @example\n   * import { createPublicClient, createBlockFilter, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await createBlockFilter(client)\n   * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'block' }\n   */\n  createBlockFilter: () => Promise<CreateBlockFilterReturnType>\n  /**\n   * Creates a Filter to retrieve event logs that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges) or [`getFilterLogs`](https://viem.sh/docs/actions/public/getFilterLogs).\n   *\n   * - Docs: https://viem.sh/docs/contract/createContractEventFilter\n   *\n   * @param args - {@link CreateContractEventFilterParameters}\n   * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateContractEventFilterReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createContractEventFilter({\n   *   abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n   * })\n   */\n  createContractEventFilter: <\n    const abi extends Abi | readonly unknown[],\n    eventName extends ContractEventName<abi> | undefined,\n    args extends MaybeExtractEventArgsFromAbi<abi, eventName> | undefined,\n    strict extends boolean | undefined = undefined,\n    fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n    toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  >(\n    args: CreateContractEventFilterParameters<\n      abi,\n      eventName,\n      args,\n      strict,\n      fromBlock,\n      toBlock\n    >,\n  ) => Promise<\n    CreateContractEventFilterReturnType<\n      abi,\n      eventName,\n      args,\n      strict,\n      fromBlock,\n      toBlock\n    >\n  >\n  /**\n   * Creates a [`Filter`](https://viem.sh/docs/glossary/types#filter) to listen for new events that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n   *\n   * - Docs: https://viem.sh/docs/actions/public/createEventFilter\n   * - JSON-RPC Methods: [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter)\n   *\n   * @param args - {@link CreateEventFilterParameters}\n   * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateEventFilterReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createEventFilter({\n   *   address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n   * })\n   */\n  createEventFilter: <\n    const abiEvent extends AbiEvent | undefined = undefined,\n    const abiEvents extends\n      | readonly AbiEvent[]\n      | readonly unknown[]\n      | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n    strict extends boolean | undefined = undefined,\n    fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n    toBlock extends BlockNumber | BlockTag | undefined = undefined,\n    _EventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n    _Args extends\n      | MaybeExtractEventArgsFromAbi<abiEvents, _EventName>\n      | undefined = undefined,\n  >(\n    args?:\n      | CreateEventFilterParameters<\n          abiEvent,\n          abiEvents,\n          strict,\n          fromBlock,\n          toBlock,\n          _EventName,\n          _Args\n        >\n      | undefined,\n  ) => Promise<\n    CreateEventFilterReturnType<\n      abiEvent,\n      abiEvents,\n      strict,\n      fromBlock,\n      toBlock,\n      _EventName,\n      _Args\n    >\n  >\n  /**\n   * Creates a Filter to listen for new pending transaction hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n   *\n   * - Docs: https://viem.sh/docs/actions/public/createPendingTransactionFilter\n   * - JSON-RPC Methods: [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter)\n   *\n   * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateBlockFilterReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createPendingTransactionFilter()\n   * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'transaction' }\n   */\n  createPendingTransactionFilter: () => Promise<CreatePendingTransactionFilterReturnType>\n  /**\n   * Estimates the gas required to successfully execute a contract write function call.\n   *\n   * - Docs: https://viem.sh/docs/contract/estimateContractGas\n   *\n   * @remarks\n   * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`estimateGas` action](https://viem.sh/docs/actions/public/estimateGas) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n   *\n   * @param args - {@link EstimateContractGasParameters}\n   * @returns The gas estimate (in wei). {@link EstimateContractGasReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const gas = await client.estimateContractGas({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   abi: parseAbi(['function mint() public']),\n   *   functionName: 'mint',\n   *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n   * })\n   */\n  estimateContractGas: <\n    chain extends Chain | undefined,\n    const abi extends Abi | readonly unknown[],\n    functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n    args extends ContractFunctionArgs<\n      abi,\n      'nonpayable' | 'payable',\n      functionName\n    >,\n  >(\n    args: EstimateContractGasParameters<abi, functionName, args, chain>,\n  ) => Promise<EstimateContractGasReturnType>\n  /**\n   * Estimates the gas necessary to complete a transaction without submitting it to the network.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/estimateGas\n   * - JSON-RPC Methods: [`eth_estimateGas`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_estimategas)\n   *\n   * @param args - {@link EstimateGasParameters}\n   * @returns The gas estimate (in wei). {@link EstimateGasReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseEther } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const gasEstimate = await client.estimateGas({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *   value: parseEther('1'),\n   * })\n   */\n  estimateGas: (\n    args: EstimateGasParameters<chain>,\n  ) => Promise<EstimateGasReturnType>\n  /**\n   * Fills a transaction request with the necessary fields to be signed over.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/fillTransaction\n   *\n   * @param client - Client to use\n   * @param parameters - {@link FillTransactionParameters}\n   * @returns The filled transaction. {@link FillTransactionReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const result = await client.fillTransaction({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *   value: parseEther('1'),\n   * })\n   */\n  fillTransaction: <\n    chainOverride extends Chain | undefined = undefined,\n    accountOverride extends Account | Address | undefined = undefined,\n  >(\n    args: FillTransactionParameters<\n      chain,\n      account,\n      chainOverride,\n      accountOverride\n    >,\n  ) => Promise<FillTransactionReturnType<chain, chainOverride>>\n  /**\n   * Returns the balance of an address in wei.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getBalance\n   * - JSON-RPC Methods: [`eth_getBalance`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance)\n   *\n   * @remarks\n   * You can convert the balance to ether units with [`formatEther`](https://viem.sh/docs/utilities/formatEther).\n   *\n   * ```ts\n   * const balance = await getBalance(client, {\n   *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   blockTag: 'safe'\n   * })\n   * const balanceAsEther = formatEther(balance)\n   * // \"6.942\"\n   * ```\n   *\n   * @param args - {@link GetBalanceParameters}\n   * @returns The balance of the address in wei. {@link GetBalanceReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const balance = await client.getBalance({\n   *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   * // 10000000000000000000000n (wei)\n   */\n  getBalance: (args: GetBalanceParameters) => Promise<GetBalanceReturnType>\n  /**\n   * Returns the base fee per blob gas in wei.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getBlobBaseFee\n   * - JSON-RPC Methods: [`eth_blobBaseFee`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blobBaseFee)\n   *\n   * @param client - Client to use\n   * @returns The blob base fee (in wei). {@link GetBlobBaseFeeReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { getBlobBaseFee } from 'viem/public'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const blobBaseFee = await client.getBlobBaseFee()\n   */\n  getBlobBaseFee: () => Promise<GetBlobBaseFeeReturnType>\n  /**\n   * Returns information about a block at a block number, hash, or tag.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getBlock\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n   * - JSON-RPC Methods:\n   *   - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) for `blockNumber` & `blockTag`.\n   *   - Calls [`eth_getBlockByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbyhash) for `blockHash`.\n   *\n   * @param args - {@link GetBlockParameters}\n   * @returns Information about the block. {@link GetBlockReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const block = await client.getBlock()\n   */\n  getBlock: <\n    includeTransactions extends boolean = false,\n    blockTag extends BlockTag = 'latest',\n  >(\n    args?: GetBlockParameters<includeTransactions, blockTag> | undefined,\n  ) => Promise<GetBlockReturnType<chain, includeTransactions, blockTag>>\n  /**\n   * Returns the number of the most recent block seen.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getBlockNumber\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n   * - JSON-RPC Methods: [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber)\n   *\n   * @param args - {@link GetBlockNumberParameters}\n   * @returns The number of the block. {@link GetBlockNumberReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const blockNumber = await client.getBlockNumber()\n   * // 69420n\n   */\n  getBlockNumber: (\n    args?: GetBlockNumberParameters | undefined,\n  ) => Promise<GetBlockNumberReturnType>\n  /**\n   * Returns the number of Transactions at a block number, hash, or tag.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getBlockTransactionCount\n   * - JSON-RPC Methods:\n   *   - Calls [`eth_getBlockTransactionCountByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbynumber) for `blockNumber` & `blockTag`.\n   *   - Calls [`eth_getBlockTransactionCountByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbyhash) for `blockHash`.\n   *\n   * @param args - {@link GetBlockTransactionCountParameters}\n   * @returns The block transaction count. {@link GetBlockTransactionCountReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const count = await client.getBlockTransactionCount()\n   */\n  getBlockTransactionCount: (\n    args?: GetBlockTransactionCountParameters | undefined,\n  ) => Promise<GetBlockTransactionCountReturnType>\n  /** @deprecated Use `getCode` instead. */\n  getBytecode: (args: GetCodeParameters) => Promise<GetCodeReturnType>\n  /**\n   * Returns the chain ID associated with the current network.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getChainId\n   * - JSON-RPC Methods: [`eth_chainId`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_chainid)\n   *\n   * @returns The current chain ID. {@link GetChainIdReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const chainId = await client.getChainId()\n   * // 1\n   */\n  getChainId: () => Promise<GetChainIdReturnType>\n  /**\n   * Retrieves the bytecode at an address.\n   *\n   * - Docs: https://viem.sh/docs/contract/getCode\n   * - JSON-RPC Methods: [`eth_getCode`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getcode)\n   *\n   * @param args - {@link GetBytecodeParameters}\n   * @returns The contract's bytecode. {@link GetBytecodeReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const code = await client.getCode({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   * })\n   */\n  getCode: (args: GetCodeParameters) => Promise<GetCodeReturnType>\n  /**\n   * Returns a list of event logs emitted by a contract.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getContractEvents\n   * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n   *\n   * @param client - Client to use\n   * @param parameters - {@link GetContractEventsParameters}\n   * @returns A list of event logs. {@link GetContractEventsReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { wagmiAbi } from './abi'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const logs = await client.getContractEvents(client, {\n   *  address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *  abi: wagmiAbi,\n   *  eventName: 'Transfer'\n   * })\n   */\n  getContractEvents: <\n    const abi extends Abi | readonly unknown[],\n    eventName extends ContractEventName<abi> | undefined = undefined,\n    strict extends boolean | undefined = undefined,\n    fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n    toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  >(\n    args: GetContractEventsParameters<\n      abi,\n      eventName,\n      strict,\n      fromBlock,\n      toBlock\n    >,\n  ) => Promise<\n    GetContractEventsReturnType<abi, eventName, strict, fromBlock, toBlock>\n  >\n  /**\n   * Returns the address that an account has delegated to via EIP-7702.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getDelegation\n   *\n   * @param args - {@link GetDelegationParameters}\n   * @returns The delegated address, or undefined if not delegated. {@link GetDelegationReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const delegation = await client.getDelegation({\n   *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   */\n  getDelegation: (\n    args: GetDelegationParameters,\n  ) => Promise<GetDelegationReturnType>\n  /**\n   * Reads the EIP-712 domain from a contract, based on the ERC-5267 specification.\n   *\n   * @param client - A {@link Client} instance.\n   * @param parameters - The parameters of the action. {@link GetEip712DomainParameters}\n   * @returns The EIP-712 domain, fields, and extensions. {@link GetEip712DomainReturnType}\n   *\n   * @example\n   * ```ts\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   *\n   * const domain = await client.getEip712Domain({\n   *   address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n   * })\n   * // {\n   * //   domain: {\n   * //     name: 'ExampleContract',\n   * //     version: '1',\n   * //     chainId: 1,\n   * //     verifyingContract: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n   * //   },\n   * //   fields: '0x0f',\n   * //   extensions: [],\n   * // }\n   * ```\n   */\n  getEip712Domain: (\n    args: GetEip712DomainParameters,\n  ) => Promise<GetEip712DomainReturnType>\n  /**\n   * Gets address for ENS name.\n   *\n   * - Docs: https://viem.sh/docs/ens/actions/getEnsAddress\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n   *\n   * @remarks\n   * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n   *\n   * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n   *\n   * @param args - {@link GetEnsAddressParameters}\n   * @returns Address for ENS name or `null` if not found. {@link GetEnsAddressReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { normalize } from 'viem/ens'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const ensAddress = await client.getEnsAddress({\n   *   name: normalize('wevm.eth'),\n   * })\n   * // '0xd2135CfB216b74109775236E36d4b433F1DF507B'\n   */\n  getEnsAddress: (\n    args: GetEnsAddressParameters,\n  ) => Promise<GetEnsAddressReturnType>\n  /**\n   * Gets the avatar of an ENS name.\n   *\n   * - Docs: https://viem.sh/docs/ens/actions/getEnsAvatar\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n   *\n   * @remarks\n   * Calls [`getEnsText`](https://viem.sh/docs/ens/actions/getEnsText) with `key` set to `'avatar'`.\n   *\n   * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n   *\n   * @param args - {@link GetEnsAvatarParameters}\n   * @returns Avatar URI or `null` if not found. {@link GetEnsAvatarReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { normalize } from 'viem/ens'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const ensAvatar = await client.getEnsAvatar({\n   *   name: normalize('wevm.eth'),\n   * })\n   * // 'https://ipfs.io/ipfs/Qma8mnp6xV3J2cRNf3mTth5C8nV11CAnceVinc3y8jSbio'\n   */\n  getEnsAvatar: (\n    args: GetEnsAvatarParameters,\n  ) => Promise<GetEnsAvatarReturnType>\n  /**\n   * Gets primary name for specified address.\n   *\n   * - Docs: https://viem.sh/docs/ens/actions/getEnsName\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n   *\n   * @remarks\n   * Calls `reverse(bytes)` on ENS Universal Resolver Contract to \"reverse resolve\" the address to the primary ENS name.\n   *\n   * @param args - {@link GetEnsNameParameters}\n   * @returns Name or `null` if not found. {@link GetEnsNameReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const ensName = await client.getEnsName({\n   *   address: '0xd2135CfB216b74109775236E36d4b433F1DF507B',\n   * })\n   * // 'wevm.eth'\n   */\n  getEnsName: (args: GetEnsNameParameters) => Promise<GetEnsNameReturnType>\n  /**\n   * Gets resolver for ENS name.\n   *\n   * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n   *\n   * @remarks\n   * Calls `findResolver(bytes)` on ENS Universal Resolver Contract to retrieve the resolver of an ENS name.\n   *\n   * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n   *\n   * @param args - {@link GetEnsResolverParameters}\n   * @returns Address for ENS resolver. {@link GetEnsResolverReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { normalize } from 'viem/ens'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const resolverAddress = await client.getEnsResolver({\n   *   name: normalize('wevm.eth'),\n   * })\n   * // '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41'\n   */\n  getEnsResolver: (\n    args: GetEnsResolverParameters,\n  ) => Promise<GetEnsResolverReturnType>\n  /**\n   * Gets a text record for specified ENS name.\n   *\n   * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n   *\n   * @remarks\n   * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n   *\n   * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n   *\n   * @param args - {@link GetEnsTextParameters}\n   * @returns Address for ENS resolver. {@link GetEnsTextReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { normalize } from 'viem/ens'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const twitterRecord = await client.getEnsText({\n   *   name: normalize('wevm.eth'),\n   *   key: 'com.twitter',\n   * })\n   * // 'wevm_dev'\n   */\n  getEnsText: (args: GetEnsTextParameters) => Promise<GetEnsTextReturnType>\n  /**\n   * Returns a collection of historical gas information.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getFeeHistory\n   * - JSON-RPC Methods: [`eth_feeHistory`](https://docs.alchemy.com/reference/eth-feehistory)\n   *\n   * @param args - {@link GetFeeHistoryParameters}\n   * @returns The gas estimate (in wei). {@link GetFeeHistoryReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const feeHistory = await client.getFeeHistory({\n   *   blockCount: 4,\n   *   rewardPercentiles: [25, 75],\n   * })\n   */\n  getFeeHistory: (\n    args: GetFeeHistoryParameters,\n  ) => Promise<GetFeeHistoryReturnType>\n  /**\n   * Returns an estimate for the fees per gas for a transaction to be included\n   * in the next block.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/estimateFeesPerGas\n   *\n   * @param client - Client to use\n   * @param parameters - {@link EstimateFeesPerGasParameters}\n   * @returns An estimate (in wei) for the fees per gas. {@link EstimateFeesPerGasReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const maxPriorityFeePerGas = await client.estimateFeesPerGas()\n   * // { maxFeePerGas: ..., maxPriorityFeePerGas: ... }\n   */\n  estimateFeesPerGas: <\n    chainOverride extends Chain | undefined = undefined,\n    type extends FeeValuesType = 'eip1559',\n  >(\n    args?: EstimateFeesPerGasParameters<chain, chainOverride, type> | undefined,\n  ) => Promise<EstimateFeesPerGasReturnType<type>>\n  /**\n   * Returns a list of logs or hashes based on a [Filter](/docs/glossary/terms#filter) since the last time it was called.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getFilterChanges\n   * - JSON-RPC Methods: [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges)\n   *\n   * @remarks\n   * A Filter can be created from the following actions:\n   *\n   * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n   * - [`createContractEventFilter`](https://viem.sh/docs/contract/createContractEventFilter)\n   * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n   * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n   *\n   * Depending on the type of filter, the return value will be different:\n   *\n   * - If the filter was created with `createContractEventFilter` or `createEventFilter`, it returns a list of logs.\n   * - If the filter was created with `createPendingTransactionFilter`, it returns a list of transaction hashes.\n   * - If the filter was created with `createBlockFilter`, it returns a list of block hashes.\n   *\n   * @param args - {@link GetFilterChangesParameters}\n   * @returns Logs or hashes. {@link GetFilterChangesReturnType}\n   *\n   * @example\n   * // Blocks\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createBlockFilter()\n   * const hashes = await client.getFilterChanges({ filter })\n   *\n   * @example\n   * // Contract Events\n   * import { createPublicClient, http, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createContractEventFilter({\n   *   address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n   *   abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n   *   eventName: 'Transfer',\n   * })\n   * const logs = await client.getFilterChanges({ filter })\n   *\n   * @example\n   * // Raw Events\n   * import { createPublicClient, http, parseAbiItem } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createEventFilter({\n   *   address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n   *   event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n   * })\n   * const logs = await client.getFilterChanges({ filter })\n   *\n   * @example\n   * // Transactions\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createPendingTransactionFilter()\n   * const hashes = await client.getFilterChanges({ filter })\n   */\n  getFilterChanges: <\n    filterType extends FilterType,\n    const abi extends Abi | readonly unknown[] | undefined,\n    eventName extends string | undefined,\n    strict extends boolean | undefined = undefined,\n    fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n    toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  >(\n    args: GetFilterChangesParameters<\n      filterType,\n      abi,\n      eventName,\n      strict,\n      fromBlock,\n      toBlock\n    >,\n  ) => Promise<\n    GetFilterChangesReturnType<\n      filterType,\n      abi,\n      eventName,\n      strict,\n      fromBlock,\n      toBlock\n    >\n  >\n  /**\n   * Returns a list of event logs since the filter was created.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getFilterLogs\n   * - JSON-RPC Methods: [`eth_getFilterLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterlogs)\n   *\n   * @remarks\n   * `getFilterLogs` is only compatible with **event filters**.\n   *\n   * @param args - {@link GetFilterLogsParameters}\n   * @returns A list of event logs. {@link GetFilterLogsReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbiItem } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createEventFilter({\n   *   address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n   *   event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n   * })\n   * const logs = await client.getFilterLogs({ filter })\n   */\n  getFilterLogs: <\n    const abi extends Abi | readonly unknown[] | undefined,\n    eventName extends string | undefined,\n    strict extends boolean | undefined = undefined,\n    fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n    toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  >(\n    args: GetFilterLogsParameters<abi, eventName, strict, fromBlock, toBlock>,\n  ) => Promise<\n    GetFilterLogsReturnType<abi, eventName, strict, fromBlock, toBlock>\n  >\n  /**\n   * Returns the current price of gas (in wei).\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getGasPrice\n   * - JSON-RPC Methods: [`eth_gasPrice`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gasprice)\n   *\n   * @returns The gas price (in wei). {@link GetGasPriceReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const gasPrice = await client.getGasPrice()\n   */\n  getGasPrice: () => Promise<GetGasPriceReturnType>\n  /**\n   * Returns a list of event logs matching the provided parameters.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getLogs\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/logs_event-logs\n   * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n   *\n   * @param args - {@link GetLogsParameters}\n   * @returns A list of event logs. {@link GetLogsReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbiItem } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const logs = await client.getLogs()\n   */\n  getLogs: <\n    const abiEvent extends AbiEvent | undefined = undefined,\n    const abiEvents extends\n      | readonly AbiEvent[]\n      | readonly unknown[]\n      | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n    strict extends boolean | undefined = undefined,\n    fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n    toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  >(\n    args?:\n      | GetLogsParameters<abiEvent, abiEvents, strict, fromBlock, toBlock>\n      | undefined,\n  ) => Promise<\n    GetLogsReturnType<abiEvent, abiEvents, strict, fromBlock, toBlock>\n  >\n  /**\n   * Returns the account and storage values of the specified account including the Merkle-proof.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getProof\n   * - JSON-RPC Methods:\n   *   - Calls [`eth_getProof`](https://eips.ethereum.org/EIPS/eip-1186)\n   *\n   * @param client - Client to use\n   * @param parameters - {@link GetProofParameters}\n   * @returns Proof data. {@link GetProofReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const block = await client.getProof({\n   *  address: '0x...',\n   *  storageKeys: ['0x...'],\n   * })\n   */\n  getProof: (args: GetProofParameters) => Promise<GetProofReturnType>\n  /**\n   * Returns an estimate for the max priority fee per gas (in wei) for a transaction\n   * to be included in the next block.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/estimateMaxPriorityFeePerGas\n   *\n   * @param client - Client to use\n   * @returns An estimate (in wei) for the max priority fee per gas. {@link EstimateMaxPriorityFeePerGasReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const maxPriorityFeePerGas = await client.estimateMaxPriorityFeePerGas()\n   * // 10000000n\n   */\n  estimateMaxPriorityFeePerGas: <\n    chainOverride extends Chain | undefined = undefined,\n  >(\n    args?:\n      | EstimateMaxPriorityFeePerGasParameters<chain, chainOverride>\n      | undefined,\n  ) => Promise<EstimateMaxPriorityFeePerGasReturnType>\n  /**\n   * Returns the value from a storage slot at a given address.\n   *\n   * - Docs: https://viem.sh/docs/contract/getStorageAt\n   * - JSON-RPC Methods: [`eth_getStorageAt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getstorageat)\n   *\n   * @param args - {@link GetStorageAtParameters}\n   * @returns The value of the storage slot. {@link GetStorageAtReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { getStorageAt } from 'viem/contract'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const code = await client.getStorageAt({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   slot: toHex(0),\n   * })\n   */\n  getStorageAt: (\n    args: GetStorageAtParameters,\n  ) => Promise<GetStorageAtReturnType>\n  /**\n   * Returns information about a [Transaction](https://viem.sh/docs/glossary/terms#transaction) given a hash or block identifier.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getTransaction\n   * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n   * - JSON-RPC Methods: [`eth_getTransactionByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionByHash)\n   *\n   * @param args - {@link GetTransactionParameters}\n   * @returns The transaction information. {@link GetTransactionReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const transaction = await client.getTransaction({\n   *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n   * })\n   */\n  getTransaction: <blockTag extends BlockTag = 'latest'>(\n    args: GetTransactionParameters<blockTag>,\n  ) => Promise<GetTransactionReturnType<chain, blockTag>>\n  /**\n   * Returns the number of blocks passed (confirmations) since the transaction was processed on a block.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getTransactionConfirmations\n   * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n   * - JSON-RPC Methods: [`eth_getTransactionConfirmations`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionConfirmations)\n   *\n   * @param args - {@link GetTransactionConfirmationsParameters}\n   * @returns The number of blocks passed since the transaction was processed. If confirmations is 0, then the Transaction has not been confirmed & processed yet. {@link GetTransactionConfirmationsReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const confirmations = await client.getTransactionConfirmations({\n   *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n   * })\n   */\n  getTransactionConfirmations: (\n    args: GetTransactionConfirmationsParameters<chain>,\n  ) => Promise<GetTransactionConfirmationsReturnType>\n  /**\n   * Returns the number of [Transactions](https://viem.sh/docs/glossary/terms#transaction) an Account has broadcast / sent.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getTransactionCount\n   * - JSON-RPC Methods: [`eth_getTransactionCount`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactioncount)\n   *\n   * @param args - {@link GetTransactionCountParameters}\n   * @returns The number of transactions an account has sent. {@link GetTransactionCountReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const transactionCount = await client.getTransactionCount({\n   *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   */\n  getTransactionCount: (\n    args: GetTransactionCountParameters,\n  ) => Promise<GetTransactionCountReturnType>\n  /**\n   * Returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt) given a [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getTransactionReceipt\n   * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n   * - JSON-RPC Methods: [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt)\n   *\n   * @param args - {@link GetTransactionReceiptParameters}\n   * @returns The transaction receipt. {@link GetTransactionReceiptReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const transactionReceipt = await client.getTransactionReceipt({\n   *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n   * })\n   */\n  getTransactionReceipt: (\n    args: GetTransactionReceiptParameters,\n  ) => Promise<GetTransactionReceiptReturnType<chain>>\n  /**\n   * Similar to [`readContract`](https://viem.sh/docs/contract/readContract), but batches up multiple functions on a contract in a single RPC call via the [`multicall3` contract](https://github.com/mds1/multicall).\n   *\n   * - Docs: https://viem.sh/docs/contract/multicall\n   *\n   * @param args - {@link MulticallParameters}\n   * @returns An array of results with accompanying status. {@link MulticallReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const abi = parseAbi([\n   *   'function balanceOf(address) view returns (uint256)',\n   *   'function totalSupply() view returns (uint256)',\n   * ])\n   * const result = await client.multicall({\n   *   contracts: [\n   *     {\n   *       address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *       abi,\n   *       functionName: 'balanceOf',\n   *       args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n   *     },\n   *     {\n   *       address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *       abi,\n   *       functionName: 'totalSupply',\n   *     },\n   *   ],\n   * })\n   * // [{ result: 424122n, status: 'success' }, { result: 1000000n, status: 'success' }]\n   */\n  multicall: <\n    const contracts extends readonly unknown[],\n    allowFailure extends boolean = true,\n  >(\n    args: MulticallParameters<contracts, allowFailure>,\n  ) => Promise<MulticallReturnType<contracts, allowFailure>>\n  /**\n   * Prepares a transaction request for signing.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/prepareTransactionRequest\n   *\n   * @param args - {@link PrepareTransactionRequestParameters}\n   * @returns The transaction request. {@link PrepareTransactionRequestReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const request = await client.prepareTransactionRequest({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   to: '0x0000000000000000000000000000000000000000',\n   *   value: 1n,\n   * })\n   *\n   * @example\n   * // Account Hoisting\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   account: privateKeyToAccount('0x\u2026'),\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const request = await client.prepareTransactionRequest({\n   *   to: '0x0000000000000000000000000000000000000000',\n   *   value: 1n,\n   * })\n   */\n  prepareTransactionRequest: <\n    const request extends PrepareTransactionRequestRequest<\n      chain,\n      chainOverride\n    >,\n    chainOverride extends Chain | undefined = undefined,\n    accountOverride extends Account | Address | undefined = undefined,\n  >(\n    args: PrepareTransactionRequestParameters<\n      chain,\n      account,\n      chainOverride,\n      accountOverride,\n      request\n    >,\n  ) => Promise<\n    PrepareTransactionRequestReturnType<\n      chain,\n      account,\n      chainOverride,\n      accountOverride,\n      request\n    >\n  >\n  /**\n   * Calls a read-only function on a contract, and returns the response.\n   *\n   * - Docs: https://viem.sh/docs/contract/readContract\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_reading-contracts\n   *\n   * @remarks\n   * A \"read-only\" function (constant function) on a Solidity contract is denoted by a `view` or `pure` keyword. They can only read the state of the contract, and cannot make any changes to it. Since read-only methods do not change the state of the contract, they do not require any gas to be executed, and can be called by any user without the need to pay for gas.\n   *\n   * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n   *\n   * @param args - {@link ReadContractParameters}\n   * @returns The response from the contract. Type is inferred. {@link ReadContractReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { readContract } from 'viem/contract'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const result = await client.readContract({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   abi: parseAbi(['function balanceOf(address) view returns (uint256)']),\n   *   functionName: 'balanceOf',\n   *   args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n   * })\n   * // 424122n\n   */\n  readContract: <\n    const abi extends Abi | readonly unknown[],\n    functionName extends ContractFunctionName<abi, 'pure' | 'view'>,\n    const args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n  >(\n    args: ReadContractParameters<abi, functionName, args>,\n  ) => Promise<ReadContractReturnType<abi, functionName, args>>\n  /**\n   * Sends a **signed** transaction to the network\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransaction\n   * - JSON-RPC Method: [`eth_sendRawTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)\n   *\n   * @param client - Client to use\n   * @param parameters - {@link SendRawTransactionParameters}\n   * @returns The transaction hash. {@link SendRawTransactionReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { sendRawTransaction } from 'viem/wallet'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   *\n   * const hash = await client.sendRawTransaction({\n   *   serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n   * })\n   */\n  sendRawTransaction: (\n    args: SendRawTransactionParameters,\n  ) => Promise<SendRawTransactionReturnType>\n  /**\n   * Sends a **signed** transaction to the network\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransactionSync\n   * - JSON-RPC Method: [`eth_sendRawTransactionSync`](https://eips.ethereum.org/EIPS/eip-7966)\n   *\n   * @param client - Client to use\n   * @param parameters - {@link SendRawTransactionSyncParameters}\n   * @returns The transaction receipt. {@link SendRawTransactionSyncReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { sendRawTransactionSync } from 'viem/wallet'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   *\n   * const receipt = await client.sendRawTransactionSync({\n   *   serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n   * })\n   */\n  sendRawTransactionSync: (\n    args: SendRawTransactionSyncParameters,\n  ) => Promise<SendRawTransactionSyncReturnType<chain>>\n  /**\n   * @deprecated Use `simulateBlocks` instead.\n   */\n  simulate: <const calls extends readonly unknown[]>(\n    args: SimulateBlocksParameters<calls>,\n  ) => Promise<SimulateBlocksReturnType<calls>>\n  /**\n   * Simulates a set of calls on block(s) with optional block and state overrides.\n   *\n   * @example\n   * ```ts\n   * import { createPublicClient, http, parseEther } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   *\n   * const result = await client.simulateBlocks({\n   *   blocks: [{\n   *     blockOverrides: {\n   *       number: 69420n,\n   *     },\n   *     calls: [{\n   *       {\n   *         account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n   *         data: '0xdeadbeef',\n   *         to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *       },\n   *       {\n   *         account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n   *         to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *         value: parseEther('1'),\n   *       },\n   *     }],\n   *     stateOverrides: [{\n   *       address: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n   *       balance: parseEther('10'),\n   *     }],\n   *   }]\n   * })\n   * ```\n   *\n   * @param client - Client to use.\n   * @param parameters - {@link SimulateParameters}\n   * @returns Simulated blocks. {@link SimulateReturnType}\n   */\n  simulateBlocks: <const calls extends readonly unknown[]>(\n    args: SimulateBlocksParameters<calls>,\n  ) => Promise<SimulateBlocksReturnType<calls>>\n  /**\n   * Simulates a set of calls.\n   *\n   * @example\n   * ```ts\n   * import { createPublicClient, http, parseEther } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   *\n   * const result = await client.simulateCalls({\n   *   account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n   *   calls: [{\n   *     {\n   *       data: '0xdeadbeef',\n   *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *     },\n   *     {\n   *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *       value: parseEther('1'),\n   *     },\n   *   ]\n   * })\n   * ```\n   *\n   * @param client - Client to use.\n   * @param parameters - {@link SimulateCallsParameters}\n   * @returns Results. {@link SimulateCallsReturnType}\n   */\n  simulateCalls: <const calls extends readonly unknown[]>(\n    args: SimulateCallsParameters<calls>,\n  ) => Promise<SimulateCallsReturnType<calls>>\n  /**\n   * Simulates/validates a contract interaction. This is useful for retrieving **return data** and **revert reasons** of contract write functions.\n   *\n   * - Docs: https://viem.sh/docs/contract/simulateContract\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts\n   *\n   * @remarks\n   * This function does not require gas to execute and _**does not**_ change the state of the blockchain. It is almost identical to [`readContract`](https://viem.sh/docs/contract/readContract), but also supports contract write functions.\n   *\n   * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n   *\n   * @param args - {@link SimulateContractParameters}\n   * @returns The simulation result and write request. {@link SimulateContractReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const result = await client.simulateContract({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   abi: parseAbi(['function mint(uint32) view returns (uint32)']),\n   *   functionName: 'mint',\n   *   args: ['69420'],\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   */\n  simulateContract: <\n    const abi extends Abi | readonly unknown[],\n    functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n    const args extends ContractFunctionArgs<\n      abi,\n      'nonpayable' | 'payable',\n      functionName\n    >,\n    chainOverride extends Chain | undefined,\n    accountOverride extends Account | Address | undefined = undefined,\n  >(\n    args: SimulateContractParameters<\n      abi,\n      functionName,\n      args,\n      chain,\n      chainOverride,\n      accountOverride\n    >,\n  ) => Promise<\n    SimulateContractReturnType<\n      abi,\n      functionName,\n      args,\n      chain,\n      account,\n      chainOverride,\n      accountOverride\n    >\n  >\n  /**\n   * Verify that a hash was signed by the provided address.\n   *\n   * - Docs {@link https://viem.sh/docs/actions/public/verifyHash}\n   *\n   * @param parameters - {@link VerifyHashParameters}\n   * @returns Whether or not the signature is valid. {@link VerifyHashReturnType}\n   */\n  verifyHash: (args: VerifyHashParameters) => Promise<VerifyHashReturnType>\n  /**\n   * Verify that a message was signed by the provided address.\n   *\n   * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n   *\n   * - Docs {@link https://viem.sh/docs/actions/public/verifyMessage}\n   *\n   * @param parameters - {@link VerifyMessageParameters}\n   * @returns Whether or not the signature is valid. {@link VerifyMessageReturnType}\n   */\n  verifyMessage: (\n    args: VerifyMessageParameters,\n  ) => Promise<VerifyMessageReturnType>\n  /**\n   * Verifies [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message was signed.\n   *\n   * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n   *\n   * - Docs {@link https://viem.sh/docs/siwe/actions/verifySiweMessage}\n   *\n   * @param parameters - {@link VerifySiweMessageParameters}\n   * @returns Whether or not the signature is valid. {@link VerifySiweMessageReturnType}\n   */\n  verifySiweMessage: (\n    args: VerifySiweMessageParameters,\n  ) => Promise<VerifySiweMessageReturnType>\n  /**\n   * Verify that typed data was signed by the provided address.\n   *\n   * - Docs {@link https://viem.sh/docs/actions/public/verifyTypedData}\n   *\n   * @param parameters - {@link VerifyTypedDataParameters}\n   * @returns Whether or not the signature is valid. {@link VerifyTypedDataReturnType}\n   */\n  verifyTypedData: (\n    args: VerifyTypedDataParameters,\n  ) => Promise<VerifyTypedDataReturnType>\n  /**\n   * Destroys a Filter that was created from one of the following Actions:\n   *\n   * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n   * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n   * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n   *\n   * - Docs: https://viem.sh/docs/actions/public/uninstallFilter\n   * - JSON-RPC Methods: [`eth_uninstallFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_uninstallFilter)\n   *\n   * @param args - {@link UninstallFilterParameters}\n   * @returns A boolean indicating if the Filter was successfully uninstalled. {@link UninstallFilterReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { createPendingTransactionFilter, uninstallFilter } from 'viem/public'\n   *\n   * const filter = await client.createPendingTransactionFilter()\n   * const uninstalled = await client.uninstallFilter({ filter })\n   * // true\n   */\n  uninstallFilter: (\n    args: UninstallFilterParameters,\n  ) => Promise<UninstallFilterReturnType>\n  /**\n   * Waits for the [Transaction](https://viem.sh/docs/glossary/terms#transaction) to be included on a [Block](https://viem.sh/docs/glossary/terms#block) (one confirmation), and then returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt). If the Transaction reverts, then the action will throw an error.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/waitForTransactionReceipt\n   * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions\n   * - JSON-RPC Methods:\n   *   - Polls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt) on each block until it has been processed.\n   *   - If a Transaction has been replaced:\n   *     - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) and extracts the transactions\n   *     - Checks if one of the Transactions is a replacement\n   *     - If so, calls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt).\n   *\n   * @remarks\n   * The `waitForTransactionReceipt` action additionally supports Replacement detection (e.g. sped up Transactions).\n   *\n   * Transactions can be replaced when a user modifies their transaction in their wallet (to speed up or cancel). Transactions are replaced when they are sent from the same nonce.\n   *\n   * There are 3 types of Transaction Replacement reasons:\n   *\n   * - `repriced`: The gas price has been modified (e.g. different `maxFeePerGas`)\n   * - `cancelled`: The Transaction has been cancelled (e.g. `value === 0n`)\n   * - `replaced`: The Transaction has been replaced (e.g. different `value` or `data`)\n   *\n   * @param args - {@link WaitForTransactionReceiptParameters}\n   * @returns The transaction receipt. {@link WaitForTransactionReceiptReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const transactionReceipt = await client.waitForTransactionReceipt({\n   *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n   * })\n   */\n  waitForTransactionReceipt: (\n    args: WaitForTransactionReceiptParameters<chain>,\n  ) => Promise<WaitForTransactionReceiptReturnType<chain>>\n  /**\n   * Watches and returns incoming block numbers.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/watchBlockNumber\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n   * - JSON-RPC Methods:\n   *   - When `poll: true`, calls [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber) on a polling interval.\n   *   - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n   *\n   * @param args - {@link WatchBlockNumberParameters}\n   * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlockNumberReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const unwatch = await client.watchBlockNumber({\n   *   onBlockNumber: (blockNumber) => console.log(blockNumber),\n   * })\n   */\n  watchBlockNumber: (\n    args: WatchBlockNumberParameters,\n  ) => WatchBlockNumberReturnType\n  /**\n   * Watches and returns information for incoming blocks.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/watchBlocks\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n   * - JSON-RPC Methods:\n   *   - When `poll: true`, calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getBlockByNumber) on a polling interval.\n   *   - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n   *\n   * @param args - {@link WatchBlocksParameters}\n   * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlocksReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const unwatch = await client.watchBlocks({\n   *   onBlock: (block) => console.log(block),\n   * })\n   */\n  watchBlocks: <\n    includeTransactions extends boolean = false,\n    blockTag extends BlockTag = 'latest',\n  >(\n    args: WatchBlocksParameters<\n      transport,\n      chain,\n      includeTransactions,\n      blockTag\n    >,\n  ) => WatchBlocksReturnType\n  /**\n   * Watches and returns emitted contract event logs.\n   *\n   * - Docs: https://viem.sh/docs/contract/watchContractEvent\n   *\n   * @remarks\n   * This Action will batch up all the event logs found within the [`pollingInterval`](https://viem.sh/docs/contract/watchContractEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/contract/watchContractEvent#onLogs).\n   *\n   * `watchContractEvent` will attempt to create an [Event Filter](https://viem.sh/docs/contract/createContractEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchContractEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n   *\n   * @param args - {@link WatchContractEventParameters}\n   * @returns A function that can be invoked to stop watching for new event logs. {@link WatchContractEventReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const unwatch = client.watchContractEvent({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   abi: parseAbi(['event Transfer(address indexed from, address indexed to, uint256 value)']),\n   *   eventName: 'Transfer',\n   *   args: { from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b' },\n   *   onLogs: (logs) => console.log(logs),\n   * })\n   */\n  watchContractEvent: <\n    const abi extends Abi | readonly unknown[],\n    eventName extends ContractEventName<abi>,\n    strict extends boolean | undefined = undefined,\n  >(\n    args: WatchContractEventParameters<abi, eventName, strict, transport>,\n  ) => WatchContractEventReturnType\n  /**\n   * Watches and returns emitted [Event Logs](https://viem.sh/docs/glossary/terms#event-log).\n   *\n   * - Docs: https://viem.sh/docs/actions/public/watchEvent\n   * - JSON-RPC Methods:\n   *   - **RPC Provider supports `eth_newFilter`:**\n   *     - Calls [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter) to create a filter (called on initialize).\n   *     - On a polling interval, it will call [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges).\n   *   - **RPC Provider does not support `eth_newFilter`:**\n   *     - Calls [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) for each block between the polling interval.\n   *\n   * @remarks\n   * This Action will batch up all the Event Logs found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/actions/public/watchEvent#onLogs).\n   *\n   * `watchEvent` will attempt to create an [Event Filter](https://viem.sh/docs/actions/public/createEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n   *\n   * @param args - {@link WatchEventParameters}\n   * @returns A function that can be invoked to stop watching for new Event Logs. {@link WatchEventReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const unwatch = client.watchEvent({\n   *   onLogs: (logs) => console.log(logs),\n   * })\n   */\n  watchEvent: <\n    const abiEvent extends AbiEvent | undefined = undefined,\n    const abiEvents extends\n      | readonly AbiEvent[]\n      | readonly unknown[]\n      | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n    strict extends boolean | undefined = undefined,\n  >(\n    args: WatchEventParameters<abiEvent, abiEvents, strict, transport>,\n  ) => WatchEventReturnType\n  /**\n   * Watches and returns pending transaction hashes.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/watchPendingTransactions\n   * - JSON-RPC Methods:\n   *   - When `poll: true`\n   *     - Calls [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter) to initialize the filter.\n   *     - Calls [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getFilterChanges) on a polling interval.\n   *   - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newPendingTransactions\"` event.\n   *\n   * @remarks\n   * This Action will batch up all the pending transactions found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchPendingTransactions#pollinginterval-optional), and invoke them via [`onTransactions`](https://viem.sh/docs/actions/public/watchPendingTransactions#ontransactions).\n   *\n   * @param args - {@link WatchPendingTransactionsParameters}\n   * @returns A function that can be invoked to stop watching for new pending transaction hashes. {@link WatchPendingTransactionsReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const unwatch = await client.watchPendingTransactions({\n   *   onTransactions: (hashes) => console.log(hashes),\n   * })\n   */\n  watchPendingTransactions: (\n    args: WatchPendingTransactionsParameters<transport>,\n  ) => WatchPendingTransactionsReturnType\n}\n\nexport function publicActions<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n>(\n  client: Client<transport, chain, account>,\n): PublicActions<transport, chain, account> {\n  return {\n    call: (args) => call(client, args),\n    createAccessList: (args) => createAccessList(client, args),\n    createBlockFilter: () => createBlockFilter(client),\n    createContractEventFilter: (args) =>\n      createContractEventFilter(client, args),\n    createEventFilter: (args) => createEventFilter(client, args),\n    createPendingTransactionFilter: () =>\n      createPendingTransactionFilter(client),\n    estimateContractGas: (args) => estimateContractGas(client, args as any),\n    estimateGas: (args) => estimateGas(client, args),\n    getBalance: (args) => getBalance(client, args),\n    getBlobBaseFee: () => getBlobBaseFee(client),\n    getBlock: (args) => getBlock(client, args),\n    getBlockNumber: (args) => getBlockNumber(client, args),\n    getBlockTransactionCount: (args) => getBlockTransactionCount(client, args),\n    getBytecode: (args) => getCode(client, args),\n    getChainId: () => getChainId(client),\n    getCode: (args) => getCode(client, args),\n    getContractEvents: (args) => getContractEvents(client, args),\n    getDelegation: (args) => getDelegation(client, args),\n    getEip712Domain: (args) => getEip712Domain(client, args),\n    getEnsAddress: (args) => getEnsAddress(client, args),\n    getEnsAvatar: (args) => getEnsAvatar(client, args),\n    getEnsName: (args) => getEnsName(client, args),\n    getEnsResolver: (args) => getEnsResolver(client, args),\n    getEnsText: (args) => getEnsText(client, args),\n    getFeeHistory: (args) => getFeeHistory(client, args),\n    estimateFeesPerGas: (args) => estimateFeesPerGas(client, args),\n    getFilterChanges: (args) => getFilterChanges(client, args),\n    getFilterLogs: (args) => getFilterLogs(client, args),\n    getGasPrice: () => getGasPrice(client),\n    getLogs: (args) => getLogs(client, args as any),\n    getProof: (args) => getProof(client, args),\n    estimateMaxPriorityFeePerGas: (args) =>\n      estimateMaxPriorityFeePerGas(client, args),\n    fillTransaction: (args) => fillTransaction(client, args),\n    getStorageAt: (args) => getStorageAt(client, args),\n    getTransaction: (args) => getTransaction(client, args),\n    getTransactionConfirmations: (args) =>\n      getTransactionConfirmations(client, args),\n    getTransactionCount: (args) => getTransactionCount(client, args),\n    getTransactionReceipt: (args) => getTransactionReceipt(client, args),\n    multicall: (args) => multicall(client, args),\n    prepareTransactionRequest: (args) =>\n      prepareTransactionRequest(client as any, args as any) as any,\n    readContract: (args) => readContract(client, args),\n    sendRawTransaction: (args) => sendRawTransaction(client, args),\n    sendRawTransactionSync: (args) => sendRawTransactionSync(client, args),\n    simulate: (args) => simulateBlocks(client, args),\n    simulateBlocks: (args) => simulateBlocks(client, args),\n    simulateCalls: (args) => simulateCalls(client, args),\n    simulateContract: (args) => simulateContract(client, args),\n    verifyHash: (args) => verifyHash(client, args),\n    verifyMessage: (args) => verifyMessage(client, args),\n    verifySiweMessage: (args) => verifySiweMessage(client, args),\n    verifyTypedData: (args) => verifyTypedData(client, args),\n    uninstallFilter: (args) => uninstallFilter(client, args),\n    waitForTransactionReceipt: (args) =>\n      waitForTransactionReceipt(client, args),\n    watchBlocks: (args) => watchBlocks(client, args),\n    watchBlockNumber: (args) => watchBlockNumber(client, args),\n    watchContractEvent: (args) => watchContractEvent(client, args),\n    watchEvent: (args) => watchEvent(client, args),\n    watchPendingTransactions: (args) => watchPendingTransactions(client, args),\n  }\n}\n", "import type { Address } from 'abitype'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Account, ParseAccount } from '../types/account.js'\nimport type { Chain } from '../types/chain.js'\nimport type { PublicRpcSchema, RpcSchema } from '../types/eip1193.js'\nimport type { Prettify } from '../types/utils.js'\nimport {\n  type Client,\n  type ClientConfig,\n  type CreateClientErrorType,\n  createClient,\n} from './createClient.js'\nimport { type PublicActions, publicActions } from './decorators/public.js'\nimport type { Transport } from './transports/createTransport.js'\n\nexport type PublicClientConfig<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  accountOrAddress extends Account | Address | undefined = undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = Prettify<\n  Pick<\n    ClientConfig<transport, chain, accountOrAddress, rpcSchema>,\n    | 'batch'\n    | 'cacheTime'\n    | 'ccipRead'\n    | 'chain'\n    | 'experimental_blockTag'\n    | 'key'\n    | 'name'\n    | 'pollingInterval'\n    | 'rpcSchema'\n    | 'transport'\n  >\n>\n\nexport type PublicClient<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  accountOrAddress extends Account | undefined = undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = Prettify<\n  Client<\n    transport,\n    chain,\n    accountOrAddress,\n    rpcSchema extends RpcSchema\n      ? [...PublicRpcSchema, ...rpcSchema]\n      : PublicRpcSchema,\n    PublicActions<transport, chain>\n  >\n>\n\nexport type CreatePublicClientErrorType = CreateClientErrorType | ErrorType\n\n/**\n * Creates a Public Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\n *\n * - Docs: https://viem.sh/docs/clients/public\n *\n * A Public Client is an interface to \"public\" [JSON-RPC API](https://ethereum.org/en/developers/docs/apis/json-rpc/) methods such as retrieving block numbers, transactions, reading from smart contracts, etc through [Public Actions](/docs/actions/public/introduction).\n *\n * @param config - {@link PublicClientConfig}\n * @returns A Public Client. {@link PublicClient}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n */\nexport function createPublicClient<\n  transport extends Transport,\n  chain extends Chain | undefined = undefined,\n  accountOrAddress extends Account | Address | undefined = undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n>(\n  parameters: PublicClientConfig<transport, chain, accountOrAddress, rpcSchema>,\n): PublicClient<transport, chain, ParseAccount<accountOrAddress>, rpcSchema> {\n  const { key = 'public', name = 'Public Client' } = parameters\n  const client = createClient({\n    ...parameters,\n    key,\n    name,\n    type: 'publicClient',\n  })\n  return client.extend(publicActions) as any\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type DropTransactionParameters = {\n  /** The hash of the transaction to drop. */\n  hash: Hash\n}\n\nexport type DropTransactionErrorType = RequestErrorType | ErrorType\n\n/**\n * Removes a transaction from the mempool.\n *\n * - Docs: https://viem.sh/docs/actions/test/dropTransaction\n *\n * @param client - Client to use\n * @param parameters - {@link DropTransactionParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { dropTransaction } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await dropTransaction(client, {\n *   hash: '0xe58dceb6b20b03965bb678e27d141e151d7d4efc2334c2d6a49b9fac523f7364'\n * })\n */\nexport async function dropTransaction<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { hash }: DropTransactionParameters,\n) {\n  await client.request({\n    method: `${client.mode}_dropTransaction`,\n    params: [hash],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type DumpStateReturnType = Hex\nexport type DumpStateErrorType = RequestErrorType | ErrorType\n\n/**\n * Serializes the current state (including contracts code, contract's storage,\n * accounts properties, etc.) into a savable data blob.\n *\n * - Docs: https://viem.sh/docs/actions/test/dumpState\n *\n * @param client - Client to use\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { dumpState } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await dumpState(client)\n */\nexport async function dumpState<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n): Promise<DumpStateReturnType> {\n  return client.request({\n    method: `${client.mode}_dumpState`,\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type GetAutomineReturnType = boolean\n\nexport type GetAutomineErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns the automatic mining status of the node.\n *\n * - Docs: https://viem.sh/docs/actions/test/getAutomine\n *\n * @param client - Client to use\n * @returns Whether or not the node is auto mining. {@link GetAutomineReturnType}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { getAutomine } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * const isAutomining = await getAutomine(client)\n */\nexport async function getAutomine<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n): Promise<GetAutomineReturnType> {\n  if (client.mode === 'ganache')\n    return await client.request({\n      method: 'eth_mining',\n    })\n  return await client.request({\n    method: `${client.mode}_getAutomine`,\n  })\n}\n", "import type { Address } from 'abitype'\n\nimport type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RpcTransaction } from '../../types/rpc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type GetTxpoolContentReturnType = {\n  /** Pending transactions in the pool */\n  pending: Record<Address, Record<string, RpcTransaction>>\n  /** Queued transactions in the pool */\n  queued: Record<Address, Record<string, RpcTransaction>>\n}\n\nexport type GetTxpoolContentErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns the details of all transactions currently pending for inclusion in the next block(s), as well as the ones that are being scheduled for future execution only.\n *\n * - Docs: https://viem.sh/docs/actions/test/getTxpoolContent\n *\n * @param client - Client to use\n * @returns Transaction pool content. {@link GetTxpoolContentReturnType}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { getTxpoolContent } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * const content = await getTxpoolContent(client)\n */\nexport async function getTxpoolContent<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n): Promise<GetTxpoolContentReturnType> {\n  return await client.request({\n    method: 'txpool_content',\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { hexToNumber } from '../../utils/encoding/fromHex.js'\n\nexport type GetTxpoolStatusReturnType = {\n  pending: number\n  queued: number\n}\n\nexport type GetTxpoolStatusErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns a summary of all the transactions currently pending for inclusion in the next block(s), as well as the ones that are being scheduled for future execution only.\n *\n * - Docs: https://viem.sh/docs/actions/test/getTxpoolStatus\n *\n * @param client - Client to use\n * @returns Transaction pool status. {@link GetTxpoolStatusReturnType}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { getTxpoolStatus } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * const status = await getTxpoolStatus(client)\n */\nexport async function getTxpoolStatus<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n): Promise<GetTxpoolStatusReturnType> {\n  const { pending, queued } = await client.request({\n    method: 'txpool_status',\n  })\n  return {\n    pending: hexToNumber(pending),\n    queued: hexToNumber(queued),\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type ImpersonateAccountParameters = {\n  /** The account to impersonate. */\n  address: Address\n}\n\nexport type ImpersonateAccountErrorType = RequestErrorType | ErrorType\n\n/**\n * Impersonate an account or contract address. This lets you send transactions from that account even if you don't have access to its private key.\n *\n * - Docs: https://viem.sh/docs/actions/test/impersonateAccount\n *\n * @param client - Client to use\n * @param parameters - {@link ImpersonateAccountParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { impersonateAccount } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * const content = await impersonateAccount(client, {\n *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function impersonateAccount<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { address }: ImpersonateAccountParameters,\n) {\n  await client.request({\n    method: `${client.mode}_impersonateAccount`,\n    params: [address],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { numberToHex } from '../../utils/encoding/toHex.js'\n\nexport type IncreaseTimeParameters = {\n  /** The amount of seconds to jump forward in time. */\n  seconds: number\n}\n\nexport type IncreaseTimeErrorType = RequestErrorType | ErrorType\n\n/**\n * Jump forward in time by the given amount of time, in seconds.\n *\n * - Docs: https://viem.sh/docs/actions/test/increaseTime\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link IncreaseTimeParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { increaseTime } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await increaseTime(client, {\n *   seconds: 420,\n * })\n */\nexport async function increaseTime<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { seconds }: IncreaseTimeParameters,\n) {\n  return await client.request({\n    method: 'evm_increaseTime',\n    params: [numberToHex(seconds)],\n  })\n}\n", "import type { Address } from 'abitype'\n\nimport type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type InspectTxpoolReturnType = {\n  pending: Record<Address, Record<string, string>>\n  queued: Record<Address, Record<string, string>>\n}\n\nexport type InspectTxpoolErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns a summary of all the transactions currently pending for inclusion in the next block(s), as well as the ones that are being scheduled for future execution only.\n *\n * - Docs: https://viem.sh/docs/actions/test/inspectTxpool\n *\n * @param client - Client to use\n * @returns Transaction pool inspection data. {@link InspectTxpoolReturnType}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { inspectTxpool } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * const data = await inspectTxpool(client)\n */\nexport async function inspectTxpool<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n): Promise<InspectTxpoolReturnType> {\n  return await client.request({\n    method: 'txpool_inspect',\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type LoadStateParameters = { state: Hex }\nexport type LoadStateReturnType = void\nexport type LoadStateErrorType = RequestErrorType | ErrorType\n\n/**\n * Adds state previously dumped with `dumpState` to the current chain.\n *\n * - Docs: https://viem.sh/docs/actions/test/loadState\n *\n * @param client - Client to use\n * @param parameters - {@link LoadStateParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { loadState } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await loadState(client, { state: '0x...' })\n */\nexport async function loadState<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { state }: LoadStateParameters,\n): Promise<LoadStateReturnType> {\n  await client.request({\n    method: `${client.mode}_loadState`,\n    params: [state],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { numberToHex } from '../../utils/encoding/toHex.js'\n\nexport type MineParameters = {\n  /** Number of blocks to mine. */\n  blocks: number\n  /** Interval between each block in seconds. */\n  interval?: number | undefined\n}\n\nexport type MineErrorType = RequestErrorType | ErrorType\n\n/**\n * Mine a specified number of blocks.\n *\n * - Docs: https://viem.sh/docs/actions/test/mine\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link MineParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { mine } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await mine(client, { blocks: 1 })\n */\nexport async function mine<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { blocks, interval }: MineParameters,\n) {\n  if (client.mode === 'ganache')\n    await client.request({\n      method: 'evm_mine',\n      params: [{ blocks: numberToHex(blocks) }],\n    })\n  else\n    await client.request({\n      method: `${client.mode}_mine`,\n      params: [numberToHex(blocks), numberToHex(interval || 0)],\n    })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type RemoveBlockTimestampIntervalErrorType = RequestErrorType | ErrorType\n\n/**\n * Removes [`setBlockTimestampInterval`](https://viem.sh/docs/actions/test/setBlockTimestampInterval) if it exists.\n *\n * - Docs: https://viem.sh/docs/actions/test/removeBlockTimestampInterval\n *\n * @param client - Client to use\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { removeBlockTimestampInterval } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await removeBlockTimestampInterval(client)\n */\nexport async function removeBlockTimestampInterval<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(client: TestClient<TestClientMode, Transport, chain, account, false>) {\n  await client.request({\n    method: `${client.mode}_removeBlockTimestampInterval`,\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type ResetParameters = {\n  /** The block number to reset from. */\n  blockNumber?: bigint | undefined\n  /** The JSON RPC URL. */\n  jsonRpcUrl?: string | undefined\n}\n\nexport type ResetErrorType = RequestErrorType | ErrorType\n\n/**\n * Resets fork back to its original state.\n *\n * - Docs: https://viem.sh/docs/actions/test/reset\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link ResetParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { reset } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await reset(client, { blockNumber: 69420n })\n */\nexport async function reset<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { blockNumber, jsonRpcUrl }: ResetParameters = {},\n) {\n  await client.request({\n    method: `${client.mode}_reset`,\n    params: [{ forking: { blockNumber: Number(blockNumber), jsonRpcUrl } }],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Quantity } from '../../types/rpc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type RevertParameters = {\n  /** The snapshot ID to revert to. */\n  id: Quantity\n}\n\nexport type RevertErrorType = RequestErrorType | ErrorType\n\n/**\n * Revert the state of the blockchain at the current block.\n *\n * - Docs: https://viem.sh/docs/actions/test/revert\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link RevertParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { revert } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await revert(client, { id: '0x\u2026' })\n */\nexport async function revert<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { id }: RevertParameters,\n) {\n  await client.request({\n    method: 'evm_revert',\n    params: [id],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\n\nexport type SendUnsignedTransactionParameters<\n  chain extends Chain | undefined = Chain | undefined,\n> = FormattedTransactionRequest<chain>\n\nexport type SendUnsignedTransactionReturnType = Hash\n\nexport type SendUnsignedTransactionErrorType = RequestErrorType | ErrorType\n\n/**\n * Executes a transaction regardless of the signature.\n *\n * - Docs: https://viem.sh/docs/actions/test/sendUnsignedTransaction#sendunsignedtransaction\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link SendUnsignedTransactionParameters}\n * @returns The transaction hash. {@link SendUnsignedTransactionReturnType}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { sendUnsignedTransaction } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * const hash = await sendUnsignedTransaction(client, {\n *   from: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *   value: 1000000000000000000n,\n * })\n */\nexport async function sendUnsignedTransaction<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  args: SendUnsignedTransactionParameters<chain>,\n): Promise<SendUnsignedTransactionReturnType> {\n  const {\n    accessList,\n    data,\n    from,\n    gas,\n    gasPrice,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    nonce,\n    to,\n    value,\n    ...rest\n  } = args\n\n  const chainFormat = client.chain?.formatters?.transactionRequest?.format\n  const format = chainFormat || formatTransactionRequest\n\n  const request = format(\n    {\n      // Pick out extra data that might exist on the chain's transaction request type.\n      ...extract(rest, { format: chainFormat }),\n      accessList,\n      data,\n      from,\n      gas,\n      gasPrice,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      nonce,\n      to,\n      value,\n    } as TransactionRequest,\n    'sendUnsignedTransaction',\n  )\n  const hash = await client.request({\n    method: 'eth_sendUnsignedTransaction',\n    params: [request],\n  })\n  return hash\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type SetAutomineErrorType = RequestErrorType | ErrorType\n\n/**\n * Enables or disables the automatic mining of new blocks with each new transaction submitted to the network.\n *\n * - Docs: https://viem.sh/docs/actions/test/setAutomine\n *\n * @param client - Client to use\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setAutomine } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setAutomine(client)\n */\nexport async function setAutomine<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  enabled: boolean,\n) {\n  if (client.mode === 'ganache') {\n    if (enabled) await client.request({ method: 'miner_start' })\n    else await client.request({ method: 'miner_stop' })\n  } else\n    await client.request({\n      method: 'evm_setAutomine',\n      params: [enabled],\n    })\n}\n", "import type { Address } from 'abitype'\n\nimport type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { numberToHex } from '../../utils/encoding/toHex.js'\n\nexport type SetBalanceParameters = {\n  /** The account address. */\n  address: Address\n  /** Amount (in wei) to set */\n  value: bigint\n}\n\nexport type SetBalanceErrorType = RequestErrorType | ErrorType\n\n/**\n * Modifies the balance of an account.\n *\n * - Docs: https://viem.sh/docs/actions/test/setBalance\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link SetBalanceParameters}\n *\n * @example\n * import { createTestClient, http, parseEther } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setBalance } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setBalance(client, {\n *   address: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',\n *   value: parseEther('1'),\n * })\n */\nexport async function setBalance<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { address, value }: SetBalanceParameters,\n) {\n  if (client.mode === 'ganache')\n    await client.request({\n      method: 'evm_setAccountBalance',\n      params: [address, numberToHex(value)],\n    })\n  else\n    await client.request({\n      method: `${client.mode}_setBalance`,\n      params: [address, numberToHex(value)],\n    })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { numberToHex } from '../../utils/encoding/toHex.js'\n\nexport type SetBlockGasLimitParameters = {\n  /** Gas limit (in wei). */\n  gasLimit: bigint\n}\n\nexport type SetBlockGasLimitErrorType = RequestErrorType | ErrorType\n\n/**\n * Sets the block's gas limit.\n *\n * - Docs: https://viem.sh/docs/actions/test/setBlockGasLimit\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link SetBlockGasLimitParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setBlockGasLimit } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setBlockGasLimit(client, { gasLimit: 420_000n })\n */\nexport async function setBlockGasLimit<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { gasLimit }: SetBlockGasLimitParameters,\n) {\n  await client.request({\n    method: 'evm_setBlockGasLimit',\n    params: [numberToHex(gasLimit)],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type SetBlockTimestampIntervalParameters = {\n  /** The interval (in seconds). */\n  interval: number\n}\n\nexport type SetBlockTimestampIntervalErrorType = RequestErrorType | ErrorType\n\n/**\n * Similar to [`increaseTime`](https://viem.sh/docs/actions/test/increaseTime), but sets a block timestamp `interval`. The timestamp of future blocks will be computed as `lastBlock_timestamp` + `interval`.\n *\n * - Docs: https://viem.sh/docs/actions/test/setBlockTimestampInterval\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link SetBlockTimestampIntervalParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setBlockTimestampInterval } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setBlockTimestampInterval(client, { interval: 5 })\n */\nexport async function setBlockTimestampInterval<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { interval }: SetBlockTimestampIntervalParameters,\n) {\n  const interval_ = (() => {\n    if (client.mode === 'hardhat') return interval * 1000\n    return interval\n  })()\n\n  await client.request({\n    method: `${client.mode}_setBlockTimestampInterval`,\n    params: [interval_],\n  })\n}\n", "import type { Address } from 'abitype'\n\nimport type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type SetCodeParameters = {\n  /** The account address. */\n  address: Address\n  /** The bytecode to set */\n  bytecode: Hex\n}\n\nexport type SetCodeErrorType = RequestErrorType | ErrorType\n\n/**\n * Modifies the bytecode stored at an account's address.\n *\n * - Docs: https://viem.sh/docs/actions/test/setCode\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link SetCodeParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setCode } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setCode(client, {\n *   address: '0xe846c6fcf817734ca4527b28ccb4aea2b6663c79',\n *   bytecode: '0x60806040526000600355600019600955600c80546001600160a01b031916737a250d5630b4cf539739df\u2026',\n * })\n */\nexport async function setCode<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { address, bytecode }: SetCodeParameters,\n) {\n  if (client.mode === 'ganache')\n    await client.request({\n      method: 'evm_setAccountCode',\n      params: [address, bytecode],\n    })\n  else\n    await client.request({\n      method: `${client.mode}_setCode`,\n      params: [address, bytecode],\n    })\n}\n", "import type { Address } from 'abitype'\n\nimport type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type SetCoinbaseParameters = {\n  /** The coinbase address. */\n  address: Address\n}\n\nexport type SetCoinbaseErrorType = RequestErrorType | ErrorType\n\n/**\n * Sets the coinbase address to be used in new blocks.\n *\n * - Docs: https://viem.sh/docs/actions/test/setCoinbase\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link SetCoinbaseParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setCoinbase } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setCoinbase(client, {\n *   address: '0xe846c6fcf817734ca4527b28ccb4aea2b6663c79',\n * })\n */\nexport async function setCoinbase<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { address }: SetCoinbaseParameters,\n) {\n  await client.request({\n    method: `${client.mode}_setCoinbase`,\n    params: [address],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type SetIntervalMiningParameters = {\n  /** The mining interval. */\n  interval: number\n}\n\nexport type SetIntervalMiningErrorType = RequestErrorType | ErrorType\n\n/**\n * Sets the automatic mining interval (in seconds) of blocks. Setting the interval to 0 will disable automatic mining.\n *\n * - Docs: https://viem.sh/docs/actions/test/setIntervalMining\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link SetIntervalMiningParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setIntervalMining } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setIntervalMining(client, { interval: 5 })\n */\nexport async function setIntervalMining<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { interval }: SetIntervalMiningParameters,\n) {\n  const interval_ = (() => {\n    if (client.mode === 'hardhat') return interval * 1000\n    return interval\n  })()\n\n  await client.request({\n    method: 'evm_setIntervalMining',\n    params: [interval_],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type SetLoggingEnabledErrorType = RequestErrorType | ErrorType\n\n/**\n * Enable or disable logging on the test node network.\n *\n * - Docs: https://viem.sh/docs/actions/test/setLoggingEnabled\n *\n * @param client - Client to use\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setLoggingEnabled } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setLoggingEnabled(client)\n */\nexport async function setLoggingEnabled<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  enabled: boolean,\n) {\n  await client.request({\n    method: `${client.mode}_setLoggingEnabled`,\n    params: [enabled],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { numberToHex } from '../../utils/encoding/toHex.js'\n\nexport type SetMinGasPriceParameters = {\n  /** The gas price. */\n  gasPrice: bigint\n}\n\nexport type SetMinGasPriceErrorType = RequestErrorType | ErrorType\n\n/**\n * Change the minimum gas price accepted by the network (in wei).\n *\n * - Docs: https://viem.sh/docs/actions/test/setMinGasPrice\n *\n * Note: `setMinGasPrice` can only be used on clients that do not have EIP-1559 enabled.\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link SetBlockGasLimitParameters}\n *\n * @example\n * import { createTestClient, http, parseGwei } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setMinGasPrice } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setMinGasPrice(client, {\n *   gasPrice: parseGwei('20'),\n * })\n */\nexport async function setMinGasPrice<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { gasPrice }: SetMinGasPriceParameters,\n) {\n  await client.request({\n    method: `${client.mode}_setMinGasPrice`,\n    params: [numberToHex(gasPrice)],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { numberToHex } from '../../utils/encoding/toHex.js'\n\nexport type SetNextBlockBaseFeePerGasParameters = {\n  /** Base fee per gas (in wei). */\n  baseFeePerGas: bigint\n}\n\nexport type SetNextBlockBaseFeePerGasErrorType = RequestErrorType | ErrorType\n\n/**\n * Sets the next block's base fee per gas.\n *\n * - Docs: https://viem.sh/docs/actions/test/setNextBlockBaseFeePerGas\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link SetNextBlockBaseFeePerGasParameters}\n *\n * @example\n * import { createTestClient, http, parseGwei } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setNextBlockBaseFeePerGas } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setNextBlockBaseFeePerGas(client, {\n *   baseFeePerGas: parseGwei('20'),\n * })\n */\nexport async function setNextBlockBaseFeePerGas<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { baseFeePerGas }: SetNextBlockBaseFeePerGasParameters,\n) {\n  await client.request({\n    method: `${client.mode}_setNextBlockBaseFeePerGas`,\n    params: [numberToHex(baseFeePerGas)],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { numberToHex } from '../../utils/encoding/toHex.js'\n\nexport type SetNextBlockTimestampParameters = {\n  /** The timestamp (in seconds). */\n  timestamp: bigint\n}\n\nexport type SetNextBlockTimestampErrorType = RequestErrorType | ErrorType\n\n/**\n * Sets the next block's timestamp.\n *\n * - Docs: https://viem.sh/docs/actions/test/setNextBlockTimestamp\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link SetNextBlockTimestampParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setNextBlockTimestamp } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setNextBlockTimestamp(client, { timestamp: 1671744314n })\n */\nexport async function setNextBlockTimestamp<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { timestamp }: SetNextBlockTimestampParameters,\n) {\n  await client.request({\n    method: 'evm_setNextBlockTimestamp',\n    params: [numberToHex(timestamp)],\n  })\n}\n", "import type { Address } from 'abitype'\n\nimport type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { numberToHex } from '../../utils/encoding/toHex.js'\n\nexport type SetNonceParameters = {\n  /** The account address. */\n  address: Address\n  /** The nonce to set. */\n  nonce: number\n}\n\nexport type SetNonceErrorType = RequestErrorType | ErrorType\n\n/**\n * Modifies (overrides) the nonce of an account.\n *\n * - Docs: https://viem.sh/docs/actions/test/setNonce\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link SetNonceParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setNonce } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setNonce(client, {\n *   address: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',\n *   nonce: 420,\n * })\n */\nexport async function setNonce<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { address, nonce }: SetNonceParameters,\n) {\n  await client.request({\n    method: `${client.mode}_setNonce`,\n    params: [address, numberToHex(nonce)],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type SetRpcUrlErrorType = RequestErrorType | ErrorType\n\n/**\n * Sets the backend RPC URL.\n *\n * - Docs: https://viem.sh/docs/actions/test/setRpcUrl\n *\n * @param client - Client to use\n * @param jsonRpcUrl \u2013 RPC URL\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setRpcUrl } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setRpcUrl(client, 'https://eth-mainnet.g.alchemy.com/v2')\n */\nexport async function setRpcUrl<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  jsonRpcUrl: string,\n) {\n  await client.request({\n    method: `${client.mode}_setRpcUrl`,\n    params: [jsonRpcUrl],\n  })\n}\n", "import type { Address } from 'abitype'\n\nimport type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash, Hex } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { numberToHex } from '../../utils/encoding/toHex.js'\n\nexport type SetStorageAtParameters = {\n  /** The account address. */\n  address: Address\n  /** The storage slot (index). Can either be a number or hash value. */\n  index: number | Hash\n  /** The value to store as a 32 byte hex string. */\n  value: Hex\n}\n\nexport type SetStorageAtErrorType = RequestErrorType | ErrorType\n\n/**\n * Writes to a slot of an account's storage.\n *\n * - Docs: https://viem.sh/docs/actions/test/setStorageAt\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link SetStorageAtParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { setStorageAt } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await setStorageAt(client, {\n *   address: '0xe846c6fcf817734ca4527b28ccb4aea2b6663c79',\n *   index: 2,\n *   value: '0x0000000000000000000000000000000000000000000000000000000000000069',\n * })\n */\nexport async function setStorageAt<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { address, index, value }: SetStorageAtParameters,\n) {\n  await client.request({\n    method: `${client.mode}_setStorageAt`,\n    params: [\n      address,\n      typeof index === 'number' ? numberToHex(index) : index,\n      value,\n    ],\n  })\n}\n", "import type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type SnapshotErrorType = RequestErrorType | ErrorType\n\n/**\n * Snapshot the state of the blockchain at the current block.\n *\n * - Docs: https://viem.sh/docs/actions/test/snapshot\n *\n * @param client - Client to use\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { snapshot } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await snapshot(client)\n */\nexport async function snapshot<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(client: TestClient<TestClientMode, Transport, chain, account, false>) {\n  return await client.request({\n    method: 'evm_snapshot',\n  })\n}\n", "import type { Address } from 'abitype'\n\nimport type {\n  TestClient,\n  TestClientMode,\n} from '../../clients/createTestClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type StopImpersonatingAccountParameters = {\n  /** The account to impersonate. */\n  address: Address\n}\n\nexport type StopImpersonatingAccountErrorType = RequestErrorType | ErrorType\n\n/**\n * Stop impersonating an account after having previously used [`impersonateAccount`](https://viem.sh/docs/actions/test/impersonateAccount).\n *\n * - Docs: https://viem.sh/docs/actions/test/stopImpersonatingAccount\n *\n * @param client - Client to use\n * @param parameters \u2013 {@link StopImpersonatingAccountParameters}\n *\n * @example\n * import { createTestClient, http } from 'viem'\n * import { foundry } from 'viem/chains'\n * import { stopImpersonatingAccount } from 'viem/test'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: 'foundry',\n *   transport: http(),\n * })\n * await stopImpersonatingAccount(client, {\n *   address: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',\n * })\n */\nexport async function stopImpersonatingAccount<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: TestClient<TestClientMode, Transport, chain, account, false>,\n  { address }: StopImpersonatingAccountParameters,\n) {\n  await client.request({\n    method: `${client.mode}_stopImpersonatingAccount`,\n    params: [address],\n  })\n}\n", "import {\n  type DropTransactionParameters,\n  dropTransaction,\n} from '../../actions/test/dropTransaction.js'\nimport {\n  type DumpStateReturnType,\n  dumpState,\n} from '../../actions/test/dumpState.js'\nimport {\n  type GetAutomineReturnType,\n  getAutomine,\n} from '../../actions/test/getAutomine.js'\nimport {\n  type GetTxpoolContentReturnType,\n  getTxpoolContent,\n} from '../../actions/test/getTxpoolContent.js'\nimport {\n  type GetTxpoolStatusReturnType,\n  getTxpoolStatus,\n} from '../../actions/test/getTxpoolStatus.js'\nimport {\n  type ImpersonateAccountParameters,\n  impersonateAccount,\n} from '../../actions/test/impersonateAccount.js'\nimport {\n  type IncreaseTimeParameters,\n  increaseTime,\n} from '../../actions/test/increaseTime.js'\nimport {\n  type InspectTxpoolReturnType,\n  inspectTxpool,\n} from '../../actions/test/inspectTxpool.js'\nimport {\n  type LoadStateParameters,\n  type LoadStateReturnType,\n  loadState,\n} from '../../actions/test/loadState.js'\nimport { type MineParameters, mine } from '../../actions/test/mine.js'\nimport { removeBlockTimestampInterval } from '../../actions/test/removeBlockTimestampInterval.js'\nimport { type ResetParameters, reset } from '../../actions/test/reset.js'\nimport { type RevertParameters, revert } from '../../actions/test/revert.js'\nimport {\n  type SendUnsignedTransactionParameters,\n  type SendUnsignedTransactionReturnType,\n  sendUnsignedTransaction,\n} from '../../actions/test/sendUnsignedTransaction.js'\nimport { setAutomine } from '../../actions/test/setAutomine.js'\nimport {\n  type SetBalanceParameters,\n  setBalance,\n} from '../../actions/test/setBalance.js'\nimport {\n  type SetBlockGasLimitParameters,\n  setBlockGasLimit,\n} from '../../actions/test/setBlockGasLimit.js'\nimport {\n  type SetBlockTimestampIntervalParameters,\n  setBlockTimestampInterval,\n} from '../../actions/test/setBlockTimestampInterval.js'\nimport { type SetCodeParameters, setCode } from '../../actions/test/setCode.js'\nimport {\n  type SetCoinbaseParameters,\n  setCoinbase,\n} from '../../actions/test/setCoinbase.js'\nimport {\n  type SetIntervalMiningParameters,\n  setIntervalMining,\n} from '../../actions/test/setIntervalMining.js'\nimport { setLoggingEnabled } from '../../actions/test/setLoggingEnabled.js'\nimport {\n  type SetMinGasPriceParameters,\n  setMinGasPrice,\n} from '../../actions/test/setMinGasPrice.js'\nimport {\n  type SetNextBlockBaseFeePerGasParameters,\n  setNextBlockBaseFeePerGas,\n} from '../../actions/test/setNextBlockBaseFeePerGas.js'\nimport {\n  type SetNextBlockTimestampParameters,\n  setNextBlockTimestamp,\n} from '../../actions/test/setNextBlockTimestamp.js'\nimport {\n  type SetNonceParameters,\n  setNonce,\n} from '../../actions/test/setNonce.js'\nimport { setRpcUrl } from '../../actions/test/setRpcUrl.js'\nimport {\n  type SetStorageAtParameters,\n  setStorageAt,\n} from '../../actions/test/setStorageAt.js'\nimport { snapshot } from '../../actions/test/snapshot.js'\nimport {\n  type StopImpersonatingAccountParameters,\n  stopImpersonatingAccount,\n} from '../../actions/test/stopImpersonatingAccount.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Quantity } from '../../types/rpc.js'\nimport type { Client } from '../createClient.js'\nimport type { TestClientMode } from '../createTestClient.js'\nimport type { Transport } from '../transports/createTransport.js'\n\nexport type TestActions = {\n  /**\n   * Removes a transaction from the mempool.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/dropTransaction\n   *\n   * @param args - {@link DropTransactionParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.dropTransaction({\n   *   hash: '0xe58dceb6b20b03965bb678e27d141e151d7d4efc2334c2d6a49b9fac523f7364'\n   * })\n   */\n  dropTransaction: (args: DropTransactionParameters) => Promise<void>\n  /**\n   * Serializes the current state (including contracts code, contract's storage,\n   * accounts properties, etc.) into a savable data blob.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/dumpState\n   *\n   * @param client - Client to use\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.dumpState()\n   */\n  dumpState: () => Promise<DumpStateReturnType>\n  /**\n   * Returns the automatic mining status of the node.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/getAutomine\n   *\n   * @returns Whether or not the node is auto mining. {@link GetAutomineReturnType}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * const isAutomining = await client.getAutomine()\n   */\n  getAutomine: () => Promise<GetAutomineReturnType>\n  /**\n   * Returns the details of all transactions currently pending for inclusion in the next block(s), as well as the ones that are being scheduled for future execution only.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/getTxpoolContent\n   *\n   * @returns Transaction pool content. {@link GetTxpoolContentReturnType}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * const content = await client.getTxpoolContent()\n   */\n  getTxpoolContent: () => Promise<GetTxpoolContentReturnType>\n  /**\n   * Returns a summary of all the transactions currently pending for inclusion in the next block(s), as well as the ones that are being scheduled for future execution only.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/getTxpoolStatus\n   *\n   * @returns Transaction pool status. {@link GetTxpoolStatusReturnType}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * const status = await client.getTxpoolStatus()\n   */\n  getTxpoolStatus: () => Promise<GetTxpoolStatusReturnType>\n  /**\n   * Impersonate an account or contract address. This lets you send transactions from that account even if you don't have access to its private key.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/impersonateAccount\n   *\n   * @param args - {@link ImpersonateAccountParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.impersonateAccount({\n   *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   */\n  impersonateAccount: (args: ImpersonateAccountParameters) => Promise<void>\n  /**\n   * Jump forward in time by the given amount of time, in seconds.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/increaseTime\n   *\n   * @param args \u2013 {@link IncreaseTimeParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.increaseTime({\n   *   seconds: 420,\n   * })\n   */\n  increaseTime: (args: IncreaseTimeParameters) => Promise<Quantity>\n  /**\n   * Returns a summary of all the transactions currently pending for inclusion in the next block(s), as well as the ones that are being scheduled for future execution only.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/inspectTxpool\n   *\n   * @returns Transaction pool inspection data. {@link InspectTxpoolReturnType}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * const data = await client.inspectTxpool()\n   */\n  inspectTxpool: () => Promise<InspectTxpoolReturnType>\n  /**\n   * Adds state previously dumped with `dumpState` to the current chain.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/loadState\n   *\n   * @param client - Client to use\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.loadState({ state: '0x...' })\n   */\n  loadState: (args: LoadStateParameters) => Promise<LoadStateReturnType>\n  /**\n   * Mine a specified number of blocks.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/mine\n   *\n   * @param client - Client to use\n   * @param args \u2013 {@link MineParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.mine({ blocks: 1 })\n   */\n  mine: (args: MineParameters) => Promise<void>\n  /**\n   * Removes [`setBlockTimestampInterval`](https://viem.sh/docs/actions/test/setBlockTimestampInterval) if it exists.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/removeBlockTimestampInterval\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   * import { removeBlockTimestampInterval } from 'viem/test'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.removeBlockTimestampInterval()\n   */\n  removeBlockTimestampInterval: () => Promise<void>\n  /**\n   * Resets fork back to its original state.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/reset\n   *\n   * @param args \u2013 {@link ResetParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.reset({ blockNumber: 69420n })\n   */\n  reset: (args?: ResetParameters | undefined) => Promise<void>\n  /**\n   * Revert the state of the blockchain at the current block.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/revert\n   *\n   * @param args \u2013 {@link RevertParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.revert({ id: '0x\u2026' })\n   */\n  revert: (args: RevertParameters) => Promise<void>\n  /**\n   * Executes a transaction regardless of the signature.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/sendUnsignedTransaction\n   *\n   * @param args \u2013 {@link SendUnsignedTransactionParameters}\n   * @returns The transaction hash. {@link SendUnsignedTransactionReturnType}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * const hash = await client.sendUnsignedTransaction({\n   *   from: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *   value: 1000000000000000000n,\n   * })\n   */\n  sendUnsignedTransaction: <chain extends Chain | undefined>(\n    args: SendUnsignedTransactionParameters<chain>,\n  ) => Promise<SendUnsignedTransactionReturnType>\n  /**\n   * Enables or disables the automatic mining of new blocks with each new transaction submitted to the network.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setAutomine\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setAutomine()\n   */\n  setAutomine: (args: boolean) => Promise<void>\n  /**\n   * Modifies the balance of an account.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setBalance\n   *\n   * @param args \u2013 {@link SetBalanceParameters}\n   *\n   * @example\n   * import { createTestClient, http, parseEther } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setBalance({\n   *   address: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',\n   *   value: parseEther('1'),\n   * })\n   */\n  setBalance: (args: SetBalanceParameters) => Promise<void>\n  /**\n   * Sets the block's gas limit.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setBlockGasLimit\n   *\n   * @param args \u2013 {@link SetBlockGasLimitParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setBlockGasLimit({ gasLimit: 420_000n })\n   */\n  setBlockGasLimit: (args: SetBlockGasLimitParameters) => Promise<void>\n  /**\n   * Similar to [`increaseTime`](https://viem.sh/docs/actions/test/increaseTime), but sets a block timestamp `interval`. The timestamp of future blocks will be computed as `lastBlock_timestamp` + `interval`.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setBlockTimestampInterval\n   *\n   * @param args \u2013 {@link SetBlockTimestampIntervalParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setBlockTimestampInterval({ interval: 5 })\n   */\n  setBlockTimestampInterval: (\n    args: SetBlockTimestampIntervalParameters,\n  ) => Promise<void>\n  /**\n   * Modifies the bytecode stored at an account's address.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setCode\n   *\n   * @param args \u2013 {@link SetCodeParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setCode({\n   *   address: '0xe846c6fcf817734ca4527b28ccb4aea2b6663c79',\n   *   bytecode: '0x60806040526000600355600019600955600c80546001600160a01b031916737a250d5630b4cf539739df\u2026',\n   * })\n   */\n  setCode: (args: SetCodeParameters) => Promise<void>\n  /**\n   * Sets the coinbase address to be used in new blocks.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setCoinbase\n   *\n   * @param args \u2013 {@link SetCoinbaseParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setCoinbase({\n   *   address: '0xe846c6fcf817734ca4527b28ccb4aea2b6663c79',\n   * })\n   */\n  setCoinbase: (args: SetCoinbaseParameters) => Promise<void>\n  /**\n   * Sets the automatic mining interval (in seconds) of blocks. Setting the interval to 0 will disable automatic mining.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setIntervalMining\n   *\n   * @param args \u2013 {@link SetIntervalMiningParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setIntervalMining({ interval: 5 })\n   */\n  setIntervalMining: (args: SetIntervalMiningParameters) => Promise<void>\n  /**\n   * Enable or disable logging on the test node network.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setLoggingEnabled\n   *\n   * @param client - Client to use\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setLoggingEnabled()\n   */\n  setLoggingEnabled: (args: boolean) => Promise<void>\n  /**\n   * Change the minimum gas price accepted by the network (in wei).\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setMinGasPrice\n   *\n   * Note: `setMinGasPrice` can only be used on clients that do not have EIP-1559 enabled.\n   *\n   * @param args \u2013 {@link SetBlockGasLimitParameters}\n   *\n   * @example\n   * import { createTestClient, http, parseGwei } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setMinGasPrice({\n   *   gasPrice: parseGwei('20'),\n   * })\n   */\n  setMinGasPrice: (args: SetMinGasPriceParameters) => Promise<void>\n  /**\n   * Sets the next block's base fee per gas.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setNextBlockBaseFeePerGas\n   *\n   * @param args \u2013 {@link SetNextBlockBaseFeePerGasParameters}\n   *\n   * @example\n   * import { createTestClient, http, parseGwei } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setNextBlockBaseFeePerGas({\n   *   baseFeePerGas: parseGwei('20'),\n   * })\n   */\n  setNextBlockBaseFeePerGas: (\n    args: SetNextBlockBaseFeePerGasParameters,\n  ) => Promise<void>\n  /**\n   * Sets the next block's timestamp.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setNextBlockTimestamp\n   *\n   * @param args \u2013 {@link SetNextBlockTimestampParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setNextBlockTimestamp({ timestamp: 1671744314n })\n   */\n  setNextBlockTimestamp: (\n    args: SetNextBlockTimestampParameters,\n  ) => Promise<void>\n  /**\n   * Modifies (overrides) the nonce of an account.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setNonce\n   *\n   * @param args \u2013 {@link SetNonceParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setNonce({\n   *   address: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',\n   *   nonce: 420,\n   * })\n   */\n  setNonce: (args: SetNonceParameters) => Promise<void>\n  /**\n   * Sets the backend RPC URL.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setRpcUrl\n   *\n   * @param jsonRpcUrl \u2013 RPC URL\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setRpcUrl('https://eth-mainnet.g.alchemy.com/v2')\n   */\n  setRpcUrl: (args: string) => Promise<void>\n  /**\n   * Writes to a slot of an account's storage.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/setStorageAt\n   *\n   * @param args \u2013 {@link SetStorageAtParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.setStorageAt({\n   *   address: '0xe846c6fcf817734ca4527b28ccb4aea2b6663c79',\n   *   index: 2,\n   *   value: '0x0000000000000000000000000000000000000000000000000000000000000069',\n   * })\n   */\n  setStorageAt: (args: SetStorageAtParameters) => Promise<void>\n  /**\n   * Snapshot the state of the blockchain at the current block.\n   *\n   * - Docs: https://viem.sh/docs/actions/test/snapshot\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   * import { snapshot } from 'viem/test'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.snapshot()\n   */\n  snapshot: () => Promise<Quantity>\n  /**\n   * Stop impersonating an account after having previously used [`impersonateAccount`](https://viem.sh/docs/actions/test/impersonateAccount).\n   *\n   * - Docs: https://viem.sh/docs/actions/test/stopImpersonatingAccount\n   *\n   * @param args \u2013 {@link StopImpersonatingAccountParameters}\n   *\n   * @example\n   * import { createTestClient, http } from 'viem'\n   * import { foundry } from 'viem/chains'\n   * import { stopImpersonatingAccount } from 'viem/test'\n   *\n   * const client = createTestClient({\n   *   mode: 'anvil',\n   *   chain: 'foundry',\n   *   transport: http(),\n   * })\n   * await client.stopImpersonatingAccount({\n   *   address: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',\n   * })\n   */\n  stopImpersonatingAccount: (\n    args: StopImpersonatingAccountParameters,\n  ) => Promise<void>\n}\n\nexport function testActions<mode extends TestClientMode>({\n  mode,\n}: {\n  mode: mode\n}): <\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n>(\n  client: Client<transport, chain, account>,\n) => TestActions {\n  return <\n    transport extends Transport = Transport,\n    chain extends Chain | undefined = Chain | undefined,\n    account extends Account | undefined = Account | undefined,\n  >(\n    client_: Client<transport, chain, account>,\n  ): TestActions => {\n    const client = client_.extend(() => ({\n      mode,\n    }))\n    return {\n      dropTransaction: (args) => dropTransaction(client, args),\n      dumpState: () => dumpState(client),\n      getAutomine: () => getAutomine(client),\n      getTxpoolContent: () => getTxpoolContent(client),\n      getTxpoolStatus: () => getTxpoolStatus(client),\n      impersonateAccount: (args) => impersonateAccount(client, args),\n      increaseTime: (args) => increaseTime(client, args),\n      inspectTxpool: () => inspectTxpool(client),\n      loadState: (args) => loadState(client, args),\n      mine: (args) => mine(client, args),\n      removeBlockTimestampInterval: () => removeBlockTimestampInterval(client),\n      reset: (args) => reset(client, args),\n      revert: (args) => revert(client, args),\n      sendUnsignedTransaction: (args) =>\n        sendUnsignedTransaction(client, args as any),\n      setAutomine: (args) => setAutomine(client, args),\n      setBalance: (args) => setBalance(client, args),\n      setBlockGasLimit: (args) => setBlockGasLimit(client, args),\n      setBlockTimestampInterval: (args) =>\n        setBlockTimestampInterval(client, args),\n      setCode: (args) => setCode(client, args),\n      setCoinbase: (args) => setCoinbase(client, args),\n      setIntervalMining: (args) => setIntervalMining(client, args),\n      setLoggingEnabled: (args) => setLoggingEnabled(client, args),\n      setMinGasPrice: (args) => setMinGasPrice(client, args),\n      setNextBlockBaseFeePerGas: (args) =>\n        setNextBlockBaseFeePerGas(client, args),\n      setNextBlockTimestamp: (args) => setNextBlockTimestamp(client, args),\n      setNonce: (args) => setNonce(client, args),\n      setRpcUrl: (args) => setRpcUrl(client, args),\n      setStorageAt: (args) => setStorageAt(client, args),\n      snapshot: () => snapshot(client),\n      stopImpersonatingAccount: (args) =>\n        stopImpersonatingAccount(client, args),\n    }\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Account } from '../accounts/types.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { ParseAccount } from '../types/account.js'\nimport type { Chain } from '../types/chain.js'\nimport type { RpcSchema, TestRpcSchema } from '../types/eip1193.js'\nimport type { Prettify } from '../types/utils.js'\nimport {\n  type Client,\n  type ClientConfig,\n  type CreateClientErrorType,\n  createClient,\n} from './createClient.js'\nimport { type TestActions, testActions } from './decorators/test.js'\nimport type { Transport } from './transports/createTransport.js'\n\nexport type TestClientMode = 'anvil' | 'hardhat' | 'ganache'\n\nexport type TestClientConfig<\n  mode extends TestClientMode = TestClientMode,\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  accountOrAddress extends Account | Address | undefined =\n    | Account\n    | Address\n    | undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = Prettify<\n  Pick<\n    ClientConfig<transport, chain, accountOrAddress, rpcSchema>,\n    | 'account'\n    | 'cacheTime'\n    | 'chain'\n    | 'key'\n    | 'name'\n    | 'pollingInterval'\n    | 'rpcSchema'\n    | 'transport'\n  > & {\n    /** Mode of the test client. */\n    mode: mode | ('anvil' | 'hardhat' | 'ganache') // TODO: Type utility that expands `TestClientMode`\n  }\n>\n\nexport type TestClient<\n  mode extends TestClientMode = TestClientMode,\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  includeActions extends boolean = true,\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = Prettify<\n  { mode: mode } & Client<\n    transport,\n    chain,\n    account,\n    rpcSchema extends RpcSchema\n      ? [...TestRpcSchema<mode>, ...rpcSchema]\n      : TestRpcSchema<mode>,\n    { mode: mode } & (includeActions extends true\n      ? TestActions\n      : Record<string, unknown>)\n  >\n>\n\nexport type CreateTestClientErrorType = CreateClientErrorType | ErrorType\n\n/**\n * @description Creates a test client with a given transport.\n */\n/**\n * Creates a Test Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\n *\n * - Docs: https://viem.sh/docs/clients/test\n *\n * A Test Client is an interface to \"test\" JSON-RPC API methods accessible through a local Ethereum test node such as [Anvil](https://book.getfoundry.sh/anvil/) or [Hardhat](https://hardhat.org/) such as mining blocks, impersonating accounts, setting fees, etc through [Test Actions](https://viem.sh/docs/actions/test/introduction).\n *\n * @param config - {@link TestClientConfig}\n * @returns A Test Client. {@link TestClient}\n *\n * @example\n * import { createTestClient, custom } from 'viem'\n * import { foundry } from 'viem/chains'\n *\n * const client = createTestClient({\n *   mode: 'anvil',\n *   chain: foundry,\n *   transport: http(),\n * })\n */\nexport function createTestClient<\n  mode extends 'anvil' | 'hardhat' | 'ganache', // TODO: Type utility that expands `TestClientMode`\n  transport extends Transport,\n  chain extends Chain | undefined = undefined,\n  accountOrAddress extends Account | Address | undefined = undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n>(\n  parameters: TestClientConfig<\n    mode,\n    transport,\n    chain,\n    accountOrAddress,\n    rpcSchema\n  >,\n): TestClient<\n  mode,\n  transport,\n  chain,\n  ParseAccount<accountOrAddress>,\n  true,\n  rpcSchema\n>\n\nexport function createTestClient(parameters: TestClientConfig): TestClient {\n  const { key = 'test', name = 'Test Client', mode } = parameters\n  const client = createClient({\n    ...parameters,\n    key,\n    name,\n    type: 'testClient',\n  })\n  return client.extend((config) => ({\n    mode,\n    ...testActions({ mode })(config),\n  }))\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type AddChainParameters = {\n  /** The chain to add to the wallet. */\n  chain: Chain\n}\n\nexport type AddChainErrorType =\n  | RequestErrorType\n  | NumberToHexErrorType\n  | ErrorType\n\n/**\n * Adds an EVM chain to the wallet.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/addChain\n * - JSON-RPC Methods: [`eth_addEthereumChain`](https://eips.ethereum.org/EIPS/eip-3085)\n *\n * @param client - Client to use\n * @param parameters - {@link AddChainParameters}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { optimism } from 'viem/chains'\n * import { addChain } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   transport: custom(window.ethereum),\n * })\n * await addChain(client, { chain: optimism })\n */\nexport async function addChain<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(client: Client<Transport, chain, account>, { chain }: AddChainParameters) {\n  const { id, name, nativeCurrency, rpcUrls, blockExplorers } = chain\n  await client.request(\n    {\n      method: 'wallet_addEthereumChain',\n      params: [\n        {\n          chainId: numberToHex(id),\n          chainName: name,\n          nativeCurrency,\n          rpcUrls: rpcUrls.default.http,\n          blockExplorerUrls: blockExplorers\n            ? Object.values(blockExplorers).map(({ url }) => url)\n            : undefined,\n        },\n      ],\n    },\n    { dedupe: true, retryCount: 0 },\n  )\n}\n", "import type { Abi } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain, GetChainParameter } from '../../types/chain.js'\nimport type { ContractConstructorArgs } from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { UnionEvaluate, UnionOmit } from '../../types/utils.js'\nimport { encodeDeployData } from '../../utils/abi/encodeDeployData.js'\nimport {\n  type SendTransactionErrorType,\n  type SendTransactionParameters,\n  type SendTransactionReturnType,\n  sendTransaction,\n} from './sendTransaction.js'\n\nexport type DeployContractParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  ///\n  allArgs = ContractConstructorArgs<abi>,\n> = UnionOmit<\n  SendTransactionParameters<chain, account, chainOverride>,\n  'accessList' | 'chain' | 'to' | 'data'\n> &\n  GetChainParameter<chain, chainOverride> &\n  UnionEvaluate<\n    readonly [] extends allArgs\n      ? { args?: allArgs | undefined }\n      : { args: allArgs }\n  > & {\n    abi: abi\n    bytecode: Hex\n  }\n\nexport type DeployContractReturnType = SendTransactionReturnType\n\nexport type DeployContractErrorType = SendTransactionErrorType | ErrorType\n\n/**\n * Deploys a contract to the network, given bytecode and constructor arguments.\n *\n * - Docs: https://viem.sh/docs/contract/deployContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_deploying-contracts\n *\n * @param client - Client to use\n * @param parameters - {@link DeployContractParameters}\n * @returns The [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash. {@link DeployContractReturnType}\n *\n * @example\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { deployContract } from 'viem/contract'\n *\n * const client = createWalletClient({\n *   account: privateKeyToAccount('0x\u2026'),\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const hash = await deployContract(client, {\n *   abi: [],\n *   account: '0x\u2026,\n *   bytecode: '0x608060405260405161083e38038061083e833981016040819052610...',\n * })\n */\nexport function deployContract<\n  const abi extends Abi | readonly unknown[],\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  chainOverride extends Chain | undefined,\n>(\n  walletClient: Client<Transport, chain, account>,\n  parameters: DeployContractParameters<abi, chain, account, chainOverride>,\n): Promise<DeployContractReturnType> {\n  const { abi, args, bytecode, ...request } =\n    parameters as DeployContractParameters\n  const calldata = encodeDeployData({ abi, args, bytecode })\n  return sendTransaction(walletClient, {\n    ...request,\n    ...(request.authorizationList ? { to: null } : {}),\n    data: calldata,\n  } as unknown as SendTransactionParameters<chain, account, chainOverride>)\n}\n", "import type { Address } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport {\n  type ChecksumAddressErrorType,\n  checksumAddress,\n} from '../../utils/address/getAddress.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type GetAddressesReturnType = Address[]\n\nexport type GetAddressesErrorType =\n  | RequestErrorType\n  | ChecksumAddressErrorType\n  | ErrorType\n\n/**\n * Returns a list of account addresses owned by the wallet or client.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/getAddresses\n * - JSON-RPC Methods: [`eth_accounts`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_accounts)\n *\n * @param client - Client to use\n * @returns List of account addresses owned by the wallet or client. {@link GetAddressesReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getAddresses } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const accounts = await getAddresses(client)\n */\nexport async function getAddresses<\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n>(client: Client<Transport, chain, account>): Promise<GetAddressesReturnType> {\n  if (client.account?.type === 'local') return [client.account.address]\n  const addresses = await client.request(\n    { method: 'eth_accounts' },\n    { dedupe: true },\n  )\n  return addresses.map((address) => checksumAddress(address))\n}\n", "import type { Address } from 'abitype'\n\nimport { parseAccount } from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type {\n  Capabilities,\n  ChainIdToCapabilities,\n  ExtractCapabilities,\n} from '../../types/capabilities.js'\nimport type { Prettify } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { numberToHex } from '../../utils/encoding/toHex.js'\n\nexport type GetCapabilitiesParameters<\n  chainId extends number | undefined = undefined,\n> = {\n  account?: Account | Address | undefined\n  chainId?: chainId | number | undefined\n}\n\nexport type GetCapabilitiesReturnType<\n  chainId extends number | undefined = undefined,\n> = Prettify<\n  chainId extends number\n    ? ExtractCapabilities<'getCapabilities', 'ReturnType'>\n    : ChainIdToCapabilities<\n        Capabilities<ExtractCapabilities<'getCapabilities', 'ReturnType'>>,\n        number\n      >\n>\n\nexport type GetCapabilitiesErrorType = RequestErrorType | ErrorType\n\n/**\n * Extract capabilities that a connected wallet supports (e.g. paymasters, session keys, etc).\n *\n * - Docs: https://viem.sh/docs/actions/wallet/getCapabilities\n * - JSON-RPC Methods: [`wallet_getCapabilities`](https://eips.ethereum.org/EIPS/eip-5792)\n *\n * @param client - Client to use\n * @returns The wallet's capabilities. {@link GetCapabilitiesReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getCapabilities } from 'viem/actions'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const capabilities = await getCapabilities(client)\n */\nexport async function getCapabilities<\n  chainId extends number | undefined = undefined,\n>(\n  client: Client<Transport>,\n  parameters: GetCapabilitiesParameters<chainId> = {},\n): Promise<GetCapabilitiesReturnType<chainId>> {\n  const { account = client.account, chainId } = parameters\n\n  const account_ = account ? parseAccount(account) : undefined\n\n  const params = chainId\n    ? ([account_?.address, [numberToHex(chainId)]] as const)\n    : ([account_?.address] as const)\n  const capabilities_raw = await client.request({\n    method: 'wallet_getCapabilities',\n    params,\n  })\n\n  const capabilities = {} as ChainIdToCapabilities<\n    ExtractCapabilities<'getCapabilities', 'ReturnType'>,\n    number\n  >\n  for (const [chainId, capabilities_] of Object.entries(capabilities_raw)) {\n    capabilities[Number(chainId)] = {}\n    for (let [key, value] of Object.entries(capabilities_)) {\n      if (key === 'addSubAccount') key = 'unstable_addSubAccount'\n      capabilities[Number(chainId)][key] = value\n    }\n  }\n  return (\n    typeof chainId === 'number' ? capabilities[chainId] : capabilities\n  ) as never\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { WalletPermission } from '../../types/eip1193.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type GetPermissionsReturnType = WalletPermission[]\n\nexport type GetPermissionsErrorType = RequestErrorType | ErrorType\n\n/**\n * Gets the wallets current permissions.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/getPermissions\n * - JSON-RPC Methods: [`wallet_getPermissions`](https://eips.ethereum.org/EIPS/eip-2255)\n *\n * @param client - Client to use\n * @returns The wallet permissions. {@link GetPermissionsReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getPermissions } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const permissions = await getPermissions(client)\n */\nexport async function getPermissions<\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n>(client: Client<Transport, chain, account>) {\n  const permissions = await client.request(\n    { method: 'wallet_getPermissions' },\n    { dedupe: true },\n  )\n  return permissions\n}\n", "import type { Address } from 'abitype'\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  AccountNotFoundError,\n  type AccountNotFoundErrorType,\n} from '../../errors/account.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { GetAccountParameter } from '../../types/account.js'\nimport type {\n  Authorization,\n  AuthorizationRequest,\n} from '../../types/authorization.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { PartialBy } from '../../types/utils.js'\nimport { isAddressEqual } from '../../utils/address/isAddressEqual.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { getChainId } from '../public/getChainId.js'\nimport { getTransactionCount } from '../public/getTransactionCount.js'\n\nexport type PrepareAuthorizationParameters<\n  account extends Account | undefined = Account | undefined,\n> = GetAccountParameter<account> &\n  PartialBy<AuthorizationRequest, 'chainId' | 'nonce'> & {\n    /**\n     * Whether the EIP-7702 Transaction will be executed by the EOA (signing this Authorization) or another Account.\n     *\n     * By default, it will be assumed that the EIP-7702 Transaction will\n     * be executed by another Account.\n     */\n    executor?: 'self' | Account | Address | undefined\n  }\n\nexport type PrepareAuthorizationReturnType = Authorization\n\nexport type PrepareAuthorizationErrorType =\n  | ParseAccountErrorType\n  | RequestErrorType\n  | AccountNotFoundErrorType\n  | ErrorType\n\n/**\n * Prepares an [EIP-7702 Authorization](https://eips.ethereum.org/EIPS/eip-7702) object for signing.\n * This Action will fill the required fields of the Authorization object if they are not provided (e.g. `nonce` and `chainId`).\n *\n * With the prepared Authorization object, you can use [`signAuthorization`](https://viem.sh/docs/eip7702/signAuthorization) to sign over the Authorization object.\n *\n * @param client - Client to use\n * @param parameters - {@link PrepareAuthorizationParameters}\n * @returns The prepared Authorization object. {@link PrepareAuthorizationReturnType}\n *\n * @example\n * import { createClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { prepareAuthorization } from 'viem/experimental'\n *\n * const client = createClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const authorization = await prepareAuthorization(client, {\n *   account: privateKeyToAccount('0x..'),\n *   contractAddress: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n *\n * @example\n * // Account Hoisting\n * import { createClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { prepareAuthorization } from 'viem/experimental'\n *\n * const client = createClient({\n *   account: privateKeyToAccount('0x\u2026'),\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const authorization = await prepareAuthorization(client, {\n *   contractAddress: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function prepareAuthorization<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: PrepareAuthorizationParameters<account>,\n): Promise<PrepareAuthorizationReturnType> {\n  const { account: account_ = client.account, chainId, nonce } = parameters\n\n  if (!account_)\n    throw new AccountNotFoundError({\n      docsPath: '/docs/eip7702/prepareAuthorization',\n    })\n  const account = parseAccount(account_)\n\n  const executor = (() => {\n    if (!parameters.executor) return undefined\n    if (parameters.executor === 'self') return parameters.executor\n    return parseAccount(parameters.executor)\n  })()\n\n  const authorization = {\n    address: parameters.contractAddress ?? parameters.address,\n    chainId,\n    nonce,\n  } as Authorization\n\n  if (typeof authorization.chainId === 'undefined')\n    authorization.chainId =\n      client.chain?.id ??\n      (await getAction(client, getChainId, 'getChainId')({}))\n\n  if (typeof authorization.nonce === 'undefined') {\n    authorization.nonce = await getAction(\n      client,\n      getTransactionCount,\n      'getTransactionCount',\n    )({\n      address: account.address,\n      blockTag: 'pending',\n    })\n    if (\n      executor === 'self' ||\n      (executor?.address && isAddressEqual(executor.address, account.address))\n    )\n      authorization.nonce += 1\n  }\n\n  return authorization\n}\n", "import type { Address } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport { getAddress } from '../../utils/address/getAddress.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type RequestAddressesReturnType = Address[]\n\nexport type RequestAddressesErrorType = RequestErrorType | ErrorType\n\n/**\n * Requests a list of accounts managed by a wallet.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/requestAddresses\n * - JSON-RPC Methods: [`eth_requestAccounts`](https://eips.ethereum.org/EIPS/eip-1102)\n *\n * Sends a request to the wallet, asking for permission to access the user's accounts. After the user accepts the request, it will return a list of accounts (addresses).\n *\n * This API can be useful for dapps that need to access the user's accounts in order to execute transactions or interact with smart contracts.\n *\n * @param client - Client to use\n * @returns List of accounts managed by a wallet {@link RequestAddressesReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { requestAddresses } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const accounts = await requestAddresses(client)\n */\nexport async function requestAddresses<\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n): Promise<RequestAddressesReturnType> {\n  const addresses = await client.request(\n    { method: 'eth_requestAccounts' },\n    { dedupe: true, retryCount: 0 },\n  )\n  return addresses.map((address) => getAddress(address))\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { WalletPermission } from '../../types/eip1193.js'\nimport type { Prettify } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type RequestPermissionsParameters = Prettify<\n  {\n    eth_accounts: Record<string, any>\n  } & {\n    [key: string]: Record<string, any>\n  }\n>\nexport type RequestPermissionsReturnType = WalletPermission[]\n\nexport type RequestPermissionsErrorType = RequestErrorType | ErrorType\n\n/**\n * Requests permissions for a wallet.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/requestPermissions\n * - JSON-RPC Methods: [`wallet_requestPermissions`](https://eips.ethereum.org/EIPS/eip-2255)\n *\n * @param client - Client to use\n * @param parameters - {@link RequestPermissionsParameters}\n * @returns The wallet permissions. {@link RequestPermissionsReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { requestPermissions } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const permissions = await requestPermissions(client, {\n *   eth_accounts: {}\n * })\n */\nexport async function requestPermissions<\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  permissions: RequestPermissionsParameters,\n) {\n  return client.request(\n    {\n      method: 'wallet_requestPermissions',\n      params: [permissions],\n    },\n    { retryCount: 0 },\n  )\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { GetCallsStatusReturnType } from './getCallsStatus.js'\nimport {\n  type SendCallsErrorType,\n  type SendCallsParameters,\n  sendCalls,\n} from './sendCalls.js'\nimport {\n  type WaitForCallsStatusParameters,\n  waitForCallsStatus,\n} from './waitForCallsStatus.js'\n\nexport type SendCallsSyncParameters<\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  calls extends readonly unknown[] = readonly unknown[],\n> = SendCallsParameters<chain, account, chainOverride, calls> &\n  Pick<\n    WaitForCallsStatusParameters,\n    'pollingInterval' | 'status' | 'throwOnFailure'\n  > & {\n    /** Timeout (ms) to wait for calls to be included in a block. @default chain.blockTime * 3 */\n    timeout?: number | undefined\n  }\n\nexport type SendCallsSyncReturnType = GetCallsStatusReturnType\n\nexport type SendCallsSyncErrorType = SendCallsErrorType\n\n/**\n * Requests the connected wallet to send a batch of calls, and waits for the calls to be included in a block.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendCallsSync\n * - JSON-RPC Methods: [`wallet_sendCalls`](https://eips.ethereum.org/EIPS/eip-5792)\n *\n * @param client - Client to use\n * @returns Calls status. {@link SendCallsSyncReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendCalls } from 'viem/actions'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const status = await sendCallsSync(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   calls: [\n *     {\n *       data: '0xdeadbeef',\n *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *     },\n *     {\n *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *       value: 69420n,\n *     },\n *   ],\n * })\n */\nexport async function sendCallsSync<\n  const calls extends readonly unknown[],\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n  chainOverride extends Chain | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: SendCallsSyncParameters<chain, account, chainOverride, calls>,\n): Promise<SendCallsSyncReturnType> {\n  const { chain = client.chain } = parameters\n  const timeout =\n    parameters.timeout ?? Math.max((chain?.blockTime ?? 0) * 3, 5_000)\n  const result = await getAction(client, sendCalls, 'sendCalls')(parameters)\n  const status = await getAction(\n    client,\n    waitForCallsStatus,\n    'waitForCallsStatus',\n  )({\n    ...parameters,\n    id: result.id,\n    timeout,\n  })\n  return status\n}\n", "import type { Address } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { SignTransactionErrorType } from '../../accounts/utils/signTransaction.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  AccountNotFoundError,\n  type AccountNotFoundErrorType,\n  AccountTypeNotSupportedError,\n  type AccountTypeNotSupportedErrorType,\n} from '../../errors/account.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n  TransactionReceiptRevertedError,\n  type TransactionReceiptRevertedErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { GetAccountParameter } from '../../types/account.js'\nimport type {\n  Chain,\n  DeriveChain,\n  GetChainParameter,\n} from '../../types/chain.js'\nimport type { GetTransactionRequestKzgParameter } from '../../types/kzg.js'\nimport type { Hash, Hex } from '../../types/misc.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n  type RecoverAuthorizationAddressErrorType,\n  recoverAuthorizationAddress,\n} from '../../utils/authorization/recoverAuthorizationAddress.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type AssertCurrentChainErrorType,\n  assertCurrentChain,\n} from '../../utils/chain/assertCurrentChain.js'\nimport { concat } from '../../utils/data/concat.js'\nimport {\n  type GetTransactionErrorReturnType,\n  getTransactionError,\n} from '../../utils/errors/getTransactionError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { LruMap } from '../../utils/lru.js'\nimport {\n  type AssertRequestErrorType,\n  type AssertRequestParameters,\n  assertRequest,\n} from '../../utils/transaction/assertRequest.js'\nimport { type GetChainIdErrorType, getChainId } from '../public/getChainId.js'\nimport {\n  type WaitForTransactionReceiptErrorType,\n  waitForTransactionReceipt,\n} from '../public/waitForTransactionReceipt.js'\nimport {\n  defaultParameters,\n  type PrepareTransactionRequestErrorType,\n  prepareTransactionRequest,\n} from './prepareTransactionRequest.js'\nimport {\n  type SendRawTransactionSyncErrorType,\n  type SendRawTransactionSyncReturnType,\n  sendRawTransactionSync,\n} from './sendRawTransactionSync.js'\n\nconst supportsWalletNamespace = new LruMap<boolean>(128)\n\nexport type SendTransactionSyncRequest<\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  ///\n  _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = UnionOmit<FormattedTransactionRequest<_derivedChain>, 'from'> &\n  GetTransactionRequestKzgParameter\n\nexport type SendTransactionSyncParameters<\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  request extends SendTransactionSyncRequest<\n    chain,\n    chainOverride\n  > = SendTransactionSyncRequest<chain, chainOverride>,\n> = request &\n  GetAccountParameter<account, Account | Address, true, true> &\n  GetChainParameter<chain, chainOverride> &\n  GetTransactionRequestKzgParameter<request> & {\n    /** Whether to assert that the client chain is on the correct chain. @default true */\n    assertChainId?: boolean | undefined\n    /** Data to append to the end of the calldata. Takes precedence over `client.dataSuffix`. */\n    dataSuffix?: Hex | undefined\n    /** Polling interval (ms) to poll for the transaction receipt. @default client.pollingInterval */\n    pollingInterval?: number | undefined\n    /** Whether to throw an error if the transaction was detected as reverted. @default true */\n    throwOnReceiptRevert?: boolean | undefined\n    /** Timeout (ms) to wait for a response. @default Math.max(chain.blockTime * 3, 5_000) */\n    timeout?: number | undefined\n  }\n\nexport type SendTransactionSyncReturnType<\n  chain extends Chain | undefined = Chain | undefined,\n> = SendRawTransactionSyncReturnType<chain>\n\nexport type SendTransactionSyncErrorType =\n  | ParseAccountErrorType\n  | GetTransactionErrorReturnType<\n      | AccountNotFoundErrorType\n      | AccountTypeNotSupportedErrorType\n      | AssertCurrentChainErrorType\n      | AssertRequestErrorType\n      | GetChainIdErrorType\n      | PrepareTransactionRequestErrorType\n      | SendRawTransactionSyncErrorType\n      | RecoverAuthorizationAddressErrorType\n      | SignTransactionErrorType\n      | TransactionReceiptRevertedErrorType\n      | RequestErrorType\n    >\n  | WaitForTransactionReceiptErrorType\n  | ErrorType\n\n/**\n * Creates, signs, and sends a new transaction to the network synchronously.\n * Returns the transaction receipt.\n *\n * @param client - Client to use\n * @param parameters - {@link SendTransactionSyncParameters}\n * @returns The transaction receipt. {@link SendTransactionSyncReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendTransactionSync } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const receipt = await sendTransactionSync(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *   value: 1000000000000000000n,\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { sendTransactionSync } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   account: privateKeyToAccount('0x\u2026'),\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const receipt = await sendTransactionSync(client, {\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *   value: 1000000000000000000n,\n * })\n */\nexport async function sendTransactionSync<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  const request extends SendTransactionSyncRequest<chain, chainOverride>,\n  chainOverride extends Chain | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: SendTransactionSyncParameters<\n    chain,\n    account,\n    chainOverride,\n    request\n  >,\n): Promise<SendTransactionSyncReturnType<chain>> {\n  const {\n    account: account_ = client.account,\n    assertChainId = true,\n    chain = client.chain,\n    accessList,\n    authorizationList,\n    blobs,\n    data,\n    dataSuffix = typeof client.dataSuffix === 'string'\n      ? client.dataSuffix\n      : client.dataSuffix?.value,\n    gas,\n    gasPrice,\n    maxFeePerBlobGas,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    nonce,\n    pollingInterval,\n    throwOnReceiptRevert,\n    type,\n    value,\n    ...rest\n  } = parameters\n  const timeout =\n    parameters.timeout ?? Math.max((chain?.blockTime ?? 0) * 3, 5_000)\n\n  if (typeof account_ === 'undefined')\n    throw new AccountNotFoundError({\n      docsPath: '/docs/actions/wallet/sendTransactionSync',\n    })\n  const account = account_ ? parseAccount(account_) : null\n\n  try {\n    assertRequest(parameters as AssertRequestParameters)\n\n    const to = await (async () => {\n      // If `to` exists on the parameters, use that.\n      if (parameters.to) return parameters.to\n\n      // If `to` is null, we are sending a deployment transaction.\n      if (parameters.to === null) return undefined\n\n      // If no `to` exists, and we are sending a EIP-7702 transaction, use the\n      // address of the first authorization in the list.\n      if (authorizationList && authorizationList.length > 0)\n        return await recoverAuthorizationAddress({\n          authorization: authorizationList[0],\n        }).catch(() => {\n          throw new BaseError(\n            '`to` is required. Could not infer from `authorizationList`.',\n          )\n        })\n\n      // Otherwise, we are sending a deployment transaction.\n      return undefined\n    })()\n\n    if (account?.type === 'json-rpc' || account === null) {\n      let chainId: number | undefined\n      if (chain !== null) {\n        chainId = await getAction(client, getChainId, 'getChainId')({})\n        if (assertChainId)\n          assertCurrentChain({\n            currentChainId: chainId,\n            chain,\n          })\n      }\n\n      const chainFormat = client.chain?.formatters?.transactionRequest?.format\n      const format = chainFormat || formatTransactionRequest\n\n      const request = format(\n        {\n          // Pick out extra data that might exist on the chain's transaction request type.\n          ...extract(rest, { format: chainFormat }),\n          accessList,\n          account,\n          authorizationList,\n          blobs,\n          chainId,\n          data: data ? concat([data, dataSuffix ?? '0x']) : data,\n          gas,\n          gasPrice,\n          maxFeePerBlobGas,\n          maxFeePerGas,\n          maxPriorityFeePerGas,\n          nonce,\n          to,\n          type,\n          value,\n        } as TransactionRequest,\n        'sendTransaction',\n      )\n\n      const isWalletNamespaceSupported = supportsWalletNamespace.get(client.uid)\n      const method = isWalletNamespaceSupported\n        ? 'wallet_sendTransaction'\n        : 'eth_sendTransaction'\n\n      const hash = await (async () => {\n        try {\n          return await client.request(\n            {\n              method,\n              params: [request],\n            },\n            { retryCount: 0 },\n          )\n        } catch (e) {\n          if (isWalletNamespaceSupported === false) throw e\n\n          const error = e as BaseError\n          // If the transport does not support the method or input, attempt to use the\n          // `wallet_sendTransaction` method.\n          if (\n            error.name === 'InvalidInputRpcError' ||\n            error.name === 'InvalidParamsRpcError' ||\n            error.name === 'MethodNotFoundRpcError' ||\n            error.name === 'MethodNotSupportedRpcError'\n          ) {\n            return (await client\n              .request(\n                {\n                  method: 'wallet_sendTransaction',\n                  params: [request],\n                },\n                { retryCount: 0 },\n              )\n              .then((hash) => {\n                supportsWalletNamespace.set(client.uid, true)\n                return hash\n              })\n              .catch((e) => {\n                const walletNamespaceError = e as BaseError\n                if (\n                  walletNamespaceError.name === 'MethodNotFoundRpcError' ||\n                  walletNamespaceError.name === 'MethodNotSupportedRpcError'\n                ) {\n                  supportsWalletNamespace.set(client.uid, false)\n                  throw error\n                }\n\n                throw walletNamespaceError\n              })) as never\n          }\n\n          throw error\n        }\n      })()\n\n      const receipt = await getAction(\n        client,\n        waitForTransactionReceipt,\n        'waitForTransactionReceipt',\n      )({\n        checkReplacement: false,\n        hash,\n        pollingInterval,\n        timeout,\n      })\n      if (throwOnReceiptRevert && receipt.status === 'reverted')\n        throw new TransactionReceiptRevertedError({ receipt })\n      return receipt\n    }\n\n    if (account?.type === 'local') {\n      // Prepare the request for signing (assign appropriate fees, etc.)\n      const request = await getAction(\n        client,\n        prepareTransactionRequest,\n        'prepareTransactionRequest',\n      )({\n        account,\n        accessList,\n        authorizationList,\n        blobs,\n        chain,\n        data: data ? concat([data, dataSuffix ?? '0x']) : data,\n        gas,\n        gasPrice,\n        maxFeePerBlobGas,\n        maxFeePerGas,\n        maxPriorityFeePerGas,\n        nonce,\n        nonceManager: account.nonceManager,\n        parameters: [...defaultParameters, 'sidecars'],\n        type,\n        value,\n        ...rest,\n        to,\n      } as any)\n\n      const serializer = chain?.serializers?.transaction\n      const serializedTransaction = (await account.signTransaction(\n        request as never,\n        {\n          serializer,\n        },\n      )) as Hash\n      return (await getAction(\n        client,\n        sendRawTransactionSync,\n        'sendRawTransactionSync',\n      )({\n        serializedTransaction,\n        throwOnReceiptRevert,\n        timeout: parameters.timeout,\n      })) as never\n    }\n\n    if (account?.type === 'smart')\n      throw new AccountTypeNotSupportedError({\n        metaMessages: [\n          'Consider using the `sendUserOperation` Action instead.',\n        ],\n        docsPath: '/docs/actions/bundler/sendUserOperation',\n        type: 'smart',\n      })\n\n    throw new AccountTypeNotSupportedError({\n      docsPath: '/docs/actions/wallet/sendTransactionSync',\n      type: (account as any)?.type,\n    })\n  } catch (err) {\n    if (err instanceof AccountTypeNotSupportedError) throw err\n    throw getTransactionError(err as BaseError, {\n      ...parameters,\n      account,\n      chain: parameters.chain || undefined,\n    })\n  }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type ShowCallsStatusParameters = { id: string }\n\nexport type ShowCallsStatusReturnType = void\n\nexport type ShowCallsStatusErrorType = RequestErrorType | ErrorType\n\n/**\n * Requests for the wallet to show information about a call batch\n * that was sent via `sendCalls`.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/showCallsStatus\n * - JSON-RPC Methods: [`wallet_showCallsStatus`](https://eips.ethereum.org/EIPS/eip-5792)\n *\n * @param client - Client to use\n * @returns Status of the calls. {@link ShowCallsStatusReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { showCallsStatus } from 'viem/actions'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * await showCallsStatus(client, { id: '0xdeadbeef' })\n */\nexport async function showCallsStatus<\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: ShowCallsStatusParameters,\n): Promise<ShowCallsStatusReturnType> {\n  const { id } = parameters\n  await client.request({\n    method: 'wallet_showCallsStatus',\n    params: [id],\n  })\n  return\n}\n", "import type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type {\n  SignAuthorizationErrorType as SignAuthorizationErrorType_account,\n  SignAuthorizationReturnType as SignAuthorizationReturnType_account,\n} from '../../accounts/utils/signAuthorization.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  AccountNotFoundError,\n  type AccountNotFoundErrorType,\n  AccountTypeNotSupportedError,\n  type AccountTypeNotSupportedErrorType,\n} from '../../errors/account.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport {\n  type PrepareAuthorizationErrorType,\n  type PrepareAuthorizationParameters,\n  prepareAuthorization,\n} from './prepareAuthorization.js'\n\nexport type SignAuthorizationParameters<\n  account extends Account | undefined = Account | undefined,\n> = PrepareAuthorizationParameters<account>\n\nexport type SignAuthorizationReturnType = SignAuthorizationReturnType_account\n\nexport type SignAuthorizationErrorType =\n  | ParseAccountErrorType\n  | AccountNotFoundErrorType\n  | AccountTypeNotSupportedErrorType\n  | PrepareAuthorizationErrorType\n  | SignAuthorizationErrorType_account\n  | ErrorType\n\n/**\n * Signs an [EIP-7702 Authorization](https://eips.ethereum.org/EIPS/eip-7702) object.\n *\n * With the calculated signature, you can:\n * - use [`verifyAuthorization`](https://viem.sh/docs/eip7702/verifyAuthorization) to verify the signed Authorization object,\n * - use [`recoverAuthorizationAddress`](https://viem.sh/docs/eip7702/recoverAuthorizationAddress) to recover the signing address from the signed Authorization object.\n *\n * @param client - Client to use\n * @param parameters - {@link SignAuthorizationParameters}\n * @returns The signed Authorization object. {@link SignAuthorizationReturnType}\n *\n * @example\n * import { createClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { signAuthorization } from 'viem/experimental'\n *\n * const client = createClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const signature = await signAuthorization(client, {\n *   account: privateKeyToAccount('0x..'),\n *   contractAddress: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n *\n * @example\n * // Account Hoisting\n * import { createClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { signAuthorization } from 'viem/experimental'\n *\n * const client = createClient({\n *   account: privateKeyToAccount('0x\u2026'),\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const signature = await signAuthorization(client, {\n *   contractAddress: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function signAuthorization<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: SignAuthorizationParameters<account>,\n): Promise<SignAuthorizationReturnType> {\n  const { account: account_ = client.account } = parameters\n\n  if (!account_)\n    throw new AccountNotFoundError({\n      docsPath: '/docs/eip7702/signAuthorization',\n    })\n  const account = parseAccount(account_)\n\n  if (!account.signAuthorization)\n    throw new AccountTypeNotSupportedError({\n      docsPath: '/docs/eip7702/signAuthorization',\n      metaMessages: [\n        'The `signAuthorization` Action does not support JSON-RPC Accounts.',\n      ],\n      type: account.type,\n    })\n\n  const authorization = await prepareAuthorization(client, parameters)\n  return account.signAuthorization(authorization)\n}\n", "import type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { SignMessageErrorType as SignMessageErrorType_account } from '../../accounts/utils/signMessage.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { AccountNotFoundError } from '../../errors/account.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { GetAccountParameter } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex, SignableMessage } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  stringToHex,\n  type ToHexErrorType,\n  toHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type SignMessageParameters<\n  account extends Account | undefined = Account | undefined,\n> = GetAccountParameter<account> & {\n  message: SignableMessage\n}\n\nexport type SignMessageReturnType = Hex\n\nexport type SignMessageErrorType =\n  | ParseAccountErrorType\n  | RequestErrorType\n  | SignMessageErrorType_account\n  | ToHexErrorType\n  | ErrorType\n\n/**\n * Calculates an Ethereum-specific signature in [EIP-191 format](https://eips.ethereum.org/EIPS/eip-191): `keccak256(\"\\x19Ethereum Signed Message:\\n\" + len(message) + message))`.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/signMessage\n * - JSON-RPC Methods:\n *   - JSON-RPC Accounts: [`personal_sign`](https://docs.metamask.io/guide/signing-data#personal-sign)\n *   - Local Accounts: Signs locally. No JSON-RPC request.\n *\n * With the calculated signature, you can:\n * - use [`verifyMessage`](https://viem.sh/docs/utilities/verifyMessage) to verify the signature,\n * - use [`recoverMessageAddress`](https://viem.sh/docs/utilities/recoverMessageAddress) to recover the signing address from a signature.\n *\n * @param client - Client to use\n * @param parameters - {@link SignMessageParameters}\n * @returns The signed message. {@link SignMessageReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { signMessage } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const signature = await signMessage(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   message: 'hello world',\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, custom } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { signMessage } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   account: privateKeyToAccount('0x\u2026'),\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const signature = await signMessage(client, {\n *   message: 'hello world',\n * })\n */\nexport async function signMessage<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: Client<Transport, chain, account>,\n  {\n    account: account_ = client.account,\n    message,\n  }: SignMessageParameters<account>,\n): Promise<SignMessageReturnType> {\n  if (!account_)\n    throw new AccountNotFoundError({\n      docsPath: '/docs/actions/wallet/signMessage',\n    })\n  const account = parseAccount(account_)\n\n  if (account.signMessage) return account.signMessage({ message })\n\n  const message_ = (() => {\n    if (typeof message === 'string') return stringToHex(message)\n    if (message.raw instanceof Uint8Array) return toHex(message.raw)\n    return message.raw\n  })()\n\n  return client.request(\n    {\n      method: 'personal_sign',\n      params: [message_, account.address],\n    },\n    { retryCount: 0 },\n  )\n}\n", "import type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { SignTransactionErrorType as SignTransactionErrorType_account } from '../../accounts/utils/signTransaction.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { AccountNotFoundError } from '../../errors/account.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { GetAccountParameter } from '../../types/account.js'\nimport type {\n  Chain,\n  DeriveChain,\n  GetChainParameter,\n} from '../../types/chain.js'\nimport type { GetTransactionRequestKzgParameter } from '../../types/kzg.js'\nimport type { RpcTransactionRequest } from '../../types/rpc.js'\nimport type {\n  TransactionRequest,\n  TransactionSerializable,\n  TransactionSerialized,\n} from '../../types/transaction.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type AssertCurrentChainErrorType,\n  assertCurrentChain,\n} from '../../utils/chain/assertCurrentChain.js'\nimport type { NumberToHexErrorType } from '../../utils/encoding/toHex.js'\nimport { numberToHex } from '../../utils/encoding/toHex.js'\nimport {\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type AssertRequestErrorType,\n  assertRequest,\n} from '../../utils/transaction/assertRequest.js'\nimport type { GetTransactionType } from '../../utils/transaction/getTransactionType.js'\nimport { type GetChainIdErrorType, getChainId } from '../public/getChainId.js'\n\nexport type SignTransactionRequest<\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  ///\n  _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = UnionOmit<FormattedTransactionRequest<_derivedChain>, 'from'>\n\nexport type SignTransactionParameters<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  request extends SignTransactionRequest<\n    chain,\n    chainOverride\n  > = SignTransactionRequest<chain, chainOverride>,\n> = request &\n  GetAccountParameter<account> &\n  GetChainParameter<chain, chainOverride> &\n  GetTransactionRequestKzgParameter<request>\n\nexport type SignTransactionReturnType<\n  request extends SignTransactionRequest = SignTransactionRequest,\n> = TransactionSerialized<GetTransactionType<request>>\n\nexport type SignTransactionErrorType =\n  | ParseAccountErrorType\n  | AssertRequestErrorType\n  | GetChainIdErrorType\n  | AssertCurrentChainErrorType\n  | SignTransactionErrorType_account\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Signs a transaction.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/signTransaction\n * - JSON-RPC Methods:\n *   - JSON-RPC Accounts: [`eth_signTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)\n *   - Local Accounts: Signs locally. No JSON-RPC request.\n *\n * @param args - {@link SignTransactionParameters}\n * @returns The signed serialized transaction. {@link SignTransactionReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { signTransaction } from 'viem/actions'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const signature = await signTransaction(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   to: '0x0000000000000000000000000000000000000000',\n *   value: 1n,\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { signTransaction } from 'viem/actions'\n *\n * const client = createWalletClient({\n *   account: privateKeyToAccount('0x\u2026'),\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const signature = await signTransaction(client, {\n *   to: '0x0000000000000000000000000000000000000000',\n *   value: 1n,\n * })\n */\nexport async function signTransaction<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  chainOverride extends Chain | undefined = undefined,\n  const request extends SignTransactionRequest<\n    chain,\n    chainOverride\n  > = SignTransactionRequest<chain, chainOverride>,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: SignTransactionParameters<chain, account, chainOverride, request>,\n): Promise<SignTransactionReturnType<request>> {\n  const {\n    account: account_ = client.account,\n    chain = client.chain,\n    ...transaction\n  } = parameters\n\n  if (!account_)\n    throw new AccountNotFoundError({\n      docsPath: '/docs/actions/wallet/signTransaction',\n    })\n  const account = parseAccount(account_)\n\n  assertRequest({\n    account,\n    ...parameters,\n  })\n\n  const chainId = await getAction(client, getChainId, 'getChainId')({})\n  if (chain !== null)\n    assertCurrentChain({\n      currentChainId: chainId,\n      chain,\n    })\n\n  const formatters = chain?.formatters || client.chain?.formatters\n  const format =\n    formatters?.transactionRequest?.format || formatTransactionRequest\n\n  if (account.signTransaction)\n    return account.signTransaction(\n      {\n        ...transaction,\n        chainId,\n      } as TransactionSerializable,\n      { serializer: client.chain?.serializers?.transaction },\n    ) as Promise<SignTransactionReturnType<request>>\n\n  return await client.request(\n    {\n      method: 'eth_signTransaction',\n      params: [\n        {\n          ...format(\n            {\n              ...transaction,\n              account,\n            } as unknown as TransactionRequest,\n            'signTransaction',\n          ),\n          chainId: numberToHex(chainId),\n          from: account.address,\n        } as unknown as RpcTransactionRequest,\n      ],\n    },\n    { retryCount: 0 },\n  )\n}\n", "import type { TypedData } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { SignTypedDataErrorType as SignTypedDataErrorType_account } from '../../accounts/utils/signTypedData.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  AccountNotFoundError,\n  type AccountNotFoundErrorType,\n} from '../../errors/account.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { GetAccountParameter } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { TypedDataDefinition } from '../../types/typedData.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport type { IsHexErrorType } from '../../utils/data/isHex.js'\nimport type { StringifyErrorType } from '../../utils/stringify.js'\nimport {\n  type GetTypesForEIP712DomainErrorType,\n  getTypesForEIP712Domain,\n  type SerializeTypedDataErrorType,\n  serializeTypedData,\n  type ValidateTypedDataErrorType,\n  validateTypedData,\n} from '../../utils/typedData.js'\n\nexport type SignTypedDataParameters<\n  typedData extends TypedData | Record<string, unknown> = TypedData,\n  primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n  account extends Account | undefined = undefined,\n  ///\n  primaryTypes = typedData extends TypedData ? keyof typedData : string,\n> = TypedDataDefinition<typedData, primaryType, primaryTypes> &\n  GetAccountParameter<account>\n\nexport type SignTypedDataReturnType = Hex\n\nexport type SignTypedDataErrorType =\n  | AccountNotFoundErrorType\n  | ParseAccountErrorType\n  | GetTypesForEIP712DomainErrorType\n  | ValidateTypedDataErrorType\n  | StringifyErrorType\n  | SignTypedDataErrorType_account\n  | IsHexErrorType\n  | RequestErrorType\n  | SerializeTypedDataErrorType\n  | ErrorType\n\n/**\n * Signs typed data and calculates an Ethereum-specific signature in [https://eips.ethereum.org/EIPS/eip-712](https://eips.ethereum.org/EIPS/eip-712): `sign(keccak256(\"\\x19\\x01\" \u2016 domainSeparator \u2016 hashStruct(message)))`\n *\n * - Docs: https://viem.sh/docs/actions/wallet/signTypedData\n * - JSON-RPC Methods:\n *   - JSON-RPC Accounts: [`eth_signTypedData_v4`](https://docs.metamask.io/guide/signing-data#signtypeddata-v4)\n *   - Local Accounts: Signs locally. No JSON-RPC request.\n *\n * @param client - Client to use\n * @param parameters - {@link SignTypedDataParameters}\n * @returns The signed data. {@link SignTypedDataReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { signTypedData } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const signature = await signTypedData(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   domain: {\n *     name: 'Ether Mail',\n *     version: '1',\n *     chainId: 1,\n *     verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n *   },\n *   types: {\n *     Person: [\n *       { name: 'name', type: 'string' },\n *       { name: 'wallet', type: 'address' },\n *     ],\n *     Mail: [\n *       { name: 'from', type: 'Person' },\n *       { name: 'to', type: 'Person' },\n *       { name: 'contents', type: 'string' },\n *     ],\n *   },\n *   primaryType: 'Mail',\n *   message: {\n *     from: {\n *       name: 'Cow',\n *       wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n *     },\n *     to: {\n *       name: 'Bob',\n *       wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n *     },\n *     contents: 'Hello, Bob!',\n *   },\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { signTypedData } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   account: privateKeyToAccount('0x\u2026'),\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const signature = await signTypedData(client, {\n *   domain: {\n *     name: 'Ether Mail',\n *     version: '1',\n *     chainId: 1,\n *     verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n *   },\n *   types: {\n *     Person: [\n *       { name: 'name', type: 'string' },\n *       { name: 'wallet', type: 'address' },\n *     ],\n *     Mail: [\n *       { name: 'from', type: 'Person' },\n *       { name: 'to', type: 'Person' },\n *       { name: 'contents', type: 'string' },\n *     ],\n *   },\n *   primaryType: 'Mail',\n *   message: {\n *     from: {\n *       name: 'Cow',\n *       wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n *     },\n *     to: {\n *       name: 'Bob',\n *       wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n *     },\n *     contents: 'Hello, Bob!',\n *   },\n * })\n */\nexport async function signTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: SignTypedDataParameters<typedData, primaryType, account>,\n): Promise<SignTypedDataReturnType> {\n  const {\n    account: account_ = client.account,\n    domain,\n    message,\n    primaryType,\n  } = parameters as unknown as SignTypedDataParameters\n\n  if (!account_)\n    throw new AccountNotFoundError({\n      docsPath: '/docs/actions/wallet/signTypedData',\n    })\n  const account = parseAccount(account_)\n\n  const types = {\n    EIP712Domain: getTypesForEIP712Domain({ domain }),\n    ...parameters.types,\n  }\n\n  // Need to do a runtime validation check on addresses, byte ranges, integer ranges, etc\n  // as we can't statically check this with TypeScript.\n  validateTypedData({ domain, message, primaryType, types })\n\n  if (account.signTypedData)\n    return account.signTypedData({ domain, message, primaryType, types })\n\n  const typedData = serializeTypedData({ domain, message, primaryType, types })\n  return client.request(\n    {\n      method: 'eth_signTypedData_v4',\n      params: [account.address, typedData],\n    },\n    { retryCount: 0 },\n  )\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type SwitchChainParameters = {\n  /** ID of Chain to switch to */\n  id: Chain['id']\n}\n\nexport type SwitchChainErrorType =\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Switch the target chain in a wallet.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/switchChain\n * - JSON-RPC Methods: [`wallet_switchEthereumChain`](https://eips.ethereum.org/EIPS/eip-3326)\n *\n * @param client - Client to use\n * @param parameters - {@link SwitchChainParameters}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet, optimism } from 'viem/chains'\n * import { switchChain } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * await switchChain(client, { id: optimism.id })\n */\nexport async function switchChain<\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n>(client: Client<Transport, chain, account>, { id }: SwitchChainParameters) {\n  await client.request(\n    {\n      method: 'wallet_switchEthereumChain',\n      params: [\n        {\n          chainId: numberToHex(id),\n        },\n      ],\n    },\n    { retryCount: 0 },\n  )\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { WatchAssetParams } from '../../types/eip1193.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type WatchAssetParameters = WatchAssetParams\nexport type WatchAssetReturnType = boolean\nexport type WatchAssetErrorType = RequestErrorType | ErrorType\n\n/**\n * Adds an EVM chain to the wallet.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/watchAsset\n * - JSON-RPC Methods: [`eth_switchEthereumChain`](https://eips.ethereum.org/EIPS/eip-747)\n *\n * @param client - Client to use\n * @param parameters - {@link WatchAssetParameters}\n * @returns Boolean indicating if the token was successfully added. {@link WatchAssetReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchAsset } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const success = await watchAsset(client, {\n *   type: 'ERC20',\n *   options: {\n *     address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n *     decimals: 18,\n *     symbol: 'WETH',\n *   },\n * })\n */\nexport async function watchAsset<\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  params: WatchAssetParameters,\n): Promise<WatchAssetReturnType> {\n  const added = await client.request(\n    {\n      method: 'wallet_watchAsset',\n      params,\n    },\n    { retryCount: 0 },\n  )\n  return added\n}\n", "import type { Abi } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n} from '../../types/contract.js'\nimport {\n  type SendTransactionSyncParameters,\n  type SendTransactionSyncReturnType,\n  sendTransactionSync,\n} from './sendTransactionSync.js'\nimport { type WriteContractParameters, writeContract } from './writeContract.js'\n\nexport type { WriteContractErrorType as WriteContractSyncErrorType } from './writeContract.js'\n\nexport type WriteContractSyncParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends ContractFunctionName<\n    abi,\n    'nonpayable' | 'payable'\n  > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n> = WriteContractParameters<\n  abi,\n  functionName,\n  args,\n  chain,\n  account,\n  chainOverride\n> &\n  Pick<\n    SendTransactionSyncParameters<chain>,\n    'pollingInterval' | 'throwOnReceiptRevert' | 'timeout'\n  >\n\nexport type WriteContractSyncReturnType<\n  chain extends Chain | undefined = Chain | undefined,\n> = SendTransactionSyncReturnType<chain>\n\n/**\n * Executes a write function on a contract synchronously.\n * Returns the transaction receipt.\n *\n * - Docs: https://viem.sh/docs/contract/writeContractSync\n *\n * A \"write\" function on a Solidity contract modifies the state of the blockchain. These types of functions require gas to be executed, and hence a [Transaction](https://viem.sh/docs/glossary/terms) is needed to be broadcast in order to change the state.\n *\n * Internally, uses a [Wallet Client](https://viem.sh/docs/clients/wallet) to call the [`sendTransaction` action](https://viem.sh/docs/actions/wallet/sendTransaction) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * __Warning: The `write` internally sends a transaction \u2013 it does not validate if the contract write will succeed (the contract may throw an error). It is highly recommended to [simulate the contract write with `contract.simulate`](https://viem.sh/docs/contract/writeContract#usage) before you execute it.__\n *\n * @param client - Client to use\n * @param parameters - {@link WriteContractParameters}\n * @returns A [Transaction Hash](https://viem.sh/docs/glossary/terms#hash). {@link WriteContractReturnType}\n *\n * @example\n * import { createWalletClient, custom, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { writeContract } from 'viem/contract'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const receipt = await writeContractSync(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),\n *   functionName: 'mint',\n *   args: [69420],\n * })\n */\nexport async function writeContractSync<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  >,\n  chainOverride extends Chain | undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: WriteContractSyncParameters<\n    abi,\n    functionName,\n    args,\n    chain,\n    account,\n    chainOverride\n  >,\n): Promise<WriteContractSyncReturnType<chain>> {\n  return writeContract.internal(\n    client,\n    sendTransactionSync,\n    'sendTransactionSync',\n    parameters as never,\n  ) as never\n}\n", "import type { Abi, Address, TypedData } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type FillTransactionParameters,\n  type FillTransactionReturnType,\n  fillTransaction,\n} from '../../actions/public/fillTransaction.js'\nimport {\n  type GetChainIdReturnType,\n  getChainId,\n} from '../../actions/public/getChainId.js'\nimport {\n  type AddChainParameters,\n  addChain,\n} from '../../actions/wallet/addChain.js'\nimport {\n  type DeployContractParameters,\n  type DeployContractReturnType,\n  deployContract,\n} from '../../actions/wallet/deployContract.js'\nimport {\n  type GetAddressesReturnType,\n  getAddresses,\n} from '../../actions/wallet/getAddresses.js'\nimport {\n  type GetCallsStatusParameters,\n  type GetCallsStatusReturnType,\n  getCallsStatus,\n} from '../../actions/wallet/getCallsStatus.js'\nimport {\n  type GetCapabilitiesParameters,\n  type GetCapabilitiesReturnType,\n  getCapabilities,\n} from '../../actions/wallet/getCapabilities.js'\nimport {\n  type GetPermissionsReturnType,\n  getPermissions,\n} from '../../actions/wallet/getPermissions.js'\nimport {\n  type PrepareAuthorizationParameters,\n  type PrepareAuthorizationReturnType,\n  prepareAuthorization,\n} from '../../actions/wallet/prepareAuthorization.js'\nimport {\n  type PrepareTransactionRequestParameters,\n  type PrepareTransactionRequestRequest,\n  type PrepareTransactionRequestReturnType,\n  prepareTransactionRequest,\n} from '../../actions/wallet/prepareTransactionRequest.js'\nimport {\n  type RequestAddressesReturnType,\n  requestAddresses,\n} from '../../actions/wallet/requestAddresses.js'\nimport {\n  type RequestPermissionsParameters,\n  type RequestPermissionsReturnType,\n  requestPermissions,\n} from '../../actions/wallet/requestPermissions.js'\nimport {\n  type SendCallsParameters,\n  type SendCallsReturnType,\n  sendCalls,\n} from '../../actions/wallet/sendCalls.js'\nimport {\n  type SendCallsSyncParameters,\n  type SendCallsSyncReturnType,\n  sendCallsSync,\n} from '../../actions/wallet/sendCallsSync.js'\nimport {\n  type SendRawTransactionParameters,\n  type SendRawTransactionReturnType,\n  sendRawTransaction,\n} from '../../actions/wallet/sendRawTransaction.js'\nimport {\n  type SendRawTransactionSyncParameters,\n  type SendRawTransactionSyncReturnType,\n  sendRawTransactionSync,\n} from '../../actions/wallet/sendRawTransactionSync.js'\nimport {\n  type SendTransactionParameters,\n  type SendTransactionRequest,\n  type SendTransactionReturnType,\n  sendTransaction,\n} from '../../actions/wallet/sendTransaction.js'\nimport {\n  type SendTransactionSyncParameters,\n  type SendTransactionSyncRequest,\n  type SendTransactionSyncReturnType,\n  sendTransactionSync,\n} from '../../actions/wallet/sendTransactionSync.js'\nimport {\n  type ShowCallsStatusParameters,\n  type ShowCallsStatusReturnType,\n  showCallsStatus,\n} from '../../actions/wallet/showCallsStatus.js'\nimport {\n  type SignAuthorizationParameters,\n  type SignAuthorizationReturnType,\n  signAuthorization,\n} from '../../actions/wallet/signAuthorization.js'\nimport {\n  type SignMessageParameters,\n  type SignMessageReturnType,\n  signMessage,\n} from '../../actions/wallet/signMessage.js'\nimport {\n  type SignTransactionParameters,\n  type SignTransactionRequest,\n  type SignTransactionReturnType,\n  signTransaction,\n} from '../../actions/wallet/signTransaction.js'\nimport {\n  type SignTypedDataParameters,\n  type SignTypedDataReturnType,\n  signTypedData,\n} from '../../actions/wallet/signTypedData.js'\nimport {\n  type SwitchChainParameters,\n  switchChain,\n} from '../../actions/wallet/switchChain.js'\nimport {\n  type WaitForCallsStatusParameters,\n  type WaitForCallsStatusReturnType,\n  waitForCallsStatus,\n} from '../../actions/wallet/waitForCallsStatus.js'\nimport {\n  type WatchAssetParameters,\n  type WatchAssetReturnType,\n  watchAsset,\n} from '../../actions/wallet/watchAsset.js'\nimport {\n  type WriteContractParameters,\n  type WriteContractReturnType,\n  writeContract,\n} from '../../actions/wallet/writeContract.js'\nimport {\n  type WriteContractSyncParameters,\n  type WriteContractSyncReturnType,\n  writeContractSync,\n} from '../../actions/wallet/writeContractSync.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n} from '../../types/contract.js'\nimport type { Client } from '../createClient.js'\nimport type { Transport } from '../transports/createTransport.js'\n\nexport type WalletActions<\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n> = {\n  /**\n   * Adds an EVM chain to the wallet.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/addChain\n   * - JSON-RPC Methods: [`eth_addEthereumChain`](https://eips.ethereum.org/EIPS/eip-3085)\n   *\n   * @param args - {@link AddChainParameters}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { optimism } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   transport: custom(window.ethereum),\n   * })\n   * await client.addChain({ chain: optimism })\n   */\n  addChain: (args: AddChainParameters) => Promise<void>\n  /**\n   * Deploys a contract to the network, given bytecode and constructor arguments.\n   *\n   * - Docs: https://viem.sh/docs/contract/deployContract\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_deploying-contracts\n   *\n   * @param args - {@link DeployContractParameters}\n   * @returns The [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash. {@link DeployContractReturnType}\n   *\n   * @example\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   account: privateKeyToAccount('0x\u2026'),\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const hash = await client.deployContract({\n   *   abi: [],\n   *   account: '0x\u2026,\n   *   bytecode: '0x608060405260405161083e38038061083e833981016040819052610...',\n   * })\n   */\n  deployContract: <\n    const abi extends Abi | readonly unknown[],\n    chainOverride extends Chain | undefined,\n  >(\n    args: DeployContractParameters<abi, chain, account, chainOverride>,\n  ) => Promise<DeployContractReturnType>\n  /**\n   * Fills a transaction request with the necessary fields to be signed over.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/fillTransaction\n   *\n   * @param client - Client to use\n   * @param parameters - {@link FillTransactionParameters}\n   * @returns The filled transaction. {@link FillTransactionReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const result = await client.fillTransaction({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *   value: parseEther('1'),\n   * })\n   */\n  fillTransaction: <\n    chainOverride extends Chain | undefined = undefined,\n    accountOverride extends Account | Address | undefined = undefined,\n  >(\n    args: FillTransactionParameters<\n      chain,\n      account,\n      chainOverride,\n      accountOverride\n    >,\n  ) => Promise<FillTransactionReturnType<chain, chainOverride>>\n  /**\n   * Returns a list of account addresses owned by the wallet or client.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/getAddresses\n   * - JSON-RPC Methods: [`eth_accounts`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_accounts)\n   *\n   * @returns List of account addresses owned by the wallet or client. {@link GetAddressesReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const accounts = await client.getAddresses()\n   */\n  getAddresses: () => Promise<GetAddressesReturnType>\n  /**\n   * Returns the status of a call batch that was sent via `sendCalls`.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/getCallsStatus\n   * - JSON-RPC Methods: [`wallet_getCallsStatus`](https://eips.ethereum.org/EIPS/eip-5792)\n   *\n   * @param client - Client to use\n   * @returns Status of the calls. {@link GetCallsStatusReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   *\n   * const { receipts, status } = await client.getCallsStatus({ id: '0xdeadbeef' })\n   */\n  getCallsStatus: (\n    parameters: GetCallsStatusParameters,\n  ) => Promise<GetCallsStatusReturnType>\n  /**\n   * Extract capabilities that a connected wallet supports (e.g. paymasters, session keys, etc).\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/getCapabilities\n   * - JSON-RPC Methods: [`wallet_getCapabilities`](https://eips.ethereum.org/EIPS/eip-5792)\n   *\n   * @param client - Client to use\n   * @returns The wallet's capabilities. {@link GetCapabilitiesReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   *\n   * const capabilities = await client.getCapabilities({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   */\n  getCapabilities: <chainId extends number | undefined>(\n    parameters?: GetCapabilitiesParameters<chainId>,\n  ) => Promise<GetCapabilitiesReturnType<chainId>>\n  /**\n   * Returns the chain ID associated with the current network.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getChainId\n   * - JSON-RPC Methods: [`eth_chainId`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_chainid)\n   *\n   * @returns The current chain ID. {@link GetChainIdReturnType}\n   *\n   * @example\n   * import { createWalletClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const chainId = await client.getChainId()\n   * // 1\n   */\n  getChainId: () => Promise<GetChainIdReturnType>\n  /**\n   * Gets the wallets current permissions.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/getPermissions\n   * - JSON-RPC Methods: [`wallet_getPermissions`](https://eips.ethereum.org/EIPS/eip-2255)\n   *\n   * @returns The wallet permissions. {@link GetPermissionsReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const permissions = await client.getPermissions()\n   */\n  getPermissions: () => Promise<GetPermissionsReturnType>\n  /**\n   * Prepares an [EIP-7702 Authorization](https://eips.ethereum.org/EIPS/eip-7702) object for signing.\n   * This Action will fill the required fields of the Authorization object if they are not provided (e.g. `nonce` and `chainId`).\n   *\n   * With the prepared Authorization object, you can use [`signAuthorization`](https://viem.sh/docs/eip7702/signAuthorization) to sign over the Authorization object.\n   *\n   * @param client - Client to use\n   * @param parameters - {@link PrepareAuthorizationParameters}\n   * @returns The prepared Authorization object. {@link PrepareAuthorizationReturnType}\n   *\n   * @example\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   *\n   * const authorization = await client.prepareAuthorization({\n   *   account: privateKeyToAccount('0x..'),\n   *   contractAddress: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   *\n   * @example\n   * // Account Hoisting\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   account: privateKeyToAccount('0x\u2026'),\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   *\n   * const authorization = await client.prepareAuthorization({\n   *   contractAddress: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   */\n  prepareAuthorization: (\n    parameters: PrepareAuthorizationParameters<account>,\n  ) => Promise<PrepareAuthorizationReturnType>\n  /**\n   * Prepares a transaction request for signing.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/prepareTransactionRequest\n   *\n   * @param args - {@link PrepareTransactionRequestParameters}\n   * @returns The transaction request. {@link PrepareTransactionRequestReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const request = await client.prepareTransactionRequest({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   to: '0x0000000000000000000000000000000000000000',\n   *   value: 1n,\n   * })\n   *\n   * @example\n   * // Account Hoisting\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   account: privateKeyToAccount('0x\u2026'),\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const request = await client.prepareTransactionRequest({\n   *   to: '0x0000000000000000000000000000000000000000',\n   *   value: 1n,\n   * })\n   */\n  prepareTransactionRequest: <\n    const request extends PrepareTransactionRequestRequest<\n      chain,\n      chainOverride\n    >,\n    chainOverride extends Chain | undefined = undefined,\n    accountOverride extends Account | Address | undefined = undefined,\n  >(\n    args: PrepareTransactionRequestParameters<\n      chain,\n      account,\n      chainOverride,\n      accountOverride,\n      request\n    >,\n  ) => Promise<\n    PrepareTransactionRequestReturnType<\n      chain,\n      account,\n      chainOverride,\n      accountOverride,\n      request\n    >\n  >\n  /**\n   * Requests a list of accounts managed by a wallet.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/requestAddresses\n   * - JSON-RPC Methods: [`eth_requestAccounts`](https://eips.ethereum.org/EIPS/eip-1102)\n   *\n   * Sends a request to the wallet, asking for permission to access the user's accounts. After the user accepts the request, it will return a list of accounts (addresses).\n   *\n   * This API can be useful for dapps that need to access the user's accounts in order to execute transactions or interact with smart contracts.\n   *\n   * @returns List of accounts managed by a wallet {@link RequestAddressesReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const accounts = await client.requestAddresses()\n   */\n  requestAddresses: () => Promise<RequestAddressesReturnType>\n  /**\n   * Requests permissions for a wallet.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/requestPermissions\n   * - JSON-RPC Methods: [`wallet_requestPermissions`](https://eips.ethereum.org/EIPS/eip-2255)\n   *\n   * @param args - {@link RequestPermissionsParameters}\n   * @returns The wallet permissions. {@link RequestPermissionsReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const permissions = await client.requestPermissions({\n   *   eth_accounts: {}\n   * })\n   */\n  requestPermissions: (\n    args: RequestPermissionsParameters,\n  ) => Promise<RequestPermissionsReturnType>\n  /**\n   * Requests the connected wallet to send a batch of calls.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/sendCalls\n   * - JSON-RPC Methods: [`wallet_sendCalls`](https://eips.ethereum.org/EIPS/eip-5792)\n   *\n   * @param client - Client to use\n   * @returns Transaction identifier. {@link SendCallsReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   *\n   * const id = await client.sendCalls({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   calls: [\n   *     {\n   *       data: '0xdeadbeef',\n   *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *     },\n   *     {\n   *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *       value: 69420n,\n   *     },\n   *   ],\n   * })\n   */\n  sendCalls: <\n    const calls extends readonly unknown[],\n    chainOverride extends Chain | undefined = undefined,\n  >(\n    parameters: SendCallsParameters<chain, account, chainOverride, calls>,\n  ) => Promise<SendCallsReturnType>\n  /**\n   * Requests the connected wallet to send a batch of calls, and waits for the calls to be included in a block.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/sendCallsSync\n   * - JSON-RPC Methods: [`wallet_sendCalls`](https://eips.ethereum.org/EIPS/eip-5792)\n   *\n   * @param client - Client to use\n   * @returns Calls status. {@link SendCallsSyncReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   *\n   * const status = await client.sendCallsSync({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   calls: [\n   *     {\n   *       data: '0xdeadbeef',\n   *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *     },\n   *     {\n   *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *       value: 69420n,\n   *     },\n   *   ],\n   * })\n   */\n  sendCallsSync: <\n    const calls extends readonly unknown[],\n    chainOverride extends Chain | undefined = undefined,\n  >(\n    parameters: SendCallsSyncParameters<chain, account, chainOverride, calls>,\n  ) => Promise<SendCallsSyncReturnType>\n  /**\n   * Sends a **signed** transaction to the network\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransaction\n   * - JSON-RPC Method: [`eth_sendRawTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)\n   *\n   * @param client - Client to use\n   * @param parameters - {@link SendRawTransactionParameters}\n   * @returns The transaction hash. {@link SendRawTransactionReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { sendRawTransaction } from 'viem/wallet'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   *\n   * const hash = await client.sendRawTransaction({\n   *   serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n   * })\n   */\n  sendRawTransaction: (\n    args: SendRawTransactionParameters,\n  ) => Promise<SendRawTransactionReturnType>\n  /**\n   * Sends a **signed** transaction to the network synchronously,\n   * and waits for the transaction to be included in a block.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransactionSync\n   * - JSON-RPC Method: [`eth_sendRawTransactionSync`](https://eips.ethereum.org/EIPS/eip-7966)\n   *\n   * @param client - Client to use\n   * @param parameters - {@link SendRawTransactionSyncParameters}\n   * @returns The transaction receipt. {@link SendRawTransactionSyncReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { sendRawTransactionSync } from 'viem/wallet'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   *\n   * const receipt = await client.sendRawTransactionSync({\n   *   serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n   * })\n   */\n  sendRawTransactionSync: (\n    args: SendRawTransactionSyncParameters,\n  ) => Promise<SendRawTransactionSyncReturnType<chain>>\n  /**\n   * Creates, signs, and sends a new transaction to the network.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/sendTransaction\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions\n   * - JSON-RPC Methods:\n   *   - JSON-RPC Accounts: [`eth_sendTransaction`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sendtransaction)\n   *   - Local Accounts: [`eth_sendRawTransaction`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sendrawtransaction)\n   *\n   * @param args - {@link SendTransactionParameters}\n   * @returns The [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash. {@link SendTransactionReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const hash = await client.sendTransaction({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *   value: 1000000000000000000n,\n   * })\n   *\n   * @example\n   * // Account Hoisting\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   account: privateKeyToAccount('0x\u2026'),\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const hash = await client.sendTransaction({\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *   value: 1000000000000000000n,\n   * })\n   */\n  sendTransaction: <\n    const request extends SendTransactionRequest<chain, chainOverride>,\n    chainOverride extends Chain | undefined = undefined,\n  >(\n    args: SendTransactionParameters<chain, account, chainOverride, request>,\n  ) => Promise<SendTransactionReturnType>\n  /**\n   * Creates, signs, and sends a new transaction to the network synchronously.\n   * Returns the transaction receipt.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/sendTransactionSync\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions\n   * - JSON-RPC Methods:\n   *   - JSON-RPC Accounts: [`eth_sendTransaction`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sendtransaction)\n   *   - Local Accounts: [`eth_sendRawTransaction`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sendrawtransaction)\n   *\n   * @param args - {@link SendTransactionParameters}\n   * @returns The transaction receipt. {@link SendTransactionReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const receipt = await client.sendTransactionSync({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *   value: 1000000000000000000n,\n   * })\n   *\n   * @example\n   * // Account Hoisting\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   account: privateKeyToAccount('0x\u2026'),\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const receipt = await client.sendTransactionSync({\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *   value: 1000000000000000000n,\n   * })\n   */\n  sendTransactionSync: <\n    const request extends SendTransactionSyncRequest<chain, chainOverride>,\n    chainOverride extends Chain | undefined = undefined,\n  >(\n    args: SendTransactionSyncParameters<chain, account, chainOverride, request>,\n  ) => Promise<SendTransactionSyncReturnType<chain>>\n  /**\n   * Requests for the wallet to show information about a call batch\n   * that was sent via `sendCalls`.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/showCallsStatus\n   * - JSON-RPC Methods: [`wallet_showCallsStatus`](https://eips.ethereum.org/EIPS/eip-5792)\n   *\n   * @param client - Client to use\n   * @returns Displays status of the calls in wallet. {@link ShowCallsStatusReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   *\n   * await client.showCallsStatus({ id: '0xdeadbeef' })\n   */\n  showCallsStatus: (\n    parameters: ShowCallsStatusParameters,\n  ) => Promise<ShowCallsStatusReturnType>\n  /**\n   * Signs an [EIP-7702 Authorization](https://eips.ethereum.org/EIPS/eip-7702) object.\n   *\n   * With the calculated signature, you can:\n   * - use [`verifyAuthorization`](https://viem.sh/docs/eip7702/verifyAuthorization) to verify the signed Authorization object,\n   * - use [`recoverAuthorizationAddress`](https://viem.sh/docs/eip7702/recoverAuthorizationAddress) to recover the signing address from the signed Authorization object.\n   *\n   * @param client - Client to use\n   * @param parameters - {@link SignAuthorizationParameters}\n   * @returns The signed Authorization object. {@link SignAuthorizationReturnType}\n   *\n   * @example\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   *\n   * const signature = await client.signAuthorization({\n   *   account: privateKeyToAccount('0x..'),\n   *   contractAddress: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   *\n   * @example\n   * // Account Hoisting\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   account: privateKeyToAccount('0x\u2026'),\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   *\n   * const signature = await client.signAuthorization({\n   *   contractAddress: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   */\n  signAuthorization: (\n    parameters: SignAuthorizationParameters<account>,\n  ) => Promise<SignAuthorizationReturnType>\n  /**\n   * Calculates an Ethereum-specific signature in [EIP-191 format](https://eips.ethereum.org/EIPS/eip-191): `keccak256(\"\\x19Ethereum Signed Message:\\n\" + len(message) + message))`.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/signMessage\n   * - JSON-RPC Methods:\n   *   - JSON-RPC Accounts: [`personal_sign`](https://docs.metamask.io/guide/signing-data#personal-sign)\n   *   - Local Accounts: Signs locally. No JSON-RPC request.\n   *\n   * With the calculated signature, you can:\n   * - use [`verifyMessage`](https://viem.sh/docs/utilities/verifyMessage) to verify the signature,\n   * - use [`recoverMessageAddress`](https://viem.sh/docs/utilities/recoverMessageAddress) to recover the signing address from a signature.\n   *\n   * @param args - {@link SignMessageParameters}\n   * @returns The signed message. {@link SignMessageReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const signature = await client.signMessage({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   message: 'hello world',\n   * })\n   *\n   * @example\n   * // Account Hoisting\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   account: privateKeyToAccount('0x\u2026'),\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const signature = await client.signMessage({\n   *   message: 'hello world',\n   * })\n   */\n  signMessage: (\n    args: SignMessageParameters<account>,\n  ) => Promise<SignMessageReturnType>\n  /**\n   * Signs a transaction.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/signTransaction\n   * - JSON-RPC Methods:\n   *   - JSON-RPC Accounts: [`eth_signTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)\n   *   - Local Accounts: Signs locally. No JSON-RPC request.\n   *\n   * @param args - {@link SignTransactionParameters}\n   * @returns The signed message. {@link SignTransactionReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const request = await client.prepareTransactionRequest({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   to: '0x0000000000000000000000000000000000000000',\n   *   value: 1n,\n   * })\n   * const signature = await client.signTransaction(request)\n   *\n   * @example\n   * // Account Hoisting\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   account: privateKeyToAccount('0x\u2026'),\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const request = await client.prepareTransactionRequest({\n   *   to: '0x0000000000000000000000000000000000000000',\n   *   value: 1n,\n   * })\n   * const signature = await client.signTransaction(request)\n   */\n  signTransaction: <\n    chainOverride extends Chain | undefined,\n    const request extends SignTransactionRequest<\n      chain,\n      chainOverride\n    > = SignTransactionRequest<chain, chainOverride>,\n  >(\n    args: SignTransactionParameters<chain, account, chainOverride, request>,\n  ) => Promise<SignTransactionReturnType<request>>\n  /**\n   * Signs typed data and calculates an Ethereum-specific signature in [EIP-191 format](https://eips.ethereum.org/EIPS/eip-191): `keccak256(\"\\x19Ethereum Signed Message:\\n\" + len(message) + message))`.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/signTypedData\n   * - JSON-RPC Methods:\n   *   - JSON-RPC Accounts: [`eth_signTypedData_v4`](https://docs.metamask.io/guide/signing-data#signtypeddata-v4)\n   *   - Local Accounts: Signs locally. No JSON-RPC request.\n   *\n   * @param client - Client to use\n   * @param args - {@link SignTypedDataParameters}\n   * @returns The signed data. {@link SignTypedDataReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const signature = await client.signTypedData({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   domain: {\n   *     name: 'Ether Mail',\n   *     version: '1',\n   *     chainId: 1,\n   *     verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n   *   },\n   *   types: {\n   *     Person: [\n   *       { name: 'name', type: 'string' },\n   *       { name: 'wallet', type: 'address' },\n   *     ],\n   *     Mail: [\n   *       { name: 'from', type: 'Person' },\n   *       { name: 'to', type: 'Person' },\n   *       { name: 'contents', type: 'string' },\n   *     ],\n   *   },\n   *   primaryType: 'Mail',\n   *   message: {\n   *     from: {\n   *       name: 'Cow',\n   *       wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n   *     },\n   *     to: {\n   *       name: 'Bob',\n   *       wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n   *     },\n   *     contents: 'Hello, Bob!',\n   *   },\n   * })\n   *\n   * @example\n   * // Account Hoisting\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   account: privateKeyToAccount('0x\u2026'),\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const signature = await client.signTypedData({\n   *   domain: {\n   *     name: 'Ether Mail',\n   *     version: '1',\n   *     chainId: 1,\n   *     verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n   *   },\n   *   types: {\n   *     Person: [\n   *       { name: 'name', type: 'string' },\n   *       { name: 'wallet', type: 'address' },\n   *     ],\n   *     Mail: [\n   *       { name: 'from', type: 'Person' },\n   *       { name: 'to', type: 'Person' },\n   *       { name: 'contents', type: 'string' },\n   *     ],\n   *   },\n   *   primaryType: 'Mail',\n   *   message: {\n   *     from: {\n   *       name: 'Cow',\n   *       wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n   *     },\n   *     to: {\n   *       name: 'Bob',\n   *       wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n   *     },\n   *     contents: 'Hello, Bob!',\n   *   },\n   * })\n   */\n  signTypedData: <\n    const typedData extends TypedData | { [key: string]: unknown },\n    primaryType extends string,\n  >(\n    args: SignTypedDataParameters<typedData, primaryType, account>,\n  ) => Promise<SignTypedDataReturnType>\n  /**\n   * Switch the target chain in a wallet.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/switchChain\n   * - JSON-RPC Methods: [`eth_switchEthereumChain`](https://eips.ethereum.org/EIPS/eip-3326)\n   *\n   * @param args - {@link SwitchChainParameters}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet, optimism } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * await client.switchChain({ id: optimism.id })\n   */\n  switchChain: (args: SwitchChainParameters) => Promise<void>\n  /**\n   * Waits for the status & receipts of a call bundle that was sent via `sendCalls`.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/waitForCallsStatus\n   * - JSON-RPC Methods: [`wallet_getCallsStatus`](https://eips.ethereum.org/EIPS/eip-5792)\n   *\n   * @param client - Client to use\n   * @param parameters - {@link WaitForCallsStatusParameters}\n   * @returns Status & receipts of the call bundle. {@link WaitForCallsStatusReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   *\n   * const { receipts, status } = await waitForCallsStatus(client, { id: '0xdeadbeef' })\n   */\n  waitForCallsStatus: (\n    parameters: WaitForCallsStatusParameters,\n  ) => Promise<WaitForCallsStatusReturnType>\n  /**\n   * Adds an EVM chain to the wallet.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/watchAsset\n   * - JSON-RPC Methods: [`eth_switchEthereumChain`](https://eips.ethereum.org/EIPS/eip-747)\n   *\n   * @param args - {@link WatchAssetParameters}\n   * @returns Boolean indicating if the token was successfully added. {@link WatchAssetReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const success = await client.watchAsset({\n   *   type: 'ERC20',\n   *   options: {\n   *     address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n   *     decimals: 18,\n   *     symbol: 'WETH',\n   *   },\n   * })\n   */\n  watchAsset: (args: WatchAssetParameters) => Promise<WatchAssetReturnType>\n  /**\n   * Executes a write function on a contract.\n   *\n   * - Docs: https://viem.sh/docs/contract/writeContract\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts\n   *\n   * A \"write\" function on a Solidity contract modifies the state of the blockchain. These types of functions require gas to be executed, and hence a [Transaction](https://viem.sh/docs/glossary/terms) is needed to be broadcast in order to change the state.\n   *\n   * Internally, uses a [Wallet Client](https://viem.sh/docs/clients/wallet) to call the [`sendTransaction` action](https://viem.sh/docs/actions/wallet/sendTransaction) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n   *\n   * __Warning: The `write` internally sends a transaction \u2013 it does not validate if the contract write will succeed (the contract may throw an error). It is highly recommended to [simulate the contract write with `contract.simulate`](https://viem.sh/docs/contract/writeContract#usage) before you execute it.__\n   *\n   * @param args - {@link WriteContractParameters}\n   * @returns A [Transaction Hash](https://viem.sh/docs/glossary/terms#hash). {@link WriteContractReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const hash = await client.writeContract({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),\n   *   functionName: 'mint',\n   *   args: [69420],\n   * })\n   *\n   * @example\n   * // With Validation\n   * import { createWalletClient, custom, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const { request } = await client.simulateContract({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),\n   *   functionName: 'mint',\n   *   args: [69420],\n   * }\n   * const hash = await client.writeContract(request)\n   */\n  writeContract: <\n    const abi extends Abi | readonly unknown[],\n    functionName extends ContractFunctionName<abi, 'payable' | 'nonpayable'>,\n    args extends ContractFunctionArgs<\n      abi,\n      'payable' | 'nonpayable',\n      functionName\n    >,\n    chainOverride extends Chain | undefined = undefined,\n  >(\n    args: WriteContractParameters<\n      abi,\n      functionName,\n      args,\n      chain,\n      account,\n      chainOverride\n    >,\n  ) => Promise<WriteContractReturnType>\n  /**\n   * Executes a write function on a contract synchronously.\n   * Returns the transaction receipt.\n   *\n   * - Docs: https://viem.sh/docs/contract/writeContract\n   *\n   * A \"write\" function on a Solidity contract modifies the state of the blockchain. These types of functions require gas to be executed, and hence a [Transaction](https://viem.sh/docs/glossary/terms) is needed to be broadcast in order to change the state.\n   *\n   * Internally, uses a [Wallet Client](https://viem.sh/docs/clients/wallet) to call the [`sendTransaction` action](https://viem.sh/docs/actions/wallet/sendTransaction) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n   *\n   * __Warning: The `write` internally sends a transaction \u2013 it does not validate if the contract write will succeed (the contract may throw an error). It is highly recommended to [simulate the contract write with `contract.simulate`](https://viem.sh/docs/contract/writeContract#usage) before you execute it.__\n   *\n   * @param args - {@link WriteContractSyncParameters}\n   * @returns A [Transaction Receipt](https://viem.sh/docs/glossary/terms#receipt). {@link WriteContractSyncReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const receipt = await client.writeContractSync({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),\n   *   functionName: 'mint',\n   *   args: [69420],\n   * })\n   */\n  writeContractSync: <\n    const abi extends Abi | readonly unknown[],\n    functionName extends ContractFunctionName<abi, 'payable' | 'nonpayable'>,\n    args extends ContractFunctionArgs<\n      abi,\n      'payable' | 'nonpayable',\n      functionName\n    >,\n    chainOverride extends Chain | undefined = undefined,\n  >(\n    args: WriteContractSyncParameters<\n      abi,\n      functionName,\n      args,\n      chain,\n      account,\n      chainOverride\n    >,\n  ) => Promise<WriteContractSyncReturnType>\n}\n\nexport function walletActions<\n  transport extends Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n>(client: Client<transport, chain, account>): WalletActions<chain, account> {\n  return {\n    addChain: (args) => addChain(client, args),\n    deployContract: (args) => deployContract(client, args),\n    fillTransaction: (args) => fillTransaction(client, args),\n    getAddresses: () => getAddresses(client),\n    getCallsStatus: (args) => getCallsStatus(client, args),\n    getCapabilities: (args) => getCapabilities(client, args),\n    getChainId: () => getChainId(client),\n    getPermissions: () => getPermissions(client),\n    prepareAuthorization: (args) => prepareAuthorization(client, args),\n    prepareTransactionRequest: (args) =>\n      prepareTransactionRequest(client as any, args as any) as any,\n    requestAddresses: () => requestAddresses(client),\n    requestPermissions: (args) => requestPermissions(client, args),\n    sendCalls: (args) => sendCalls(client, args),\n    sendCallsSync: (args) => sendCallsSync(client, args),\n    sendRawTransaction: (args) => sendRawTransaction(client, args),\n    sendRawTransactionSync: (args) => sendRawTransactionSync(client, args),\n    sendTransaction: (args) => sendTransaction(client, args),\n    sendTransactionSync: (args) => sendTransactionSync(client, args),\n    showCallsStatus: (args) => showCallsStatus(client, args),\n    signAuthorization: (args) => signAuthorization(client, args),\n    signMessage: (args) => signMessage(client, args),\n    signTransaction: (args) => signTransaction(client, args),\n    signTypedData: (args) => signTypedData(client, args),\n    switchChain: (args) => switchChain(client, args),\n    waitForCallsStatus: (args) => waitForCallsStatus(client, args),\n    watchAsset: (args) => watchAsset(client, args),\n    writeContract: (args) => writeContract(client, args as any),\n    writeContractSync: (args) => writeContractSync(client, args as any),\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Account } from '../accounts/types.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { ParseAccount } from '../types/account.js'\nimport type { Chain } from '../types/chain.js'\nimport type { RpcSchema, WalletRpcSchema } from '../types/eip1193.js'\nimport type { Prettify } from '../types/utils.js'\nimport {\n  type Client,\n  type ClientConfig,\n  type CreateClientErrorType,\n  createClient,\n} from './createClient.js'\nimport { type WalletActions, walletActions } from './decorators/wallet.js'\nimport type { Transport } from './transports/createTransport.js'\n\nexport type WalletClientConfig<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  accountOrAddress extends Account | Address | undefined =\n    | Account\n    | Address\n    | undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = Prettify<\n  Pick<\n    ClientConfig<transport, chain, accountOrAddress, rpcSchema>,\n    | 'account'\n    | 'cacheTime'\n    | 'ccipRead'\n    | 'chain'\n    | 'dataSuffix'\n    | 'key'\n    | 'name'\n    | 'pollingInterval'\n    | 'rpcSchema'\n    | 'transport'\n  >\n>\n\nexport type WalletClient<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = Prettify<\n  Client<\n    transport,\n    chain,\n    account,\n    rpcSchema extends RpcSchema\n      ? [...WalletRpcSchema, ...rpcSchema]\n      : WalletRpcSchema,\n    WalletActions<chain, account>\n  >\n>\n\nexport type CreateWalletClientErrorType = CreateClientErrorType | ErrorType\n\n/**\n * Creates a Wallet Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\n *\n * - Docs: https://viem.sh/docs/clients/wallet\n *\n * A Wallet Client is an interface to interact with [Ethereum Account(s)](https://ethereum.org/en/glossary/#account) and provides the ability to retrieve accounts, execute transactions, sign messages, etc. through [Wallet Actions](https://viem.sh/docs/actions/wallet/introduction).\n *\n * The Wallet Client supports signing over:\n * - [JSON-RPC Accounts](https://viem.sh/docs/clients/wallet#json-rpc-accounts) (e.g. Browser Extension Wallets, WalletConnect, etc).\n * - [Local Accounts](https://viem.sh/docs/clients/wallet#local-accounts-private-key-mnemonic-etc) (e.g. private key/mnemonic wallets).\n *\n * @param config - {@link WalletClientConfig}\n * @returns A Wallet Client. {@link WalletClient}\n *\n * @example\n * // JSON-RPC Account\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n *\n * @example\n * // Local Account\n * import { createWalletClient, custom } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createWalletClient({\n *   account: privateKeyToAccount('0x\u2026')\n *   chain: mainnet,\n *   transport: http(),\n * })\n */\nexport function createWalletClient<\n  transport extends Transport,\n  chain extends Chain | undefined = undefined,\n  accountOrAddress extends Account | Address | undefined = undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n>(\n  parameters: WalletClientConfig<transport, chain, accountOrAddress, rpcSchema>,\n): WalletClient<transport, chain, ParseAccount<accountOrAddress>, rpcSchema>\n\nexport function createWalletClient(\n  parameters: WalletClientConfig,\n): WalletClient {\n  const { key = 'wallet', name = 'Wallet Client', transport } = parameters\n  const client = createClient({\n    ...parameters,\n    key,\n    name,\n    transport,\n    type: 'walletClient',\n  })\n  return client.extend(walletActions)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { EIP1193RequestFn } from '../../types/eip1193.js'\nimport type { OneOf } from '../../types/utils.js'\nimport { buildRequest } from '../../utils/buildRequest.js'\nimport { uid as uid_ } from '../../utils/uid.js'\nimport type { ClientConfig } from '../createClient.js'\n\nexport type TransportConfig<\n  type extends string = string,\n  eip1193RequestFn extends EIP1193RequestFn = EIP1193RequestFn,\n> = {\n  /** The name of the transport. */\n  name: string\n  /** The key of the transport. */\n  key: string\n  /** Methods to include or exclude from executing RPC requests. */\n  methods?:\n    | OneOf<\n        | {\n            include?: string[] | undefined\n          }\n        | {\n            exclude?: string[] | undefined\n          }\n      >\n    | undefined\n  /** The JSON-RPC request function that matches the EIP-1193 request spec. */\n  request: eip1193RequestFn\n  /** The base delay (in ms) between retries. */\n  retryDelay?: number | undefined\n  /** The max number of times to retry. */\n  retryCount?: number | undefined\n  /** The timeout (in ms) for requests. */\n  timeout?: number | undefined\n  /** The type of the transport. */\n  type: type\n}\n\nexport type Transport<\n  type extends string = string,\n  rpcAttributes = Record<string, any>,\n  eip1193RequestFn extends EIP1193RequestFn = EIP1193RequestFn,\n> = <chain extends Chain | undefined = Chain>({\n  chain,\n}: {\n  account?: Account | undefined\n  chain?: chain | undefined\n  pollingInterval?: ClientConfig['pollingInterval'] | undefined\n  retryCount?: TransportConfig['retryCount'] | undefined\n  timeout?: TransportConfig['timeout'] | undefined\n}) => {\n  config: TransportConfig<type>\n  request: eip1193RequestFn\n  value?: rpcAttributes | undefined\n}\n\nexport type CreateTransportErrorType = ErrorType\n\n/**\n * @description Creates an transport intended to be used with a client.\n */\nexport function createTransport<\n  type extends string,\n  rpcAttributes extends Record<string, any>,\n>(\n  {\n    key,\n    methods,\n    name,\n    request,\n    retryCount = 3,\n    retryDelay = 150,\n    timeout,\n    type,\n  }: TransportConfig<type>,\n  value?: rpcAttributes | undefined,\n): ReturnType<Transport<type, rpcAttributes>> {\n  const uid = uid_()\n  return {\n    config: {\n      key,\n      methods,\n      name,\n      request,\n      retryCount,\n      retryDelay,\n      timeout,\n      type,\n    },\n    request: buildRequest(request, { methods, retryCount, retryDelay, uid }),\n    value,\n  }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport {\n  type CreateTransportErrorType,\n  createTransport,\n  type Transport,\n  type TransportConfig,\n} from './createTransport.js'\n\ntype EthereumProvider = { request(...args: any): Promise<any> }\n\nexport type CustomTransportConfig = {\n  /** The key of the transport. */\n  key?: TransportConfig['key'] | undefined\n  /** Methods to include or exclude from executing RPC requests. */\n  methods?: TransportConfig['methods'] | undefined\n  /** The name of the transport. */\n  name?: TransportConfig['name'] | undefined\n  /** The max number of times to retry. */\n  retryCount?: TransportConfig['retryCount'] | undefined\n  /** The base delay (in ms) between retries. */\n  retryDelay?: TransportConfig['retryDelay'] | undefined\n}\n\nexport type CustomTransport = Transport<\n  'custom',\n  {},\n  EthereumProvider['request']\n>\n\nexport type CustomTransportErrorType = CreateTransportErrorType | ErrorType\n\n/**\n * @description Creates a custom transport given an EIP-1193 compliant `request` attribute.\n */\nexport function custom<provider extends EthereumProvider>(\n  provider: provider,\n  config: CustomTransportConfig = {},\n): CustomTransport {\n  const {\n    key = 'custom',\n    methods,\n    name = 'Custom Provider',\n    retryDelay,\n  } = config\n  return ({ retryCount: defaultRetryCount }) =>\n    createTransport({\n      key,\n      methods,\n      name,\n      request: provider.request.bind(provider),\n      retryCount: config.retryCount ?? defaultRetryCount,\n      retryDelay,\n      type: 'custom',\n    })\n}\n", "import { ExecutionRevertedError } from '../../errors/node.js'\nimport {\n  TransactionRejectedRpcError,\n  UserRejectedRequestError,\n  WalletConnectSessionSettlementError,\n} from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport { wait } from '../../utils/wait.js'\n\nimport {\n  type CreateTransportErrorType,\n  createTransport,\n  type Transport,\n  type TransportConfig,\n} from './createTransport.js'\n// TODO: Narrow `method` & `params` types.\nexport type OnResponseFn = (\n  args: {\n    method: string\n    params: unknown[]\n    transport: ReturnType<Transport>\n  } & (\n    | {\n        error?: undefined\n        response: unknown\n        status: 'success'\n      }\n    | {\n        error: Error\n        response?: undefined\n        status: 'error'\n      }\n  ),\n) => void\n\ntype RankOptions = {\n  /**\n   * The polling interval (in ms) at which the ranker should ping the RPC URL.\n   * @default client.pollingInterval\n   */\n  interval?: number | undefined\n  /**\n   * Ping method to determine latency.\n   */\n  ping?: (parameters: {\n    transport: ReturnType<Transport>\n  }) => Promise<unknown> | undefined\n  /**\n   * The number of previous samples to perform ranking on.\n   * @default 10\n   */\n  sampleCount?: number | undefined\n  /**\n   * Timeout when sampling transports.\n   * @default 1_000\n   */\n  timeout?: number | undefined\n  /**\n   * Weights to apply to the scores. Weight values are proportional.\n   */\n  weights?:\n    | {\n        /**\n         * The weight to apply to the latency score.\n         * @default 0.3\n         */\n        latency?: number | undefined\n        /**\n         * The weight to apply to the stability score.\n         * @default 0.7\n         */\n        stability?: number | undefined\n      }\n    | undefined\n}\n\nexport type FallbackTransportConfig = {\n  /** The key of the Fallback transport. */\n  key?: TransportConfig['key'] | undefined\n  /** The name of the Fallback transport. */\n  name?: TransportConfig['name'] | undefined\n  /** Toggle to enable ranking, or rank options. */\n  rank?: boolean | RankOptions | undefined\n  /** The max number of times to retry. */\n  retryCount?: TransportConfig['retryCount'] | undefined\n  /** The base delay (in ms) between retries. */\n  retryDelay?: TransportConfig['retryDelay'] | undefined\n  /** Callback on whether an error should throw or try the next transport in the fallback. */\n  shouldThrow?: (error: Error) => boolean | undefined\n}\n\nexport type FallbackTransport<\n  transports extends readonly Transport[] = readonly Transport[],\n> = Transport<\n  'fallback',\n  {\n    onResponse: (fn: OnResponseFn) => void\n    transports: {\n      [key in keyof transports]: ReturnType<transports[key]>\n    }\n  }\n>\n\nexport type FallbackTransportErrorType = CreateTransportErrorType | ErrorType\n\nexport function fallback<const transports extends readonly Transport[]>(\n  transports_: transports,\n  config: FallbackTransportConfig = {},\n): FallbackTransport<transports> {\n  const {\n    key = 'fallback',\n    name = 'Fallback',\n    rank = false,\n    shouldThrow: shouldThrow_ = shouldThrow,\n    retryCount,\n    retryDelay,\n  } = config\n  return (({ chain, pollingInterval = 4_000, timeout, ...rest }) => {\n    let transports = transports_\n\n    let onResponse: OnResponseFn = () => {}\n\n    const transport = createTransport(\n      {\n        key,\n        name,\n        async request({ method, params }) {\n          let includes: boolean | undefined\n\n          const fetch = async (i = 0): Promise<any> => {\n            const transport = transports[i]({\n              ...rest,\n              chain,\n              retryCount: 0,\n              timeout,\n            })\n            try {\n              const response = await transport.request({\n                method,\n                params,\n              } as any)\n\n              onResponse({\n                method,\n                params: params as unknown[],\n                response,\n                transport,\n                status: 'success',\n              })\n\n              return response\n            } catch (err) {\n              onResponse({\n                error: err as Error,\n                method,\n                params: params as unknown[],\n                transport,\n                status: 'error',\n              })\n\n              if (shouldThrow_(err as Error)) throw err\n\n              // If we've reached the end of the fallbacks, throw the error.\n              if (i === transports.length - 1) throw err\n\n              // Check if at least one other transport includes the method\n              includes ??= transports.slice(i + 1).some((transport) => {\n                const { include, exclude } =\n                  transport({ chain }).config.methods || {}\n                if (include) return include.includes(method)\n                if (exclude) return !exclude.includes(method)\n                return true\n              })\n              if (!includes) throw err\n\n              // Otherwise, try the next fallback.\n              return fetch(i + 1)\n            }\n          }\n          return fetch()\n        },\n        retryCount,\n        retryDelay,\n        type: 'fallback',\n      },\n      {\n        onResponse: (fn: OnResponseFn) => (onResponse = fn),\n        transports: transports.map((fn) => fn({ chain, retryCount: 0 })),\n      },\n    )\n\n    if (rank) {\n      const rankOptions = (typeof rank === 'object' ? rank : {}) as RankOptions\n      rankTransports({\n        chain,\n        interval: rankOptions.interval ?? pollingInterval,\n        onTransports: (transports_) => (transports = transports_ as transports),\n        ping: rankOptions.ping,\n        sampleCount: rankOptions.sampleCount,\n        timeout: rankOptions.timeout,\n        transports,\n        weights: rankOptions.weights,\n      })\n    }\n    return transport\n  }) as FallbackTransport<transports>\n}\n\nexport function shouldThrow(error: Error) {\n  if ('code' in error && typeof error.code === 'number') {\n    if (\n      error.code === TransactionRejectedRpcError.code ||\n      error.code === UserRejectedRequestError.code ||\n      error.code === WalletConnectSessionSettlementError.code ||\n      ExecutionRevertedError.nodeMessage.test(error.message) ||\n      error.code === 5000 // CAIP UserRejectedRequestError\n    )\n      return true\n  }\n  return false\n}\n\n/** @internal */\nexport function rankTransports({\n  chain,\n  interval = 4_000,\n  onTransports,\n  ping,\n  sampleCount = 10,\n  timeout = 1_000,\n  transports,\n  weights = {},\n}: {\n  chain?: Chain | undefined\n  interval: RankOptions['interval']\n  onTransports: (transports: readonly Transport[]) => void\n  ping?: RankOptions['ping'] | undefined\n  sampleCount?: RankOptions['sampleCount'] | undefined\n  timeout?: RankOptions['timeout'] | undefined\n  transports: readonly Transport[]\n  weights?: RankOptions['weights'] | undefined\n}) {\n  const { stability: stabilityWeight = 0.7, latency: latencyWeight = 0.3 } =\n    weights\n\n  type SampleData = { latency: number; success: number }\n  type Sample = SampleData[]\n  const samples: Sample[] = []\n\n  const rankTransports_ = async () => {\n    // 1. Take a sample from each Transport.\n    const sample: Sample = await Promise.all(\n      transports.map(async (transport) => {\n        const transport_ = transport({ chain, retryCount: 0, timeout })\n\n        const start = Date.now()\n        let end: number\n        let success: number\n        try {\n          await (ping\n            ? ping({ transport: transport_ })\n            : transport_.request({ method: 'net_listening' }))\n          success = 1\n        } catch {\n          success = 0\n        } finally {\n          end = Date.now()\n        }\n        const latency = end - start\n        return { latency, success }\n      }),\n    )\n\n    // 2. Store the sample. If we have more than `sampleCount` samples, remove\n    // the oldest sample.\n    samples.push(sample)\n    if (samples.length > sampleCount) samples.shift()\n\n    // 3. Calculate the max latency from samples.\n    const maxLatency = Math.max(\n      ...samples.map((sample) =>\n        Math.max(...sample.map(({ latency }) => latency)),\n      ),\n    )\n\n    // 4. Calculate the score for each Transport.\n    const scores = transports\n      .map((_, i) => {\n        const latencies = samples.map((sample) => sample[i].latency)\n        const meanLatency =\n          latencies.reduce((acc, latency) => acc + latency, 0) /\n          latencies.length\n        const latencyScore = 1 - meanLatency / maxLatency\n\n        const successes = samples.map((sample) => sample[i].success)\n        const stabilityScore =\n          successes.reduce((acc, success) => acc + success, 0) /\n          successes.length\n\n        if (stabilityScore === 0) return [0, i]\n        return [\n          latencyWeight * latencyScore + stabilityWeight * stabilityScore,\n          i,\n        ]\n      })\n      .sort((a, b) => b[0] - a[0])\n\n    // 5. Sort the Transports by score.\n    onTransports(scores.map(([, i]) => transports[i]))\n\n    // 6. Wait, and then rank again.\n    await wait(interval)\n    rankTransports_()\n  }\n  rankTransports_()\n}\n", "import { BaseError } from './base.js'\n\nexport type UrlRequiredErrorType = UrlRequiredError & {\n  name: 'UrlRequiredError'\n}\nexport class UrlRequiredError extends BaseError {\n  constructor() {\n    super(\n      'No URL was provided to the Transport. Please provide a valid RPC URL to the Transport.',\n      {\n        docsPath: '/docs/clients/intro',\n        name: 'UrlRequiredError',\n      },\n    )\n  }\n}\n", "import { RpcRequestError } from '../../errors/request.js'\nimport {\n  UrlRequiredError,\n  type UrlRequiredErrorType,\n} from '../../errors/transport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { EIP1193RequestFn, RpcSchema } from '../../types/eip1193.js'\nimport type { RpcRequest } from '../../types/rpc.js'\nimport { createBatchScheduler } from '../../utils/promise/createBatchScheduler.js'\nimport {\n  getHttpRpcClient,\n  type HttpRpcClientOptions,\n} from '../../utils/rpc/http.js'\n\nimport {\n  type CreateTransportErrorType,\n  createTransport,\n  type Transport,\n  type TransportConfig,\n} from './createTransport.js'\n\nexport type HttpTransportConfig<\n  rpcSchema extends RpcSchema | undefined = undefined,\n  raw extends boolean = false,\n> = {\n  /**\n   * Whether to enable Batch JSON-RPC.\n   * @link https://www.jsonrpc.org/specification#batch\n   */\n  batch?:\n    | boolean\n    | {\n        /** The maximum number of JSON-RPC requests to send in a batch. @default 1_000 */\n        batchSize?: number | undefined\n        /** The maximum number of milliseconds to wait before sending a batch. @default 0 */\n        wait?: number | undefined\n      }\n    | undefined\n  fetchFn?: HttpRpcClientOptions['fetchFn'] | undefined\n  /**\n   * Request configuration to pass to `fetch`.\n   * @link https://developer.mozilla.org/en-US/docs/Web/API/fetch\n   */\n  fetchOptions?: HttpRpcClientOptions['fetchOptions'] | undefined\n  /** A callback to handle the response from `fetch`. */\n  onFetchRequest?: HttpRpcClientOptions['onRequest'] | undefined\n  /** A callback to handle the response from `fetch`. */\n  onFetchResponse?: HttpRpcClientOptions['onResponse'] | undefined\n  /** The key of the HTTP transport. */\n  key?: TransportConfig['key'] | undefined\n  /** Methods to include or exclude from executing RPC requests. */\n  methods?: TransportConfig['methods'] | undefined\n  /** The name of the HTTP transport. */\n  name?: TransportConfig['name'] | undefined\n  /** Whether to return JSON RPC errors as responses instead of throwing. */\n  raw?: raw | boolean | undefined\n  /** The max number of times to retry. */\n  retryCount?: TransportConfig['retryCount'] | undefined\n  /** The base delay (in ms) between retries. */\n  retryDelay?: TransportConfig['retryDelay'] | undefined\n  /** Typed JSON-RPC schema for the transport. */\n  rpcSchema?: rpcSchema | RpcSchema | undefined\n  /** The timeout (in ms) for the HTTP request. Default: 10_000 */\n  timeout?: TransportConfig['timeout'] | undefined\n}\n\nexport type HttpTransport<\n  rpcSchema extends RpcSchema | undefined = undefined,\n  raw extends boolean = false,\n> = Transport<\n  'http',\n  {\n    fetchOptions?: HttpTransportConfig['fetchOptions'] | undefined\n    url?: string | undefined\n  },\n  EIP1193RequestFn<rpcSchema, raw>\n>\n\nexport type HttpTransportErrorType =\n  | CreateTransportErrorType\n  | UrlRequiredErrorType\n  | ErrorType\n\n/**\n * @description Creates a HTTP transport that connects to a JSON-RPC API.\n */\nexport function http<\n  rpcSchema extends RpcSchema | undefined = undefined,\n  raw extends boolean = false,\n>(\n  /** URL of the JSON-RPC API. Defaults to the chain's public RPC URL. */\n  url?: string | undefined,\n  config: HttpTransportConfig<rpcSchema, raw> = {},\n): HttpTransport<rpcSchema, raw> {\n  const {\n    batch,\n    fetchFn,\n    fetchOptions,\n    key = 'http',\n    methods,\n    name = 'HTTP JSON-RPC',\n    onFetchRequest,\n    onFetchResponse,\n    retryDelay,\n    raw,\n  } = config\n  return ({ chain, retryCount: retryCount_, timeout: timeout_ }) => {\n    const { batchSize = 1000, wait = 0 } =\n      typeof batch === 'object' ? batch : {}\n    const retryCount = config.retryCount ?? retryCount_\n    const timeout = timeout_ ?? config.timeout ?? 10_000\n    const url_ = url || chain?.rpcUrls.default.http[0]\n    if (!url_) throw new UrlRequiredError()\n\n    const rpcClient = getHttpRpcClient(url_, {\n      fetchFn,\n      fetchOptions,\n      onRequest: onFetchRequest,\n      onResponse: onFetchResponse,\n      timeout,\n    })\n\n    return createTransport(\n      {\n        key,\n        methods,\n        name,\n        async request({ method, params }) {\n          const body = { method, params }\n\n          const { schedule } = createBatchScheduler({\n            id: url_,\n            wait,\n            shouldSplitBatch(requests) {\n              return requests.length > batchSize\n            },\n            fn: (body: RpcRequest[]) =>\n              rpcClient.request({\n                body,\n              }),\n            sort: (a, b) => a.id - b.id,\n          })\n\n          const fn = async (body: RpcRequest) =>\n            batch\n              ? schedule(body)\n              : [\n                  await rpcClient.request({\n                    body,\n                  }),\n                ]\n\n          const [{ error, result }] = await fn(body)\n\n          if (raw) return { error, result }\n          if (error)\n            throw new RpcRequestError({\n              body,\n              error,\n              url: url_,\n            })\n          return result\n        },\n        retryCount,\n        retryDelay,\n        timeout,\n        type: 'http',\n      },\n      {\n        fetchOptions,\n        url: url_,\n      },\n    )\n  }\n}\n", "import type { Address } from 'abitype'\nimport { RpcRequestError } from '../../errors/request.js'\nimport {\n  UrlRequiredError,\n  type UrlRequiredErrorType,\n} from '../../errors/transport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hash, LogTopic } from '../../types/misc.js'\nimport type { RpcResponse } from '../../types/rpc.js'\nimport { getSocket } from '../../utils/rpc/compat.js'\nimport type { SocketRpcClient } from '../../utils/rpc/socket.js'\nimport {\n  type GetWebSocketRpcClientOptions,\n  getWebSocketRpcClient,\n} from '../../utils/rpc/webSocket.js'\nimport {\n  type CreateTransportErrorType,\n  createTransport,\n  type Transport,\n  type TransportConfig,\n} from './createTransport.js'\n\ntype WebSocketTransportSubscribeParameters = {\n  onData: (data: RpcResponse) => void\n  onError?: ((error: any) => void) | undefined\n}\n\ntype WebSocketTransportSubscribeReturnType = {\n  subscriptionId: Hash\n  unsubscribe: () => Promise<RpcResponse<boolean>>\n}\n\ntype WebSocketTransportSubscribe = {\n  subscribe(\n    args: WebSocketTransportSubscribeParameters &\n      (\n        | {\n            params: ['newHeads']\n          }\n        | {\n            params: ['newPendingTransactions']\n          }\n        | {\n            params: [\n              'logs',\n              {\n                address?: Address | Address[]\n                topics?: LogTopic[]\n              },\n            ]\n          }\n        | {\n            params: ['syncing']\n          }\n      ),\n  ): Promise<WebSocketTransportSubscribeReturnType>\n}\n\nexport type WebSocketTransportConfig = {\n  /**\n   * Whether or not to send keep-alive ping messages.\n   * @default true\n   */\n  keepAlive?: GetWebSocketRpcClientOptions['keepAlive'] | undefined\n  /** The key of the WebSocket transport. */\n  key?: TransportConfig['key'] | undefined\n  /** Methods to include or exclude from executing RPC requests. */\n  methods?: TransportConfig['methods'] | undefined\n  /** The name of the WebSocket transport. */\n  name?: TransportConfig['name'] | undefined\n  /**\n   * Whether or not to attempt to reconnect on socket failure.\n   * @default true\n   */\n  reconnect?: GetWebSocketRpcClientOptions['reconnect'] | undefined\n  /** The max number of times to retry. */\n  retryCount?: TransportConfig['retryCount'] | undefined\n  /** The base delay (in ms) between retries. */\n  retryDelay?: TransportConfig['retryDelay'] | undefined\n  /** The timeout (in ms) for async WebSocket requests. Default: 10_000 */\n  timeout?: TransportConfig['timeout'] | undefined\n}\n\nexport type WebSocketTransport = Transport<\n  'webSocket',\n  {\n    /**\n     * @deprecated use `getRpcClient` instead.\n     */\n    getSocket(): Promise<WebSocket>\n    getRpcClient(): Promise<SocketRpcClient<WebSocket>>\n    subscribe: WebSocketTransportSubscribe['subscribe']\n  }\n>\n\nexport type WebSocketTransportErrorType =\n  | CreateTransportErrorType\n  | UrlRequiredErrorType\n  | ErrorType\n\n/**\n * @description Creates a WebSocket transport that connects to a JSON-RPC API.\n */\nexport function webSocket(\n  /** URL of the JSON-RPC API. Defaults to the chain's public RPC URL. */\n  url?: string,\n  config: WebSocketTransportConfig = {},\n): WebSocketTransport {\n  const {\n    keepAlive,\n    key = 'webSocket',\n    methods,\n    name = 'WebSocket JSON-RPC',\n    reconnect,\n    retryDelay,\n  } = config\n  return ({ chain, retryCount: retryCount_, timeout: timeout_ }) => {\n    const retryCount = config.retryCount ?? retryCount_\n    const timeout = timeout_ ?? config.timeout ?? 10_000\n    const url_ = url || chain?.rpcUrls.default.webSocket?.[0]\n    const wsRpcClientOpts = { keepAlive, reconnect }\n    if (!url_) throw new UrlRequiredError()\n    return createTransport(\n      {\n        key,\n        methods,\n        name,\n        async request({ method, params }) {\n          const body = { method, params }\n          const rpcClient = await getWebSocketRpcClient(url_, wsRpcClientOpts)\n          const { error, result } = await rpcClient.requestAsync({\n            body,\n            timeout,\n          })\n          if (error)\n            throw new RpcRequestError({\n              body,\n              error,\n              url: url_,\n            })\n          return result\n        },\n        retryCount,\n        retryDelay,\n        timeout,\n        type: 'webSocket',\n      },\n      {\n        getSocket() {\n          return getSocket(url_)\n        },\n        getRpcClient() {\n          return getWebSocketRpcClient(url_, wsRpcClientOpts)\n        },\n        async subscribe({ params, onData, onError }: any) {\n          const rpcClient = await getWebSocketRpcClient(url_, wsRpcClientOpts)\n          const { result: subscriptionId } = await new Promise<any>(\n            (resolve, reject) =>\n              rpcClient.request({\n                body: {\n                  method: 'eth_subscribe',\n                  params,\n                },\n                onError(error) {\n                  reject(error)\n                  onError?.(error)\n                  return\n                },\n                onResponse(response) {\n                  if (response.error) {\n                    reject(response.error)\n                    onError?.(response.error)\n                    return\n                  }\n\n                  if (typeof response.id === 'number') {\n                    resolve(response)\n                    return\n                  }\n                  if (response.method !== 'eth_subscription') return\n                  onData(response.params)\n                },\n              }),\n          )\n          return {\n            subscriptionId,\n            async unsubscribe() {\n              return new Promise<any>((resolve) =>\n                rpcClient.request({\n                  body: {\n                    method: 'eth_unsubscribe',\n                    params: [subscriptionId],\n                  },\n                  onResponse: resolve,\n                }),\n              )\n            },\n          }\n        },\n      },\n    )\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport type * as BlockOverrides from 'ox/BlockOverrides'\nimport type * as Rpc from 'ox/RpcResponse'\nimport type {\n  RpcEstimateUserOperationGasReturnType,\n  RpcGetUserOperationByHashReturnType,\n  RpcUserOperation,\n  RpcUserOperationReceipt,\n} from '../account-abstraction/types/rpc.js'\nimport type { BlockTag } from './block.js'\nimport type { Capabilities, ChainIdToCapabilities } from './capabilities.js'\nimport type { Hash, Hex, LogTopic } from './misc.js'\nimport type {\n  RpcBlock as Block,\n  RpcBlockIdentifier as BlockIdentifier,\n  RpcBlockNumber as BlockNumber,\n  RpcFeeHistory as FeeHistory,\n  RpcLog as Log,\n  RpcProof as Proof,\n  Quantity,\n  RpcStateOverride,\n  RpcTransaction as Transaction,\n  RpcTransactionReceipt as TransactionReceipt,\n  RpcTransactionRequest as TransactionRequest,\n  RpcUncle as Uncle,\n} from './rpc.js'\nimport type { AccessList } from './transaction.js'\nimport type { ExactPartial, OneOf, PartialBy, Prettify } from './utils.js'\n\n//////////////////////////////////////////////////\n// Provider\n\nexport type EIP1474Methods = [\n  ...PublicRpcSchema,\n  ...WalletRpcSchema,\n  ...BundlerRpcSchema,\n  ...PaymasterRpcSchema,\n]\n\nexport type EIP1193Provider = Prettify<\n  EIP1193Events & {\n    request: EIP1193RequestFn<EIP1474Methods>\n  }\n>\n\n//////////////////////////////////////////////////\n// Errors\n\nexport type ProviderRpcErrorType = ProviderRpcError & {\n  name: 'ProviderRpcError'\n}\nexport class ProviderRpcError extends Error {\n  code: number\n  details: string\n\n  constructor(code: number, message: string) {\n    super(message)\n    this.code = code\n    this.details = message\n  }\n}\n\n//////////////////////////////////////////////////\n// Provider Events\n\nexport type ProviderConnectInfo = {\n  chainId: string\n}\n\nexport type ProviderMessage = {\n  type: string\n  data: unknown\n}\n\nexport type EIP1193EventMap = {\n  accountsChanged(accounts: Address[]): void\n  chainChanged(chainId: string): void\n  connect(connectInfo: ProviderConnectInfo): void\n  disconnect(error: ProviderRpcError): void\n  message(message: ProviderMessage): void\n}\n\nexport type EIP1193Events = {\n  on<event extends keyof EIP1193EventMap>(\n    event: event,\n    listener: EIP1193EventMap[event],\n  ): void\n  removeListener<event extends keyof EIP1193EventMap>(\n    event: event,\n    listener: EIP1193EventMap[event],\n  ): void\n}\n\n//////////////////////////////////////////////////\n// Provider Requests\n\nexport type AddEthereumChainParameter = {\n  /** A 0x-prefixed hexadecimal string */\n  chainId: string\n  /** The chain name. */\n  chainName: string\n  /** Native currency for the chain. */\n  nativeCurrency?:\n    | {\n        name: string\n        symbol: string\n        decimals: number\n      }\n    | undefined\n  rpcUrls: readonly string[]\n  blockExplorerUrls?: string[] | undefined\n  iconUrls?: string[] | undefined\n}\n\nexport type NetworkSync = {\n  /** The current block number */\n  currentBlock: Quantity\n  /** Number of latest block on the network */\n  highestBlock: Quantity\n  /** Block number at which syncing started */\n  startingBlock: Quantity\n}\n\nexport type WalletCallReceipt<quantity = Hex, status = Hex> = {\n  logs: {\n    address: Hex\n    data: Hex\n    topics: Hex[]\n  }[]\n  status: status\n  blockHash: Hex\n  blockNumber: quantity\n  gasUsed: quantity\n  transactionHash: Hex\n}\n\nexport type WalletGrantPermissionsParameters = {\n  signer?:\n    | {\n        type: string\n        data?: unknown | undefined\n      }\n    | undefined\n  permissions: readonly {\n    data: unknown\n    policies: readonly {\n      data: unknown\n      type: string\n    }[]\n    required?: boolean | undefined\n    type: string\n  }[]\n  expiry: number\n}\n\nexport type WalletGrantPermissionsReturnType = {\n  expiry: number\n  factory?: `0x${string}` | undefined\n  factoryData?: string | undefined\n  grantedPermissions: readonly {\n    data: unknown\n    policies: readonly {\n      data: unknown\n      type: string\n    }[]\n    required?: boolean | undefined\n    type: string\n  }[]\n  permissionsContext: string\n  signerData?:\n    | {\n        userOpBuilder?: `0x${string}` | undefined\n        submitToAddress?: `0x${string}` | undefined\n      }\n    | undefined\n}\n\nexport type WalletGetAssetsParameters = {\n  account: Address\n  assetFilter?:\n    | {\n        [chainId: Hex]: readonly {\n          address: Address\n          type: 'native' | 'erc20' | 'erc721' | (string & {})\n        }[]\n      }\n    | undefined\n  assetTypeFilter?:\n    | readonly ('native' | 'erc20' | 'erc721' | (string & {}))[]\n    | undefined\n  chainFilter?: readonly Hex[] | undefined\n}\n\nexport type WalletGetAssetsReturnType = {\n  [chainId: Hex]: readonly {\n    address: Address | 'native'\n    balance: Hex\n    metadata?: unknown | undefined\n    type: 'native' | 'erc20' | 'erc721' | (string & {})\n  }[]\n}\n\nexport type WalletGetCallsStatusReturnType<\n  capabilities extends Capabilities = Capabilities,\n  numberType = Hex,\n  bigintType = Hex,\n  receiptStatus = Hex,\n> = {\n  atomic: boolean\n  capabilities?: capabilities | Capabilities | undefined\n  chainId: numberType\n  id: string\n  receipts?: WalletCallReceipt<bigintType, receiptStatus>[] | undefined\n  status: number\n  version: string\n}\n\nexport type WalletPermissionCaveat = {\n  type: string\n  value: any\n}\n\nexport type WalletPermission = {\n  caveats: WalletPermissionCaveat[]\n  date: number\n  id: string\n  invoker: `http://${string}` | `https://${string}`\n  parentCapability: 'eth_accounts' | string\n}\n\nexport type WalletSendCallsParameters<\n  capabilities extends Capabilities = Capabilities,\n  chainId extends Hex | number = Hex,\n  quantity extends Quantity | bigint = Quantity,\n> = [\n  {\n    atomicRequired: boolean\n    calls: readonly {\n      capabilities?: capabilities | Capabilities | undefined\n      to?: Address | undefined\n      data?: Hex | undefined\n      value?: quantity | undefined\n    }[]\n    capabilities?: capabilities | Capabilities | undefined\n    chainId?: chainId | undefined\n    id?: string | undefined\n    from?: Address | undefined\n    version: string\n  },\n]\n\nexport type WalletSendCallsReturnType<\n  capabilities extends Capabilities = Capabilities,\n> = {\n  capabilities?: capabilities | undefined\n  id: string\n}\n\nexport type WatchAssetParams = {\n  /** Token type. */\n  type: 'ERC20'\n  options: {\n    /** The address of the token contract */\n    address: string\n    /** A ticker symbol or shorthand, up to 11 characters */\n    symbol: string\n    /** The number of token decimals */\n    decimals: number\n    /** A string url of the token logo */\n    image?: string | undefined\n  }\n}\n\nexport type BundlerRpcSchema = [\n  /**\n   * @description Returns the chain ID associated with the current network\n   *\n   * @link https://eips.ethereum.org/EIPS/eip-4337#-eth_chainid\n   */\n  {\n    Method: 'eth_chainId'\n    Parameters?: undefined\n    ReturnType: Hex\n  },\n  /**\n   * @description Estimate the gas values for a UserOperation.\n   *\n   * @link https://eips.ethereum.org/EIPS/eip-4337#-eth_estimateuseroperationgas\n   *\n   * @example\n   * provider.request({\n   *  method: 'eth_estimateUserOperationGas',\n   *  params: [{ ... }]\n   * })\n   * // => { ... }\n   */\n  {\n    Method: 'eth_estimateUserOperationGas'\n    Parameters:\n      | [userOperation: RpcUserOperation, entrypoint: Address]\n      | [\n          userOperation: RpcUserOperation,\n          entrypoint: Address,\n          stateOverrideSet: RpcStateOverride,\n        ]\n    ReturnType: RpcEstimateUserOperationGasReturnType\n  },\n  /**\n   * @description Return a UserOperation based on a hash.\n   *\n   * @link https://eips.ethereum.org/EIPS/eip-4337#-eth_getuseroperationbyhash\n   *\n   * @example\n   * provider.request({\n   *  method: 'eth_getUserOperationByHash',\n   *  params: ['0x...']\n   * })\n   * // => { ... }\n   */\n  {\n    Method: 'eth_getUserOperationByHash'\n    Parameters: [hash: Hash]\n    ReturnType: RpcGetUserOperationByHashReturnType | null\n  },\n  /**\n   * @description Return a UserOperation receipt based on a hash.\n   *\n   * @link https://eips.ethereum.org/EIPS/eip-4337#-eth_getuseroperationreceipt\n   *\n   * @example\n   * provider.request({\n   *  method: 'eth_getUserOperationReceipt',\n   *  params: ['0x...']\n   * })\n   * // => { ... }\n   */\n  {\n    Method: 'eth_getUserOperationReceipt'\n    Parameters: [hash: Hash]\n    ReturnType: RpcUserOperationReceipt | null\n  },\n  /**\n   * @description Submits a User Operation object to the User Operation pool of the client.\n   *\n   * @link https://eips.ethereum.org/EIPS/eip-4337#-eth_senduseroperation\n   *\n   * @example\n   * provider.request({\n   *  method: 'eth_sendUserOperation',\n   *  params: [{ ... }]\n   * })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_sendUserOperation'\n    Parameters: [userOperation: RpcUserOperation, entrypoint: Address]\n    ReturnType: Hash\n  },\n  /**\n   * @description Return the list of supported entry points by the client.\n   *\n   * @link https://eips.ethereum.org/EIPS/eip-4337#-eth_supportedentrypoints\n   */\n  {\n    Method: 'eth_supportedEntryPoints'\n    Parameters?: undefined\n    ReturnType: readonly Address[]\n  },\n]\n\nexport type DebugBundlerRpcSchema = [\n  /**\n   * @description Clears the bundler mempool and reputation data of paymasters/accounts/factories/aggregators.\n   *\n   * @link https://github.com/eth-infinitism/bundler-spec/blob/a247b5de59a702063ea5b09d6136f119a061642b/src/debug/debug.yaml#L1\n   */\n  {\n    Method: 'debug_bundler_clearState'\n    Parameters?: undefined\n    ReturnType: undefined\n  },\n  /**\n   * @description Returns the current mempool\n   *\n   * @link https://github.com/eth-infinitism/bundler-spec/blob/a247b5de59a702063ea5b09d6136f119a061642b/src/debug/debug.yaml#L8\n   */\n  {\n    Method: 'debug_bundler_dumpMempool'\n    Parameters: [entryPoint: Address]\n    ReturnType: readonly { userOp: RpcUserOperation }[]\n  },\n  /**\n   * @description Forces the bundler to execute the entire current mempool.\n   *\n   * @link https://github.com/eth-infinitism/bundler-spec/blob/a247b5de59a702063ea5b09d6136f119a061642b/src/debug/debug.yaml#L19\n   */\n  {\n    Method: 'debug_bundler_sendBundleNow'\n    Parameters?: undefined\n    ReturnType: Hash\n  },\n  /**\n   * @description Toggles bundling mode between 'auto' and 'manual'\n   *\n   * @link https://github.com/eth-infinitism/bundler-spec/blob/a247b5de59a702063ea5b09d6136f119a061642b/src/debug/debug.yaml#L26\n   */\n  {\n    Method: 'debug_bundler_setBundlingMode'\n    Parameters: [mode: 'auto' | 'manual']\n    ReturnType: undefined\n  },\n  /**\n   * @description Sets reputation of given addresses.\n   *\n   * @link https://github.com/eth-infinitism/bundler-spec/blob/a247b5de59a702063ea5b09d6136f119a061642b/src/debug/debug.yaml#L37\n   */\n  {\n    Method: 'debug_bundler_setReputation'\n    Parameters: [\n      reputations: readonly {\n        address: Address\n        opsSeen: Hex\n        opsIncluded: Hex\n      }[],\n      entryPoint: Address,\n    ]\n    ReturnType: undefined\n  },\n  /**\n   * @description Returns the reputation data of all observed addresses.\n   *\n   * @link https://github.com/eth-infinitism/bundler-spec/blob/a247b5de59a702063ea5b09d6136f119a061642b/src/debug/debug.yaml#L52\n   */\n  {\n    Method: 'debug_bundler_dumpReputation'\n    Parameters: [entryPoint: Address]\n    ReturnType: readonly {\n      address: Address\n      opsSeen: Hex\n      opsIncluded: Hex\n    }[]\n  },\n  /**\n   * @description Add a bulk of UserOps into the mempool\n   *\n   * @link https://github.com/eth-infinitism/bundler-spec/blob/a247b5de59a702063ea5b09d6136f119a061642b/src/debug/debug.yaml#L64\n   */\n  {\n    Method: 'debug_bundler_addUserOps'\n    Parameters: [userOps: readonly RpcUserOperation[], entryPoint: Address]\n    ReturnType: undefined\n  },\n]\n\nexport type PaymasterRpcSchema = [\n  /**\n   * @description Returns the chain ID associated with the current network\n   *\n   * @link https://eips.ethereum.org/EIPS/eip-4337#-eth_chainid\n   */\n  {\n    Method: 'pm_getPaymasterStubData'\n    Parameters?: [\n      userOperation: OneOf<\n        | PartialBy<\n            Pick<\n              RpcUserOperation<'0.6'>,\n              | 'callData'\n              | 'callGasLimit'\n              | 'initCode'\n              | 'maxFeePerGas'\n              | 'maxPriorityFeePerGas'\n              | 'nonce'\n              | 'sender'\n              | 'preVerificationGas'\n              | 'verificationGasLimit'\n            >,\n            | 'callGasLimit'\n            | 'initCode'\n            | 'maxFeePerGas'\n            | 'maxPriorityFeePerGas'\n            | 'preVerificationGas'\n            | 'verificationGasLimit'\n          >\n        | PartialBy<\n            Pick<\n              RpcUserOperation<'0.7'>,\n              | 'callData'\n              | 'callGasLimit'\n              | 'factory'\n              | 'factoryData'\n              | 'maxFeePerGas'\n              | 'maxPriorityFeePerGas'\n              | 'nonce'\n              | 'sender'\n              | 'preVerificationGas'\n              | 'verificationGasLimit'\n            >,\n            | 'callGasLimit'\n            | 'factory'\n            | 'factoryData'\n            | 'maxFeePerGas'\n            | 'maxPriorityFeePerGas'\n            | 'preVerificationGas'\n            | 'verificationGasLimit'\n          >\n      >,\n      entrypoint: Address,\n      chainId: Hex,\n      context: unknown,\n    ]\n    ReturnType: OneOf<\n      | { paymasterAndData: Hex }\n      | {\n          paymaster: Address\n          paymasterData: Hex\n          paymasterVerificationGasLimit: Hex\n          paymasterPostOpGasLimit: Hex\n        }\n    > & {\n      sponsor?: { name: string; icon?: string | undefined } | undefined\n      isFinal?: boolean | undefined\n    }\n  },\n  /**\n   * @description Returns values to be used in paymaster-related fields of a signed user operation.\n   *\n   * @link https://github.com/ethereum/ERCs/blob/master/ERCS/erc-7677.md#pm_getpaymasterdata\n   */\n  {\n    Method: 'pm_getPaymasterData'\n    Parameters?: [\n      userOperation:\n        | Pick<\n            RpcUserOperation<'0.6'>,\n            | 'callData'\n            | 'callGasLimit'\n            | 'initCode'\n            | 'maxFeePerGas'\n            | 'maxPriorityFeePerGas'\n            | 'nonce'\n            | 'sender'\n            | 'preVerificationGas'\n            | 'verificationGasLimit'\n          >\n        | Pick<\n            RpcUserOperation<'0.7'>,\n            | 'callData'\n            | 'callGasLimit'\n            | 'factory'\n            | 'factoryData'\n            | 'maxFeePerGas'\n            | 'maxPriorityFeePerGas'\n            | 'nonce'\n            | 'sender'\n            | 'preVerificationGas'\n            | 'verificationGasLimit'\n          >,\n      entrypoint: Address,\n      chainId: Hex,\n      context: unknown,\n    ]\n    ReturnType: OneOf<\n      | { paymasterAndData: Hex }\n      | {\n          paymaster: Address\n          paymasterData: Hex\n          paymasterVerificationGasLimit: Hex\n          paymasterPostOpGasLimit: Hex\n        }\n    >\n  },\n]\n\nexport type PublicRpcSchema = [\n  /**\n   * @description Returns the version of the current client\n   *\n   * @example\n   * provider.request({ method: 'web3_clientVersion' })\n   * // => 'MetaMask/v1.0.0'\n   */\n  {\n    Method: 'web3_clientVersion'\n    Parameters?: undefined\n    ReturnType: string\n  },\n  /**\n   * @description Hashes data using the Keccak-256 algorithm\n   *\n   * @example\n   * provider.request({ method: 'web3_sha3', params: ['0x68656c6c6f20776f726c64'] })\n   * // => '0xc94770007dda54cF92009BFF0dE90c06F603a09f'\n   */\n  {\n    Method: 'web3_sha3'\n    Parameters: [data: Hash]\n    ReturnType: string\n  },\n  /**\n   * @description Determines if this client is listening for new network connections\n   *\n   * @example\n   * provider.request({ method: 'net_listening' })\n   * // => true\n   */\n  {\n    Method: 'net_listening'\n    Parameters?: undefined\n    ReturnType: boolean\n  },\n  /**\n   * @description Returns the number of peers currently connected to this client\n   *\n   * @example\n   * provider.request({ method: 'net_peerCount' })\n   * // => '0x1'\n   */\n  {\n    Method: 'net_peerCount'\n    Parameters?: undefined\n    ReturnType: Quantity\n  },\n  /**\n   * @description Returns the chain ID associated with the current network\n   *\n   * @example\n   * provider.request({ method: 'net_version' })\n   * // => '1'\n   */\n  {\n    Method: 'net_version'\n    Parameters?: undefined\n    ReturnType: Quantity\n  },\n  /**\n   * @description Returns the base fee per blob gas in wei.\n   *\n   * @example\n   * provider.request({ method: 'eth_blobBaseFee' })\n   * // => '0x09184e72a000'\n   */\n  {\n    Method: 'eth_blobBaseFee'\n    Parameters?: undefined\n    ReturnType: Quantity\n  },\n  /**\n   * @description Returns the number of the most recent block seen by this client\n   *\n   * @example\n   * provider.request({ method: 'eth_blockNumber' })\n   * // => '0x1b4'\n   */\n  {\n    Method: 'eth_blockNumber'\n    Parameters?: undefined\n    ReturnType: Quantity\n  },\n  /**\n   * @description Executes a new message call immediately without submitting a transaction to the network\n   *\n   * @example\n   * provider.request({ method: 'eth_call', params: [{ to: '0x...', data: '0x...' }] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_call'\n    Parameters:\n      | readonly [transaction: ExactPartial<TransactionRequest>]\n      | readonly [\n          transaction: ExactPartial<TransactionRequest>,\n          block: BlockNumber | BlockTag | BlockIdentifier,\n        ]\n      | readonly [\n          transaction: ExactPartial<TransactionRequest>,\n          block: BlockNumber | BlockTag | BlockIdentifier,\n          stateOverrideSet: RpcStateOverride,\n        ]\n      | readonly [\n          transaction: ExactPartial<TransactionRequest>,\n          block: BlockNumber | BlockTag | BlockIdentifier,\n          stateOverrideSet: RpcStateOverride,\n          blockOverrides: BlockOverrides.Rpc,\n        ]\n    ReturnType: Hex\n  },\n  /**\n   * @description Creates an EIP-2930 access list that can be included in a transaction.\n   *\n   * @example\n   * provider.request({ method: 'eth_createAccessList', params: [{ to: '0x...', data: '0x...' }] })\n   * // => {\n   * //   accessList: ['0x...', '0x...'],\n   * //   gasUsed: '0x123',\n   * // }\n   */\n  {\n    Method: 'eth_createAccessList'\n    Parameters:\n      | [transaction: ExactPartial<TransactionRequest>]\n      | [\n          transaction: ExactPartial<TransactionRequest>,\n          block: BlockNumber | BlockTag | BlockIdentifier,\n        ]\n    ReturnType: {\n      accessList: AccessList\n      gasUsed: Quantity\n    }\n  },\n  /**\n   * @description Returns the chain ID associated with the current network\n   * @example\n   * provider.request({ method: 'eth_chainId' })\n   * // => '1'\n   */\n  {\n    Method: 'eth_chainId'\n    Parameters?: undefined\n    ReturnType: Quantity\n  },\n  /**\n   * @description Returns the client coinbase address.\n   * @example\n   * provider.request({ method: 'eth_coinbase' })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_coinbase'\n    Parameters?: undefined\n    ReturnType: Address\n  },\n  /**\n   * @description Estimates the gas necessary to complete a transaction without submitting it to the network\n   *\n   * @example\n   * provider.request({\n   *  method: 'eth_estimateGas',\n   *  params: [{ from: '0x...', to: '0x...', value: '0x...' }]\n   * })\n   * // => '0x5208'\n   */\n  {\n    Method: 'eth_estimateGas'\n    Parameters:\n      | [transaction: TransactionRequest]\n      | [transaction: TransactionRequest, block: BlockNumber | BlockTag]\n      | [\n          transaction: TransactionRequest,\n          block: BlockNumber | BlockTag,\n          stateOverride: RpcStateOverride,\n        ]\n    ReturnType: Quantity\n  },\n  /**\n   * @description Fills a transaction with the necessary data to be signed.\n   *\n   * @example\n   * provider.request({ method: 'eth_fillTransaction', params: [{ from: '0x...', to: '0x...', value: '0x...' }] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_fillTransaction'\n    Parameters: [transaction: TransactionRequest]\n    ReturnType: {\n      capabilities?: Record<string, unknown> | undefined\n      raw: Hex\n      tx: Transaction\n    }\n  },\n  /**\n   * @description Returns a collection of historical gas information\n   *\n   * @example\n   * provider.request({\n   *  method: 'eth_feeHistory',\n   *  params: ['4', 'latest', ['25', '75']]\n   * })\n   * // => {\n   * //   oldestBlock: '0x1',\n   * //   baseFeePerGas: ['0x1', '0x2', '0x3', '0x4'],\n   * //   gasUsedRatio: ['0x1', '0x2', '0x3', '0x4'],\n   * //   reward: [['0x1', '0x2'], ['0x3', '0x4'], ['0x5', '0x6'], ['0x7', '0x8']]\n   * // }\n   * */\n  {\n    Method: 'eth_feeHistory'\n    Parameters: [\n      /** Number of blocks in the requested range. Between 1 and 1024 blocks can be requested in a single query. Less than requested may be returned if not all blocks are available. */\n      blockCount: Quantity,\n      /** Highest number block of the requested range. */\n      newestBlock: BlockNumber | BlockTag,\n      /** A monotonically increasing list of percentile values to sample from each block's effective priority fees per gas in ascending order, weighted by gas used. */\n      rewardPercentiles: number[] | undefined,\n    ]\n    ReturnType: FeeHistory\n  },\n  /**\n   * @description Returns the current price of gas expressed in wei\n   *\n   * @example\n   * provider.request({ method: 'eth_gasPrice' })\n   * // => '0x09184e72a000'\n   */\n  {\n    Method: 'eth_gasPrice'\n    Parameters?: undefined\n    ReturnType: Quantity\n  },\n  /**\n   * @description Returns the balance of an address in wei\n   *\n   * @example\n   * provider.request({ method: 'eth_getBalance', params: ['0x...', 'latest'] })\n   * // => '0x12a05...'\n   */\n  {\n    Method: 'eth_getBalance'\n    Parameters: [\n      address: Address,\n      block: BlockNumber | BlockTag | BlockIdentifier,\n    ]\n    ReturnType: Quantity\n  },\n  /**\n   * @description Returns information about a block specified by hash\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getBlockByHash', params: ['0x...', true] })\n   * // => {\n   * //   number: '0x1b4',\n   * //   hash: '0x...',\n   * //   parentHash: '0x...',\n   * //   ...\n   * // }\n   */\n  {\n    Method: 'eth_getBlockByHash'\n    Parameters: [\n      /** hash of a block */\n      hash: Hash,\n      /** true will pull full transaction objects, false will pull transaction hashes */\n      includeTransactionObjects: boolean,\n    ]\n    ReturnType: Block | null\n  },\n  /**\n   * @description Returns information about a block specified by number\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getBlockByNumber', params: ['0x1b4', true] })\n   * // => {\n   * //   number: '0x1b4',\n   * //   hash: '0x...',\n   * //   parentHash: '0x...',\n   * //   ...\n   * // }\n   */\n  {\n    Method: 'eth_getBlockByNumber'\n    Parameters: [\n      /** block number, or one of \"latest\", \"safe\", \"finalized\", \"earliest\" or \"pending\" */\n      block: BlockNumber | BlockTag,\n      /** true will pull full transaction objects, false will pull transaction hashes */\n      includeTransactionObjects: boolean,\n    ]\n    ReturnType: Block | null\n  },\n  /**\n   * @description Returns the number of transactions in a block specified by block hash\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getBlockTransactionCountByHash', params: ['0x...'] })\n   * // => '0x1'\n   */\n  {\n    Method: 'eth_getBlockTransactionCountByHash'\n    Parameters: [hash: Hash]\n    ReturnType: Quantity\n  },\n  /**\n   * @description Returns the number of transactions in a block specified by block number\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getBlockTransactionCountByNumber', params: ['0x1b4'] })\n   * // => '0x1'\n   */\n  {\n    Method: 'eth_getBlockTransactionCountByNumber'\n    Parameters: [block: BlockNumber | BlockTag]\n    ReturnType: Quantity\n  },\n  /**\n   * @description Returns the contract code stored at a given address\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getCode', params: ['0x...', 'latest'] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_getCode'\n    Parameters: [\n      address: Address,\n      block: BlockNumber | BlockTag | BlockIdentifier,\n    ]\n    ReturnType: Hex\n  },\n  /**\n   * @description Returns a list of all logs based on filter ID since the last log retrieval\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getFilterChanges', params: ['0x...'] })\n   * // => [{ ... }, { ... }]\n   */\n  {\n    Method: 'eth_getFilterChanges'\n    Parameters: [filterId: Quantity]\n    ReturnType: Log[] | Hex[]\n  },\n  /**\n   * @description Returns a list of all logs based on filter ID\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getFilterLogs', params: ['0x...'] })\n   * // => [{ ... }, { ... }]\n   */\n  {\n    Method: 'eth_getFilterLogs'\n    Parameters: [filterId: Quantity]\n    ReturnType: Log[]\n  },\n  /**\n   * @description Returns a list of all logs based on a filter object\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getLogs', params: [{ fromBlock: '0x...', toBlock: '0x...', address: '0x...', topics: ['0x...'] }] })\n   * // => [{ ... }, { ... }]\n   */\n  {\n    Method: 'eth_getLogs'\n    Parameters: [\n      {\n        address?: Address | Address[] | undefined\n        topics?: LogTopic[] | undefined\n      } & (\n        | {\n            fromBlock?: BlockNumber | BlockTag | undefined\n            toBlock?: BlockNumber | BlockTag | undefined\n            blockHash?: undefined\n          }\n        | {\n            fromBlock?: undefined\n            toBlock?: undefined\n            blockHash?: Hash | undefined\n          }\n      ),\n    ]\n    ReturnType: Log[]\n  },\n  /**\n   * @description Returns the account and storage values of the specified account including the Merkle-proof.\n   * @link https://eips.ethereum.org/EIPS/eip-1186\n   * @example\n   * provider.request({ method: 'eth_getProof', params: ['0x...', ['0x...'], 'latest'] })\n   * // => {\n   * //   ...\n   * // }\n   */\n  {\n    Method: 'eth_getProof'\n    Parameters: [\n      /** Address of the account. */\n      address: Address,\n      /** An array of storage-keys that should be proofed and included. */\n      storageKeys: Hash[],\n      block: BlockNumber | BlockTag,\n    ]\n    ReturnType: Proof\n  },\n  /**\n   * @description Returns the value from a storage position at an address\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getStorageAt', params: ['0x...', '0x...', 'latest'] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_getStorageAt'\n    Parameters: [\n      address: Address,\n      index: Quantity,\n      block: BlockNumber | BlockTag | BlockIdentifier,\n    ]\n    ReturnType: Hex\n  },\n  /**\n   * @description Returns information about a transaction specified by block hash and transaction index\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getTransactionByBlockHashAndIndex', params: ['0x...', '0x...'] })\n   * // => { ... }\n   */\n  {\n    Method: 'eth_getTransactionByBlockHashAndIndex'\n    Parameters: [hash: Hash, index: Quantity]\n    ReturnType: Transaction | null\n  },\n  /**\n   * @description Returns information about a transaction specified by block number and transaction index\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getTransactionByBlockNumberAndIndex', params: ['0x...', '0x...'] })\n   * // => { ... }\n   */\n  {\n    Method: 'eth_getTransactionByBlockNumberAndIndex'\n    Parameters: [block: BlockNumber | BlockTag, index: Quantity]\n    ReturnType: Transaction | null\n  },\n  /**\n   * @description Returns information about a transaction specified by hash\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getTransactionByHash', params: ['0x...'] })\n   * // => { ... }\n   */\n  {\n    Method: 'eth_getTransactionByHash'\n    Parameters: [hash: Hash]\n    ReturnType: Transaction | null\n  },\n  /**\n   * @description Returns information about a transaction specified by sender and nonce\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getTransactionBySenderAndNonce', params: ['0x...', '0x...'] })\n   * // => { ... }\n   */\n  {\n    Method: 'eth_getTransactionBySenderAndNonce'\n    Parameters: [sender: Address, nonce: Quantity]\n    ReturnType: Transaction | null\n  },\n  /**\n   * @description Returns the number of transactions sent from an address\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getTransactionCount', params: ['0x...', 'latest'] })\n   * // => '0x1'\n   */\n  {\n    Method: 'eth_getTransactionCount'\n    Parameters: [\n      address: Address,\n      block: BlockNumber | BlockTag | BlockIdentifier,\n    ]\n    ReturnType: Quantity\n  },\n  /**\n   * @description Returns the receipt of a transaction specified by hash\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getTransactionReceipt', params: ['0x...'] })\n   * // => { ... }\n   */\n  {\n    Method: 'eth_getTransactionReceipt'\n    Parameters: [hash: Hash]\n    ReturnType: TransactionReceipt | null\n  },\n  /**\n   * @description Returns information about an uncle specified by block hash and uncle index position\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getUncleByBlockHashAndIndex', params: ['0x...', '0x...'] })\n   * // => { ... }\n   */\n  {\n    Method: 'eth_getUncleByBlockHashAndIndex'\n    Parameters: [hash: Hash, index: Quantity]\n    ReturnType: Uncle | null\n  },\n  /**\n   * @description Returns information about an uncle specified by block number and uncle index position\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getUncleByBlockNumberAndIndex', params: ['0x...', '0x...'] })\n   * // => { ... }\n   */\n  {\n    Method: 'eth_getUncleByBlockNumberAndIndex'\n    Parameters: [block: BlockNumber | BlockTag, index: Quantity]\n    ReturnType: Uncle | null\n  },\n  /**\n   * @description Returns the number of uncles in a block specified by block hash\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getUncleCountByBlockHash', params: ['0x...'] })\n   * // => '0x1'\n   */\n  {\n    Method: 'eth_getUncleCountByBlockHash'\n    Parameters: [hash: Hash]\n    ReturnType: Quantity\n  },\n  /**\n   * @description Returns the number of uncles in a block specified by block number\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_getUncleCountByBlockNumber', params: ['0x...'] })\n   * // => '0x1'\n   */\n  {\n    Method: 'eth_getUncleCountByBlockNumber'\n    Parameters: [block: BlockNumber | BlockTag]\n    ReturnType: Quantity\n  },\n  /**\n   * @description Returns the current maxPriorityFeePerGas in wei.\n   * @link https://ethereum.github.io/execution-apis/api-documentation/\n   * @example\n   * provider.request({ method: 'eth_maxPriorityFeePerGas' })\n   * // => '0x5f5e100'\n   */\n  {\n    Method: 'eth_maxPriorityFeePerGas'\n    Parameters?: undefined\n    ReturnType: Quantity\n  },\n  /**\n   * @description Creates a filter to listen for new blocks that can be used with `eth_getFilterChanges`\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_newBlockFilter' })\n   * // => '0x1'\n   */\n  {\n    Method: 'eth_newBlockFilter'\n    Parameters?: undefined\n    ReturnType: Quantity\n  },\n  /**\n   * @description Creates a filter to listen for specific state changes that can then be used with `eth_getFilterChanges`\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_newFilter', params: [{ fromBlock: '0x...', toBlock: '0x...', address: '0x...', topics: ['0x...'] }] })\n   * // => '0x1'\n   */\n  {\n    Method: 'eth_newFilter'\n    Parameters: [\n      filter: {\n        fromBlock?: BlockNumber | BlockTag | undefined\n        toBlock?: BlockNumber | BlockTag | undefined\n        address?: Address | Address[] | undefined\n        topics?: LogTopic[] | undefined\n      },\n    ]\n    ReturnType: Quantity\n  },\n  /**\n   * @description Creates a filter to listen for new pending transactions that can be used with `eth_getFilterChanges`\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_newPendingTransactionFilter' })\n   * // => '0x1'\n   */\n  {\n    Method: 'eth_newPendingTransactionFilter'\n    Parameters?: undefined\n    ReturnType: Quantity\n  },\n  /**\n   * @description Returns the current Ethereum protocol version\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_protocolVersion' })\n   * // => '54'\n   */\n  {\n    Method: 'eth_protocolVersion'\n    Parameters?: undefined\n    ReturnType: string\n  },\n  /**\n   * @description Sends a **signed** transaction to the network\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_sendRawTransaction', params: ['0x...'] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_sendRawTransaction'\n    Parameters: [signedTransaction: Hex]\n    ReturnType: Hash\n  },\n  /**\n   * @description Sends a **signed** transaction to the network synchronously\n   * @link https://eips.ethereum.org/EIPS/eip-7966\n   * @example\n   * provider.request({ method: 'eth_sendRawTransactionSync', params: ['0x...'] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_sendRawTransactionSync'\n    Parameters:\n      | [signedTransaction: Hex]\n      | [signedTransaction: Hex, timeout: number]\n    ReturnType: TransactionReceipt\n  },\n  /**\n   * @description Simulates execution of a set of calls with optional block and state overrides.\n   * @example\n   * provider.request({ method: 'eth_simulateV1', params: [{ blockStateCalls: [{ calls: [{ from: '0x...', to: '0x...', value: '0x...', data: '0x...' }] }] }, 'latest'] })\n   * // => { ... }\n   */\n  {\n    Method: 'eth_simulateV1'\n    Parameters: [\n      {\n        blockStateCalls: readonly {\n          blockOverrides?: BlockOverrides.Rpc | undefined\n          calls?: readonly ExactPartial<TransactionRequest>[] | undefined\n          stateOverrides?: RpcStateOverride | undefined\n        }[]\n        returnFullTransactions?: boolean | undefined\n        traceTransfers?: boolean | undefined\n        validation?: boolean | undefined\n      },\n      BlockNumber | BlockTag,\n    ]\n    ReturnType: readonly (Block & {\n      calls: readonly {\n        error?:\n          | {\n              data?: Hex | undefined\n              code: number\n              message: string\n            }\n          | undefined\n        logs?: readonly Log[] | undefined\n        gasUsed: Hex\n        returnData: Hex\n        status: Hex\n      }[]\n    })[]\n  },\n  /**\n   * @description Destroys a filter based on filter ID\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_uninstallFilter', params: ['0x1'] })\n   * // => true\n   */\n  {\n    Method: 'eth_uninstallFilter'\n    Parameters: [filterId: Quantity]\n    ReturnType: boolean\n  },\n]\n\nexport type TestRpcSchema<mode extends string> = [\n  /**\n   * @description Add information about compiled contracts\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_addcompilationresult\n   */\n  {\n    Method: `${mode}_addCompilationResult`\n    Parameters: any[]\n    ReturnType: any\n  },\n  /**\n   * @description Remove a transaction from the mempool\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_droptransaction\n   */\n  {\n    Method: `${mode}_dropTransaction`\n    Parameters: [hash: Hash]\n    ReturnType: void\n  },\n  /**\n   * @description Serializes the current state (including contracts code, contract's storage, accounts properties, etc.) into a savable data blob.\n   */\n  {\n    Method: `${mode}_dumpState`\n    Parameters?: undefined\n    ReturnType: Hex\n  },\n  /**\n   * @description Turn on call traces for transactions that are returned to the user when they execute a transaction (instead of just txhash/receipt).\n   */\n  {\n    Method: `${mode}_enableTraces`\n    Parameters?: undefined\n    ReturnType: void\n  },\n  /**\n   * @description Impersonate an account or contract address.\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_impersonateaccount\n   */\n  {\n    Method: `${mode}_impersonateAccount`\n    Parameters: [address: Address]\n    ReturnType: void\n  },\n  /**\n   * @description Returns true if automatic mining is enabled, and false otherwise. See [Mining Modes](https://hardhat.org/hardhat-network/explanation/mining-modes) to learn more.\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_getautomine\n   */\n  {\n    Method: `${mode}_getAutomine`\n    Parameters?: undefined\n    ReturnType: boolean\n  },\n  /**\n   * @description Adds state previously dumped with `dumpState` to the current chain.\n   */\n  {\n    Method: `${mode}_loadState`\n    Parameters?: [Hex] | undefined\n    ReturnType: void\n  },\n  /**\n   * @description Advance the block number of the network by a certain number of blocks\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_mine\n   */\n  {\n    Method: `${mode}_mine`\n    Parameters: [\n      /** Number of blocks to mine. */\n      count: Hex,\n      /** Interval between each block in seconds. */\n      interval: Hex | undefined,\n    ]\n    ReturnType: void\n  },\n  /**\n   * @description Resets the fork.\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_reset\n   */\n  {\n    Method: `${mode}_reset`\n    Parameters: any[]\n    ReturnType: void\n  },\n  /**\n   * @description Modifies the balance of an account.\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_setbalance\n   */\n  {\n    Method: `${mode}_setBalance`\n    Parameters: [\n      /** The address of the target account. */\n      address: Address,\n      /** Amount to send in wei. */\n      balance: Quantity,\n    ]\n    ReturnType: void\n  },\n  /**\n   * @description Modifies the bytecode stored at an account's address.\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_setcode\n   */\n  {\n    Method: `${mode}_setCode`\n    Parameters: [\n      /** The address of the contract. */\n      address: Address,\n      /** Data bytecode. */\n      data: string,\n    ]\n    ReturnType: void\n  },\n  /**\n   * @description Sets the coinbase address to be used in new blocks.\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_setcoinbase\n   */\n  {\n    Method: `${mode}_setCoinbase`\n    Parameters: [\n      /** The address to set as the coinbase address. */\n      address: Address,\n    ]\n    ReturnType: void\n  },\n  /**\n   * @description Enable or disable logging on the test node network.\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_setcoinbase\n   */\n  {\n    Method: `${mode}_setLoggingEnabled`\n    Parameters: [enabled: boolean]\n    ReturnType: void\n  },\n  /**\n   * @description Change the minimum gas price accepted by the network (in wei).\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_setmingasprice\n   */\n  {\n    Method: `${mode}_setMinGasPrice`\n    Parameters: [gasPrice: Quantity]\n    ReturnType: void\n  },\n  /**\n   * @description Sets the base fee of the next block.\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_setnextblockbasefeepergas\n   */\n  {\n    Method: `${mode}_setNextBlockBaseFeePerGas`\n    Parameters: [baseFeePerGas: Quantity]\n    ReturnType: void\n  },\n  /**\n   * @description Modifies an account's nonce by overwriting it.\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_setnonce\n   */\n  {\n    Method: `${mode}_setNonce`\n    Parameters: [\n      /** The account address. */\n      address: Address,\n      /** The new nonce. */\n      nonce: Quantity,\n    ]\n    ReturnType: void\n  },\n  /**\n   * @description Sets the backend RPC URL.\n   */\n  {\n    Method: `${mode}_setRpcUrl`\n    Parameters: [url: string]\n    ReturnType: void\n  },\n  /**\n   * @description Writes a single position of an account's storage.\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_setstorageat\n   */\n  {\n    Method: `${mode}_setStorageAt`\n    Parameters: [\n      /** The account address. */\n      address: Address,\n      /** The storage position index. */\n      index: Quantity,\n      /** The storage value. */\n      value: Quantity,\n    ]\n    ReturnType: void\n  },\n  /**\n   * @description Use this method to stop impersonating an account after having previously used impersonateAccount.\n   * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_stopimpersonatingaccount\n   */\n  {\n    Method: `${mode}_stopImpersonatingAccount`\n    Parameters: [\n      /** The address to stop impersonating. */\n      address: Address,\n    ]\n    ReturnType: void\n  },\n  /**\n   * @description Jump forward in time by the given amount of time, in seconds.\n   * @link https://github.com/trufflesuite/ganache/blob/ef1858d5d6f27e4baeb75cccd57fb3dc77a45ae8/src/chains/ethereum/ethereum/RPC-METHODS.md#evm_increasetime\n   */\n  {\n    Method: `${mode}_increaseTime`\n    Parameters: [seconds: number]\n    ReturnType: Quantity\n  },\n  /**\n   * @description Modifies the balance of an account.\n   * @link https://ganache.dev/#evm_setAccountBalance\n   */\n  {\n    Method: 'evm_setAccountBalance'\n    Parameters: [\n      /** The address of the target account. */\n      address: Address,\n      /** Amount to send in wei. */\n      value: Quantity,\n    ]\n    ReturnType: void\n  },\n  /**\n   * @description Modifies the bytecode stored at an account's address.\n   * @link https://ganache.dev/#evm_setAccountCode\n   */\n  {\n    Method: 'evm_setAccountCode'\n    Parameters: [\n      /** The address of the contract. */\n      address: Address,\n      /** Data bytecode. */\n      data: string,\n    ]\n    ReturnType: void\n  },\n  /**\n   * @description Enables or disables, based on the single boolean argument, the automatic mining of new blocks with each new transaction submitted to the network.\n   * @link https://hardhat.org/hardhat-network/docs/reference#evm_setautomine\n   */\n  {\n    Method: 'evm_setAutomine'\n    Parameters: [boolean]\n    ReturnType: void\n  },\n  /**\n   * @description Sets the block's gas limit.\n   * @link https://hardhat.org/hardhat-network/docs/reference#evm_setblockgaslimit\n   */\n  {\n    Method: 'evm_setBlockGasLimit'\n    Parameters: [gasLimit: Quantity]\n    ReturnType: void\n  },\n  /**\n   * @description Jump forward in time by the given amount of time, in seconds.\n   * @link https://github.com/trufflesuite/ganache/blob/ef1858d5d6f27e4baeb75cccd57fb3dc77a45ae8/src/chains/ethereum/ethereum/RPC-METHODS.md#evm_increasetime\n   */\n  {\n    Method: 'evm_increaseTime'\n    Parameters: [seconds: Quantity]\n    ReturnType: Quantity\n  },\n  /**\n   * @description Similar to `evm_increaseTime` but sets a block timestamp `interval`.\n   * The timestamp of the next block will be computed as `lastBlock_timestamp` + `interval`\n   */\n  {\n    Method: `${mode}_setBlockTimestampInterval`\n    Parameters: [seconds: number]\n    ReturnType: void\n  },\n  /**\n   * @description Removes `setBlockTimestampInterval` if it exists\n   */\n  {\n    Method: `${mode}_removeBlockTimestampInterval`\n    Parameters?: undefined\n    ReturnType: void\n  },\n  /**\n   * @description Enables (with a numeric argument greater than 0) or disables (with a numeric argument equal to 0), the automatic mining of blocks at a regular interval of milliseconds, each of which will include all pending transactions.\n   * @link https://hardhat.org/hardhat-network/docs/reference#evm_setintervalmining\n   */\n  {\n    Method: 'evm_setIntervalMining'\n    Parameters: [number]\n    ReturnType: void\n  },\n  /**\n   * @description Set the timestamp of the next block.\n   * @link https://hardhat.org/hardhat-network/docs/reference#evm_setnextblocktimestamp\n   */\n  {\n    Method: 'evm_setNextBlockTimestamp'\n    Parameters: [Quantity]\n    ReturnType: void\n  },\n  /**\n   * @description Snapshot the state of the blockchain at the current block. Takes no parameters. Returns the id of the snapshot that was created.\n   * @link https://hardhat.org/hardhat-network/docs/reference#evm_snapshot\n   */\n  {\n    Method: 'evm_snapshot'\n    Parameters?: undefined\n    ReturnType: Quantity\n  },\n  /**\n   * @description Revert the state of the blockchain to a previous snapshot. Takes a single parameter, which is the snapshot id to revert to.\n   */\n  {\n    Method: 'evm_revert'\n    Parameters?: [id: Quantity] | undefined\n    ReturnType: void\n  },\n  /**\n   * @description Enables the automatic mining of new blocks with each new transaction submitted to the network.\n   * @link https://ganache.dev/#miner_start\n   */\n  {\n    Method: 'miner_start'\n    Parameters?: undefined\n    ReturnType: void\n  },\n  /**\n   * @description Disables the automatic mining of new blocks with each new transaction submitted to the network.\n   * @link https://ganache.dev/#miner_stop\n   */\n  {\n    Method: 'miner_stop'\n    Parameters?: undefined\n    ReturnType: void\n  },\n  /**\n   * @link https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-txpool#txpool-content\n   */\n  {\n    Method: 'txpool_content'\n    Parameters?: undefined\n    ReturnType: {\n      pending: Record<Address, Record<string, Transaction>>\n      queued: Record<Address, Record<string, Transaction>>\n    }\n  },\n  /**\n   * @link https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-txpool#txpool-inspect\n   */\n  {\n    Method: 'txpool_inspect'\n    Parameters?: undefined\n    ReturnType: {\n      pending: Record<Address, Record<string, string>>\n      queued: Record<Address, Record<string, string>>\n    }\n  },\n  /**\n   * @link https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-txpool#txpool-inspect\n   */\n  {\n    Method: 'txpool_status'\n    Parameters?: undefined\n    ReturnType: {\n      pending: Quantity\n      queued: Quantity\n    }\n  },\n  /**\n   * @description Returns whether the client is actively mining new blocks.\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_mining' })\n   * // => true\n   */\n  {\n    Method: 'eth_mining'\n    Parameters?: undefined\n    ReturnType: boolean\n  },\n  /**\n   * @description Advance the block number of the network by a certain number of blocks.\n   * @link https://ganache.dev/#evm_mine\n   */\n  {\n    Method: 'evm_mine'\n    Parameters?:\n      | [\n          {\n            /** Number of blocks to mine. */\n            blocks: Hex\n          },\n        ]\n      | undefined\n    ReturnType: void\n  },\n  /**\n   * @description Creates, signs, and sends a new transaction to the network regardless of the signature.\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_sendTransaction', params: [{ from: '0x...', to: '0x...', value: '0x...' }] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_sendUnsignedTransaction'\n    Parameters: [transaction: TransactionRequest]\n    ReturnType: Hash\n  },\n]\n\nexport type WalletRpcSchema = [\n  /**\n   * @description Returns a list of addresses owned by this client\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_accounts' })\n   * // => ['0x0fB69...']\n   */\n  {\n    Method: 'eth_accounts'\n    Parameters?: undefined\n    ReturnType: Address[]\n  },\n  /**\n   * @description Returns the current chain ID associated with the wallet.\n   * @example\n   * provider.request({ method: 'eth_chainId' })\n   * // => '1'\n   */\n  {\n    Method: 'eth_chainId'\n    Parameters?: undefined\n    ReturnType: Quantity\n  },\n  /**\n   * @description Estimates the gas necessary to complete a transaction without submitting it to the network\n   *\n   * @example\n   * provider.request({\n   *  method: 'eth_estimateGas',\n   *  params: [{ from: '0x...', to: '0x...', value: '0x...' }]\n   * })\n   * // => '0x5208'\n   */\n  {\n    Method: 'eth_estimateGas'\n    Parameters:\n      | [transaction: TransactionRequest]\n      | [transaction: TransactionRequest, block: BlockNumber | BlockTag]\n      | [\n          transaction: TransactionRequest,\n          block: BlockNumber | BlockTag,\n          stateOverride: RpcStateOverride,\n        ]\n    ReturnType: Quantity\n  },\n  /**\n   * @description Fills a transaction with the necessary data to be signed.\n   *\n   * @example\n   * provider.request({ method: 'eth_fillTransaction', params: [{ from: '0x...', to: '0x...', value: '0x...' }] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_fillTransaction'\n    Parameters: [transaction: TransactionRequest]\n    ReturnType: {\n      capabilities?: Record<string, unknown> | undefined\n      raw: Hex\n      tx: Transaction\n    }\n  },\n  /**\n   * @description Requests that the user provides an Ethereum address to be identified by. Typically causes a browser extension popup to appear.\n   * @link https://eips.ethereum.org/EIPS/eip-1102\n   * @example\n   * provider.request({ method: 'eth_requestAccounts' }] })\n   * // => ['0x...', '0x...']\n   */\n  {\n    Method: 'eth_requestAccounts'\n    Parameters?: undefined\n    ReturnType: Address[]\n  },\n  /**\n   * @description Creates, signs, and sends a new transaction to the network\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_sendTransaction', params: [{ from: '0x...', to: '0x...', value: '0x...' }] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_sendTransaction'\n    Parameters: [transaction: TransactionRequest]\n    ReturnType: Hash\n  },\n  /**\n   * @description Sends and already-signed transaction to the network\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_sendRawTransaction', params: ['0x...'] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_sendRawTransaction'\n    Parameters: [signedTransaction: Hex]\n    ReturnType: Hash\n  },\n  /**\n   * @description Sends and already-signed transaction to the network synchronously\n   * @link https://eips.ethereum.org/EIPS/eip-7966\n   * @example\n   * provider.request({ method: 'eth_sendRawTransactionSync', params: ['0x...'] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_sendRawTransactionSync'\n    Parameters:\n      | [signedTransaction: Hex]\n      | [signedTransaction: Hex, timeout: number]\n    ReturnType: TransactionReceipt\n  },\n  /**\n   * @description Calculates an Ethereum-specific signature in the form of `keccak256(\"\\x19Ethereum Signed Message:\\n\" + len(message) + message))`\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_sign', params: ['0x...', '0x...'] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_sign'\n    Parameters: [\n      /** Address to use for signing */\n      address: Address,\n      /** Data to sign */\n      data: Hex,\n    ]\n    ReturnType: Hex\n  },\n  /**\n   * @description Signs a transaction that can be submitted to the network at a later time using with `eth_sendRawTransaction`\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_signTransaction', params: [{ from: '0x...', to: '0x...', value: '0x...' }] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_signTransaction'\n    Parameters: [request: TransactionRequest]\n    ReturnType: Hex\n  },\n  /**\n   * @description Calculates an Ethereum-specific signature in the form of `keccak256(\"\\x19Ethereum Signed Message:\\n\" + len(message) + message))`\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_signTypedData_v4', params: [{ from: '0x...', data: [{ type: 'string', name: 'message', value: 'hello world' }] }] })\n   * // => '0x...'\n   */\n  {\n    Method: 'eth_signTypedData_v4'\n    Parameters: [\n      /** Address to use for signing */\n      address: Address,\n      /** Message to sign containing type information, a domain separator, and data */\n      message: string,\n    ]\n    ReturnType: Hex\n  },\n  /**\n   * @description Returns information about the status of this client\u2019s network synchronization\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'eth_syncing' })\n   * // => { startingBlock: '0x...', currentBlock: '0x...', highestBlock: '0x...' }\n   */\n  {\n    Method: 'eth_syncing'\n    Parameters?: undefined\n    ReturnType: NetworkSync | false\n  },\n  /**\n   * @description Calculates an Ethereum-specific signature in the form of `keccak256(\"\\x19Ethereum Signed Message:\\n\" + len(message) + message))`\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'personal_sign', params: ['0x...', '0x...'] })\n   * // => '0x...'\n   */\n  {\n    Method: 'personal_sign'\n    Parameters: [\n      /** Data to sign */\n      data: Hex,\n      /** Address to use for signing */\n      address: Address,\n    ]\n    ReturnType: Hex\n  },\n  /**\n   * @description Add an Ethereum chain to the wallet.\n   * @link https://eips.ethereum.org/EIPS/eip-3085\n   * @example\n   * provider.request({ method: 'wallet_addEthereumChain', params: [{ chainId: 1, rpcUrl: 'https://mainnet.infura.io/v3/...' }] })\n   * // => { ... }\n   */\n  {\n    Method: 'wallet_addEthereumChain'\n    Parameters: [chain: AddEthereumChainParameter]\n    ReturnType: null\n  },\n  /**\n   *\n   */\n  {\n    Method: 'wallet_addSubAccount'\n    Parameters: [\n      {\n        account: OneOf<\n          | {\n              keys: readonly {\n                publicKey: Hex\n                type: 'address' | 'p256' | 'webcrypto-p256' | 'webauthn-p256'\n              }[]\n              type: 'create'\n            }\n          | {\n              address: Address\n              chainId?: number | undefined\n              type: 'deployed'\n            }\n          | {\n              address: Address\n              chainId?: number | undefined\n              factory: Address\n              factoryData: Hex\n              type: 'undeployed'\n            }\n        >\n        version: string\n      },\n    ]\n    ReturnType: {\n      address: Address\n      factory?: Address | undefined\n      factoryData?: Hex | undefined\n    }\n  },\n  /**\n   * @description Requests to connect account(s).\n   * @link https://github.com/ethereum/ERCs/blob/abd1c9f4eda2d6ad06ade0e3af314637a27d1ee7/ERCS/erc-7846.md\n   * @example\n   * provider.request({ method: 'wallet_connect' })\n   * // => { ... }\n   */\n  {\n    Method: 'wallet_connect'\n    Parameters: [\n      {\n        capabilities?: Capabilities | undefined\n        version: string\n      },\n    ]\n    ReturnType: {\n      accounts: readonly {\n        address: Address\n        capabilities?: Capabilities | undefined\n      }[]\n    }\n  },\n  /**\n   * @description Disconnects connected account(s).\n   * @link https://github.com/ethereum/ERCs/blob/abd1c9f4eda2d6ad06ade0e3af314637a27d1ee7/ERCS/erc-7846.md\n   * @example\n   * provider.request({ method: 'wallet_disconnect' })\n   */\n  {\n    Method: 'wallet_disconnect'\n    Parameters?: undefined\n    ReturnType: void\n  },\n  /**\n   * @description Returns the assets owned by the wallet.\n   * @link https://github.com/ethereum/ERCs/blob/master/ERCS/erc-7811.md\n   * @example\n   * provider.request({ method: 'wallet_getAssets', params: [...] })\n   * // => { ... }\n   */\n  {\n    Method: 'wallet_getAssets'\n    Parameters?: [WalletGetAssetsParameters]\n    ReturnType: WalletGetAssetsReturnType\n  },\n  /**\n   * @description Returns the status of a call batch that was sent via `wallet_sendCalls`.\n   * @link https://eips.ethereum.org/EIPS/eip-5792\n   * @example\n   * provider.request({ method: 'wallet_getCallsStatus' })\n   * // => { ... }\n   */\n  {\n    Method: 'wallet_getCallsStatus'\n    Parameters?: [string]\n    ReturnType: WalletGetCallsStatusReturnType\n  },\n  /**\n   * @description Gets the connected wallet's capabilities.\n   * @link https://eips.ethereum.org/EIPS/eip-5792\n   * @example\n   * provider.request({ method: 'wallet_getCapabilities' })\n   * // => { ... }\n   */\n  {\n    Method: 'wallet_getCapabilities'\n    Parameters?:\n      | readonly []\n      | readonly [Address | undefined]\n      | readonly [Address | undefined, readonly Hex[] | undefined]\n      | undefined\n    ReturnType: Prettify<ChainIdToCapabilities>\n  },\n  /**\n   * @description Gets the wallets current permissions.\n   * @link https://eips.ethereum.org/EIPS/eip-2255\n   * @example\n   * provider.request({ method: 'wallet_getPermissions' })\n   * // => { ... }\n   */\n  {\n    Method: 'wallet_getPermissions'\n    Parameters?: undefined\n    ReturnType: WalletPermission[]\n  },\n  /**\n   * @description Requests permissions from a wallet\n   * @link https://eips.ethereum.org/EIPS/eip-7715\n   * @example\n   * provider.request({ method: 'wallet_grantPermissions', params: [{ ... }] })\n   * // => { ... }\n   */\n  {\n    Method: 'wallet_grantPermissions'\n    Parameters?: [WalletGrantPermissionsParameters]\n    ReturnType: Prettify<WalletGrantPermissionsReturnType>\n  },\n  /**\n   * @description Requests the given permissions from the user.\n   * @link https://eips.ethereum.org/EIPS/eip-2255\n   * @example\n   * provider.request({ method: 'wallet_requestPermissions', params: [{ eth_accounts: {} }] })\n   * // => { ... }\n   */\n  {\n    Method: 'wallet_requestPermissions'\n    Parameters: [permissions: { eth_accounts: Record<string, any> }]\n    ReturnType: WalletPermission[]\n  },\n  /**\n   * @description Revokes the given permissions from the user.\n   * @link https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-2.md\n   * @example\n   * provider.request({ method: 'wallet_revokePermissions', params: [{ eth_accounts: {} }] })\n   * // => { ... }\n   */\n  {\n    Method: 'wallet_revokePermissions'\n    Parameters: [permissions: { eth_accounts: Record<string, any> }]\n    ReturnType: null\n  },\n  /**\n   * @description Requests the connected wallet to send a batch of calls.\n   * @link https://eips.ethereum.org/EIPS/eip-5792\n   * @example\n   * provider.request({ method: 'wallet_sendCalls' })\n   * // => { ... }\n   */\n  {\n    Method: 'wallet_sendCalls'\n    Parameters?: WalletSendCallsParameters\n    ReturnType: WalletSendCallsReturnType\n  },\n  /**\n   * @description Creates, signs, and sends a new transaction to the network\n   * @link https://eips.ethereum.org/EIPS/eip-1474\n   * @example\n   * provider.request({ method: 'wallet_sendTransaction', params: [{ from: '0x...', to: '0x...', value: '0x...' }] })\n   * // => '0x...'\n   */\n  {\n    Method: 'wallet_sendTransaction'\n    Parameters: [transaction: TransactionRequest]\n    ReturnType: Hash\n  },\n  /**\n   * @description Requests for the wallet to show information about a call batch\n   * that was sent via `wallet_sendCalls`.\n   * @link https://eips.ethereum.org/EIPS/eip-5792\n   * @example\n   * provider.request({ method: 'wallet_showCallsStatus', params: ['...'] })\n   */\n  {\n    Method: 'wallet_showCallsStatus'\n    Parameters?: [string]\n    ReturnType: void\n  },\n  /**\n   * @description Switch the wallet to the given Ethereum chain.\n   * @link https://eips.ethereum.org/EIPS/eip-3326\n   * @example\n   * provider.request({ method: 'wallet_switchEthereumChain', params: [{ chainId: '0xf00' }] })\n   * // => { ... }\n   */\n  {\n    Method: 'wallet_switchEthereumChain'\n    Parameters: [chain: { chainId: string }]\n    ReturnType: null\n  },\n  /**\n   * @description Requests that the user tracks the token in their wallet. Returns a boolean indicating if the token was successfully added.\n   * @link https://eips.ethereum.org/EIPS/eip-747\n   * @example\n   * provider.request({ method: 'wallet_watchAsset' }] })\n   * // => true\n   */\n  {\n    Method: 'wallet_watchAsset'\n    Parameters: WatchAssetParams\n    ReturnType: boolean\n  },\n]\n\n///////////////////////////////////////////////////////////////////////////\n// Utils\n\nexport type RpcSchema = readonly {\n  Method: string\n  Parameters?: unknown | undefined\n  ReturnType: unknown\n}[]\n\nexport type RpcSchemaOverride = Omit<RpcSchema[number], 'Method'>\n\nexport type EIP1193Parameters<\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = rpcSchema extends RpcSchema\n  ? {\n      [K in keyof rpcSchema]: Prettify<\n        {\n          method: rpcSchema[K] extends rpcSchema[number]\n            ? rpcSchema[K]['Method']\n            : never\n        } & (rpcSchema[K] extends rpcSchema[number]\n          ? rpcSchema[K]['Parameters'] extends undefined\n            ? { params?: undefined }\n            : { params: rpcSchema[K]['Parameters'] }\n          : never)\n      >\n    }[number]\n  : {\n      method: string\n      params?: unknown | undefined\n    }\n\nexport type EIP1193RequestOptions = {\n  /** Deduplicate in-flight requests. */\n  dedupe?: boolean | undefined\n  /** Methods to include or exclude from executing RPC requests. */\n  methods?:\n    | OneOf<\n        | {\n            include?: string[] | undefined\n          }\n        | {\n            exclude?: string[] | undefined\n          }\n      >\n    | undefined\n  /** The base delay (in ms) between retries. */\n  retryDelay?: number | undefined\n  /** The max number of times to retry. */\n  retryCount?: number | undefined\n  /** Unique identifier for the request. */\n  uid?: string | undefined\n}\n\ntype DerivedRpcSchema<\n  rpcSchema extends RpcSchema | undefined,\n  rpcSchemaOverride extends RpcSchemaOverride | undefined,\n> = rpcSchemaOverride extends RpcSchemaOverride\n  ? [rpcSchemaOverride & { Method: string }]\n  : rpcSchema\n\nexport type EIP1193RequestFn<\n  rpcSchema extends RpcSchema | undefined = undefined,\n  raw extends boolean = false,\n> = <\n  rpcSchemaOverride extends RpcSchemaOverride | undefined = undefined,\n  _parameters extends EIP1193Parameters<\n    DerivedRpcSchema<rpcSchema, rpcSchemaOverride>\n  > = EIP1193Parameters<DerivedRpcSchema<rpcSchema, rpcSchemaOverride>>,\n  _returnType = DerivedRpcSchema<rpcSchema, rpcSchemaOverride> extends RpcSchema\n    ? raw extends true\n      ? OneOf<\n          | {\n              result: Extract<\n                DerivedRpcSchema<rpcSchema, rpcSchemaOverride>[number],\n                { Method: _parameters['method'] }\n              >['ReturnType']\n            }\n          | { error: Rpc.ErrorObject }\n        >\n      : Extract<\n          DerivedRpcSchema<rpcSchema, rpcSchemaOverride>[number],\n          { Method: _parameters['method'] }\n        >['ReturnType']\n    : raw extends true\n      ? OneOf<\n          | {\n              result: unknown\n            }\n          | {\n              error: Rpc.ErrorObject\n            }\n        >\n      : unknown,\n>(\n  args: _parameters,\n  options?: EIP1193RequestOptions | undefined,\n) => Promise<_returnType>\n", "import type { Abi } from 'abitype'\n\nimport {\n  AbiConstructorNotFoundError,\n  type AbiConstructorNotFoundErrorType,\n  AbiConstructorParamsNotFoundError,\n  type AbiConstructorParamsNotFoundErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ContractConstructorArgs } from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport {\n  type DecodeAbiParametersErrorType,\n  decodeAbiParameters,\n} from './decodeAbiParameters.js'\n\nconst docsPath = '/docs/contract/decodeDeployData'\n\nexport type DecodeDeployDataParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n> = {\n  abi: abi\n  bytecode: Hex\n  data: Hex\n}\n\nexport type DecodeDeployDataReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  ///\n  allArgs = ContractConstructorArgs<abi>,\n> = {\n  bytecode: Hex\n  args: allArgs\n}\n\nexport type DecodeDeployDataErrorType =\n  | AbiConstructorNotFoundErrorType\n  | AbiConstructorParamsNotFoundErrorType\n  | DecodeAbiParametersErrorType\n  | ErrorType\n\nexport function decodeDeployData<const abi extends Abi | readonly unknown[]>(\n  parameters: DecodeDeployDataParameters<abi>,\n): DecodeDeployDataReturnType<abi> {\n  const { abi, bytecode, data } = parameters as DecodeDeployDataParameters\n  if (data === bytecode) return { bytecode } as DecodeDeployDataReturnType<abi>\n\n  const description = abi.find((x) => 'type' in x && x.type === 'constructor')\n  if (!description) throw new AbiConstructorNotFoundError({ docsPath })\n  if (!('inputs' in description))\n    throw new AbiConstructorParamsNotFoundError({ docsPath })\n  if (!description.inputs || description.inputs.length === 0)\n    throw new AbiConstructorParamsNotFoundError({ docsPath })\n\n  const args = decodeAbiParameters(\n    description.inputs,\n    `0x${data.replace(bytecode, '')}`,\n  )\n  return { args, bytecode } as unknown as DecodeDeployDataReturnType<abi>\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type CreateCursorErrorType, createCursor } from '../cursor.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type FromBlobsParameters<\n  blobs extends readonly Hex[] | readonly ByteArray[] =\n    | readonly Hex[]\n    | readonly ByteArray[],\n  to extends To | undefined = undefined,\n> = {\n  /** Blobs to transform to data. */\n  blobs: blobs | readonly Hex[] | readonly ByteArray[]\n  to?: to | To | undefined\n}\n\nexport type FromBlobsReturnType<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type FromBlobsErrorType =\n  | BytesToHexErrorType\n  | CreateCursorErrorType\n  | HexToBytesErrorType\n  | ErrorType\n\nexport function fromBlobs<\n  const blobs extends readonly Hex[] | readonly ByteArray[],\n  to extends To =\n    | (blobs extends readonly Hex[] ? 'hex' : never)\n    | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(parameters: FromBlobsParameters<blobs, to>): FromBlobsReturnType<to> {\n  const to =\n    parameters.to ?? (typeof parameters.blobs[0] === 'string' ? 'hex' : 'bytes')\n  const blobs = (\n    typeof parameters.blobs[0] === 'string'\n      ? parameters.blobs.map((x) => hexToBytes(x as Hex))\n      : parameters.blobs\n  ) as ByteArray[]\n\n  const length = blobs.reduce((length, blob) => length + blob.length, 0)\n  const data = createCursor(new Uint8Array(length))\n  let active = true\n\n  for (const blob of blobs) {\n    const cursor = createCursor(blob)\n    while (active && cursor.position < blob.length) {\n      // First byte will be a zero 0x00 byte \u2013 we can skip.\n      cursor.incrementPosition(1)\n\n      let consume = 31\n      if (blob.length - cursor.position < 31)\n        consume = blob.length - cursor.position\n\n      for (const _ in Array.from({ length: consume })) {\n        const byte = cursor.readByte()\n        const isTerminator =\n          byte === 0x80 && !cursor.inspectBytes(cursor.remaining).includes(0x80)\n        if (isTerminator) {\n          active = false\n          break\n        }\n        data.pushByte(byte)\n      }\n    }\n  }\n\n  const trimmedData = data.bytes.slice(0, data.position)\n  return (\n    to === 'hex' ? bytesToHex(trimmedData) : trimmedData\n  ) as FromBlobsReturnType<to>\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { BlobSidecars } from '../../types/eip4844.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n  type CommitmentToVersionedHashErrorType,\n  commitmentToVersionedHash,\n} from './commitmentToVersionedHash.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type SidecarsToVersionedHashesParameters<\n  sidecars extends BlobSidecars = BlobSidecars,\n  to extends To | undefined = undefined,\n> = {\n  /** Sidecars from blobs. */\n  sidecars: sidecars | BlobSidecars\n  /** Return type. */\n  to?: to | To | undefined\n  /** Version to tag onto the hashes. */\n  version?: number | undefined\n}\n\nexport type SidecarsToVersionedHashesReturnType<to extends To> =\n  | (to extends 'bytes' ? readonly ByteArray[] : never)\n  | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type SidecarsToVersionedHashesErrorType =\n  | CommitmentToVersionedHashErrorType\n  | ErrorType\n\n/**\n * Transforms a list of sidecars to their versioned hashes.\n *\n * @example\n * ```ts\n * import { toBlobSidecars, sidecarsToVersionedHashes, stringToHex } from 'viem'\n *\n * const sidecars = toBlobSidecars({ data: stringToHex('hello world') })\n * const versionedHashes = sidecarsToVersionedHashes({ sidecars })\n * ```\n */\nexport function sidecarsToVersionedHashes<\n  const sidecars extends BlobSidecars,\n  to extends To =\n    | (sidecars extends BlobSidecars<Hex> ? 'hex' : never)\n    | (sidecars extends BlobSidecars<ByteArray> ? 'bytes' : never),\n>(\n  parameters: SidecarsToVersionedHashesParameters<sidecars, to>,\n): SidecarsToVersionedHashesReturnType<to> {\n  const { sidecars, version } = parameters\n\n  const to =\n    parameters.to ?? (typeof sidecars[0].blob === 'string' ? 'hex' : 'bytes')\n\n  const hashes: Uint8Array[] | Hex[] = []\n  for (const { commitment } of sidecars) {\n    hashes.push(\n      commitmentToVersionedHash({\n        commitment,\n        to,\n        version,\n      }) as any,\n    )\n  }\n  return hashes as any\n}\n", "import {\n  EnsInvalidChainIdError,\n  type EnsInvalidChainIdErrorType,\n} from '../../errors/ens.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nexport type ToCoinTypeError = EnsInvalidChainIdErrorType | ErrorType\n\nconst SLIP44_MSB = 0x80000000\n\n/**\n * @description Converts a chainId to a ENSIP-9 compliant coinType\n *\n * @example\n * toCoinType(10)\n * 2147483658n\n */\nexport function toCoinType(chainId: number): bigint {\n  if (chainId === 1) return 60n\n  if (chainId >= SLIP44_MSB || chainId < 0)\n    throw new EnsInvalidChainIdError({ chainId })\n  return BigInt((0x80000000 | chainId) >>> 0)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Kzg } from '../../types/kzg.js'\n\nexport type DefineKzgParameters = Kzg\nexport type DefineKzgReturnType = Kzg\nexport type DefineKzgErrorType = ErrorType\n\n/**\n * Defines a KZG interface.\n *\n * @example\n * ```ts\n * import * as cKzg from 'c-kzg'\n * import { defineKzg } from 'viem'\n * import { mainnetTrustedSetupPath } from 'viem/node'\n *\n * cKzg.loadTrustedSetup(mainnetTrustedSetupPath)\n *\n * const kzg = defineKzg(cKzg)\n * ```\n */\nexport function defineKzg({\n  blobToKzgCommitment,\n  computeBlobKzgProof,\n}: DefineKzgParameters): DefineKzgReturnType {\n  return {\n    blobToKzgCommitment,\n    computeBlobKzgProof,\n  }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport {\n  type DefineKzgErrorType,\n  type DefineKzgParameters,\n  type DefineKzgReturnType,\n  defineKzg,\n} from './defineKzg.js'\n\nexport type SetupKzgParameters = DefineKzgParameters & {\n  loadTrustedSetup(path: string): void\n}\nexport type SetupKzgReturnType = DefineKzgReturnType\nexport type SetupKzgErrorType = DefineKzgErrorType | ErrorType\n\n/**\n * Sets up and returns a KZG interface.\n *\n * @example\n * ```ts\n * import * as cKzg from 'c-kzg'\n * import { setupKzg } from 'viem'\n * import { mainnetTrustedSetupPath } from 'viem/node'\n *\n * const kzg = setupKzg(cKzg, mainnetTrustedSetupPath)\n * ```\n */\nexport function setupKzg(\n  parameters: SetupKzgParameters,\n  path: string,\n): SetupKzgReturnType {\n  try {\n    parameters.loadTrustedSetup(path)\n  } catch (e) {\n    const error = e as Error\n    if (!error.message.includes('trusted setup is already loaded')) throw error\n  }\n  return defineKzg(parameters)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { CompactSignature, Signature } from '../../types/misc.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\nexport type CompactSignatureToSignatureErrorType =\n  | BytesToHexErrorType\n  | HexToBytesErrorType\n  | ErrorType\n\n/**\n * @description Converts an [EIP-2098 compact signature](https://eips.ethereum.org/EIPS/eip-2098) into signature format.\n *\n * @param signature The compact signature to convert.\n * @returns The compact signature in signature format.\n *\n * @example\n * compactSignatureToSignature({\n *   r: '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90',\n *   yParityAndS: '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064',\n * })\n * // {\n * //   r: '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90',\n * //   s: '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064',\n * //   v: 27n\n * // }\n */\nexport function compactSignatureToSignature({\n  r,\n  yParityAndS,\n}: CompactSignature): Signature {\n  const yParityAndS_bytes = hexToBytes(yParityAndS)\n  const yParity = yParityAndS_bytes[0] & 0x80 ? 1 : 0\n  const s = yParityAndS_bytes\n  if (yParity === 1) s[0] &= 0x7f\n  return { r, s: bytesToHex(s), yParity }\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { CompactSignature, Hex } from '../../types/misc.js'\nimport { type NumberToHexErrorType, numberToHex } from '../encoding/toHex.js'\n\nexport type ParseCompactSignatureErrorType = NumberToHexErrorType | ErrorType\n\n/**\n * @description Parses a hex formatted compact signature into a structured compact signature.\n *\n * @param signatureHex Signature in hex format.\n * @returns The structured signature.\n *\n * @example\n * parseCompactSignature('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c')\n * // { r: '0x...', yParityAndS: '0x...' }\n */\nexport function parseCompactSignature(signatureHex: Hex): CompactSignature {\n  const { r, s } = secp256k1.Signature.fromCompact(signatureHex.slice(2, 130))\n  return {\n    r: numberToHex(r, { size: 32 }),\n    yParityAndS: numberToHex(s, { size: 32 }),\n  }\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex, Signature } from '../../types/misc.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type ParseSignatureErrorType = NumberToHexErrorType | ErrorType\n\n/**\n * @description Parses a hex formatted signature into a structured signature.\n *\n * @param signatureHex Signature in hex format.\n * @returns The structured signature.\n *\n * @example\n * parseSignature('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c')\n * // { r: '0x...', s: '0x...', v: 28n }\n */\nexport function parseSignature(signatureHex: Hex) {\n  const { r, s } = secp256k1.Signature.fromCompact(signatureHex.slice(2, 130))\n  const yParityOrV = Number(`0x${signatureHex.slice(130)}`)\n  const [v, yParity] = (() => {\n    if (yParityOrV === 0 || yParityOrV === 1) return [undefined, yParityOrV]\n    if (yParityOrV === 27) return [BigInt(yParityOrV), 0]\n    if (yParityOrV === 28) return [BigInt(yParityOrV), 1]\n    throw new Error('Invalid yParityOrV value')\n  })()\n\n  if (typeof v !== 'undefined')\n    return {\n      r: numberToHex(r, { size: 32 }),\n      s: numberToHex(s, { size: 32 }),\n      v,\n      yParity,\n    } satisfies Signature\n  return {\n    r: numberToHex(r, { size: 32 }),\n    s: numberToHex(s, { size: 32 }),\n    yParity,\n  } satisfies Signature\n}\n", "import type { Address } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { TransactionSerialized } from '../../types/transaction.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport { parseTransaction } from '../transaction/parseTransaction.js'\nimport {\n  type SerializeTransactionErrorType,\n  serializeTransaction,\n} from '../transaction/serializeTransaction.js'\nimport {\n  type RecoverAddressErrorType,\n  recoverAddress,\n} from './recoverAddress.js'\nimport type { SerializeSignatureErrorType } from './serializeSignature.js'\n\nexport type RecoverTransactionAddressParameters = {\n  serializedTransaction: TransactionSerialized\n  signature?: Hex | ByteArray | Signature\n}\n\nexport type RecoverTransactionAddressReturnType = Address\n\nexport type RecoverTransactionAddressErrorType =\n  | SerializeTransactionErrorType\n  | RecoverAddressErrorType\n  | Keccak256ErrorType\n  | SerializeSignatureErrorType\n  | ErrorType\n\nexport async function recoverTransactionAddress(\n  parameters: RecoverTransactionAddressParameters,\n): Promise<RecoverTransactionAddressReturnType> {\n  const { serializedTransaction, signature: signature_ } = parameters\n\n  const transaction = parseTransaction(serializedTransaction)\n\n  const signature = signature_ ?? {\n    r: transaction.r!,\n    s: transaction.s!,\n    v: transaction.v!,\n    yParity: transaction.yParity!,\n  }\n\n  const serialized = serializeTransaction({\n    ...transaction,\n    r: undefined,\n    s: undefined,\n    v: undefined,\n    yParity: undefined,\n    sidecars: undefined,\n  })\n\n  return await recoverAddress({\n    hash: keccak256(serialized),\n    signature,\n  })\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { CompactSignature, Hex } from '../../types/misc.js'\nimport { type HexToBigIntErrorType, hexToBigInt } from '../encoding/fromHex.js'\n\nexport type SerializeCompactSignatureErrorType =\n  | HexToBigIntErrorType\n  | ErrorType\n\n/**\n * @description Converts an [EIP-2098 compact signature](https://eips.ethereum.org/EIPS/eip-2098) into hex format.\n *\n * @param signature The compact signature to convert.\n * @returns The compact signature in hex format.\n *\n * @example\n * serializeCompactSignature({\n *   r: '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90',\n *   yParityAndS: '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064',\n * })\n * // \"0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c\"\n */\nexport function serializeCompactSignature({\n  r,\n  yParityAndS,\n}: CompactSignature): Hex {\n  return `0x${new secp256k1.Signature(\n    hexToBigInt(r),\n    hexToBigInt(yParityAndS),\n  ).toCompactHex()}`\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { CompactSignature, Signature } from '../../types/misc.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\nexport type SignatureToCompactSignatureErrorType =\n  | HexToBytesErrorType\n  | BytesToHexErrorType\n  | ErrorType\n\n/**\n * @description Converts a signature into an [EIP-2098 compact signature](https://eips.ethereum.org/EIPS/eip-2098).\n *\n * @param signature The signature to convert.\n * @returns The signature in compact format.\n *\n * @example\n * signatureToCompactSignature({\n *   r: '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90',\n *   s: '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064',\n *   yParity: 0\n * })\n * // {\n * //   r: '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90',\n * //   yParityAndS: '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'\n * // }\n */\nexport function signatureToCompactSignature(\n  signature: Signature,\n): CompactSignature {\n  const { r, s, v, yParity } = signature\n  const yParity_ = Number(yParity ?? v! - 27n)\n  let yParityAndS = s\n  if (yParity_ === 1) {\n    const bytes = hexToBytes(s)\n    bytes[0] |= 0x80\n    yParityAndS = bytesToHex(bytes)\n  }\n  return { r, yParityAndS }\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n  type Abi,\n  type AbiEvent,\n  type AbiFunction,\n  type AbiParameter,\n  type AbiParameterKind,\n  type AbiParameterToPrimitiveType,\n  type AbiStateMutability,\n  type Address,\n  CircularReferenceError,\n  InvalidAbiItemError,\n  InvalidAbiParameterError,\n  InvalidAbiParametersError,\n  InvalidAbiTypeParameterError,\n  InvalidFunctionModifierError,\n  InvalidModifierError,\n  InvalidParameterError,\n  InvalidParenthesisError,\n  InvalidSignatureError,\n  InvalidStructSignatureError,\n  type Narrow,\n  type ParseAbi,\n  type ParseAbiItem,\n  type ParseAbiParameter,\n  type ParseAbiParameters,\n  parseAbi,\n  parseAbiItem,\n  parseAbiParameter,\n  parseAbiParameters,\n  SolidityProtectedKeywordError,\n  type TypedData,\n  type TypedDataDomain,\n  type TypedDataParameter,\n  UnknownSignatureError,\n  UnknownTypeError,\n} from 'abitype'\nexport type {\n  BlockOverrides,\n  Rpc as RpcBlockOverrides,\n} from 'ox/BlockOverrides'\nexport type { EntryPointVersion } from './account-abstraction/types/entryPointVersion.js'\nexport type {\n  RpcEstimateUserOperationGasReturnType,\n  RpcGetUserOperationByHashReturnType,\n  RpcUserOperation,\n  RpcUserOperationReceipt,\n  RpcUserOperationRequest,\n} from './account-abstraction/types/rpc.js'\nexport type {\n  EstimateUserOperationGasReturnType,\n  GetUserOperationByHashReturnType,\n  PackedUserOperation,\n  UserOperation,\n  UserOperationReceipt,\n  UserOperationRequest,\n} from './account-abstraction/types/userOperation.js'\nexport type {\n  Account,\n  AccountSource,\n  CustomSource,\n  HDAccount,\n  HDOptions,\n  JsonRpcAccount,\n  LocalAccount,\n  PrivateKeyAccount,\n} from './accounts/types.js'\nexport type {\n  GetEnsAddressErrorType,\n  GetEnsAddressParameters,\n  GetEnsAddressReturnType,\n} from './actions/ens/getEnsAddress.js'\nexport type {\n  GetEnsAvatarErrorType,\n  GetEnsAvatarParameters,\n  GetEnsAvatarReturnType,\n} from './actions/ens/getEnsAvatar.js'\nexport type {\n  GetEnsNameErrorType,\n  GetEnsNameParameters,\n  GetEnsNameReturnType,\n} from './actions/ens/getEnsName.js'\nexport type {\n  GetEnsResolverErrorType,\n  GetEnsResolverParameters,\n  GetEnsResolverReturnType,\n} from './actions/ens/getEnsResolver.js'\nexport type {\n  GetEnsTextErrorType,\n  GetEnsTextParameters,\n  GetEnsTextReturnType,\n} from './actions/ens/getEnsText.js'\nexport {\n  type GetContractErrorType,\n  type GetContractParameters,\n  type GetContractReturnType,\n  getContract,\n} from './actions/getContract.js'\nexport type {\n  CallErrorType,\n  CallParameters,\n  CallReturnType,\n} from './actions/public/call.js'\nexport type {\n  CreateAccessListErrorType,\n  CreateAccessListParameters,\n  CreateAccessListReturnType,\n} from './actions/public/createAccessList.js'\nexport type {\n  CreateBlockFilterErrorType,\n  CreateBlockFilterReturnType,\n} from './actions/public/createBlockFilter.js'\nexport type {\n  CreateContractEventFilterErrorType,\n  CreateContractEventFilterParameters,\n  CreateContractEventFilterReturnType,\n} from './actions/public/createContractEventFilter.js'\nexport type {\n  CreateEventFilterErrorType,\n  CreateEventFilterParameters,\n  CreateEventFilterReturnType,\n} from './actions/public/createEventFilter.js'\nexport type {\n  CreatePendingTransactionFilterErrorType,\n  CreatePendingTransactionFilterReturnType,\n} from './actions/public/createPendingTransactionFilter.js'\nexport type {\n  EstimateContractGasErrorType,\n  EstimateContractGasParameters,\n  EstimateContractGasReturnType,\n} from './actions/public/estimateContractGas.js'\nexport type {\n  EstimateFeesPerGasErrorType,\n  EstimateFeesPerGasParameters,\n  EstimateFeesPerGasReturnType,\n} from './actions/public/estimateFeesPerGas.js'\nexport type {\n  EstimateGasErrorType,\n  EstimateGasParameters,\n  EstimateGasReturnType,\n} from './actions/public/estimateGas.js'\nexport type {\n  EstimateMaxPriorityFeePerGasErrorType,\n  EstimateMaxPriorityFeePerGasParameters,\n  EstimateMaxPriorityFeePerGasReturnType,\n} from './actions/public/estimateMaxPriorityFeePerGas.js'\nexport type {\n  FillTransactionErrorType,\n  FillTransactionParameters,\n  FillTransactionReturnType,\n} from './actions/public/fillTransaction.js'\nexport type {\n  GetBalanceErrorType,\n  GetBalanceParameters,\n  GetBalanceReturnType,\n} from './actions/public/getBalance.js'\nexport type {\n  GetBlobBaseFeeErrorType,\n  GetBlobBaseFeeReturnType,\n} from './actions/public/getBlobBaseFee.js'\nexport type {\n  GetBlockErrorType,\n  GetBlockParameters,\n  GetBlockReturnType,\n} from './actions/public/getBlock.js'\nexport type {\n  GetBlockNumberErrorType,\n  GetBlockNumberParameters,\n  GetBlockNumberReturnType,\n} from './actions/public/getBlockNumber.js'\nexport type {\n  GetBlockTransactionCountErrorType,\n  GetBlockTransactionCountParameters,\n  GetBlockTransactionCountReturnType,\n} from './actions/public/getBlockTransactionCount.js'\nexport type {\n  GetChainIdErrorType,\n  GetChainIdReturnType,\n} from './actions/public/getChainId.js'\nexport type {\n  /** @deprecated Use `GetCodeErrorType` instead */\n  GetCodeErrorType as GetBytecodeErrorType,\n  GetCodeErrorType,\n  /** @deprecated Use `GetCodeParameters` instead */\n  GetCodeParameters as GetBytecodeParameters,\n  GetCodeParameters,\n  /** @deprecated Use `GetCodeReturnType` instead  */\n  GetCodeReturnType as GetBytecodeReturnType,\n  GetCodeReturnType,\n} from './actions/public/getCode.js'\nexport type {\n  GetContractEventsErrorType,\n  GetContractEventsParameters,\n  GetContractEventsReturnType,\n} from './actions/public/getContractEvents.js'\nexport type {\n  GetDelegationErrorType,\n  GetDelegationParameters,\n  GetDelegationReturnType,\n} from './actions/public/getDelegation.js'\nexport type {\n  GetEip712DomainErrorType,\n  GetEip712DomainParameters,\n  GetEip712DomainReturnType,\n} from './actions/public/getEip712Domain.js'\nexport type {\n  GetFeeHistoryErrorType,\n  GetFeeHistoryParameters,\n  GetFeeHistoryReturnType,\n} from './actions/public/getFeeHistory.js'\nexport type {\n  GetFilterChangesErrorType,\n  GetFilterChangesParameters,\n  GetFilterChangesReturnType,\n} from './actions/public/getFilterChanges.js'\nexport type {\n  GetFilterLogsErrorType,\n  GetFilterLogsParameters,\n  GetFilterLogsReturnType,\n} from './actions/public/getFilterLogs.js'\nexport type {\n  GetGasPriceErrorType,\n  GetGasPriceReturnType,\n} from './actions/public/getGasPrice.js'\nexport type {\n  GetLogsErrorType,\n  GetLogsParameters,\n  GetLogsReturnType,\n} from './actions/public/getLogs.js'\nexport type {\n  GetProofErrorType,\n  GetProofParameters,\n  GetProofReturnType,\n} from './actions/public/getProof.js'\nexport type {\n  GetStorageAtErrorType,\n  GetStorageAtParameters,\n  GetStorageAtReturnType,\n} from './actions/public/getStorageAt.js'\nexport type {\n  GetTransactionErrorType,\n  GetTransactionParameters,\n  GetTransactionReturnType,\n} from './actions/public/getTransaction.js'\nexport type {\n  GetTransactionConfirmationsErrorType,\n  GetTransactionConfirmationsParameters,\n  GetTransactionConfirmationsReturnType,\n} from './actions/public/getTransactionConfirmations.js'\nexport type {\n  GetTransactionCountErrorType,\n  GetTransactionCountParameters,\n  GetTransactionCountReturnType,\n} from './actions/public/getTransactionCount.js'\nexport type {\n  GetTransactionReceiptErrorType,\n  GetTransactionReceiptParameters,\n  GetTransactionReceiptReturnType,\n} from './actions/public/getTransactionReceipt.js'\nexport type {\n  MulticallErrorType,\n  MulticallParameters,\n  MulticallReturnType,\n} from './actions/public/multicall.js'\nexport type {\n  ReadContractErrorType,\n  ReadContractParameters,\n  ReadContractReturnType,\n} from './actions/public/readContract.js'\nexport type {\n  SimulateBlocksErrorType,\n  SimulateBlocksParameters,\n  SimulateBlocksReturnType,\n} from './actions/public/simulateBlocks.js'\nexport type {\n  SimulateCallsErrorType,\n  SimulateCallsParameters,\n  SimulateCallsReturnType,\n} from './actions/public/simulateCalls.js'\nexport type {\n  GetMutabilityAwareValue,\n  SimulateContractErrorType,\n  SimulateContractParameters,\n  SimulateContractReturnType,\n} from './actions/public/simulateContract.js'\nexport type {\n  UninstallFilterErrorType,\n  UninstallFilterParameters,\n  UninstallFilterReturnType,\n} from './actions/public/uninstallFilter.js'\nexport type {\n  VerifyHashErrorType as VerifyHashActionErrorType,\n  VerifyHashParameters as VerifyHashActionParameters,\n  VerifyHashReturnType as VerifyHashActionReturnType,\n} from './actions/public/verifyHash.js'\nexport type {\n  VerifyMessageErrorType as VerifyMessageActionErrorType,\n  VerifyMessageParameters as VerifyMessageActionParameters,\n  VerifyMessageReturnType as VerifyMessageActionReturnType,\n} from './actions/public/verifyMessage.js'\nexport type {\n  VerifyTypedDataErrorType as VerifyTypedDataActionErrorType,\n  VerifyTypedDataParameters as VerifyTypedDataActionParameters,\n  VerifyTypedDataReturnType as VerifyTypedDataActionReturnType,\n} from './actions/public/verifyTypedData.js'\nexport type {\n  ReplacementReason,\n  ReplacementReturnType,\n  WaitForTransactionReceiptErrorType,\n  WaitForTransactionReceiptParameters,\n  WaitForTransactionReceiptReturnType,\n} from './actions/public/waitForTransactionReceipt.js'\nexport type {\n  OnBlockNumberFn,\n  OnBlockNumberParameter,\n  WatchBlockNumberErrorType,\n  WatchBlockNumberParameters,\n  WatchBlockNumberReturnType,\n} from './actions/public/watchBlockNumber.js'\nexport type {\n  OnBlock,\n  OnBlockParameter,\n  WatchBlocksErrorType,\n  WatchBlocksParameters,\n  WatchBlocksReturnType,\n} from './actions/public/watchBlocks.js'\nexport type {\n  WatchContractEventErrorType,\n  WatchContractEventOnLogsFn,\n  WatchContractEventOnLogsParameter,\n  WatchContractEventParameters,\n  WatchContractEventReturnType,\n} from './actions/public/watchContractEvent.js'\nexport type {\n  WatchEventErrorType,\n  WatchEventOnLogsFn,\n  WatchEventOnLogsParameter,\n  WatchEventParameters,\n  WatchEventReturnType,\n} from './actions/public/watchEvent.js'\nexport type {\n  OnTransactionsFn,\n  OnTransactionsParameter,\n  WatchPendingTransactionsErrorType,\n  WatchPendingTransactionsParameters,\n  WatchPendingTransactionsReturnType,\n} from './actions/public/watchPendingTransactions.js'\nexport type {\n  DropTransactionErrorType,\n  DropTransactionParameters,\n} from './actions/test/dropTransaction.js'\nexport type {\n  DumpStateErrorType,\n  DumpStateReturnType,\n} from './actions/test/dumpState.js'\nexport type {\n  GetAutomineErrorType,\n  GetAutomineReturnType,\n} from './actions/test/getAutomine.js'\nexport type {\n  GetTxpoolContentErrorType,\n  GetTxpoolContentReturnType,\n} from './actions/test/getTxpoolContent.js'\nexport type {\n  GetTxpoolStatusErrorType,\n  GetTxpoolStatusReturnType,\n} from './actions/test/getTxpoolStatus.js'\nexport type {\n  ImpersonateAccountErrorType,\n  ImpersonateAccountParameters,\n} from './actions/test/impersonateAccount.js'\nexport type {\n  IncreaseTimeErrorType,\n  IncreaseTimeParameters,\n} from './actions/test/increaseTime.js'\nexport type {\n  InspectTxpoolErrorType,\n  InspectTxpoolReturnType,\n} from './actions/test/inspectTxpool.js'\nexport type {\n  LoadStateErrorType,\n  LoadStateParameters,\n  LoadStateReturnType,\n} from './actions/test/loadState.js'\nexport type { MineErrorType, MineParameters } from './actions/test/mine.js'\nexport type { RemoveBlockTimestampIntervalErrorType } from './actions/test/removeBlockTimestampInterval.js'\nexport type { ResetErrorType, ResetParameters } from './actions/test/reset.js'\nexport type {\n  RevertErrorType,\n  RevertParameters,\n} from './actions/test/revert.js'\nexport type {\n  SendUnsignedTransactionErrorType,\n  SendUnsignedTransactionParameters,\n  SendUnsignedTransactionReturnType,\n} from './actions/test/sendUnsignedTransaction.js'\nexport type { SetAutomineErrorType } from './actions/test/setAutomine.js'\nexport type {\n  SetBalanceErrorType,\n  SetBalanceParameters,\n} from './actions/test/setBalance.js'\nexport type {\n  SetBlockGasLimitErrorType,\n  SetBlockGasLimitParameters,\n} from './actions/test/setBlockGasLimit.js'\nexport type {\n  SetBlockTimestampIntervalErrorType,\n  SetBlockTimestampIntervalParameters,\n} from './actions/test/setBlockTimestampInterval.js'\nexport type {\n  SetCodeErrorType,\n  SetCodeParameters,\n} from './actions/test/setCode.js'\nexport type {\n  SetCoinbaseErrorType,\n  SetCoinbaseParameters,\n} from './actions/test/setCoinbase.js'\nexport type {\n  SetIntervalMiningErrorType,\n  SetIntervalMiningParameters,\n} from './actions/test/setIntervalMining.js'\nexport type { SetLoggingEnabledErrorType } from './actions/test/setLoggingEnabled.js'\nexport type {\n  SetMinGasPriceErrorType,\n  SetMinGasPriceParameters,\n} from './actions/test/setMinGasPrice.js'\nexport type {\n  SetNextBlockBaseFeePerGasErrorType,\n  SetNextBlockBaseFeePerGasParameters,\n} from './actions/test/setNextBlockBaseFeePerGas.js'\nexport type {\n  SetNextBlockTimestampErrorType,\n  SetNextBlockTimestampParameters,\n} from './actions/test/setNextBlockTimestamp.js'\nexport type {\n  SetNonceErrorType,\n  SetNonceParameters,\n} from './actions/test/setNonce.js'\nexport type { SetRpcUrlErrorType } from './actions/test/setRpcUrl.js'\nexport type {\n  SetStorageAtErrorType,\n  SetStorageAtParameters,\n} from './actions/test/setStorageAt.js'\nexport type { SnapshotErrorType } from './actions/test/snapshot.js'\nexport type {\n  StopImpersonatingAccountErrorType,\n  StopImpersonatingAccountParameters,\n} from './actions/test/stopImpersonatingAccount.js'\nexport type {\n  AddChainErrorType,\n  AddChainParameters,\n} from './actions/wallet/addChain.js'\nexport type {\n  DeployContractErrorType,\n  DeployContractParameters,\n  DeployContractReturnType,\n} from './actions/wallet/deployContract.js'\nexport type {\n  GetAddressesErrorType,\n  GetAddressesReturnType,\n} from './actions/wallet/getAddresses.js'\nexport type {\n  GetCallsStatusErrorType,\n  GetCallsStatusParameters,\n  GetCallsStatusReturnType,\n} from './actions/wallet/getCallsStatus.js'\nexport type {\n  GetCapabilitiesErrorType,\n  GetCapabilitiesParameters,\n  GetCapabilitiesReturnType,\n} from './actions/wallet/getCapabilities.js'\nexport type {\n  GetPermissionsErrorType,\n  GetPermissionsReturnType,\n} from './actions/wallet/getPermissions.js'\nexport type {\n  PrepareAuthorizationErrorType,\n  PrepareAuthorizationParameters,\n  PrepareAuthorizationReturnType,\n} from './actions/wallet/prepareAuthorization.js'\nexport type {\n  PrepareTransactionRequestErrorType,\n  PrepareTransactionRequestParameters,\n  PrepareTransactionRequestParameterType,\n  PrepareTransactionRequestRequest,\n  PrepareTransactionRequestReturnType,\n} from './actions/wallet/prepareTransactionRequest.js'\nexport type {\n  RequestAddressesErrorType,\n  RequestAddressesReturnType,\n} from './actions/wallet/requestAddresses.js'\nexport type {\n  RequestPermissionsErrorType,\n  RequestPermissionsParameters,\n  RequestPermissionsReturnType,\n} from './actions/wallet/requestPermissions.js'\nexport type {\n  SendCallsErrorType,\n  SendCallsParameters,\n  SendCallsReturnType,\n} from './actions/wallet/sendCalls.js'\nexport type {\n  SendCallsSyncErrorType,\n  SendCallsSyncParameters,\n  SendCallsSyncReturnType,\n} from './actions/wallet/sendCallsSync.js'\nexport type {\n  SendRawTransactionErrorType,\n  SendRawTransactionParameters,\n  SendRawTransactionReturnType,\n} from './actions/wallet/sendRawTransaction.js'\nexport type {\n  SendRawTransactionSyncErrorType,\n  SendRawTransactionSyncParameters,\n  SendRawTransactionSyncReturnType,\n} from './actions/wallet/sendRawTransactionSync.js'\nexport type {\n  SendTransactionErrorType,\n  SendTransactionParameters,\n  SendTransactionRequest,\n  SendTransactionReturnType,\n} from './actions/wallet/sendTransaction.js'\nexport type {\n  SendTransactionSyncErrorType,\n  SendTransactionSyncParameters,\n  SendTransactionSyncRequest,\n  SendTransactionSyncReturnType,\n} from './actions/wallet/sendTransactionSync.js'\nexport type {\n  ShowCallsStatusErrorType,\n  ShowCallsStatusParameters,\n  ShowCallsStatusReturnType,\n} from './actions/wallet/showCallsStatus.js'\nexport type {\n  SignAuthorizationErrorType,\n  SignAuthorizationParameters,\n  SignAuthorizationReturnType,\n} from './actions/wallet/signAuthorization.js'\nexport type {\n  SignMessageErrorType,\n  SignMessageParameters,\n  SignMessageReturnType,\n} from './actions/wallet/signMessage.js'\nexport type {\n  SignTransactionErrorType,\n  SignTransactionParameters,\n  SignTransactionRequest,\n  SignTransactionReturnType,\n} from './actions/wallet/signTransaction.js'\nexport type {\n  SignTypedDataErrorType,\n  SignTypedDataParameters,\n  SignTypedDataReturnType,\n} from './actions/wallet/signTypedData.js'\nexport type {\n  SwitchChainErrorType,\n  SwitchChainParameters,\n} from './actions/wallet/switchChain.js'\nexport type {\n  WaitForCallsStatusErrorType,\n  WaitForCallsStatusParameters,\n  WaitForCallsStatusReturnType,\n  WaitForCallsStatusTimeoutErrorType,\n} from './actions/wallet/waitForCallsStatus.js'\nexport { WaitForCallsStatusTimeoutError } from './actions/wallet/waitForCallsStatus.js'\nexport type {\n  WatchAssetErrorType,\n  WatchAssetParameters,\n  WatchAssetReturnType,\n} from './actions/wallet/watchAsset.js'\nexport type {\n  WriteContractErrorType,\n  WriteContractParameters,\n  WriteContractReturnType,\n} from './actions/wallet/writeContract.js'\nexport type {\n  WriteContractSyncErrorType,\n  WriteContractSyncParameters,\n  WriteContractSyncReturnType,\n} from './actions/wallet/writeContractSync.js'\nexport {\n  type Client,\n  type ClientConfig,\n  type CreateClientErrorType,\n  createClient,\n  type MulticallBatchOptions,\n  rpcSchema,\n} from './clients/createClient.js'\nexport {\n  type CreatePublicClientErrorType,\n  createPublicClient,\n  type PublicClient,\n  type PublicClientConfig,\n} from './clients/createPublicClient.js'\nexport {\n  type CreateTestClientErrorType,\n  createTestClient,\n  type TestClient,\n  type TestClientConfig,\n} from './clients/createTestClient.js'\nexport {\n  type CreateWalletClientErrorType,\n  createWalletClient,\n  type WalletClient,\n  type WalletClientConfig,\n} from './clients/createWalletClient.js'\nexport {\n  type PublicActions,\n  publicActions,\n} from './clients/decorators/public.js'\nexport {\n  type TestActions,\n  testActions,\n} from './clients/decorators/test.js'\nexport {\n  type WalletActions,\n  walletActions,\n} from './clients/decorators/wallet.js'\nexport {\n  type CreateTransportErrorType,\n  createTransport,\n  type Transport,\n  type TransportConfig,\n} from './clients/transports/createTransport.js'\nexport {\n  type CustomTransport,\n  type CustomTransportConfig,\n  type CustomTransportErrorType,\n  custom,\n} from './clients/transports/custom.js'\nexport {\n  type FallbackTransport,\n  type FallbackTransportConfig,\n  type FallbackTransportErrorType,\n  fallback,\n  shouldThrow,\n} from './clients/transports/fallback.js'\nexport {\n  type HttpTransport,\n  type HttpTransportConfig,\n  type HttpTransportErrorType,\n  http,\n} from './clients/transports/http.js'\nexport {\n  type WebSocketTransport,\n  type WebSocketTransportConfig,\n  type WebSocketTransportErrorType,\n  webSocket,\n} from './clients/transports/webSocket.js'\nexport {\n  erc20Abi,\n  erc20Abi_bytes32,\n  erc721Abi,\n  erc1155Abi,\n  erc4626Abi,\n  erc6492SignatureValidatorAbi,\n  /** @deprecated use `erc6492SignatureValidatorAbi` instead. */\n  erc6492SignatureValidatorAbi as universalSignatureValidatorAbi,\n  multicall3Abi,\n} from './constants/abis.js'\nexport { ethAddress, zeroAddress } from './constants/address.js'\nexport { zeroHash } from './constants/bytes.js'\nexport {\n  deploylessCallViaBytecodeBytecode,\n  deploylessCallViaFactoryBytecode,\n  erc6492SignatureValidatorByteCode,\n  /** @deprecated use `erc6492SignatureValidatorByteCode` instead. */\n  erc6492SignatureValidatorByteCode as universalSignatureValidatorByteCode,\n} from './constants/contracts.js'\nexport {\n  maxInt8,\n  maxInt16,\n  maxInt24,\n  maxInt32,\n  maxInt40,\n  maxInt48,\n  maxInt56,\n  maxInt64,\n  maxInt72,\n  maxInt80,\n  maxInt88,\n  maxInt96,\n  maxInt104,\n  maxInt112,\n  maxInt120,\n  maxInt128,\n  maxInt136,\n  maxInt144,\n  maxInt152,\n  maxInt160,\n  maxInt168,\n  maxInt176,\n  maxInt184,\n  maxInt192,\n  maxInt200,\n  maxInt208,\n  maxInt216,\n  maxInt224,\n  maxInt232,\n  maxInt240,\n  maxInt248,\n  maxInt256,\n  maxUint8,\n  maxUint16,\n  maxUint24,\n  maxUint32,\n  maxUint40,\n  maxUint48,\n  maxUint56,\n  maxUint64,\n  maxUint72,\n  maxUint80,\n  maxUint88,\n  maxUint96,\n  maxUint104,\n  maxUint112,\n  maxUint120,\n  maxUint128,\n  maxUint136,\n  maxUint144,\n  maxUint152,\n  maxUint160,\n  maxUint168,\n  maxUint176,\n  maxUint184,\n  maxUint192,\n  maxUint200,\n  maxUint208,\n  maxUint216,\n  maxUint224,\n  maxUint232,\n  maxUint240,\n  maxUint248,\n  maxUint256,\n  minInt8,\n  minInt16,\n  minInt24,\n  minInt32,\n  minInt40,\n  minInt48,\n  minInt56,\n  minInt64,\n  minInt72,\n  minInt80,\n  minInt88,\n  minInt96,\n  minInt104,\n  minInt112,\n  minInt120,\n  minInt128,\n  minInt136,\n  minInt144,\n  minInt152,\n  minInt160,\n  minInt168,\n  minInt176,\n  minInt184,\n  minInt192,\n  minInt200,\n  minInt208,\n  minInt216,\n  minInt224,\n  minInt232,\n  minInt240,\n  minInt248,\n  minInt256,\n} from './constants/number.js'\nexport { presignMessagePrefix } from './constants/strings.js'\nexport { etherUnits, gweiUnits, weiUnits } from './constants/unit.js'\nexport {\n  AbiConstructorNotFoundError,\n  type AbiConstructorNotFoundErrorType,\n  AbiConstructorParamsNotFoundError,\n  type AbiConstructorParamsNotFoundErrorType,\n  AbiDecodingDataSizeInvalidError,\n  type AbiDecodingDataSizeInvalidErrorType,\n  AbiDecodingDataSizeTooSmallError,\n  type AbiDecodingDataSizeTooSmallErrorType,\n  AbiDecodingZeroDataError,\n  type AbiDecodingZeroDataErrorType,\n  AbiEncodingArrayLengthMismatchError,\n  type AbiEncodingArrayLengthMismatchErrorType,\n  AbiEncodingBytesSizeMismatchError,\n  type AbiEncodingBytesSizeMismatchErrorType,\n  AbiEncodingLengthMismatchError,\n  type AbiEncodingLengthMismatchErrorType,\n  AbiErrorInputsNotFoundError,\n  type AbiErrorInputsNotFoundErrorType,\n  AbiErrorNotFoundError,\n  type AbiErrorNotFoundErrorType,\n  AbiErrorSignatureNotFoundError,\n  type AbiErrorSignatureNotFoundErrorType,\n  AbiEventNotFoundError,\n  type AbiEventNotFoundErrorType,\n  AbiEventSignatureEmptyTopicsError,\n  type AbiEventSignatureEmptyTopicsErrorType,\n  AbiEventSignatureNotFoundError,\n  type AbiEventSignatureNotFoundErrorType,\n  AbiFunctionNotFoundError,\n  type AbiFunctionNotFoundErrorType,\n  AbiFunctionOutputsNotFoundError,\n  type AbiFunctionOutputsNotFoundErrorType,\n  AbiFunctionSignatureNotFoundError,\n  type AbiFunctionSignatureNotFoundErrorType,\n  BytesSizeMismatchError,\n  type BytesSizeMismatchErrorType,\n  DecodeLogDataMismatch,\n  type DecodeLogDataMismatchErrorType,\n  DecodeLogTopicsMismatch,\n  type DecodeLogTopicsMismatchErrorType,\n  InvalidAbiDecodingTypeError,\n  type InvalidAbiDecodingTypeErrorType,\n  InvalidAbiEncodingTypeError,\n  type InvalidAbiEncodingTypeErrorType,\n  InvalidArrayError,\n  type InvalidArrayErrorType,\n  InvalidDefinitionTypeError,\n  type InvalidDefinitionTypeErrorType,\n  UnsupportedPackedAbiType,\n  type UnsupportedPackedAbiTypeErrorType,\n} from './errors/abi.js'\nexport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from './errors/address.js'\nexport { BaseError, type BaseErrorType, setErrorConfig } from './errors/base.js'\nexport {\n  BlockNotFoundError,\n  type BlockNotFoundErrorType,\n} from './errors/block.js'\nexport {\n  BundleFailedError,\n  type BundleFailedErrorType,\n} from './errors/calls.js'\nexport {\n  ChainDoesNotSupportContract,\n  type ChainDoesNotSupportContractErrorType,\n  ChainMismatchError,\n  type ChainMismatchErrorType,\n  ChainNotFoundError,\n  type ChainNotFoundErrorType,\n  ClientChainNotConfiguredError,\n  type ClientChainNotConfiguredErrorType,\n  InvalidChainIdError,\n  type InvalidChainIdErrorType,\n} from './errors/chain.js'\nexport {\n  CallExecutionError,\n  type CallExecutionErrorType,\n  ContractFunctionExecutionError,\n  type ContractFunctionExecutionErrorType,\n  ContractFunctionRevertedError,\n  type ContractFunctionRevertedErrorType,\n  ContractFunctionZeroDataError,\n  type ContractFunctionZeroDataErrorType,\n  CounterfactualDeploymentFailedError,\n  type CounterfactualDeploymentFailedErrorType,\n  RawContractError,\n  type RawContractErrorType,\n} from './errors/contract.js'\nexport {\n  SizeExceedsPaddingSizeError,\n  type SizeExceedsPaddingSizeErrorType,\n  SliceOffsetOutOfBoundsError,\n  type SliceOffsetOutOfBoundsErrorType,\n} from './errors/data.js'\nexport {\n  IntegerOutOfRangeError,\n  type IntegerOutOfRangeErrorType,\n  InvalidBytesBooleanError,\n  type InvalidBytesBooleanErrorType,\n  InvalidHexBooleanError,\n  type InvalidHexBooleanErrorType,\n  InvalidHexValueError,\n  type InvalidHexValueErrorType,\n  SizeOverflowError,\n  type SizeOverflowErrorType,\n} from './errors/encoding.js'\nexport {\n  type EnsAvatarInvalidMetadataError,\n  type EnsAvatarInvalidMetadataErrorType,\n  EnsAvatarInvalidNftUriError,\n  type EnsAvatarInvalidNftUriErrorType,\n  EnsAvatarUnsupportedNamespaceError,\n  type EnsAvatarUnsupportedNamespaceErrorType,\n  EnsAvatarUriResolutionError,\n  type EnsAvatarUriResolutionErrorType,\n  EnsInvalidChainIdError,\n  type EnsInvalidChainIdErrorType,\n} from './errors/ens.js'\nexport {\n  EstimateGasExecutionError,\n  type EstimateGasExecutionErrorType,\n} from './errors/estimateGas.js'\nexport {\n  BaseFeeScalarError,\n  type BaseFeeScalarErrorType,\n  Eip1559FeesNotSupportedError,\n  type Eip1559FeesNotSupportedErrorType,\n  MaxFeePerGasTooLowError,\n  type MaxFeePerGasTooLowErrorType,\n} from './errors/fee.js'\nexport {\n  FilterTypeNotSupportedError,\n  type FilterTypeNotSupportedErrorType,\n} from './errors/log.js'\nexport {\n  ExecutionRevertedError,\n  type ExecutionRevertedErrorType,\n  FeeCapTooHighError,\n  type FeeCapTooHighErrorType,\n  FeeCapTooLowError,\n  type FeeCapTooLowErrorType,\n  InsufficientFundsError,\n  type InsufficientFundsErrorType,\n  IntrinsicGasTooHighError,\n  type IntrinsicGasTooHighErrorType,\n  IntrinsicGasTooLowError,\n  type IntrinsicGasTooLowErrorType,\n  NonceMaxValueError,\n  type NonceMaxValueErrorType,\n  NonceTooHighError,\n  type NonceTooHighErrorType,\n  NonceTooLowError,\n  type NonceTooLowErrorType,\n  TipAboveFeeCapError,\n  type TipAboveFeeCapErrorType,\n  TransactionTypeNotSupportedError,\n  type TransactionTypeNotSupportedErrorType,\n  UnknownNodeError,\n  type UnknownNodeErrorType,\n} from './errors/node.js'\nexport {\n  HttpRequestError,\n  type HttpRequestErrorType,\n  RpcRequestError,\n  type RpcRequestErrorType,\n  SocketClosedError,\n  type SocketClosedErrorType,\n  TimeoutError,\n  type TimeoutErrorType,\n  WebSocketRequestError,\n  type WebSocketRequestErrorType,\n} from './errors/request.js'\nexport {\n  AtomicityNotSupportedError,\n  type AtomicityNotSupportedErrorType,\n  AtomicReadyWalletRejectedUpgradeError,\n  type AtomicReadyWalletRejectedUpgradeErrorType,\n  BundleTooLargeError,\n  type BundleTooLargeErrorType,\n  ChainDisconnectedError,\n  type ChainDisconnectedErrorType,\n  DuplicateIdError,\n  type DuplicateIdErrorType,\n  InternalRpcError,\n  type InternalRpcErrorType,\n  InvalidInputRpcError,\n  type InvalidInputRpcErrorType,\n  InvalidParamsRpcError,\n  type InvalidParamsRpcErrorType,\n  InvalidRequestRpcError,\n  type InvalidRequestRpcErrorType,\n  JsonRpcVersionUnsupportedError,\n  type JsonRpcVersionUnsupportedErrorType,\n  LimitExceededRpcError,\n  type LimitExceededRpcErrorType,\n  MethodNotFoundRpcError,\n  type MethodNotFoundRpcErrorType,\n  MethodNotSupportedRpcError,\n  type MethodNotSupportedRpcErrorType,\n  ParseRpcError,\n  type ParseRpcErrorType,\n  ProviderDisconnectedError,\n  type ProviderDisconnectedErrorType,\n  ProviderRpcError,\n  type ProviderRpcErrorCode,\n  type ProviderRpcErrorType,\n  ResourceNotFoundRpcError,\n  type ResourceNotFoundRpcErrorType,\n  ResourceUnavailableRpcError,\n  type ResourceUnavailableRpcErrorType,\n  RpcError,\n  type RpcErrorCode,\n  type RpcErrorType,\n  SwitchChainError,\n  TransactionRejectedRpcError,\n  type TransactionRejectedRpcErrorType,\n  UnauthorizedProviderError,\n  type UnauthorizedProviderErrorType,\n  UnknownBundleIdError,\n  type UnknownBundleIdErrorType,\n  UnknownRpcError,\n  type UnknownRpcErrorType,\n  UnsupportedChainIdError,\n  type UnsupportedChainIdErrorType,\n  UnsupportedNonOptionalCapabilityError,\n  type UnsupportedNonOptionalCapabilityErrorType,\n  UnsupportedProviderMethodError,\n  type UnsupportedProviderMethodErrorType,\n  UserRejectedRequestError,\n  type UserRejectedRequestErrorType,\n} from './errors/rpc.js'\nexport {\n  AccountStateConflictError,\n  type AccountStateConflictErrorType,\n  StateAssignmentConflictError,\n  type StateAssignmentConflictErrorType,\n} from './errors/stateOverride.js'\nexport {\n  FeeConflictError,\n  type FeeConflictErrorType,\n  InvalidLegacyVError,\n  type InvalidLegacyVErrorType,\n  InvalidSerializableTransactionError,\n  type InvalidSerializableTransactionErrorType,\n  InvalidSerializedTransactionError,\n  type InvalidSerializedTransactionErrorType,\n  InvalidSerializedTransactionTypeError,\n  type InvalidSerializedTransactionTypeErrorType,\n  InvalidStorageKeySizeError,\n  type InvalidStorageKeySizeErrorType,\n  TransactionExecutionError,\n  type TransactionExecutionErrorType,\n  TransactionNotFoundError,\n  type TransactionNotFoundErrorType,\n  TransactionReceiptNotFoundError,\n  type TransactionReceiptNotFoundErrorType,\n  WaitForTransactionReceiptTimeoutError,\n  type WaitForTransactionReceiptTimeoutErrorType,\n} from './errors/transaction.js'\nexport {\n  UrlRequiredError,\n  type UrlRequiredErrorType,\n} from './errors/transport.js'\nexport {\n  InvalidDomainError,\n  type InvalidDomainErrorType,\n  InvalidPrimaryTypeError,\n  type InvalidPrimaryTypeErrorType,\n  InvalidStructTypeError,\n  type InvalidStructTypeErrorType,\n} from './errors/typedData.js'\nexport {\n  InvalidDecimalNumberError,\n  type InvalidDecimalNumberErrorType,\n} from './errors/unit.js'\nexport type {\n  DeriveAccount,\n  HDKey,\n  ParseAccount,\n} from './types/account.js'\nexport type {\n  Authorization,\n  AuthorizationList,\n  AuthorizationRequest,\n  SerializedAuthorization,\n  SerializedAuthorizationList,\n  SignedAuthorization,\n  SignedAuthorizationList,\n} from './types/authorization.js'\nexport type {\n  Block,\n  BlockIdentifier,\n  BlockNumber,\n  BlockTag,\n  Uncle,\n} from './types/block.js'\nexport type { Call, Calls } from './types/calls.js'\nexport type {\n  Capabilities,\n  /** @deprecated Use `Capabilities` instead. */\n  Capabilities as WalletCapabilities,\n  CapabilitiesSchema,\n  /** @deprecated Use `ChainIdToCapabilities` instead. */\n  ChainIdToCapabilities as WalletCapabilitiesRecord,\n  ChainIdToCapabilities,\n  ExtractCapabilities,\n} from './types/capabilities.js'\nexport type {\n  Chain,\n  ChainConfig,\n  ChainContract,\n  ChainEstimateFeesPerGasFn,\n  ChainEstimateFeesPerGasFnParameters,\n  ChainFees,\n  ChainFeesFnParameters,\n  ChainFormatter,\n  ChainFormatters,\n  ChainMaxPriorityFeePerGasFn,\n  ChainSerializers,\n  DeriveChain,\n  ExtractChainFormatterExclude,\n  ExtractChainFormatterParameters,\n  ExtractChainFormatterReturnType,\n  GetChainParameter,\n} from './types/chain.js'\nexport type {\n  AbiEventParametersToPrimitiveTypes,\n  AbiEventParameterToPrimitiveType,\n  AbiEventTopicToPrimitiveType,\n  AbiItem,\n  AbiItemArgs,\n  AbiItemName,\n  ContractConstructorArgs,\n  ContractErrorArgs,\n  ContractErrorName,\n  ContractEventArgs,\n  ContractEventArgsFromTopics,\n  ContractEventName,\n  ContractFunctionArgs,\n  ContractFunctionName,\n  ContractFunctionParameters,\n  ContractFunctionReturnType,\n  EventDefinition,\n  ExtractAbiFunctionForArgs,\n  ExtractAbiItem,\n  ExtractAbiItemForArgs,\n  ExtractAbiItemNames,\n  GetEventArgs,\n  GetValue,\n  LogTopicType,\n  MaybeAbiEventName,\n  MaybeExtractEventArgsFromAbi,\n  UnionWiden,\n  Widen,\n} from './types/contract.js'\nexport type { DataSuffix } from './types/dataSuffix.js'\nexport type {\n  AddEthereumChainParameter,\n  BundlerRpcSchema,\n  DebugBundlerRpcSchema,\n  EIP1193EventMap,\n  EIP1193Events,\n  EIP1193Parameters,\n  EIP1193Provider,\n  EIP1193RequestFn,\n  EIP1474Methods,\n  NetworkSync,\n  PaymasterRpcSchema,\n  ProviderConnectInfo,\n  ProviderMessage,\n  ProviderRpcErrorType as EIP1193ProviderRpcErrorType,\n  PublicRpcSchema,\n  RpcSchema,\n  RpcSchemaOverride,\n  TestRpcSchema,\n  WalletCallReceipt,\n  WalletGetAssetsParameters,\n  WalletGetAssetsReturnType,\n  WalletGetCallsStatusReturnType,\n  WalletGrantPermissionsParameters,\n  WalletGrantPermissionsReturnType,\n  WalletPermission,\n  WalletPermissionCaveat,\n  WalletRpcSchema,\n  WalletSendCallsParameters,\n  WalletSendCallsReturnType,\n  WatchAssetParams,\n} from './types/eip1193.js'\nexport { ProviderRpcError as EIP1193ProviderRpcError } from './types/eip1193.js'\nexport type { BlobSidecar, BlobSidecars } from './types/eip4844.js'\nexport type { AssetGateway, AssetGatewayUrls } from './types/ens.js'\nexport type {\n  FeeHistory,\n  FeeValues,\n  FeeValuesEIP1559,\n  FeeValuesEIP4844,\n  FeeValuesLegacy,\n  FeeValuesType,\n} from './types/fee.js'\nexport type { Filter, FilterType } from './types/filter.js'\nexport type { GetTransactionRequestKzgParameter, Kzg } from './types/kzg.js'\nexport type { Log } from './types/log.js'\nexport type {\n  ByteArray,\n  CompactSignature,\n  Hash,\n  Hex,\n  LogTopic,\n  SignableMessage,\n  Signature,\n} from './types/misc.js'\nexport type {\n  MulticallContracts,\n  MulticallResponse,\n  MulticallResults,\n} from './types/multicall.js'\nexport type { Register, ResolvedRegister } from './types/register.js'\nexport type {\n  Index,\n  Quantity,\n  RpcAccountStateOverride,\n  RpcAuthorization,\n  RpcAuthorizationList,\n  RpcBlock,\n  RpcBlockIdentifier,\n  RpcBlockNumber,\n  RpcFeeHistory,\n  RpcFeeValues,\n  RpcLog,\n  RpcProof,\n  RpcStateMapping,\n  RpcStateOverride,\n  RpcTransaction,\n  RpcTransactionReceipt,\n  RpcTransactionRequest,\n  RpcUncle,\n  Status,\n} from './types/rpc.js'\nexport type {\n  StateMapping,\n  StateOverride,\n} from './types/stateOverride.js'\nexport type {\n  AccessList,\n  Transaction,\n  TransactionBase,\n  TransactionEIP1559,\n  TransactionEIP2930,\n  TransactionEIP4844,\n  TransactionEIP7702,\n  TransactionLegacy,\n  TransactionReceipt,\n  TransactionRequest,\n  TransactionRequestBase,\n  TransactionRequestEIP1559,\n  TransactionRequestEIP2930,\n  TransactionRequestEIP4844,\n  TransactionRequestEIP7702,\n  TransactionRequestGeneric,\n  TransactionRequestLegacy,\n  TransactionSerializable,\n  TransactionSerializableBase,\n  TransactionSerializableEIP1559,\n  TransactionSerializableEIP2930,\n  TransactionSerializableEIP4844,\n  TransactionSerializableEIP7702,\n  TransactionSerializableGeneric,\n  TransactionSerializableLegacy,\n  TransactionSerialized,\n  TransactionSerializedEIP1559,\n  TransactionSerializedEIP2930,\n  TransactionSerializedEIP4844,\n  TransactionSerializedEIP7702,\n  TransactionSerializedGeneric,\n  TransactionSerializedLegacy,\n  TransactionType,\n} from './types/transaction.js'\nexport type { GetPollOptions, GetTransportConfig } from './types/transport.js'\nexport type {\n  EIP712DomainDefinition,\n  MessageDefinition,\n  TypedDataDefinition,\n} from './types/typedData.js'\nexport type {\n  Assign,\n  Branded,\n  Evaluate,\n  ExactPartial,\n  ExactRequired,\n  IsNarrowable,\n  IsNever,\n  IsUndefined,\n  IsUnion,\n  LooseOmit,\n  MaybePartial,\n  MaybePromise,\n  MaybeRequired,\n  Mutable,\n  NoInfer,\n  NoUndefined,\n  Omit,\n  OneOf,\n  Or,\n  PartialBy,\n  Prettify,\n  RequiredBy,\n  Some,\n  UnionEvaluate,\n  UnionLooseOmit,\n  UnionOmit,\n  UnionPartialBy,\n  UnionPick,\n  UnionRequiredBy,\n  UnionToTuple,\n  ValueOf,\n} from './types/utils.js'\nexport type { Withdrawal } from './types/withdrawal.js'\nexport {\n  type DecodeAbiParametersErrorType,\n  type DecodeAbiParametersReturnType,\n  decodeAbiParameters,\n} from './utils/abi/decodeAbiParameters.js'\nexport {\n  type DecodeDeployDataErrorType,\n  type DecodeDeployDataParameters,\n  type DecodeDeployDataReturnType,\n  decodeDeployData,\n} from './utils/abi/decodeDeployData.js'\nexport {\n  type DecodeErrorResultErrorType,\n  type DecodeErrorResultParameters,\n  type DecodeErrorResultReturnType,\n  decodeErrorResult,\n} from './utils/abi/decodeErrorResult.js'\nexport {\n  type DecodeEventLogErrorType,\n  type DecodeEventLogParameters,\n  type DecodeEventLogReturnType,\n  decodeEventLog,\n} from './utils/abi/decodeEventLog.js'\nexport {\n  type DecodeFunctionDataErrorType,\n  type DecodeFunctionDataParameters,\n  type DecodeFunctionDataReturnType,\n  decodeFunctionData,\n} from './utils/abi/decodeFunctionData.js'\nexport {\n  type DecodeFunctionResultErrorType,\n  type DecodeFunctionResultParameters,\n  type DecodeFunctionResultReturnType,\n  decodeFunctionResult,\n} from './utils/abi/decodeFunctionResult.js'\nexport {\n  type EncodeAbiParametersErrorType,\n  type EncodeAbiParametersReturnType,\n  encodeAbiParameters,\n} from './utils/abi/encodeAbiParameters.js'\nexport {\n  type EncodeDeployDataErrorType,\n  type EncodeDeployDataParameters,\n  type EncodeDeployDataReturnType,\n  encodeDeployData,\n} from './utils/abi/encodeDeployData.js'\nexport {\n  type EncodeErrorResultErrorType,\n  type EncodeErrorResultParameters,\n  type EncodeErrorResultReturnType,\n  encodeErrorResult,\n} from './utils/abi/encodeErrorResult.js'\nexport {\n  type EncodeEventTopicsErrorType,\n  type EncodeEventTopicsParameters,\n  type EncodeEventTopicsReturnType,\n  encodeEventTopics,\n} from './utils/abi/encodeEventTopics.js'\nexport {\n  type EncodeFunctionDataErrorType,\n  type EncodeFunctionDataParameters,\n  type EncodeFunctionDataReturnType,\n  encodeFunctionData,\n} from './utils/abi/encodeFunctionData.js'\nexport {\n  type EncodeFunctionResultErrorType,\n  type EncodeFunctionResultParameters,\n  type EncodeFunctionResultReturnType,\n  encodeFunctionResult,\n} from './utils/abi/encodeFunctionResult.js'\nexport {\n  type EncodePackedErrorType,\n  encodePacked,\n} from './utils/abi/encodePacked.js'\nexport {\n  type GetAbiItemErrorType,\n  type GetAbiItemParameters,\n  type GetAbiItemReturnType,\n  getAbiItem,\n} from './utils/abi/getAbiItem.js'\nexport {\n  type ParseEventLogsErrorType,\n  type ParseEventLogsParameters,\n  type ParseEventLogsReturnType,\n  parseEventLogs,\n} from './utils/abi/parseEventLogs.js'\nexport {\n  type PrepareEncodeFunctionDataErrorType,\n  type PrepareEncodeFunctionDataParameters,\n  type PrepareEncodeFunctionDataReturnType,\n  prepareEncodeFunctionData,\n} from './utils/abi/prepareEncodeFunctionData.js'\nexport {\n  type ChecksumAddressErrorType,\n  checksumAddress,\n  type GetAddressErrorType,\n  getAddress,\n} from './utils/address/getAddress.js'\nexport {\n  type GetContractAddressOptions,\n  type GetCreate2AddressErrorType,\n  type GetCreate2AddressOptions,\n  type GetCreateAddressErrorType,\n  type GetCreateAddressOptions,\n  getContractAddress,\n  getCreate2Address,\n  getCreateAddress,\n} from './utils/address/getContractAddress.js'\nexport {\n  type IsAddressErrorType,\n  type IsAddressOptions,\n  isAddress,\n} from './utils/address/isAddress.js'\nexport {\n  type IsAddressEqualErrorType,\n  type IsAddressEqualReturnType,\n  isAddressEqual,\n} from './utils/address/isAddressEqual.js'\nexport {\n  type BlobsToCommitmentsErrorType,\n  type BlobsToCommitmentsParameters,\n  type BlobsToCommitmentsReturnType,\n  blobsToCommitments,\n} from './utils/blob/blobsToCommitments.js'\nexport {\n  blobsToProofs,\n  type blobsToProofsErrorType,\n  type blobsToProofsParameters,\n  type blobsToProofsReturnType,\n} from './utils/blob/blobsToProofs.js'\nexport {\n  type CommitmentsToVersionedHashesErrorType,\n  type CommitmentsToVersionedHashesParameters,\n  type CommitmentsToVersionedHashesReturnType,\n  commitmentsToVersionedHashes,\n} from './utils/blob/commitmentsToVersionedHashes.js'\nexport {\n  type CommitmentToVersionedHashErrorType,\n  type CommitmentToVersionedHashParameters,\n  type CommitmentToVersionedHashReturnType,\n  commitmentToVersionedHash,\n} from './utils/blob/commitmentToVersionedHash.js'\nexport {\n  type FromBlobsErrorType,\n  type FromBlobsParameters,\n  type FromBlobsReturnType,\n  fromBlobs,\n} from './utils/blob/fromBlobs.js'\nexport {\n  type SidecarsToVersionedHashesErrorType,\n  type SidecarsToVersionedHashesParameters,\n  type SidecarsToVersionedHashesReturnType,\n  sidecarsToVersionedHashes,\n} from './utils/blob/sidecarsToVersionedHashes.js'\nexport {\n  type ToBlobSidecarsErrorType,\n  type ToBlobSidecarsParameters,\n  type ToBlobSidecarsReturnType,\n  toBlobSidecars,\n} from './utils/blob/toBlobSidecars.js'\nexport {\n  type ToBlobsErrorType,\n  type ToBlobsParameters,\n  type ToBlobsReturnType,\n  toBlobs,\n} from './utils/blob/toBlobs.js'\nexport {\n  type CcipRequestErrorType,\n  type CcipRequestParameters,\n  ccipRequest,\n  /** @deprecated Use `ccipRequest`. */\n  ccipRequest as ccipFetch,\n  type OffchainLookupErrorType,\n  offchainLookup,\n  offchainLookupAbiItem,\n  offchainLookupSignature,\n} from './utils/ccip.js'\nexport {\n  type AssertCurrentChainErrorType,\n  type AssertCurrentChainParameters,\n  assertCurrentChain,\n} from './utils/chain/assertCurrentChain.js'\nexport {\n  type DefineChainReturnType,\n  defineChain,\n  extendSchema,\n} from './utils/chain/defineChain.js'\nexport {\n  type ExtractChainErrorType,\n  type ExtractChainParameters,\n  type ExtractChainReturnType,\n  extractChain,\n} from './utils/chain/extractChain.js'\nexport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from './utils/chain/getChainContractAddress.js'\nexport {\n  type ConcatBytesErrorType,\n  type ConcatErrorType,\n  type ConcatHexErrorType,\n  type ConcatReturnType,\n  concat,\n  concatBytes,\n  concatHex,\n} from './utils/data/concat.js'\nexport { type IsBytesErrorType, isBytes } from './utils/data/isBytes.js'\nexport { type IsHexErrorType, isHex } from './utils/data/isHex.js'\nexport {\n  type PadBytesErrorType,\n  type PadErrorType,\n  type PadHexErrorType,\n  type PadReturnType,\n  pad,\n  padBytes,\n  padHex,\n} from './utils/data/pad.js'\nexport { type SizeErrorType, size } from './utils/data/size.js'\nexport {\n  type SliceBytesErrorType,\n  type SliceErrorType,\n  type SliceHexErrorType,\n  slice,\n  sliceBytes,\n  sliceHex,\n} from './utils/data/slice.js'\nexport {\n  type TrimErrorType,\n  type TrimReturnType,\n  trim,\n} from './utils/data/trim.js'\nexport {\n  type BytesToBigIntErrorType,\n  type BytesToBigIntOpts,\n  type BytesToBoolErrorType,\n  type BytesToBoolOpts,\n  type BytesToNumberErrorType,\n  type BytesToNumberOpts,\n  type BytesToStringErrorType,\n  type BytesToStringOpts,\n  bytesToBigInt,\n  bytesToBool,\n  bytesToNumber,\n  bytesToString,\n  type FromBytesErrorType,\n  type FromBytesParameters,\n  fromBytes,\n} from './utils/encoding/fromBytes.js'\nexport {\n  type FromHexErrorType,\n  fromHex,\n  type HexToBigIntErrorType,\n  type HexToBoolErrorType,\n  type HexToNumberErrorType,\n  type HexToStringErrorType,\n  hexToBigInt,\n  hexToBool,\n  hexToNumber,\n  hexToString,\n} from './utils/encoding/fromHex.js'\nexport {\n  type FromRlpErrorType,\n  type FromRlpReturnType,\n  fromRlp,\n} from './utils/encoding/fromRlp.js'\nexport {\n  type BoolToBytesErrorType,\n  type BoolToBytesOpts,\n  boolToBytes,\n  type HexToBytesErrorType,\n  type HexToBytesOpts,\n  hexToBytes,\n  type NumberToBytesErrorType,\n  numberToBytes,\n  type StringToBytesErrorType,\n  type StringToBytesOpts,\n  stringToBytes,\n  type ToBytesErrorType,\n  type ToBytesParameters,\n  toBytes,\n} from './utils/encoding/toBytes.js'\nexport {\n  type BoolToHexErrorType,\n  type BoolToHexOpts,\n  type BytesToHexErrorType,\n  type BytesToHexOpts,\n  boolToHex,\n  bytesToHex,\n  type NumberToHexErrorType,\n  type NumberToHexOpts,\n  numberToHex,\n  type StringToHexErrorType,\n  type StringToHexOpts,\n  stringToHex,\n  type ToHexErrorType,\n  type ToHexParameters,\n  toHex,\n} from './utils/encoding/toHex.js'\nexport {\n  type BytesToRlpErrorType,\n  bytesToRlp,\n  type HexToRlpErrorType,\n  hexToRlp,\n  type ToRlpErrorType,\n  type ToRlpReturnType,\n  toRlp,\n} from './utils/encoding/toRlp.js'\nexport { type LabelhashErrorType, labelhash } from './utils/ens/labelhash.js'\nexport { type NamehashErrorType, namehash } from './utils/ens/namehash.js'\nexport {\n  type ToCoinTypeError,\n  toCoinType,\n} from './utils/ens/toCoinType.js'\nexport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from './utils/errors/getContractError.js'\nexport {\n  type DefineBlockErrorType,\n  defineBlock,\n  type FormatBlockErrorType,\n  type FormattedBlock,\n  formatBlock,\n} from './utils/formatters/block.js'\nexport { type FormatLogErrorType, formatLog } from './utils/formatters/log.js'\nexport {\n  type DefineTransactionErrorType,\n  defineTransaction,\n  type FormatTransactionErrorType,\n  type FormattedTransaction,\n  formatTransaction,\n  transactionType,\n} from './utils/formatters/transaction.js'\nexport {\n  type DefineTransactionReceiptErrorType,\n  defineTransactionReceipt,\n  type FormatTransactionReceiptErrorType,\n  type FormattedTransactionReceipt,\n  formatTransactionReceipt,\n} from './utils/formatters/transactionReceipt.js'\nexport {\n  type DefineTransactionRequestErrorType,\n  defineTransactionRequest,\n  type FormatTransactionRequestErrorType,\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n  rpcTransactionType,\n} from './utils/formatters/transactionRequest.js'\nexport { type IsHashErrorType, isHash } from './utils/hash/isHash.js'\nexport {\n  type Keccak256ErrorType,\n  type Keccak256Hash,\n  keccak256,\n} from './utils/hash/keccak256.js'\nexport {\n  type Ripemd160ErrorType,\n  type Ripemd160Hash,\n  ripemd160,\n} from './utils/hash/ripemd160.js'\nexport {\n  type Sha256ErrorType,\n  type Sha256Hash,\n  sha256,\n} from './utils/hash/sha256.js'\nexport {\n  type ToEventHashErrorType,\n  toEventHash,\n} from './utils/hash/toEventHash.js'\nexport {\n  type ToEventSelectorErrorType,\n  /** @deprecated use `ToEventSelectorErrorType`. */\n  type ToEventSelectorErrorType as GetEventSelectorErrorType,\n  toEventSelector,\n  /** @deprecated use `toEventSelector`. */\n  toEventSelector as getEventSelector,\n} from './utils/hash/toEventSelector.js'\nexport {\n  type ToEventSignatureErrorType,\n  /** @deprecated use `ToEventSignatureErrorType`. */\n  type ToEventSignatureErrorType as GetEventSignatureErrorType,\n  toEventSignature,\n  /** @deprecated use `toEventSignature`. */\n  toEventSignature as getEventSignature,\n} from './utils/hash/toEventSignature.js'\nexport {\n  type ToFunctionHashErrorType,\n  toFunctionHash,\n} from './utils/hash/toFunctionHash.js'\nexport {\n  type ToFunctionSelectorErrorType,\n  /** @deprecated use `ToFunctionSelectorErrorType`. */\n  type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n  toFunctionSelector,\n  /** @deprecated use `toFunctionSelector`. */\n  toFunctionSelector as getFunctionSelector,\n} from './utils/hash/toFunctionSelector.js'\nexport {\n  type ToFunctionSignatureErrorType,\n  /** @deprecated use `ToFunctionSignatureErrorType`. */\n  type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n  toFunctionSignature,\n  /** @deprecated use `toFunctionSignature`. */\n  toFunctionSignature as getFunctionSignature,\n} from './utils/hash/toFunctionSignature.js'\nexport {\n  type DefineKzgErrorType,\n  type DefineKzgParameters,\n  type DefineKzgReturnType,\n  defineKzg,\n} from './utils/kzg/defineKzg.js'\nexport {\n  type SetupKzgErrorType,\n  type SetupKzgParameters,\n  type SetupKzgReturnType,\n  setupKzg,\n} from './utils/kzg/setupKzg.js'\nexport {\n  type CreateNonceManagerParameters,\n  createNonceManager,\n  type NonceManager,\n  type NonceManagerSource,\n  nonceManager,\n} from './utils/nonceManager.js'\nexport { withCache } from './utils/promise/withCache.js'\nexport {\n  type WithRetryErrorType,\n  withRetry,\n} from './utils/promise/withRetry.js'\nexport {\n  type WithTimeoutErrorType,\n  withTimeout,\n} from './utils/promise/withTimeout.js'\nexport {\n  type CompactSignatureToSignatureErrorType,\n  compactSignatureToSignature,\n} from './utils/signature/compactSignatureToSignature.js'\nexport {\n  type HashMessageErrorType,\n  hashMessage,\n} from './utils/signature/hashMessage.js'\nexport {\n  type HashDomainErrorType,\n  type HashStructErrorType,\n  type HashTypedDataErrorType,\n  type HashTypedDataParameters,\n  type HashTypedDataReturnType,\n  hashDomain,\n  hashStruct,\n  hashTypedData,\n} from './utils/signature/hashTypedData.js'\nexport {\n  type IsErc6492SignatureErrorType,\n  type IsErc6492SignatureParameters,\n  type IsErc6492SignatureReturnType,\n  isErc6492Signature,\n} from './utils/signature/isErc6492Signature.js'\nexport {\n  type IsErc8010SignatureErrorType,\n  type IsErc8010SignatureParameters,\n  type IsErc8010SignatureReturnType,\n  isErc8010Signature,\n} from './utils/signature/isErc8010Signature.js'\nexport {\n  /** @deprecated Use `ParseCompactSignatureErrorType`. */\n  type ParseCompactSignatureErrorType as HexToCompactSignatureErrorType,\n  type ParseCompactSignatureErrorType,\n  /** @deprecated Use `parseCompactSignature`. */\n  parseCompactSignature as hexToCompactSignature,\n  parseCompactSignature,\n} from './utils/signature/parseCompactSignature.js'\nexport {\n  type ParseErc6492SignatureErrorType,\n  type ParseErc6492SignatureParameters,\n  type ParseErc6492SignatureReturnType,\n  parseErc6492Signature,\n} from './utils/signature/parseErc6492Signature.js'\nexport {\n  type ParseErc8010SignatureErrorType,\n  type ParseErc8010SignatureParameters,\n  type ParseErc8010SignatureReturnType,\n  parseErc8010Signature,\n} from './utils/signature/parseErc8010Signature.js'\nexport {\n  /** @deprecated Use `ParseSignatureErrorType`. */\n  type ParseSignatureErrorType as HexToSignatureErrorType,\n  type ParseSignatureErrorType,\n  /** @deprecated Use `parseSignature`. */\n  parseSignature as hexToSignature,\n  parseSignature,\n} from './utils/signature/parseSignature.js'\nexport {\n  type RecoverAddressErrorType,\n  type RecoverAddressParameters,\n  type RecoverAddressReturnType,\n  recoverAddress,\n} from './utils/signature/recoverAddress.js'\nexport {\n  type RecoverMessageAddressErrorType,\n  type RecoverMessageAddressParameters,\n  type RecoverMessageAddressReturnType,\n  recoverMessageAddress,\n} from './utils/signature/recoverMessageAddress.js'\nexport {\n  type RecoverPublicKeyErrorType,\n  type RecoverPublicKeyParameters,\n  type RecoverPublicKeyReturnType,\n  recoverPublicKey,\n} from './utils/signature/recoverPublicKey.js'\nexport {\n  type RecoverTransactionAddressErrorType,\n  type RecoverTransactionAddressParameters,\n  type RecoverTransactionAddressReturnType,\n  recoverTransactionAddress,\n} from './utils/signature/recoverTransactionAddress.js'\nexport {\n  type RecoverTypedDataAddressErrorType,\n  type RecoverTypedDataAddressParameters,\n  type RecoverTypedDataAddressReturnType,\n  recoverTypedDataAddress,\n} from './utils/signature/recoverTypedDataAddress.js'\nexport {\n  /** @deprecated Use `SignatureToHexErrorType` instead. */\n  type SerializeCompactSignatureErrorType as CompactSignatureToHexErrorType,\n  type SerializeCompactSignatureErrorType,\n  /** @deprecated Use `serializeCompactSignature` instead. */\n  serializeCompactSignature as compactSignatureToHex,\n  serializeCompactSignature,\n} from './utils/signature/serializeCompactSignature.js'\nexport {\n  type SerializeErc6492SignatureErrorType,\n  type SerializeErc6492SignatureParameters,\n  type SerializeErc6492SignatureReturnType,\n  serializeErc6492Signature,\n} from './utils/signature/serializeErc6492Signature.js'\nexport {\n  type SerializeErc8010SignatureErrorType,\n  type SerializeErc8010SignatureParameters,\n  type SerializeErc8010SignatureReturnType,\n  serializeErc8010Signature,\n} from './utils/signature/serializeErc8010Signature.js'\nexport {\n  /** @deprecated Use `SignatureToHexErrorType` instead. */\n  type SerializeSignatureErrorType as SignatureToHexErrorType,\n  type SerializeSignatureErrorType,\n  type SerializeSignatureParameters,\n  type SerializeSignatureReturnType,\n  /** @deprecated Use `serializeSignature` instead. */\n  serializeSignature as signatureToHex,\n  serializeSignature,\n} from './utils/signature/serializeSignature.js'\nexport {\n  type SignatureToCompactSignatureErrorType,\n  signatureToCompactSignature,\n} from './utils/signature/signatureToCompactSignature.js'\nexport {\n  type ToPrefixedMessageErrorType,\n  toPrefixedMessage,\n} from './utils/signature/toPrefixedMessage.js'\nexport {\n  type VerifyHashErrorType,\n  type VerifyHashParameters,\n  type VerifyHashReturnType,\n  verifyHash,\n} from './utils/signature/verifyHash.js'\nexport {\n  type VerifyMessageErrorType,\n  type VerifyMessageParameters,\n  type VerifyMessageReturnType,\n  verifyMessage,\n} from './utils/signature/verifyMessage.js'\nexport {\n  type VerifyTypedDataErrorType,\n  type VerifyTypedDataParameters,\n  type VerifyTypedDataReturnType,\n  verifyTypedData,\n} from './utils/signature/verifyTypedData.js'\nexport { type StringifyErrorType, stringify } from './utils/stringify.js'\nexport {\n  type AssertRequestErrorType,\n  assertRequest,\n} from './utils/transaction/assertRequest.js'\nexport {\n  type AssertTransactionEIP1559ErrorType,\n  type AssertTransactionEIP2930ErrorType,\n  type AssertTransactionLegacyErrorType,\n  assertTransactionEIP1559,\n  assertTransactionEIP2930,\n  assertTransactionLegacy,\n} from './utils/transaction/assertTransaction.js'\nexport {\n  type GetSerializedTransactionType,\n  type GetSerializedTransactionTypeErrorType,\n  getSerializedTransactionType,\n} from './utils/transaction/getSerializedTransactionType.js'\nexport {\n  type GetTransactionType,\n  type GetTransactionTypeErrorType,\n  getTransactionType,\n} from './utils/transaction/getTransactionType.js'\nexport {\n  type ParseTransactionErrorType,\n  type ParseTransactionReturnType,\n  parseTransaction,\n} from './utils/transaction/parseTransaction.js'\nexport {\n  type SerializeAccessListErrorType,\n  serializeAccessList,\n} from './utils/transaction/serializeAccessList.js'\nexport {\n  type SerializedTransactionReturnType,\n  type SerializeTransactionErrorType,\n  type SerializeTransactionFn,\n  serializeTransaction,\n} from './utils/transaction/serializeTransaction.js'\nexport {\n  type DomainSeparatorErrorType,\n  domainSeparator,\n  type GetTypesForEIP712DomainErrorType,\n  getTypesForEIP712Domain,\n  type SerializeTypedDataErrorType,\n  serializeTypedData,\n  type ValidateTypedDataErrorType,\n  validateTypedData,\n} from './utils/typedData.js'\nexport {\n  type FormatEtherErrorType,\n  formatEther,\n} from './utils/unit/formatEther.js'\nexport {\n  type FormatGweiErrorType,\n  formatGwei,\n} from './utils/unit/formatGwei.js'\nexport {\n  type FormatUnitsErrorType,\n  formatUnits,\n} from './utils/unit/formatUnits.js'\nexport {\n  type ParseEtherErrorType,\n  parseEther,\n} from './utils/unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './utils/unit/parseGwei.js'\nexport {\n  type ParseUnitsErrorType,\n  parseUnits,\n} from './utils/unit/parseUnits.js'\n", null, null, "/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/**\n * Bytes API type helpers for old + new TypeScript.\n *\n * TS 5.6 has `Uint8Array`, while TS 5.9+ made it generic `Uint8Array<ArrayBuffer>`.\n * We can't use specific return type, because TS 5.6 will error.\n * We can't use generic return type, because most TS 5.9 software will expect specific type.\n *\n * Maps typed-array input leaves to broad forms.\n * These are compatibility adapters, not ownership guarantees.\n *\n * - `TArg` keeps byte inputs broad.\n * - `TRet` marks byte outputs for TS 5.6 and TS 5.9+ compatibility.\n */\nexport type TypedArg<T> = T extends BigInt64Array\n  ? BigInt64Array\n  : T extends BigUint64Array\n    ? BigUint64Array\n    : T extends Float32Array\n      ? Float32Array\n      : T extends Float64Array\n        ? Float64Array\n        : T extends Int16Array\n          ? Int16Array\n          : T extends Int32Array\n            ? Int32Array\n            : T extends Int8Array\n              ? Int8Array\n              : T extends Uint16Array\n                ? Uint16Array\n                : T extends Uint32Array\n                  ? Uint32Array\n                  : T extends Uint8ClampedArray\n                    ? Uint8ClampedArray\n                    : T extends Uint8Array\n                      ? Uint8Array\n                      : never;\n/** Maps typed-array output leaves to narrow TS-compatible forms. */\nexport type TypedRet<T> = T extends BigInt64Array\n  ? ReturnType<typeof BigInt64Array.of>\n  : T extends BigUint64Array\n    ? ReturnType<typeof BigUint64Array.of>\n    : T extends Float32Array\n      ? ReturnType<typeof Float32Array.of>\n      : T extends Float64Array\n        ? ReturnType<typeof Float64Array.of>\n        : T extends Int16Array\n          ? ReturnType<typeof Int16Array.of>\n          : T extends Int32Array\n            ? ReturnType<typeof Int32Array.of>\n            : T extends Int8Array\n              ? ReturnType<typeof Int8Array.of>\n              : T extends Uint16Array\n                ? ReturnType<typeof Uint16Array.of>\n                : T extends Uint32Array\n                  ? ReturnType<typeof Uint32Array.of>\n                  : T extends Uint8ClampedArray\n                    ? ReturnType<typeof Uint8ClampedArray.of>\n                    : T extends Uint8Array\n                      ? ReturnType<typeof Uint8Array.of>\n                      : never;\n/** Recursively adapts byte-carrying API input types. See {@link TypedArg}. */\nexport type TArg<T> =\n  | T\n  | ([TypedArg<T>] extends [never]\n      ? T extends (...args: infer A) => infer R\n        ? ((...args: { [K in keyof A]: TRet<A[K]> }) => TArg<R>) & {\n            [K in keyof T]: T[K] extends (...args: any) => any ? T[K] : TArg<T[K]>;\n          }\n        : T extends [infer A, ...infer R]\n          ? [TArg<A>, ...{ [K in keyof R]: TArg<R[K]> }]\n          : T extends readonly [infer A, ...infer R]\n            ? readonly [TArg<A>, ...{ [K in keyof R]: TArg<R[K]> }]\n            : T extends (infer A)[]\n              ? TArg<A>[]\n              : T extends readonly (infer A)[]\n                ? readonly TArg<A>[]\n                : T extends Promise<infer A>\n                  ? Promise<TArg<A>>\n                  : T extends object\n                    ? { [K in keyof T]: TArg<T[K]> }\n                    : T\n      : TypedArg<T>);\n/** Recursively adapts byte-carrying API output types. See {@link TypedArg}. */\nexport type TRet<T> = T extends unknown\n  ? T &\n      ([TypedRet<T>] extends [never]\n        ? T extends (...args: infer A) => infer R\n          ? ((...args: { [K in keyof A]: TArg<A[K]> }) => TRet<R>) & {\n              [K in keyof T]: T[K] extends (...args: any) => any ? T[K] : TRet<T[K]>;\n            }\n          : T extends [infer A, ...infer R]\n            ? [TRet<A>, ...{ [K in keyof R]: TRet<R[K]> }]\n            : T extends readonly [infer A, ...infer R]\n              ? readonly [TRet<A>, ...{ [K in keyof R]: TRet<R[K]> }]\n              : T extends (infer A)[]\n                ? TRet<A>[]\n                : T extends readonly (infer A)[]\n                  ? readonly TRet<A>[]\n                  : T extends Promise<infer A>\n                    ? Promise<TRet<A>>\n                    : T extends object\n                      ? { [K in keyof T]: TRet<T[K]> }\n                      : T\n        : TypedRet<T>)\n  : never;\n/**\n * Checks if something is Uint8Array. Be careful: nodejs Buffer will return true.\n * @param a - value to test\n * @returns `true` when the value is a Uint8Array-compatible view.\n * @example\n * Check whether a value is a Uint8Array-compatible view.\n * ```ts\n * isBytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function isBytes(a: unknown): a is Uint8Array {\n  // Plain `instanceof Uint8Array` is too strict for some Buffer / proxy / cross-realm cases.\n  // The fallback still requires a real ArrayBuffer view, so plain\n  // JSON-deserialized `{ constructor: ... }` spoofing is rejected, and\n  // `BYTES_PER_ELEMENT === 1` keeps the fallback on byte-oriented views.\n  return (\n    a instanceof Uint8Array ||\n    (ArrayBuffer.isView(a) &&\n      a.constructor.name === 'Uint8Array' &&\n      'BYTES_PER_ELEMENT' in a &&\n      a.BYTES_PER_ELEMENT === 1)\n  );\n}\n\n/**\n * Asserts something is a non-negative integer.\n * @param n - number to validate\n * @param title - label included in thrown errors\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate a non-negative integer option.\n * ```ts\n * anumber(32, 'length');\n * ```\n */\nexport function anumber(n: number, title: string = ''): void {\n  if (typeof n !== 'number') {\n    const prefix = title && `\"${title}\" `;\n    throw new TypeError(`${prefix}expected number, got ${typeof n}`);\n  }\n  if (!Number.isSafeInteger(n) || n < 0) {\n    const prefix = title && `\"${title}\" `;\n    throw new RangeError(`${prefix}expected integer >= 0, got ${n}`);\n  }\n}\n\n/**\n * Asserts something is Uint8Array.\n * @param value - value to validate\n * @param length - optional exact length constraint\n * @param title - label included in thrown errors\n * @returns The validated byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate that a value is a byte array.\n * ```ts\n * abytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function abytes(\n  value: TArg<Uint8Array>,\n  length?: number,\n  title: string = ''\n): TRet<Uint8Array> {\n  const bytes = isBytes(value);\n  const len = value?.length;\n  const needsLen = length !== undefined;\n  if (!bytes || (needsLen && len !== length)) {\n    const prefix = title && `\"${title}\" `;\n    const ofLen = needsLen ? ` of length ${length}` : '';\n    const got = bytes ? `length=${len}` : `type=${typeof value}`;\n    const message = prefix + 'expected Uint8Array' + ofLen + ', got ' + got;\n    if (!bytes) throw new TypeError(message);\n    throw new RangeError(message);\n  }\n  return value as TRet<Uint8Array>;\n}\n\n/**\n * Copies bytes into a fresh Uint8Array.\n * Buffer-style slices can alias the same backing store, so callers that need ownership should copy.\n * @param bytes - source bytes to clone\n * @returns Freshly allocated copy of `bytes`.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Clone a byte array before mutating it.\n * ```ts\n * const copy = copyBytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function copyBytes(bytes: TArg<Uint8Array>): TRet<Uint8Array> {\n  // `Uint8Array.from(...)` would also accept arrays / other typed arrays. Keep this helper strict\n  // because callers use it at byte-validation boundaries before mutating the detached copy.\n  return Uint8Array.from(abytes(bytes)) as TRet<Uint8Array>;\n}\n\n/**\n * Asserts something is a wrapped hash constructor.\n * @param h - hash constructor to validate\n * @throws On wrong argument types or invalid hash wrapper shape. {@link TypeError}\n * @throws On invalid hash metadata ranges or values. {@link RangeError}\n * @throws If the hash metadata allows empty outputs or block sizes. {@link Error}\n * @example\n * Validate a callable hash wrapper.\n * ```ts\n * import { ahash } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * ahash(sha256);\n * ```\n */\nexport function ahash(h: TArg<CHash>): void {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new TypeError('Hash must wrapped by utils.createHasher');\n  anumber(h.outputLen);\n  anumber(h.blockLen);\n  // HMAC and KDF callers treat these as real byte lengths; allowing zero lets fake wrappers pass\n  // validation and can produce empty outputs instead of failing fast.\n  if (h.outputLen < 1) throw new Error('\"outputLen\" must be >= 1');\n  if (h.blockLen < 1) throw new Error('\"blockLen\" must be >= 1');\n}\n\n/**\n * Asserts a hash instance has not been destroyed or finished.\n * @param instance - hash instance to validate\n * @param checkFinished - whether to reject finalized instances\n * @throws If the hash instance has already been destroyed or finalized. {@link Error}\n * @example\n * Validate that a hash instance is still usable.\n * ```ts\n * import { aexists } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const hash = sha256.create();\n * aexists(hash);\n * ```\n */\nexport function aexists(instance: any, checkFinished = true): void {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/**\n * Asserts output is a sufficiently-sized byte array.\n * @param out - destination buffer\n * @param instance - hash instance providing output length\n * Oversized buffers are allowed; downstream code only promises to fill the first `outputLen` bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate a caller-provided digest buffer.\n * ```ts\n * import { aoutput } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const hash = sha256.create();\n * aoutput(new Uint8Array(hash.outputLen), hash);\n * ```\n */\nexport function aoutput(out: any, instance: any): void {\n  abytes(out, undefined, 'digestInto() output');\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new RangeError('\"digestInto() output\" expected to be of length >=' + min);\n  }\n}\n\n/** Generic type encompassing 8/16/32-byte array views, but not 64-bit variants. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/**\n * Casts a typed array view to Uint8Array.\n * @param arr - source typed array\n * @returns Uint8Array view over the same buffer.\n * @example\n * Reinterpret a typed array as bytes.\n * ```ts\n * u8(new Uint32Array([1, 2]));\n * ```\n */\nexport function u8(arr: TArg<TypedArray>): TRet<Uint8Array> {\n  return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength) as TRet<Uint8Array>;\n}\n\n/**\n * Casts a typed array view to Uint32Array.\n * `arr.byteOffset` must already be 4-byte aligned or the platform\n * Uint32Array constructor will throw.\n * @param arr - source typed array\n * @returns Uint32Array view over the same buffer.\n * @example\n * Reinterpret a byte array as 32-bit words.\n * ```ts\n * u32(new Uint8Array(8));\n * ```\n */\nexport function u32(arr: TArg<TypedArray>): TRet<Uint32Array> {\n  return new Uint32Array(\n    arr.buffer,\n    arr.byteOffset,\n    Math.floor(arr.byteLength / 4)\n  ) as TRet<Uint32Array>;\n}\n\n/**\n * Zeroizes typed arrays in place. Warning: JS provides no guarantees.\n * @param arrays - arrays to overwrite with zeros\n * @example\n * Zeroize sensitive buffers in place.\n * ```ts\n * clean(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function clean(...arrays: TArg<TypedArray[]>): void {\n  for (let i = 0; i < arrays.length; i++) {\n    arrays[i].fill(0);\n  }\n}\n\n/**\n * Creates a DataView for byte-level manipulation.\n * @param arr - source typed array\n * @returns DataView over the same buffer region.\n * @example\n * Create a DataView over an existing buffer.\n * ```ts\n * createView(new Uint8Array(4));\n * ```\n */\nexport function createView(arr: TArg<TypedArray>): DataView {\n  return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/**\n * Rotate-right operation for uint32 values.\n * @param word - source word\n * @param shift - shift amount in bits\n * @returns Rotated word.\n * @example\n * Rotate a 32-bit word to the right.\n * ```ts\n * rotr(0x12345678, 8);\n * ```\n */\nexport function rotr(word: number, shift: number): number {\n  return (word << (32 - shift)) | (word >>> shift);\n}\n\n/**\n * Rotate-left operation for uint32 values.\n * @param word - source word\n * @param shift - shift amount in bits\n * @returns Rotated word.\n * @example\n * Rotate a 32-bit word to the left.\n * ```ts\n * rotl(0x12345678, 8);\n * ```\n */\nexport function rotl(word: number, shift: number): number {\n  return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Whether the current platform is little-endian. */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n  new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/**\n * Byte-swap operation for uint32 values.\n * @param word - source word\n * @returns Word with reversed byte order.\n * @example\n * Reverse the byte order of a 32-bit word.\n * ```ts\n * byteSwap(0x11223344);\n * ```\n */\nexport function byteSwap(word: number): number {\n  return (\n    ((word << 24) & 0xff000000) |\n    ((word << 8) & 0xff0000) |\n    ((word >>> 8) & 0xff00) |\n    ((word >>> 24) & 0xff)\n  );\n}\n/**\n * Conditionally byte-swaps one 32-bit word on big-endian platforms.\n * @param n - source word\n * @returns Original or byte-swapped word depending on platform endianness.\n * @example\n * Normalize a 32-bit word for host endianness.\n * ```ts\n * swap8IfBE(0x11223344);\n * ```\n */\nexport const swap8IfBE: (n: number) => number = isLE\n  ? (n: number) => n\n  : (n: number) => byteSwap(n) >>> 0;\n\n/**\n * Byte-swaps every word of a Uint32Array in place.\n * @param arr - array to mutate\n * @returns The same array after mutation; callers pass live state arrays here.\n * @example\n * Reverse the byte order of every word in place.\n * ```ts\n * byteSwap32(new Uint32Array([0x11223344]));\n * ```\n */\nexport function byteSwap32(arr: TArg<Uint32Array>): TRet<Uint32Array> {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n  return arr as TRet<Uint32Array>;\n}\n\n/**\n * Conditionally byte-swaps a Uint32Array on big-endian platforms.\n * @param u - array to normalize for host endianness\n * @returns Original or byte-swapped array depending on platform endianness.\n *   On big-endian runtimes this mutates `u` in place via `byteSwap32(...)`.\n * @example\n * Normalize a word array for host endianness.\n * ```ts\n * swap32IfBE(new Uint32Array([0x11223344]));\n * ```\n */\nexport const swap32IfBE: (u: TArg<Uint32Array>) => TRet<Uint32Array> = isLE\n  ? (u: TArg<Uint32Array>) => u as TRet<Uint32Array>\n  : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n  // @ts-ignore\n  typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string.\n * Uses the built-in function when available and assumes it matches the tested\n * fallback semantics.\n * @param bytes - bytes to encode\n * @returns Lowercase hexadecimal string.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Convert bytes to lowercase hexadecimal.\n * ```ts\n * bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])); // 'cafe0123'\n * ```\n */\nexport function bytesToHex(bytes: TArg<Uint8Array>): string {\n  abytes(bytes);\n  // @ts-ignore\n  if (hasHexBuiltin) return bytes.toHex();\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n  if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n  if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n  if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n  return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @param hex - hexadecimal string to decode\n * @returns Decoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Decode lowercase hexadecimal into bytes.\n * ```ts\n * hexToBytes('cafe0123'); // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n * ```\n */\nexport function hexToBytes(hex: string): TRet<Uint8Array> {\n  if (typeof hex !== 'string') throw new TypeError('hex string expected, got ' + typeof hex);\n  if (hasHexBuiltin) {\n    try {\n      return (Uint8Array as any).fromHex(hex);\n    } catch (error) {\n      if (error instanceof SyntaxError) throw new RangeError(error.message);\n      throw error;\n    }\n  }\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new RangeError('hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new RangeError(\n        'hex string expected, got non-hex character \"' + char + '\" at index ' + hi\n      );\n    }\n    array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n  }\n  return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * This yields to the Promise/microtask scheduler queue, not to timers or the\n * full macrotask event loop.\n * @example\n * Yield to the next scheduler tick.\n * ```ts\n * await nextTick();\n * ```\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/**\n * Returns control to the Promise/microtask scheduler every `tick`\n * milliseconds to avoid blocking long loops.\n * @param iters - number of loop iterations to run\n * @param tick - maximum time slice in milliseconds\n * @param cb - callback executed on each iteration\n * @example\n * Run a loop that periodically yields back to the event loop.\n * ```ts\n * await asyncLoop(2, 0, () => {});\n * ```\n */\nexport async function asyncLoop(\n  iters: number,\n  tick: number,\n  cb: (i: number) => void\n): Promise<void> {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * Non-ASCII details are delegated to the platform `TextEncoder`.\n * @param str - string to encode\n * @returns UTF-8 encoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Encode a string as UTF-8 bytes.\n * ```ts\n * utf8ToBytes('abc'); // Uint8Array.from([97, 98, 99])\n * ```\n */\nexport function utf8ToBytes(str: string): TRet<Uint8Array> {\n  if (typeof str !== 'string') throw new TypeError('string expected');\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes Uint8Array or string.\n * String inputs are UTF-8 encoded; byte-array inputs stay aliased to the caller buffer.\n * @param data - user-provided KDF input\n * @param errorTitle - label included in thrown errors\n * @returns Byte representation of the input.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Normalize KDF input to bytes.\n * ```ts\n * kdfInputToBytes('password');\n * ```\n */\nexport function kdfInputToBytes(data: TArg<KDFInput>, errorTitle = ''): TRet<Uint8Array> {\n  if (typeof data === 'string') return utf8ToBytes(data);\n  return abytes(data, undefined, errorTitle);\n}\n\n/**\n * Copies several Uint8Arrays into one.\n * @param arrays - arrays to concatenate\n * @returns Concatenated byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Concatenate multiple byte arrays.\n * ```ts\n * concatBytes(new Uint8Array([1]), new Uint8Array([2]));\n * ```\n */\nexport function concatBytes(...arrays: TArg<Uint8Array[]>): TRet<Uint8Array> {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\ntype EmptyObj = {};\n/**\n * Merges default options and passed options.\n * @param defaults - base option object\n * @param opts - user overrides\n * @returns Merged option object. The merge mutates `defaults` in place.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Merge user overrides onto default options.\n * ```ts\n * checkOpts({ dkLen: 32 }, { asyncTick: 10 });\n * ```\n */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n    throw new TypeError('options must be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\n/** Common interface for all hash instances. */\nexport interface Hash<T> {\n  /** Bytes processed per compression block. */\n  blockLen: number;\n  /** Bytes produced by `digest()`. */\n  outputLen: number;\n  /** Whether the instance supports XOF-style variable-length output via `xof()` / `xofInto()`. */\n  canXOF: boolean;\n  /**\n   * Absorbs more message bytes into the running hash state.\n   * @param buf - message chunk to absorb\n   * @returns The same hash instance for chaining.\n   */\n  update(buf: TArg<Uint8Array>): this;\n  /**\n   * Finalizes the hash into a caller-provided buffer.\n   * @param buf - destination buffer\n   * @returns Nothing. Implementations write into `buf` in place.\n   */\n  digestInto(buf: TArg<Uint8Array>): void;\n  /**\n   * Finalizes the hash and returns a freshly allocated digest.\n   * @returns Digest bytes.\n   */\n  digest(): TRet<Uint8Array>;\n  /** Wipes internal state and makes the instance unusable. */\n  destroy(): void;\n  /**\n   * Copies the current hash state into an existing or new instance.\n   * @param to - Optional destination instance to reuse.\n   * @returns Cloned hash state.\n   */\n  _cloneInto(to?: T): T;\n  /**\n   * Creates an independent copy of the current hash state.\n   * @returns Cloned hash instance.\n   */\n  clone(): T;\n}\n\n/** Pseudorandom generator interface. */\nexport interface PRG {\n  /**\n   * Mixes more entropy into the generator state.\n   * @param seed - fresh entropy bytes\n   * @returns Nothing. Implementations update internal state in place.\n   */\n  addEntropy(seed: TArg<Uint8Array>): void;\n  /**\n   * Generates pseudorandom output bytes.\n   * @param length - number of bytes to generate\n   * @returns Generated pseudorandom bytes.\n   */\n  randomBytes(length: number): TRet<Uint8Array>;\n  /** Wipes generator state and makes the instance unusable. */\n  clean(): void;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  /**\n   * Reads more bytes from the XOF stream.\n   * @param bytes - number of bytes to read\n   * @returns Requested digest bytes.\n   */\n  xof(bytes: number): TRet<Uint8Array>;\n  /**\n   * Reads more bytes from the XOF stream into a caller-provided buffer.\n   * @param buf - destination buffer\n   * @returns Filled output buffer.\n   */\n  xofInto(buf: TArg<Uint8Array>): TRet<Uint8Array>;\n};\n\n/** Hash constructor or factory type. */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash metadata. */\nexport type HashInfo = {\n  /** DER-encoded object identifier bytes for the hash algorithm. */\n  oid?: TRet<Uint8Array>;\n};\n/** Callable hash function type. */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n  /** Digest size in bytes. */\n  outputLen: number;\n  /** Input block size in bytes. */\n  blockLen: number;\n  /** Whether `.create()` returns a hash instance that can be used as an XOF stream. */\n  canXOF: boolean;\n} & HashInfo &\n  (Opts extends undefined\n    ? {\n        (msg: TArg<Uint8Array>): TRet<Uint8Array>;\n        create(): T;\n      }\n    : {\n        (msg: TArg<Uint8Array>, opts?: TArg<Opts>): TRet<Uint8Array>;\n        create(opts?: Opts): T;\n      });\n/** Callable extendable-output hash function type. */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/**\n * Creates a callable hash function from a stateful class constructor.\n * @param hashCons - hash constructor or factory\n * @param info - optional metadata such as DER OID\n * @returns Frozen callable hash wrapper with `.create()`.\n *   Wrapper construction eagerly calls `hashCons(undefined)` once to read\n *   `outputLen` / `blockLen`, so constructor side effects happen at module\n *   init time.\n * @example\n * Wrap a stateful hash constructor into a callable helper.\n * ```ts\n * import { createHasher } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const wrapped = createHasher(sha256.create, { oid: sha256.oid });\n * wrapped(new Uint8Array([1]));\n * ```\n */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n  hashCons: HasherCons<T, Opts>,\n  info: TArg<HashInfo> = {}\n): TRet<CHash<T, Opts>> {\n  const hashC: any = (msg: TArg<Uint8Array>, opts?: TArg<Opts>) =>\n    hashCons(opts as Opts)\n      .update(msg)\n      .digest();\n  const tmp = hashCons(undefined);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.canXOF = tmp.canXOF;\n  hashC.create = (opts?: Opts) => hashCons(opts);\n  Object.assign(hashC, info);\n  return Object.freeze(hashC) as TRet<CHash<T, Opts>>;\n}\n\n/**\n * Cryptographically secure PRNG backed by `crypto.getRandomValues`.\n * @param bytesLength - number of random bytes to generate\n * @returns Random bytes.\n * The platform `getRandomValues()` implementation still defines any\n * single-call length cap, and this helper rejects oversize requests\n * with a stable library `RangeError` instead of host-specific errors.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @throws If the current runtime does not provide `crypto.getRandomValues`. {@link Error}\n * @example\n * Generate a fresh random key or nonce.\n * ```ts\n * const key = randomBytes(16);\n * ```\n */\nexport function randomBytes(bytesLength = 32): TRet<Uint8Array> {\n  // Match the repo's other length-taking helpers instead of relying on Uint8Array coercion.\n  anumber(bytesLength, 'bytesLength');\n  const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n  if (typeof cr?.getRandomValues !== 'function')\n    throw new Error('crypto.getRandomValues must be defined');\n  // Web Cryptography API Level 2 \u00A710.1.1:\n  // if `byteLength > 65536`, throw `QuotaExceededError`.\n  // Keep the guard explicit so callers can see the quota in code\n  // instead of discovering it by reading the spec or host errors.\n  // This wrapper surfaces the same quota as a stable library RangeError.\n  if (bytesLength > 65536)\n    throw new RangeError(`\"bytesLength\" expected <= 65536, got ${bytesLength}`);\n  return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/**\n * Creates OID metadata for NIST hashes with prefix `06 09 60 86 48 01 65 03 04 02`.\n * @param suffix - final OID byte for the selected hash.\n *   The helper accepts any byte even though only the documented NIST hash\n *   suffixes are meaningful downstream.\n * @returns Object containing the DER-encoded OID.\n * @example\n * Build OID metadata for a NIST hash.\n * ```ts\n * oidNist(0x01);\n * ```\n */\nexport const oidNist = (suffix: number): TRet<Required<HashInfo>> => ({\n  // Current NIST hashAlgs suffixes used here fit in one DER subidentifier octet.\n  // Larger suffix values would need base-128 OID encoding and a different length byte.\n  oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n", "/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport {\n  abytes,\n  aexists,\n  aoutput,\n  clean,\n  createView,\n  type Hash,\n  type TArg,\n  type TRet,\n} from './utils.ts';\n\n/**\n * Shared 32-bit conditional boolean primitive reused by SHA-256, SHA-1, and MD5 `F`.\n * Returns bits from `b` when `a` is set, otherwise from `c`.\n * The XOR form is equivalent to MD5's `F(X,Y,Z) = XY v not(X)Z` because the masked terms never\n * set the same bit.\n * @param a - selector word\n * @param b - word chosen when selector bit is set\n * @param c - word chosen when selector bit is clear\n * @returns Mixed 32-bit word.\n * @example\n * Combine three words with the shared 32-bit choice primitive.\n * ```ts\n * Chi(0xffffffff, 0x12345678, 0x87654321);\n * ```\n */\nexport function Chi(a: number, b: number, c: number): number {\n  return (a & b) ^ (~a & c);\n}\n\n/**\n * Shared 32-bit majority primitive reused by SHA-256 and SHA-1.\n * Returns bits shared by at least two inputs.\n * @param a - first input word\n * @param b - second input word\n * @param c - third input word\n * @returns Mixed 32-bit word.\n * @example\n * Combine three words with the shared 32-bit majority primitive.\n * ```ts\n * Maj(0xffffffff, 0x12345678, 0x87654321);\n * ```\n */\nexport function Maj(a: number, b: number, c: number): number {\n  return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n * Accepts only byte-aligned `Uint8Array` input, even when the underlying spec describes bit\n * strings with partial-byte tails.\n * @param blockLen - internal block size in bytes\n * @param outputLen - digest size in bytes\n * @param padOffset - trailing length field size in bytes\n * @param isLE - whether length and state words are encoded in little-endian\n * @example\n * Use a concrete subclass to get the shared Merkle-Damgard update/digest flow.\n * ```ts\n * import { _SHA1 } from '@noble/hashes/legacy.js';\n * const hash = new _SHA1();\n * hash.update(new Uint8Array([97, 98, 99]));\n * hash.digest();\n * ```\n */\nexport abstract class HashMD<T extends HashMD<T>> implements Hash<T> {\n  // Subclasses must treat `buf` as read-only: `update()` may pass a direct view over caller input\n  // when it can process whole blocks without buffering first.\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n\n  readonly blockLen: number;\n  readonly outputLen: number;\n  readonly canXOF = false;\n  readonly padOffset: number;\n  readonly isLE: boolean;\n\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n    this.blockLen = blockLen;\n    this.outputLen = outputLen;\n    this.padOffset = padOffset;\n    this.isLE = isLE;\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: TArg<Uint8Array>): this {\n    aexists(this);\n    abytes(data);\n    const { view, buffer, blockLen } = this;\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path only when there is no buffered partial block: `take === blockLen` implies\n      // `this.pos === 0`, so we can process full blocks directly from the input view.\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out: TArg<Uint8Array>): void {\n    aexists(this);\n    aoutput(out, this);\n    this.finished = true;\n    // Padding\n    // We can avoid allocation of buffer for padding completely if it\n    // was previously not allocated here. But it won't change performance.\n    const { buffer, view, blockLen, isLE } = this;\n    let { pos } = this;\n    // append the bit '1' to the message\n    buffer[pos++] = 0b10000000;\n    clean(this.buffer.subarray(pos));\n    // we have less than padOffset left in buffer, so we cannot put length in\n    // current block, need process it and pad again\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    // Pad until full block byte with zeros\n    for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n    // `padOffset` reserves the whole length field. For SHA-384/512 the high 64 bits stay zero from\n    // the padding fill above, and JS will overflow before user input can make that half non-zero.\n    // So we only need to write the low 64 bits here.\n    view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen must be aligned to 32bit');\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n  }\n  digest(): TRet<Uint8Array> {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    // Copy before destroy(): subclasses wipe `buffer` during cleanup, but `digest()` must return\n    // fresh bytes to the caller.\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res as TRet<Uint8Array>;\n  }\n  _cloneInto(to?: T): T {\n    to ||= new (this.constructor as any)() as T;\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.destroyed = destroyed;\n    to.finished = finished;\n    to.length = length;\n    to.pos = pos;\n    // Only partial-block bytes need copying: when `length % blockLen === 0`, `pos === 0` and\n    // later `update()` / `digestInto()` overwrite `to.buffer` from the start before reading it.\n    if (length % blockLen) to.buffer.set(buffer);\n    return to as unknown as any;\n  }\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state from RFC 6234 \u00A76.1: the first 32 bits of the fractional parts of the\n * square roots of the first eight prime numbers. Exported as a shared table; callers must treat\n * it as read-only because constructors copy words from it by index. */\nexport const SHA256_IV: TRet<Uint32Array> = /* @__PURE__ */ Uint32Array.from([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state `H(0)` from RFC 6234 \u00A76.1. Exported as a shared table; callers must\n * treat it as read-only because constructors copy words from it by index. */\nexport const SHA224_IV: TRet<Uint32Array> = /* @__PURE__ */ Uint32Array.from([\n  0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state from RFC 6234 \u00A76.3: eight RFC 64-bit `H(0)` words stored as sixteen\n * big-endian 32-bit halves. Derived from the fractional parts of the square roots of the ninth\n * through sixteenth prime numbers. Exported as a shared table; callers must treat it as read-only\n * because constructors copy halves from it by index. */\nexport const SHA384_IV: TRet<Uint32Array> = /* @__PURE__ */ Uint32Array.from([\n  0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n  0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state from RFC 6234 \u00A76.3: eight RFC 64-bit `H(0)` words stored as sixteen\n * big-endian 32-bit halves. Derived from the fractional parts of the square roots of the first\n * eight prime numbers. Exported as a shared table; callers must treat it as read-only because\n * constructors copy halves from it by index. */\nexport const SHA512_IV: TRet<Uint32Array> = /* @__PURE__ */ Uint32Array.from([\n  0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n  0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n", "/**\n * Internal helpers for u64.\n * BigUint64Array is too slow as per 2026, so we implement it using\n * Uint32Array.\n * @privateRemarks TODO: re-check {@link https://issues.chromium.org/issues/42212588}\n * @module\n */\nimport type { TRet } from './utils.ts';\n\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// Split bigint into two 32-bit halves. With `le=true`, returned fields become `{ h: low, l: high\n// }` to match little-endian word order rather than the property names.\nfunction fromBig(\n  n: bigint,\n  le = false\n): {\n  h: number;\n  l: number;\n} {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\n// Split bigint list into `[highWords, lowWords]` when `le=false`; with `le=true`, the first array\n// holds the low halves because `fromBig(...)` swaps the semantic meaning of `h` and `l`.\nfunction split(lst: bigint[], le = false): TRet<Uint32Array[]> {\n  const len = lst.length;\n  let Ah = new Uint32Array(len);\n  let Al = new Uint32Array(len);\n  for (let i = 0; i < len; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al] as TRet<Uint32Array[]>;\n}\n\n// Combine explicit `(high, low)` 32-bit halves into a bigint; `>>> 0` normalizes signed JS\n// bitwise results back to uint32 first, and little-endian callers must swap.\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// High 32-bit half of a 64-bit logical right shift for `s` in `0..31`.\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\n// Low 32-bit half of a 64-bit logical right shift, valid for `s` in `1..31`.\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// High 32-bit half of a 64-bit right rotate, valid for `s` in `1..31`.\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\n// Low 32-bit half of a 64-bit right rotate, valid for `s` in `1..31`.\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// High 32-bit half of a 64-bit right rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\n// Low 32-bit half of a 64-bit right rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// High 32-bit half of a 64-bit right rotate for `s === 32`; this is just the swapped low half.\nconst rotr32H = (_h: number, l: number): number => l;\n// Low 32-bit half of a 64-bit right rotate for `s === 32`; this is just the swapped high half.\nconst rotr32L = (h: number, _l: number): number => h;\n// High 32-bit half of a 64-bit left rotate, valid for `s` in `1..31`.\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\n// Low 32-bit half of a 64-bit left rotate, valid for `s` in `1..31`.\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// High 32-bit half of a 64-bit left rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\n// Low 32-bit half of a 64-bit left rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// Add two split 64-bit words and return the split `{ h, l }` sum.\n// JS uses 32-bit signed integers for bitwise operations, so we cannot simply shift the carry out\n// of the low sum and instead use division.\nfunction add(\n  Ah: number,\n  Al: number,\n  Bh: number,\n  Bl: number\n): {\n  h: number;\n  l: number;\n} {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\n// Unmasked low-word accumulator for 3-way addition; pass the raw result into `add3H(...)`.\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\n// High-word finalize step for 3-way addition; `low` must be the untruncated output of `add3L(...)`.\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\n// Unmasked low-word accumulator for 4-way addition; pass the raw result into `add4H(...)`.\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\n// High-word finalize step for 4-way addition; `low` must be the untruncated output of `add4L(...)`.\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\n// Unmasked low-word accumulator for 5-way addition; pass the raw result into `add5H(...)`.\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\n// High-word finalize step for 5-way addition; `low` must be the untruncated output of `add5L(...)`.\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n  add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// Canonical grouped namespace for callers that prefer one object.\n// Named exports stay for direct imports.\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\n// Default export mirrors named `u64` for compatibility with object-style imports.\nexport default u64;\n", "/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out {@link https://www.rfc-editor.org/rfc/rfc4634 | RFC 4634} and\n * {@link https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf | FIPS 180-4}.\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, oidNist, rotr, type TRet } from './utils.ts';\n\n/**\n * SHA-224 / SHA-256 round constants from RFC 6234 \u00A75.1: the first 32 bits\n * of the cube roots of the first 64 primes (2..311).\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable SHA-224 / SHA-256 message schedule buffer `W_t` from RFC 6234 \u00A76.2 step 1. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\n\n/** Internal SHA-224 / SHA-256 compression engine from RFC 6234 \u00A76.2. */\nabstract class SHA2_32B<T extends SHA2_32B<T>> extends HashMD<T> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  protected abstract A: number;\n  protected abstract B: number;\n  protected abstract C: number;\n  protected abstract D: number;\n  protected abstract E: number;\n  protected abstract F: number;\n  protected abstract G: number;\n  protected abstract H: number;\n\n  constructor(outputLen: number) {\n    super(64, outputLen, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ): void {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 64; i++) {\n      const W15 = SHA256_W[i - 15];\n      const W2 = SHA256_W[i - 2];\n      const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n      const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n      SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n    }\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let i = 0; i < 64; i++) {\n      const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n      const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n      const T2 = (sigma0 + Maj(A, B, C)) | 0;\n      H = G;\n      G = F;\n      F = E;\n      E = (D + T1) | 0;\n      D = C;\n      C = B;\n      B = A;\n      A = (T1 + T2) | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    F = (F + this.F) | 0;\n    G = (G + this.G) | 0;\n    H = (H + this.H) | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  protected roundClean(): void {\n    clean(SHA256_W);\n  }\n  destroy(): void {\n    // HashMD callers route post-destroy usability through `destroyed`; zeroizing alone still leaves\n    // update()/digest() callable on reused instances.\n    this.destroyed = true;\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    clean(this.buffer);\n  }\n}\n\n/** Internal SHA-256 hash class grounded in RFC 6234 \u00A76.2. */\nexport class _SHA256 extends SHA2_32B<_SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  protected A: number = SHA256_IV[0] | 0;\n  protected B: number = SHA256_IV[1] | 0;\n  protected C: number = SHA256_IV[2] | 0;\n  protected D: number = SHA256_IV[3] | 0;\n  protected E: number = SHA256_IV[4] | 0;\n  protected F: number = SHA256_IV[5] | 0;\n  protected G: number = SHA256_IV[6] | 0;\n  protected H: number = SHA256_IV[7] | 0;\n  constructor() {\n    super(32);\n  }\n}\n\n/** Internal SHA-224 hash class grounded in RFC 6234 \u00A76.2 and \u00A78.5. */\nexport class _SHA224 extends SHA2_32B<_SHA224> {\n  protected A: number = SHA224_IV[0] | 0;\n  protected B: number = SHA224_IV[1] | 0;\n  protected C: number = SHA224_IV[2] | 0;\n  protected D: number = SHA224_IV[3] | 0;\n  protected E: number = SHA224_IV[4] | 0;\n  protected F: number = SHA224_IV[5] | 0;\n  protected G: number = SHA224_IV[6] | 0;\n  protected H: number = SHA224_IV[7] | 0;\n  constructor() {\n    super(28);\n  }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// SHA-384 / SHA-512 round constants from RFC 6234 \u00A75.2:\n// 80 full 64-bit words split into high/low halves.\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n  '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n  '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n  '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n  '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n  '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n  '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n  '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n  '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n  '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n  '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n  '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n  '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n  '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n  '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n  '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n  '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n  '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n  '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n  '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n  '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable high-half schedule buffer for the RFC 6234 \u00A76.4 64-bit `W_t` words.\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\n// Reusable low-half schedule buffer for the RFC 6234 \u00A76.4 64-bit `W_t` words.\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\n/** Internal SHA-384 / SHA-512 compression engine from RFC 6234 \u00A76.4. */\nabstract class SHA2_64B<T extends SHA2_64B<T>> extends HashMD<T> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  // h -- high 32 bits, l -- low 32 bits\n  protected abstract Ah: number;\n  protected abstract Al: number;\n  protected abstract Bh: number;\n  protected abstract Bl: number;\n  protected abstract Ch: number;\n  protected abstract Cl: number;\n  protected abstract Dh: number;\n  protected abstract Dl: number;\n  protected abstract Eh: number;\n  protected abstract El: number;\n  protected abstract Fh: number;\n  protected abstract Fl: number;\n  protected abstract Gh: number;\n  protected abstract Gl: number;\n  protected abstract Hh: number;\n  protected abstract Hl: number;\n\n  constructor(outputLen: number) {\n    super(128, outputLen, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n  }\n  // prettier-ignore\n  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ): void {\n    this.Ah = Ah | 0;\n    this.Al = Al | 0;\n    this.Bh = Bh | 0;\n    this.Bl = Bl | 0;\n    this.Ch = Ch | 0;\n    this.Cl = Cl | 0;\n    this.Dh = Dh | 0;\n    this.Dl = Dl | 0;\n    this.Eh = Eh | 0;\n    this.El = El | 0;\n    this.Fh = Fh | 0;\n    this.Fl = Fl | 0;\n    this.Gh = Gh | 0;\n    this.Gl = Gl | 0;\n    this.Hh = Hh | 0;\n    this.Hl = Hl | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) {\n      SHA512_W_H[i] = view.getUint32(offset);\n      SHA512_W_L[i] = view.getUint32((offset += 4));\n    }\n    for (let i = 16; i < 80; i++) {\n      // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n      const W15h = SHA512_W_H[i - 15] | 0;\n      const W15l = SHA512_W_L[i - 15] | 0;\n      const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n      const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n      // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n      const W2h = SHA512_W_H[i - 2] | 0;\n      const W2l = SHA512_W_L[i - 2] | 0;\n      const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n      const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n      // SHA512_W[i] = s0 + s1 + SHA512_W[i - 7] + SHA512_W[i - 16];\n      const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n      const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n      SHA512_W_H[i] = SUMh | 0;\n      SHA512_W_L[i] = SUMl | 0;\n    }\n    let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    // Compression function main loop, 80 rounds\n    for (let i = 0; i < 80; i++) {\n      // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n      const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n      const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n      //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n      const CHIl = (El & Fl) ^ (~El & Gl);\n      // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n      // prettier-ignore\n      const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n      const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n      const T1l = T1ll | 0;\n      // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n      const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n      const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n      const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n      const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n      Hh = Gh | 0;\n      Hl = Gl | 0;\n      Gh = Fh | 0;\n      Gl = Fl | 0;\n      Fh = Eh | 0;\n      Fl = El | 0;\n      ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n      Dh = Ch | 0;\n      Dl = Cl | 0;\n      Ch = Bh | 0;\n      Cl = Bl | 0;\n      Bh = Ah | 0;\n      Bl = Al | 0;\n      const All = u64.add3L(T1l, sigma0l, MAJl);\n      Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n      Al = All | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n    ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n    ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n    ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n    ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n    ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n    ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n    ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n    this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n  }\n  protected roundClean(): void {\n    clean(SHA512_W_H, SHA512_W_L);\n  }\n  destroy(): void {\n    // HashMD callers route post-destroy usability through `destroyed`; zeroizing alone still leaves\n    // update()/digest() callable on reused instances.\n    this.destroyed = true;\n    clean(this.buffer);\n    this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n  }\n}\n\n/** Internal SHA-512 hash class grounded in RFC 6234 \u00A76.3 and \u00A76.4. */\nexport class _SHA512 extends SHA2_64B<_SHA512> {\n  protected Ah: number = SHA512_IV[0] | 0;\n  protected Al: number = SHA512_IV[1] | 0;\n  protected Bh: number = SHA512_IV[2] | 0;\n  protected Bl: number = SHA512_IV[3] | 0;\n  protected Ch: number = SHA512_IV[4] | 0;\n  protected Cl: number = SHA512_IV[5] | 0;\n  protected Dh: number = SHA512_IV[6] | 0;\n  protected Dl: number = SHA512_IV[7] | 0;\n  protected Eh: number = SHA512_IV[8] | 0;\n  protected El: number = SHA512_IV[9] | 0;\n  protected Fh: number = SHA512_IV[10] | 0;\n  protected Fl: number = SHA512_IV[11] | 0;\n  protected Gh: number = SHA512_IV[12] | 0;\n  protected Gl: number = SHA512_IV[13] | 0;\n  protected Hh: number = SHA512_IV[14] | 0;\n  protected Hl: number = SHA512_IV[15] | 0;\n\n  constructor() {\n    super(64);\n  }\n}\n\n/** Internal SHA-384 hash class grounded in RFC 6234 \u00A76.3 and \u00A76.4. */\nexport class _SHA384 extends SHA2_64B<_SHA384> {\n  protected Ah: number = SHA384_IV[0] | 0;\n  protected Al: number = SHA384_IV[1] | 0;\n  protected Bh: number = SHA384_IV[2] | 0;\n  protected Bl: number = SHA384_IV[3] | 0;\n  protected Ch: number = SHA384_IV[4] | 0;\n  protected Cl: number = SHA384_IV[5] | 0;\n  protected Dh: number = SHA384_IV[6] | 0;\n  protected Dl: number = SHA384_IV[7] | 0;\n  protected Eh: number = SHA384_IV[8] | 0;\n  protected El: number = SHA384_IV[9] | 0;\n  protected Fh: number = SHA384_IV[10] | 0;\n  protected Fl: number = SHA384_IV[11] | 0;\n  protected Gh: number = SHA384_IV[12] | 0;\n  protected Gl: number = SHA384_IV[13] | 0;\n  protected Hh: number = SHA384_IV[14] | 0;\n  protected Hl: number = SHA384_IV[15] | 0;\n\n  constructor() {\n    super(48);\n  }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See the repo-side derivation recipe in `test/misc/sha2-gen-iv.js`.\n * These IV literals are checked against that script rather than a dedicated\n * local RFC section.\n */\n\n/** SHA-512/224 IV derived by the SHA-512/t recipe in `test/misc/sha2-gen-iv.js` and\n * stored as sixteen big-endian 32-bit halves. */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n  0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n  0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA-512/256 IV derived by the SHA-512/t recipe in `test/misc/sha2-gen-iv.js` and\n * stored as sixteen big-endian 32-bit halves. */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n  0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n  0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\n/** Internal SHA-512/224 hash class using the derived `T224_IV` and the shared\n * RFC 6234 \u00A76.4 compression engine. */\nexport class _SHA512_224 extends SHA2_64B<_SHA512_224> {\n  protected Ah: number = T224_IV[0] | 0;\n  protected Al: number = T224_IV[1] | 0;\n  protected Bh: number = T224_IV[2] | 0;\n  protected Bl: number = T224_IV[3] | 0;\n  protected Ch: number = T224_IV[4] | 0;\n  protected Cl: number = T224_IV[5] | 0;\n  protected Dh: number = T224_IV[6] | 0;\n  protected Dl: number = T224_IV[7] | 0;\n  protected Eh: number = T224_IV[8] | 0;\n  protected El: number = T224_IV[9] | 0;\n  protected Fh: number = T224_IV[10] | 0;\n  protected Fl: number = T224_IV[11] | 0;\n  protected Gh: number = T224_IV[12] | 0;\n  protected Gl: number = T224_IV[13] | 0;\n  protected Hh: number = T224_IV[14] | 0;\n  protected Hl: number = T224_IV[15] | 0;\n\n  constructor() {\n    super(28);\n  }\n}\n\n/** Internal SHA-512/256 hash class using the derived `T256_IV` and the shared\n * RFC 6234 \u00A76.4 compression engine. */\nexport class _SHA512_256 extends SHA2_64B<_SHA512_256> {\n  protected Ah: number = T256_IV[0] | 0;\n  protected Al: number = T256_IV[1] | 0;\n  protected Bh: number = T256_IV[2] | 0;\n  protected Bl: number = T256_IV[3] | 0;\n  protected Ch: number = T256_IV[4] | 0;\n  protected Cl: number = T256_IV[5] | 0;\n  protected Dh: number = T256_IV[6] | 0;\n  protected Dl: number = T256_IV[7] | 0;\n  protected Eh: number = T256_IV[8] | 0;\n  protected El: number = T256_IV[9] | 0;\n  protected Fh: number = T256_IV[10] | 0;\n  protected Fl: number = T256_IV[11] | 0;\n  protected Gh: number = T256_IV[12] | 0;\n  protected Gl: number = T256_IV[13] | 0;\n  protected Hh: number = T256_IV[14] | 0;\n  protected Hl: number = T256_IV[15] | 0;\n\n  constructor() {\n    super(32);\n  }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n *\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA2-256.\n * ```ts\n * sha256(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha256: TRet<CHash<_SHA256>> = /* @__PURE__ */ createHasher(\n  () => new _SHA256(),\n  /* @__PURE__ */ oidNist(0x01)\n);\n/**\n * SHA2-224 hash function from RFC 4634.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA2-224.\n * ```ts\n * sha224(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha224: TRet<CHash<_SHA224>> = /* @__PURE__ */ createHasher(\n  () => new _SHA224(),\n  /* @__PURE__ */ oidNist(0x04)\n);\n\n/**\n * SHA2-512 hash function from RFC 4634.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA2-512.\n * ```ts\n * sha512(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha512: TRet<CHash<_SHA512>> = /* @__PURE__ */ createHasher(\n  () => new _SHA512(),\n  /* @__PURE__ */ oidNist(0x03)\n);\n/**\n * SHA2-384 hash function from RFC 4634.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA2-384.\n * ```ts\n * sha384(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha384: TRet<CHash<_SHA384>> = /* @__PURE__ */ createHasher(\n  () => new _SHA384(),\n  /* @__PURE__ */ oidNist(0x02)\n);\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on {@link https://eprint.iacr.org/2010/548.pdf | truncated SHA512}.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA2-512/256.\n * ```ts\n * sha512_256(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha512_256: TRet<CHash<_SHA512_256>> = /* @__PURE__ */ createHasher(\n  () => new _SHA512_256(),\n  /* @__PURE__ */ oidNist(0x06)\n);\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on {@link https://eprint.iacr.org/2010/548.pdf | truncated SHA512}.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA2-512/224.\n * ```ts\n * sha512_224(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha512_224: TRet<CHash<_SHA512_224>> = /* @__PURE__ */ createHasher(\n  () => new _SHA512_224(),\n  /* @__PURE__ */ oidNist(0x05)\n);\n", "/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n  abytes as abytes_,\n  anumber as anumber_,\n  bytesToHex as bytesToHex_,\n  concatBytes as concatBytes_,\n  hexToBytes as hexToBytes_,\n  isBytes as isBytes_,\n  randomBytes as randomBytes_,\n} from '@noble/hashes/utils.js';\n/**\n * Bytes API type helpers for old + new TypeScript.\n *\n * TS 5.6 has `Uint8Array`, while TS 5.9+ made it generic `Uint8Array<ArrayBuffer>`.\n * We can't use specific return type, because TS 5.6 will error.\n * We can't use generic return type, because most TS 5.9 software will expect specific type.\n *\n * Maps typed-array input leaves to broad forms.\n * These are compatibility adapters, not ownership guarantees.\n *\n * - `TArg` keeps byte inputs broad.\n * - `TRet` marks byte outputs for TS 5.6 and TS 5.9+ compatibility.\n */\nexport type TypedArg<T> = T extends BigInt64Array\n  ? BigInt64Array\n  : T extends BigUint64Array\n    ? BigUint64Array\n    : T extends Float32Array\n      ? Float32Array\n      : T extends Float64Array\n        ? Float64Array\n        : T extends Int16Array\n          ? Int16Array\n          : T extends Int32Array\n            ? Int32Array\n            : T extends Int8Array\n              ? Int8Array\n              : T extends Uint16Array\n                ? Uint16Array\n                : T extends Uint32Array\n                  ? Uint32Array\n                  : T extends Uint8ClampedArray\n                    ? Uint8ClampedArray\n                    : T extends Uint8Array\n                      ? Uint8Array\n                      : never;\n/** Maps typed-array output leaves to narrow TS-compatible forms. */\nexport type TypedRet<T> = T extends BigInt64Array\n  ? ReturnType<typeof BigInt64Array.of>\n  : T extends BigUint64Array\n    ? ReturnType<typeof BigUint64Array.of>\n    : T extends Float32Array\n      ? ReturnType<typeof Float32Array.of>\n      : T extends Float64Array\n        ? ReturnType<typeof Float64Array.of>\n        : T extends Int16Array\n          ? ReturnType<typeof Int16Array.of>\n          : T extends Int32Array\n            ? ReturnType<typeof Int32Array.of>\n            : T extends Int8Array\n              ? ReturnType<typeof Int8Array.of>\n              : T extends Uint16Array\n                ? ReturnType<typeof Uint16Array.of>\n                : T extends Uint32Array\n                  ? ReturnType<typeof Uint32Array.of>\n                  : T extends Uint8ClampedArray\n                    ? ReturnType<typeof Uint8ClampedArray.of>\n                    : T extends Uint8Array\n                      ? ReturnType<typeof Uint8Array.of>\n                      : never;\n/** Recursively adapts byte-carrying API input types. See {@link TypedArg}. */\nexport type TArg<T> =\n  | T\n  | ([TypedArg<T>] extends [never]\n      ? T extends (...args: infer A) => infer R\n        ? ((...args: { [K in keyof A]: TRet<A[K]> }) => TArg<R>) & {\n            [K in keyof T]: T[K] extends (...args: any) => any ? T[K] : TArg<T[K]>;\n          }\n        : T extends [infer A, ...infer R]\n          ? [TArg<A>, ...{ [K in keyof R]: TArg<R[K]> }]\n          : T extends readonly [infer A, ...infer R]\n            ? readonly [TArg<A>, ...{ [K in keyof R]: TArg<R[K]> }]\n            : T extends (infer A)[]\n              ? TArg<A>[]\n              : T extends readonly (infer A)[]\n                ? readonly TArg<A>[]\n                : T extends Promise<infer A>\n                  ? Promise<TArg<A>>\n                  : T extends object\n                    ? { [K in keyof T]: TArg<T[K]> }\n                    : T\n      : TypedArg<T>);\n/** Recursively adapts byte-carrying API output types. See {@link TypedArg}. */\nexport type TRet<T> = T extends unknown\n  ? T &\n      ([TypedRet<T>] extends [never]\n        ? T extends (...args: infer A) => infer R\n          ? ((...args: { [K in keyof A]: TArg<A[K]> }) => TRet<R>) & {\n              [K in keyof T]: T[K] extends (...args: any) => any ? T[K] : TRet<T[K]>;\n            }\n          : T extends [infer A, ...infer R]\n            ? [TRet<A>, ...{ [K in keyof R]: TRet<R[K]> }]\n            : T extends readonly [infer A, ...infer R]\n              ? readonly [TRet<A>, ...{ [K in keyof R]: TRet<R[K]> }]\n              : T extends (infer A)[]\n                ? TRet<A>[]\n                : T extends readonly (infer A)[]\n                  ? readonly TRet<A>[]\n                  : T extends Promise<infer A>\n                    ? Promise<TRet<A>>\n                    : T extends object\n                      ? { [K in keyof T]: TRet<T[K]> }\n                      : T\n        : TypedRet<T>)\n  : never;\n/**\n * Validates that a value is a byte array.\n * @param value - Value to validate.\n * @param length - Optional exact byte length.\n * @param title - Optional field name.\n * @returns Original byte array.\n * @example\n * Reject non-byte input before passing data into curve code.\n *\n * ```ts\n * abytes(new Uint8Array(1));\n * ```\n */\nexport const abytes = <T extends TArg<Uint8Array>>(value: T, length?: number, title?: string): T =>\n  abytes_(value, length, title) as T;\n/**\n * Validates that a value is a non-negative safe integer.\n * @param n - Value to validate.\n * @param title - Optional field name.\n * @example\n * Validate a numeric length before allocating buffers.\n *\n * ```ts\n * anumber(1);\n * ```\n */\nexport const anumber: typeof anumber_ = anumber_;\n/**\n * Encodes bytes as lowercase hex.\n * @param bytes - Bytes to encode.\n * @returns Lowercase hex string.\n * @example\n * Serialize bytes as hex for logging or fixtures.\n *\n * ```ts\n * bytesToHex(Uint8Array.of(1, 2, 3));\n * ```\n */\nexport const bytesToHex: typeof bytesToHex_ = bytesToHex_;\n/**\n * Concatenates byte arrays.\n * @param arrays - Byte arrays to join.\n * @returns Concatenated bytes.\n * @example\n * Join domain-separated chunks into one buffer.\n *\n * ```ts\n * concatBytes(Uint8Array.of(1), Uint8Array.of(2));\n * ```\n */\nexport const concatBytes = (...arrays: TArg<Uint8Array[]>): TRet<Uint8Array> =>\n  concatBytes_(...arrays) as TRet<Uint8Array>;\n/**\n * Decodes lowercase or uppercase hex into bytes.\n * @param hex - Hex string to decode.\n * @returns Decoded bytes.\n * @example\n * Parse fixture hex into bytes before hashing.\n *\n * ```ts\n * hexToBytes('0102');\n * ```\n */\nexport const hexToBytes = (hex: string): TRet<Uint8Array> => hexToBytes_(hex) as TRet<Uint8Array>;\n/**\n * Checks whether a value is a Uint8Array.\n * @param a - Value to inspect.\n * @returns `true` when `a` is a Uint8Array.\n * @example\n * Branch on byte input before decoding it.\n *\n * ```ts\n * isBytes(new Uint8Array(1));\n * ```\n */\nexport const isBytes: typeof isBytes_ = isBytes_;\n/**\n * Reads random bytes from the platform CSPRNG.\n * @param bytesLength - Number of random bytes to read.\n * @returns Fresh random bytes.\n * @example\n * Generate a random seed for a keypair.\n *\n * ```ts\n * randomBytes(2);\n * ```\n */\nexport const randomBytes = (bytesLength?: number): TRet<Uint8Array> =>\n  randomBytes_(bytesLength) as TRet<Uint8Array>;\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\n\n/** Callable hash interface with metadata and optional extendable output support. */\nexport type CHash = {\n  /**\n   * Hash one message.\n   * @param message - Message bytes to hash.\n   * @returns Digest bytes.\n   */\n  (message: TArg<Uint8Array>): TRet<Uint8Array>;\n  /** Hash block length in bytes. */\n  blockLen: number;\n  /** Default output length in bytes. */\n  outputLen: number;\n  /** Whether `.create()` can be used as an XOF stream. */\n  canXOF: boolean;\n  /**\n   * Create one stateful hash or XOF instance, for example SHAKE with a custom output length.\n   * @param opts - Optional extendable-output configuration:\n   *   - `dkLen` (optional): Optional output length for XOF-style hashes.\n   * @returns Hash instance.\n   */\n  create(opts?: { dkLen?: number }): any;\n};\n/** Plain callable hash interface. */\nexport type FHash = (message: TArg<Uint8Array>) => TRet<Uint8Array>;\n/** HMAC callback signature. */\nexport type HmacFn = (key: TArg<Uint8Array>, message: TArg<Uint8Array>) => TRet<Uint8Array>;\n/**\n * Validates that a flag is boolean.\n * @param value - Value to validate.\n * @param title - Optional field name.\n * @returns Original value.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Reject non-boolean option flags early.\n *\n * ```ts\n * abool(true);\n * ```\n */\nexport function abool(value: boolean, title: string = ''): boolean {\n  if (typeof value !== 'boolean') {\n    const prefix = title && `\"${title}\" `;\n    throw new TypeError(prefix + 'expected boolean, got type=' + typeof value);\n  }\n  return value;\n}\n\n/**\n * Validates that a value is a non-negative bigint or safe integer.\n * @param n - Value to validate.\n * @returns The same validated value.\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate one integer-like value before serializing it.\n *\n * ```ts\n * abignumber(1n);\n * ```\n */\nexport function abignumber<T extends number | bigint>(n: T): T {\n  if (typeof n === 'bigint') {\n    if (!isPosBig(n)) throw new RangeError('positive bigint expected, got ' + n);\n  } else anumber(n);\n  return n;\n}\n\n/**\n * Validates that a value is a safe integer.\n * @param value - Integer to validate.\n * @param title - Optional field name.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate a window size before scalar arithmetic uses it.\n *\n * ```ts\n * asafenumber(1);\n * ```\n */\nexport function asafenumber(value: number, title: string = ''): void {\n  if (typeof value !== 'number') {\n    const prefix = title && `\"${title}\" `;\n    throw new TypeError(prefix + 'expected number, got type=' + typeof value);\n  }\n  if (!Number.isSafeInteger(value)) {\n    const prefix = title && `\"${title}\" `;\n    throw new RangeError(prefix + 'expected safe integer, got ' + value);\n  }\n}\n\n/**\n * Encodes a bigint into even-length big-endian hex.\n * The historical \"unpadded\" name only means \"no fixed-width field padding\"; odd-length hex still\n * gets one leading zero nibble so the result always represents whole bytes.\n * @param num - Number to encode.\n * @returns Big-endian hex string.\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Encode a scalar into hex without a `0x` prefix.\n *\n * ```ts\n * numberToHexUnpadded(255n);\n * ```\n */\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = abignumber(num).toString(16);\n  return hex.length & 1 ? '0' + hex : hex;\n}\n\n/**\n * Parses a big-endian hex string into bigint.\n * Accepts odd-length hex through the native `BigInt('0x' + hex)` parser and currently surfaces the\n * same native `SyntaxError` for malformed hex instead of wrapping it in a library-specific error.\n * @param hex - Hex string without `0x`.\n * @returns Parsed bigint value.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Parse a scalar from fixture hex.\n *\n * ```ts\n * hexToNumber('ff');\n * ```\n */\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new TypeError('hex string expected, got ' + typeof hex);\n  return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n\n// BE: Big Endian, LE: Little Endian\n/**\n * Parses big-endian bytes into bigint.\n * @param bytes - Bytes in big-endian order.\n * @returns Parsed bigint value.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Read a scalar encoded in network byte order.\n *\n * ```ts\n * bytesToNumberBE(Uint8Array.of(1, 0));\n * ```\n */\nexport function bytesToNumberBE(bytes: TArg<Uint8Array>): bigint {\n  return hexToNumber(bytesToHex_(bytes));\n}\n/**\n * Parses little-endian bytes into bigint.\n * @param bytes - Bytes in little-endian order.\n * @returns Parsed bigint value.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Read a scalar encoded in little-endian form.\n *\n * ```ts\n * bytesToNumberLE(Uint8Array.of(1, 0));\n * ```\n */\nexport function bytesToNumberLE(bytes: TArg<Uint8Array>): bigint {\n  return hexToNumber(bytesToHex_(copyBytes(abytes_(bytes)).reverse()));\n}\n\n/**\n * Encodes a bigint into fixed-length big-endian bytes.\n * @param n - Number to encode.\n * @param len - Output length in bytes. Must be greater than zero.\n * @returns Big-endian byte array.\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Serialize a scalar into a 32-byte field element.\n *\n * ```ts\n * numberToBytesBE(255n, 2);\n * ```\n */\nexport function numberToBytesBE(n: number | bigint, len: number): TRet<Uint8Array> {\n  anumber_(len);\n  if (len === 0) throw new RangeError('zero length');\n  n = abignumber(n);\n  const hex = n.toString(16);\n  // Detect overflow before hex parsing so oversized values don't leak the shared odd-hex error.\n  if (hex.length > len * 2) throw new RangeError('number too large');\n  return hexToBytes_(hex.padStart(len * 2, '0')) as TRet<Uint8Array>;\n}\n/**\n * Encodes a bigint into fixed-length little-endian bytes.\n * @param n - Number to encode.\n * @param len - Output length in bytes.\n * @returns Little-endian byte array.\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Serialize a scalar for little-endian protocols.\n *\n * ```ts\n * numberToBytesLE(255n, 2);\n * ```\n */\nexport function numberToBytesLE(n: number | bigint, len: number): TRet<Uint8Array> {\n  return numberToBytesBE(n, len).reverse() as TRet<Uint8Array>;\n}\n// Unpadded, rarely used\n/**\n * Encodes a bigint into variable-length big-endian bytes.\n * @param n - Number to encode.\n * @returns Variable-length big-endian bytes.\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Serialize a bigint without fixed-width padding.\n *\n * ```ts\n * numberToVarBytesBE(255n);\n * ```\n */\nexport function numberToVarBytesBE(n: number | bigint): TRet<Uint8Array> {\n  return hexToBytes_(numberToHexUnpadded(abignumber(n))) as TRet<Uint8Array>;\n}\n\n// Compares 2 u8a-s in kinda constant time\n/**\n * Compares two byte arrays in constant-ish time.\n * @param a - Left byte array.\n * @param b - Right byte array.\n * @returns `true` when bytes match.\n * @example\n * Compare two encoded points without early exit.\n *\n * ```ts\n * equalBytes(Uint8Array.of(1), Uint8Array.of(1));\n * ```\n */\nexport function equalBytes(a: TArg<Uint8Array>, b: TArg<Uint8Array>): boolean {\n  a = abytes(a);\n  b = abytes(b);\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n/**\n * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer,\n * and Buffer#slice creates mutable copy. Never use Buffers!\n * @param bytes - Bytes to copy.\n * @returns Detached copy.\n * @example\n * Make an isolated copy before mutating serialized bytes.\n *\n * ```ts\n * copyBytes(Uint8Array.of(1, 2, 3));\n * ```\n */\nexport function copyBytes(bytes: TArg<Uint8Array>): TRet<Uint8Array> {\n  // `Uint8Array.from(...)` would also accept arrays / other typed arrays. Keep this helper strict\n  // because callers use it at byte-validation boundaries before mutating the detached copy.\n  return Uint8Array.from(abytes(bytes)) as TRet<Uint8Array>;\n}\n\n/**\n * Decodes 7-bit ASCII string to Uint8Array, throws on non-ascii symbols\n * Should be safe to use for things expected to be ASCII.\n * Returns exact same result as `TextEncoder` for ASCII or throws.\n * @param ascii - ASCII input text.\n * @returns Encoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Encode an ASCII domain-separation tag.\n *\n * ```ts\n * asciiToBytes('ABC');\n * ```\n */\nexport function asciiToBytes(ascii: string): TRet<Uint8Array> {\n  if (typeof ascii !== 'string') throw new TypeError('ascii string expected, got ' + typeof ascii);\n  return Uint8Array.from(ascii, (c, i) => {\n    const charCode = c.charCodeAt(0);\n    if (c.length !== 1 || charCode > 127) {\n      throw new RangeError(\n        `string contains non-ASCII character \"${ascii[i]}\" with code ${charCode} at position ${i}`\n      );\n    }\n    return charCode;\n  }) as TRet<Uint8Array>;\n}\n\n// Historical name: this accepts non-negative bigints, including zero.\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\n/**\n * Checks whether a bigint lies inside a half-open range.\n * @param n - Candidate value.\n * @param min - Inclusive lower bound.\n * @param max - Exclusive upper bound.\n * @returns `true` when the value is inside the range.\n * @example\n * Check whether a candidate scalar fits the field order.\n *\n * ```ts\n * inRange(2n, 1n, 3n);\n * ```\n */\nexport function inRange(n: bigint, min: bigint, max: bigint): boolean {\n  return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts `min <= n < max`. NOTE: upper bound is exclusive.\n * @param title - Value label for error messages.\n * @param n - Candidate value.\n * @param min - Inclusive lower bound.\n * @param max - Exclusive upper bound.\n * Wrong-type inputs are not separated from out-of-range values here: they still flow through the\n * shared `RangeError` path because this is only a throwing wrapper around `inRange(...)`.\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Assert that a bigint stays within one half-open range.\n *\n * ```ts\n * aInRange('x', 2n, 1n, 256n);\n * ```\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint): void {\n  // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n  // consider P=256n, min=0n, max=P\n  // - a for min=0 would require -1:          `inRange('x', x, -1n, P)`\n  // - b would commonly require subtraction:  `inRange('x', x, 0n, P - 1n)`\n  // - our way is the cleanest:               `inRange('x', x, 0n, P)\n  if (!inRange(n, min, max))\n    throw new RangeError('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n * @param n - Value to inspect.\n * @returns Bit length.\n * @throws If the value is negative. {@link Error}\n * @example\n * Measure the bit length of a scalar before serialization.\n *\n * ```ts\n * bitLen(8n);\n * ```\n */\nexport function bitLen(n: bigint): number {\n  // Size callers in this repo only use non-negative orders / scalars, so negative inputs are a\n  // contract bug and must not silently collapse to zero bits.\n  if (n < _0n) throw new Error('expected non-negative bigint, got ' + n);\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n * @param n - Source value.\n * @param pos - Bit position. Negative positions are passed through to raw\n *   bigint shift semantics; because the mask is built as `1n << pos`,\n *   they currently collapse to `0n` and make the helper a no-op.\n * @returns Bit as bigint.\n * @example\n * Gets single bit at position.\n *\n * ```ts\n * bitGet(5n, 0);\n * ```\n */\nexport function bitGet(n: bigint, pos: number): bigint {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n * @param n - Source value.\n * @param pos - Bit position. Negative positions are passed through to raw bigint shift semantics,\n *   so they currently behave like left shifts.\n * @param value - Whether the bit should be set.\n * @returns Updated bigint.\n * @example\n * Sets single bit at position.\n *\n * ```ts\n * bitSet(0n, 1, true);\n * ```\n */\nexport function bitSet(n: bigint, pos: number, value: boolean): bigint {\n  const mask = _1n << BigInt(pos);\n  // Clearing needs AND-not here; OR with zero leaves an already-set bit untouched.\n  return value ? n | mask : n & ~mask;\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n * @param n - Number of bits. Negative widths are currently passed through to raw bigint shift\n *   semantics and therefore produce `-1n`.\n * @returns Bitmask value.\n * @example\n * Calculate mask for N bits.\n *\n * ```ts\n * bitMask(4);\n * ```\n */\nexport const bitMask = (n: number): bigint => (_1n << BigInt(n)) - _1n;\n\n// DRBG\n\ntype Pred<T> = (v: TArg<Uint8Array>) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @param hashLen - Hash output size in bytes. Callers are expected to pass a positive length; `0`\n *   is not rejected here and would make the internal generate loop non-progressing.\n * @param qByteLen - Requested output size in bytes. Callers are expected to pass a positive length.\n * @param hmacFn - HMAC implementation.\n * @returns Function that will call DRBG until the predicate returns anything\n *   other than `undefined`.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Build a deterministic nonce generator for RFC6979-style signing.\n *\n * ```ts\n * import { createHmacDrbg } from '@noble/curves/utils.js';\n * import { hmac } from '@noble/hashes/hmac.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const drbg = createHmacDrbg(32, 32, (key, msg) => hmac(sha256, key, msg));\n * const seed = new Uint8Array(32);\n * drbg(seed, (bytes) => bytes);\n * ```\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: TArg<HmacFn>\n): TRet<(seed: Uint8Array, predicate: Pred<T>) => T> {\n  anumber_(hashLen, 'hashLen');\n  anumber_(qByteLen, 'qByteLen');\n  if (typeof hmacFn !== 'function') throw new TypeError('hmacFn must be a function');\n  // creates Uint8Array\n  const u8n = (len: number): TRet<Uint8Array> => new Uint8Array(len) as TRet<Uint8Array>;\n  const NULL = Uint8Array.of();\n  const byte0 = Uint8Array.of(0x00);\n  const byte1 = Uint8Array.of(0x01);\n  const _maxDrbgIters = 1000;\n\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8).\n  // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 signatures.\n  let v: Uint8Array = u8n(hashLen);\n  // Steps B and C of RFC6979 3.2.\n  let k: Uint8Array = u8n(hashLen);\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  // hmac(k)(v, ...values)\n  const h = (...msgs: TArg<Uint8Array[]>) => (hmacFn as HmacFn)(k, concatBytes(v, ...msgs));\n  const reseed = (seed: TArg<Uint8Array> = NULL) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(byte0, seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(byte1, seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= _maxDrbgIters) throw new Error('drbg: tried max amount of iterations');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: TArg<Uint8Array>, pred: TArg<Pred<T>>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until the predicate accepts a candidate.\n    // Falsy values like 0 are valid outputs.\n    while ((res = (pred as Pred<T>)(gen())) === undefined) reseed();\n    reset();\n    return res;\n  };\n  return genUntil as TRet<(seed: Uint8Array, predicate: Pred<T>) => T>;\n}\n\n/**\n * Validates declared required and optional field types on a plain object.\n * Extra keys are intentionally ignored because many callers validate only the subset they use from\n * richer option bags or runtime objects.\n * @param object - Object to validate.\n * @param fields - Required field types.\n * @param optFields - Optional field types.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Check user options before building a curve helper.\n *\n * ```ts\n * validateObject({ flag: true }, { flag: 'boolean' });\n * ```\n */\nexport function validateObject(\n  object: Record<string, any>,\n  fields: Record<string, string> = {},\n  optFields: Record<string, string> = {}\n): void {\n  if (Object.prototype.toString.call(object) !== '[object Object]')\n    throw new TypeError('expected valid options object');\n  type Item = keyof typeof object;\n  function checkField(fieldName: Item, expectedType: string, isOpt: boolean) {\n    // Config/data fields must be explicit own properties, but runtime objects such as Field\n    // instances intentionally satisfy required method slots via their shared prototype.\n    if (!isOpt && expectedType !== 'function' && !Object.hasOwn(object, fieldName))\n      throw new TypeError(`param \"${fieldName}\" is invalid: expected own property`);\n    const val = object[fieldName];\n    if (isOpt && val === undefined) return;\n    const current = typeof val;\n    if (current !== expectedType || val === null)\n      throw new TypeError(\n        `param \"${fieldName}\" is invalid: expected ${expectedType}, got ${current}`\n      );\n  }\n  const iter = (f: typeof fields, isOpt: boolean) =>\n    Object.entries(f).forEach(([k, v]) => checkField(k, v, isOpt));\n  iter(fields, false);\n  iter(optFields, true);\n}\n\n/**\n * Throws not implemented error.\n * @returns Never returns.\n * @throws If the unfinished code path is reached. {@link Error}\n * @example\n * Surface the placeholder error from an unfinished code path.\n *\n * ```ts\n * try {\n *   notImplemented();\n * } catch {}\n * ```\n */\nexport const notImplemented = (): never => {\n  throw new Error('not implemented');\n};\n\n/** Generic keygen/getPublicKey interface shared by curve helpers. */\nexport interface CryptoKeys {\n  /** Public byte lengths for keys and optional seeds. */\n  lengths: { seed?: number; public?: number; secret?: number };\n  /**\n   * Generate one secret/public keypair.\n   * @param seed - Optional seed bytes for deterministic key generation.\n   * @returns Fresh secret/public keypair.\n   */\n  keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };\n  /**\n   * Derive one public key from a secret key.\n   * @param secretKey - Secret key bytes.\n   * @returns Public key bytes.\n   */\n  getPublicKey: (secretKey: Uint8Array) => Uint8Array;\n}\n\n/** Generic interface for signatures. Has keygen, sign and verify. */\nexport interface Signer extends CryptoKeys {\n  // Interfaces are fun. We cannot just add new fields without copying old ones.\n  /** Public byte lengths for keys, signatures, and optional signing randomness. */\n  lengths: {\n    seed?: number;\n    public?: number;\n    secret?: number;\n    signRand?: number;\n    signature?: number;\n  };\n  /**\n   * Sign one message.\n   * @param msg - Message bytes to sign.\n   * @param secretKey - Secret key bytes.\n   * @returns Signature bytes.\n   */\n  sign: (msg: Uint8Array, secretKey: Uint8Array) => Uint8Array;\n  /**\n   * Verify one signature.\n   * @param sig - Signature bytes.\n   * @param msg - Signed message bytes.\n   * @param publicKey - Public key bytes.\n   * @returns `true` when the signature is valid.\n   */\n  verify: (sig: Uint8Array, msg: Uint8Array, publicKey: Uint8Array) => boolean;\n}\n", "/**\n * Utils for modular division and fields.\n * Field over 11 is a finite (Galois) field is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n  abool,\n  abytes,\n  anumber,\n  asafenumber,\n  bitLen,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  numberToBytesBE,\n  numberToBytesLE,\n  validateObject,\n  type TArg,\n  type TRet,\n} from '../utils.ts';\n\n// Numbers aren't used in x25519 / x448 builds\n// prettier-ignore\nconst _0n = /* @__PURE__ */ BigInt(0), _1n = /* @__PURE__ */ BigInt(1), _2n = /* @__PURE__ */ BigInt(2);\n// prettier-ignore\nconst _3n = /* @__PURE__ */ BigInt(3), _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5);\n// prettier-ignore\nconst _7n = /* @__PURE__ */ BigInt(7), _8n = /* @__PURE__ */ BigInt(8), _9n = /* @__PURE__ */ BigInt(9);\nconst _16n = /* @__PURE__ */ BigInt(16);\n\n/**\n * @param a - Dividend value.\n * @param b - Positive modulus.\n * @returns Reduced value in `[0, b)` only when `b` is positive.\n * @throws If the modulus is not positive. {@link Error}\n * @example\n * Normalize a bigint into one field residue.\n *\n * ```ts\n * mod(-1n, 5n);\n * ```\n */\nexport function mod(a: bigint, b: bigint): bigint {\n  if (b <= _0n) throw new Error('mod: expected positive modulus, got ' + b);\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to a power with modular reduction.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * Low-level helper: callers that need canonical residues must pass a valid `num` for the chosen\n * modulus instead of relying on the `power===0/1` fast paths to normalize it.\n * @param num - Base value.\n * @param power - Exponent value.\n * @param modulo - Reduction modulus.\n * @returns Modular exponentiation result.\n * @throws If the modulus or exponent is invalid. {@link Error}\n * @example\n * Raise one bigint to a modular power.\n *\n * ```ts\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n * ```\n */\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  return FpPow(Field(modulo), num, power);\n}\n\n/**\n * Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)`.\n * Low-level helper: callers that need canonical residues must pass a valid `x` for the chosen\n * modulus; the `power===0` fast path intentionally returns the input unchanged.\n * @param x - Base value.\n * @param power - Number of squarings.\n * @param modulo - Reduction modulus.\n * @returns Repeated-squaring result.\n * @throws If the exponent is negative. {@link Error}\n * @example\n * Apply repeated squaring inside one field.\n *\n * ```ts\n * pow2(3n, 2n, 11n);\n * ```\n */\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  if (power < _0n) throw new Error('pow2: expected non-negative exponent, got ' + power);\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n/**\n * Inverses number over modulo.\n * Implemented using the {@link https://brilliant.org/wiki/extended-euclidean-algorithm/ | extended Euclidean algorithm}.\n * @param number - Value to invert.\n * @param modulo - Positive modulus.\n * @returns Multiplicative inverse.\n * @throws If the modulus is invalid or the inverse does not exist. {@link Error}\n * @example\n * Compute one modular inverse with the extended Euclidean algorithm.\n *\n * ```ts\n * invert(3n, 11n);\n * ```\n */\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n) throw new Error('invert: expected non-zero number');\n  if (modulo <= _0n) throw new Error('invert: expected positive modulus, got ' + modulo);\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    const q = b / a;\n    const r = b - a * q;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\nfunction assertIsSquare<T>(Fp: TArg<IField<T>>, root: T, n: T): void {\n  const F = Fp as IField<T>;\n  if (!F.eql(F.sqr(root), n)) throw new Error('Cannot find square root');\n}\n\n// Not all roots are possible! Example which will throw:\n// const NUM =\n// n = 72057594037927816n;\n// Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));\nfunction sqrt3mod4<T>(Fp: TArg<IField<T>>, n: T) {\n  const F = Fp as IField<T>;\n  const p1div4 = (F.ORDER + _1n) / _4n;\n  const root = F.pow(n, p1div4);\n  assertIsSquare(F, root, n);\n  return root;\n}\n\n// Equivalent `q = 5 (mod 8)` square-root formula (Atkin-style), not the RFC Appendix I.2 CMOV\n// pseudocode verbatim.\nfunction sqrt5mod8<T>(Fp: TArg<IField<T>>, n: T) {\n  const F = Fp as IField<T>;\n  const p5div8 = (F.ORDER - _5n) / _8n;\n  const n2 = F.mul(n, _2n);\n  const v = F.pow(n2, p5div8);\n  const nv = F.mul(n, v);\n  const i = F.mul(F.mul(nv, _2n), v);\n  const root = F.mul(nv, F.sub(i, F.ONE));\n  assertIsSquare(F, root, n);\n  return root;\n}\n\n// Based on RFC9380, Kong algorithm\n// prettier-ignore\nfunction sqrt9mod16(P: bigint): TRet<<T>(Fp: IField<T>, n: T) => T> {\n  const Fp_ = Field(P);\n  const tn = tonelliShanks(P);\n  const c1 = tn(Fp_, Fp_.neg(Fp_.ONE));//  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n  const c2 = tn(Fp_, c1);              //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n  const c3 = tn(Fp_, Fp_.neg(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n  const c4 = (P + _7n) / _16n;         //  4. c4 = (q + 7) / 16        # Integer arithmetic\n  return (<T>(Fp: TArg<IField<T>>, n: T): T => {\n    const F = Fp as IField<T>;\n    let tv1 = F.pow(n, c4);            //  1. tv1 = x^c4\n    let tv2 = F.mul(tv1, c1);          //  2. tv2 = c1 * tv1\n    const tv3 = F.mul(tv1, c2);        //  3. tv3 = c2 * tv1\n    const tv4 = F.mul(tv1, c3);        //  4. tv4 = c3 * tv1\n    const e1 = F.eql(F.sqr(tv2), n);   //  5.  e1 = (tv2^2) == x\n    const e2 = F.eql(F.sqr(tv3), n);   //  6.  e2 = (tv3^2) == x\n    tv1 = F.cmov(tv1, tv2, e1);        //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n    tv2 = F.cmov(tv4, tv3, e2);        //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n    const e3 = F.eql(F.sqr(tv2), n);   //  9.  e3 = (tv2^2) == x\n    const root = F.cmov(tv1, tv2, e3); // 10.  z = CMOV(tv1, tv2, e3)   # Select sqrt from tv1 & tv2\n    assertIsSquare(F, root, n);\n    return root;\n  }) as TRet<<T>(Fp: IField<T>, n: T) => T>;\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * This implementation is variable-time: it searches data-dependently for the first non-residue `Z`\n * and for the smallest `i` in the main loop, unlike RFC 9380 Appendix I.4's constant-time shape.\n * 1. {@link https://eprint.iacr.org/2012/685.pdf | eprint 2012/685}, page 12\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * @param P - field order\n * @returns function that takes field Fp (created from P) and number n\n * @throws If the field is too small, non-prime, or the square root does not exist. {@link Error}\n * @example\n * Construct a square-root helper for primes that need Tonelli-Shanks.\n *\n * ```ts\n * import { Field, tonelliShanks } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const sqrt = tonelliShanks(17n)(Fp, 4n);\n * ```\n */\nexport function tonelliShanks(P: bigint): TRet<<T>(Fp: IField<T>, n: T) => T> {\n  // Initialization (precomputation).\n  // Caching initialization could boost perf by 7%.\n  if (P < _3n) throw new Error('sqrt is not defined for small field');\n  // Factor P - 1 = Q * 2^S, where Q is odd\n  let Q = P - _1n;\n  let S = 0;\n  while (Q % _2n === _0n) {\n    Q /= _2n;\n    S++;\n  }\n\n  // Find the first quadratic non-residue Z >= 2\n  let Z = _2n;\n  const _Fp = Field(P);\n  while (FpLegendre(_Fp, Z) === 1) {\n    // Basic primality test for P. After x iterations, chance of\n    // not finding quadratic non-residue is 2^x, so 2^1000.\n    if (Z++ > 1000) throw new Error('Cannot find square root: probably non-prime P');\n  }\n  // Fast-path; usually done before Z, but we do \"primality test\".\n  if (S === 1) return sqrt3mod4 as TRet<<T>(Fp: IField<T>, n: T) => T>;\n\n  // Slow-path\n  // TODO: test on Fp2 and others\n  let cc = _Fp.pow(Z, Q); // c = z^Q\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: TArg<IField<T>>, n: T): T {\n    const F = Fp as IField<T>;\n    if (F.is0(n)) return n;\n    // Check if n is a quadratic residue using Legendre symbol\n    if (FpLegendre(F, n) !== 1) throw new Error('Cannot find square root');\n\n    // Initialize variables for the main loop\n    let M = S;\n    let c = F.mul(F.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp\n    let t = F.pow(n, Q); // t = n^Q, first guess at the fudge factor\n    let R = F.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root\n\n    // Main loop\n    // while t != 1\n    while (!F.eql(t, F.ONE)) {\n      if (F.is0(t)) return F.ZERO; // if t=0 return R=0\n      let i = 1;\n\n      // Find the smallest i >= 1 such that t^(2^i) \u2261 1 (mod P)\n      let t_tmp = F.sqr(t); // t^(2^1)\n      while (!F.eql(t_tmp, F.ONE)) {\n        i++;\n        t_tmp = F.sqr(t_tmp); // t^(2^2)...\n        if (i === M) throw new Error('Cannot find square root');\n      }\n\n      // Calculate the exponent for b: 2^(M - i - 1)\n      const exponent = _1n << BigInt(M - i - 1); // bigint is important\n      const b = F.pow(c, exponent); // b = 2^(M - i - 1)\n\n      // Update variables\n      M = i;\n      c = F.sqr(b); // c = b^2\n      t = F.mul(t, c); // t = (t * b^2)\n      R = F.mul(R, b); // R = R*b\n    }\n    return R;\n  } as TRet<<T>(Fp: IField<T>, n: T) => T>;\n}\n\n/**\n * Square root for a finite field. Will try optimized versions first:\n *\n * 1. P \u2261 3 (mod 4)\n * 2. P \u2261 5 (mod 8)\n * 3. P \u2261 9 (mod 16)\n * 4. Tonelli-Shanks algorithm\n *\n * Different algorithms can give different roots, it is up to user to decide which one they want.\n * For example there is FpSqrtOdd/FpSqrtEven to choose a root by oddness\n * (used for hash-to-curve).\n * @param P - Field order.\n * @returns Square-root helper. The generic fallback inherits Tonelli-Shanks' variable-time\n *   behavior and this selector assumes prime-field-style integer moduli.\n * @throws If the field is unsupported or the square root does not exist. {@link Error}\n * @example\n * Choose the square-root helper appropriate for one field modulus.\n *\n * ```ts\n * import { Field, FpSqrt } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const sqrt = FpSqrt(17n)(Fp, 4n);\n * ```\n */\nexport function FpSqrt(P: bigint): TRet<<T>(Fp: IField<T>, n: T) => T> {\n  // P \u2261 3 (mod 4) => \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) return sqrt3mod4 as TRet<<T>(Fp: IField<T>, n: T) => T>;\n  // P \u2261 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf\n  if (P % _8n === _5n) return sqrt5mod8 as TRet<<T>(Fp: IField<T>, n: T) => T>;\n  // P \u2261 9 (mod 16) => Kong algorithm, page 11 of https://eprint.iacr.org/2012/685.pdf (algorithm 4)\n  if (P % _16n === _9n) return sqrt9mod16(P);\n  // Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n/**\n * @param num - Value to inspect.\n * @param modulo - Field modulus.\n * @returns `true` when the least-significant little-endian bit is set.\n * @throws If the modulus is invalid for `mod(...)`. {@link Error}\n * @example\n * Inspect the low bit used by little-endian sign conventions.\n *\n * ```ts\n * isNegativeLE(3n, 11n);\n * ```\n */\nexport const isNegativeLE = (num: bigint, modulo: bigint): boolean =>\n  (mod(num, modulo) & _1n) === _1n;\n\n/** Generic field interface used by prime and extension fields alike.\n * Generic helpers treat field operations as pure functions: implementations MUST treat provided\n * values/byte buffers as read-only and return detached results instead of mutating arguments.\n */\nexport interface IField<T> {\n  /** Field order `q`, which may be prime or a prime power. */\n  ORDER: bigint;\n  /** Canonical encoded byte length. */\n  BYTES: number;\n  /** Canonical encoded bit length. */\n  BITS: number;\n  /** Whether encoded field elements use little-endian bytes. */\n  isLE: boolean;\n  /** Additive identity. */\n  ZERO: T;\n  /** Multiplicative identity. */\n  ONE: T;\n  // 1-arg\n  /**\n   * Normalize one value into the field.\n   * @param num - Input value.\n   * @returns Normalized field value.\n   */\n  create: (num: T) => T;\n  /**\n   * Check whether one value already belongs to the field.\n   * @param num - Input value.\n   * Implementations may throw `TypeError` on malformed input types instead of returning `false`.\n   * @returns Whether the value already belongs to the field.\n   */\n  isValid: (num: T) => boolean;\n  /**\n   * Check whether one value is zero.\n   * @param num - Input value.\n   * @returns Whether the value is zero.\n   */\n  is0: (num: T) => boolean;\n  /**\n   * Check whether one value is non-zero and belongs to the field.\n   * @param num - Input value.\n   * Implementations may throw `TypeError` on malformed input types instead of returning `false`.\n   * @returns Whether the value is non-zero and valid.\n   */\n  isValidNot0: (num: T) => boolean;\n  /**\n   * Negate one value.\n   * @param num - Input value.\n   * @returns Negated value.\n   */\n  neg(num: T): T;\n  /**\n   * Invert one value multiplicatively.\n   * @param num - Input value.\n   * @returns Multiplicative inverse.\n   */\n  inv(num: T): T;\n  /**\n   * Compute one square root when it exists.\n   * @param num - Input value.\n   * @returns Square root.\n   */\n  sqrt(num: T): T;\n  /**\n   * Square one value.\n   * @param num - Input value.\n   * @returns Squared value.\n   */\n  sqr(num: T): T;\n  // 2-args\n  /**\n   * Compare two field values.\n   * @param lhs - Left value.\n   * @param rhs - Right value.\n   * @returns Whether both values are equal.\n   */\n  eql(lhs: T, rhs: T): boolean;\n  /**\n   * Add two normalized field values.\n   * @param lhs - Left value.\n   * @param rhs - Right value.\n   * @returns Sum value.\n   */\n  add(lhs: T, rhs: T): T;\n  /**\n   * Subtract two normalized field values.\n   * @param lhs - Left value.\n   * @param rhs - Right value.\n   * @returns Difference value.\n   */\n  sub(lhs: T, rhs: T): T;\n  /**\n   * Multiply two field values.\n   * @param lhs - Left value.\n   * @param rhs - Right value or scalar.\n   * @returns Product value.\n   */\n  mul(lhs: T, rhs: T | bigint): T;\n  /**\n   * Raise one field value to a power.\n   * @param lhs - Base value.\n   * @param power - Exponent.\n   * @returns Power value.\n   */\n  pow(lhs: T, power: bigint): T;\n  /**\n   * Divide one field value by another.\n   * @param lhs - Dividend.\n   * @param rhs - Divisor or scalar.\n   * @returns Quotient value.\n   */\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  /**\n   * Add two values without re-normalizing the result.\n   * @param lhs - Left value.\n   * @param rhs - Right value.\n   * @returns Non-normalized sum.\n   */\n  addN(lhs: T, rhs: T): T;\n  /**\n   * Subtract two values without re-normalizing the result.\n   * @param lhs - Left value.\n   * @param rhs - Right value.\n   * @returns Non-normalized difference.\n   */\n  subN(lhs: T, rhs: T): T;\n  /**\n   * Multiply two values without re-normalizing the result.\n   * @param lhs - Left value.\n   * @param rhs - Right value or scalar.\n   * @returns Non-normalized product.\n   */\n  mulN(lhs: T, rhs: T | bigint): T;\n  /**\n   * Square one value without re-normalizing the result.\n   * @param num - Input value.\n   * @returns Non-normalized square.\n   */\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is \"negative in LE\", which is the same as odd.\n  // Negative in LE is a somewhat strange definition anyway.\n  /**\n   * Return the RFC 9380 `sgn0`-style oddness bit when supported.\n   * This uses oddness instead of evenness so extension fields like Fp2 can expose the same hook.\n   * Returns whether the value is odd under the field encoding.\n   */\n  isOdd?(num: T): boolean;\n  // legendre?(num: T): T;\n  /**\n   * Invert many field elements in one batch.\n   * @param lst - Values to invert.\n   * @returns Batch of inverses.\n   */\n  invertBatch: (lst: T[]) => T[];\n  /**\n   * Encode one field value into fixed-width bytes.\n   * Callers that need canonical encodings MUST supply a valid field element.\n   * Low-level protocols may also use this to serialize raw / non-canonical residues.\n   * @param num - Input value.\n   * @returns Fixed-width byte encoding.\n   */\n  toBytes(num: T): Uint8Array;\n  /**\n   * Decode one field value from fixed-width bytes.\n   * @param bytes - Fixed-width byte encoding.\n   * @param skipValidation - Whether to skip range validation.\n   * Implementations MUST treat `bytes` as read-only.\n   * @returns Decoded field value.\n   */\n  fromBytes(bytes: Uint8Array, skipValidation?: boolean): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  /**\n   * Constant-time conditional move.\n   * @param a - Value used when the condition is false.\n   * @param b - Value used when the condition is true.\n   * @param c - Selection bit.\n   * @returns Selected value.\n   */\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\n// Arithmetic-only subset checked by validateField(). This is intentionally not the full runtime\n// IField contract: helpers like `isValidNot0`, `invertBatch`, `toBytes`, `fromBytes`, `cmov`, and\n// field-specific extras like `isOdd` are left to the callers that actually need them.\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\n/**\n * @param field - Field implementation.\n * @returns Validated field. This only checks the arithmetic subset needed by generic helpers; it\n *   does not guarantee full runtime-method coverage for serialization, batching, `cmov`, or\n *   field-specific extras beyond positive `BYTES` / `BITS`.\n * @throws If the field shape or numeric metadata are invalid. {@link Error}\n * @example\n * Check that a field implementation exposes the operations curve code expects.\n *\n * ```ts\n * import { Field, validateField } from '@noble/curves/abstract/modular.js';\n * const Fp = validateField(Field(17n));\n * ```\n */\nexport function validateField<T>(field: TArg<IField<T>>): TRet<IField<T>> {\n  const initial = {\n    ORDER: 'bigint',\n    BYTES: 'number',\n    BITS: 'number',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  validateObject(field, opts);\n  // Runtime field implementations must expose real integer byte/bit sizes; fractional / NaN /\n  // infinite metadata leaks through validateObject(type='number') but breaks encoders and caches.\n  asafenumber(field.BYTES, 'BYTES');\n  asafenumber(field.BITS, 'BITS');\n  // Runtime field implementations must expose positive byte/bit sizes; zero leaks through the\n  // numeric shape checks above but still breaks encoding helpers and cached-length assumptions.\n  if (field.BYTES < 1 || field.BITS < 1) throw new Error('invalid field: expected BYTES/BITS > 0');\n  if (field.ORDER <= _1n) throw new Error('invalid field: expected ORDER > 1, got ' + field.ORDER);\n  return field as TRet<IField<T>>;\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @param Fp - Field implementation.\n * @param num - Base value.\n * @param power - Exponent value.\n * @returns Powered field element.\n * @throws If the exponent is negative. {@link Error}\n * @example\n * Raise one field element to a public exponent.\n *\n * ```ts\n * import { Field, FpPow } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const x = FpPow(Fp, 3n, 5n);\n * ```\n */\nexport function FpPow<T>(Fp: TArg<IField<T>>, num: T, power: bigint): T {\n  const F = Fp as IField<T>;\n  if (power < _0n) throw new Error('invalid exponent, negatives unsupported');\n  if (power === _0n) return F.ONE;\n  if (power === _1n) return num;\n  let p = F.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = F.mul(p, d);\n    d = F.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * Exception-free. Zero-valued field elements stay `undefined` unless `passZero` is enabled.\n * @param Fp - Field implementation.\n * @param nums - Values to invert.\n * @param passZero - map 0 to 0 (instead of undefined)\n * @returns Inverted values.\n * @example\n * Invert several field elements with one shared inversion.\n *\n * ```ts\n * import { Field, FpInvertBatch } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const inv = FpInvertBatch(Fp, [1n, 2n, 4n]);\n * ```\n */\nexport function FpInvertBatch<T>(Fp: TArg<IField<T>>, nums: T[], passZero = false): T[] {\n  const F = Fp as IField<T>;\n  const inverted = new Array(nums.length).fill(passZero ? F.ZERO : undefined) as T[];\n  // Walk from first to last, multiply them by each other MOD p\n  const multipliedAcc = nums.reduce((acc, num, i) => {\n    if (F.is0(num)) return acc;\n    inverted[i] = acc;\n    return F.mul(acc, num);\n  }, F.ONE);\n  // Invert last element\n  const invertedAcc = F.inv(multipliedAcc);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (F.is0(num)) return acc;\n    inverted[i] = F.mul(acc, inverted[i]);\n    return F.mul(acc, num);\n  }, invertedAcc);\n  return inverted;\n}\n\n/**\n * @param Fp - Field implementation.\n * @param lhs - Dividend value.\n * @param rhs - Divisor value.\n * @returns Division result.\n * @throws If the divisor is non-invertible. {@link Error}\n * @example\n * Divide one field element by another.\n *\n * ```ts\n * import { Field, FpDiv } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const x = FpDiv(Fp, 6n, 3n);\n * ```\n */\nexport function FpDiv<T>(Fp: TArg<IField<T>>, lhs: T, rhs: T | bigint): T {\n  const F = Fp as IField<T>;\n  return F.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, F.ORDER) : F.inv(rhs));\n}\n\n/**\n * Legendre symbol.\n * Legendre constant is used to calculate Legendre symbol (a | p)\n * which denotes the value of a^((p-1)/2) (mod p).\n *\n * * (a | p) \u2261 1    if a is a square (mod p), quadratic residue\n * * (a | p) \u2261 -1   if a is not a square (mod p), quadratic non residue\n * * (a | p) \u2261 0    if a \u2261 0 (mod p)\n * @param Fp - Field implementation.\n * @param n - Value to inspect.\n * @returns Legendre symbol.\n * @throws If the field returns an invalid Legendre symbol value. {@link Error}\n * @example\n * Compute the Legendre symbol of one field element.\n *\n * ```ts\n * import { Field, FpLegendre } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const symbol = FpLegendre(Fp, 4n);\n * ```\n */\nexport function FpLegendre<T>(Fp: TArg<IField<T>>, n: T): -1 | 0 | 1 {\n  const F = Fp as IField<T>;\n  // We can use 3rd argument as optional cache of this value\n  // but seems unneeded for now. The operation is very fast.\n  const p1mod2 = (F.ORDER - _1n) / _2n;\n  const powered = F.pow(n, p1mod2);\n  const yes = F.eql(powered, F.ONE);\n  const zero = F.eql(powered, F.ZERO);\n  const no = F.eql(powered, F.neg(F.ONE));\n  if (!yes && !zero && !no) throw new Error('invalid Legendre symbol result');\n  return yes ? 1 : zero ? 0 : -1;\n}\n\n/**\n * @param Fp - Field implementation.\n * @param n - Value to inspect.\n * @returns `true` when `Fp.sqrt(n)` exists. This includes `0`, even though strict \"quadratic\n *   residue\" terminology often reserves that name for the non-zero square class.\n * @throws If the field returns an invalid Legendre symbol value. {@link Error}\n * @example\n * Check whether one field element has a square root in the field.\n *\n * ```ts\n * import { Field, FpIsSquare } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const isSquare = FpIsSquare(Fp, 4n);\n * ```\n */\nexport function FpIsSquare<T>(Fp: TArg<IField<T>>, n: T): boolean {\n  const l = FpLegendre(Fp as IField<T>, n);\n  // Zero is a square too: 0 = 0^2, and Fp.sqrt(0) already returns 0.\n  return l !== -1;\n}\n\n/** Byte and bit lengths derived from one scalar order. */\nexport type NLength = {\n  /** Canonical byte length. */\n  nByteLength: number;\n  /** Canonical bit length. */\n  nBitLength: number;\n};\n/**\n * @param n - Curve order. Callers are expected to pass a positive order.\n * @param nBitLength - Optional cached bit length. Callers are expected to pass a positive cached\n *   value when overriding the derived bit length.\n * @returns Byte and bit lengths.\n * @throws If the order or cached bit length is invalid. {@link Error}\n * @example\n * Measure the encoding sizes needed for one modulus.\n *\n * ```ts\n * nLength(255n);\n * ```\n */\nexport function nLength(n: bigint, nBitLength?: number): NLength {\n  // Bit size, byte size of CURVE.n\n  if (nBitLength !== undefined) anumber(nBitLength);\n  if (n <= _0n) throw new Error('invalid n length: expected positive n, got ' + n);\n  if (nBitLength !== undefined && nBitLength < 1)\n    throw new Error('invalid n length: expected positive bit length, got ' + nBitLength);\n  const bits = bitLen(n);\n  // Cached bit lengths smaller than ORDER would truncate serialized scalars/elements and poison\n  // any math that relies on the derived field metadata.\n  if (nBitLength !== undefined && nBitLength < bits)\n    throw new Error(`invalid n length: expected bit length (${bits}) >= n.length (${nBitLength})`);\n  const _nBitLength = nBitLength !== undefined ? nBitLength : bits;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\ntype SqrtFn = (n: bigint) => bigint;\ntype FieldOpts = Partial<{\n  isLE: boolean;\n  BITS: number;\n  sqrt: SqrtFn;\n  allowedLengths?: readonly number[]; // for P521 (adds padding for smaller sizes); must stay > 0\n  modFromBytes: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n}>;\n// Keep the lazy sqrt cache off-instance so Field(...) can return a frozen object. Otherwise the\n// cached helper write would keep the field surface externally mutable.\nconst FIELD_SQRT = new WeakMap<object, ReturnType<typeof FpSqrt>>();\nclass _Field implements IField<bigint> {\n  readonly ORDER: bigint;\n  readonly BITS: number;\n  readonly BYTES: number;\n  readonly isLE: boolean;\n  readonly ZERO = _0n;\n  readonly ONE = _1n;\n  readonly _lengths?: readonly number[];\n  private readonly _mod?: boolean;\n  constructor(ORDER: bigint, opts: FieldOpts = {}) {\n    // ORDER <= 1 is degenerate: ONE would not be a valid field element and helpers like pow/inv\n    // would stop modeling field arithmetic.\n    if (ORDER <= _1n) throw new Error('invalid field: expected ORDER > 1, got ' + ORDER);\n    let _nbitLength: number | undefined = undefined;\n    this.isLE = false;\n    if (opts != null && typeof opts === 'object') {\n      // Cached bit lengths are trusted here and should already be positive / consistent with ORDER.\n      if (typeof opts.BITS === 'number') _nbitLength = opts.BITS;\n      if (typeof opts.sqrt === 'function')\n        // `_Field.prototype` is frozen below, so custom sqrt hooks must become own properties\n        // explicitly instead of relying on writable prototype shadowing via assignment.\n        Object.defineProperty(this, 'sqrt', { value: opts.sqrt, enumerable: true });\n      if (typeof opts.isLE === 'boolean') this.isLE = opts.isLE;\n      if (opts.allowedLengths) this._lengths = Object.freeze(opts.allowedLengths.slice());\n      if (typeof opts.modFromBytes === 'boolean') this._mod = opts.modFromBytes;\n    }\n    const { nBitLength, nByteLength } = nLength(ORDER, _nbitLength);\n    if (nByteLength > 2048) throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n    this.ORDER = ORDER;\n    this.BITS = nBitLength;\n    this.BYTES = nByteLength;\n    Object.freeze(this);\n  }\n\n  create(num: bigint) {\n    return mod(num, this.ORDER);\n  }\n  isValid(num: bigint) {\n    if (typeof num !== 'bigint')\n      throw new TypeError('invalid field element: expected bigint, got ' + typeof num);\n    return _0n <= num && num < this.ORDER; // 0 is valid element, but it's not invertible\n  }\n  is0(num: bigint) {\n    return num === _0n;\n  }\n  // is valid and invertible\n  isValidNot0(num: bigint) {\n    return !this.is0(num) && this.isValid(num);\n  }\n  isOdd(num: bigint) {\n    return (num & _1n) === _1n;\n  }\n  neg(num: bigint) {\n    return mod(-num, this.ORDER);\n  }\n  eql(lhs: bigint, rhs: bigint) {\n    return lhs === rhs;\n  }\n\n  sqr(num: bigint) {\n    return mod(num * num, this.ORDER);\n  }\n  add(lhs: bigint, rhs: bigint) {\n    return mod(lhs + rhs, this.ORDER);\n  }\n  sub(lhs: bigint, rhs: bigint) {\n    return mod(lhs - rhs, this.ORDER);\n  }\n  mul(lhs: bigint, rhs: bigint) {\n    return mod(lhs * rhs, this.ORDER);\n  }\n  pow(num: bigint, power: bigint): bigint {\n    return FpPow(this, num, power);\n  }\n  div(lhs: bigint, rhs: bigint) {\n    return mod(lhs * invert(rhs, this.ORDER), this.ORDER);\n  }\n\n  // Same as above, but doesn't normalize\n  sqrN(num: bigint) {\n    return num * num;\n  }\n  addN(lhs: bigint, rhs: bigint) {\n    return lhs + rhs;\n  }\n  subN(lhs: bigint, rhs: bigint) {\n    return lhs - rhs;\n  }\n  mulN(lhs: bigint, rhs: bigint) {\n    return lhs * rhs;\n  }\n\n  inv(num: bigint) {\n    return invert(num, this.ORDER);\n  }\n  sqrt(num: bigint): bigint {\n    // Caching sqrt helpers speeds up sqrt9mod16 by 5x and Tonelli-Shanks by about 10% without keeping\n    // the field instance itself mutable.\n    let sqrt = FIELD_SQRT.get(this);\n    if (!sqrt) FIELD_SQRT.set(this, (sqrt = FpSqrt(this.ORDER)));\n    return sqrt(this, num);\n  }\n  toBytes(num: bigint) {\n    // Serialize fixed-width limbs without re-validating the field range. Callers that need a\n    // canonical encoding must pass a valid element; some protocols intentionally serialize raw\n    // residues here and reduce or validate them elsewhere.\n    return this.isLE ? numberToBytesLE(num, this.BYTES) : numberToBytesBE(num, this.BYTES);\n  }\n  fromBytes(bytes: Uint8Array, skipValidation = false) {\n    abytes(bytes);\n    const { _lengths: allowedLengths, BYTES, isLE, ORDER, _mod: modFromBytes } = this;\n    if (allowedLengths) {\n      // `allowedLengths` must list real positive byte lengths; otherwise empty input would get\n      // padded into zero and silently decode as a field element.\n      if (bytes.length < 1 || !allowedLengths.includes(bytes.length) || bytes.length > BYTES) {\n        throw new Error(\n          'Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length\n        );\n      }\n      const padded = new Uint8Array(BYTES);\n      // isLE add 0 to right, !isLE to the left.\n      padded.set(bytes, isLE ? 0 : padded.length - bytes.length);\n      bytes = padded;\n    }\n    if (bytes.length !== BYTES)\n      throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n    let scalar = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    if (modFromBytes) scalar = mod(scalar, ORDER);\n    if (!skipValidation)\n      if (!this.isValid(scalar))\n        throw new Error('invalid field element: outside of range 0..ORDER');\n    // Range validation is optional here because some protocols intentionally decode raw residues\n    // and reduce or validate them elsewhere.\n    return scalar;\n  }\n  // TODO: we don't need it here, move out to separate fn\n  invertBatch(lst: bigint[]): bigint[] {\n    return FpInvertBatch(this, lst);\n  }\n  // We can't move this out because Fp6, Fp12 implement it\n  // and it's unclear what to return in there.\n  cmov(a: bigint, b: bigint, condition: boolean) {\n    // Field elements have `isValid(...)`; the CMOV branch bit is a direct runtime input, so reject\n    // non-boolean selectors here instead of letting JS truthiness silently change arithmetic.\n    abool(condition, 'condition');\n    return condition ? b : a;\n  }\n}\n// Freeze the shared method surface too; otherwise callers can still poison every Field instance by\n// monkey-patching `_Field.prototype` even if each instance is frozen.\nObject.freeze(_Field.prototype);\n\n/**\n * Creates a finite field. Major performance optimizations:\n * * 1. Denormalized operations like mulN instead of mul.\n * * 2. Identical object shape: never add or remove keys.\n * * 3. Frozen stable object shape; the lazy sqrt cache lives in a module-level `WeakMap`.\n * Fragile: always run a benchmark on a change.\n * Security note: operations and low-level serializers like `toBytes` don't check `isValid` for\n * all elements for performance and protocol-flexibility reasons; callers are responsible for\n * supplying valid elements when they need canonical field behavior.\n * This is low-level code, please make sure you know what you're doing.\n *\n * Note about field properties:\n * * CHARACTERISTIC p = prime number, number of elements in main subgroup.\n * * ORDER q = similar to cofactor in curves, may be composite `q = p^m`.\n *\n * @param ORDER - field order, probably prime, or could be composite\n * @param opts - Field options such as bit length or endianness. See {@link FieldOpts}.\n * @returns Frozen field instance with a stable object shape. This wrapper forwards `opts` straight\n *   into `_Field`, so it inherits `_Field`'s assumptions about cached sizes and `allowedLengths`.\n * @example\n * Construct one prime field with optional overrides.\n *\n * ```ts\n * Field(11n);\n * ```\n */\nexport function Field(ORDER: bigint, opts: FieldOpts = {}): TRet<Readonly<FpField>> {\n  return new _Field(ORDER, opts);\n}\n\n// Generic random scalar, we can do same for other fields if via Fp2.mul(Fp2.ONE, Fp2.random)?\n// This allows unsafe methods like ignore bias or zero. These unsafe, but often used in different protocols (if deterministic RNG).\n// which mean we cannot force this via opts.\n// Not sure what to do with randomBytes, we can accept it inside opts if wanted.\n// Probably need to export getMinHashLength somewhere?\n// random(bytes?: Uint8Array, unsafeAllowZero = false, unsafeAllowBias = false) {\n//   const LEN = !unsafeAllowBias ? getMinHashLength(ORDER) : BYTES;\n//   if (bytes === undefined) bytes = randomBytes(LEN); // _opts.randomBytes?\n//   const num = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n//   // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n//   const reduced = unsafeAllowZero ? mod(num, ORDER) : mod(num, ORDER - _1n) + _1n;\n//   return reduced;\n// },\n\n/**\n * @param Fp - Field implementation.\n * @param elm - Value to square-root.\n * @returns Odd square root when two roots exist. The special case `elm = 0` still returns `0`,\n *   which is the only square root but is not odd.\n * @throws If the field lacks oddness checks or the square root does not exist. {@link Error}\n * @example\n * Select the odd square root when two roots exist.\n *\n * ```ts\n * import { Field, FpSqrtOdd } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const root = FpSqrtOdd(Fp, 4n);\n * ```\n */\nexport function FpSqrtOdd<T>(Fp: TArg<IField<T>>, elm: T): T {\n  const F = Fp as IField<T>;\n  if (!F.isOdd) throw new Error(\"Field doesn't have isOdd\");\n  const root = F.sqrt(elm);\n  return F.isOdd(root) ? root : F.neg(root);\n}\n\n/**\n * @param Fp - Field implementation.\n * @param elm - Value to square-root.\n * @returns Even square root.\n * @throws If the field lacks oddness checks or the square root does not exist. {@link Error}\n * @example\n * Select the even square root when two roots exist.\n *\n * ```ts\n * import { Field, FpSqrtEven } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const root = FpSqrtEven(Fp, 4n);\n * ```\n */\nexport function FpSqrtEven<T>(Fp: TArg<IField<T>>, elm: T): T {\n  const F = Fp as IField<T>;\n  if (!F.isOdd) throw new Error(\"Field doesn't have isOdd\");\n  const root = F.sqrt(elm);\n  return F.isOdd(root) ? F.neg(root) : root;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder - number of field elements, usually CURVE.n. Callers are expected to pass an\n *   order greater than 1.\n * @returns byte length of field\n * @throws If the field order is not a bigint. {@link Error}\n * @example\n * Read the fixed-width byte length of one field.\n *\n * ```ts\n * getFieldBytesLength(255n);\n * ```\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  // Valid field elements are in 0..ORDER-1, so ORDER <= 1 would make the encoded range degenerate.\n  if (fieldOrder <= _1n) throw new Error('field order must be greater than 1');\n  // Valid field elements are < ORDER, so the maximal encoded element is ORDER - 1.\n  const bitLength = bitLen(fieldOrder - _1n);\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * This is the reduction / modulo-bias lower bound; higher-level helpers may still impose a larger\n * absolute floor for policy reasons.\n * @param fieldOrder - number of field elements greater than 1, usually CURVE.n.\n * @returns byte length of target hash\n * @throws If the field order is invalid. {@link Error}\n * @example\n * Compute the minimum hash length needed for field reduction.\n *\n * ```ts\n * getMinHashLength(255n);\n * ```\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key. The implementation also keeps a hard\n * 16-byte minimum even when `getMinHashLength(...)` is smaller, so toy-small inputs do not look\n * accidentally acceptable for real scalar derivation.\n * See {@link https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/ | Kudelski's modulo-bias guide},\n * {@link https://csrc.nist.gov/publications/detail/fips/186/5/final | FIPS 186-5 appendix A.2}, and\n * {@link https://www.rfc-editor.org/rfc/rfc9380#section-5 | RFC 9380 section 5}. Unlike RFC 9380\n * `hash_to_field`, this helper intentionally maps into the non-zero private-scalar range `1..n-1`.\n * @param key - Uniform input bytes.\n * @param fieldOrder - Size of subgroup.\n * @param isLE - interpret hash bytes as LE num\n * @returns valid private scalar\n * @throws If the hash length or field order is invalid for scalar reduction. {@link Error}\n * @example\n * Map hash output into a private scalar range.\n *\n * ```ts\n * mapHashToField(new Uint8Array(48).fill(1), 255n);\n * ```\n */\nexport function mapHashToField(\n  key: TArg<Uint8Array>,\n  fieldOrder: bigint,\n  isLE = false\n): TRet<Uint8Array> {\n  abytes(key);\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = Math.max(getMinHashLength(fieldOrder), 16);\n  // No toy-small inputs: the helper is for real scalar derivation, not tiny test curves. No huge\n  // inputs: easier to reason about JS timing / allocation behavior.\n  if (len < minLen || len > 1024)\n    throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n  const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { bitLen, bitMask, validateObject, type Signer, type TArg, type TRet } from '../utils.ts';\nimport { Field, FpInvertBatch, validateField, type IField } from './modular.ts';\n\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\n\n/** Affine point coordinates without projective fields. */\nexport type AffinePoint<T> = {\n  /** Affine x coordinate. */\n  x: T;\n  /** Affine y coordinate. */\n  y: T;\n} & { Z?: never };\n\n// We can't \"abstract out\" coordinates (X, Y, Z; and T in Edwards): argument names of constructor\n// are not accessible. See Typescript gh-56093, gh-41594.\n//\n// We have to use recursive types, so it will return actual point, not constained `CurvePoint`.\n// If, at any point, P is `any`, it will erase all types and replace it\n// with `any`, because of recursion, `any implements CurvePoint`,\n// but we lose all constrains on methods.\n\n/** Base interface for all elliptic-curve point instances. */\nexport interface CurvePoint<F, P extends CurvePoint<F, P>> {\n  /** Affine x coordinate. Different from projective / extended X coordinate. */\n  x: F;\n  /** Affine y coordinate. Different from projective / extended Y coordinate. */\n  y: F;\n  /** Projective Z coordinate when the point keeps projective state. */\n  Z?: F;\n  /**\n   * Double the point.\n   * @returns Doubled point.\n   */\n  double(): P;\n  /**\n   * Negate the point.\n   * @returns Negated point.\n   */\n  negate(): P;\n  /**\n   * Add another point from the same curve.\n   * @param other - Point to add.\n   * @returns Sum point.\n   */\n  add(other: P): P;\n  /**\n   * Subtract another point from the same curve.\n   * @param other - Point to subtract.\n   * @returns Difference point.\n   */\n  subtract(other: P): P;\n  /**\n   * Compare two points for equality.\n   * @param other - Point to compare.\n   * @returns Whether the points are equal.\n   */\n  equals(other: P): boolean;\n  /**\n   * Multiply the point by a scalar in constant time.\n   * Implementations keep the subgroup-scalar contract strict and may reject\n   * `0` instead of returning the identity point.\n   * @param scalar - Scalar multiplier.\n   * @returns Product point.\n   */\n  multiply(scalar: bigint): P;\n  /** Assert that the point satisfies the curve equation and subgroup checks. */\n  assertValidity(): void;\n  /**\n   * Map the point into the prime-order subgroup when the curve requires it.\n   * @returns Prime-order point.\n   */\n  clearCofactor(): P;\n  /**\n   * Check whether the point is the point at infinity.\n   * @returns Whether the point is zero.\n   */\n  is0(): boolean;\n  /**\n   * Check whether the point belongs to the prime-order subgroup.\n   * @returns Whether the point is torsion-free.\n   */\n  isTorsionFree(): boolean;\n  /**\n   * Check whether the point lies in a small torsion subgroup.\n   * @returns Whether the point has small order.\n   */\n  isSmallOrder(): boolean;\n  /**\n   * Multiply the point by a scalar without constant-time guarantees.\n   * Public-scalar callers that need `0` should use this method instead of\n   * relying on `multiply(...)` to return the identity point.\n   * @param scalar - Scalar multiplier.\n   * @returns Product point.\n   */\n  multiplyUnsafe(scalar: bigint): P;\n  /**\n   * Massively speeds up `p.multiply(n)` by using precompute tables (caching). See {@link wNAF}.\n   * Cache state lives in internal WeakMaps keyed by point identity, not on the point object.\n   * Repeating `precompute(...)` for the same point identity replaces the remembered window size\n   * and forces table regeneration for that point.\n   * @param windowSize - Precompute window size.\n   * @param isLazy - calculate cache now. Default (true) ensures it's deferred to first `multiply()`\n   * @returns Same point instance with precompute tables attached.\n   */\n  precompute(windowSize?: number, isLazy?: boolean): P;\n  /**\n   * Converts point to 2D xy affine coordinates.\n   * @param invertedZ - Optional inverted Z coordinate for batch normalization.\n   * @returns Affine x/y coordinates.\n   */\n  toAffine(invertedZ?: F): AffinePoint<F>;\n  /**\n   * Encode the point into the curve's canonical byte form.\n   * @returns Encoded point bytes.\n   */\n  toBytes(): Uint8Array;\n  /**\n   * Encode the point into the curve's canonical hex form.\n   * @returns Encoded point hex.\n   */\n  toHex(): string;\n}\n\n/** Base interface for elliptic-curve point constructors. */\nexport interface CurvePointCons<P extends CurvePoint<any, P>> {\n  /**\n   * Runtime brand check for points created by this constructor.\n   * @param item - Value to test.\n   * @returns Whether the value is a point from this constructor.\n   */\n  [Symbol.hasInstance]: (item: unknown) => boolean;\n  /** Canonical subgroup generator. */\n  BASE: P;\n  /** Point at infinity. */\n  ZERO: P;\n  /** Field for basic curve math */\n  Fp: IField<P_F<P>>;\n  /** Scalar field, for scalars in multiply and others */\n  Fn: IField<bigint>;\n  /**\n   * Create one point from affine coordinates.\n   * Does NOT validate curve, subgroup, or wrapper invariants.\n   * Use `.assertValidity()` on adversarial inputs.\n   * @param p - Affine point coordinates.\n   * @returns Point instance.\n   */\n  fromAffine(p: AffinePoint<P_F<P>>): P;\n  /**\n   * Decode a point from the canonical byte encoding.\n   * @param bytes - Encoded point bytes.\n   * Implementations MUST treat `bytes` as read-only.\n   * @returns Point instance.\n   */\n  fromBytes(bytes: Uint8Array): P;\n  /**\n   * Decode a point from the canonical hex encoding.\n   * @param hex - Encoded point hex.\n   * @returns Point instance.\n   */\n  fromHex(hex: string): P;\n}\n\n// Type inference helpers: PC - PointConstructor, P - Point, Fp - Field element\n// Short names, because we use them a lot in result types:\n// * we can't do 'P = GetCurvePoint<PC>': this is default value and doesn't constrain anything\n// * we can't do 'type X = GetCurvePoint<PC>': it won't be accesible for arguments/return types\n// * `CurvePointCons<P extends CurvePoint<any, P>>` constraints from interface definition\n//   won't propagate, if `PC extends CurvePointCons<any>`: the P would be 'any', which is incorrect\n// * PC could be super specific with super specific P, which implements CurvePoint<any, P>.\n//   this means we need to do stuff like\n//   `function test<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(`\n//   if we want type safety around P, otherwise PC_P<PC> will be any\n\n/** Returns the affine field type for a point instance (`P_F<P> == P.F`). */\nexport type P_F<P extends CurvePoint<any, P>> = P extends CurvePoint<infer F, P> ? F : never;\n/** Returns the affine field type for a point constructor (`PC_F<PC> == PC.P.F`). */\nexport type PC_F<PC extends CurvePointCons<CurvePoint<any, any>>> = PC['Fp']['ZERO'];\n/** Returns the point instance type for a point constructor (`PC_P<PC> == PC.P`). */\nexport type PC_P<PC extends CurvePointCons<CurvePoint<any, any>>> = PC['ZERO'];\n\n// Ugly hack to get proper type inference, because in typescript fails to infer resursively.\n// The hack allows to do up to 10 chained operations without applying type erasure.\n//\n// Types which won't work:\n// * `CurvePointCons<CurvePoint<any, any>>`, will return `any` after 1 operation\n// * `CurvePointCons<any>: WeierstrassPointCons<bigint> extends CurvePointCons<any> = false`\n// * `P extends CurvePoint, PC extends CurvePointCons<P>`\n//     * It can't infer P from PC alone\n//     * Too many relations between F, P & PC\n//     * It will infer P/F if `arg: CurvePointCons<F, P>`, but will fail if PC is generic\n//     * It will work correctly if there is an additional argument of type P\n//     * But generally, we don't want to parametrize `CurvePointCons` over `F`: it will complicate\n//       types, making them un-inferable\n// prettier-ignore\n/** Wide point-constructor type used when the concrete curve is not important. */\nexport type PC_ANY = CurvePointCons<\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any, any>\n  >>>>>>>>>\n>;\n\n/**\n * Validates the static surface of a point constructor.\n * This is only a cheap sanity check for the constructor hooks and fields consumed by generic\n * factories; it does not certify `BASE`/`ZERO` semantics or prove the curve implementation itself.\n * @param Point - Runtime point constructor.\n * @throws On missing constructor hooks or malformed field metadata. {@link TypeError}\n * @example\n * Check that one point constructor exposes the static hooks generic helpers need.\n *\n * ```ts\n * import { ed25519 } from '@noble/curves/ed25519.js';\n * import { validatePointCons } from '@noble/curves/abstract/curve.js';\n * validatePointCons(ed25519.Point);\n * ```\n */\nexport function validatePointCons<P extends CurvePoint<any, P>>(Point: CurvePointCons<P>): void {\n  const pc = Point as unknown as CurvePointCons<any>;\n  if (typeof (pc as unknown) !== 'function') throw new TypeError('Point must be a constructor');\n  // validateObject only accepts plain objects, so copy the constructor statics into one bag first.\n  validateObject(\n    {\n      Fp: pc.Fp,\n      Fn: pc.Fn,\n      fromAffine: pc.fromAffine,\n      fromBytes: pc.fromBytes,\n      fromHex: pc.fromHex,\n    },\n    {\n      Fp: 'object',\n      Fn: 'object',\n      fromAffine: 'function',\n      fromBytes: 'function',\n      fromHex: 'function',\n    }\n  );\n  validateField(pc.Fp);\n  validateField(pc.Fn);\n}\n\n/** Byte lengths used by one curve implementation. */\nexport interface CurveLengths {\n  /** Secret-key length in bytes. */\n  secretKey?: number;\n  /** Compressed public-key length in bytes. */\n  publicKey?: number;\n  /** Uncompressed public-key length in bytes. */\n  publicKeyUncompressed?: number;\n  /** Whether public-key encodings include a format prefix byte. */\n  publicKeyHasPrefix?: boolean;\n  /** Signature length in bytes. */\n  signature?: number;\n  /** Seed length in bytes when the curve exposes deterministic keygen from seed. */\n  seed?: number;\n}\n\n/** Reorders or otherwise remaps a batch while preserving its element type. */\nexport type Mapper<T> = (i: T[]) => T[];\n\n/**\n * Computes both candidates first, but the final selection still branches on `condition`, so this\n * is not a strict constant-time CMOV primitive.\n * @param condition - Whether to negate the point.\n * @param item - Point-like value.\n * @returns Original or negated value.\n * @example\n * Keep the point or return its negation based on one boolean branch.\n *\n * ```ts\n * import { negateCt } from '@noble/curves/abstract/curve.js';\n * import { p256 } from '@noble/curves/nist.js';\n * const maybeNegated = negateCt(true, p256.Point.BASE);\n * ```\n */\nexport function negateCt<T extends { negate: () => T }>(condition: boolean, item: T): T {\n  const neg = item.negate();\n  return condition ? neg : item;\n}\n\n/**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n * Input points are left unchanged; the normalized points are returned as fresh instances.\n * @param c - Point constructor.\n * @param points - Projective points.\n * @returns Fresh projective points reconstructed from normalized affine coordinates.\n * @example\n * Batch-normalize projective points with a single shared inversion.\n *\n * ```ts\n * import { normalizeZ } from '@noble/curves/abstract/curve.js';\n * import { p256 } from '@noble/curves/nist.js';\n * const points = normalizeZ(p256.Point, [p256.Point.BASE, p256.Point.BASE.double()]);\n * ```\n */\nexport function normalizeZ<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  c: PC,\n  points: P[]\n): P[] {\n  const invertedZs = FpInvertBatch(\n    c.Fp,\n    points.map((p) => p.Z!)\n  );\n  return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i])));\n}\n\nfunction validateW(W: number, bits: number) {\n  if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n    throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\n\n/** Internal wNAF opts for specific W and scalarBits.\n * Zero digits are skipped, so tables store only the positive half-window and callers reserve one\n * extra carry window.\n */\ntype WOpts = {\n  windows: number;\n  windowSize: number;\n  mask: bigint;\n  maxNumber: number;\n  shiftBy: bigint;\n};\n\nfunction calcWOpts(W: number, scalarBits: number): WOpts {\n  validateW(W, scalarBits);\n  const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero\n  const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero\n  const maxNumber = 2 ** W; // W=8 256\n  const mask = bitMask(W); // W=8 255 == mask 0b11111111\n  const shiftBy = BigInt(W); // W=8 8\n  return { windows, windowSize, mask, maxNumber, shiftBy };\n}\n\nfunction calcOffsets(n: bigint, window: number, wOpts: WOpts) {\n  const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n  let wbits = Number(n & mask); // extract W bits.\n  let nextN = n >> shiftBy; // shift number by W bits.\n\n  // What actually happens here:\n  // const highestBit = Number(mask ^ (mask >> 1n));\n  // let wbits2 = wbits - 1; // skip zero\n  // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~);\n\n  // split if bits > max: +224 => 256-32\n  if (wbits > windowSize) {\n    // we skip zero, which means instead of `>= size-1`, we do `> size`\n    wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here.\n    nextN += _1n; // +256 (carry)\n  }\n  const offsetStart = window * windowSize;\n  const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero; ignore when isZero\n  const isZero = wbits === 0; // is current window slice a 0?\n  const isNeg = wbits < 0; // is current window slice negative?\n  const isNegF = window % 2 !== 0; // fake branch noise only\n  const offsetF = offsetStart; // fake branch noise only\n  return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\n\nfunction validateMSMPoints(points: any[], c: any) {\n  if (!Array.isArray(points)) throw new Error('array expected');\n  points.forEach((p, i) => {\n    if (!(p instanceof c)) throw new Error('invalid point at index ' + i);\n  });\n}\nfunction validateMSMScalars(scalars: any[], field: any) {\n  if (!Array.isArray(scalars)) throw new Error('array of scalars expected');\n  scalars.forEach((s, i) => {\n    if (!field.isValid(s)) throw new Error('invalid scalar at index ' + i);\n  });\n}\n\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes.\n// Allows to make points frozen / immutable.\nconst pointPrecomputes = new WeakMap<any, any[]>();\nconst pointWindowSizes = new WeakMap<any, number>();\n\nfunction getW(P: any): number {\n  // To disable precomputes:\n  // return 1;\n  // `1` is also the uncached sentinel: use the ladder / non-precomputed path.\n  return pointWindowSizes.get(P) || 1;\n}\n\nfunction assert0(n: bigint): void {\n  // Internal invariant: a non-zero remainder here means the wNAF window decomposition or loop\n  // count is inconsistent, not that the original caller provided a bad scalar.\n  if (n !== _0n) throw new Error('invalid wNAF');\n}\n\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Table generation takes **30MB of ram and 10ms on high-end CPU**,\n * but may take much longer on slow devices. Actual generation will happen on\n * first call of `multiply()`. By default, `BASE` point is precomputed.\n *\n * Scalars should always be less than curve order: this should be checked inside of a curve itself.\n * Creates precomputation tables for fast multiplication:\n * - private scalar is split by fixed size windows of W bits\n * - every window point is collected from window's table & added to accumulator\n * - since windows are different, same point inside tables won't be accessed more than once per calc\n * - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n * - +1 window is neccessary for wNAF\n * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n *\n * TODO: research returning a 2d JS array of windows instead of a single window.\n * This would allow windows to be in different memory locations.\n * @param Point - Point constructor.\n * @param bits - Scalar bit length.\n * @example\n * Elliptic curve multiplication of Point by scalar.\n *\n * ```ts\n * import { wNAF } from '@noble/curves/abstract/curve.js';\n * import { p256 } from '@noble/curves/nist.js';\n * const ladder = new wNAF(p256.Point, p256.Point.Fn.BITS);\n * ```\n */\nexport class wNAF<PC extends PC_ANY> {\n  private readonly BASE: PC_P<PC>;\n  private readonly ZERO: PC_P<PC>;\n  private readonly Fn: PC['Fn'];\n  readonly bits: number;\n\n  // Parametrized with a given Point class (not individual point)\n  constructor(Point: PC, bits: number) {\n    this.BASE = Point.BASE;\n    this.ZERO = Point.ZERO;\n    this.Fn = Point.Fn;\n    this.bits = bits;\n  }\n\n  // non-const time multiplication ladder\n  _unsafeLadder(elm: PC_P<PC>, n: bigint, p: PC_P<PC> = this.ZERO): PC_P<PC> {\n    let d: PC_P<PC> = elm;\n    while (n > _0n) {\n      if (n & _1n) p = p.add(d);\n      d = d.double();\n      n >>= _1n;\n    }\n    return p;\n  }\n\n  /**\n   * Creates a wNAF precomputation window. Used for caching.\n   * Default window size is set by `utils.precompute()` and is equal to 8.\n   * Number of precomputed points depends on the curve size:\n   * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n   * - \uD835\uDC4A is the window size\n   * - \uD835\uDC5B is the bitlength of the curve order.\n   * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n   * @param point - Point instance\n   * @param W - window size\n   * @returns precomputed point tables flattened to a single array\n   */\n  private precomputeWindow(point: PC_P<PC>, W: number): PC_P<PC>[] {\n    const { windows, windowSize } = calcWOpts(W, this.bits);\n    const points: PC_P<PC>[] = [];\n    let p: PC_P<PC> = point;\n    let base = p;\n    for (let window = 0; window < windows; window++) {\n      base = p;\n      points.push(base);\n      // i=1, bc we skip 0\n      for (let i = 1; i < windowSize; i++) {\n        base = base.add(p);\n        points.push(base);\n      }\n      p = base.double();\n    }\n    return points;\n  }\n\n  /**\n   * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n   * More compact implementation:\n   * https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n   * @returns real and fake (for const-time) points\n   */\n  private wNAF(W: number, precomputes: PC_P<PC>[], n: bigint): { p: PC_P<PC>; f: PC_P<PC> } {\n    // Scalar should be smaller than field order\n    if (!this.Fn.isValid(n)) throw new Error('invalid scalar');\n    // Accumulators\n    let p = this.ZERO;\n    let f = this.BASE;\n    // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n    // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n    // there is negate now: it is possible that negated element from low value\n    // would be the same as high element, which will create carry into next window.\n    // It's not obvious how this can fail, but still worth investigating later.\n    const wo = calcWOpts(W, this.bits);\n    for (let window = 0; window < wo.windows; window++) {\n      // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise\n      const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo);\n      n = nextN;\n      if (isZero) {\n        // bits are 0: add garbage to fake point\n        // Important part for const-time getPublicKey: add random \"noise\" point to f.\n        f = f.add(negateCt(isNegF, precomputes[offsetF]));\n      } else {\n        // bits are 1: add to result point\n        p = p.add(negateCt(isNeg, precomputes[offset]));\n      }\n    }\n    assert0(n);\n    // Return both real and fake points so JIT keeps the noise path alive.\n    // Known caveat: negate/carry interactions can still drive `f` to infinity even when `p` is not,\n    // which weakens the noise path and leaves this only \"less const-time\" by about one bigint mul.\n    return { p, f };\n  }\n\n  /**\n   * Implements unsafe EC multiplication using precomputed tables\n   * and w-ary non-adjacent form.\n   * @param acc - accumulator point to add result of multiplication\n   * @returns point\n   */\n  private wNAFUnsafe(\n    W: number,\n    precomputes: PC_P<PC>[],\n    n: bigint,\n    acc: PC_P<PC> = this.ZERO\n  ): PC_P<PC> {\n    const wo = calcWOpts(W, this.bits);\n    for (let window = 0; window < wo.windows; window++) {\n      if (n === _0n) break; // Early-exit, skip 0 value\n      const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo);\n      n = nextN;\n      if (isZero) {\n        // Window bits are 0: skip processing.\n        // Move to next window.\n        continue;\n      } else {\n        const item = precomputes[offset];\n        acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM\n      }\n    }\n    assert0(n);\n    return acc;\n  }\n\n  private getPrecomputes(W: number, point: PC_P<PC>, transform?: Mapper<PC_P<PC>>): PC_P<PC>[] {\n    // Cache key is only point identity plus the remembered window size; callers must not reuse the\n    // same point with incompatible `transform(...)` layouts and expect a separate cache entry.\n    let comp = pointPrecomputes.get(point);\n    if (!comp) {\n      comp = this.precomputeWindow(point, W) as PC_P<PC>[];\n      if (W !== 1) {\n        // Doing transform outside of if brings 15% perf hit\n        if (typeof transform === 'function') comp = transform(comp);\n        pointPrecomputes.set(point, comp);\n      }\n    }\n    return comp;\n  }\n\n  cached(\n    point: PC_P<PC>,\n    scalar: bigint,\n    transform?: Mapper<PC_P<PC>>\n  ): { p: PC_P<PC>; f: PC_P<PC> } {\n    const W = getW(point);\n    return this.wNAF(W, this.getPrecomputes(W, point, transform), scalar);\n  }\n\n  unsafe(point: PC_P<PC>, scalar: bigint, transform?: Mapper<PC_P<PC>>, prev?: PC_P<PC>): PC_P<PC> {\n    const W = getW(point);\n    if (W === 1) return this._unsafeLadder(point, scalar, prev); // For W=1 ladder is ~x2 faster\n    return this.wNAFUnsafe(W, this.getPrecomputes(W, point, transform), scalar, prev);\n  }\n\n  // We calculate precomputes for elliptic curve point multiplication\n  // using windowed method. This specifies window size and\n  // stores precomputed values. Usually only base point would be precomputed.\n  createCache(P: PC_P<PC>, W: number): void {\n    validateW(W, this.bits);\n    pointWindowSizes.set(P, W);\n    pointPrecomputes.delete(P);\n  }\n\n  hasCache(elm: PC_P<PC>): boolean {\n    return getW(elm) !== 1;\n  }\n}\n\n/**\n * Endomorphism-specific multiplication for Koblitz curves.\n * Cost: 128 dbl, 0-256 adds.\n * @param Point - Point constructor.\n * @param point - Input point.\n * @param k1 - First non-negative absolute scalar chunk.\n * @param k2 - Second non-negative absolute scalar chunk.\n * @returns Partial multiplication results.\n * @example\n * Endomorphism-specific multiplication for Koblitz curves.\n *\n * ```ts\n * import { mulEndoUnsafe } from '@noble/curves/abstract/curve.js';\n * import { secp256k1 } from '@noble/curves/secp256k1.js';\n * const parts = mulEndoUnsafe(secp256k1.Point, secp256k1.Point.BASE, 3n, 5n);\n * ```\n */\nexport function mulEndoUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  Point: PC,\n  point: P,\n  k1: bigint,\n  k2: bigint\n): { p1: P; p2: P } {\n  let acc = point;\n  let p1 = Point.ZERO;\n  let p2 = Point.ZERO;\n  while (k1 > _0n || k2 > _0n) {\n    if (k1 & _1n) p1 = p1.add(acc);\n    if (k2 & _1n) p2 = p2.add(acc);\n    acc = acc.double();\n    k1 >>= _1n;\n    k2 >>= _1n;\n  }\n  return { p1, p2 };\n}\n\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster than precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c - Curve Point constructor\n * @param points - array of L curve points\n * @param scalars - array of L scalars (aka secret keys / bigints)\n * @returns MSM result point. Empty input is accepted and returns the identity.\n * @throws If the point set, scalar set, or MSM sizing is invalid. {@link Error}\n * @example\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n *\n * ```ts\n * import { pippenger } from '@noble/curves/abstract/curve.js';\n * import { p256 } from '@noble/curves/nist.js';\n * const point = pippenger(p256.Point, [p256.Point.BASE, p256.Point.BASE.double()], [2n, 3n]);\n * ```\n */\nexport function pippenger<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  c: PC,\n  points: P[],\n  scalars: bigint[]\n): P {\n  // If we split scalars by some window (let's say 8 bits), every chunk will only\n  // take 256 buckets even if there are 4096 scalars, also re-uses double.\n  // TODO:\n  // - https://eprint.iacr.org/2024/750.pdf\n  // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n  // 0 is accepted in scalars\n  const fieldN = c.Fn;\n  validateMSMPoints(points, c);\n  validateMSMScalars(scalars, fieldN);\n  const plength = points.length;\n  const slength = scalars.length;\n  if (plength !== slength) throw new Error('arrays of points and scalars must have equal length');\n  // if (plength === 0) throw new Error('array must be of length >= 2');\n  const zero = c.ZERO;\n  const wbits = bitLen(BigInt(plength));\n  let windowSize = 1; // bits\n  if (wbits > 12) windowSize = wbits - 3;\n  else if (wbits > 4) windowSize = wbits - 2;\n  else if (wbits > 0) windowSize = 2;\n  const MASK = bitMask(windowSize);\n  const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array\n  const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n  let sum = zero;\n  for (let i = lastBits; i >= 0; i -= windowSize) {\n    buckets.fill(zero);\n    for (let j = 0; j < slength; j++) {\n      const scalar = scalars[j];\n      const wbits = Number((scalar >> BigInt(i)) & MASK);\n      buckets[wbits] = buckets[wbits].add(points[j]);\n    }\n    let resI = zero; // not using this will do small speed-up, but will lose ct\n    // Skip first bucket, because it is zero\n    for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n      sumI = sumI.add(buckets[j]);\n      resI = resI.add(sumI);\n    }\n    sum = sum.add(resI);\n    if (i !== 0) for (let j = 0; j < windowSize; j++) sum = sum.double();\n  }\n  return sum as P;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c - Curve Point constructor\n * @param points - array of L curve points\n * @param windowSize - Precompute window size.\n * @returns Function which multiplies points with scalars. The closure accepts\n *   `scalars.length <= points.length`, and omitted trailing scalars are treated as zero.\n * @throws If the point set or precompute window is invalid. {@link Error}\n * @example\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n *\n * ```ts\n * import { precomputeMSMUnsafe } from '@noble/curves/abstract/curve.js';\n * import { p256 } from '@noble/curves/nist.js';\n * const msm = precomputeMSMUnsafe(p256.Point, [p256.Point.BASE], 4);\n * const point = msm([3n]);\n * ```\n */\nexport function precomputeMSMUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  c: PC,\n  points: P[],\n  windowSize: number\n): (scalars: bigint[]) => P {\n  /**\n   * Performance Analysis of Window-based Precomputation\n   *\n   * Base Case (256-bit scalar, 8-bit window):\n   * - Standard precomputation requires:\n   *   - 31 additions per scalar \u00D7 256 scalars = 7,936 ops\n   *   - Plus 255 summary additions = 8,191 total ops\n   *   Note: Summary additions can be optimized via accumulator\n   *\n   * Chunked Precomputation Analysis:\n   * - Using 32 chunks requires:\n   *   - 255 additions per chunk\n   *   - 256 doublings\n   *   - Total: (255 \u00D7 32) + 256 = 8,416 ops\n   *\n   * Memory Usage Comparison:\n   * Window Size | Standard Points | Chunked Points\n   * ------------|-----------------|---------------\n   *     4-bit   |     520         |      15\n   *     8-bit   |    4,224        |     255\n   *    10-bit   |   13,824        |   1,023\n   *    16-bit   |  557,056        |  65,535\n   *\n   * Key Advantages:\n   * 1. Enables larger window sizes due to reduced memory overhead\n   * 2. More efficient for smaller scalar counts:\n   *    - 16 chunks: (16 \u00D7 255) + 256 = 4,336 ops\n   *    - ~2x faster than standard 8,191 ops\n   *\n   * Limitations:\n   * - Not suitable for plain precomputes (requires 256 constant doublings)\n   * - Performance degrades with larger scalar counts:\n   *   - Optimal for ~256 scalars\n   *   - Less efficient for 4096+ scalars (Pippenger preferred)\n   */\n  const fieldN = c.Fn;\n  validateW(windowSize, fieldN.BITS);\n  validateMSMPoints(points, c);\n  const zero = c.ZERO;\n  const tableSize = 2 ** windowSize - 1; // table size (without zero)\n  const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n  const MASK = bitMask(windowSize);\n  const tables = points.map((p: P) => {\n    const res = [];\n    for (let i = 0, acc = p; i < tableSize; i++) {\n      res.push(acc);\n      acc = acc.add(p);\n    }\n    return res;\n  });\n  return (scalars: bigint[]): P => {\n    validateMSMScalars(scalars, fieldN);\n    if (scalars.length > points.length)\n      throw new Error('array of scalars must be smaller than array of points');\n    let res = zero;\n    for (let i = 0; i < chunks; i++) {\n      // No need to double if accumulator is still zero.\n      if (res !== zero) for (let j = 0; j < windowSize; j++) res = res.double();\n      const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n      for (let j = 0; j < scalars.length; j++) {\n        const n = scalars[j];\n        const curr = Number((n >> shiftBy) & MASK);\n        if (!curr) continue; // skip zero scalars chunks\n        res = res.add(tables[j][curr - 1]);\n      }\n    }\n    return res;\n  };\n}\n\n/** Minimal curve parameters needed to construct a Weierstrass or Edwards curve. */\nexport type ValidCurveParams<T> = {\n  /** Base-field modulus. */\n  p: bigint;\n  /** Prime subgroup order. */\n  n: bigint;\n  /** Cofactor. */\n  h: bigint;\n  /** Curve parameter `a`. */\n  a: T;\n  /** Weierstrass curve parameter `b`. */\n  b?: T;\n  /** Edwards curve parameter `d`. */\n  d?: T;\n  /** Generator x coordinate. */\n  Gx: T;\n  /** Generator y coordinate. */\n  Gy: T;\n};\n\nfunction createField<T>(order: bigint, field?: TArg<IField<T>>, isLE?: boolean): TRet<IField<T>> {\n  if (field) {\n    // Reuse supplied field overrides as-is; `isLE` only affects freshly constructed fallback\n    // fields, and validateField() below only checks the arithmetic subset, not full byte/cmov\n    // behavior.\n    if (field.ORDER !== order) throw new Error('Field.ORDER must match order: Fp == p, Fn == n');\n    validateField(field);\n    return field as TRet<IField<T>>;\n  } else {\n    return Field(order, { isLE }) as unknown as TRet<IField<T>>;\n  }\n}\n/** Pair of fields used by curve constructors. */\nexport type FpFn<T> = {\n  /** Base field used for curve coordinates. */\n  Fp: IField<T>;\n  /** Scalar field used for secret scalars and subgroup arithmetic. */\n  Fn: IField<bigint>;\n};\n\n/**\n * Validates basic CURVE shape and field membership, then creates fields.\n * This does not prove that the generator is on-curve, that subgroup/order data are consistent, or\n * that the curve equation itself is otherwise sane.\n * @param type - Curve family.\n * @param CURVE - Curve parameters.\n * @param curveOpts - Optional field overrides:\n *   - `Fp` (optional): Optional base-field override.\n *   - `Fn` (optional): Optional scalar-field override.\n * @param FpFnLE - Whether field encoding is little-endian.\n * @returns Frozen curve parameters and fields.\n * @throws If the curve parameters or field overrides are invalid. {@link Error}\n * @example\n * Build curve fields from raw constants before constructing a curve instance.\n *\n * ```ts\n * const curve = createCurveFields('weierstrass', {\n *   p: 17n,\n *   n: 19n,\n *   h: 1n,\n *   a: 2n,\n *   b: 2n,\n *   Gx: 5n,\n *   Gy: 1n,\n * });\n * ```\n */\nexport function createCurveFields<T>(\n  type: 'weierstrass' | 'edwards',\n  CURVE: ValidCurveParams<T>,\n  curveOpts: TArg<Partial<FpFn<T>>> = {},\n  FpFnLE?: boolean\n): TRet<FpFn<T> & { CURVE: ValidCurveParams<T> }> {\n  if (FpFnLE === undefined) FpFnLE = type === 'edwards';\n  if (!CURVE || typeof CURVE !== 'object') throw new Error(`expected valid ${type} CURVE object`);\n  for (const p of ['p', 'n', 'h'] as const) {\n    const val = CURVE[p];\n    if (!(typeof val === 'bigint' && val > _0n))\n      throw new Error(`CURVE.${p} must be positive bigint`);\n  }\n  const Fp = createField(CURVE.p, curveOpts.Fp, FpFnLE);\n  const Fn = createField(CURVE.n, curveOpts.Fn, FpFnLE);\n  const _b: 'b' | 'd' = type === 'weierstrass' ? 'b' : 'd';\n  const params = ['Gx', 'Gy', 'a', _b] as const;\n  for (const p of params) {\n    // @ts-ignore\n    if (!Fp.isValid(CURVE[p]))\n      throw new Error(`CURVE.${p} must be valid field element of CURVE.Fp`);\n  }\n  CURVE = Object.freeze(Object.assign({}, CURVE));\n  return { CURVE, Fp, Fn } as TRet<FpFn<T> & { CURVE: ValidCurveParams<T> }>;\n}\n\ntype KeygenFn = (\n  seed?: Uint8Array,\n  isCompressed?: boolean\n) => { secretKey: Uint8Array; publicKey: Uint8Array };\n/**\n * @param randomSecretKey - Secret-key generator.\n * @param getPublicKey - Public-key derivation helper.\n * @returns Keypair generator.\n * @example\n * Build a `keygen()` helper from existing secret-key and public-key primitives.\n *\n * ```ts\n * import { createKeygen } from '@noble/curves/abstract/curve.js';\n * import { p256 } from '@noble/curves/nist.js';\n * const keygen = createKeygen(p256.utils.randomSecretKey, p256.getPublicKey);\n * const pair = keygen();\n * ```\n */\nexport function createKeygen(\n  randomSecretKey: Function,\n  getPublicKey: TArg<Signer['getPublicKey']>\n): TRet<KeygenFn> {\n  return function keygen(seed?: TArg<Uint8Array>) {\n    const secretKey = randomSecretKey(seed) as TRet<Uint8Array>;\n    return { secretKey, publicKey: getPublicKey(secretKey) as TRet<Uint8Array> };\n  };\n}\n", "/**\n * Experimental implementation of NTT / FFT (Fast Fourier Transform) over finite fields.\n * API may change at any time. The code has not been audited. Feature requests are welcome.\n * @module\n */\nimport type { TArg } from '../utils.ts';\nimport type { IField } from './modular.ts';\n\n/** Array-like coefficient storage that can be mutated in place. */\nexport interface MutableArrayLike<T> {\n  /** Element access by numeric index. */\n  [index: number]: T;\n  /** Current amount of stored coefficients. */\n  length: number;\n  /**\n   * Return a sliced copy using the same storage shape.\n   * @param start - Inclusive start index.\n   * @param end - Exclusive end index.\n   * @returns Sliced copy.\n   */\n  slice(start?: number, end?: number): this;\n  /**\n   * Iterate over stored coefficients in order.\n   * @returns Coefficient iterator.\n   */\n  [Symbol.iterator](): Iterator<T>;\n}\n\n/**\n * Concrete polynomial containers accepted by the high-level `poly(...)` helpers.\n * Lower-level FFT helpers can work with structural `MutableArrayLike`, but `poly(...)`\n * intentionally keeps runtime dispatch on plain arrays and typed-array views.\n */\nexport type PolyStorage<T> = T[] | (MutableArrayLike<T> & ArrayBufferView);\n\nfunction checkU32(n: number) {\n  // 0xff_ff_ff_ff\n  if (!Number.isSafeInteger(n) || n < 0 || n > 0xffffffff)\n    throw new Error('wrong u32 integer:' + n);\n  return n;\n}\n\n/**\n * Checks if integer is in form of `1 << X`.\n * @param x - Integer to inspect.\n * @returns `true` when the value is a power of two.\n * @throws If `x` is not a valid unsigned 32-bit integer. {@link Error}\n * @example\n * Validate that an FFT size is a power of two.\n *\n * ```ts\n * isPowerOfTwo(8);\n * ```\n */\nexport function isPowerOfTwo(x: number): boolean {\n  checkU32(x);\n  return (x & (x - 1)) === 0 && x !== 0;\n}\n\n/**\n * @param n - Input value.\n * @returns Next power of two within the u32/array-length domain.\n * @throws If `n` is not a valid unsigned 32-bit integer. {@link Error}\n * @example\n * Round an integer up to the FFT size it needs.\n *\n * ```ts\n * nextPowerOfTwo(9);\n * ```\n */\nexport function nextPowerOfTwo(n: number): number {\n  checkU32(n);\n  if (n <= 1) return 1;\n  // FFT sizes here are used as JS array lengths, so `2^32` is not a meaningful result:\n  // keep the fast u32 bit-twiddling path and fail explicitly instead of wrapping to 1.\n  if (n > 0x8000_0000) throw new Error('nextPowerOfTwo overflow: result does not fit u32');\n  return (1 << (log2(n - 1) + 1)) >>> 0;\n}\n\n/**\n * @param n - Value to reverse.\n * @param bits - Number of bits to use.\n * @returns Bit-reversed integer.\n * @throws If `n` is not a valid unsigned 32-bit integer. {@link Error}\n * @example\n * Reverse the low `bits` bits of one index.\n *\n * ```ts\n * reverseBits(3, 3);\n * ```\n */\nexport function reverseBits(n: number, bits: number): number {\n  checkU32(n);\n  if (!Number.isSafeInteger(bits) || bits < 0 || bits > 32)\n    throw new Error(`expected integer 0 <= bits <= 32, got ${bits}`);\n  let reversed = 0;\n  for (let i = 0; i < bits; i++, n >>>= 1) reversed = (reversed << 1) | (n & 1);\n  // JS bitwise ops are signed i32; cast back so 32-bit reversals stay in the unsigned u32 domain.\n  return reversed >>> 0;\n}\n\n/**\n * Similar to `bitLen(x)-1` but much faster for small integers, like indices.\n * @param n - Input value.\n * @returns Base-2 logarithm. For `n = 0`, the current implementation returns `-1`.\n * @throws If `n` is not a valid unsigned 32-bit integer. {@link Error}\n * @example\n * Compute the radix-2 stage count for one transform size.\n *\n * ```ts\n * log2(8);\n * ```\n */\nexport function log2(n: number): number {\n  checkU32(n);\n  return 31 - Math.clz32(n);\n}\n\n/**\n * Moves lowest bit to highest position, which at first step splits\n * array on even and odd indices, then it applied again to each part,\n * which is core of fft\n * @param values - Mutable coefficient array.\n * @returns Mutated input array.\n * @throws If the array length is not a positive power of two. {@link Error}\n * @example\n * Reorder coefficients into bit-reversed order in place.\n *\n * ```ts\n * const values = Uint8Array.from([0, 1, 2, 3]);\n * bitReversalInplace(values);\n * ```\n */\nexport function bitReversalInplace<T extends MutableArrayLike<any>>(values: T): T {\n  const n = values.length;\n  // Size-1 FFT is the identity, so bit-reversal must stay a no-op there instead of rejecting it.\n  if (!isPowerOfTwo(n)) throw new Error('expected positive power-of-two length, got ' + n);\n  const bits = log2(n);\n  for (let i = 0; i < n; i++) {\n    const j = reverseBits(i, bits);\n    if (i < j) {\n      const tmp = values[i];\n      values[i] = values[j];\n      values[j] = tmp;\n    }\n  }\n  return values;\n}\n\n/**\n * @param values - Input values.\n * @returns Reordered copy.\n * @throws If the array length is not a positive power of two. {@link Error}\n * @example\n * Return a reordered copy instead of mutating the input in place.\n *\n * ```ts\n * const reordered = bitReversalPermutation([0, 1, 2, 3]);\n * ```\n */\nexport function bitReversalPermutation<T>(values: T[]): T[] {\n  return bitReversalInplace(values.slice()) as T[];\n}\n\nconst _1n = /** @__PURE__ */ BigInt(1);\nfunction findGenerator(field: TArg<IField<bigint>>) {\n  let G = BigInt(2);\n  for (; field.eql(field.pow(G, field.ORDER >> _1n), field.ONE); G++);\n  return G;\n}\n\n/** Cached roots-of-unity tables derived from one finite field. */\nexport type RootsOfUnity = {\n  /** Generator and 2-adicity metadata for the cached field. */\n  info: { G: bigint; oddFactor: bigint; powerOfTwo: number };\n  /**\n   * Return the natural-order roots of unity for one radix-2 size.\n   * @param bits - Transform size as `log2(N)`.\n   * @returns Natural-order roots for that size.\n   */\n  roots: (bits: number) => bigint[];\n  /**\n   * Return the bit-reversal permutation of the roots for one radix-2 size.\n   * @param bits - Transform size as `log2(N)`.\n   * @returns Bit-reversed roots.\n   */\n  brp(bits: number): bigint[];\n  /**\n   * Return the inverse roots of unity for one radix-2 size.\n   * @param bits - Transform size as `log2(N)`.\n   * @returns Inverse roots.\n   */\n  inverse(bits: number): bigint[];\n  /**\n   * Return one primitive root used by a radix-2 stage.\n   * @param bits - Transform size as `log2(N)`.\n   * @returns Primitive root for that stage.\n   */\n  omega: (bits: number) => bigint;\n  /**\n   * Drop all cached root tables.\n   * @returns Nothing.\n   */\n  clear: () => void;\n};\n/**\n * We limit roots up to 2**31, which is a lot: 2-billion polynomimal should be rare.\n * @param field - Field implementation.\n * @param generator - Optional generator override.\n * @returns Roots-of-unity cache.\n * @example\n * Cache roots once, then ask for the omega table of one FFT size.\n *\n * ```ts\n * import { rootsOfUnity } from '@noble/curves/abstract/fft.js';\n * import { Field } from '@noble/curves/abstract/modular.js';\n * const roots = rootsOfUnity(Field(17n));\n * const omega = roots.omega(4);\n * ```\n */\nexport function rootsOfUnity(field: TArg<IField<bigint>>, generator?: bigint): RootsOfUnity {\n  // Factor field.ORDER-1 as oddFactor * 2^powerOfTwo\n  let oddFactor = field.ORDER - _1n;\n  let powerOfTwo = 0;\n  for (; (oddFactor & _1n) !== _1n; powerOfTwo++, oddFactor >>= _1n);\n\n  // Find non quadratic residue\n  let G = generator !== undefined ? BigInt(generator) : findGenerator(field);\n  // Powers of generator\n  const omegas: bigint[] = new Array(powerOfTwo + 1);\n  omegas[powerOfTwo] = field.pow(G, oddFactor);\n  for (let i = powerOfTwo; i > 0; i--) omegas[i - 1] = field.sqr(omegas[i]);\n  // Compute all roots of unity for powers up to maxPower\n  const rootsCache: bigint[][] = [];\n  const checkBits = (bits: number) => {\n    checkU32(bits);\n    if (bits > 31 || bits > powerOfTwo)\n      throw new Error('rootsOfUnity: wrong bits ' + bits + ' powerOfTwo=' + powerOfTwo);\n    return bits;\n  };\n  const precomputeRoots = (maxPower: number) => {\n    checkBits(maxPower);\n    for (let power = maxPower; power >= 0; power--) {\n      if (rootsCache[power]) continue; // Skip if we've already computed roots for this power\n      const rootsAtPower: bigint[] = [];\n      for (let j = 0, cur = field.ONE; j < 2 ** power; j++, cur = field.mul(cur, omegas[power]))\n        rootsAtPower.push(cur);\n      rootsCache[power] = rootsAtPower;\n    }\n    return rootsCache[maxPower];\n  };\n  const brpCache = new Map<number, bigint[]>();\n  const inverseCache = new Map<number, bigint[]>();\n  // roots()/brp()/inverse() expose shared cached arrays by reference for speed; callers must treat them as read-only.\n\n  // NOTE: we use bits instead of power, because power = 2**bits,\n  // but power is not neccesary isPowerOfTwo(power)!\n  return {\n    info: { G, powerOfTwo, oddFactor },\n    roots: (bits: number): bigint[] => {\n      const b = checkBits(bits);\n      return precomputeRoots(b);\n    },\n    brp(bits: number): bigint[] {\n      const b = checkBits(bits);\n      if (brpCache.has(b)) return brpCache.get(b)!;\n      else {\n        const res = bitReversalPermutation(this.roots(b));\n        brpCache.set(b, res);\n        return res;\n      }\n    },\n    inverse(bits: number): bigint[] {\n      const b = checkBits(bits);\n      if (inverseCache.has(b)) return inverseCache.get(b)!;\n      else {\n        const res = field.invertBatch(this.roots(b));\n        inverseCache.set(b, res);\n        return res;\n      }\n    },\n    omega: (bits: number): bigint => omegas[checkBits(bits)],\n    clear: (): void => {\n      rootsCache.splice(0, rootsCache.length);\n      brpCache.clear();\n      inverseCache.clear();\n    },\n  };\n}\n\n/** Polynomial coefficient container used by the FFT helpers. */\nexport type Polynomial<T> = MutableArrayLike<T>;\n\n/**\n * Arithmetic operations used by the generic FFT implementation.\n *\n * Maps great to Field<bigint>, but not to Group (EC points):\n * - inv from scalar field\n * - we need multiplyUnsafe here, instead of multiply for speed\n * - multiplyUnsafe is safe in the context: we do mul(rootsOfUnity), which are public and sparse\n */\nexport type FFTOpts<T, R> = {\n  /**\n   * Add two coefficients.\n   * @param a - Left coefficient.\n   * @param b - Right coefficient.\n   * @returns Sum coefficient.\n   */\n  add: (a: T, b: T) => T;\n  /**\n   * Subtract two coefficients.\n   * @param a - Left coefficient.\n   * @param b - Right coefficient.\n   * @returns Difference coefficient.\n   */\n  sub: (a: T, b: T) => T;\n  /**\n   * Multiply one coefficient by a scalar/root factor.\n   * @param a - Coefficient value.\n   * @param scalar - Scalar/root factor.\n   * @returns Scaled coefficient.\n   */\n  mul: (a: T, scalar: R) => T;\n  /**\n   * Invert one scalar/root factor.\n   * @param a - Scalar/root factor.\n   * @returns Inverse factor.\n   */\n  inv: (a: R) => R;\n};\n\n/** Configuration for one low-level FFT loop. */\nexport type FFTCoreOpts<R> = {\n  /** Transform size. Must be a power of two. */\n  N: number;\n  /** Stage roots for the selected transform size. */\n  roots: Polynomial<R>;\n  /** Whether to run the DIT variant instead of DIF. */\n  dit: boolean;\n  /** Whether to invert butterfly placement for decode-oriented layouts. */\n  invertButterflies?: boolean;\n  /** Number of initial stages to skip. */\n  skipStages?: number;\n  /** Whether to apply bit-reversal permutation at the boundary. */\n  brp?: boolean;\n};\n\n/**\n * Callable low-level FFT loop over one polynomial storage shape.\n * @param values - Polynomial coefficients to transform in place.\n * @returns The mutated input polynomial.\n */\nexport type FFTCoreLoop<T> = <P extends Polynomial<T>>(values: P) => P;\n\n/**\n * Constructs different flavors of FFT. radix2 implementation of low level mutating API. Flavors:\n *\n * - DIT (Decimation-in-Time): Bottom-Up (leaves to root), Cool-Turkey\n * - DIF (Decimation-in-Frequency): Top-Down (root to leaves), Gentleman-Sande\n *\n * DIT takes brp input, returns natural output.\n * DIF takes natural input, returns brp output.\n *\n * The output is actually identical. Time / frequence distinction is not meaningful\n * for Polynomial multiplication in fields.\n * Which means if protocol supports/needs brp output/inputs, then we can skip this step.\n *\n * Cyclic NTT: Rq = Zq[x]/(x^n-1). butterfly_DIT+loop_DIT OR butterfly_DIF+loop_DIT, roots are omega\n * Negacyclic NTT: Rq = Zq[x]/(x^n+1). butterfly_DIT+loop_DIF, at least for mlkem / mldsa\n * @param F - Field operations.\n * @param coreOpts - FFT configuration:\n *   - `N`: Transform size. Must be a power of two.\n *   - `roots`: Stage roots for the selected transform size.\n *   - `dit`: Whether to run the DIT variant instead of DIF.\n *   - `invertButterflies` (optional): Whether to invert butterfly placement.\n *   - `skipStages` (optional): Number of initial stages to skip.\n *   - `brp` (optional): Whether to apply bit-reversal permutation at the boundary.\n * @returns Low-level FFT loop.\n * @throws If the FFT options or cached roots are invalid for the requested size. {@link Error}\n * @example\n * Constructs different flavors of FFT.\n *\n * ```ts\n * import { FFTCore, rootsOfUnity } from '@noble/curves/abstract/fft.js';\n * import { Field } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const roots = rootsOfUnity(Fp).roots(2);\n * const loop = FFTCore(Fp, { N: 4, roots, dit: true });\n * const values = loop([1n, 2n, 3n, 4n]);\n * ```\n */\nexport const FFTCore = <T, R>(F: FFTOpts<T, R>, coreOpts: FFTCoreOpts<R>): FFTCoreLoop<T> => {\n  const { N, roots, dit, invertButterflies = false, skipStages = 0, brp = true } = coreOpts;\n  const bits = log2(N);\n  if (!isPowerOfTwo(N)) throw new Error('FFT: Polynomial size should be power of two');\n  // Wrong-sized root tables can stay in-bounds for some loop shapes and silently compute nonsense.\n  if (roots.length !== N)\n    throw new Error(`FFT: wrong roots length: expected ${N}, got ${roots.length}`);\n  const isDit = dit !== invertButterflies;\n  isDit;\n  return <P extends Polynomial<T>>(values: P): P => {\n    if (values.length !== N) throw new Error('FFT: wrong Polynomial length');\n    if (dit && brp) bitReversalInplace(values);\n    for (let i = 0, g = 1; i < bits - skipStages; i++) {\n      // For each stage s (sub-FFT length m = 2^s)\n      const s = dit ? i + 1 + skipStages : bits - i;\n      const m = 1 << s;\n      const m2 = m >> 1;\n      const stride = N >> s;\n      // Loop over each subarray of length m\n      for (let k = 0; k < N; k += m) {\n        // Loop over each butterfly within the subarray\n        for (let j = 0, grp = g++; j < m2; j++) {\n          const rootPos = invertButterflies ? (dit ? N - grp : grp) : j * stride;\n          const i0 = k + j;\n          const i1 = k + j + m2;\n          const omega = roots[rootPos];\n          const b = values[i1];\n          const a = values[i0];\n          // Inlining gives us 10% perf in kyber vs functions\n          if (isDit) {\n            const t = F.mul(b, omega); // Standard DIT butterfly\n            values[i0] = F.add(a, t);\n            values[i1] = F.sub(a, t);\n          } else if (invertButterflies) {\n            values[i0] = F.add(b, a); // DIT loop + inverted butterflies (Kyber decode)\n            values[i1] = F.mul(F.sub(b, a), omega);\n          } else {\n            values[i0] = F.add(a, b); // Standard DIF butterfly\n            values[i1] = F.mul(F.sub(a, b), omega);\n          }\n        }\n      }\n    }\n    if (!dit && brp) bitReversalInplace(values);\n    return values;\n  };\n};\n\n/** Forward and inverse FFT helpers for one coefficient domain. */\nexport type FFTMethods<T> = {\n  /**\n   * Apply the forward transform.\n   * @param values - Polynomial coefficients to transform.\n   * @param brpInput - Whether the input is already bit-reversed.\n   * @param brpOutput - Whether to keep the output bit-reversed.\n   * @returns Transformed copy.\n   */\n  direct<P extends Polynomial<T>>(values: P, brpInput?: boolean, brpOutput?: boolean): P;\n  /**\n   * Apply the inverse transform.\n   * @param values - Polynomial coefficients to transform.\n   * @param brpInput - Whether the input is already bit-reversed.\n   * @param brpOutput - Whether to keep the output bit-reversed.\n   * @returns Inverse-transformed copy.\n   */\n  inverse<P extends Polynomial<T>>(values: P, brpInput?: boolean, brpOutput?: boolean): P;\n};\n\n/**\n * NTT aka FFT over finite field (NOT over complex numbers).\n * Naming mirrors other libraries.\n * @param roots - Roots-of-unity cache.\n * @param opts - Field operations. See {@link FFTOpts}.\n * @returns Forward and inverse FFT helpers.\n * @example\n * NTT aka FFT over finite field (NOT over complex numbers).\n *\n * ```ts\n * import { FFT, rootsOfUnity } from '@noble/curves/abstract/fft.js';\n * import { Field } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const fft = FFT(rootsOfUnity(Fp), Fp);\n * const values = fft.direct([1n, 2n, 3n, 4n]);\n * ```\n */\nexport function FFT<T>(roots: RootsOfUnity, opts: FFTOpts<T, bigint>): FFTMethods<T> {\n  const getLoop = (\n    N: number,\n    roots: Polynomial<bigint>,\n    brpInput = false,\n    brpOutput = false\n  ): (<P extends Polynomial<T>>(values: P) => P) => {\n    if (brpInput && brpOutput) {\n      // we cannot optimize this case, but lets support it anyway\n      return (values) =>\n        FFTCore(opts, { N, roots, dit: false, brp: false })(bitReversalInplace(values));\n    }\n    if (brpInput) return FFTCore(opts, { N, roots, dit: true, brp: false });\n    if (brpOutput) return FFTCore(opts, { N, roots, dit: false, brp: false });\n    return FFTCore(opts, { N, roots, dit: true, brp: true }); // all natural\n  };\n  return {\n    direct<P extends Polynomial<T>>(values: P, brpInput = false, brpOutput = false): P {\n      const N = values.length;\n      if (!isPowerOfTwo(N)) throw new Error('FFT: Polynomial size should be power of two');\n      const bits = log2(N);\n      return getLoop(N, roots.roots(bits), brpInput, brpOutput)<P>(values.slice());\n    },\n    inverse<P extends Polynomial<T>>(values: P, brpInput = false, brpOutput = false): P {\n      const N = values.length;\n      if (!isPowerOfTwo(N)) throw new Error('FFT: Polynomial size should be power of two');\n      const bits = log2(N);\n      const res = getLoop(N, roots.inverse(bits), brpInput, brpOutput)(values.slice());\n      const ivm = opts.inv(BigInt(values.length)); // scale\n      // we can get brp output if we use dif instead of dit!\n      for (let i = 0; i < res.length; i++) res[i] = opts.mul(res[i], ivm);\n      // Allows to re-use non-inverted roots, but is VERY fragile\n      // return [res[0]].concat(res.slice(1).reverse());\n      // inverse calculated as pow(-1), which transforms into \u03C9^{-kn} (-> reverses indices)\n      return res;\n    },\n  };\n}\n\n/**\n * Factory that allocates one polynomial storage container.\n * Callers must ensure `_create(len)` returns field-zero-filled storage when `elm` is omitted,\n * because the quadratic `mul()` / `convolve()` paths and the Kronecker-\u03B4 shortcut in\n * `lagrange.basis()` rely on that default instead of always passing `field.ZERO` explicitly.\n * @param len - Requested amount of coefficients.\n * @param elm - Optional fill value.\n * @returns Newly allocated polynomial container.\n */\nexport type CreatePolyFn<P extends PolyStorage<T>, T> = (len: number, elm?: T) => P;\n\n/** High-level polynomial helpers layered on top of FFT and field arithmetic. */\nexport type PolyFn<P extends PolyStorage<T>, T> = {\n  /** Roots-of-unity cache used by the helper namespace. */\n  roots: RootsOfUnity;\n  /** Factory used to allocate new polynomial containers. */\n  create: CreatePolyFn<P, T>;\n  /** Optional enforced polynomial length. */\n  length?: number;\n\n  /**\n   * Compute the polynomial degree.\n   * @param a - Polynomial coefficients.\n   * @returns Polynomial degree.\n   */\n  degree: (a: P) => number;\n  /**\n   * Extend or truncate one polynomial to a requested length.\n   * @param a - Polynomial coefficients.\n   * @param len - Target length.\n   * @returns Resized polynomial.\n   */\n  extend: (a: P, len: number) => P;\n  /**\n   * Add two polynomials coefficient-wise.\n   * @param a - Left polynomial.\n   * @param b - Right polynomial.\n   * @returns Sum polynomial.\n   */\n  add: (a: P, b: P) => P;\n  /**\n   * Subtract two polynomials coefficient-wise.\n   * @param a - Left polynomial.\n   * @param b - Right polynomial.\n   * @returns Difference polynomial.\n   */\n  sub: (a: P, b: P) => P;\n  /**\n   * Multiply by another polynomial or by one scalar.\n   * @param a - Left polynomial.\n   * @param b - Right polynomial or scalar.\n   * @returns Product polynomial.\n   */\n  mul: (a: P, b: P | T) => P;\n  /**\n   * Multiply coefficients point-wise.\n   * @param a - Left polynomial.\n   * @param b - Right polynomial.\n   * @returns Point-wise product polynomial.\n   */\n  dot: (a: P, b: P) => P;\n  /**\n   * Multiply two polynomials with convolution.\n   * @param a - Left polynomial.\n   * @param b - Right polynomial.\n   * @returns Convolution product.\n   */\n  convolve: (a: P, b: P) => P;\n  /**\n   * Apply a point-wise coefficient shift by powers of one factor.\n   * @param p - Polynomial coefficients.\n   * @param factor - Shift factor.\n   * @returns Shifted polynomial.\n   */\n  shift: (p: P, factor: bigint) => P;\n  /**\n   * Clone one polynomial container.\n   * @param a - Polynomial coefficients.\n   * @returns Cloned polynomial.\n   */\n  clone: (a: P) => P;\n  /**\n   * Evaluate one polynomial on a basis vector.\n   * @param a - Polynomial coefficients.\n   * @param basis - Basis vector.\n   * @returns Evaluated field element.\n   */\n  eval: (a: P, basis: P) => T;\n  /** Helpers for monomial-basis polynomials. */\n  monomial: {\n    /** Build the monomial basis vector for one evaluation point. */\n    basis: (x: T, n: number) => P;\n    /** Evaluate a polynomial in the monomial basis. */\n    eval: (a: P, x: T) => T;\n  };\n  /** Helpers for Lagrange-basis polynomials. */\n  lagrange: {\n    /** Build the Lagrange basis vector for one evaluation point. */\n    basis: (x: T, n: number, brp?: boolean) => P;\n    /** Evaluate a polynomial in the Lagrange basis. */\n    eval: (a: P, x: T, brp?: boolean) => T;\n  };\n  /**\n   * Build the vanishing polynomial for a root set.\n   * @param roots - Root set.\n   * @returns Vanishing polynomial.\n   */\n  vanishing: (roots: P) => P;\n};\n\n/**\n * Poly wants a cracker.\n *\n * Polynomials are functions like `y=f(x)`, which means when we multiply two polynomials, result is\n * function `f3(x) = f1(x) * f2(x)`, we don't multiply values. Key takeaways:\n *\n * - **Polynomial** is an array of coefficients: `f(x) = sum(coeff[i] * basis[i](x))`\n * - **Basis** is array of functions\n * - **Monominal** is Polynomial where `basis[i](x) == x**i` (powers)\n * - **Array size** is domain size\n * - **Lattice** is matrix (Polynomial of Polynomials)\n * @param field - Field implementation.\n * @param roots - Roots-of-unity cache.\n * @param create - Optional polynomial factory. Runtime input validation accepts only plain `Array`\n *   and typed-array polynomial containers; arbitrary structural wrappers are intentionally rejected.\n * @param fft - Optional FFT implementation.\n * @param length - Optional fixed polynomial length.\n * @returns Polynomial helper namespace.\n * @example\n * Build polynomial helpers, then convolve two coefficient arrays.\n *\n * ```ts\n * import { poly, rootsOfUnity } from '@noble/curves/abstract/fft.js';\n * import { Field } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const poly17 = poly(Fp, rootsOfUnity(Fp));\n * const product = poly17.convolve([1n, 2n], [3n, 4n]);\n * ```\n */\nexport function poly<T>(\n  field: TArg<IField<T>>,\n  roots: RootsOfUnity,\n  create?: undefined,\n  fft?: FFTMethods<T>,\n  length?: number\n): PolyFn<T[], T>;\nexport function poly<T, P extends PolyStorage<T>>(\n  field: TArg<IField<T>>,\n  roots: RootsOfUnity,\n  create: CreatePolyFn<P, T>,\n  fft?: FFTMethods<T>,\n  length?: number\n): PolyFn<P, T>;\nexport function poly<T, P extends PolyStorage<T>>(\n  field: TArg<IField<T>>,\n  roots: RootsOfUnity,\n  create?: CreatePolyFn<P, T>,\n  fft?: FFTMethods<T>,\n  length?: number\n): PolyFn<any, T> {\n  const F = field as IField<T>;\n  const _create =\n    create ||\n    (((len: number, elm?: T): T[] => new Array(len).fill(elm ?? F.ZERO)) as CreatePolyFn<P, T>);\n\n  // `poly.mul(a, b)` distinguishes polynomial-vs-scalar at runtime, so keep accepted\n  // polynomial containers concrete instead of trying to support arbitrary wrappers.\n  const isPoly = (x: any): x is P => {\n    if (Array.isArray(x)) return true;\n    if (!ArrayBuffer.isView(x)) return false;\n    const v = x as unknown as ArrayLike<unknown> & { slice?: unknown; [Symbol.iterator]?: unknown };\n    return (\n      typeof v.length === 'number' &&\n      typeof v.slice === 'function' &&\n      typeof v[Symbol.iterator] === 'function'\n    );\n  };\n  const checkLength = (...lst: P[]): number => {\n    if (!lst.length) return 0;\n    for (const i of lst) if (!isPoly(i)) throw new Error('poly: not polynomial: ' + i);\n    const L = lst[0].length;\n    for (let i = 1; i < lst.length; i++)\n      if (lst[i].length !== L) throw new Error(`poly: mismatched lengths ${L} vs ${lst[i].length}`);\n    if (length !== undefined && L !== length)\n      throw new Error(`poly: expected fixed length ${length}, got ${L}`);\n    return L;\n  };\n  function findOmegaIndex(x: T, n: number, brp = false): number {\n    const bits = log2(n);\n    const omega = brp ? roots.brp(bits) : roots.roots(bits);\n    for (let i = 0; i < n; i++) if (F.eql(x, omega[i] as T)) return i;\n    return -1;\n  }\n  // TODO: mutating versions for mlkem/mldsa\n  return {\n    roots,\n    create: _create,\n    length,\n    extend: (a: P, len: number): P => {\n      checkLength(a);\n      const out = _create(len, F.ZERO);\n      // Plain arrays grow when writing past `out.length`, so cap the copy explicitly to keep\n      // `extend()` consistent with typed arrays and with its documented truncate behavior.\n      for (let i = 0; i < Math.min(a.length, len); i++) out[i] = a[i];\n      return out;\n    },\n    degree: (a: P): number => {\n      checkLength(a);\n      for (let i = a.length - 1; i >= 0; i--) if (!F.is0(a[i])) return i;\n      return -1;\n    },\n    add: (a: P, b: P): P => {\n      const len = checkLength(a, b);\n      const out = _create(len);\n      for (let i = 0; i < len; i++) out[i] = F.add(a[i], b[i]);\n      return out;\n    },\n    sub: (a: P, b: P): P => {\n      const len = checkLength(a, b);\n      const out = _create(len);\n      for (let i = 0; i < len; i++) out[i] = F.sub(a[i], b[i]);\n      return out;\n    },\n    dot: (a: P, b: P): P => {\n      const len = checkLength(a, b);\n      const out = _create(len);\n      for (let i = 0; i < len; i++) out[i] = F.mul(a[i], b[i]);\n      return out;\n    },\n    mul: (a: P, b: P | T): P => {\n      if (isPoly(b)) {\n        const len = checkLength(a, b);\n        if (fft) {\n          const A = fft.direct(a, false, true);\n          const B = fft.direct(b, false, true);\n          for (let i = 0; i < A.length; i++) A[i] = F.mul(A[i], B[i]);\n          return fft.inverse(A, true, false) as P;\n        } else {\n          // NOTE: this is quadratic and mostly for compat tests with FFT\n          const res = _create(len);\n          for (let i = 0; i < len; i++) {\n            for (let j = 0; j < len; j++) {\n              const k = (i + j) % len; // wrap mod length\n              res[k] = F.add(res[k], F.mul(a[i], b[j]));\n            }\n          }\n          return res;\n        }\n      } else {\n        const out = _create(checkLength(a));\n        for (let i = 0; i < out.length; i++) out[i] = F.mul(a[i], b);\n        return out;\n      }\n    },\n    convolve(a: P, b: P): P {\n      const len = nextPowerOfTwo(a.length + b.length - 1);\n      return this.mul(this.extend(a, len), this.extend(b, len));\n    },\n    shift(p: P, factor: bigint): P {\n      const out = _create(checkLength(p));\n      out[0] = p[0];\n      for (let i = 1, power = F.ONE; i < p.length; i++) {\n        power = F.mul(power, factor);\n        out[i] = F.mul(p[i], power);\n      }\n      return out;\n    },\n    clone: (a: P): P => {\n      checkLength(a);\n      const out = _create(a.length);\n      for (let i = 0; i < a.length; i++) out[i] = a[i];\n      return out;\n    },\n    eval: (a: P, basis: P): T => {\n      checkLength(a, basis);\n      let acc = F.ZERO;\n      for (let i = 0; i < a.length; i++) acc = F.add(acc, F.mul(a[i], basis[i]));\n      return acc;\n    },\n    monomial: {\n      basis: (x: T, n: number): P => {\n        const out = _create(n);\n        let pow = F.ONE;\n        for (let i = 0; i < n; i++) {\n          out[i] = pow;\n          pow = F.mul(pow, x);\n        }\n        return out;\n      },\n      eval: (a: P, x: T): T => {\n        checkLength(a);\n        // Same as eval(a, monomialBasis(x, a.length)), but it is faster this way\n        let acc = F.ZERO;\n        for (let i = a.length - 1; i >= 0; i--) acc = F.add(F.mul(acc, x), a[i]);\n        return acc;\n      },\n    },\n    lagrange: {\n      basis: (x: T, n: number, brp = false, weights?: P): P => {\n        const bits = log2(n);\n        const cache = weights || (brp ? roots.brp(bits) : roots.roots(bits)); // [\u03C9\u2070, \u03C9\u00B9, ..., \u03C9\u207F\u207B\u00B9]\n        const out = _create(n);\n        // Fast Kronecker-\u03B4 shortcut\n        const idx = findOmegaIndex(x, n, brp);\n        if (idx !== -1) {\n          out[idx] = F.ONE;\n          return out;\n        }\n        const tm = F.pow(x, BigInt(n));\n        const c = F.mul(F.sub(tm, F.ONE), F.inv(BigInt(n) as T)); // c = (x\u207F - 1)/n\n        const denom = _create(n);\n        for (let i = 0; i < n; i++) denom[i] = F.sub(x, cache[i] as T);\n        const inv = F.invertBatch(denom as any as T[]);\n        for (let i = 0; i < n; i++) out[i] = F.mul(c, F.mul(cache[i] as T, inv[i]));\n        return out;\n      },\n      eval(a: P, x: T, brp = false): T {\n        checkLength(a);\n        const idx = findOmegaIndex(x, a.length, brp);\n        if (idx !== -1) return a[idx]; // fast path\n        const L = this.basis(x, a.length, brp); // L\u1D62(x)\n        let acc = F.ZERO;\n        for (let i = 0; i < a.length; i++) if (!F.is0(a[i])) acc = F.add(acc, F.mul(a[i], L[i]));\n        return acc;\n      },\n    },\n    vanishing(roots: P): P {\n      checkLength(roots);\n      const out = _create(roots.length + 1, F.ZERO);\n      out[0] = F.ONE;\n      for (const r of roots) {\n        const neg = F.neg(r);\n        for (let j = out.length - 1; j > 0; j--) out[j] = F.add(F.mul(out[j], neg), out[j - 1]);\n        out[0] = F.mul(out[0], neg);\n      }\n      return out;\n    },\n  };\n}\n", "/**\n * hash-to-curve from RFC 9380.\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * https://www.rfc-editor.org/rfc/rfc9380\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { CHash, TArg, TRet } from '../utils.ts';\nimport {\n  abytes,\n  asafenumber,\n  asciiToBytes,\n  bytesToNumberBE,\n  copyBytes,\n  concatBytes,\n  isBytes,\n  validateObject,\n} from '../utils.ts';\nimport type { AffinePoint, PC_ANY, PC_F, PC_P } from './curve.ts';\nimport { FpInvertBatch, mod, type IField } from './modular.ts';\n\n/** ASCII domain-separation tag or raw bytes. */\nexport type AsciiOrBytes = string | Uint8Array;\ntype H2CDefaults = {\n  DST: AsciiOrBytes;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n  p: bigint;\n  m: number;\n  k: number;\n  encodeDST?: AsciiOrBytes;\n};\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\nexport type H2COpts = {\n  /** Domain separation tag. */\n  DST: AsciiOrBytes;\n  /** Expander family used by RFC 9380. */\n  expand: 'xmd' | 'xof';\n  /** Hash or XOF implementation used by the expander. */\n  hash: CHash;\n  /** Base-field characteristic. */\n  p: bigint;\n  /** Extension degree (`1` for prime fields). */\n  m: number;\n  /** Target security level in bits. */\n  k: number;\n};\n/** Hash-only subset of RFC 9380 options used by per-call overrides. */\nexport type H2CHashOpts = {\n  /** Expander family used by RFC 9380. */\n  expand: 'xmd' | 'xof';\n  /** Hash or XOF implementation used by the expander. */\n  hash: CHash;\n};\n/**\n * Map one hash-to-field output tuple onto affine curve coordinates.\n * Implementations receive the validated scalar tuple by reference for performance and MUST treat it\n * as read-only. Callers that need scratch space should copy before mutating.\n * @param scalar - Field-element tuple produced by `hash_to_field`.\n * @returns Affine point before subgroup clearing.\n */\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\n/** Per-call override for the domain-separation tag. */\nexport type H2CDSTOpts = {\n  /** Domain-separation tag override. */\n  DST: AsciiOrBytes;\n};\n/** Base hash-to-curve helpers shared by `hashToCurve` and `encodeToCurve`. */\nexport type H2CHasherBase<PC extends PC_ANY> = {\n  /**\n   * Hash arbitrary bytes to one curve point.\n   * @param msg - Input message bytes.\n   * @param options - Optional domain-separation override. See {@link H2CDSTOpts}.\n   * @returns Curve point after hash-to-curve.\n   */\n  hashToCurve(msg: TArg<Uint8Array>, options?: TArg<H2CDSTOpts>): PC_P<PC>;\n  /**\n   * Hash arbitrary bytes to one scalar.\n   * @param msg - Input message bytes.\n   * @param options - Optional domain-separation override. See {@link H2CDSTOpts}.\n   * @returns Scalar reduced into the target field.\n   */\n  hashToScalar(msg: TArg<Uint8Array>, options?: TArg<H2CDSTOpts>): bigint;\n  /**\n   * Derive one curve point from non-uniform bytes without the random-oracle\n   * guarantees of `hashToCurve`.\n   * Accepts the same arguments as `hashToCurve`, but runs the encode-to-curve\n   * path instead of the random-oracle construction.\n   */\n  deriveToCurve?(msg: TArg<Uint8Array>, options?: TArg<H2CDSTOpts>): PC_P<PC>;\n  /** Point constructor for the target curve. */\n  Point: PC;\n};\n/**\n * RFC 9380 methods, with cofactor clearing. See {@link https://www.rfc-editor.org/rfc/rfc9380#section-3 | RFC 9380 section 3}.\n *\n * * hashToCurve: `map(hash(input))`, encodes RANDOM bytes to curve (WITH hashing)\n * * encodeToCurve: `map(hash(input))`, encodes NON-UNIFORM bytes to curve (WITH hashing)\n * * mapToCurve: `map(scalars)`, encodes NON-UNIFORM scalars to curve (NO hashing)\n */\nexport type H2CHasher<PC extends PC_ANY> = H2CHasherBase<PC> & {\n  /**\n   * Encode non-uniform bytes to one curve point.\n   * @param msg - Input message bytes.\n   * @param options - Optional domain-separation override. See {@link H2CDSTOpts}.\n   * @returns Curve point after encode-to-curve.\n   */\n  encodeToCurve(msg: TArg<Uint8Array>, options?: TArg<H2CDSTOpts>): PC_P<PC>;\n  /** Deterministic map from `hash_to_field` tuples into affine coordinates. */\n  mapToCurve: MapToCurve<PC_F<PC>>;\n  /** Default RFC 9380 options captured by this hasher bundle. */\n  defaults: H2CDefaults;\n};\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE).\nfunction i2osp(value: number, length: number): TRet<Uint8Array> {\n  asafenumber(value);\n  asafenumber(length);\n  // This helper stays on the JS bitwise/u32 fast-path. Callers that need wider encodings should\n  // use bigint + numberToBytesBE instead of routing large widths through this small helper.\n  if (length < 0 || length > 4) throw new Error('invalid I2OSP length: ' + length);\n  if (value < 0 || value > 2 ** (8 * length) - 1) throw new Error('invalid I2OSP input: ' + value);\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res) as TRet<Uint8Array>;\n}\n\n// RFC 9380 only applies strxor() to equal-length strings; callers must preserve that invariant.\nfunction strxor(a: TArg<Uint8Array>, b: TArg<Uint8Array>): TRet<Uint8Array> {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr as TRet<Uint8Array>;\n}\n\n// User can always use utf8 if they want, by passing Uint8Array.\n// If string is passed, we treat it as ASCII: other formats are likely a mistake.\nfunction normDST(DST: TArg<AsciiOrBytes>): TRet<Uint8Array> {\n  if (!isBytes(DST) && typeof DST !== 'string')\n    throw new Error('DST must be Uint8Array or ascii string');\n  const dst = typeof DST === 'string' ? asciiToBytes(DST) : DST;\n  // RFC 9380 \u00A73.1 requirement 2: tags \"MUST have nonzero length\".\n  if (dst.length === 0) throw new Error('DST must be non-empty');\n  return dst as TRet<Uint8Array>;\n}\n\n/**\n * Produces a uniformly random byte string using a cryptographic hash\n * function H that outputs b bits.\n * See {@link https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1 | RFC 9380 section 5.3.1}.\n * @param msg - Input message.\n * @param DST - Domain separation tag. This helper normalizes DST, rejects empty DSTs, and\n *   oversize-hashes DST when needed.\n * @param lenInBytes - Output length.\n * @param H - Hash function.\n * @returns Uniform byte string.\n * @throws If the message, DST, hash, or output length is invalid. {@link Error}\n * @example\n * Expand one message into uniform bytes with the XMD construction.\n *\n * ```ts\n * import { expand_message_xmd } from '@noble/curves/abstract/hash-to-curve.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const uniform = expand_message_xmd(new TextEncoder().encode('hello noble'), 'DST', 32, sha256);\n * ```\n */\nexport function expand_message_xmd(\n  msg: TArg<Uint8Array>,\n  DST: TArg<AsciiOrBytes>,\n  lenInBytes: number,\n  H: TArg<CHash>\n): TRet<Uint8Array> {\n  abytes(msg);\n  asafenumber(lenInBytes);\n  DST = normDST(DST);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(asciiToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (lenInBytes > 65535 || ell > 255) throw new Error('expand_message_xmd: invalid lenInBytes');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = new Uint8Array(r_in_bytes); // RFC 9380: Z_pad = I2OSP(0, s_in_bytes)\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  // `b[0]` already stores RFC `b_1`, so only derive `b_2..b_ell` here. The old `<= ell`\n  // loop computed one extra tail block, which was usually sliced away but broke at max `ell=255`\n  // by reaching `I2OSP(256, 1)`.\n  for (let i = 1; i < ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\n/**\n * Produces a uniformly random byte string using an extendable-output function (XOF) H.\n * 1. The collision resistance of H MUST be at least k bits.\n * 2. H MUST be an XOF that has been proved indifferentiable from\n *    a random oracle under a reasonable cryptographic assumption.\n * See {@link https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2 | RFC 9380 section 5.3.2}.\n * @param msg - Input message.\n * @param DST - Domain separation tag. This helper normalizes DST, rejects empty DSTs, and\n *   oversize-hashes DST when needed.\n * @param lenInBytes - Output length.\n * @param k - Target security level.\n * @param H - XOF hash function.\n * @returns Uniform byte string.\n * @throws If the message, DST, XOF, or output length is invalid. {@link Error}\n * @example\n * Expand one message into uniform bytes with the XOF construction.\n *\n * ```ts\n * import { expand_message_xof } from '@noble/curves/abstract/hash-to-curve.js';\n * import { shake256 } from '@noble/hashes/sha3.js';\n * const uniform = expand_message_xof(\n *   new TextEncoder().encode('hello noble'),\n *   'DST',\n *   32,\n *   128,\n *   shake256\n * );\n * ```\n */\nexport function expand_message_xof(\n  msg: TArg<Uint8Array>,\n  DST: TArg<AsciiOrBytes>,\n  lenInBytes: number,\n  k: number,\n  H: TArg<CHash>\n): TRet<Uint8Array> {\n  abytes(msg);\n  asafenumber(lenInBytes);\n  DST = normDST(DST);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  // RFC 9380 \u00A75.3.3: DST = H(\"H2C-OVERSIZE-DST-\" || a_very_long_DST, ceil(2 * k / 8)).\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(asciiToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * See {@link https://www.rfc-editor.org/rfc/rfc9380#section-5.2 | RFC 9380 section 5.2}.\n * @param msg - Input message bytes.\n * @param count - Number of field elements to derive. Must be `>= 1`.\n * @param options - RFC 9380 options. See {@link H2COpts}. `m` must be `>= 1`.\n * @returns `[u_0, ..., u_(count - 1)]`, a list of field elements.\n * @throws If the expander choice or RFC 9380 options are invalid. {@link Error}\n * @example\n * Hash one message into field elements before mapping it onto a curve.\n *\n * ```ts\n * import { hash_to_field } from '@noble/curves/abstract/hash-to-curve.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const scalars = hash_to_field(new TextEncoder().encode('hello noble'), 2, {\n *   DST: 'DST',\n *   p: 17n,\n *   m: 1,\n *   k: 128,\n *   expand: 'xmd',\n *   hash: sha256,\n * });\n * ```\n */\nexport function hash_to_field(\n  msg: TArg<Uint8Array>,\n  count: number,\n  options: TArg<H2COpts>\n): bigint[][] {\n  validateObject(options, {\n    p: 'bigint',\n    m: 'number',\n    k: 'number',\n    hash: 'function',\n  });\n  const { p, k, m, hash, expand, DST } = options;\n  asafenumber(hash.outputLen, 'valid hash');\n  abytes(msg);\n  asafenumber(count);\n  // RFC 9380 \u00A75.2 defines hash_to_field over a list of one or more field elements and requires\n  // extension degree `m >= 1`; rejecting here avoids degenerate `[]` / `[[]]` helper outputs.\n  if (count < 1) throw new Error('hash_to_field: expected count >= 1');\n  if (m < 1) throw new Error('hash_to_field: expected m >= 1');\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\ntype XY<T> = (x: T, y: T) => { x: T; y: T };\ntype XYRatio<T> = [T[], T[], T[], T[]]; // xn/xd, yn/yd\n/**\n * @param field - Field implementation.\n * @param map - Isogeny coefficients.\n * @returns Isogeny mapping helper.\n * @example\n * Build one rational isogeny map, then apply it to affine x/y coordinates.\n *\n * ```ts\n * import { isogenyMap } from '@noble/curves/abstract/hash-to-curve.js';\n * import { Field } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const iso = isogenyMap(Fp, [[0n, 1n], [1n], [1n], [1n]]);\n * const point = iso(3n, 5n);\n * ```\n */\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: XYRatio<T>): XY<T> {\n  // Make same order as in spec\n  const coeff = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xn, xd, yn, yd] = coeff.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    // RFC 9380 \u00A76.6.3 / Appendix E: denominator-zero exceptional cases must\n    // return the identity on E.\n    // Shipped Weierstrass consumers encode that affine identity as all-zero\n    // coordinates, so `passZero=true` intentionally collapses zero\n    // denominators to `{ x: 0, y: 0 }`.\n    const [xd_inv, yd_inv] = FpInvertBatch(field, [xd, yd], true);\n    x = field.mul(xn, xd_inv); // xNum / xDen\n    y = field.mul(y, field.mul(yn, yd_inv)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\n// Keep the shared DST removable when the selected bundle never hashes to scalar.\n// Callers that need protocol-specific scalar domain separation must override this generic default.\n// RFC 9497 \u00A7\u00A74.1-4.5 use this ASCII prefix before appending the ciphersuite context string.\n// Export a string instead of mutable bytes so callers cannot poison default hash-to-scalar behavior\n// by mutating a shared Uint8Array in place.\nexport const _DST_scalar = 'HashToScalar-' as const;\n\n/**\n * Creates hash-to-curve methods from EC Point and mapToCurve function. See {@link H2CHasher}.\n * @param Point - Point constructor.\n * @param mapToCurve - Map-to-curve function.\n * @param defaults - Default hash-to-curve options. This object is frozen in place and reused as\n *   the shared defaults bundle for the returned helpers.\n * @returns Hash-to-curve helper namespace.\n * @throws If the map-to-curve callback or default hash-to-curve options are invalid. {@link Error}\n * @example\n * Bundle hash-to-curve, hash-to-scalar, and encode-to-curve helpers for one curve.\n *\n * ```ts\n * import { createHasher } from '@noble/curves/abstract/hash-to-curve.js';\n * import { p256 } from '@noble/curves/nist.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const hasher = createHasher(p256.Point, () => p256.Point.BASE.toAffine(), {\n *   DST: 'P256_XMD:SHA-256_SSWU_RO_',\n *   encodeDST: 'P256_XMD:SHA-256_SSWU_NU_',\n *   p: p256.Point.Fp.ORDER,\n *   m: 1,\n *   k: 128,\n *   expand: 'xmd',\n *   hash: sha256,\n * });\n * const point = hasher.encodeToCurve(new TextEncoder().encode('hello noble'));\n * ```\n */\nexport function createHasher<PC extends PC_ANY>(\n  Point: PC,\n  mapToCurve: MapToCurve<PC_F<PC>>,\n  defaults: TArg<H2COpts & { encodeDST?: AsciiOrBytes }>\n): H2CHasher<PC> {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  // `Point` is intentionally not shape-validated eagerly here: point constructors vary across\n  // curve families, so this helper only checks the hooks it can validate cheaply. Misconfigured\n  // suites fail later when hashing first touches Point.fromAffine / Point.ZERO / clearCofactor().\n  const snapshot = (src: TArg<H2COpts & { encodeDST?: AsciiOrBytes }>): TRet<H2CDefaults> =>\n    Object.freeze({\n      ...src,\n      DST: isBytes(src.DST) ? copyBytes(src.DST) : src.DST,\n      ...(src.encodeDST === undefined\n        ? {}\n        : { encodeDST: isBytes(src.encodeDST) ? copyBytes(src.encodeDST) : src.encodeDST }),\n    }) as TRet<H2CDefaults>;\n  // Keep one private defaults snapshot for actual hashing and expose fresh\n  // detached snapshots via the public getter.\n  // Otherwise a caller could mutate `hasher.defaults.DST` in place and poison\n  // the singleton hasher for every other consumer in the same process.\n  const safeDefaults = snapshot(defaults);\n  function map(num: bigint[]): PC_P<PC> {\n    return Point.fromAffine(mapToCurve(num)) as PC_P<PC>;\n  }\n  function clear(initial: PC_P<PC>): PC_P<PC> {\n    const P = initial.clearCofactor();\n    // Keep ZERO as the algebraic cofactor-clearing result here; strict public point-validity\n    // surfaces may still reject it later, but createHasher.clear() itself is not that boundary.\n    if (P.equals(Point.ZERO)) return Point.ZERO as PC_P<PC>;\n    P.assertValidity();\n    return P as PC_P<PC>;\n  }\n\n  return Object.freeze({\n    get defaults() {\n      return snapshot(safeDefaults);\n    },\n    Point,\n\n    hashToCurve(msg: TArg<Uint8Array>, options?: TArg<H2CDSTOpts>): PC_P<PC> {\n      const opts = Object.assign({}, safeDefaults, options);\n      const u = hash_to_field(msg, 2, opts);\n      const u0 = map(u[0]);\n      const u1 = map(u[1]);\n      return clear(u0.add(u1) as PC_P<PC>);\n    },\n    encodeToCurve(msg: TArg<Uint8Array>, options?: TArg<H2CDSTOpts>): PC_P<PC> {\n      const optsDst = safeDefaults.encodeDST ? { DST: safeDefaults.encodeDST } : {};\n      const opts = Object.assign({}, safeDefaults, optsDst, options);\n      const u = hash_to_field(msg, 1, opts);\n      const u0 = map(u[0]);\n      return clear(u0);\n    },\n    /** See {@link H2CHasher} */\n    mapToCurve(scalars: bigint | bigint[]): PC_P<PC> {\n      // Curves with m=1 accept only single scalar\n      if (safeDefaults.m === 1) {\n        if (typeof scalars !== 'bigint') throw new Error('expected bigint (m=1)');\n        return clear(map([scalars]));\n      }\n      if (!Array.isArray(scalars)) throw new Error('expected array of bigints');\n      for (const i of scalars)\n        if (typeof i !== 'bigint') throw new Error('expected array of bigints');\n      return clear(map(scalars));\n    },\n\n    // hash_to_scalar can produce 0: https://www.rfc-editor.org/errata/eid8393\n    // RFC 9380, draft-irtf-cfrg-bbs-signatures-08. Default scalar DST is the shared generic\n    // `HashToScalar-` prefix above unless the caller overrides it per invocation.\n    hashToScalar(msg: TArg<Uint8Array>, options?: TArg<H2CDSTOpts>): bigint {\n      // @ts-ignore\n      const N = Point.Fn.ORDER;\n      const opts = Object.assign({}, safeDefaults, { p: N, m: 1, DST: _DST_scalar }, options);\n      return hash_to_field(msg, 1, opts)[0][0];\n    },\n  });\n}\n", "/**\n * FROST: Flexible Round-Optimized Schnorr Threshold Protocol for Two-Round Schnorr Signatures.\n *\n * See [RFC 9591](https://datatracker.ietf.org/doc/rfc9591/) and [frost.zfnd.org](https://frost.zfnd.org).\n * @module\n */\nimport { utf8ToBytes } from '@noble/hashes/utils.js';\nimport {\n  bytesToHex,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  concatBytes,\n  hexToBytes,\n  randomBytes,\n  validateObject,\n  type TArg,\n  type TRet,\n} from '../utils.ts';\nimport { pippenger, validatePointCons, type CurvePoint, type CurvePointCons } from './curve.ts';\nimport { poly, type RootsOfUnity } from './fft.ts';\nimport { type H2CDSTOpts } from './hash-to-curve.ts';\nimport { getMinHashLength, mapHashToField, type IField } from './modular.ts';\n\nexport type RNG = typeof randomBytes;\nexport type Identifier = string; // Identifiers are hex to make comparison easier\nexport type Commitment = Uint8Array; // serialized point\nexport type Coefficient = Uint8Array; // serialized scalar\nexport type Signature = Uint8Array;\nexport type Signers = { min: number; max: number };\nexport type SecretKey = Uint8Array; // Secret key\nexport type Bytes = Uint8Array;\ntype Point = Uint8Array;\n\nexport type DKG_Round1 = {\n  // If identifiers were assigned via fromNumber before, it is worth checking\n  // that a party doesn't impersonate another one.\n  // But we throw on duplicate identifiers.\n  identifier: Identifier;\n  commitment: TRet<Commitment[]>; // sender identifier\n  proofOfKnowledge: TRet<Signature>;\n};\nexport type DKG_Round2 = {\n  identifier: Identifier; // sender identifier\n  signingShare: TRet<Bytes>;\n};\n// This is internal, so we can use bigints\nexport type DKG_Secret = {\n  identifier: bigint;\n  coefficients?: bigint[];\n  commitment: TRet<Point[]>;\n  signers: Signers;\n  // Keep the local polynomial until round3 succeeds so late DKG failures can be retried.\n  step?: 1 | 2 | 3;\n};\n\nexport type FrostPublic = {\n  signers: Signers;\n  commitments: TRet<Bytes[]>; // Point[], where commitments[0] is the group public key\n  verifyingShares: TRet<Record<Identifier, Bytes>>; // id -> Point\n};\nexport type FrostSecret = {\n  identifier: Identifier;\n  signingShare: TRet<Bytes>; // Scalar\n};\nexport type Key = { public: FrostPublic; secret: FrostSecret };\nexport type DealerShares = {\n  public: FrostPublic;\n  secretShares: Record<Identifier, FrostSecret>;\n};\n// Sign stuff\nexport type Nonces = {\n  hiding: TRet<Bytes>; // Scalar\n  binding: TRet<Bytes>; // Scalar\n};\nexport type NonceCommitments = {\n  identifier: Identifier;\n  hiding: TRet<Bytes>; // Point\n  binding: TRet<Bytes>; // Point\n};\nexport type GenNonce = {\n  nonces: Nonces;\n  commitments: NonceCommitments;\n};\n\nexport interface FROSTPoint<T extends CurvePoint<any, T>> extends CurvePoint<any, T> {\n  add(rhs: T): T;\n  multiply(rhs: bigint): T;\n  equals(rhs: T): boolean;\n  toBytes(compressed?: boolean): Bytes;\n  clearCofactor(): T;\n}\nexport interface FROSTPointConstructor<T extends FROSTPoint<T>> extends CurvePointCons<T> {\n  fromBytes(a: Bytes): T;\n  Fn: IField<bigint>;\n}\n\n// Opts\nexport type FrostOpts<P extends FROSTPoint<P>> = {\n  readonly name: string;\n  readonly Point: FROSTPointConstructor<P>;\n  readonly Fn?: IField<bigint>;\n  /** Optional suite hook that tightens canonical decoding with subgroup / identity checks. */\n  readonly validatePoint?: (p: P) => void;\n  /** Optional public-key parser. Implementations MUST preserve the same subgroup / identity policy\n   * as `validatePoint`, because this bypasses generic canonical decoding in `parsePoint()`. */\n  readonly parsePublicKey?: (bytes: TArg<Uint8Array>) => P;\n  readonly hash: (msg: TArg<Uint8Array>) => TRet<Uint8Array>;\n  /** Custom scalar hash hook. Implementations MUST treat `msg` and `options` as read-only. */\n  readonly hashToScalar?: (msg: TArg<Uint8Array>, options?: TArg<H2CDSTOpts>) => bigint;\n  // Hacks for taproot support\n  readonly adjustScalar?: (n: bigint) => bigint;\n  readonly adjustPoint?: (n: P) => P;\n  readonly challenge?: (R: P, PK: P, msg: TArg<Uint8Array>) => bigint;\n  readonly adjustNonces?: (PK: P, nonces: TArg<Nonces>) => TRet<Nonces>;\n  readonly adjustSecret?: (secret: TArg<FrostSecret>, pub: TArg<FrostPublic>) => TRet<FrostSecret>;\n  readonly adjustPublic?: (pub: TArg<FrostPublic>) => TRet<FrostPublic>;\n  readonly adjustGroupCommitmentShare?: (GC: P, GCShare: P) => P;\n  readonly adjustTx?: {\n    readonly encode: (tx: TArg<Uint8Array>) => TRet<Uint8Array>;\n    readonly decode: (tx: TArg<Uint8Array>) => TRet<Uint8Array>;\n  };\n  readonly adjustDKG?: (k: TArg<Key>) => TRet<Key>;\n  // Hash function prefixes\n  readonly H1?: string;\n  readonly H2?: string;\n  readonly H3?: string;\n  readonly H4?: string;\n  readonly H5?: string;\n  readonly HDKG?: string;\n  readonly HID?: string;\n};\n\n/**\n * FROST: Threshold Protocol for Two\u2011Round Schnorr Signatures\n * from [RFC 9591](https://datatracker.ietf.org/doc/rfc9591/).\n */\nexport type FROST = {\n  /**\n   * Methods to construct participant identifiers.\n   */\n  Identifier: {\n    /**\n     * Constructs an identifier from a numeric index.\n     * @param n - A positive integer.\n     * @returns A canonical serialized Identifier.\n     */\n    fromNumber(n: number): Identifier;\n    /**\n     * Derives an identifier deterministically from a string (e.g. an email).\n     * @param s - Arbitrary string.\n     * @returns A canonical serialized Identifier.\n     */\n    derive(s: string): Identifier;\n  };\n  /**\n   * Distributed Key Generation (DKG) protocol interface.\n   * RFC 9591 leaves DKG out of scope; Appendix C only specifies dealer/VSS key generation.\n   * These helpers follow the split-round API used by frost-rs for interoperable testing.\n   */\n  DKG: {\n    /**\n     * Generates the first round of DKG.\n     * @param id - Participant's identifier.\n     * @param signers - Set of all participants (min/max threshold).\n     * @param secret - Optional initial secret scalar.\n     * @param rng - Optional RNG for nonce generation.\n     * @returns Public broadcast and private DKG state. The returned `secret` package is mutable\n     *   round state that will be consumed by `round2()` and `round3()`.\n     */\n    round1: (\n      id: Identifier,\n      signers: Signers,\n      secret?: TArg<SecretKey>,\n      rng?: RNG\n    ) => {\n      public: DKG_Round1;\n      secret: DKG_Secret;\n    };\n    /**\n     * Executes DKG round 2 given public round1 data from others.\n     * @param secret - Private DKG state from round1. This mutates `secret.step` in place.\n     * @param others - Public round1 broadcasts from other participants.\n     * @returns A map of round2 messages to be sent to others.\n     */\n    round2: (\n      secret: TArg<DKG_Secret>,\n      others: TArg<DKG_Round1[]>\n    ) => TRet<Record<string, DKG_Round2>>;\n    /**\n     * Finalizes key generation in round3 using received round1 + round2 messages.\n     * @param secret - Private DKG state. This consumes the remaining local polynomial coefficients\n     *   and transitions the package to its final post-round3 state.\n     * @param round1 - Public round1 broadcasts from all participants.\n     * @param round2 - Round2 messages received from others.\n     * @returns Final secret/public key information for the participant.\n     * Callers MUST pass the same verified remote `round1` package set that was already\n     * accepted in `round2()`, rather than re-fetching or rebuilding it from the network.\n     */\n    round3: (\n      secret: TArg<DKG_Secret>,\n      round1: TArg<DKG_Round1[]>,\n      round2: TArg<DKG_Round2[]>\n    ) => TRet<Key>;\n    /**\n     * Best-effort erasure of internal secret state. Bigint/JIT copies may still survive outside the\n     * local object even after cleanup.\n     * @param secret - Private DKG state from round1.\n     */\n    clean(secret: TArg<DKG_Secret>): void;\n  };\n  /**\n   * Trusted dealer mode: generates key shares from a central trusted authority.\n   * Mirrors RFC 9591 Appendix C and returns one shared VSS commitment package\n   * plus per-participant shares.\n   * @param signers - Threshold parameters (min/max).\n   * @param identifiers - Optional explicit participant list.\n   * @param secret - Optional secret scalar.\n   * @param rng - Optional RNG.\n   * @returns One shared public package plus the participant secret-share packages.\n   */\n  trustedDealer(\n    signers: Signers,\n    identifiers?: Identifier[],\n    secret?: TArg<SecretKey>,\n    rng?: RNG\n  ): TRet<DealerShares>;\n  /**\n   * Validates the consistency of a secret share against the shared public commitments.\n   * This is the RFC 9591 Appendix C.2 `vss_verify` check against the shared dealer/DKG commitment.\n   * It does not relax RFC 9591 Section 3.1: public identity elements are still invalid even when\n   * the scalar/share algebra would otherwise be self-consistent.\n   * Throws if invalid.\n   * @param secret - A FrostSecret containing identifier and signing share.\n   * @param pub - Shared public package containing commitments.\n   */\n  validateSecret(secret: TArg<FrostSecret>, pub: TArg<FrostPublic>): void;\n  /**\n   * Produces nonces and public commitments used in signing.\n   * RFC 9591 Section 5.1 `commit()`.\n   * @param secret - Participant's secret share.\n   * @param rng - Optional RNG.\n   * @returns Nonce values and their public commitments.\n   * Returned nonces are one-time-use and MUST NOT be reused across signing sessions.\n   * This API does not mutate or zeroize caller-owned nonce objects.\n   */\n  commit(secret: TArg<FrostSecret>, rng?: RNG): TRet<GenNonce>;\n  /**\n   * Signs a message using the participant's secret and nonce.\n   * @param secret - Participant's secret share.\n   * @param pub - Shared public package containing commitments.\n   * @param nonces - Participant's nonce pair.\n   * @param commitmentList - Commitments from all signing participants.\n   * @param msg - Message to be signed.\n   * @returns Signature share as a byte array.\n   * RFC 9591 Sections 4.1/5.1 require round-one commitments to be one-time-use, and\n   * Section 5.2 signs with the nonce corresponding to that published commitment.\n   * The caller MUST pass fresh nonces from `commit()`. On successful signing, this helper\n   * consumes the caller-owned nonce object by zeroing both nonce byte arrays in place.\n   * Later calls reject an all-zero nonce package, so same-object reuse fails closed and an\n   * accidentally generated zero nonce package is not silently used for signing.\n   */\n  signShare(\n    secret: TArg<FrostSecret>,\n    pub: TArg<FrostPublic>,\n    nonces: TArg<Nonces>,\n    commitmentList: TArg<NonceCommitments[]>,\n    msg: TArg<Uint8Array>\n  ): TRet<Uint8Array>;\n  /**\n   * Verifies a signature share against public commitments.\n   * Matches the coordinator-side individual-share verification from RFC 9591 Section 5.4.\n   * @param pub - Group public key information.\n   * @param commitmentList - Commitments from all signing participants.\n   * @param msg - Message being signed.\n   * @param identifier - Identifier of the signer whose share is being verified.\n   * @param sigShare - Signature share to verify.\n   * @returns True if valid, false otherwise.\n   */\n  verifyShare(\n    pub: TArg<FrostPublic>,\n    commitmentList: TArg<NonceCommitments[]>,\n    msg: TArg<Uint8Array>,\n    identifier: Identifier,\n    sigShare: TArg<Uint8Array>\n  ): boolean;\n  /**\n   * Aggregates signature shares into a full signature.\n   * RFC 9591 Section 5.3 `aggregate()`.\n   * @param pub - Group public key.\n   * @param commitmentList - Nonce commitments from all signers.\n   * @param msg - Message to sign.\n   * @param sigShares - Map from identifier to their signature share.\n   * @returns Final aggregated signature.\n   */\n  aggregate(\n    pub: TArg<FrostPublic>,\n    commitmentList: TArg<NonceCommitments[]>,\n    msg: TArg<Uint8Array>,\n    sigShares: TArg<Record<Identifier, Uint8Array>>\n  ): TRet<Uint8Array>;\n  /**\n   * Signs a message using a raw secret key (e.g. from combineSecret).\n   * @param msg - Message to sign.\n   * @param secretKey - Group secret key as bytes.\n   * @returns Signature bytes.\n   */\n  sign(msg: TArg<Uint8Array>, secretKey: TArg<Uint8Array>): TRet<Uint8Array>;\n  /**\n   * Verifies a full signature against the group public key.\n   * @param sig - Signature bytes.\n   * @param msg - Message that was signed.\n   * @param publicKey - Group public key.\n   * @returns True if valid, false otherwise.\n   */\n  verify(sig: TArg<Signature>, msg: TArg<Uint8Array>, publicKey: TArg<Uint8Array>): boolean;\n  /**\n   * Combines multiple secret shares into a single secret key (e.g. for recovery).\n   * @param shares - Set of FrostSecret shares.\n   * @param signers - Threshold parameters.\n   * @returns Group secret key as bytes.\n   */\n  combineSecret(shares: TArg<FrostSecret[]>, signers: Signers): TRet<Uint8Array>;\n  /**\n   * Low-level helper utilities (field arithmetic and polynomial tools).\n   */\n  utils: {\n    /**\n     * Finite field used for scalars.\n     */\n    Fn: IField<bigint>;\n    /**\n     * Generates a random scalar (private key).\n     * @param rng - Optional RNG source.\n     * @returns Scalar as 32-byte Uint8Array.\n     */\n    randomScalar: (rng?: RNG) => TRet<Uint8Array>;\n    /**\n     * Generates a secret-sharing polynomial and its public commitments.\n     * @param signers - Threshold parameters.\n     * @param secret - Optional initial secret scalar.\n     * @param coeffs - Optional manual coefficients.\n     * @param rng - Optional RNG.\n     * @returns Polynomial coefficients, commitments, and secret value.\n     */\n    generateSecretPolynomial: (\n      signers: Signers,\n      secret?: TArg<Uint8Array>,\n      coeffs?: bigint[],\n      rng?: RNG\n    ) => {\n      coefficients: bigint[];\n      commitment: TRet<Point[]>;\n      secret: bigint;\n    };\n  };\n};\n\n// PubKey = commitments, verifyingShares\n// PrivKey = id, signingShare, commitment\n\nconst validateSigners = (signers: Signers) => {\n  if (!Number.isSafeInteger(signers.min) || !Number.isSafeInteger(signers.max))\n    throw new Error('Wrong signers info: min=' + signers.min + ' max=' + signers.max);\n  // Compatibility with frost-rs intentionally narrows RFC 9591's positive-nonzero threshold rule\n  // to `min >= 2`, even though the RFC text itself allows `MIN_PARTICIPANTS = 1`.\n  // This API is for actual threshold signing across participants; 1-of-n degenerates to ordinary\n  // single-signer mode, which does not need FROST's network/coordination machinery at all.\n  if (signers.min < 2 || signers.max < 2 || signers.min > signers.max)\n    throw new Error('Wrong signers info: min=' + signers.min + ' max=' + signers.max);\n};\nconst validateCommitmentsNum = (signers: Signers, len: number) => {\n  // RFC 9591 Sections 5.2/5.3 require MIN_PARTICIPANTS <= NUM_PARTICIPANTS <= MAX_PARTICIPANTS.\n  if (len < signers.min || len > signers.max) throw new Error('Wrong number of commitments=' + len);\n};\n\nclass AggErr extends Error {\n  // Empty means aggregation failed before per-share verification could attribute a signer.\n  public cheaters: Identifier[];\n  constructor(msg: string, cheaters: Identifier[]) {\n    super(msg);\n    this.cheaters = cheaters;\n  }\n}\n\nexport function createFROST<P extends FROSTPoint<P>>(opts: FrostOpts<P>): TRet<FROST> {\n  validateObject(\n    opts,\n    {\n      name: 'string',\n      hash: 'function',\n    },\n    {\n      hashToScalar: 'function',\n      validatePoint: 'function',\n      parsePublicKey: 'function',\n      adjustScalar: 'function',\n      adjustPoint: 'function',\n      challenge: 'function',\n      adjustNonces: 'function',\n      adjustSecret: 'function',\n      adjustPublic: 'function',\n      adjustGroupCommitmentShare: 'function',\n      adjustDKG: 'function',\n    }\n  );\n  // Cheap constructor-surface sanity check only: this verifies the generic static hooks/fields that\n  // FROST consumes, but it does not certify point semantics like BASE/ZERO correctness.\n  validatePointCons(opts.Point);\n  const { Point } = opts;\n  const Fn = opts.Fn === undefined ? Point.Fn : opts.Fn;\n  // Hashes\n  const hashBytes = opts.hash;\n  const hashToScalar =\n    opts.hashToScalar === undefined\n      ? (msg: TArg<Uint8Array>, opts: TArg<H2CDSTOpts> = { DST: new Uint8Array() }) => {\n          const t = hashBytes(concatBytes(opts.DST as Uint8Array, msg));\n          return Fn.create(Fn.isLE ? bytesToNumberLE(t) : bytesToNumberBE(t));\n        }\n      : opts.hashToScalar;\n  const H1Prefix = utf8ToBytes(opts.H1 !== undefined ? opts.H1 : opts.name + 'rho');\n  const H2Prefix = utf8ToBytes(opts.H2 !== undefined ? opts.H2 : opts.name + 'chal');\n  const H3Prefix = utf8ToBytes(opts.H3 !== undefined ? opts.H3 : opts.name + 'nonce');\n  const H4Prefix = utf8ToBytes(opts.H4 !== undefined ? opts.H4 : opts.name + 'msg');\n  const H5Prefix = utf8ToBytes(opts.H5 !== undefined ? opts.H5 : opts.name + 'com');\n  const HDKGPrefix = utf8ToBytes(opts.HDKG !== undefined ? opts.HDKG : opts.name + 'dkg');\n  const HIDPrefix = utf8ToBytes(opts.HID !== undefined ? opts.HID : opts.name + 'id');\n  const H1 = (msg: TArg<Uint8Array>) => hashToScalar(msg, { DST: H1Prefix });\n  // Empty H2 still passes `{ DST: new Uint8Array() }` into custom hashToScalar hooks.\n  // The built-in fallback hashes that identically to omitted DST, which is how\n  // the Ed25519 suite models RFC 9591's undecorated H2 challenge hash.\n  const H2 = (msg: TArg<Uint8Array>) => hashToScalar(msg, { DST: H2Prefix });\n  const H3 = (msg: TArg<Uint8Array>) => hashToScalar(msg, { DST: H3Prefix });\n  const H4 = (msg: TArg<Uint8Array>) => hashBytes(concatBytes(H4Prefix, msg));\n  const H5 = (msg: TArg<Uint8Array>) => hashBytes(concatBytes(H5Prefix, msg));\n  const HDKG = (msg: TArg<Uint8Array>) => hashToScalar(msg, { DST: HDKGPrefix });\n  const HID = (msg: TArg<Uint8Array>) => hashToScalar(msg, { DST: HIDPrefix });\n  // /Hashes\n  const randomScalar = (rng: RNG = randomBytes) => {\n    // Intentional divergence from RFC 9591 \u00A74.1 / \u00A75.1: the RFC nonce_generate helper outputs a\n    // Scalar in [0, p-1], but round-one commit publishes ScalarBaseMult(nonce) values and \u00A73.1\n    // requires SerializeElement / DeserializeElement to reject the identity element. Keep noble's\n    // mapHashToField generation here so round-one public nonce commitments stay in 1..n-1.\n    const t = mapHashToField(rng(getMinHashLength(Fn.ORDER)), Fn.ORDER, Fn.isLE);\n    // We cannot use Fn.fromBytes here because the field can have a different\n    // byte width, like ed448.\n    return Fn.isLE ? bytesToNumberLE(t) : bytesToNumberBE(t);\n  };\n  const serializePoint = (p: P) => p.toBytes();\n  const parsePoint = (bytes: TArg<Uint8Array>) => {\n    // RFC 9591 Section 3.1 requires DeserializeElement validation. Suite-specific validatePoint\n    // hooks tighten this further for ciphersuites in Section 6. Bare createFROST(...) only gets\n    // canonical point decoding unless the caller installs those extra subgroup / identity checks.\n    const p = Point.fromBytes(bytes);\n    if (opts.validatePoint) opts.validatePoint(p);\n    return p;\n  };\n  // RFC 9591 Sections 4.1/5.1 model each participant's round-one output as two public commitments.\n  const nonceCommitments = (identifier: Identifier, nonces: TArg<Nonces>): TRet<NonceCommitments> =>\n    ({\n      identifier,\n      hiding: serializePoint(Point.BASE.multiply(Fn.fromBytes(nonces.hiding))),\n      binding: serializePoint(Point.BASE.multiply(Fn.fromBytes(nonces.binding))),\n    }) as TRet<NonceCommitments>;\n  const adjustPoint = opts.adjustPoint === undefined ? (n: P) => n : opts.adjustPoint;\n  // We use hex to make it easier to use inside objects\n  const validateIdentifier = (n: bigint) => {\n    // Identifiers are canonical non-zero scalars. Custom / derived identifiers are allowed, so this\n    // is intentionally not bounded by the current signers.max slot count.\n    if (!Fn.isValid(n) || Fn.is0(n)) throw new Error('Invalid identifier ' + n);\n    return n;\n  };\n  const serializeIdentifier = (id: bigint) => bytesToHex(Fn.toBytes(validateIdentifier(id)));\n  const parseIdentifier = (id: string) => {\n    const n = validateIdentifier(Fn.fromBytes(hexToBytes(id)));\n    // Keep string-keyed maps stable by accepting only the canonical serialized form.\n    if (serializeIdentifier(n) !== id) throw new Error('expected canonical identifier hex');\n    return n;\n  };\n\n  const Signature = {\n    // RFC 9591 Appendix A encodes signatures canonically as\n    // SerializeElement(R) || SerializeScalar(z).\n    encode: (R: P, z: bigint): TRet<Signature> => {\n      let res: Uint8Array = concatBytes(serializePoint(R), Fn.toBytes(z));\n      if (opts.adjustTx) res = opts.adjustTx.encode(res);\n      return res as TRet<Signature>;\n    },\n    decode: (sig: TArg<Uint8Array>) => {\n      if (opts.adjustTx) sig = opts.adjustTx.decode(sig);\n      // We don't know size of point, but we know size of scalar\n      const R = parsePoint(sig.subarray(0, -Fn.BYTES));\n      const z = Fn.fromBytes(sig.subarray(-Fn.BYTES));\n      return { R, z };\n    },\n  };\n  // Generates pair of (scalar, point)\n  const genPointScalarPair = (rng: RNG = randomBytes) => {\n    let n = randomScalar(rng);\n    if (opts.adjustScalar) n = opts.adjustScalar(n);\n    let p = Point.BASE.multiply(n);\n    return { scalar: n, point: p };\n  };\n  // No roots here: root-based methods will throw.\n  // `poly` expects a structured roots-of-unity domain, but FROST uses an\n  // arbitrary domain and only needs the non-root operations below.\n  const nrErr = 'roots are unavailable in FROST polynomial mode';\n  const noRoots: RootsOfUnity = {\n    info: { G: Fn.ZERO, oddFactor: Fn.ZERO, powerOfTwo: 0 },\n    roots() {\n      throw new Error(nrErr);\n    },\n    brp() {\n      throw new Error(nrErr);\n    },\n    inverse() {\n      throw new Error(nrErr);\n    },\n    omega() {\n      throw new Error(nrErr);\n    },\n    clear() {},\n  };\n  const Poly = poly(Fn, noRoots);\n  const msm = (points: P[], scalars: bigint[]) => pippenger(Point, points, scalars);\n\n  // Internal stuff uses bigints & Points, external Uint8Arrays\n  const polynomialEvaluate = (x: bigint, coeffs: bigint[]): bigint => {\n    if (!coeffs.length) throw new Error('empty coefficients');\n    return Poly.monomial.eval(coeffs, x);\n  };\n  const deriveInterpolatingValue = (L: bigint[], xi: bigint): bigint => {\n    const err = 'invalid parameters';\n    // Generates lagrange coefficient\n    if (!L.some((x) => Fn.eql(x, xi))) throw new Error(err);\n    // Throws error if any x-coordinate is represented more than once in L.\n    const Lset = new Set(L);\n    if (Lset.size !== L.length) throw new Error(err);\n    // Or if xi is missing\n    if (!Lset.has(xi)) throw new Error(err);\n    let num = Fn.ONE;\n    let den = Fn.ONE;\n    for (const x of L) {\n      if (Fn.eql(x, xi)) continue;\n      num = Fn.mul(num, x); // num *= x\n      den = Fn.mul(den, Fn.sub(x, xi)); // RFC 9591 \u00A74.2: denominator *= x_j - x_i\n    }\n    return Fn.div(num, den);\n  };\n  const evalutateVSS = (identifier: bigint, commitment: P[]) => {\n    // RFC 9591 Appendix C.2: S_i' = \u03A3_j ScalarMult(vss_commitment[j], i^j).\n    const monomial = Poly.monomial.basis(identifier, commitment.length);\n    return msm(commitment, monomial);\n  };\n  // High-level internal stuff\n  const generateSecretPolynomial = (\n    signers: Signers,\n    secret?: TArg<Uint8Array>,\n    coeffs?: bigint[],\n    rng: RNG = randomBytes\n  ) => {\n    validateSigners(signers);\n    // Dealer/DKG polynomial sampling reuses the same hardened scalar derivation as round-one\n    // nonces: overriding `rng` only swaps the entropy source, not the non-zero `1..n-1` policy.\n    const secretScalar = secret === undefined ? randomScalar(rng) : Fn.fromBytes(secret);\n    if (!coeffs) {\n      coeffs = [];\n      for (let i = 0; i < signers.min - 1; i++) coeffs.push(randomScalar(rng));\n    }\n    if (coeffs.length !== signers.min - 1) throw new Error('wrong coefficients length');\n    const coefficients: bigint[] = [secretScalar, ...coeffs];\n    // RFC 9591 Appendix C.2 commits to every polynomial coefficient with ScalarBaseMult.\n    const commitment = coefficients.map((i) => Point.BASE.multiply(i));\n    return { coefficients, commitment, secret: secretScalar };\n  };\n  // Pretty much sign+verify, same as basic\n  const ProofOfKnowledge = {\n    challenge: (id: bigint, verKey: P, R: P) =>\n      HDKG(concatBytes(Fn.toBytes(id), serializePoint(verKey), serializePoint(R))),\n    compute(id: bigint, coefficents: bigint[], commitments: P[], rng: RNG = randomBytes) {\n      if (coefficents.length < 1) throw new Error('coefficients should have at least one element');\n      const { point: R, scalar: k } = genPointScalarPair(rng);\n      const verKey = commitments[0]; // verify key is first one\n      const c = this.challenge(id, verKey, R);\n      const mu = Fn.add(k, Fn.mul(coefficents[0], c)); // mu = k + coeff[0] * c\n      return Signature.encode(R, mu);\n    },\n    validate(id: bigint, commitment: TArg<Commitment[]>, proof: TArg<Uint8Array>) {\n      if (commitment.length < 1) throw new Error('commitment should have at least one element');\n      const { R, z } = Signature.decode(proof);\n      const phi = parsePoint(commitment[0]);\n      const c = this.challenge(id, phi, R);\n      // R === z*G - phi*c\n      if (!R.equals(Point.BASE.multiply(z).subtract(phi.multiply(c))))\n        throw new Error('invalid proof of knowledge');\n    },\n  };\n  const Basic = {\n    challenge: (R: P, PK: P, msg: TArg<Uint8Array>) => {\n      if (opts.challenge) return opts.challenge(R, PK, msg);\n      return H2(concatBytes(serializePoint(R), serializePoint(PK), msg));\n    },\n    sign(msg: TArg<Uint8Array>, sk: bigint, rng: RNG = randomBytes): [P, bigint] {\n      const { point: R, scalar: r } = genPointScalarPair(rng);\n      const PK = Point.BASE.multiply(sk); // sk*G\n      const c = this.challenge(R, PK, msg);\n      const z = Fn.add(r, Fn.mul(c, sk)); // r + c * sk\n      return [R, z];\n    },\n    verify(msg: TArg<Uint8Array>, R: P, z: bigint, PK: P): boolean {\n      if (opts.adjustPoint) PK = opts.adjustPoint(PK);\n      if (opts.adjustPoint) R = opts.adjustPoint(R);\n      const c = this.challenge(R, PK, msg);\n      const zB = Point.BASE.multiply(z); // z*G\n      const cA = PK.multiply(c); // c*PK\n      let check = zB.subtract(cA).subtract(R); // zB - cA - R\n      // No clearCoffactor on ristretto\n      if (check.clearCofactor) check = check.clearCofactor();\n      return Point.ZERO.equals(check);\n    },\n  };\n  // === vssVerify\n  const validateSecretShare = (identifier: bigint, commitment: P[], signingShare: bigint) => {\n    // RFC 9591 Appendix C.2 `vss_verify(share_i, vss_commitment)` is purely algebraic.\n    // Public FROST packages still go through Section 3.1 element encoding,\n    // which rejects identity points, so a zero share or commitment does not\n    // become valid wire data just because VSS matches.\n    if (!Point.BASE.multiply(signingShare).equals(evalutateVSS(identifier, commitment)))\n      throw new Error('invalid secret share');\n  };\n  const Identifier = {\n    fromNumber(n: number): Identifier {\n      if (!Number.isSafeInteger(n)) throw new Error('expected safe interger');\n      return serializeIdentifier(BigInt(n));\n    },\n    // Not in spec, but in FROST implementation,\n    // seems useful and nice, no need to sync identifiers (would require more interactions)\n    derive(s: string): Identifier {\n      if (typeof s !== 'string') throw new Error('wrong identifier string: ' + s);\n      // Derived identifiers may land anywhere in the scalar field; they are not restricted to\n      // sequential `1..max_signers` values.\n      return serializeIdentifier(HID(utf8ToBytes(s)));\n    },\n  };\n  // RFC 9591 \u00A74.1: nonce_generate() hashes 32 fresh RNG bytes with SerializeScalar(secret).\n  const generateNonce = (secret: bigint, rng: RNG = randomBytes) =>\n    H3(concatBytes(rng(32), Fn.toBytes(secret)));\n\n  const getGroupCommitment = (\n    GPK: P,\n    commitmentList: TArg<NonceCommitments[]>,\n    msg: TArg<Uint8Array>\n  ) => {\n    const CL = commitmentList.map((i) => [\n      i.identifier,\n      parseIdentifier(i.identifier),\n      parsePoint(i.hiding),\n      parsePoint(i.binding),\n    ]) as [Identifier, bigint, P, P][];\n    // RFC 9591 Sections 4.3/4.4/4.5 and 5.2/5.3 treat commitment_list as sorted by identifier.\n    CL.sort((a, b) => (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0));\n    // Encode commitment list\n    const Cbytes = [];\n    for (const [_, id, hC, bC] of CL)\n      Cbytes.push(Fn.toBytes(id), serializePoint(hC), serializePoint(bC));\n    const encodedCommitmentHash = H5(concatBytes(...Cbytes));\n    const rhoPrefix = concatBytes(serializePoint(GPK), H4(msg), encodedCommitmentHash);\n    // Compute binding factors\n    const bindingFactors: Record<Identifier, bigint> = {};\n    for (const [i, id] of CL) {\n      bindingFactors[i] = H1(concatBytes(rhoPrefix, Fn.toBytes(id)));\n    }\n    const points: P[] = [];\n    const scalars: bigint[] = [];\n    for (const [i, _, hC, bC] of CL) {\n      if (Point.ZERO.equals(hC) || Point.ZERO.equals(bC)) throw new Error('infinity commitment');\n      points.push(hC, bC);\n      scalars.push(Fn.ONE, bindingFactors[i]);\n    }\n    const groupCommitment = msm(points, scalars); //  GC += hC + bC*bindingFactor\n    const identifiers = CL.map((i) => i[1]);\n    return { identifiers, groupCommitment, bindingFactors };\n  };\n  const prepareShare = (\n    PK: TArg<Uint8Array>,\n    commitmentList: TArg<NonceCommitments[]>,\n    msg: TArg<Uint8Array>,\n    identifier: Identifier\n  ) => {\n    // RFC 9591 Sections 4.4/4.5/4.6 feed directly into the Section 5.2 signer computation.\n    const GPK = adjustPoint(parsePoint(PK));\n    const id = parseIdentifier(identifier);\n    const { identifiers, groupCommitment, bindingFactors } = getGroupCommitment(\n      GPK,\n      commitmentList,\n      msg\n    );\n    const bindingFactor = bindingFactors[identifier];\n    const lambda = deriveInterpolatingValue(identifiers, id);\n    const challenge = Basic.challenge(groupCommitment, GPK, msg);\n    return { lambda, challenge, bindingFactor, groupCommitment };\n  };\n  Object.freeze(Identifier);\n  const frost = {\n    Identifier,\n    // DKG is Distributed Key Generation, not Trusted Dealer Key Generation.\n    DKG: Object.freeze({\n      // NOTE: we allow to pass secret scalar from user side,\n      // this way it can be derived, instead of random generation\n      round1: (\n        id: Identifier,\n        signers: Signers,\n        secret?: TArg<SecretKey>,\n        rng: RNG = randomBytes\n      ) => {\n        validateSigners(signers);\n        const idNum = parseIdentifier(id);\n        const { coefficients, commitment } = generateSecretPolynomial(\n          signers,\n          secret,\n          undefined,\n          rng\n        );\n        const proofOfKnowledge = ProofOfKnowledge.compute(idNum, coefficients, commitment, rng);\n        const commitmentBytes = commitment.map(serializePoint) as TRet<Commitment[]>;\n        const round1Public: DKG_Round1 = {\n          identifier: serializeIdentifier(idNum),\n          commitment: commitmentBytes,\n          proofOfKnowledge,\n        };\n        // store secret information for signing\n        const round1Secret: DKG_Secret = {\n          identifier: idNum,\n          coefficients,\n          commitment: commitment.map(serializePoint) as TRet<Point[]>,\n          // Copy threshold metadata instead of retaining the caller-owned object by reference.\n          signers: { min: signers.min, max: signers.max },\n          step: 1,\n        };\n        return { public: round1Public, secret: round1Secret };\n      },\n      round2: (\n        secret: TArg<DKG_Secret>,\n        others: TArg<DKG_Round1[]>\n      ): TRet<Record<string, DKG_Round2>> => {\n        if (others.length !== secret.signers.max - 1)\n          throw new Error('wrong number of round1 packages');\n        if (!secret.coefficients || secret.step === 3)\n          throw new Error('round3 package used in round2');\n        const res: Record<Identifier, DKG_Round2> = {};\n        for (const p of others) {\n          if (p.commitment.length !== secret.signers.min)\n            throw new Error('wrong number of commitments');\n          const id = parseIdentifier(p.identifier);\n          if (id === secret.identifier) throw new Error('duplicate id=' + serializeIdentifier(id));\n\n          ProofOfKnowledge.validate(id, p.commitment, p.proofOfKnowledge);\n          for (const c of p.commitment) parsePoint(c);\n          if (res[p.identifier]) throw new Error('Duplicate id=' + id);\n          const signingShare = Fn.toBytes(polynomialEvaluate(id, secret.coefficients));\n          res[p.identifier] = {\n            identifier: serializeIdentifier(secret.identifier),\n            signingShare: signingShare as TRet<Bytes>,\n          };\n        }\n        secret.step = 2;\n        return res as TRet<Record<string, DKG_Round2>>;\n      },\n      round3: (\n        secret: TArg<DKG_Secret>,\n        round1: TArg<DKG_Round1[]>,\n        round2: TArg<DKG_Round2[]>\n      ): TRet<Key> => {\n        // DKG is outside RFC 9591's signing flow; callers are expected to reuse the same\n        // remote round1 packages already accepted in round2, like frost-rs documents.\n        if (round1.length !== secret.signers.max - 1)\n          throw new Error('wrong length of round1 packages');\n        if (!secret.coefficients || secret.step !== 2)\n          throw new Error('round2 package used in round3');\n        if (round2.length !== round1.length) throw new Error('wrong length of round2 packages');\n        const merged: Record<Identifier, TArg<DKG_Round1> & { signingShare?: TArg<Bytes> }> = {};\n        for (const r1 of round1) {\n          if (!r1.identifier || !r1.commitment) throw new Error('wrong round1 share');\n          merged[r1.identifier] = { ...r1 };\n        }\n        for (const r2 of round2) {\n          if (!r2.identifier || !r2.signingShare) throw new Error('wrong round2 share');\n          if (!merged[r2.identifier])\n            throw new Error('round1 share for ' + r2.identifier + ' is missing');\n          merged[r2.identifier].signingShare = r2.signingShare;\n        }\n        if (Object.keys(merged).length !== round1.length)\n          throw new Error('mismatch identifiers between rounds');\n        let signingShare = Fn.ZERO;\n        if (secret.commitment.length !== secret.signers.min)\n          throw new Error('wrong commitments length');\n        const localCommitment = secret.commitment.map(parsePoint);\n        const localShare = polynomialEvaluate(secret.identifier, secret.coefficients);\n        validateSecretShare(secret.identifier, localCommitment, localShare);\n        const localCommitmentBytes = localCommitment.map(serializePoint);\n        const commitments: Record<Identifier, TArg<Commitment[]>> = {\n          [serializeIdentifier(secret.identifier)]: localCommitmentBytes,\n        };\n        for (const k in merged) {\n          const v = merged[k];\n          if (!v.signingShare || !v.commitment) throw new Error('mismatch identifiers');\n          const id = parseIdentifier(k); // from\n          const signingSharePart = Fn.fromBytes(v.signingShare);\n          const commitment = v.commitment.map(parsePoint);\n          validateSecretShare(secret.identifier, commitment, signingSharePart);\n          signingShare = Fn.add(signingShare, signingSharePart);\n          const idSer = serializeIdentifier(id);\n          if (commitments[idSer]) throw new Error('duplicated id=' + idSer);\n          commitments[idSer] = v.commitment;\n        }\n        signingShare = Fn.add(signingShare, localShare);\n        const mergedCommitment = new Array(secret.signers.min).fill(Point.ZERO);\n        for (const k in commitments) {\n          const v = commitments[k];\n          if (v.length !== secret.signers.min) throw new Error('wrong commitments length');\n          for (let i = 0; i < v.length; i++)\n            mergedCommitment[i] = mergedCommitment[i].add(parsePoint(v[i]));\n        }\n        const mergedCommitmentBytes = mergedCommitment.map(serializePoint) as TRet<Commitment[]>;\n        const verifyingShares: Record<Identifier, Uint8Array> = {};\n        for (const k in commitments)\n          verifyingShares[k] = serializePoint(evalutateVSS(parseIdentifier(k), mergedCommitment));\n        // This is enough to sign stuff\n        let res: TRet<Key> = {\n          public: {\n            signers: { min: secret.signers.min, max: secret.signers.max },\n            commitments: mergedCommitmentBytes,\n            verifyingShares: Object.fromEntries(\n              Object.entries(verifyingShares).map(([k, v]) => [k, v.slice()])\n            ),\n          },\n          secret: {\n            identifier: serializeIdentifier(secret.identifier),\n            signingShare: Fn.toBytes(signingShare) as TRet<Bytes>,\n          },\n        };\n        if (opts.adjustDKG) res = opts.adjustDKG(res);\n        for (let i = 0; i < secret.coefficients.length; i++)\n          secret.coefficients[i] -= secret.coefficients[i];\n        delete secret.coefficients;\n        secret.step = 3;\n        return res;\n      },\n      clean(secret: TArg<DKG_Secret>) {\n        // Instead of replacing secret bigint with another (zero?), we subtract it from itself\n        // in the hope that JIT will modify it inplace, instead of creating new value.\n        // This is unverified and may not work, but it is best we can do in regard of bigints.\n        secret.identifier -= secret.identifier;\n        if (secret.coefficients) {\n          for (let i = 0; i < secret.coefficients.length; i++)\n            secret.coefficients[i] -= secret.coefficients[i];\n        }\n        // for (const c of secret.commitment) c.fill(0);\n        secret.step = 3;\n      },\n    }),\n    // Trusted dealer setup\n    // Generates keys for all participants\n    trustedDealer(\n      signers: Signers,\n      identifiers?: Identifier[],\n      secret?: TArg<SecretKey>,\n      rng: RNG = randomBytes\n    ): TRet<DealerShares> {\n      // if no identifiers provided, we generated default identifiers\n      validateSigners(signers);\n      if (identifiers === undefined) {\n        identifiers = [];\n        for (let i = 1; i <= signers.max; i++) identifiers.push(Identifier.fromNumber(i));\n      } else {\n        if (!Array.isArray(identifiers) || identifiers.length !== signers.max)\n          throw new Error('identifiers should be array of ' + signers.max);\n      }\n      const identifierNums: Record<Identifier, bigint> = {};\n      for (const id of identifiers) {\n        const idNum = parseIdentifier(id);\n        if (id in identifierNums) throw new Error('duplicated id=' + id);\n        identifierNums[id] = idNum;\n      }\n      const sp = generateSecretPolynomial(signers, secret, undefined, rng);\n      const commitmentBytes = sp.commitment.map(serializePoint);\n      const secretShares: Record<Identifier, FrostSecret> = {};\n      const verifyingShares: Record<Identifier, Uint8Array> = {};\n      for (const id of identifiers) {\n        const signingShare = polynomialEvaluate(identifierNums[id], sp.coefficients);\n        verifyingShares[id] = serializePoint(Point.BASE.multiply(signingShare));\n        secretShares[id] = {\n          identifier: id,\n          signingShare: Fn.toBytes(signingShare) as TRet<Bytes>,\n        };\n      }\n      return {\n        public: {\n          signers: { min: signers.min, max: signers.max },\n          commitments: commitmentBytes,\n          verifyingShares,\n        },\n        secretShares,\n      } as TRet<DealerShares>;\n    },\n    // Validate secret (from trusted dealer or DKG)\n    validateSecret(secret: TArg<FrostSecret>, pub: TArg<FrostPublic>) {\n      const id = parseIdentifier(secret.identifier);\n      const commitment = pub.commitments.map(parsePoint);\n      const signingShare = Fn.fromBytes(secret.signingShare);\n      validateSecretShare(id, commitment, signingShare);\n    },\n    // Actual signing\n    // Round 1: each participant commit to nonces\n    // Nonces kept private, commitments sent to coordinator (or every other participant)\n    // NOTE: we don't need the message at this point, which lets a coordinator\n    // keep multiple nonce commitments per participant in advance and skip\n    // round1 for signing.\n    // But then each participant needs to remember generated shares\n    commit(secret: TArg<FrostSecret>, rng: RNG = randomBytes): TRet<GenNonce> {\n      const secretScalar = Fn.fromBytes(secret.signingShare);\n      const hiding = generateNonce(secretScalar, rng);\n      const binding = generateNonce(secretScalar, rng);\n      const nonces = { hiding: Fn.toBytes(hiding), binding: Fn.toBytes(binding) };\n      return { nonces, commitments: nonceCommitments(secret.identifier, nonces) } as TRet<GenNonce>;\n    },\n    // Round2: sign. Each participant creates a signature share from the secret\n    // and the selected nonce commitments.\n    signShare(\n      secret: TArg<FrostSecret>,\n      pub: TArg<FrostPublic>,\n      nonces: TArg<Nonces>,\n      commitmentList: TArg<NonceCommitments[]>,\n      msg: TArg<Uint8Array>\n    ): TRet<Uint8Array> {\n      validateCommitmentsNum(pub.signers, commitmentList.length);\n      const hidingNonce0 = Fn.fromBytes(nonces.hiding);\n      const bindingNonce0 = Fn.fromBytes(nonces.binding);\n      if (Fn.is0(hidingNonce0) || Fn.is0(bindingNonce0))\n        throw new Error('signing nonces already used');\n      // Reject a coordinator-assigned commitment pair that does not match the signer's own nonce\n      // pair. This must happen before suite-specific nonce adjustment; secp256k1-tr may negate the\n      // actual signing nonces later, but the coordinator still assigns the original commitments.\n      const expectedCommitment = {\n        identifier: secret.identifier,\n        hiding: serializePoint(Point.BASE.multiply(hidingNonce0)),\n        binding: serializePoint(Point.BASE.multiply(bindingNonce0)),\n      };\n      const commitment = commitmentList.find((i) => i.identifier === secret.identifier);\n      if (!commitment) throw new Error('missing signer commitment');\n      if (\n        bytesToHex(commitment.hiding) !== bytesToHex(expectedCommitment.hiding) ||\n        bytesToHex(commitment.binding) !== bytesToHex(expectedCommitment.binding)\n      )\n        throw new Error('incorrect signer commitment');\n      if (opts.adjustSecret) secret = opts.adjustSecret(secret, pub);\n      if (opts.adjustPublic) pub = opts.adjustPublic(pub);\n      const SK = Fn.fromBytes(secret.signingShare);\n      const { lambda, challenge, bindingFactor, groupCommitment } = prepareShare(\n        pub.commitments[0],\n        commitmentList,\n        msg,\n        secret.identifier\n      );\n      const N = opts.adjustNonces ? opts.adjustNonces(groupCommitment, nonces) : nonces;\n      const hidingNonce = opts.adjustNonces ? Fn.fromBytes(N.hiding) : hidingNonce0;\n      const bindingNonce = opts.adjustNonces ? Fn.fromBytes(N.binding) : bindingNonce0;\n      const t = Fn.mul(Fn.mul(lambda, SK), challenge); // challenge * lambda * SK\n      const t2 = Fn.mul(bindingNonce, bindingFactor); // bindingNonce * bindingFactor\n      const r = Fn.toBytes(Fn.add(Fn.add(hidingNonce, t2), t)); // t + t2 + hidingNonce\n      // RFC 9591 round-one commitments are one-time-use, and round two must use the nonce\n      // corresponding to the published commitment. This API returns mutable local nonce bytes,\n      // so consume them after a successful signShare() call: later all-zero reuse fails closed.\n      nonces.hiding.fill(0);\n      nonces.binding.fill(0);\n      return r as TRet<Uint8Array>;\n    },\n    // Each participant (or coordinator) can verify signatures from other participants\n    verifyShare(\n      pub: TArg<FrostPublic>,\n      commitmentList: TArg<NonceCommitments[]>,\n      msg: TArg<Uint8Array>,\n      identifier: Identifier,\n      sigShare: TArg<Uint8Array>\n    ) {\n      if (opts.adjustPublic) pub = opts.adjustPublic(pub);\n      const comm = commitmentList.find((i) => i.identifier === identifier);\n      if (!comm) throw new Error('cannot find identifier commitment');\n      const PK = parsePoint(pub.verifyingShares[identifier]);\n      const hidingNonceCommitment = parsePoint(comm.hiding);\n      const bindingNonceCommitment = parsePoint(comm.binding);\n      const { lambda, challenge, bindingFactor, groupCommitment } = prepareShare(\n        pub.commitments[0],\n        commitmentList,\n        msg,\n        identifier\n      );\n      // hC + bC * bF\n      let commShare = hidingNonceCommitment.add(bindingNonceCommitment.multiply(bindingFactor));\n      if (opts.adjustGroupCommitmentShare)\n        commShare = opts.adjustGroupCommitmentShare(groupCommitment, commShare);\n      const l = Point.BASE.multiply(Fn.fromBytes(sigShare)); // sigShare*G\n      // commShare + PK * (challenge * lambda)\n      const r = commShare.add(PK.multiply(Fn.mul(challenge, lambda)));\n      return l.equals(r);\n    },\n    // Aggregate multiple signature shares into groupSignature\n    aggregate(\n      pub: TArg<FrostPublic>,\n      commitmentList: TArg<NonceCommitments[]>,\n      msg: TArg<Uint8Array>,\n      sigShares: TArg<Record<Identifier, Uint8Array>>\n    ): TRet<Uint8Array> {\n      if (opts.adjustPublic) pub = opts.adjustPublic(pub);\n      try {\n        validateCommitmentsNum(pub.signers, commitmentList.length);\n      } catch {\n        throw new AggErr('aggregation failed', []);\n      }\n      const ids = commitmentList.map((i) => i.identifier);\n      if (ids.length !== Object.keys(sigShares).length) throw new AggErr('aggregation failed', []);\n      for (const id of ids) {\n        if (!(id in sigShares) || !(id in pub.verifyingShares))\n          throw new AggErr('aggregation failed', []);\n      }\n      const GPK = parsePoint(pub.commitments[0]);\n      const { groupCommitment } = getGroupCommitment(GPK, commitmentList, msg);\n      let z = Fn.ZERO;\n      // RFC 9591 Section 5.3 aggregates by summing the validated signature shares.\n      for (const id of ids) z = Fn.add(z, Fn.fromBytes(sigShares[id])); // z += zi\n      if (!Basic.verify(msg, groupCommitment, z, GPK)) {\n        const cheaters = [];\n        for (const id of ids) {\n          if (!this.verifyShare(pub, commitmentList, msg, id, sigShares[id])) cheaters.push(id);\n        }\n        throw new AggErr('aggregation failed', cheaters);\n      }\n      return Signature.encode(groupCommitment, z);\n    },\n    // Basic sign/verify using single key\n    sign(msg: TArg<Uint8Array>, secretKey: TArg<Uint8Array>): TRet<Uint8Array> {\n      let sk = Fn.fromBytes(secretKey);\n      // Taproot single-key signing needs the same scalar normalization as threshold keys.\n      if (opts.adjustScalar) sk = opts.adjustScalar(sk);\n      const [R, z] = Basic.sign(msg, sk);\n      return Signature.encode(R, z);\n    },\n    verify(sig: TArg<Signature>, msg: TArg<Uint8Array>, publicKey: TArg<Uint8Array>) {\n      const PK = opts.parsePublicKey ? opts.parsePublicKey(publicKey) : parsePoint(publicKey);\n      const { R, z } = Signature.decode(sig);\n      return Basic.verify(msg, R, z, PK);\n    },\n    // Combine multiple secret shares to restore secret\n    combineSecret(shares: TArg<FrostSecret[]>, signers: Signers): TRet<Uint8Array> {\n      validateSigners(signers);\n      if (!Array.isArray(shares) || shares.length < signers.min)\n        throw new Error('wrong secret shares array');\n      const points = [];\n      const seen: Record<Identifier, boolean> = {};\n      // Interpolate over the full provided share set and reject duplicate identifiers.\n      for (const s of shares) {\n        const idNum = parseIdentifier(s.identifier);\n        const id = serializeIdentifier(idNum);\n        if (seen[id]) throw new Error('duplicated id=' + id);\n        seen[id] = true;\n        points.push([idNum, Fn.fromBytes(s.signingShare)]);\n      }\n      const xCoords = points.map(([x]) => x);\n      let res = Fn.ZERO;\n      for (const [x, y] of points)\n        res = Fn.add(res, Fn.mul(y, deriveInterpolatingValue(xCoords, x)));\n      return Fn.toBytes(res) as TRet<Uint8Array>;\n    },\n    // Utils\n    utils: Object.freeze({\n      Fn, // NOTE: we re-export it here because it may be different from Point.Fn (ed448 is fun!)\n      // Test RNG overrides still go through noble's non-zero scalar derivation; this is not a raw\n      // \"bytes become scalar\" escape hatch.\n      randomScalar: (rng: RNG = randomBytes) =>\n        Fn.toBytes(genPointScalarPair(rng).scalar) as TRet<Uint8Array>,\n      generateSecretPolynomial: (\n        signers: Signers,\n        secret?: TArg<Uint8Array>,\n        coeffs?: bigint[],\n        rng?: RNG\n      ) => {\n        const res = generateSecretPolynomial(signers, secret, coeffs, rng);\n        return { ...res, commitment: res.commitment.map(serializePoint) as TRet<Point[]> };\n      },\n    }),\n  };\n  return Object.freeze(frost) as TRet<FROST>;\n}\n", "/**\n * RFC 9497: Oblivious Pseudorandom Functions (OPRFs) Using Prime-Order Groups.\n * https://www.rfc-editor.org/rfc/rfc9497\n *\n\nOPRF allows to interactively create an `Output = PRF(Input, serverSecretKey)`:\n\n- Server cannot calculate Output by itself: it doesn't know Input\n- Client cannot calculate Output by itself: it doesn't know server secretKey\n- An attacker interception the communication can't restore Input/Output/serverSecretKey and can't\n  link Input to some value.\n\n## Issues\n\n- Low-entropy inputs (e.g. password '123') enable brute-forced dictionary attacks by the server\n  (solveable by domain separation in POPRF)\n- High-level protocol needs to be constructed on top, because OPRF is low-level\n\n## Use cases\n\n1. **Password-Authenticated Key Exchange (PAKE):** Enables secure password login (e.g., OPAQUE)\n   without revealing the password to the server.\n2. **Private Set Intersection (PSI):** Allows two parties to compute the intersection of their\n   private sets without revealing non-intersecting elements.\n3. **Anonymous Credential Systems:** Supports issuance of anonymous, unlinkable credentials\n   (e.g., Privacy Pass) using blind OPRF evaluation.\n4. **Private Information Retrieval (PIR):** Helps users query databases without revealing which\n   item they accessed.\n5. **Encrypted Search / Secure Indexing:** Enables keyword search over encrypted data while keeping\n   queries private.\n6. **Spam Prevention and Rate-Limiting:** Issues anonymous tokens to prevent abuse\n   (e.g., CAPTCHA bypass) without compromising user privacy.\n\n## Modes\n\n- OPRF: simple mode, client doesn't need to know server public key\n- VOPRF: verifiable mode. It lets the client verify that the server used the\n  secret key corresponding to a known public key\n- POPRF: partially oblivious mode, VOPRF + domain separation\n\nThere is also non-interactive mode (Evaluate), which creates Output\nnon-interactively with knowledge of the secret key.\n\nFlow:\n- (once) Server generates secret and public keys, distributes public keys to clients\n  - deterministically: `deriveKeyPair` or just random: `generateKeyPair`\n- Client blinds input: `blind(secretInput)`\n- Server evaluates blinded input: `blindEvaluate` generated by client, sends result to client\n- Client creates output using result of evaluation via 'finalize'\n\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n  abytes,\n  asciiToBytes,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  concatBytes,\n  numberToBytesBE,\n  randomBytes,\n  validateObject,\n  type TArg,\n  type TRet,\n} from '../utils.ts';\nimport { pippenger, validatePointCons, type CurvePoint, type CurvePointCons } from './curve.ts';\nimport { _DST_scalar, type H2CDSTOpts } from './hash-to-curve.ts';\nimport { getMinHashLength, mapHashToField } from './modular.ts';\n\n// OPRF is designed to be used across network, so we default to serialized values.\n/** Serialized group element passed between OPRF participants. */\nexport type PointBytes = Uint8Array;\n/** Serialized scalar used for blinds and server secret keys. */\nexport type ScalarBytes = Uint8Array;\n/** Arbitrary byte input or output used by the OPRF protocol. */\nexport type Bytes = Uint8Array;\nconst _DST_scalarBytes = /* @__PURE__ */ asciiToBytes(_DST_scalar);\n/** Cryptographically secure byte generator used for blinds and proofs. */\nexport type RNG = typeof randomBytes;\n\n/** Curve and hash hooks required to instantiate one OPRF ciphersuite. */\nexport type OPRFOpts<P extends CurvePoint<any, P>> = {\n  /** Human-readable suite identifier used for domain separation. */\n  name: string;\n  /**\n   * Prime-order group used by the OPRF construction.\n   * Kept generic because the suite returns serialized points.\n   */\n  Point: CurvePointCons<P>;\n  // Fn: IField<bigint>;\n  /**\n   * Hash function used for transcripts, proofs, and outputs.\n   * @param msg - Message bytes to hash.\n   * @returns Digest bytes.\n   */\n  hash(msg: TArg<Bytes>): TRet<Bytes>;\n  /**\n   * Hash arbitrary bytes into one scalar in the suite order.\n   * @param msg - Message bytes to map.\n   * @param options - Hash-to-field domain-separation options. See {@link H2CDSTOpts}.\n   * Implementations MUST treat `msg` and `options` as read-only.\n   * @returns Scalar in the suite order.\n   */\n  hashToScalar(msg: TArg<Uint8Array>, options: TArg<H2CDSTOpts>): bigint;\n  /**\n   * Hash arbitrary bytes directly onto one curve point.\n   * @param msg - Message bytes to map.\n   * @param options - Hash-to-curve domain-separation options. See {@link H2CDSTOpts}.\n   * Implementations MUST treat `msg` and `options` as read-only.\n   * @returns Point on the suite curve.\n   */\n  hashToGroup(msg: TArg<Uint8Array>, options: TArg<H2CDSTOpts>): P;\n};\n\n/** Server keypair for one OPRF suite. */\nexport type OPRFKeys = {\n  /** Secret scalar kept by the server. */\n  secretKey: TRet<ScalarBytes>;\n  /** Public point distributed to clients in verifiable modes. */\n  publicKey: TRet<PointBytes>;\n};\n/** Result of the client-side blind step. */\nexport type OPRFBlind = {\n  /** Secret blind scalar that the client keeps locally. */\n  blind: TRet<ScalarBytes>;\n  /** Blinded group element sent to the server. */\n  blinded: TRet<PointBytes>;\n};\n/** Server response for one verifiable OPRF evaluation. */\nexport type OPRFBlindEval = {\n  /** Evaluated group element returned by the server. */\n  evaluated: TRet<PointBytes>;\n  /** DLEQ proof binding the evaluation to the server public key. */\n  proof: TRet<Bytes>;\n};\n/** Server response for a batch of verifiable OPRF evaluations. */\nexport type OPRFBlindEvalBatch = {\n  /** Evaluated group elements returned for each blinded input. */\n  evaluated: TRet<PointBytes[]>;\n  /** Batch proof covering all evaluated elements. */\n  proof: TRet<Bytes>;\n};\n/** One finalized transcript item used by batch verification helpers. */\nexport type OPRFFinalizeItem = {\n  /** Original client input. */\n  input: Bytes;\n  /** Secret blind scalar used for the input. */\n  blind: ScalarBytes;\n  /** Evaluated point returned by the server. */\n  evaluated: PointBytes;\n  /** Blinded point originally sent to the server. */\n  blinded: PointBytes;\n};\n/** Result of the POPRF client-side blind step with the tweaked server public key. */\nexport type OPRFBlindTweaked = OPRFBlind & { tweakedKey: TRet<PointBytes> };\n\n/**\n * Represents a full OPRF ciphersuite implementation according to RFC 9497.\n * This object bundles the three protocol variants (OPRF, VOPRF, POPRF) for a specific\n * prime-order group and hash function combination.\n *\n * @see https://www.rfc-editor.org/rfc/rfc9497.html\n */\nexport type OPRF = {\n  /**\n   * The unique identifier for the ciphersuite, e.g., \"ristretto255-SHA512\".\n   * This name is used for domain separation to prevent cross-protocol attacks.\n   */\n  readonly name: string;\n\n  /**\n   * The base Oblivious Pseudorandom Function (OPRF) mode (mode 0x00).\n   * This is a two-party protocol between a client and a server to compute F(k, x)\n   * where 'k' is the server's key and 'x' is the client's input.\n   *\n   * The client learns the output F(k, x) but nothing about 'k'.\n   * The server learns nothing about 'x' or F(k, x).\n   * This mode is NOT verifiable; the client cannot prove the server used a specific key.\n   */\n  readonly oprf: {\n    /**\n     * (Server-side) Generates a new random private/public key pair for the server.\n     * @returns A new key pair.\n     */\n    generateKeyPair(): TRet<OPRFKeys>;\n\n    /**\n     * (Server-side) Deterministically derives a private/public key pair from a seed.\n     * @param seed - A 32-byte cryptographically secure random seed.\n     * @param keyInfo - An optional byte string for domain separation.\n     * @returns The derived key pair.\n     */\n    deriveKeyPair(seed: TArg<Bytes>, keyInfo: TArg<Bytes>): TRet<OPRFKeys>;\n\n    /**\n     * (Client-side) The first step of the protocol. The client blinds its private input.\n     * @param input - The client's private input bytes.\n     * @param rng - An optional cryptographically secure random number generator.\n     * @returns An object containing the `blind` scalar (which the client MUST keep secret)\n     * and the `blinded` element (which the client sends to the server).\n     */\n    blind(input: TArg<Bytes>, rng?: RNG): TRet<OPRFBlind>;\n\n    /**\n     * (Server-side) The second step. The server evaluates the client's blinded element\n     * using its secret key.\n     * @param secretKey - The server's private key.\n     * @param blinded - The blinded group element received from the client.\n     * @returns The evaluated group element, to be sent back to the client.\n     */\n    blindEvaluate(secretKey: TArg<ScalarBytes>, blinded: TArg<PointBytes>): TRet<PointBytes>;\n\n    /**\n     * (Client-side) The final step. The client unblinds the server's response to\n     * compute the final OPRF output.\n     * @param input - The original private input from the `blind` step.\n     * @param blind - The secret scalar from the `blind` step.\n     * @param evaluated - The evaluated group element received from the server.\n     * @returns The final OPRF output, `Hash(len(input)||input||len(unblinded)||unblinded||\"Finalize\")`.\n     */\n    finalize(\n      input: TArg<Bytes>,\n      blind: TArg<ScalarBytes>,\n      evaluated: TArg<PointBytes>\n    ): TRet<Bytes>;\n  };\n\n  /**\n   * The Verifiable Oblivious Pseudorandom Function (VOPRF) mode (mode 0x01).\n   * This mode extends the base OPRF by providing a proof that the server used the\n   * secret key corresponding to its known public key.\n   */\n  readonly voprf: {\n    /** (Server-side) Generates a key pair for the VOPRF mode. */\n    generateKeyPair(): TRet<OPRFKeys>;\n    /** (Server-side) Deterministically derives a key pair for the VOPRF mode. */\n    deriveKeyPair(seed: TArg<Bytes>, keyInfo: TArg<Bytes>): TRet<OPRFKeys>;\n    /** (Client-side) Blinds the client's private input for the VOPRF protocol. */\n    blind(input: TArg<Bytes>, rng?: RNG): TRet<OPRFBlind>;\n\n    /**\n     * (Server-side) Evaluates the client's blinded element and generates a DLEQ proof\n     * of correctness.\n     * @param secretKey - The server's private key.\n     * @param publicKey - The server's public key, used in proof generation.\n     * @param blinded - The blinded group element received from the client.\n     * @param rng - An optional cryptographically secure random number generator for the proof.\n     * @returns The evaluated element and a proof of correct computation.\n     */\n    blindEvaluate(\n      secretKey: TArg<ScalarBytes>,\n      publicKey: TArg<PointBytes>,\n      blinded: TArg<PointBytes>,\n      rng?: RNG\n    ): TRet<OPRFBlindEval>;\n\n    /**\n     * (Server-side) An optimized batch version of `blindEvaluate`. It evaluates multiple\n     * blinded elements and produces a single, constant-size proof for the entire batch,\n     * amortizing the cost of proof generation.\n     * @param secretKey - The server's private key.\n     * @param publicKey - The server's public key.\n     * @param blinded - An array of blinded group elements from one or more clients.\n     * @param rng - An optional cryptographically secure random number generator for the proof.\n     * @returns An array of evaluated elements and a single proof for the batch.\n     */\n    blindEvaluateBatch(\n      secretKey: TArg<ScalarBytes>,\n      publicKey: TArg<PointBytes>,\n      blinded: TArg<PointBytes[]>,\n      rng?: RNG\n    ): TRet<OPRFBlindEvalBatch>;\n\n    /**\n     * (Client-side) The final step. The client verifies the server's proof, and if valid,\n     * unblinds the result to compute the final VOPRF output.\n     * @param input - The original private input.\n     * @param blind - The secret scalar from the `blind` step.\n     * @param evaluated - The evaluated element from the server.\n     * @param blinded - The blinded element sent to the server (needed for proof verification).\n     * @param publicKey - The server's public key against which the proof is verified.\n     * @param proof - The DLEQ proof from the server.\n     * @returns The final VOPRF output.\n     * @throws If the proof verification fails. {@link Error}\n     */\n    finalize(\n      input: TArg<Bytes>,\n      blind: TArg<ScalarBytes>,\n      evaluated: TArg<PointBytes>,\n      blinded: TArg<PointBytes>,\n      publicKey: TArg<PointBytes>,\n      proof: TArg<Bytes>\n    ): TRet<Bytes>;\n\n    /**\n     * (Client-side) The batch-aware version of `finalize`. It verifies a single batch proof\n     * against a list of corresponding inputs and outputs.\n     * @param items - An array of objects, each containing the parameters for a single finalization.\n     * @param publicKey - The server's public key.\n     * @param proof - The single DLEQ proof for the entire batch.\n     * @returns An array of final VOPRF outputs, one for each item in the input.\n     * @throws If the proof verification fails. {@link Error}\n     */\n    finalizeBatch(\n      items: TArg<OPRFFinalizeItem[]>,\n      publicKey: TArg<PointBytes>,\n      proof: TArg<Bytes>\n    ): TRet<Bytes[]>;\n  };\n\n  /**\n   * A factory for the Partially Oblivious Pseudorandom Function (POPRF) mode (mode 0x02).\n   * This mode extends VOPRF to include a public `info` parameter, known to both client and\n   * server, which is cryptographically bound to the final output.\n   * This is useful for domain separation at the application level.\n   * @param info - A public byte string to be mixed into the computation.\n   * @returns An object with the POPRF protocol functions.\n   */\n  readonly poprf: (info: TArg<Bytes>) => {\n    /** (Server-side) Generates a key pair for the POPRF mode. */\n    generateKeyPair(): TRet<OPRFKeys>;\n    /** (Server-side) Deterministically derives a key pair for the POPRF mode. */\n    deriveKeyPair(seed: TArg<Bytes>, keyInfo: TArg<Bytes>): TRet<OPRFKeys>;\n\n    /**\n     * (Client-side) Blinds the client's private input and computes the \"tweaked key\".\n     * The tweaked key is a public value derived from the server's public key and the public `info`.\n     * @param input - The client's private input.\n     * @param publicKey - The server's public key.\n     * @param rng - An optional cryptographically secure random number generator.\n     * @returns The `blind`, `blinded` element, and the `tweakedKey`\n     *   the client uses for verification.\n     */\n    blind(input: TArg<Bytes>, publicKey: TArg<PointBytes>, rng?: RNG): TRet<OPRFBlindTweaked>;\n\n    /**\n     * (Server-side) Evaluates the blinded element using a key derived from\n     * its secret key and the public `info`.\n     * It generates a DLEQ proof against the tweaked key.\n     * @param secretKey - The server's private key.\n     * @param blinded - The blinded element from the client.\n     * @param rng - An optional RNG for the proof.\n     * @returns The evaluated element and a proof of correct computation.\n     */\n    blindEvaluate(\n      secretKey: TArg<ScalarBytes>,\n      blinded: TArg<PointBytes>,\n      rng?: RNG\n    ): TRet<OPRFBlindEval>;\n\n    /**\n     * (Server-side) A batch-aware version of `blindEvaluate` for the POPRF mode.\n     * @param secretKey - The server's private key.\n     * @param blinded - An array of blinded elements.\n     * @param rng - An optional RNG for the proof.\n     * @returns An array of evaluated elements and a single proof for the batch.\n     */\n    blindEvaluateBatch(\n      secretKey: TArg<ScalarBytes>,\n      blinded: TArg<PointBytes[]>,\n      rng: RNG\n    ): TRet<OPRFBlindEvalBatch>;\n\n    /**\n     * (Client-side) A batch-aware version of `finalize` for the POPRF mode.\n     * It verifies the proof against the tweaked key.\n     * @param items - An array containing the parameters for each finalization.\n     * @param proof - The single DLEQ proof for the batch.\n     * @param tweakedKey - The tweaked key corresponding to the proof.\n     *   All items must share the same `info` and `publicKey`.\n     * @returns An array of final POPRF outputs.\n     * @throws If proof verification fails. {@link Error}\n     */\n    finalizeBatch(\n      items: TArg<OPRFFinalizeItem[]>,\n      proof: TArg<Bytes>,\n      tweakedKey: TArg<PointBytes>\n    ): TRet<Bytes[]>;\n\n    /**\n     * (Client-side) Finalizes the POPRF protocol. It verifies the server's proof against the\n     * `tweakedKey` computed in the `blind` step. The final output is bound to the public `info`.\n     * @param input - The original private input.\n     * @param blind - The secret scalar.\n     * @param evaluated - The evaluated element from the server.\n     * @param blinded - The blinded element sent to the server.\n     * @param proof - The DLEQ proof from the server.\n     * @param tweakedKey - The public tweaked key computed by the client during the `blind` step.\n     * @returns The final POPRF output.\n     * @throws If proof verification fails. {@link Error}\n     */\n    finalize(\n      input: TArg<Bytes>,\n      blind: TArg<ScalarBytes>,\n      evaluated: TArg<PointBytes>,\n      blinded: TArg<PointBytes>,\n      proof: TArg<Bytes>,\n      tweakedKey: TArg<PointBytes>\n    ): TRet<Bytes>;\n\n    /**\n     * A non-interactive evaluation function for an entity that knows all inputs.\n     * Computes the final POPRF output directly. Useful for testing or specific applications\n     * where the server needs to compute the output for a known input.\n     * @param secretKey - The server's private key.\n     * @param input - The client's private input.\n     * @returns The final POPRF output.\n     */\n    evaluate(secretKey: TArg<ScalarBytes>, input: TArg<Bytes>): TRet<Bytes>;\n  };\n};\n\n// welcome to generic hell\n/**\n * @param opts - OPRF ciphersuite options. See {@link OPRFOpts}.\n * @returns OPRF helper namespace.\n * @example\n * Instantiate an OPRF suite from curve-specific hashing hooks.\n *\n * ```ts\n * import { createOPRF } from '@noble/curves/abstract/oprf.js';\n * import { p256, p256_hasher } from '@noble/curves/nist.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const oprf = createOPRF({\n *   name: 'P256-SHA256',\n *   Point: p256.Point,\n *   hash: sha256,\n *   hashToGroup: p256_hasher.hashToCurve,\n *   hashToScalar: p256_hasher.hashToScalar,\n * });\n * const keys = oprf.oprf.generateKeyPair();\n * ```\n */\nexport function createOPRF<P extends CurvePoint<any, P>>(opts: OPRFOpts<P>): TRet<OPRF> {\n  validateObject(opts, {\n    name: 'string',\n    hash: 'function',\n    hashToScalar: 'function',\n    hashToGroup: 'function',\n  });\n  // Cheap constructor-surface sanity check only: this verifies the generic static hooks/fields that\n  // OPRF consumes, but it does not certify point semantics like BASE/ZERO correctness.\n  validatePointCons(opts.Point);\n  const { name, Point, hash } = opts;\n  const { Fn } = Point;\n\n  const hashToGroup = (msg: TArg<Uint8Array>, ctx: TArg<Uint8Array>) =>\n    opts.hashToGroup(msg, {\n      DST: concatBytes(asciiToBytes('HashToGroup-'), ctx),\n    }) as P;\n  const hashToScalarPrefixed = (msg: TArg<Uint8Array>, ctx: TArg<Uint8Array>) =>\n    opts.hashToScalar(msg, { DST: concatBytes(_DST_scalarBytes, ctx) });\n  const randomScalar = (rng: RNG = randomBytes) => {\n    // RFC 9497 \u00A72.1 defines RandomScalar as nonzero; blind inversion and generated public keys\n    // both rely on keeping this helper in the `1..n-1` range.\n    const t = mapHashToField(rng(getMinHashLength(Fn.ORDER)), Fn.ORDER, Fn.isLE);\n    // We cannot use Fn.fromBytes here, because field\n    // can have different number of bytes (like ed448)\n    return Fn.isLE ? bytesToNumberLE(t) : bytesToNumberBE(t);\n  };\n\n  const msm = (points: P[], scalars: bigint[]) => pippenger(Point, points, scalars);\n\n  const getCtx = (mode: number) =>\n    concatBytes(asciiToBytes('OPRFV1-'), new Uint8Array([mode]), asciiToBytes('-' + name));\n  const ctxOPRF = getCtx(0x00);\n  const ctxVOPRF = getCtx(0x01);\n  const ctxPOPRF = getCtx(0x02);\n\n  function encode(...args: TArg<(Uint8Array | number | string)[]>): TRet<Bytes> {\n    const res = [];\n    for (const a of args) {\n      if (typeof a === 'number') res.push(numberToBytesBE(a, 2));\n      else if (typeof a === 'string') res.push(asciiToBytes(a));\n      else {\n        abytes(a);\n        res.push(numberToBytesBE(a.length, 2), a);\n      }\n    }\n    // No wipe here, since will modify actual bytes\n    return concatBytes(...res) as TRet<Bytes>;\n  }\n  const inputBytes = (title: string, bytes: TArg<Uint8Array>) => {\n    abytes(bytes, undefined, title);\n    // RFC 9497 \u00A71.2 limits PrivateInput/PublicInput to 2^16 - 1 bytes because these values are\n    // length-prefixed with two bytes before use throughout the protocol.\n    if (bytes.length > 0xffff)\n      throw new Error(\n        `\"${title}\" expected Uint8Array of length <= 65535, got length=${bytes.length}`\n      );\n    return bytes;\n  };\n  const hashInput = (...bytes: TArg<Uint8Array[]>): TRet<Bytes> =>\n    hash(encode(...bytes, 'Finalize')) as TRet<Bytes>;\n\n  function getTranscripts(B: P, C: P[], D: P[], ctx: TArg<Bytes>) {\n    const Bm = B.toBytes();\n    const seed = hash(encode(Bm, concatBytes(asciiToBytes('Seed-'), ctx)));\n    const res: bigint[] = [];\n    for (let i = 0; i < C.length; i++) {\n      const Ci = C[i].toBytes();\n      const Di = D[i].toBytes();\n      const di = hashToScalarPrefixed(encode(seed, i, Ci, Di, 'Composite'), ctx);\n      res.push(di);\n    }\n    return res;\n  }\n\n  function computeComposites(B: P, C: P[], D: P[], ctx: TArg<Bytes>) {\n    const T = getTranscripts(B, C, D, ctx);\n    const M = msm(C, T);\n    const Z = msm(D, T);\n    return { M, Z };\n  }\n\n  function computeCompositesFast(\n    k: bigint,\n    B: P,\n    C: P[],\n    D: P[],\n    ctx: TArg<Bytes>\n  ): { M: P; Z: P } {\n    const T = getTranscripts(B, C, D, ctx);\n    const M = msm(C, T);\n    // RFC 9497 \u00A72.2.1 ComputeCompositesFast derives weights from both C and D in getTranscripts(),\n    // then uses the server shortcut Z = k * M instead of a second MSM over D.\n    const Z = M.multiply(k);\n    return { M, Z };\n  }\n\n  function challengeTranscript(B: P, M: P, Z: P, t2: P, t3: P, ctx: TArg<Bytes>) {\n    const [Bm, a0, a1, a2, a3] = [B, M, Z, t2, t3].map((i) => i.toBytes());\n    return hashToScalarPrefixed(encode(Bm, a0, a1, a2, a3, 'Challenge'), ctx);\n  }\n\n  function generateProof(ctx: TArg<Bytes>, k: bigint, B: P, C: P[], D: P[], rng: RNG): TRet<Bytes> {\n    const { M, Z } = computeCompositesFast(k, B, C, D, ctx);\n    const r = randomScalar(rng);\n    const t2 = Point.BASE.multiply(r);\n    const t3 = M.multiply(r);\n    const c = challengeTranscript(B, M, Z, t2, t3, ctx);\n    const s = Fn.sub(r, Fn.mul(c, k)); // r - c*k\n    return concatBytes(...[c, s].map((i) => Fn.toBytes(i))) as TRet<Bytes>;\n  }\n\n  function verifyProof(ctx: TArg<Bytes>, B: P, C: P[], D: P[], proof: TArg<Bytes>) {\n    abytes(proof, 2 * Fn.BYTES);\n    const { M, Z } = computeComposites(B, C, D, ctx);\n    const [c, s] = [proof.subarray(0, Fn.BYTES), proof.subarray(Fn.BYTES)].map((f) =>\n      Fn.fromBytes(f)\n    );\n    const t2 = Point.BASE.multiply(s).add(B.multiply(c)); // s*G + c*B\n    const t3 = M.multiply(s).add(Z.multiply(c)); // s*M + c*Z\n    const expectedC = challengeTranscript(B, M, Z, t2, t3, ctx);\n    if (!Fn.eql(c, expectedC)) throw new Error('proof verification failed');\n  }\n\n  function generateKeyPair(): TRet<OPRFKeys> {\n    const skS = randomScalar();\n    const pkS = Point.BASE.multiply(skS);\n    return { secretKey: Fn.toBytes(skS), publicKey: pkS.toBytes() } as TRet<OPRFKeys>;\n  }\n\n  function deriveKeyPair(ctx: TArg<Bytes>, seed: TArg<Bytes>, info: TArg<Bytes>): TRet<OPRFKeys> {\n    // RFC 9497 \u00A73.2.1 defines `seed[32]`; reject other sizes here because this public API already\n    // documents a 32-byte seed instead of generic input keying material.\n    abytes(seed, 32, 'seed');\n    info = inputBytes('keyInfo', info);\n    const dst = concatBytes(asciiToBytes('DeriveKeyPair'), ctx);\n    const msg = concatBytes(seed, encode(info), Uint8Array.of(0));\n    for (let counter = 0; counter <= 255; counter++) {\n      msg[msg.length - 1] = counter;\n      const skS = opts.hashToScalar(msg, { DST: dst });\n      if (Fn.is0(skS)) continue; // should not happen\n      return {\n        secretKey: Fn.toBytes(skS),\n        publicKey: Point.BASE.multiply(skS).toBytes(),\n      } as TRet<OPRFKeys>;\n    }\n    throw new Error('Cannot derive key');\n  }\n  const wirePoint = (label: string, bytes: TArg<Uint8Array>) => {\n    const point = Point.fromBytes(bytes);\n    // RFC 9497 \u00A73.3 says applications MUST reject group-identity Elements received over the wire\n    // after deserialization, even if the suite decoder itself accepts the identity encoding.\n    if (point.equals(Point.ZERO)) throw new Error(label + ' point at infinity');\n    return point;\n  };\n  function blind(\n    ctx: TArg<Bytes>,\n    input: TArg<Uint8Array>,\n    rng: RNG = randomBytes\n  ): TRet<OPRFBlind> {\n    input = inputBytes('input', input);\n    const blind = randomScalar(rng);\n    const inputPoint = hashToGroup(input, ctx);\n    if (inputPoint.equals(Point.ZERO)) throw new Error('Input point at infinity');\n    const blinded = inputPoint.multiply(blind);\n    return { blind: Fn.toBytes(blind), blinded: blinded.toBytes() } as TRet<OPRFBlind>;\n  }\n  function evaluate(\n    ctx: TArg<Bytes>,\n    secretKey: TArg<ScalarBytes>,\n    input: TArg<Bytes>\n  ): TRet<Bytes> {\n    input = inputBytes('input', input);\n    const skS = Fn.fromBytes(secretKey);\n    const inputPoint = hashToGroup(input, ctx);\n    if (inputPoint.equals(Point.ZERO)) throw new Error('Input point at infinity');\n    const unblinded = inputPoint.multiply(skS).toBytes();\n    return hashInput(input, unblinded);\n  }\n  const oprf = Object.freeze({\n    generateKeyPair,\n    deriveKeyPair: (seed: TArg<Bytes>, keyInfo: TArg<Bytes>) =>\n      deriveKeyPair(ctxOPRF, seed, keyInfo),\n    blind: (input: TArg<Bytes>, rng: RNG = randomBytes) => blind(ctxOPRF, input, rng),\n    blindEvaluate(secretKey: TArg<ScalarBytes>, blindedPoint: TArg<PointBytes>): TRet<PointBytes> {\n      const skS = Fn.fromBytes(secretKey);\n      const elm = wirePoint('blinded', blindedPoint);\n      return elm.multiply(skS).toBytes() as TRet<PointBytes>;\n    },\n    finalize(\n      input: TArg<Bytes>,\n      blindBytes: TArg<ScalarBytes>,\n      evaluatedBytes: TArg<PointBytes>\n    ): TRet<Bytes> {\n      input = inputBytes('input', input);\n      const blind = Fn.fromBytes(blindBytes);\n      const evalPoint = wirePoint('evaluated', evaluatedBytes);\n      const unblinded = evalPoint.multiply(Fn.inv(blind)).toBytes();\n      return hashInput(input, unblinded);\n    },\n    evaluate: (secretKey: TArg<ScalarBytes>, input: TArg<Bytes>) =>\n      evaluate(ctxOPRF, secretKey, input),\n  });\n\n  const voprf = Object.freeze({\n    generateKeyPair,\n    deriveKeyPair: (seed: TArg<Bytes>, keyInfo: TArg<Bytes>) =>\n      deriveKeyPair(ctxVOPRF, seed, keyInfo),\n    blind: (input: TArg<Bytes>, rng: RNG = randomBytes) => blind(ctxVOPRF, input, rng),\n    blindEvaluateBatch(\n      secretKey: TArg<ScalarBytes>,\n      publicKey: TArg<PointBytes>,\n      blinded: TArg<PointBytes[]>,\n      rng: RNG = randomBytes\n    ): TRet<OPRFBlindEvalBatch> {\n      if (!Array.isArray(blinded)) throw new Error('expected array');\n      const skS = Fn.fromBytes(secretKey);\n      const pkS = wirePoint('public key', publicKey);\n      const blindedPoints = blinded.map((i) => wirePoint('blinded', i));\n      const evaluated = blindedPoints.map((i) => i.multiply(skS));\n      const proof = generateProof(ctxVOPRF, skS, pkS, blindedPoints, evaluated, rng);\n      return { evaluated: evaluated.map((i) => i.toBytes()), proof } as TRet<OPRFBlindEvalBatch>;\n    },\n    blindEvaluate(\n      secretKey: TArg<ScalarBytes>,\n      publicKey: TArg<PointBytes>,\n      blinded: TArg<PointBytes>,\n      rng: RNG = randomBytes\n    ): TRet<OPRFBlindEval> {\n      const res = this.blindEvaluateBatch(secretKey, publicKey, [blinded], rng);\n      return { evaluated: res.evaluated[0], proof: res.proof } as TRet<OPRFBlindEval>;\n    },\n    finalizeBatch(\n      items: TArg<OPRFFinalizeItem[]>,\n      publicKey: TArg<PointBytes>,\n      proof: TArg<Bytes>\n    ): TRet<Bytes[]> {\n      if (!Array.isArray(items)) throw new Error('expected array');\n      const pkS = wirePoint('public key', publicKey);\n      const blindedPoints = items.map((i) => wirePoint('blinded', i.blinded));\n      const evalPoints = items.map((i) => wirePoint('evaluated', i.evaluated));\n      verifyProof(ctxVOPRF, pkS, blindedPoints, evalPoints, proof);\n      return items.map((i) => oprf.finalize(i.input, i.blind, i.evaluated)) as TRet<Bytes[]>;\n    },\n    finalize(\n      input: TArg<Bytes>,\n      blind: TArg<ScalarBytes>,\n      evaluated: TArg<PointBytes>,\n      blinded: TArg<PointBytes>,\n      publicKey: TArg<PointBytes>,\n      proof: TArg<Bytes>\n    ): TRet<Bytes> {\n      return this.finalizeBatch([{ input, blind, evaluated, blinded }], publicKey, proof)[0];\n    },\n    evaluate: (secretKey: TArg<ScalarBytes>, input: TArg<Bytes>) =>\n      evaluate(ctxVOPRF, secretKey, input),\n  });\n  // NOTE: info is domain separation\n  const poprf = (info: TArg<Bytes>) => {\n    info = inputBytes('info', info);\n    const m = hashToScalarPrefixed(encode('Info', info), ctxPOPRF);\n    const T = Point.BASE.multiply(m);\n    return Object.freeze({\n      generateKeyPair,\n      deriveKeyPair: (seed: TArg<Bytes>, keyInfo: TArg<Bytes>) =>\n        deriveKeyPair(ctxPOPRF, seed, keyInfo),\n      blind(\n        input: TArg<Bytes>,\n        publicKey: TArg<PointBytes>,\n        rng: RNG = randomBytes\n      ): TRet<OPRFBlindTweaked> {\n        input = inputBytes('input', input);\n        const pkS = wirePoint('public key', publicKey);\n        const tweakedKey = T.add(pkS);\n        if (tweakedKey.equals(Point.ZERO)) throw new Error('tweakedKey point at infinity');\n        const blind = randomScalar(rng);\n        const inputPoint = hashToGroup(input, ctxPOPRF);\n        if (inputPoint.equals(Point.ZERO)) throw new Error('Input point at infinity');\n        const blindedPoint = inputPoint.multiply(blind);\n        return {\n          blind: Fn.toBytes(blind),\n          blinded: blindedPoint.toBytes(),\n          tweakedKey: tweakedKey.toBytes(),\n        } as TRet<OPRFBlindTweaked>;\n      },\n      blindEvaluateBatch(\n        secretKey: TArg<ScalarBytes>,\n        blinded: TArg<PointBytes[]>,\n        rng: RNG = randomBytes\n      ): TRet<OPRFBlindEvalBatch> {\n        if (!Array.isArray(blinded)) throw new Error('expected array');\n        const skS = Fn.fromBytes(secretKey);\n        const t = Fn.add(skS, m);\n        // \"Hence, this error can be a signal for the server to replace its\n        // private key\". We throw inside; this should be impossible.\n        const invT = Fn.inv(t);\n        const blindedPoints = blinded.map((i) => wirePoint('blinded', i));\n        const evalPoints = blindedPoints.map((i) => i.multiply(invT));\n        const tweakedKey = Point.BASE.multiply(t);\n        const proof = generateProof(ctxPOPRF, t, tweakedKey, evalPoints, blindedPoints, rng);\n        return { evaluated: evalPoints.map((i) => i.toBytes()), proof } as TRet<OPRFBlindEvalBatch>;\n      },\n      blindEvaluate(\n        secretKey: TArg<ScalarBytes>,\n        blinded: TArg<PointBytes>,\n        rng: RNG = randomBytes\n      ): TRet<OPRFBlindEval> {\n        const res = this.blindEvaluateBatch(secretKey, [blinded], rng);\n        return { evaluated: res.evaluated[0], proof: res.proof } as TRet<OPRFBlindEval>;\n      },\n      finalizeBatch(\n        items: TArg<OPRFFinalizeItem[]>,\n        proof: TArg<Bytes>,\n        tweakedKey: TArg<PointBytes>\n      ): TRet<Bytes[]> {\n        if (!Array.isArray(items)) throw new Error('expected array');\n        const inputs = items.map((i) => inputBytes('input', i.input));\n        const evalPoints = items.map((i) => wirePoint('evaluated', i.evaluated));\n        verifyProof(\n          ctxPOPRF,\n          wirePoint('tweakedKey', tweakedKey),\n          evalPoints,\n          items.map((i) => wirePoint('blinded', i.blinded)),\n          proof\n        );\n        return items.map((i, j) => {\n          const blind = Fn.fromBytes(i.blind);\n          const point = evalPoints[j].multiply(Fn.inv(blind)).toBytes();\n          return hashInput(inputs[j], info, point);\n        }) as TRet<Bytes[]>;\n      },\n      finalize(\n        input: TArg<Bytes>,\n        blind: TArg<ScalarBytes>,\n        evaluated: TArg<PointBytes>,\n        blinded: TArg<PointBytes>,\n        proof: TArg<Bytes>,\n        tweakedKey: TArg<PointBytes>\n      ): TRet<Bytes> {\n        return this.finalizeBatch([{ input, blind, evaluated, blinded }], proof, tweakedKey)[0];\n      },\n      evaluate(secretKey: TArg<ScalarBytes>, input: TArg<Bytes>): TRet<Bytes> {\n        input = inputBytes('input', input);\n        const skS = Fn.fromBytes(secretKey);\n        const inputPoint = hashToGroup(input, ctxPOPRF);\n        if (inputPoint.equals(Point.ZERO)) throw new Error('Input point at infinity');\n        const t = Fn.add(skS, m);\n        const invT = Fn.inv(t);\n        const unblinded = inputPoint.multiply(invT).toBytes();\n        return hashInput(input, info, unblinded);\n      },\n    });\n  };\n  const res = { name, oprf, voprf, poprf, __tests: Object.freeze({ Fn }) };\n  return Object.freeze(res) as TRet<OPRF>;\n}\n", "/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport {\n  abytes,\n  aexists,\n  ahash,\n  aoutput,\n  clean,\n  type CHash,\n  type Hash,\n  type TArg,\n  type TRet,\n} from './utils.ts';\n\n/**\n * Internal class for HMAC.\n * Accepts any byte key, although RFC 2104 \u00A73 recommends keys at least\n * `HashLen` bytes long.\n */\nexport class _HMAC<T extends Hash<T>> implements Hash<_HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  canXOF = false;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: TArg<CHash>, key: TArg<Uint8Array>) {\n    ahash(hash);\n    abytes(key, undefined, 'key');\n    this.iHash = hash.create() as T;\n    if (typeof this.iHash.update !== 'function')\n      throw new Error('Expected instance of class which extends utils.Hash');\n    this.blockLen = this.iHash.blockLen;\n    this.outputLen = this.iHash.outputLen;\n    const blockLen = this.blockLen;\n    const pad = new Uint8Array(blockLen);\n    // blockLen can be bigger than outputLen\n    pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n    this.iHash.update(pad);\n    // By doing update (processing of the first block) of the outer hash here,\n    // we can re-use it between multiple calls via clone.\n    this.oHash = hash.create() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    clean(pad);\n  }\n  update(buf: TArg<Uint8Array>): this {\n    aexists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: TArg<Uint8Array>): void {\n    aexists(this);\n    aoutput(out, this);\n    this.finished = true;\n    const buf = out.subarray(0, this.outputLen);\n    // Reuse the first outputLen bytes for the inner digest; the outer hash consumes them before\n    // overwriting that same prefix with the final tag, leaving any oversized tail untouched.\n    this.iHash.digestInto(buf);\n    this.oHash.update(buf);\n    this.oHash.digestInto(buf);\n    this.destroy();\n  }\n  digest(): TRet<Uint8Array> {\n    const out = new Uint8Array(this.oHash.outputLen);\n    this.digestInto(out);\n    return out as TRet<Uint8Array>;\n  }\n  _cloneInto(to?: _HMAC<T>): _HMAC<T> {\n    // Create new instance without calling constructor since the key\n    // is already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    to.blockLen = blockLen;\n    to.outputLen = outputLen;\n    to.oHash = oHash._cloneInto(to.oHash);\n    to.iHash = iHash._cloneInto(to.iHash);\n    return to;\n  }\n  clone(): _HMAC<T> {\n    return this._cloneInto();\n  }\n  destroy(): void {\n    this.destroyed = true;\n    this.oHash.destroy();\n    this.iHash.destroy();\n  }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - authentication key bytes\n * @param message - message bytes to authenticate\n * @returns Authentication tag bytes.\n * @example\n * Compute an RFC 2104 HMAC.\n * ```ts\n * import { hmac } from '@noble/hashes/hmac.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const mac = hmac(sha256, new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6]));\n * ```\n */\ntype HmacFn = {\n  (hash: TArg<CHash>, key: TArg<Uint8Array>, message: TArg<Uint8Array>): TRet<Uint8Array>;\n  create(hash: TArg<CHash>, key: TArg<Uint8Array>): TRet<_HMAC<any>>;\n};\nexport const hmac: TRet<HmacFn> = /* @__PURE__ */ (() => {\n  const hmac_ = ((\n    hash: TArg<CHash>,\n    key: TArg<Uint8Array>,\n    message: TArg<Uint8Array>\n  ): TRet<Uint8Array> => new _HMAC<any>(hash, key).update(message).digest()) as TRet<HmacFn>;\n  hmac_.create = (hash: TArg<CHash>, key: TArg<Uint8Array>): TRet<_HMAC<any>> =>\n    new _HMAC<any>(hash, key) as TRet<_HMAC<any>>;\n  return hmac_;\n})();\n", "/**\n * Short Weierstrass curve methods. The formula is: y\u00B2 = x\u00B3 + ax + b.\n *\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance\n * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create\n * unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * @todo https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac as nobleHmac } from '@noble/hashes/hmac.js';\nimport { ahash } from '@noble/hashes/utils.js';\nimport {\n  abignumber,\n  abool,\n  abytes,\n  aInRange,\n  asafenumber,\n  bitLen,\n  bitMask,\n  bytesToHex,\n  bytesToNumberBE,\n  concatBytes,\n  createHmacDrbg,\n  hexToBytes,\n  isBytes,\n  numberToHexUnpadded,\n  validateObject,\n  randomBytes as wcRandomBytes,\n  type CHash,\n  type HmacFn,\n  type Signer,\n  type TArg,\n  type TRet,\n} from '../utils.ts';\nimport {\n  createCurveFields,\n  createKeygen,\n  mulEndoUnsafe,\n  negateCt,\n  normalizeZ,\n  wNAF,\n  type AffinePoint,\n  type CurveLengths,\n  type CurvePoint,\n  type CurvePointCons,\n} from './curve.ts';\nimport {\n  FpInvertBatch,\n  FpIsSquare,\n  getMinHashLength,\n  mapHashToField,\n  validateField,\n  type IField,\n} from './modular.ts';\n\n/** Shared affine point shape used by Weierstrass helpers. */\nexport type { AffinePoint };\n\ntype EndoBasis = [[bigint, bigint], [bigint, bigint]];\n/**\n * When Weierstrass curve has `a=0`, it becomes Koblitz curve.\n * Koblitz curves allow using **efficiently-computable GLV endomorphism \u03C8**.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n *\n * Endomorphism consists of beta, lambda and splitScalar:\n *\n * 1. GLV endomorphism \u03C8 transforms a point: `P = (x, y) \u21A6 \u03C8(P) = (\u03B2\u00B7x mod p, y)`\n * 2. GLV scalar decomposition transforms a scalar: `k \u2261 k\u2081 + k\u2082\u00B7\u03BB (mod n)`\n * 3. Then these are combined: `k\u00B7P = k\u2081\u00B7P + k\u2082\u00B7\u03C8(P)`\n * 4. Two 128-bit point-by-scalar multiplications + one point addition is faster than\n *    one 256-bit multiplication.\n *\n * where\n * * beta: \u03B2 \u2208 F\u209A with \u03B2\u00B3 = 1, \u03B2 \u2260 1\n * * lambda: \u03BB \u2208 F\u2099 with \u03BB\u00B3 = 1, \u03BB \u2260 1\n * * splitScalar decomposes k \u21A6 k\u2081, k\u2082, by using reduced basis vectors.\n *   Gauss lattice reduction calculates them from initial basis vectors `(n, 0), (-\u03BB, 0)`\n *\n * Check out `test/misc/endomorphism.js` and\n * {@link https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066 | this endomorphism gist}.\n */\nexport type EndomorphismOpts = {\n  /** Cube root of unity used by the GLV endomorphism. */\n  beta: bigint;\n  /** Reduced lattice basis used for scalar splitting. */\n  basises?: EndoBasis;\n  /**\n   * Optional custom scalar-splitting helper.\n   * Receives one scalar and returns two half-sized scalar components.\n   */\n  splitScalar?: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\n// We construct the basis so `den` is always positive and equals `n`,\n// but the `num` sign depends on the basis, not on the secret value.\n// Exact half-way cases round away from zero, which keeps the split symmetric\n// around the reduced-basis boundaries used by endomorphism decomposition.\nconst divNearest = (num: bigint, den: bigint) => (num + (num >= 0 ? den : -den) / _2n) / den;\n\n/** Two half-sized scalar components returned by endomorphism splitting. */\nexport type ScalarEndoParts = {\n  /** Whether the first split scalar should be negated. */\n  k1neg: boolean;\n  /** Absolute value of the first split scalar. */\n  k1: bigint;\n  /** Whether the second split scalar should be negated. */\n  k2neg: boolean;\n  /** Absolute value of the second split scalar. */\n  k2: bigint;\n};\n\n/** Splits scalar for GLV endomorphism. */\nexport function _splitEndoScalar(k: bigint, basis: EndoBasis, n: bigint): ScalarEndoParts {\n  // Split scalar into two such that part is ~half bits: `abs(part) < sqrt(N)`\n  // Since part can be negative, we need to do this on point.\n  // Callers must provide a reduced GLV basis whose vectors satisfy\n  // `a + b * lambda \u2261 0 (mod n)`; this helper only sees the basis and `n`.\n  // Reject unreduced scalars instead of silently treating them mod n.\n  aInRange('scalar', k, _0n, n);\n  // TODO: verifyScalar function which consumes lambda\n  const [[a1, b1], [a2, b2]] = basis;\n  const c1 = divNearest(b2 * k, n);\n  const c2 = divNearest(-b1 * k, n);\n  // |k1|/|k2| is < sqrt(N), but can be negative.\n  // If we do `k1 mod N`, we'll get big scalar (`> sqrt(N)`): so, we do cheaper negation instead.\n  let k1 = k - c1 * a1 - c2 * a2;\n  let k2 = -c1 * b1 - c2 * b2;\n  const k1neg = k1 < _0n;\n  const k2neg = k2 < _0n;\n  if (k1neg) k1 = -k1;\n  if (k2neg) k2 = -k2;\n  // Double check that resulting scalar less than half bits of N: otherwise wNAF will fail.\n  // This should only happen on wrong bases.\n  // Also, the math inside is complex enough that this guard is worth keeping.\n  const MAX_NUM = bitMask(Math.ceil(bitLen(n) / 2)) + _1n; // Half bits of N\n  if (k1 < _0n || k1 >= MAX_NUM || k2 < _0n || k2 >= MAX_NUM) {\n    throw new Error('splitScalar (endomorphism): failed for k');\n  }\n  return { k1neg, k1, k2neg, k2 };\n}\n\n/**\n * Option to enable hedged signatures with improved security.\n *\n * * Randomly generated k is bad, because broken CSPRNG would leak private keys.\n * * Deterministic k (RFC6979) is better; but is suspectible to fault attacks.\n *\n * We allow using technique described in RFC6979 3.6: additional k', a.k.a. adding randomness\n * to deterministic sig. If CSPRNG is broken & randomness is weak, it would STILL be as secure\n * as ordinary sig without ExtraEntropy.\n *\n * * `true` means \"fetch data, from CSPRNG, incorporate it into k generation\"\n * * `false` means \"disable extra entropy, use purely deterministic k\"\n * * `Uint8Array` passed means \"incorporate following data into k generation\"\n *\n * See {@link https://paulmillr.com/posts/deterministic-signatures/ | deterministic signatures}.\n */\nexport type ECDSAExtraEntropy = boolean | Uint8Array;\n/**\n * - `compact` is the default format\n * - `recovered` is the same as compact, but with an extra byte indicating recovery byte\n * - `der` is ASN.1 DER encoding\n */\nexport type ECDSASignatureFormat = 'compact' | 'recovered' | 'der';\n/**\n * - `prehash`: (default: true) indicates whether to do sha256(message).\n *   When a custom hash is used, it must be set to `false`.\n */\nexport type ECDSARecoverOpts = {\n  /** Whether to hash the message before signature recovery. */\n  prehash?: boolean;\n};\n/**\n * - `prehash`: (default: true) indicates whether to do sha256(message).\n *   When a custom hash is used, it must be set to `false`.\n * - `lowS`: (default: true) prohibits signatures with `sig.s >= CURVE.n/2n`.\n *   Compatible with BTC/ETH. Setting `lowS: false` allows to create malleable signatures,\n *   which is default openssl behavior.\n *   Non-malleable signatures can still be successfully verified in openssl.\n * - `format`: (default: 'compact') 'compact' or 'recovered' with recovery byte\n */\nexport type ECDSAVerifyOpts = {\n  /** Whether to hash the message before verification. */\n  prehash?: boolean;\n  /** Whether to reject high-S signatures. */\n  lowS?: boolean;\n  /** Signature encoding to accept. */\n  format?: ECDSASignatureFormat;\n};\n/**\n * - `prehash`: (default: true) indicates whether to do sha256(message).\n *   When a custom hash is used, it must be set to `false`.\n * - `lowS`: (default: true) prohibits signatures with `sig.s >= CURVE.n/2n`.\n *   Compatible with BTC/ETH. Setting `lowS: false` allows to create malleable signatures,\n *   which is default openssl behavior.\n *   Non-malleable signatures can still be successfully verified in openssl.\n * - `format`: (default: 'compact') 'compact' or 'recovered' with recovery byte\n * - `extraEntropy`: (default: false) creates signatures with increased\n *   security, see {@link ECDSAExtraEntropy}\n */\nexport type ECDSASignOpts = {\n  /** Whether to hash the message before signing. */\n  prehash?: boolean;\n  /** Whether to normalize signatures into the low-S half-order. */\n  lowS?: boolean;\n  /** Signature encoding to produce. */\n  format?: ECDSASignatureFormat;\n  /** Optional hedging input for deterministic k generation. */\n  extraEntropy?: ECDSAExtraEntropy;\n};\n\nfunction validateSigFormat(format: string): ECDSASignatureFormat {\n  if (!['compact', 'recovered', 'der'].includes(format))\n    throw new Error('Signature format must be \"compact\", \"recovered\", or \"der\"');\n  return format as ECDSASignatureFormat;\n}\n\nfunction validateSigOpts<T extends ECDSASignOpts, D extends Required<ECDSASignOpts>>(\n  opts: T,\n  def: D\n): D {\n  validateObject(opts);\n  const optsn = {} as D;\n  // Normalize only the declared option subset from `def`; unknown keys are\n  // intentionally ignored so shared / superset option bags stay valid here too.\n  // `extraEntropy` stays an opaque payload until the signing path consumes it.\n  for (let optName of Object.keys(def) as (keyof D)[]) {\n    // @ts-ignore\n    optsn[optName] = opts[optName] === undefined ? def[optName] : opts[optName];\n  }\n  abool(optsn.lowS!, 'lowS');\n  abool(optsn.prehash!, 'prehash');\n  if (optsn.format !== undefined) validateSigFormat(optsn.format);\n  return optsn;\n}\n\n/** Projective XYZ point used by short Weierstrass curves. */\nexport interface WeierstrassPoint<T> extends CurvePoint<T, WeierstrassPoint<T>> {\n  /** projective X coordinate. Different from affine x. */\n  readonly X: T;\n  /** projective Y coordinate. Different from affine y. */\n  readonly Y: T;\n  /** projective z coordinate */\n  readonly Z: T;\n  /** affine x coordinate. Different from projective X. */\n  get x(): T;\n  /** affine y coordinate. Different from projective Y. */\n  get y(): T;\n  /**\n   * Encode the point into compressed or uncompressed SEC1 bytes.\n   * @param isCompressed - Whether to use the compressed form.\n   * @returns Encoded point bytes.\n   */\n  toBytes(isCompressed?: boolean): TRet<Uint8Array>;\n  /**\n   * Encode the point into compressed or uncompressed SEC1 hex.\n   * @param isCompressed - Whether to use the compressed form.\n   * @returns Encoded point hex.\n   */\n  toHex(isCompressed?: boolean): string;\n}\n\n/** Constructor and metadata helpers for Weierstrass points. */\nexport interface WeierstrassPointCons<T> extends CurvePointCons<WeierstrassPoint<T>> {\n  /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n  new (X: T, Y: T, Z: T): WeierstrassPoint<T>;\n  /**\n   * Return the curve parameters captured by this point constructor.\n   * @returns Curve parameters.\n   */\n  CURVE(): WeierstrassOpts<T>;\n}\n\n/**\n * Weierstrass curve options.\n *\n * * p: prime characteristic (order) of finite field, in which arithmetics is done\n * * n: order of prime subgroup a.k.a total amount of valid curve points\n * * h: cofactor, usually 1. h*n is group order; n is subgroup order\n * * a: formula param, must be in field of p\n * * b: formula param, must be in field of p\n * * Gx: x coordinate of generator point a.k.a. base point\n * * Gy: y coordinate of generator point\n */\nexport type WeierstrassOpts<T> = Readonly<{\n  /** Base-field modulus. */\n  p: bigint;\n  /** Prime subgroup order. */\n  n: bigint;\n  /** Curve cofactor. */\n  h: bigint;\n  /** Weierstrass curve parameter `a`. */\n  a: T;\n  /** Weierstrass curve parameter `b`. */\n  b: T;\n  /** Generator x coordinate. */\n  Gx: T;\n  /** Generator y coordinate. */\n  Gy: T;\n}>;\n\n/**\n * Optional helpers and overrides for a Weierstrass point constructor.\n *\n * When a cofactor != 1, there can be effective methods to:\n * 1. Determine whether a point is torsion-free\n * 2. Clear torsion component\n */\nexport type WeierstrassExtraOpts<T> = Partial<{\n  /** Optional base-field override. */\n  Fp: IField<T>;\n  /** Optional scalar-field override. */\n  Fn: IField<bigint>;\n  /** Whether the point constructor accepts infinity points. */\n  allowInfinityPoint: boolean;\n  /** Optional GLV endomorphism data. */\n  endo: EndomorphismOpts;\n  /** Optional torsion-check override. */\n  isTorsionFree: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => boolean;\n  /** Optional cofactor-clearing override. */\n  clearCofactor: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => WeierstrassPoint<T>;\n  /** Optional custom point decoder. */\n  fromBytes: (bytes: TArg<Uint8Array>) => AffinePoint<T>;\n  /** Optional custom point encoder. */\n  toBytes: (\n    c: WeierstrassPointCons<T>,\n    point: WeierstrassPoint<T>,\n    isCompressed: boolean\n  ) => TRet<Uint8Array>;\n}>;\n\n/**\n * Options for ECDSA signatures over a Weierstrass curve.\n *\n * * lowS: (default: true) whether produced or verified signatures occupy the\n *   low half of `ecdsaOpts.n`. Prevents malleability.\n * * hmac: (default: noble-hashes hmac) function, would be used to init hmac-drbg for k generation.\n * * randomBytes: (default: webcrypto os-level CSPRNG) custom method for fetching secure randomness.\n * * bits2int, bits2int_modN: used in sigs, sometimes overridden by curves. Custom hooks are\n *   treated as pure functions over validated bytes and MUST NOT mutate caller-owned buffers or\n *   closure-captured option bags. `bits2int_modN` must also return a canonical scalar in\n *   `[0..Point.Fn.ORDER-1]`.\n */\nexport type ECDSAOpts = Partial<{\n  /** Default low-S policy for this ECDSA instance. */\n  lowS: boolean;\n  /** HMAC implementation used by RFC6979 DRBG. */\n  hmac: HmacFn;\n  /** RNG override used by helper constructors. */\n  randomBytes: (bytesLength?: number) => TRet<Uint8Array>;\n  /** Hash-to-integer conversion override. */\n  bits2int: (bytes: TArg<Uint8Array>) => bigint;\n  /** Hash-to-integer-mod-n conversion override. Returns a canonical scalar in `[0..Fn.ORDER-1]`. */\n  bits2int_modN: (bytes: TArg<Uint8Array>) => bigint;\n}>;\n\n/** Elliptic Curve Diffie-Hellman helper namespace. */\nexport interface ECDH {\n  /**\n   * Generate a secret/public key pair.\n   * @param seed - Optional seed material.\n   * @returns Secret/public key pair.\n   */\n  keygen: (seed?: TArg<Uint8Array>) => { secretKey: TRet<Uint8Array>; publicKey: TRet<Uint8Array> };\n  /**\n   * Derive the public key from a secret key.\n   * @param secretKey - Secret key bytes.\n   * @param isCompressed - Whether to emit compressed SEC1 bytes.\n   * @returns Encoded public key.\n   */\n  getPublicKey: (secretKey: TArg<Uint8Array>, isCompressed?: boolean) => TRet<Uint8Array>;\n  /**\n   * Compute the shared secret point from a secret key and peer public key.\n   * @param secretKeyA - Local secret key bytes.\n   * @param publicKeyB - Peer public key bytes.\n   * @param isCompressed - Whether to emit compressed SEC1 bytes.\n   * @returns Encoded shared point.\n   */\n  getSharedSecret: (\n    secretKeyA: TArg<Uint8Array>,\n    publicKeyB: TArg<Uint8Array>,\n    isCompressed?: boolean\n  ) => TRet<Uint8Array>;\n  /** Point constructor used by this ECDH instance. */\n  Point: WeierstrassPointCons<bigint>;\n  /** Validation and random-key helpers. */\n  utils: {\n    /** Check whether a secret key has the expected encoding. */\n    isValidSecretKey: (secretKey: TArg<Uint8Array>) => boolean;\n    /** Check whether a public key decodes to a valid point. */\n    isValidPublicKey: (publicKey: TArg<Uint8Array>, isCompressed?: boolean) => boolean;\n    /** Generate a valid random secret key. */\n    randomSecretKey: (seed?: TArg<Uint8Array>) => TRet<Uint8Array>;\n  };\n  /** Byte lengths for keys and signatures exposed by this curve. */\n  lengths: CurveLengths;\n}\n\n/**\n * ECDSA interface.\n * Only supported for prime fields, not Fp2 (extension fields).\n */\nexport interface ECDSA extends ECDH {\n  /**\n   * Sign a message with the given secret key.\n   * @param message - Message bytes.\n   * @param secretKey - Secret key bytes.\n   * @param opts - Optional signing tweaks. See {@link ECDSASignOpts}.\n   * @returns Encoded signature bytes.\n   */\n  sign: (\n    message: TArg<Uint8Array>,\n    secretKey: TArg<Uint8Array>,\n    opts?: TArg<ECDSASignOpts>\n  ) => TRet<Uint8Array>;\n  /**\n   * Verify a signature against a message and public key.\n   * @param signature - Encoded signature bytes.\n   * @param message - Message bytes.\n   * @param publicKey - Encoded public key.\n   * @param opts - Optional verification tweaks. See {@link ECDSAVerifyOpts}.\n   * @returns Whether the signature is valid.\n   */\n  verify: (\n    signature: TArg<Uint8Array>,\n    message: TArg<Uint8Array>,\n    publicKey: TArg<Uint8Array>,\n    opts?: TArg<ECDSAVerifyOpts>\n  ) => boolean;\n  /**\n   * Recover the public key encoded into a recoverable signature.\n   * @param signature - Recoverable signature bytes.\n   * @param message - Message bytes.\n   * @param opts - Optional recovery tweaks. See {@link ECDSARecoverOpts}.\n   * @returns Encoded recovered public key.\n   */\n  recoverPublicKey(\n    signature: TArg<Uint8Array>,\n    message: TArg<Uint8Array>,\n    opts?: TArg<ECDSARecoverOpts>\n  ): TRet<Uint8Array>;\n  /** Signature constructor and parser helpers. */\n  Signature: ECDSASignatureCons;\n}\n/**\n * @param m - Error message.\n * @example\n * Throw a DER-specific error when signature parsing encounters invalid bytes.\n *\n * ```ts\n * new DERErr('bad der');\n * ```\n */\nexport class DERErr extends Error {\n  constructor(m = '') {\n    super(m);\n  }\n}\n/** DER helper namespace used by ECDSA signature parsing and encoding. */\nexport type IDER = {\n  // asn.1 DER encoding utils\n  /**\n   * DER-specific error constructor.\n   * @param m - Error message.\n   * @returns DER-specific error instance.\n   */\n  Err: typeof DERErr;\n  // Basic building block is TLV (Tag-Length-Value)\n  /** Low-level tag-length-value helpers used by DER encoders. */\n  _tlv: {\n    /**\n     * Encode one TLV record.\n     * @param tag - ASN.1 tag byte.\n     * @param data - Hex-encoded value payload.\n     * @returns Encoded TLV string.\n     */\n    encode: (tag: number, data: string) => string;\n    // v - value, l - left bytes (unparsed)\n    /**\n     * Decode one TLV record and return the value plus leftover bytes.\n     * @param tag - Expected ASN.1 tag byte.\n     * @param data - Remaining DER bytes.\n     * @returns Parsed value plus leftover bytes.\n     */\n    decode(tag: number, data: TArg<Uint8Array>): TRet<{ v: Uint8Array; l: Uint8Array }>;\n  };\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  /** Positive-integer DER helpers used by ECDSA signature encoding. */\n  _int: {\n    /**\n     * Encode one positive bigint as a DER INTEGER.\n     * @param num - Positive integer to encode.\n     * @returns Encoded DER INTEGER.\n     */\n    encode(num: bigint): string;\n    /**\n     * Decode one DER INTEGER into a bigint.\n     * @param data - DER INTEGER bytes.\n     * @returns Decoded bigint.\n     */\n    decode(data: TArg<Uint8Array>): bigint;\n  };\n  /**\n   * Parse a DER signature into `{ r, s }`.\n   * @param bytes - DER signature bytes.\n   * @returns Parsed signature components.\n   */\n  toSig(bytes: TArg<Uint8Array>): { r: bigint; s: bigint };\n  /**\n   * Encode `{ r, s }` as a DER signature.\n   * @param sig - Signature components.\n   * @returns DER-encoded signature hex.\n   */\n  hexFromSig(sig: { r: bigint; s: bigint }): string;\n};\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n *     [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: {@link https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/ | Let's Encrypt ASN.1 guide} and\n * {@link https://luca.ntop.org/Teaching/Appunti/asn1.html | Luca Deri's ASN.1 notes}.\n * @example\n * ASN.1 DER encoding utilities.\n *\n * ```ts\n * const der = DER.hexFromSig({ r: 1n, s: 2n });\n * ```\n */\nexport const DER: IDER = {\n  // asn.1 DER encoding utils\n  Err: DERErr,\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string): string => {\n      const { Err: E } = DER;\n      asafenumber(tag, 'tag');\n      if (tag < 0 || tag > 255) throw new E('tlv.encode: wrong tag');\n      if (typeof data !== 'string')\n        throw new TypeError('\"data\" expected string, got type=' + typeof data);\n      // Internal helper: callers hand this already-validated hex payload, so we only enforce\n      // byte alignment here instead of re-validating every nibble.\n      if (data.length & 1) throw new E('tlv.encode: unpadded data');\n      const dataLen = data.length / 2;\n      const len = numberToHexUnpadded(dataLen);\n      if ((len.length / 2) & 0b1000_0000) throw new E('tlv.encode: long form length too big');\n      // length of length with long form flag\n      const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) | 0b1000_0000) : '';\n      const t = numberToHexUnpadded(tag);\n      return t + lenLen + len + data;\n    },\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: TArg<Uint8Array>): TRet<{ v: Uint8Array; l: Uint8Array }> {\n      const { Err: E } = DER;\n      data = abytes(data, undefined, 'DER data');\n      let pos = 0;\n      if (tag < 0 || tag > 255) throw new E('tlv.encode: wrong tag');\n      if (data.length < 2 || data[pos++] !== tag) throw new E('tlv.decode: wrong tlv');\n      const first = data[pos++];\n      // First bit of first length byte is the short/long form flag.\n      const isLong = !!(first & 0b1000_0000);\n      let length = 0;\n      if (!isLong) length = first;\n      else {\n        // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n        const lenLen = first & 0b0111_1111;\n        if (!lenLen) throw new E('tlv.decode(long): indefinite length not supported');\n        // This would overflow u32 in JS.\n        if (lenLen > 4) throw new E('tlv.decode(long): byte length is too big');\n        const lengthBytes = data.subarray(pos, pos + lenLen);\n        if (lengthBytes.length !== lenLen) throw new E('tlv.decode: length bytes not complete');\n        if (lengthBytes[0] === 0) throw new E('tlv.decode(long): zero leftmost byte');\n        for (const b of lengthBytes) length = (length << 8) | b;\n        pos += lenLen;\n        if (length < 128) throw new E('tlv.decode(long): not minimal encoding');\n      }\n      const v = data.subarray(pos, pos + length);\n      if (v.length !== length) throw new E('tlv.decode: wrong value length');\n      return { v, l: data.subarray(pos + length) } as TRet<{ v: Uint8Array; l: Uint8Array }>;\n    },\n  },\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint): string {\n      const { Err: E } = DER;\n      abignumber(num);\n      if (num < _0n) throw new E('integer: negative integers are not allowed');\n      let hex = numberToHexUnpadded(num);\n      // Pad with zero byte if negative flag is present\n      if (Number.parseInt(hex[0], 16) & 0b1000) hex = '00' + hex;\n      if (hex.length & 1) throw new E('unexpected DER parsing assertion: unpadded hex');\n      return hex;\n    },\n    decode(data: TArg<Uint8Array>): bigint {\n      const { Err: E } = DER;\n      if (data.length < 1) throw new E('invalid signature integer: empty');\n      if (data[0] & 0b1000_0000) throw new E('invalid signature integer: negative');\n      // Single-byte zero `00` is the canonical DER INTEGER encoding for zero.\n      if (data.length > 1 && data[0] === 0x00 && !(data[1] & 0b1000_0000))\n        throw new E('invalid signature integer: unnecessary leading zero');\n      return bytesToNumberBE(data);\n    },\n  },\n  toSig(bytes: TArg<Uint8Array>): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E, _int: int, _tlv: tlv } = DER;\n    const data = abytes(bytes, undefined, 'signature');\n    const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n    if (seqLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n    const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n    const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n    if (sLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n    return { r: int.decode(rBytes), s: int.decode(sBytes) };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    const { _tlv: tlv, _int: int } = DER;\n    const rs = tlv.encode(0x02, int.encode(sig.r));\n    const ss = tlv.encode(0x02, int.encode(sig.s));\n    const seq = rs + ss;\n    return tlv.encode(0x30, seq);\n  },\n};\nObject.freeze(DER._tlv);\nObject.freeze(DER._int);\nObject.freeze(DER);\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = /* @__PURE__ */ BigInt(0), _1n = /* @__PURE__ */ BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3), _4n = /* @__PURE__ */ BigInt(4);\n\n/**\n * Creates weierstrass Point constructor, based on specified curve options.\n *\n * See {@link WeierstrassOpts}.\n * @param params - Curve parameters. See {@link WeierstrassOpts}.\n * @param extraOpts - Optional helpers and overrides. See {@link WeierstrassExtraOpts}.\n * @returns Weierstrass point constructor.\n * @throws If the curve parameters, overrides, or point codecs are invalid. {@link Error}\n *\n * @example\n * Construct a point type from explicit Weierstrass curve parameters.\n *\n * ```js\n * const opts = {\n *   p: 0xfffffffffffffffffffffffffffffffeffffac73n,\n *   n: 0x100000000000000000001b8fa16dfab9aca16b6b3n,\n *   h: 1n,\n *   a: 0n,\n *   b: 7n,\n *   Gx: 0x3b4c382ce37aa192a4019e763036f4f5dd4d7ebbn,\n *   Gy: 0x938cf935318fdced6bc28286531733c3f03c4feen,\n * };\n * const secp160k1_Point = weierstrass(opts);\n * ```\n */\nexport function weierstrass<T>(\n  params: WeierstrassOpts<T>,\n  extraOpts: WeierstrassExtraOpts<T> = {}\n): WeierstrassPointCons<T> {\n  const validated = createCurveFields('weierstrass', params, extraOpts);\n  const Fp = validated.Fp as IField<T>;\n  const Fn = validated.Fn as IField<bigint>;\n  let CURVE = validated.CURVE as WeierstrassOpts<T>;\n  const { h: cofactor, n: CURVE_ORDER } = CURVE;\n  validateObject(\n    extraOpts,\n    {},\n    {\n      allowInfinityPoint: 'boolean',\n      clearCofactor: 'function',\n      isTorsionFree: 'function',\n      fromBytes: 'function',\n      toBytes: 'function',\n      endo: 'object',\n    }\n  );\n\n  // Snapshot constructor-time flags whose later mutation would otherwise change\n  // validity semantics of an already-built point type.\n  const { endo, allowInfinityPoint } = extraOpts;\n  if (endo) {\n    // validateObject(endo, { beta: 'bigint', splitScalar: 'function' });\n    if (!Fp.is0(CURVE.a) || typeof endo.beta !== 'bigint' || !Array.isArray(endo.basises)) {\n      throw new Error('invalid endo: expected \"beta\": bigint and \"basises\": array');\n    }\n  }\n\n  const lengths = getWLengths(Fp as TArg<IField<T>>, Fn);\n\n  function assertCompressionIsSupported() {\n    if (!Fp.isOdd) throw new Error('compression is not supported: Field does not have .isOdd()');\n  }\n\n  // Implements IEEE P1363 point encoding\n  function pointToBytes(\n    _c: WeierstrassPointCons<T>,\n    point: WeierstrassPoint<T>,\n    isCompressed: boolean\n  ): TRet<Uint8Array> {\n    // SEC 1 v2.0 \u00A72.3.3 encodes infinity as the single octet 0x00. Only curves\n    // that opt into infinity as a public point value should expose that byte form.\n    if (allowInfinityPoint && point.is0()) return Uint8Array.of(0) as TRet<Uint8Array>;\n    const { x, y } = point.toAffine();\n    const bx = Fp.toBytes(x);\n    abool(isCompressed, 'isCompressed');\n    if (isCompressed) {\n      assertCompressionIsSupported();\n      const hasEvenY = !Fp.isOdd!(y);\n      return concatBytes(pprefix(hasEvenY), bx) as TRet<Uint8Array>;\n    } else {\n      return concatBytes(Uint8Array.of(0x04), bx, Fp.toBytes(y)) as TRet<Uint8Array>;\n    }\n  }\n  function pointFromBytes(bytes: TArg<Uint8Array>) {\n    abytes(bytes, undefined, 'Point');\n    const { publicKey: comp, publicKeyUncompressed: uncomp } = lengths; // e.g. for 32-byte: 33, 65\n    const length = bytes.length;\n    const head = bytes[0];\n    const tail = bytes.subarray(1);\n    if (allowInfinityPoint && length === 1 && head === 0x00) return { x: Fp.ZERO, y: Fp.ZERO };\n    // SEC 1 v2.0 \u00A72.3.4 decodes 0x00 as infinity, but \u00A73.2.2 public-key validation\n    // rejects infinity. We therefore keep 0x00 rejected by default because callers\n    // reuse this parser as the strict public-key boundary, and only admit it when\n    // the curve explicitly opts into infinity as a public point value. secp256k1\n    // crosstests show OpenSSL raw point codecs accept 0x00 too.\n    // No actual validation is done here: use .assertValidity()\n    if (length === comp && (head === 0x02 || head === 0x03)) {\n      const x = Fp.fromBytes(tail);\n      if (!Fp.isValid(x)) throw new Error('bad point: is not on curve, wrong x');\n      const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n      let y: T;\n      try {\n        y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n      } catch (sqrtError) {\n        const err = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n        throw new Error('bad point: is not on curve, sqrt error' + err);\n      }\n      assertCompressionIsSupported();\n      const evenY = Fp.isOdd!(y);\n      const evenH = (head & 1) === 1; // ECDSA-specific\n      if (evenH !== evenY) y = Fp.neg(y);\n      return { x, y };\n    } else if (length === uncomp && head === 0x04) {\n      // TODO: more checks\n      const L = Fp.BYTES;\n      const x = Fp.fromBytes(tail.subarray(0, L));\n      const y = Fp.fromBytes(tail.subarray(L, L * 2));\n      if (!isValidXY(x, y)) throw new Error('bad point: is not on curve');\n      return { x, y };\n    } else {\n      throw new Error(\n        `bad point: got length ${length}, expected compressed=${comp} or uncompressed=${uncomp}`\n      );\n    }\n  }\n\n  const encodePoint = extraOpts.toBytes === undefined ? pointToBytes : extraOpts.toBytes;\n  const decodePoint = extraOpts.fromBytes === undefined ? pointFromBytes : extraOpts.fromBytes;\n  function weierstrassEquation(x: T): T {\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x\u00B2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, CURVE.a)), CURVE.b); // x\u00B3 + a * x + b\n  }\n\n  // TODO: move top-level\n  /** Checks whether equation holds for given x, y: y\u00B2 == x\u00B3 + ax + b */\n  function isValidXY(x: T, y: T): boolean {\n    const left = Fp.sqr(y); // y\u00B2\n    const right = weierstrassEquation(x); // x\u00B3 + ax + b\n    return Fp.eql(left, right);\n  }\n\n  // Keep constructor-time generator validation cheap: callers are responsible for supplying the\n  // correct prime-order base point, while eager subgroup checks here would slow heavy module imports.\n  // Test 1: equation y\u00B2 = x\u00B3 + ax + b should work for generator point.\n  if (!isValidXY(CURVE.Gx, CURVE.Gy)) throw new Error('bad curve params: generator point');\n\n  // Test 2: discriminant \u0394 part should be non-zero: 4a\u00B3 + 27b\u00B2 != 0.\n  // Guarantees curve is genus-1, smooth (non-singular).\n  const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n), _4n);\n  const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27));\n  if (Fp.is0(Fp.add(_4a3, _27b2))) throw new Error('bad curve params: a or b');\n\n  /** Asserts coordinate is valid: 0 <= n < Fp.ORDER. */\n  function acoord(title: string, n: T, banZero = false) {\n    if (!Fp.isValid(n) || (banZero && Fp.is0(n))) throw new Error(`bad point coordinate ${title}`);\n    return n;\n  }\n\n  function aprjpoint(other: unknown): asserts other is Point {\n    if (!(other instanceof Point)) throw new Error('Weierstrass Point expected');\n  }\n\n  function splitEndoScalarN(k: bigint) {\n    if (!endo || !endo.basises) throw new Error('no endo');\n    return _splitEndoScalar(k, endo.basises, Fn.ORDER);\n  }\n\n  function finishEndo(\n    endoBeta: EndomorphismOpts['beta'],\n    k1p: Point,\n    k2p: Point,\n    k1neg: boolean,\n    k2neg: boolean\n  ) {\n    k2p = new Point(Fp.mul(k2p.X, endoBeta), k2p.Y, k2p.Z);\n    k1p = negateCt(k1neg, k1p);\n    k2p = negateCt(k2neg, k2p);\n    return k1p.add(k2p);\n  }\n\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates:(X, Y, Z) \u220B (x=X/Z, y=Y/Z).\n   * Default Point works in 2d / affine coordinates: (x, y).\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements WeierstrassPoint<T> {\n    // base / generator point\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    // zero / infinity / identity point\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0\n    // math field\n    static readonly Fp = Fp;\n    // scalar field\n    static readonly Fn = Fn;\n\n    readonly X: T;\n    readonly Y: T;\n    readonly Z: T;\n\n    /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n    constructor(X: T, Y: T, Z: T) {\n      this.X = acoord('x', X);\n      // This is not just about ZERO / infinity: ambient curves can have real\n      // finite points with y=0. Those points are 2-torsion, so they cannot lie\n      // in the odd prime-order subgroups this point type is meant to represent.\n      this.Y = acoord('y', Y, true);\n      this.Z = acoord('z', Z);\n      Object.freeze(this);\n    }\n\n    static CURVE(): WeierstrassOpts<T> {\n      return CURVE;\n    }\n\n    /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      // (0, 0) would've produced (0, 0, 1) - instead, we need (0, 1, 0)\n      if (Fp.is0(x) && Fp.is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    static fromBytes(bytes: TArg<Uint8Array>): Point {\n      const P = Point.fromAffine(decodePoint(abytes(bytes, undefined, 'point')));\n      P.assertValidity();\n      return P;\n    }\n\n    static fromHex(hex: string): Point {\n      return Point.fromBytes(hexToBytes(hex));\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     *\n     * @param windowSize\n     * @param isLazy - true will defer table computation until the first multiplication\n     * @returns\n     */\n    precompute(windowSize: number = 8, isLazy = true): Point {\n      wnaf.createCache(this, windowSize);\n      if (!isLazy) this.multiply(_3n); // random number\n      return this;\n    }\n\n    // TODO: return `this`\n    /** A point on curve is valid if it conforms to equation. */\n    assertValidity(): void {\n      const p = this;\n      if (p.is0()) {\n        // (0, 1, 0) aka ZERO is invalid in most contexts.\n        // In BLS, ZERO can be serialized, so we allow it.\n        // Keep the accepted infinity encoding canonical: projective-equivalent (X, Y, 0) points\n        // like (1, 1, 0) compare equal to ZERO, but only (0, 1, 0) should pass this guard.\n        if (extraOpts.allowInfinityPoint && Fp.is0(p.X) && Fp.eql(p.Y, Fp.ONE) && Fp.is0(p.Z))\n          return;\n        throw new Error('bad point: ZERO');\n      }\n      // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n      const { x, y } = p.toAffine();\n      if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not field elements');\n      if (!isValidXY(x, y)) throw new Error('bad point: equation left != right');\n      if (!p.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    }\n\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (!Fp.isOdd) throw new Error(\"Field doesn't support isOdd\");\n      return !Fp.isOdd(y);\n    }\n\n    /** Compare one point to another. */\n    equals(other: WeierstrassPoint<T>): boolean {\n      aprjpoint(other);\n      const { X: X1, Y: Y1, Z: Z1 } = this;\n      const { X: X2, Y: Y2, Z: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /** Flips point to one corresponding to (x, -y) in Affine coordinates. */\n    negate(): Point {\n      return new Point(this.X, Fp.neg(this.Y), this.Z);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { X: X1, Y: Y1, Z: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: WeierstrassPoint<T>): Point {\n      aprjpoint(other);\n      const { X: X1, Y: Y1, Z: Z1 } = this;\n      const { X: X2, Y: Y2, Z: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: WeierstrassPoint<T>) {\n      // Validate before calling `negate()` so wrong inputs fail with the point guard\n      // instead of leaking a foreign `negate()` error.\n      aprjpoint(other);\n      return this.add(other.negate());\n    }\n\n    is0(): boolean {\n      return this.equals(Point.ZERO);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar - by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      const { endo } = extraOpts;\n      // Keep the subgroup-scalar contract strict instead of reducing 0 / n to ZERO.\n      // In key/signature-style callers, those values usually mean broken hash/scalar plumbing,\n      // and failing closed is safer than silently producing the identity point.\n      if (!Fn.isValidNot0(scalar)) throw new RangeError('invalid scalar: out of range'); // 0 is invalid\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const mul = (n: bigint) => wnaf.cached(this, n, (p) => normalizeZ(Point, p));\n      /** See docs for {@link EndomorphismOpts} */\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(scalar);\n        const { p: k1p, f: k1f } = mul(k1);\n        const { p: k2p, f: k2f } = mul(k2);\n        fake = k1f.add(k2f);\n        point = finishEndo(endo.beta, k1p, k2p, k1neg, k2neg);\n      } else {\n        const { p, f } = mul(scalar);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return normalizeZ(Point, [point, fake])[0];\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed secret key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(scalar: bigint): Point {\n      const { endo } = extraOpts;\n      const p = this as Point;\n      const sc = scalar;\n      // Public-scalar callers may need 0, but n and larger values stay rejected here too.\n      // Reducing them mod n would turn bad caller input into an accidental identity point.\n      if (!Fn.isValid(sc)) throw new RangeError('invalid scalar: out of range'); // 0 is valid\n      if (sc === _0n || p.is0()) return Point.ZERO; // 0\n      if (sc === _1n) return p; // 1\n      if (wnaf.hasCache(this)) return this.multiply(sc); // precomputes\n      // We don't have method for double scalar multiplication (aP + bQ):\n      // Even with using Strauss-Shamir trick, it's 35% slower than na\u00EFve mul+add.\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc);\n        const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2); // 30% faster vs wnaf.unsafe\n        return finishEndo(endo.beta, p1, p2, k1neg, k2neg);\n      } else {\n        return wnaf.unsafe(p, sc);\n      }\n    }\n\n    /**\n     * Converts Projective point to affine (x, y) coordinates.\n     * (X, Y, Z) \u220B (x=X/Z, y=Y/Z).\n     * @param invertedZ - Z^-1 (inverted zero) - optional, precomputation is useful for invertBatch\n     */\n    toAffine(invertedZ?: T): AffinePoint<T> {\n      const p = this;\n      let iz = invertedZ;\n      const { X, Y, Z } = p;\n      // Fast-path for normalized points\n      if (Fp.eql(Z, Fp.ONE)) return { x: X, y: Y };\n      const is0 = p.is0();\n      // If invZ was 0, we return zero point. However we still want to execute\n      // all operations, so we replace invZ with a random number, 1.\n      if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(Z);\n      const x = Fp.mul(X, iz);\n      const y = Fp.mul(Y, iz);\n      const zz = Fp.mul(Z, iz);\n      if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n      if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n      return { x, y };\n    }\n\n    /**\n     * Checks whether Point is free of torsion elements (is in prime subgroup).\n     * Always torsion-free for cofactor=1 curves.\n     */\n    isTorsionFree(): boolean {\n      const { isTorsionFree } = extraOpts;\n      if (cofactor === _1n) return true;\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      return wnaf.unsafe(this, CURVE_ORDER).is0();\n    }\n\n    clearCofactor(): Point {\n      const { clearCofactor } = extraOpts;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      // Default fallback assumes the cofactor fits the usual subgroup-scalar\n      // multiplyUnsafe() contract. Curves with larger / structured cofactors\n      // should define a clearCofactor override anyway (e.g. psi/Frobenius maps).\n      return this.multiplyUnsafe(cofactor);\n    }\n\n    isSmallOrder(): boolean {\n      if (cofactor === _1n) return this.is0(); // Fast-path\n      return this.clearCofactor().is0();\n    }\n\n    toBytes(isCompressed = true): TRet<Uint8Array> {\n      abool(isCompressed, 'isCompressed');\n      // Same policy as pointFromBytes(): keep ZERO out of the default byte surface because\n      // callers use these encodings as public keys, where SEC 1 validation rejects infinity.\n      this.assertValidity();\n      return encodePoint(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return bytesToHex(this.toBytes(isCompressed));\n    }\n\n    toString() {\n      return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`;\n    }\n  }\n  const bits = Fn.BITS;\n  const wnaf = new wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits);\n  // Tiny toy curves can have scalar fields narrower than 8 bits. Skip the\n  // eager W=8 cache there instead of rejecting an otherwise valid constructor.\n  if (bits >= 8) Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Object.freeze(Point.prototype);\n  Object.freeze(Point);\n  return Point;\n}\n\n/** Parsed ECDSA signature with helpers for recovery and re-encoding. */\nexport interface ECDSASignature {\n  /** Signature component `r`. */\n  readonly r: bigint;\n  /** Signature component `s`. */\n  readonly s: bigint;\n  /** Optional recovery bit for recoverable signatures. */\n  readonly recovery?: number;\n  /**\n   * Return a copy of the signature with a recovery bit attached.\n   * @param recovery - Recovery bit to attach.\n   * @returns Signature with an attached recovery bit.\n   */\n  addRecoveryBit(recovery: number): ECDSASignature & { readonly recovery: number };\n  /**\n   * Check whether the signature uses the high-S half-order.\n   * @returns Whether the signature uses the high-S half-order.\n   */\n  hasHighS(): boolean;\n  /**\n   * Recover the public key from the hashed message and recovery bit.\n   * @param messageHash - Hashed message bytes.\n   * @returns Recovered public-key point.\n   */\n  recoverPublicKey(messageHash: TArg<Uint8Array>): WeierstrassPoint<bigint>;\n  /**\n   * Encode the signature into bytes.\n   * @param format - Signature encoding to produce.\n   * @returns Encoded signature bytes.\n   */\n  toBytes(format?: string): TRet<Uint8Array>;\n  /**\n   * Encode the signature into hex.\n   * @param format - Signature encoding to produce.\n   * @returns Encoded signature hex.\n   */\n  toHex(format?: string): string;\n}\n/** Constructor and decoding helpers for ECDSA signatures. */\nexport type ECDSASignatureCons = {\n  /** Create a signature from `r`, `s`, and an optional recovery bit. */\n  new (r: bigint, s: bigint, recovery?: number): ECDSASignature;\n  /**\n   * Decode a signature from bytes.\n   * @param bytes - Encoded signature bytes.\n   * @param format - Signature encoding to parse.\n   * @returns Parsed signature.\n   */\n  fromBytes(bytes: TArg<Uint8Array>, format?: ECDSASignatureFormat): ECDSASignature;\n  /**\n   * Decode a signature from hex.\n   * @param hex - Encoded signature hex.\n   * @param format - Signature encoding to parse.\n   * @returns Parsed signature.\n   */\n  fromHex(hex: string, format?: ECDSASignatureFormat): ECDSASignature;\n};\n\n// Points start with byte 0x02 when y is even; otherwise 0x03\nfunction pprefix(hasEvenY: boolean): TRet<Uint8Array> {\n  return Uint8Array.of(hasEvenY ? 0x02 : 0x03) as TRet<Uint8Array>;\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * RFC 9380 expects callers to provide `v != 0`; this helper does not enforce it.\n * @param Fp - Field implementation.\n * @param Z - Simplified SWU map parameter.\n * @returns Square-root ratio helper.\n * @example\n * Build the square-root ratio helper used by SWU map implementations.\n *\n * ```ts\n * import { SWUFpSqrtRatio } from '@noble/curves/abstract/weierstrass.js';\n * import { Field } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const sqrtRatio = SWUFpSqrtRatio(Fp, 3n);\n * const out = sqrtRatio(4n, 1n);\n * ```\n */\nexport function SWUFpSqrtRatio<T>(\n  Fp: TArg<IField<T>>,\n  Z: T\n): (u: T, v: T) => { isValid: boolean; value: T } {\n  // Fail with the usual field-shape error before touching pow/cmov on malformed field shims.\n  const F = validateField(Fp as IField<T>) as IField<T>;\n  // Generic implementation\n  const q = F.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = F.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = F.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  // RFC 9380 Appendix F.2.1.1 defines sqrt_ratio(u, v) only for v != 0.\n  // We keep v=0 on the regular result path with isValid=false instead of\n  // throwing so the helper stays closer to the RFC's fixed control flow.\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = F.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = F.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = F.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = F.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = F.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = F.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = F.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = F.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = F.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = F.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = F.eql(tv5, F.ONE); // 12. isQR = tv5 == 1\n    tv2 = F.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = F.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = F.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = F.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = F.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = F.eql(tvv5, F.ONE); // 21.    e1 = tv5 == 1\n      tv2 = F.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = F.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = F.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = F.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = F.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    // RFC 9380 Appendix F.2.1.1 defines sqrt_ratio(u, v) for v != 0.\n    // When u = 0 and v != 0, u / v = 0 is square and the computed root is\n    // still 0, so widen only the final flag and keep the full control flow.\n    return { isValid: !F.is0(v) && (isQR || F.is0(u)), value: tv3 };\n  };\n  if (F.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (F.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = F.sqrt(F.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = F.sqr(v); // 1. tv1 = v^2\n      const tv2 = F.mul(u, v); // 2. tv2 = u * v\n      tv1 = F.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = F.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = F.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = F.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = F.mul(F.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = F.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = F.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: !F.is0(v) && isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * See {@link https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2 | RFC 9380 section 6.6.2}.\n * @param Fp - Field implementation.\n * @param opts - SWU parameters:\n *   - `A`: Curve parameter `A`.\n *   - `B`: Curve parameter `B`.\n *   - `Z`: Simplified SWU map parameter.\n * @returns Deterministic map-to-curve function.\n * @throws If the SWU parameters are invalid or the field lacks the required helpers. {@link Error}\n * @example\n * Map one field element to a Weierstrass curve point with the SWU recipe.\n *\n * ```ts\n * import { mapToCurveSimpleSWU } from '@noble/curves/abstract/weierstrass.js';\n * import { Field } from '@noble/curves/abstract/modular.js';\n * const Fp = Field(17n);\n * const map = mapToCurveSimpleSWU(Fp, { A: 1n, B: 2n, Z: 3n });\n * const point = map(5n);\n * ```\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: TArg<IField<T>>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n): (u: T) => { x: T; y: T } {\n  const F = validateField(Fp as IField<T>) as IField<T>;\n  const { A, B, Z } = opts;\n  if (!F.isValidNot0(A) || !F.isValidNot0(B) || !F.isValid(Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  // RFC 9380 \u00A76.6.2 and Appendix H.2 require:\n  // 1. Z is non-square in F\n  // 2. Z != -1 in F\n  // 3. g(x) - Z is irreducible over F\n  // 4. g(B / (Z * A)) is square in F\n  // We can enforce 1, 2, and 4 with the current field API.\n  // Criterion 3 is not checked here because generic `IField<T>` does not expose\n  // polynomial-ring / irreducibility operations, and this helper is used for\n  // both prime and extension fields.\n  if (F.eql(Z, F.neg(F.ONE)) || FpIsSquare(F, Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  // RFC 9380 Appendix H.2 criterion 4: g(B / (Z * A)) is square in F.\n  // x = B / (Z * A)\n  const x = F.mul(B, F.inv(F.mul(Z, A)));\n  // g(x) = x^3 + A*x + B\n  const gx = F.add(F.add(F.mul(F.sqr(x), x), F.mul(A, x)), B);\n  if (!FpIsSquare(F, gx)) throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(F, Z);\n  if (!F.isOdd) throw new Error('Field does not have .isOdd()');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = F.sqr(u); // 1.  tv1 = u^2\n    tv1 = F.mul(tv1, Z); // 2.  tv1 = Z * tv1\n    tv2 = F.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = F.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = F.add(tv2, F.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = F.mul(tv3, B); // 6.  tv3 = B * tv3\n    tv4 = F.cmov(Z, F.neg(tv2), !F.eql(tv2, F.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = F.mul(tv4, A); // 8.  tv4 = A * tv4\n    tv2 = F.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = F.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = F.mul(tv6, A); // 11. tv5 = A * tv6\n    tv2 = F.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = F.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = F.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = F.mul(tv6, B); // 15. tv5 = B * tv6\n    tv2 = F.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = F.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = F.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = F.mul(y, value); // 20.   y = y * y1\n    x = F.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = F.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = F.isOdd!(u) === F.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = F.cmov(F.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    const tv4_inv = FpInvertBatch(F, [tv4], true)[0];\n    x = F.mul(x, tv4_inv); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n\nfunction getWLengths<T>(Fp: TArg<IField<T>>, Fn: TArg<IField<bigint>>) {\n  return {\n    secretKey: Fn.BYTES,\n    publicKey: 1 + Fp.BYTES,\n    publicKeyUncompressed: 1 + 2 * Fp.BYTES,\n    publicKeyHasPrefix: true,\n    // Raw compact `(r || s)` signature width; DER and recovered signatures use\n    // different lengths outside this helper.\n    signature: 2 * Fn.BYTES,\n  };\n}\n\n/**\n * Sometimes users only need getPublicKey, getSharedSecret, and secret key handling.\n * This helper ensures no signature functionality is present. Less code, smaller bundle size.\n * @param Point - Weierstrass point constructor.\n * @param ecdhOpts - Optional randomness helpers:\n *   - `randomBytes` (optional): Optional RNG override.\n * @returns ECDH helper namespace.\n * @example\n * Sometimes users only need getPublicKey, getSharedSecret, and secret key handling.\n *\n * ```ts\n * import { ecdh } from '@noble/curves/abstract/weierstrass.js';\n * import { p256 } from '@noble/curves/nist.js';\n * const dh = ecdh(p256.Point);\n * const alice = dh.keygen();\n * const shared = dh.getSharedSecret(alice.secretKey, alice.publicKey);\n * ```\n */\nexport function ecdh(\n  Point: WeierstrassPointCons<bigint>,\n  ecdhOpts: TArg<{ randomBytes?: (bytesLength?: number) => TRet<Uint8Array> }> = {}\n): ECDH {\n  const { Fn } = Point;\n  const randomBytes_ = ecdhOpts.randomBytes === undefined ? wcRandomBytes : ecdhOpts.randomBytes;\n  // Keep the advertised seed length aligned with mapHashToField(), which keeps a hard 16-byte\n  // minimum even on toy curves.\n  const lengths = Object.assign(getWLengths(Point.Fp, Fn), {\n    seed: Math.max(getMinHashLength(Fn.ORDER), 16),\n  });\n\n  function isValidSecretKey(secretKey: TArg<Uint8Array>) {\n    try {\n      const num = Fn.fromBytes(secretKey);\n      return Fn.isValidNot0(num);\n    } catch (error) {\n      return false;\n    }\n  }\n\n  function isValidPublicKey(publicKey: TArg<Uint8Array>, isCompressed?: boolean): boolean {\n    const { publicKey: comp, publicKeyUncompressed } = lengths;\n    try {\n      const l = publicKey.length;\n      if (isCompressed === true && l !== comp) return false;\n      if (isCompressed === false && l !== publicKeyUncompressed) return false;\n      return !!Point.fromBytes(publicKey);\n    } catch (error) {\n      return false;\n    }\n  }\n\n  /**\n   * Produces cryptographically secure secret key from random of size\n   * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n   */\n  function randomSecretKey(seed?: TArg<Uint8Array>): TRet<Uint8Array> {\n    seed = seed === undefined ? randomBytes_(lengths.seed) : seed;\n    return mapHashToField(abytes(seed, lengths.seed, 'seed'), Fn.ORDER) as TRet<Uint8Array>;\n  }\n\n  /**\n   * Computes public key for a secret key. Checks for validity of the secret key.\n   * @param isCompressed - whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(secretKey: TArg<Uint8Array>, isCompressed = true): TRet<Uint8Array> {\n    return Point.BASE.multiply(Fn.fromBytes(secretKey)).toBytes(isCompressed);\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: TArg<Uint8Array>): boolean | undefined {\n    const { secretKey, publicKey, publicKeyUncompressed } = lengths;\n    const allowedLengths = (Fn as { _lengths?: readonly number[] })._lengths;\n    if (!isBytes(item)) return undefined;\n    const l = abytes(item, undefined, 'key').length;\n    const isPub = l === publicKey || l === publicKeyUncompressed;\n    const isSec = l === secretKey || !!allowedLengths?.includes(l);\n    // P-521 accepts both 65- and 66-byte secret keys, so overlapping lengths stay ambiguous.\n    if (isPub && isSec) return undefined;\n    return isPub;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes encoded shared point from secret key A and public key B.\n   * Checks: 1) secret key validity 2) shared key is on-curve.\n   * Does NOT hash the result or expose the SEC 1 x-coordinate-only `z`.\n   * Returns the encoded shared point on purpose: callers that need `x_P`\n   * can derive it from the encoded point, but `x_P` alone cannot recover the\n   * point/parity back.\n   * This helper only exposes the fully validated public-key path, not cofactor DH.\n   * @param isCompressed - whether to return compact (default), or full key\n   * @returns shared point encoding\n   */\n  function getSharedSecret(\n    secretKeyA: TArg<Uint8Array>,\n    publicKeyB: TArg<Uint8Array>,\n    isCompressed = true\n  ): TRet<Uint8Array> {\n    if (isProbPub(secretKeyA) === true) throw new Error('first arg must be private key');\n    if (isProbPub(publicKeyB) === false) throw new Error('second arg must be public key');\n    const s = Fn.fromBytes(secretKeyA);\n    const b = Point.fromBytes(publicKeyB); // checks for being on-curve\n    return b.multiply(s).toBytes(isCompressed);\n  }\n\n  const utils = {\n    isValidSecretKey,\n    isValidPublicKey,\n    randomSecretKey,\n  };\n  const keygen = createKeygen(randomSecretKey, getPublicKey);\n  Object.freeze(utils);\n  Object.freeze(lengths);\n\n  return Object.freeze({ getPublicKey, getSharedSecret, keygen, Point, utils, lengths });\n}\n\n/**\n * Creates ECDSA signing interface for given elliptic curve `Point` and `hash` function.\n *\n * @param Point - created using {@link weierstrass} function\n * @param hash - used for 1) message prehash-ing 2) k generation in `sign`, using hmac_drbg(hash)\n * @param ecdsaOpts - rarely needed, see {@link ECDSAOpts}:\n *   - `lowS`: Default low-S policy.\n *   - `hmac`: HMAC implementation used by RFC6979 DRBG.\n *   - `randomBytes`: Optional RNG override.\n *   - `bits2int`: Optional hash-to-int conversion override.\n *   - `bits2int_modN`: Optional hash-to-int-mod-n conversion override.\n *\n * @returns ECDSA helper namespace.\n * @example\n * Create an ECDSA signer/verifier bundle for one curve implementation.\n *\n * ```ts\n * import { ecdsa } from '@noble/curves/abstract/weierstrass.js';\n * import { p256 } from '@noble/curves/nist.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const p256ecdsa = ecdsa(p256.Point, sha256);\n * const { secretKey, publicKey } = p256ecdsa.keygen();\n * const msg = new TextEncoder().encode('hello noble');\n * const sig = p256ecdsa.sign(msg, secretKey);\n * const isValid = p256ecdsa.verify(sig, msg, publicKey);\n * ```\n */\nexport function ecdsa(\n  Point: WeierstrassPointCons<bigint>,\n  hash: TArg<CHash>,\n  ecdsaOpts: TArg<ECDSAOpts> = {}\n): ECDSA {\n  // Custom hash / bits2int hooks are treated as pure functions over validated caller-owned bytes.\n  const hash_ = hash as CHash;\n  ahash(hash_);\n  validateObject(\n    ecdsaOpts,\n    {},\n    {\n      hmac: 'function',\n      lowS: 'boolean',\n      randomBytes: 'function',\n      bits2int: 'function',\n      bits2int_modN: 'function',\n    }\n  );\n  ecdsaOpts = Object.assign({}, ecdsaOpts);\n  const randomBytes = ecdsaOpts.randomBytes === undefined ? wcRandomBytes : ecdsaOpts.randomBytes;\n  const hmac =\n    ecdsaOpts.hmac === undefined\n      ? (key: TArg<Uint8Array>, msg: TArg<Uint8Array>) => nobleHmac(hash_, key, msg)\n      : (ecdsaOpts.hmac as HmacFn);\n\n  const { Fp, Fn } = Point;\n  const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn;\n  const { keygen, getPublicKey, getSharedSecret, utils, lengths } = ecdh(Point, ecdsaOpts);\n  const defaultSigOpts: Required<ECDSASignOpts> = {\n    prehash: true,\n    lowS: typeof ecdsaOpts.lowS === 'boolean' ? ecdsaOpts.lowS : true,\n    format: 'compact' as ECDSASignatureFormat,\n    extraEntropy: false,\n  };\n  // SEC 1 4.1.6 public-key recovery tries x = r + jn for j = 0..h. Our recovered-signature\n  // format only stores one overflow bit, so it can only distinguish q.x = r from q.x = r + n.\n  // A third lift would have the form q.x = r + 2n. Since valid ECDSA r is in 1..n-1, the\n  // smallest such lift is 1 + 2n, not 2n.\n  const hasLargeRecoveryLifts = CURVE_ORDER * _2n + _1n < Fp.ORDER;\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n  function validateRS(title: string, num: bigint): bigint {\n    if (!Fn.isValidNot0(num))\n      throw new Error(`invalid signature ${title}: out of range 1..Point.Fn.ORDER`);\n    return num;\n  }\n  function assertRecoverableCurve(): void {\n    // ECDSA recovery only supports curves where the current recovery id can distinguish\n    // q.x = r and q.x = r + n; larger lifts may need additional `r + n*i` branches.\n    // SEC 1 4.1.6 recovers candidates via x = r + jn, but this format only encodes j = 0 or 1.\n    // The next possible candidate is q.x = r + 2n, and its smallest valid value is 1 + 2n.\n    // To easily get i, we either need to:\n    // a. increase amount of valid recid values (4, 5...); OR\n    // b. prohibit recovered signatures for those curves.\n    if (hasLargeRecoveryLifts)\n      throw new Error('\"recovered\" sig type is not supported for cofactor >2 curves');\n  }\n  function validateSigLength(bytes: TArg<Uint8Array>, format: ECDSASignatureFormat) {\n    validateSigFormat(format);\n    const size = lengths.signature!;\n    const sizer = format === 'compact' ? size : format === 'recovered' ? size + 1 : undefined;\n    return abytes(bytes, sizer);\n  }\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports compact, recovered & DER representations.\n   */\n  class Signature implements ECDSASignature {\n    readonly r: bigint;\n    readonly s: bigint;\n    readonly recovery?: number;\n\n    constructor(r: bigint, s: bigint, recovery?: number) {\n      this.r = validateRS('r', r); // r in [1..N-1];\n      this.s = validateRS('s', s); // s in [1..N-1];\n      if (recovery != null) {\n        assertRecoverableCurve();\n        if (![0, 1, 2, 3].includes(recovery)) throw new Error('invalid recovery id');\n        this.recovery = recovery;\n      }\n      Object.freeze(this);\n    }\n\n    static fromBytes(\n      bytes: TArg<Uint8Array>,\n      format: ECDSASignatureFormat = defaultSigOpts.format\n    ): Signature {\n      validateSigLength(bytes, format);\n      let recid: number | undefined;\n      if (format === 'der') {\n        const { r, s } = DER.toSig(abytes(bytes));\n        return new Signature(r, s);\n      }\n      if (format === 'recovered') {\n        recid = bytes[0];\n        format = 'compact';\n        bytes = bytes.subarray(1);\n      }\n      const L = lengths.signature! / 2;\n      const r = bytes.subarray(0, L);\n      const s = bytes.subarray(L, L * 2);\n      return new Signature(Fn.fromBytes(r), Fn.fromBytes(s), recid);\n    }\n\n    static fromHex(hex: string, format?: ECDSASignatureFormat) {\n      return this.fromBytes(hexToBytes(hex), format);\n    }\n\n    private assertRecovery(): number {\n      const { recovery } = this;\n      if (recovery == null) throw new Error('invalid recovery id: must be present');\n      return recovery;\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    // Unlike the top-level helper below, this method expects a digest that has\n    // already been hashed to the curve's message representative.\n    recoverPublicKey(messageHash: TArg<Uint8Array>): WeierstrassPoint<bigint> {\n      const { r, s } = this;\n      const recovery = this.assertRecovery();\n      const radj = recovery === 2 || recovery === 3 ? r + CURVE_ORDER : r;\n      if (!Fp.isValid(radj)) throw new Error('invalid recovery id: sig.r+curve.n != R.x');\n      const x = Fp.toBytes(radj);\n      const R = Point.fromBytes(concatBytes(pprefix((recovery & 1) === 0), x));\n      const ir = Fn.inv(radj); // r^-1\n      const h = bits2int_modN(abytes(messageHash, undefined, 'msgHash')); // Truncate hash\n      const u1 = Fn.create(-h * ir); // -hr^-1\n      const u2 = Fn.create(s * ir); // sr^-1\n      // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1). unsafe is fine: there is no private data.\n      const Q = Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2));\n      if (Q.is0()) throw new Error('invalid recovery: point at infinify');\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    toBytes(format: ECDSASignatureFormat = defaultSigOpts.format): TRet<Uint8Array> {\n      validateSigFormat(format);\n      if (format === 'der') return hexToBytes(DER.hexFromSig(this)) as TRet<Uint8Array>;\n      const { r, s } = this;\n      const rb = Fn.toBytes(r);\n      const sb = Fn.toBytes(s);\n      if (format === 'recovered') {\n        assertRecoverableCurve();\n        return concatBytes(Uint8Array.of(this.assertRecovery()), rb, sb) as TRet<Uint8Array>;\n      }\n      return concatBytes(rb, sb) as TRet<Uint8Array>;\n    }\n\n    toHex(format?: ECDSASignatureFormat) {\n      return bytesToHex(this.toBytes(format));\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n  Object.freeze(Signature.prototype);\n  Object.freeze(Signature);\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int: (bytes: TArg<Uint8Array>) => bigint =\n    ecdsaOpts.bits2int === undefined\n      ? function bits2int_def(bytes: TArg<Uint8Array>): bigint {\n          // Our custom check \"just in case\", for protection against DoS\n          if (bytes.length > 8192) throw new Error('input is too large');\n          // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n          // for some cases, since bytes.length * 8 is not actual bitLength.\n          const num = bytesToNumberBE(bytes); // check for == u8 done here\n          const delta = bytes.length * 8 - fnBits; // truncate to nBitLength leftmost bits\n          return delta > 0 ? num >> BigInt(delta) : num;\n        }\n      : (ecdsaOpts.bits2int as (bytes: TArg<Uint8Array>) => bigint);\n  const bits2int_modN: (bytes: TArg<Uint8Array>) => bigint =\n    ecdsaOpts.bits2int_modN === undefined\n      ? function bits2int_modN_def(bytes: TArg<Uint8Array>): bigint {\n          return Fn.create(bits2int(bytes)); // can't use bytesToNumberBE here\n        }\n      : (ecdsaOpts.bits2int_modN as (bytes: TArg<Uint8Array>) => bigint);\n  const ORDER_MASK = bitMask(fnBits);\n  // Pads output with zero as per spec.\n  /** Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`. */\n  function int2octets(num: bigint): TRet<Uint8Array> {\n    aInRange('num < 2^' + fnBits, num, _0n, ORDER_MASK);\n    return Fn.toBytes(num) as TRet<Uint8Array>;\n  }\n\n  function validateMsgAndHash(message: TArg<Uint8Array>, prehash: boolean): TRet<Uint8Array> {\n    abytes(message, undefined, 'message');\n    return (\n      prehash ? abytes(hash_(message), undefined, 'prehashed message') : message\n    ) as TRet<Uint8Array>;\n  }\n\n  /**\n   * Steps A, D of RFC6979 3.2.\n   * Creates RFC6979 seed; converts msg/privKey to numbers.\n   * Used only in sign, not in verify.\n   *\n   * Warning: we cannot assume here that message has same amount of bytes as curve order,\n   * this will be invalid at least for P521. Also it can be bigger for P224 + SHA256.\n   */\n  function prepSig(\n    message: TArg<Uint8Array>,\n    secretKey: TArg<Uint8Array>,\n    opts: TArg<ECDSASignOpts>\n  ) {\n    const { lowS, prehash, extraEntropy } = validateSigOpts(opts, defaultSigOpts);\n    message = validateMsgAndHash(message, prehash); // RFC6979 3.2 A: h1 = H(m)\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with fnBits % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(message);\n    const d = Fn.fromBytes(secretKey); // validate secret key, convert to bigint\n    if (!Fn.isValidNot0(d)) throw new Error('invalid private key');\n    const seedArgs: TArg<Uint8Array>[] = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (extraEntropy != null && extraEntropy !== false) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      // gen random bytes OR pass as-is\n      const e = extraEntropy === true ? randomBytes(lengths.secretKey) : extraEntropy;\n      seedArgs.push(abytes(e, undefined, 'extraEntropy')); // check for being bytes\n    }\n    const seed = concatBytes(...seedArgs) as TRet<Uint8Array>; // Step D of RFC6979 3.2\n    const m = h1int; // no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    // To transform k => Signature:\n    // q = k\u22C5G\n    // r = q.x mod n\n    // s = k^-1(m + rd) mod n\n    // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n    // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n    // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n    function k2sig(kBytes: TArg<Uint8Array>): Signature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      // Important: all mod() calls here must be done over N\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!Fn.isValidNot0(k)) return; // Valid scalars (including k) must be in 1..N-1\n      const ik = Fn.inv(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = k\u22C5G\n      const r = Fn.create(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      const s = Fn.create(ik * Fn.create(m + r * d)); // s = k^-1(m + rd) mod n\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3 when q.x>n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = Fn.neg(s); // if lowS was passed, ensure s is always in the bottom half of N\n        recovery ^= 1;\n      }\n      return new Signature(r, normS, hasLargeRecoveryLifts ? undefined : recovery);\n    }\n    return { seed, k2sig };\n  }\n\n  /**\n   * Signs a message or message hash with a secret key.\n   * With the default `prehash: true`, raw message bytes are hashed internally;\n   * only `{ prehash: false }` expects a caller-supplied digest.\n   *\n   * ```\n   * sign(m, d) where\n   *   k = rfc6979_hmac_drbg(m, d)\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr) / k mod n\n   * ```\n   */\n  function sign(\n    message: TArg<Uint8Array>,\n    secretKey: TArg<Uint8Array>,\n    opts: TArg<ECDSASignOpts> = {}\n  ): TRet<Uint8Array> {\n    const { seed, k2sig } = prepSig(message, secretKey, opts); // Steps A, D of RFC6979 3.2.\n    const drbg = createHmacDrbg<Signature>(hash_.outputLen, Fn.BYTES, hmac);\n    const sig = drbg(seed, k2sig); // Steps B, C, D, E, F, G\n    return sig.toBytes(opts.format);\n  }\n\n  /**\n   * Verifies a signature against message and public key.\n   * Rejects lowS signatures by default: see {@link ECDSAVerifyOpts}.\n   * Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   u1 = hs^-1 mod n\n   *   u2 = rs^-1 mod n\n   *   R = u1\u22C5G + u2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: TArg<Uint8Array>,\n    message: TArg<Uint8Array>,\n    publicKey: TArg<Uint8Array>,\n    opts: TArg<ECDSAVerifyOpts> = {}\n  ): boolean {\n    const { lowS, prehash, format } = validateSigOpts(opts, defaultSigOpts);\n    publicKey = abytes(publicKey, undefined, 'publicKey');\n    message = validateMsgAndHash(message, prehash);\n    if (!isBytes(signature as any)) {\n      const end = signature instanceof Signature ? ', use sig.toBytes()' : '';\n      throw new Error('verify expects Uint8Array signature' + end);\n    }\n    validateSigLength(signature, format); // execute this twice because we want loud error\n    try {\n      const sig = Signature.fromBytes(signature, format);\n      const P = Point.fromBytes(publicKey);\n      if (lowS && sig.hasHighS()) return false;\n      const { r, s } = sig;\n      const h = bits2int_modN(message); // mod n, not mod p\n      const is = Fn.inv(s); // s^-1 mod n\n      const u1 = Fn.create(h * is); // u1 = hs^-1 mod n\n      const u2 = Fn.create(r * is); // u2 = rs^-1 mod n\n      const R = Point.BASE.multiplyUnsafe(u1).add(P.multiplyUnsafe(u2)); // u1\u22C5G + u2\u22C5P\n      if (R.is0()) return false;\n      const v = Fn.create(R.x); // v = r.x mod n\n      return v === r;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function recoverPublicKey(\n    signature: TArg<Uint8Array>,\n    message: TArg<Uint8Array>,\n    opts: TArg<ECDSARecoverOpts> = {}\n  ): TRet<Uint8Array> {\n    // Top-level recovery mirrors `sign()` / `verify()`: it hashes raw message\n    // bytes first unless the caller passes `{ prehash: false }`.\n    const { prehash } = validateSigOpts(opts, defaultSigOpts);\n    message = validateMsgAndHash(message, prehash);\n    return Signature.fromBytes(signature, 'recovered').recoverPublicKey(message).toBytes();\n  }\n\n  return Object.freeze({\n    keygen,\n    getPublicKey,\n    getSharedSecret,\n    utils,\n    lengths,\n    Point,\n    sign,\n    verify,\n    recoverPublicKey,\n    Signature,\n    hash: hash_,\n  }) satisfies Signer;\n}\n", "/**\n * Internal module for NIST P256, P384, P521 curves.\n * Do not use for now.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256, sha384, sha512 } from '@noble/hashes/sha2.js';\nimport { createFROST, type FROST } from './abstract/frost.ts';\nimport { createHasher, type H2CHasher } from './abstract/hash-to-curve.ts';\nimport { createOPRF, type OPRF } from './abstract/oprf.ts';\nimport {\n  ecdsa,\n  mapToCurveSimpleSWU,\n  weierstrass,\n  type ECDSA,\n  type WeierstrassOpts,\n  type WeierstrassPointCons,\n} from './abstract/weierstrass.ts';\nimport { type TRet } from './utils.ts';\n\n// p = 2n**224n * (2n**32n-1n) + 2n**192n + 2n**96n - 1n\n// a = Fp256.create(BigInt('-3'));\nconst p256_CURVE: WeierstrassOpts<bigint> = /* @__PURE__ */ (() => ({\n  p: BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'),\n  n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),\n  h: BigInt(1),\n  a: BigInt('0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc'),\n  b: BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b'),\n  Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),\n  Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),\n}))();\n\n// p = 2n**384n - 2n**128n - 2n**96n + 2n**32n - 1n\nconst p384_CURVE: WeierstrassOpts<bigint> = /* @__PURE__ */ (() => ({\n  p: BigInt(\n    '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff'\n  ),\n  n: BigInt(\n    '0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973'\n  ),\n  h: BigInt(1),\n  a: BigInt(\n    '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc'\n  ),\n  b: BigInt(\n    '0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef'\n  ),\n  Gx: BigInt(\n    '0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7'\n  ),\n  Gy: BigInt(\n    '0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f'\n  ),\n}))();\n\n// p = 2n**521n - 1n\nconst p521_CURVE: WeierstrassOpts<bigint> = /* @__PURE__ */ (() => ({\n  p: BigInt(\n    '0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'\n  ),\n  n: BigInt(\n    '0x01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409'\n  ),\n  h: BigInt(1),\n  a: BigInt(\n    '0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc'\n  ),\n  b: BigInt(\n    '0x0051953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00'\n  ),\n  Gx: BigInt(\n    '0x00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66'\n  ),\n  Gy: BigInt(\n    '0x011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650'\n  ),\n}))();\n\ntype SwuOpts = {\n  A: bigint;\n  B: bigint;\n  Z: bigint;\n};\n\nfunction createSWU(Point: WeierstrassPointCons<bigint>, opts: SwuOpts) {\n  let map: ((u: bigint) => { x: bigint; y: bigint }) | undefined;\n  // RFC 9380's NIST suites here all use m = 1, so createHasher passes one field element per map.\n  // Building the SWU sqrt-ratio helper eagerly adds noticeable `nist.js` import cost, so defer it\n  // to first use; after that the cached mapper is reused directly.\n  return (scalars: bigint[]) => (map || (map = mapToCurveSimpleSWU(Point.Fp, opts)))(scalars[0]);\n}\n\n// NIST P256\nconst p256_Point = /* @__PURE__ */ weierstrass(p256_CURVE);\n/**\n * NIST P256 (aka secp256r1, prime256v1) curve, ECDSA and ECDH methods.\n * Hashes inputs with sha256 by default.\n *\n * @example\n * Generate one P-256 keypair, sign a message, and verify it.\n *\n * ```js\n * import { p256 } from '@noble/curves/nist.js';\n * const { secretKey, publicKey } = p256.keygen();\n * // const publicKey = p256.getPublicKey(secretKey);\n * const msg = new TextEncoder().encode('hello noble');\n * const sig = p256.sign(msg, secretKey);\n * const isValid = p256.verify(sig, msg, publicKey);\n * // const sigKeccak = p256.sign(keccak256(msg), secretKey, { prehash: false });\n * ```\n */\nexport const p256: ECDSA = /* @__PURE__ */ ecdsa(p256_Point, sha256);\n/**\n * Hashing / encoding to p256 points / field. RFC 9380 methods.\n * @example\n * Hash one message onto the P-256 curve.\n *\n * ```ts\n * const point = p256_hasher.hashToCurve(new TextEncoder().encode('hello noble'));\n * ```\n */\nexport const p256_hasher: H2CHasher<WeierstrassPointCons<bigint>> = /* @__PURE__ */ (() => {\n  return createHasher(\n    p256_Point,\n    createSWU(p256_Point, {\n      A: p256_CURVE.a,\n      B: p256_CURVE.b,\n      Z: p256_Point.Fp.create(BigInt('-10')),\n    }),\n    {\n      DST: 'P256_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'P256_XMD:SHA-256_SSWU_NU_',\n      p: p256_CURVE.p,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  );\n})();\n/**\n * p256 OPRF, defined in RFC 9497.\n * @example\n * Run one blind/evaluate/finalize OPRF round over P-256.\n *\n * ```ts\n * const input = new TextEncoder().encode('hello noble');\n * const keys = p256_oprf.oprf.generateKeyPair();\n * const blind = p256_oprf.oprf.blind(input);\n * const evaluated = p256_oprf.oprf.blindEvaluate(keys.secretKey, blind.blinded);\n * const output = p256_oprf.oprf.finalize(input, blind.blind, evaluated);\n * ```\n */\nexport const p256_oprf: TRet<OPRF> = /* @__PURE__ */ (() =>\n  createOPRF({\n    name: 'P256-SHA256',\n    Point: p256_Point,\n    hash: sha256,\n    hashToGroup: p256_hasher.hashToCurve,\n    hashToScalar: p256_hasher.hashToScalar,\n  }))();\n/**\n * FROST threshold signatures over p256. RFC 9591.\n * @example\n * Create one trusted-dealer package for 2-of-3 p256 signing.\n *\n * ```ts\n * const alice = p256_FROST.Identifier.derive('alice@example.com');\n * const bob = p256_FROST.Identifier.derive('bob@example.com');\n * const carol = p256_FROST.Identifier.derive('carol@example.com');\n * const deal = p256_FROST.trustedDealer({ min: 2, max: 3 }, [alice, bob, carol]);\n * ```\n */\nexport const p256_FROST: TRet<FROST> = /* @__PURE__ */ (() =>\n  createFROST({\n    name: 'FROST-P256-SHA256-v1',\n    Point: p256_Point,\n    hashToScalar: p256_hasher.hashToScalar,\n    hash: sha256,\n  }))();\n\n// NIST P384\nconst p384_Point = /* @__PURE__ */ weierstrass(p384_CURVE);\n/**\n * NIST P384 (aka secp384r1) curve, ECDSA and ECDH methods. Hashes inputs with sha384 by default.\n * @example\n * Generate one P-384 keypair, sign a message, and verify it.\n *\n * ```ts\n * const { secretKey, publicKey } = p384.keygen();\n * const msg = new TextEncoder().encode('hello noble');\n * const sig = p384.sign(msg, secretKey);\n * const isValid = p384.verify(sig, msg, publicKey);\n * ```\n */\nexport const p384: ECDSA = /* @__PURE__ */ ecdsa(p384_Point, sha384);\n/**\n * Hashing / encoding to p384 points / field. RFC 9380 methods.\n * @example\n * Hash one message onto the P-384 curve.\n *\n * ```ts\n * const point = p384_hasher.hashToCurve(new TextEncoder().encode('hello noble'));\n * ```\n */\nexport const p384_hasher: H2CHasher<WeierstrassPointCons<bigint>> = /* @__PURE__ */ (() => {\n  return createHasher(\n    p384_Point,\n    createSWU(p384_Point, {\n      A: p384_CURVE.a,\n      B: p384_CURVE.b,\n      Z: p384_Point.Fp.create(BigInt('-12')),\n    }),\n    {\n      DST: 'P384_XMD:SHA-384_SSWU_RO_',\n      encodeDST: 'P384_XMD:SHA-384_SSWU_NU_',\n      p: p384_CURVE.p,\n      m: 1,\n      k: 192,\n      expand: 'xmd',\n      hash: sha384,\n    }\n  );\n})();\n/**\n * p384 OPRF, defined in RFC 9497.\n * @example\n * Run one blind/evaluate/finalize OPRF round over P-384.\n *\n * ```ts\n * const input = new TextEncoder().encode('hello noble');\n * const keys = p384_oprf.oprf.generateKeyPair();\n * const blind = p384_oprf.oprf.blind(input);\n * const evaluated = p384_oprf.oprf.blindEvaluate(keys.secretKey, blind.blinded);\n * const output = p384_oprf.oprf.finalize(input, blind.blind, evaluated);\n * ```\n */\nexport const p384_oprf: TRet<OPRF> = /* @__PURE__ */ (() =>\n  createOPRF({\n    name: 'P384-SHA384',\n    Point: p384_Point,\n    hash: sha384,\n    hashToGroup: p384_hasher.hashToCurve,\n    hashToScalar: p384_hasher.hashToScalar,\n  }))();\n\n// NIST P521\n// RFC 7518 fixes the canonical JWK/JOSE width at 66 bytes:\n// - Section 3.4 says ECDSA octet strings must not omit leading zero octets\n// - Sections 6.2.1.2/6.2.1.3 say P-521 coordinates \"x\"/\"y\" must be 66 octets\n// - Section 6.2.2.1 says private scalar \"d\" must be ceil(log2(n)/8) octets, i.e. 66 for P-521\n// NIST FIPS 186-5 Appendix A.3.3 also routes deterministic ECDSA private keys through Appendix\n// B.2.3, whose Integer-to-Octet-String output has explicit fixed length L; for P-521 that is the\n// same 66-byte order width.\n// RFC 6979 matches that width too: private key x is an integer, while `int2octets(x)` uses\n// rlen = 8 * ceil(qlen/8); for P-521, qlen = 521 so the canonical octet width is 66 bytes.\n// Wycheproof ECDH stores private values as integers, not fixed-width scalar bytes, so it does not\n// require a dedicated 65-byte parser path; the repo tests now normalize those integer fixtures to\n// the canonical 66-byte width before use. There is no good standards or oracle reason to accept\n// exactly 65 bytes here: the coherent choices are canonical 66 only, or a broader integer-style\n// parser across many widths. Since this field parser is fixed-width, keep it canonical and use the\n// default exact-66-byte scalar field path.\nconst p521_Point = /* @__PURE__ */ weierstrass(p521_CURVE);\n/**\n * NIST P521 (aka secp521r1) curve, ECDSA and ECDH methods. Hashes inputs with sha512 by default.\n * Deterministic `keygen(seed)` expects 99 seed bytes here because the generic scalar-derivation\n * helper uses `getMinHashLength(n)`, not the 66-byte canonical secret-key width.\n * @example\n * Generate one P-521 keypair, sign a message, and verify it.\n *\n * ```ts\n * const { secretKey, publicKey } = p521.keygen();\n * const msg = new TextEncoder().encode('hello noble');\n * const sig = p521.sign(msg, secretKey);\n * const isValid = p521.verify(sig, msg, publicKey);\n * ```\n */\nexport const p521: ECDSA = /* @__PURE__ */ ecdsa(p521_Point, sha512);\n/**\n * Hashing / encoding to p521 points / field. RFC 9380 methods.\n * @example\n * Hash one message onto the P-521 curve.\n *\n * ```ts\n * const point = p521_hasher.hashToCurve(new TextEncoder().encode('hello noble'));\n * ```\n */\nexport const p521_hasher: H2CHasher<WeierstrassPointCons<bigint>> = /* @__PURE__ */ (() => {\n  return createHasher(\n    p521_Point,\n    createSWU(p521_Point, {\n      A: p521_CURVE.a,\n      B: p521_CURVE.b,\n      Z: p521_Point.Fp.create(BigInt('-4')),\n    }),\n    {\n      DST: 'P521_XMD:SHA-512_SSWU_RO_',\n      encodeDST: 'P521_XMD:SHA-512_SSWU_NU_',\n      p: p521_CURVE.p,\n      m: 1,\n      k: 256,\n      expand: 'xmd',\n      hash: sha512,\n    }\n  );\n})();\n/**\n * p521 OPRF, defined in RFC 9497.\n * @example\n * Run one blind/evaluate/finalize OPRF round over P-521.\n *\n * ```ts\n * const input = new TextEncoder().encode('hello noble');\n * const keys = p521_oprf.oprf.generateKeyPair();\n * const blind = p521_oprf.oprf.blind(input);\n * const evaluated = p521_oprf.oprf.blindEvaluate(keys.secretKey, blind.blinded);\n * const output = p521_oprf.oprf.finalize(input, blind.blind, evaluated);\n * ```\n */\nexport const p521_oprf: TRet<OPRF> = /* @__PURE__ */ (() =>\n  createOPRF({\n    name: 'P521-SHA512',\n    Point: p521_Point,\n    hash: sha512,\n    hashToGroup: p521_hasher.hashToCurve,\n    hashToScalar: p521_hasher.hashToScalar, // produces L=98 just like in RFC\n  }))();\n", null, null, "import type { Address, TypedDataDomain } from 'abitype'\nimport type { Account } from '../../../accounts/types.js'\nimport { parseAccount } from '../../../accounts/utils/parseAccount.js'\nimport {\n  type GetEip712DomainParameters,\n  getEip712Domain,\n} from '../../../actions/public/getEip712Domain.js'\nimport { signTypedData } from '../../../actions/wallet/signTypedData.js'\nimport type { Client } from '../../../clients/createClient.js'\nimport type { Transport } from '../../../clients/transports/createTransport.js'\nimport { AccountNotFoundError } from '../../../errors/account.js'\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { GetAccountParameter } from '../../../types/account.js'\nimport type { Chain } from '../../../types/chain.js'\nimport type { Hex, SignableMessage } from '../../../types/misc.js'\nimport type { OneOf, RequiredBy } from '../../../types/utils.js'\nimport { getAction } from '../../../utils/getAction.js'\nimport { toPrefixedMessage } from '../../../utils/signature/toPrefixedMessage.js'\nimport type { GetVerifierParameter } from '../types.js'\n\nexport type SignMessageParameters<\n  account extends Account | undefined = Account | undefined,\n  accountOverride extends Account | undefined = Account | undefined,\n  verifier extends Address | undefined = Address | undefined,\n> = Pick<GetEip712DomainParameters, 'factory' | 'factoryData'> &\n  GetAccountParameter<account, accountOverride> & {\n    message: SignableMessage\n  } & OneOf<\n    | {\n        verifierDomain: RequiredBy<\n          TypedDataDomain,\n          'chainId' | 'name' | 'verifyingContract' | 'version'\n        >\n        verifier?: undefined\n      }\n    | (GetVerifierParameter<verifier> & {\n        verifierDomain?:\n          | RequiredBy<\n              TypedDataDomain,\n              'chainId' | 'name' | 'verifyingContract' | 'version'\n            >\n          | undefined\n      })\n  >\n\nexport type SignMessageReturnType = Hex\n\nexport type SignMessageErrorType = ErrorType\n\n/**\n * Signs a [EIP-191](https://eips.ethereum.org/EIPS/eip-191) personal sign message via [ERC-7739 `PersonalSign` format](https://eips.ethereum.org/EIPS/eip-7702).\n *\n * This Action is suitable to sign messages for Smart Accounts that implement (or conform to) [ERC-7739](https://eips.ethereum.org/EIPS/eip-7702) (e.g. Solady's [ERC1271.sol](https://github.com/Vectorized/solady/blob/main/src/accounts/ERC1271.sol)).\n *\n * - Docs: https://viem.sh/experimental/erc7739/signMessage\n *\n * With the calculated signature, you can:\n * - use [`verifyMessage`](https://viem.sh/docs/utilities/verifyMessage) to verify the signature,\n *\n * @param client - Client to use\n * @param parameters - {@link SignMessageParameters}\n * @returns The signed message. {@link SignMessageReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { signMessage } from 'viem/experimental/erc7739'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n *\n * const signature = await signMessage(client, {\n *   account: '0xE8Df82fA4E10e6A12a9Dab552bceA2acd26De9bb',\n *   message: 'hello world',\n *   verifier: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, custom } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { signMessage } from 'viem/experimental/erc7739'\n *\n * const client = createWalletClient({\n *   account: '0xE8Df82fA4E10e6A12a9Dab552bceA2acd26De9bb',\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n *\n * const signature = await signMessage(client, {\n *   message: 'hello world',\n *   verifier: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function signMessage<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  accountOverride extends Account | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: SignMessageParameters<account, accountOverride>,\n): Promise<SignMessageReturnType> {\n  const {\n    account: account_ = client.account,\n    factory,\n    factoryData,\n    message,\n    verifier,\n  } = parameters\n\n  if (!account_)\n    throw new AccountNotFoundError({\n      docsPath: '/experimental/erc7739/signMessage',\n    })\n  const account = parseAccount(account_)\n\n  const { salt: _, ...domain } = await (async () => {\n    if (parameters.verifierDomain) return parameters.verifierDomain\n    const { domain } = await getAction(\n      client,\n      getEip712Domain,\n      'getEip712Domain',\n    )({\n      address: verifier!,\n      factory,\n      factoryData,\n    })\n    return domain\n  })()\n\n  return getAction(\n    client,\n    signTypedData,\n    'signTypedData',\n  )({\n    account,\n    domain,\n    types: {\n      PersonalSign: [{ name: 'prefixed', type: 'bytes' }],\n    },\n    primaryType: 'PersonalSign',\n    message: {\n      prefixed: toPrefixedMessage(message),\n    },\n  })\n}\n", "/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n  abytes as abytes_,\n  bytesToHex as bytesToHex_,\n  concatBytes as concatBytes_,\n  hexToBytes as hexToBytes_,\n  isBytes as isBytes_,\n} from '@noble/hashes/utils.js';\nexport {\n  abytes,\n  anumber,\n  bytesToHex,\n  bytesToUtf8,\n  concatBytes,\n  hexToBytes,\n  isBytes,\n  randomBytes,\n  utf8ToBytes,\n} from '@noble/hashes/utils.js';\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function abool(title: string, value: boolean): void {\n  if (typeof value !== 'boolean') throw new Error(title + ' boolean expected, got ' + value);\n}\n\n// tmp name until v2\nexport function _abool2(value: boolean, title: string = ''): boolean {\n  if (typeof value !== 'boolean') {\n    const prefix = title && `\"${title}\"`;\n    throw new Error(prefix + 'expected boolean, got type=' + typeof value);\n  }\n  return value;\n}\n\n// tmp name until v2\n/** Asserts something is Uint8Array. */\nexport function _abytes2(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n  const bytes = isBytes_(value);\n  const len = value?.length;\n  const needsLen = length !== undefined;\n  if (!bytes || (needsLen && len !== length)) {\n    const prefix = title && `\"${title}\" `;\n    const ofLen = needsLen ? ` of length ${length}` : '';\n    const got = bytes ? `length=${len}` : `type=${typeof value}`;\n    throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n  }\n  return value;\n}\n\n// Used in weierstrass, der\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? '0' + hex : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex_(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  abytes_(bytes);\n  return hexToNumber(bytesToHex_(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes_(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes_(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'secret key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes_(hex);\n    } catch (e) {\n      throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);\n    }\n  } else if (isBytes_(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(title + ' must be hex string or Uint8Array');\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);\n  return res;\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n/**\n * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer,\n * and Buffer#slice creates mutable copy. Never use Buffers!\n */\nexport function copyBytes(bytes: Uint8Array): Uint8Array {\n  return Uint8Array.from(bytes);\n}\n\n/**\n * Decodes 7-bit ASCII string to Uint8Array, throws on non-ascii symbols\n * Should be safe to use for things expected to be ASCII.\n * Returns exact same result as utf8ToBytes for ASCII or throws.\n */\nexport function asciiToBytes(ascii: string): Uint8Array {\n  return Uint8Array.from(ascii, (c, i) => {\n    const charCode = c.charCodeAt(0);\n    if (c.length !== 1 || charCode > 127) {\n      throw new Error(\n        `string contains non-ASCII character \"${ascii[i]}\" with code ${charCode} at position ${i}`\n      );\n    }\n    return charCode;\n  });\n}\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\n// export const utf8ToBytes: typeof utf8ToBytes_ = utf8ToBytes_;\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\n// export const bytesToUtf8: typeof bytesToUtf8_ = bytesToUtf8_;\n\n// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint): boolean {\n  return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint): void {\n  // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n  // consider P=256n, min=0n, max=P\n  // - a for min=0 would require -1:          `inRange('x', x, -1n, P)`\n  // - b would commonly require subtraction:  `inRange('x', x, 0n, P - 1n)`\n  // - our way is the cleanest:               `inRange('x', x, 0n, P)\n  if (!inRange(n, min, max))\n    throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nexport function bitLen(n: bigint): number {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number): bigint {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean): bigint {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number): bigint => (_1n << BigInt(n)) - _1n;\n\n// DRBG\n\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  const u8n = (len: number) => new Uint8Array(len); // creates Uint8Array\n  const u8of = (byte: number) => Uint8Array.of(byte); // another shortcut\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n(0)) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8of(0x00), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8of(0x01), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes_(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any): boolean => typeof val === 'bigint',\n  function: (val: any): boolean => typeof val === 'function',\n  boolean: (val: any): boolean => typeof val === 'boolean',\n  string: (val: any): boolean => typeof val === 'string',\n  stringOrUint8Array: (val: any): boolean => typeof val === 'string' || isBytes_(val),\n  isSafeInteger: (val: any): boolean => Number.isSafeInteger(val),\n  array: (val: any): boolean => Array.isArray(val),\n  field: (val: any, object: any): any => (object as any).Fp.isValid(val),\n  hash: (val: any): boolean => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n): T {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function') throw new Error('invalid validator function');\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        'param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n\nexport function isHash(val: CHash): boolean {\n  return typeof val === 'function' && Number.isSafeInteger(val.outputLen);\n}\nexport function _validateObject(\n  object: Record<string, any>,\n  fields: Record<string, string>,\n  optFields: Record<string, string> = {}\n): void {\n  if (!object || typeof object !== 'object') throw new Error('expected valid options object');\n  type Item = keyof typeof object;\n  function checkField(fieldName: Item, expectedType: string, isOpt: boolean) {\n    const val = object[fieldName];\n    if (isOpt && val === undefined) return;\n    const current = typeof val;\n    if (current !== expectedType || val === null)\n      throw new Error(`param \"${fieldName}\" is invalid: expected ${expectedType}, got ${current}`);\n  }\n  Object.entries(fields).forEach(([k, v]) => checkField(k, v, false));\n  Object.entries(optFields).forEach(([k, v]) => checkField(k, v, true));\n}\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = (): never => {\n  throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized<T extends object, R, O extends any[]>(\n  fn: (arg: T, ...args: O) => R\n): (arg: T, ...args: O) => R {\n  const map = new WeakMap<T, R>();\n  return (arg: T, ...args: O): R => {\n    const val = map.get(arg);\n    if (val !== undefined) return val;\n    const computed = fn(arg, ...args);\n    map.set(arg, computed);\n    return computed;\n  };\n}\n", "/**\n * Utils for modular division and fields.\n * Field over 11 is a finite (Galois) field is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n  _validateObject,\n  anumber,\n  bitMask,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  numberToBytesBE,\n  numberToBytesLE,\n} from '../utils.ts';\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3);\n// prettier-ignore\nconst _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _7n = /* @__PURE__ */ BigInt(7);\n// prettier-ignore\nconst _8n = /* @__PURE__ */ BigInt(8), _9n = /* @__PURE__ */ BigInt(9), _16n = /* @__PURE__ */ BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  return FpPow(Field(modulo), num, power);\n}\n\n/** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n/**\n * Inverses number over modulo.\n * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).\n */\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n) throw new Error('invert: expected non-zero number');\n  if (modulo <= _0n) throw new Error('invert: expected positive modulus, got ' + modulo);\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\nfunction assertIsSquare<T>(Fp: IField<T>, root: T, n: T): void {\n  if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n}\n\n// Not all roots are possible! Example which will throw:\n// const NUM =\n// n = 72057594037927816n;\n// Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));\nfunction sqrt3mod4<T>(Fp: IField<T>, n: T) {\n  const p1div4 = (Fp.ORDER + _1n) / _4n;\n  const root = Fp.pow(n, p1div4);\n  assertIsSquare(Fp, root, n);\n  return root;\n}\n\nfunction sqrt5mod8<T>(Fp: IField<T>, n: T) {\n  const p5div8 = (Fp.ORDER - _5n) / _8n;\n  const n2 = Fp.mul(n, _2n);\n  const v = Fp.pow(n2, p5div8);\n  const nv = Fp.mul(n, v);\n  const i = Fp.mul(Fp.mul(nv, _2n), v);\n  const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n  assertIsSquare(Fp, root, n);\n  return root;\n}\n\n// Based on RFC9380, Kong algorithm\n// prettier-ignore\nfunction sqrt9mod16(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  const Fp_ = Field(P);\n  const tn = tonelliShanks(P);\n  const c1 = tn(Fp_, Fp_.neg(Fp_.ONE));//  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n  const c2 = tn(Fp_, c1);              //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n  const c3 = tn(Fp_, Fp_.neg(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n  const c4 = (P + _7n) / _16n;         //  4. c4 = (q + 7) / 16        # Integer arithmetic\n  return <T>(Fp: IField<T>, n: T) => {\n    let tv1 = Fp.pow(n, c4);           //  1. tv1 = x^c4\n    let tv2 = Fp.mul(tv1, c1);         //  2. tv2 = c1 * tv1\n    const tv3 = Fp.mul(tv1, c2);       //  3. tv3 = c2 * tv1\n    const tv4 = Fp.mul(tv1, c3);       //  4. tv4 = c3 * tv1\n    const e1 = Fp.eql(Fp.sqr(tv2), n); //  5.  e1 = (tv2^2) == x\n    const e2 = Fp.eql(Fp.sqr(tv3), n); //  6.  e2 = (tv3^2) == x\n    tv1 = Fp.cmov(tv1, tv2, e1);       //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n    tv2 = Fp.cmov(tv4, tv3, e2);       //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n    const e3 = Fp.eql(Fp.sqr(tv2), n); //  9.  e3 = (tv2^2) == x\n    const root = Fp.cmov(tv1, tv2, e3);// 10.  z = CMOV(tv1, tv2, e3)   # Select sqrt from tv1 & tv2\n    assertIsSquare(Fp, root, n);\n    return root;\n  };\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  // Initialization (precomputation).\n  // Caching initialization could boost perf by 7%.\n  if (P < _3n) throw new Error('sqrt is not defined for small field');\n  // Factor P - 1 = Q * 2^S, where Q is odd\n  let Q = P - _1n;\n  let S = 0;\n  while (Q % _2n === _0n) {\n    Q /= _2n;\n    S++;\n  }\n\n  // Find the first quadratic non-residue Z >= 2\n  let Z = _2n;\n  const _Fp = Field(P);\n  while (FpLegendre(_Fp, Z) === 1) {\n    // Basic primality test for P. After x iterations, chance of\n    // not finding quadratic non-residue is 2^x, so 2^1000.\n    if (Z++ > 1000) throw new Error('Cannot find square root: probably non-prime P');\n  }\n  // Fast-path; usually done before Z, but we do \"primality test\".\n  if (S === 1) return sqrt3mod4;\n\n  // Slow-path\n  // TODO: test on Fp2 and others\n  let cc = _Fp.pow(Z, Q); // c = z^Q\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    if (Fp.is0(n)) return n;\n    // Check if n is a quadratic residue using Legendre symbol\n    if (FpLegendre(Fp, n) !== 1) throw new Error('Cannot find square root');\n\n    // Initialize variables for the main loop\n    let M = S;\n    let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp\n    let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor\n    let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root\n\n    // Main loop\n    // while t != 1\n    while (!Fp.eql(t, Fp.ONE)) {\n      if (Fp.is0(t)) return Fp.ZERO; // if t=0 return R=0\n      let i = 1;\n\n      // Find the smallest i >= 1 such that t^(2^i) \u2261 1 (mod P)\n      let t_tmp = Fp.sqr(t); // t^(2^1)\n      while (!Fp.eql(t_tmp, Fp.ONE)) {\n        i++;\n        t_tmp = Fp.sqr(t_tmp); // t^(2^2)...\n        if (i === M) throw new Error('Cannot find square root');\n      }\n\n      // Calculate the exponent for b: 2^(M - i - 1)\n      const exponent = _1n << BigInt(M - i - 1); // bigint is important\n      const b = Fp.pow(c, exponent); // b = 2^(M - i - 1)\n\n      // Update variables\n      M = i;\n      c = Fp.sqr(b); // c = b^2\n      t = Fp.mul(t, c); // t = (t * b^2)\n      R = Fp.mul(R, b); // R = R*b\n    }\n    return R;\n  };\n}\n\n/**\n * Square root for a finite field. Will try optimized versions first:\n *\n * 1. P \u2261 3 (mod 4)\n * 2. P \u2261 5 (mod 8)\n * 3. P \u2261 9 (mod 16)\n * 4. Tonelli-Shanks algorithm\n *\n * Different algorithms can give different roots, it is up to user to decide which one they want.\n * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n */\nexport function FpSqrt(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  // P \u2261 3 (mod 4) => \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) return sqrt3mod4;\n  // P \u2261 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf\n  if (P % _8n === _5n) return sqrt5mod8;\n  // P \u2261 9 (mod 16) => Kong algorithm, page 11 of https://eprint.iacr.org/2012/685.pdf (algorithm 4)\n  if (P % _16n === _9n) return sqrt9mod16(P);\n  // Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint): boolean =>\n  (mod(num, modulo) & _1n) === _1n;\n\n/** Field is not always over prime: for example, Fp2 has ORDER(q)=p^m. */\nexport interface IField<T> {\n  ORDER: bigint;\n  isLE: boolean;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  isValidNot0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  allowedLengths?: number[];\n  // legendre?(num: T): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array, skipValidation?: boolean): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>): IField<T> {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'number',\n    BITS: 'number',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  _validateObject(field, opts);\n  // const max = 16384;\n  // if (field.BYTES < 1 || field.BYTES > max) throw new Error('invalid field');\n  // if (field.BITS < 1 || field.BITS > 8 * max) throw new Error('invalid field');\n  return field;\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(Fp: IField<T>, num: T, power: bigint): T {\n  if (power < _0n) throw new Error('invalid exponent, negatives unsupported');\n  if (power === _0n) return Fp.ONE;\n  if (power === _1n) return num;\n  let p = Fp.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = Fp.mul(p, d);\n    d = Fp.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * Exception-free. Will return `undefined` for 0 elements.\n * @param passZero map 0 to 0 (instead of undefined)\n */\nexport function FpInvertBatch<T>(Fp: IField<T>, nums: T[], passZero = false): T[] {\n  const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined);\n  // Walk from first to last, multiply them by each other MOD p\n  const multipliedAcc = nums.reduce((acc, num, i) => {\n    if (Fp.is0(num)) return acc;\n    inverted[i] = acc;\n    return Fp.mul(acc, num);\n  }, Fp.ONE);\n  // Invert last element\n  const invertedAcc = Fp.inv(multipliedAcc);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (Fp.is0(num)) return acc;\n    inverted[i] = Fp.mul(acc, inverted[i]);\n    return Fp.mul(acc, num);\n  }, invertedAcc);\n  return inverted;\n}\n\n// TODO: remove\nexport function FpDiv<T>(Fp: IField<T>, lhs: T, rhs: T | bigint): T {\n  return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs));\n}\n\n/**\n * Legendre symbol.\n * Legendre constant is used to calculate Legendre symbol (a | p)\n * which denotes the value of a^((p-1)/2) (mod p).\n *\n * * (a | p) \u2261 1    if a is a square (mod p), quadratic residue\n * * (a | p) \u2261 -1   if a is not a square (mod p), quadratic non residue\n * * (a | p) \u2261 0    if a \u2261 0 (mod p)\n */\nexport function FpLegendre<T>(Fp: IField<T>, n: T): -1 | 0 | 1 {\n  // We can use 3rd argument as optional cache of this value\n  // but seems unneeded for now. The operation is very fast.\n  const p1mod2 = (Fp.ORDER - _1n) / _2n;\n  const powered = Fp.pow(n, p1mod2);\n  const yes = Fp.eql(powered, Fp.ONE);\n  const zero = Fp.eql(powered, Fp.ZERO);\n  const no = Fp.eql(powered, Fp.neg(Fp.ONE));\n  if (!yes && !zero && !no) throw new Error('invalid Legendre symbol result');\n  return yes ? 1 : zero ? 0 : -1;\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(Fp: IField<T>, n: T): boolean {\n  const l = FpLegendre(Fp, n);\n  return l === 1;\n}\n\nexport type NLength = { nByteLength: number; nBitLength: number };\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number): NLength {\n  // Bit size, byte size of CURVE.n\n  if (nBitLength !== undefined) anumber(nBitLength);\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\ntype SqrtFn = (n: bigint) => bigint;\ntype FieldOpts = Partial<{\n  sqrt: SqrtFn;\n  isLE: boolean;\n  BITS: number;\n  modFromBytes: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  allowedLengths?: readonly number[]; // for P521 (adds padding for smaller sizes)\n}>;\n/**\n * Creates a finite field. Major performance optimizations:\n * * 1. Denormalized operations like mulN instead of mul.\n * * 2. Identical object shape: never add or remove keys.\n * * 3. `Object.freeze`.\n * Fragile: always run a benchmark on a change.\n * Security note: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you're doing.\n *\n * Note about field properties:\n * * CHARACTERISTIC p = prime number, number of elements in main subgroup.\n * * ORDER q = similar to cofactor in curves, may be composite `q = p^m`.\n *\n * @param ORDER field order, probably prime, or could be composite\n * @param bitLen how many bits the field consumes\n * @param isLE (default: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLenOrOpts?: number | FieldOpts, // TODO: use opts only in v2?\n  isLE = false,\n  opts: { sqrt?: SqrtFn } = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n  let _nbitLength: number | undefined = undefined;\n  let _sqrt: SqrtFn | undefined = undefined;\n  let modFromBytes: boolean = false;\n  let allowedLengths: undefined | readonly number[] = undefined;\n  if (typeof bitLenOrOpts === 'object' && bitLenOrOpts != null) {\n    if (opts.sqrt || isLE) throw new Error('cannot specify opts in two arguments');\n    const _opts = bitLenOrOpts;\n    if (_opts.BITS) _nbitLength = _opts.BITS;\n    if (_opts.sqrt) _sqrt = _opts.sqrt;\n    if (typeof _opts.isLE === 'boolean') isLE = _opts.isLE;\n    if (typeof _opts.modFromBytes === 'boolean') modFromBytes = _opts.modFromBytes;\n    allowedLengths = _opts.allowedLengths;\n  } else {\n    if (typeof bitLenOrOpts === 'number') _nbitLength = bitLenOrOpts;\n    if (opts.sqrt) _sqrt = opts.sqrt;\n  }\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, _nbitLength);\n  if (BYTES > 2048) throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n  let sqrtP: ReturnType<typeof FpSqrt>; // cached sqrtP\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    isLE,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    allowedLengths: allowedLengths,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error('invalid field element: expected bigint, got ' + typeof num);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    // is valid and invertible\n    isValidNot0: (num: bigint) => !f.is0(num) && f.isValid(num),\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt:\n      _sqrt ||\n      ((n) => {\n        if (!sqrtP) sqrtP = FpSqrt(ORDER);\n        return sqrtP(f, n);\n      }),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes, skipValidation = true) => {\n      if (allowedLengths) {\n        if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) {\n          throw new Error(\n            'Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length\n          );\n        }\n        const padded = new Uint8Array(BYTES);\n        // isLE add 0 to right, !isLE to the left.\n        padded.set(bytes, isLE ? 0 : padded.length - bytes.length);\n        bytes = padded;\n      }\n      if (bytes.length !== BYTES)\n        throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n      let scalar = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n      if (modFromBytes) scalar = mod(scalar, ORDER);\n      if (!skipValidation)\n        if (!f.isValid(scalar)) throw new Error('invalid field element: outside of range 0..ORDER');\n      // NOTE: we don't validate scalar here, please use isValid. This done such way because some\n      // protocol may allow non-reduced scalar that reduced later or changed some other way.\n      return scalar;\n    },\n    // TODO: we don't need it here, move out to separate fn\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // We can't move this out because Fp6, Fp12 implement it\n    // and it's unclear what to return in there.\n    cmov: (a, b, c) => (c ? b : a),\n  } as FpField);\n  return Object.freeze(f);\n}\n\n// Generic random scalar, we can do same for other fields if via Fp2.mul(Fp2.ONE, Fp2.random)?\n// This allows unsafe methods like ignore bias or zero. These unsafe, but often used in different protocols (if deterministic RNG).\n// which mean we cannot force this via opts.\n// Not sure what to do with randomBytes, we can accept it inside opts if wanted.\n// Probably need to export getMinHashLength somewhere?\n// random(bytes?: Uint8Array, unsafeAllowZero = false, unsafeAllowBias = false) {\n//   const LEN = !unsafeAllowBias ? getMinHashLength(ORDER) : BYTES;\n//   if (bytes === undefined) bytes = randomBytes(LEN); // _opts.randomBytes?\n//   const num = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n//   // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n//   const reduced = unsafeAllowZero ? mod(num, ORDER) : mod(num, ORDER - _1n) + _1n;\n//   return reduced;\n// },\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T): T {\n  if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T): T {\n  if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use `mapKeyToField` instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(\n      'hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen\n    );\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n  const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { bitLen, bitMask, validateObject } from '../utils.ts';\nimport { Field, FpInvertBatch, nLength, validateField, type IField } from './modular.ts';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { Z?: never };\n\n// This was initialy do this way to re-use montgomery ladder in field (add->mul,double->sqr), but\n// that didn't happen and there is probably not much reason to have separate Group like this?\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n  toAffine?(invertedZ?: any): AffinePoint<any>;\n}\n\n// We can't \"abstract out\" coordinates (X, Y, Z; and T in Edwards): argument names of constructor\n// are not accessible. See Typescript gh-56093, gh-41594.\n//\n// We have to use recursive types, so it will return actual point, not constained `CurvePoint`.\n// If, at any point, P is `any`, it will erase all types and replace it\n// with `any`, because of recursion, `any implements CurvePoint`,\n// but we lose all constrains on methods.\n\n/** Base interface for all elliptic curve Points. */\nexport interface CurvePoint<F, P extends CurvePoint<F, P>> extends Group<P> {\n  /** Affine x coordinate. Different from projective / extended X coordinate. */\n  x: F;\n  /** Affine y coordinate. Different from projective / extended Y coordinate. */\n  y: F;\n  Z?: F;\n  double(): P;\n  negate(): P;\n  add(other: P): P;\n  subtract(other: P): P;\n  equals(other: P): boolean;\n  multiply(scalar: bigint): P;\n  assertValidity(): void;\n  clearCofactor(): P;\n  is0(): boolean;\n  isTorsionFree(): boolean;\n  isSmallOrder(): boolean;\n  multiplyUnsafe(scalar: bigint): P;\n  /**\n   * Massively speeds up `p.multiply(n)` by using precompute tables (caching). See {@link wNAF}.\n   * @param isLazy calculate cache now. Default (true) ensures it's deferred to first `multiply()`\n   */\n  precompute(windowSize?: number, isLazy?: boolean): P;\n  /** Converts point to 2D xy affine coordinates */\n  toAffine(invertedZ?: F): AffinePoint<F>;\n  toBytes(): Uint8Array;\n  toHex(): string;\n}\n\n/** Base interface for all elliptic curve Point constructors. */\nexport interface CurvePointCons<P extends CurvePoint<any, P>> {\n  [Symbol.hasInstance]: (item: unknown) => boolean;\n  BASE: P;\n  ZERO: P;\n  /** Field for basic curve math */\n  Fp: IField<P_F<P>>;\n  /** Scalar field, for scalars in multiply and others */\n  Fn: IField<bigint>;\n  /** Creates point from x, y. Does NOT validate if the point is valid. Use `.assertValidity()`. */\n  fromAffine(p: AffinePoint<P_F<P>>): P;\n  fromBytes(bytes: Uint8Array): P;\n  fromHex(hex: Uint8Array | string): P;\n}\n\n// Type inference helpers: PC - PointConstructor, P - Point, Fp - Field element\n// Short names, because we use them a lot in result types:\n// * we can't do 'P = GetCurvePoint<PC>': this is default value and doesn't constrain anything\n// * we can't do 'type X = GetCurvePoint<PC>': it won't be accesible for arguments/return types\n// * `CurvePointCons<P extends CurvePoint<any, P>>` constraints from interface definition\n//   won't propagate, if `PC extends CurvePointCons<any>`: the P would be 'any', which is incorrect\n// * PC could be super specific with super specific P, which implements CurvePoint<any, P>.\n//   this means we need to do stuff like\n//   `function test<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(`\n//   if we want type safety around P, otherwise PC_P<PC> will be any\n\n/** Returns Fp type from Point (P_F<P> == P.F) */\nexport type P_F<P extends CurvePoint<any, P>> = P extends CurvePoint<infer F, P> ? F : never;\n/** Returns Fp type from PointCons (PC_F<PC> == PC.P.F) */\nexport type PC_F<PC extends CurvePointCons<CurvePoint<any, any>>> = PC['Fp']['ZERO'];\n/** Returns Point type from PointCons (PC_P<PC> == PC.P) */\nexport type PC_P<PC extends CurvePointCons<CurvePoint<any, any>>> = PC['ZERO'];\n\n// Ugly hack to get proper type inference, because in typescript fails to infer resursively.\n// The hack allows to do up to 10 chained operations without applying type erasure.\n//\n// Types which won't work:\n// * `CurvePointCons<CurvePoint<any, any>>`, will return `any` after 1 operation\n// * `CurvePointCons<any>: WeierstrassPointCons<bigint> extends CurvePointCons<any> = false`\n// * `P extends CurvePoint, PC extends CurvePointCons<P>`\n//     * It can't infer P from PC alone\n//     * Too many relations between F, P & PC\n//     * It will infer P/F if `arg: CurvePointCons<F, P>`, but will fail if PC is generic\n//     * It will work correctly if there is an additional argument of type P\n//     * But generally, we don't want to parametrize `CurvePointCons` over `F`: it will complicate\n//       types, making them un-inferable\n// prettier-ignore\nexport type PC_ANY = CurvePointCons<\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any, any>\n  >>>>>>>>>\n>;\n\nexport interface CurveLengths {\n  secretKey?: number;\n  publicKey?: number;\n  publicKeyUncompressed?: number;\n  publicKeyHasPrefix?: boolean;\n  signature?: number;\n  seed?: number;\n}\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\n/** @deprecated */\nexport type ExtendedGroupConstructor<T> = GroupConstructor<T> & {\n  Fp: IField<any>;\n  Fn: IField<bigint>;\n  fromAffine(ap: AffinePoint<any>): T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\nexport function negateCt<T extends { negate: () => T }>(condition: boolean, item: T): T {\n  const neg = item.negate();\n  return condition ? neg : item;\n}\n\n/**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n */\nexport function normalizeZ<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  c: PC,\n  points: P[]\n): P[] {\n  const invertedZs = FpInvertBatch(\n    c.Fp,\n    points.map((p) => p.Z!)\n  );\n  return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i])));\n}\n\nfunction validateW(W: number, bits: number) {\n  if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n    throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\n\n/** Internal wNAF opts for specific W and scalarBits */\nexport type WOpts = {\n  windows: number;\n  windowSize: number;\n  mask: bigint;\n  maxNumber: number;\n  shiftBy: bigint;\n};\n\nfunction calcWOpts(W: number, scalarBits: number): WOpts {\n  validateW(W, scalarBits);\n  const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero\n  const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero\n  const maxNumber = 2 ** W; // W=8 256\n  const mask = bitMask(W); // W=8 255 == mask 0b11111111\n  const shiftBy = BigInt(W); // W=8 8\n  return { windows, windowSize, mask, maxNumber, shiftBy };\n}\n\nfunction calcOffsets(n: bigint, window: number, wOpts: WOpts) {\n  const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n  let wbits = Number(n & mask); // extract W bits.\n  let nextN = n >> shiftBy; // shift number by W bits.\n\n  // What actually happens here:\n  // const highestBit = Number(mask ^ (mask >> 1n));\n  // let wbits2 = wbits - 1; // skip zero\n  // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~);\n\n  // split if bits > max: +224 => 256-32\n  if (wbits > windowSize) {\n    // we skip zero, which means instead of `>= size-1`, we do `> size`\n    wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here.\n    nextN += _1n; // +256 (carry)\n  }\n  const offsetStart = window * windowSize;\n  const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero\n  const isZero = wbits === 0; // is current window slice a 0?\n  const isNeg = wbits < 0; // is current window slice negative?\n  const isNegF = window % 2 !== 0; // fake random statement for noise\n  const offsetF = offsetStart; // fake offset for noise\n  return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\n\nfunction validateMSMPoints(points: any[], c: any) {\n  if (!Array.isArray(points)) throw new Error('array expected');\n  points.forEach((p, i) => {\n    if (!(p instanceof c)) throw new Error('invalid point at index ' + i);\n  });\n}\nfunction validateMSMScalars(scalars: any[], field: any) {\n  if (!Array.isArray(scalars)) throw new Error('array of scalars expected');\n  scalars.forEach((s, i) => {\n    if (!field.isValid(s)) throw new Error('invalid scalar at index ' + i);\n  });\n}\n\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes.\n// Allows to make points frozen / immutable.\nconst pointPrecomputes = new WeakMap<any, any[]>();\nconst pointWindowSizes = new WeakMap<any, number>();\n\nfunction getW(P: any): number {\n  // To disable precomputes:\n  // return 1;\n  return pointWindowSizes.get(P) || 1;\n}\n\nfunction assert0(n: bigint): void {\n  if (n !== _0n) throw new Error('invalid wNAF');\n}\n\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Table generation takes **30MB of ram and 10ms on high-end CPU**,\n * but may take much longer on slow devices. Actual generation will happen on\n * first call of `multiply()`. By default, `BASE` point is precomputed.\n *\n * Scalars should always be less than curve order: this should be checked inside of a curve itself.\n * Creates precomputation tables for fast multiplication:\n * - private scalar is split by fixed size windows of W bits\n * - every window point is collected from window's table & added to accumulator\n * - since windows are different, same point inside tables won't be accessed more than once per calc\n * - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n * - +1 window is neccessary for wNAF\n * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n *\n * @todo Research returning 2d JS array of windows, instead of a single window.\n * This would allow windows to be in different memory locations\n */\nexport class wNAF<PC extends PC_ANY> {\n  private readonly BASE: PC_P<PC>;\n  private readonly ZERO: PC_P<PC>;\n  private readonly Fn: PC['Fn'];\n  readonly bits: number;\n\n  // Parametrized with a given Point class (not individual point)\n  constructor(Point: PC, bits: number) {\n    this.BASE = Point.BASE;\n    this.ZERO = Point.ZERO;\n    this.Fn = Point.Fn;\n    this.bits = bits;\n  }\n\n  // non-const time multiplication ladder\n  _unsafeLadder(elm: PC_P<PC>, n: bigint, p: PC_P<PC> = this.ZERO): PC_P<PC> {\n    let d: PC_P<PC> = elm;\n    while (n > _0n) {\n      if (n & _1n) p = p.add(d);\n      d = d.double();\n      n >>= _1n;\n    }\n    return p;\n  }\n\n  /**\n   * Creates a wNAF precomputation window. Used for caching.\n   * Default window size is set by `utils.precompute()` and is equal to 8.\n   * Number of precomputed points depends on the curve size:\n   * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n   * - \uD835\uDC4A is the window size\n   * - \uD835\uDC5B is the bitlength of the curve order.\n   * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n   * @param point Point instance\n   * @param W window size\n   * @returns precomputed point tables flattened to a single array\n   */\n  private precomputeWindow(point: PC_P<PC>, W: number): PC_P<PC>[] {\n    const { windows, windowSize } = calcWOpts(W, this.bits);\n    const points: PC_P<PC>[] = [];\n    let p: PC_P<PC> = point;\n    let base = p;\n    for (let window = 0; window < windows; window++) {\n      base = p;\n      points.push(base);\n      // i=1, bc we skip 0\n      for (let i = 1; i < windowSize; i++) {\n        base = base.add(p);\n        points.push(base);\n      }\n      p = base.double();\n    }\n    return points;\n  }\n\n  /**\n   * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n   * More compact implementation:\n   * https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n   * @returns real and fake (for const-time) points\n   */\n  private wNAF(W: number, precomputes: PC_P<PC>[], n: bigint): { p: PC_P<PC>; f: PC_P<PC> } {\n    // Scalar should be smaller than field order\n    if (!this.Fn.isValid(n)) throw new Error('invalid scalar');\n    // Accumulators\n    let p = this.ZERO;\n    let f = this.BASE;\n    // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n    // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n    // there is negate now: it is possible that negated element from low value\n    // would be the same as high element, which will create carry into next window.\n    // It's not obvious how this can fail, but still worth investigating later.\n    const wo = calcWOpts(W, this.bits);\n    for (let window = 0; window < wo.windows; window++) {\n      // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise\n      const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo);\n      n = nextN;\n      if (isZero) {\n        // bits are 0: add garbage to fake point\n        // Important part for const-time getPublicKey: add random \"noise\" point to f.\n        f = f.add(negateCt(isNegF, precomputes[offsetF]));\n      } else {\n        // bits are 1: add to result point\n        p = p.add(negateCt(isNeg, precomputes[offset]));\n      }\n    }\n    assert0(n);\n    // Return both real and fake points: JIT won't eliminate f.\n    // At this point there is a way to F be infinity-point even if p is not,\n    // which makes it less const-time: around 1 bigint multiply.\n    return { p, f };\n  }\n\n  /**\n   * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n   * @param acc accumulator point to add result of multiplication\n   * @returns point\n   */\n  private wNAFUnsafe(\n    W: number,\n    precomputes: PC_P<PC>[],\n    n: bigint,\n    acc: PC_P<PC> = this.ZERO\n  ): PC_P<PC> {\n    const wo = calcWOpts(W, this.bits);\n    for (let window = 0; window < wo.windows; window++) {\n      if (n === _0n) break; // Early-exit, skip 0 value\n      const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo);\n      n = nextN;\n      if (isZero) {\n        // Window bits are 0: skip processing.\n        // Move to next window.\n        continue;\n      } else {\n        const item = precomputes[offset];\n        acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM\n      }\n    }\n    assert0(n);\n    return acc;\n  }\n\n  private getPrecomputes(W: number, point: PC_P<PC>, transform?: Mapper<PC_P<PC>>): PC_P<PC>[] {\n    // Calculate precomputes on a first run, reuse them after\n    let comp = pointPrecomputes.get(point);\n    if (!comp) {\n      comp = this.precomputeWindow(point, W) as PC_P<PC>[];\n      if (W !== 1) {\n        // Doing transform outside of if brings 15% perf hit\n        if (typeof transform === 'function') comp = transform(comp);\n        pointPrecomputes.set(point, comp);\n      }\n    }\n    return comp;\n  }\n\n  cached(\n    point: PC_P<PC>,\n    scalar: bigint,\n    transform?: Mapper<PC_P<PC>>\n  ): { p: PC_P<PC>; f: PC_P<PC> } {\n    const W = getW(point);\n    return this.wNAF(W, this.getPrecomputes(W, point, transform), scalar);\n  }\n\n  unsafe(point: PC_P<PC>, scalar: bigint, transform?: Mapper<PC_P<PC>>, prev?: PC_P<PC>): PC_P<PC> {\n    const W = getW(point);\n    if (W === 1) return this._unsafeLadder(point, scalar, prev); // For W=1 ladder is ~x2 faster\n    return this.wNAFUnsafe(W, this.getPrecomputes(W, point, transform), scalar, prev);\n  }\n\n  // We calculate precomputes for elliptic curve point multiplication\n  // using windowed method. This specifies window size and\n  // stores precomputed values. Usually only base point would be precomputed.\n  createCache(P: PC_P<PC>, W: number): void {\n    validateW(W, this.bits);\n    pointWindowSizes.set(P, W);\n    pointPrecomputes.delete(P);\n  }\n\n  hasCache(elm: PC_P<PC>): boolean {\n    return getW(elm) !== 1;\n  }\n}\n\n/**\n * Endomorphism-specific multiplication for Koblitz curves.\n * Cost: 128 dbl, 0-256 adds.\n */\nexport function mulEndoUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  Point: PC,\n  point: P,\n  k1: bigint,\n  k2: bigint\n): { p1: P; p2: P } {\n  let acc = point;\n  let p1 = Point.ZERO;\n  let p2 = Point.ZERO;\n  while (k1 > _0n || k2 > _0n) {\n    if (k1 & _1n) p1 = p1.add(acc);\n    if (k2 & _1n) p2 = p2.add(acc);\n    acc = acc.double();\n    k1 >>= _1n;\n    k2 >>= _1n;\n  }\n  return { p1, p2 };\n}\n\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster than precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka secret keys / bigints)\n */\nexport function pippenger<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  c: PC,\n  fieldN: IField<bigint>,\n  points: P[],\n  scalars: bigint[]\n): P {\n  // If we split scalars by some window (let's say 8 bits), every chunk will only\n  // take 256 buckets even if there are 4096 scalars, also re-uses double.\n  // TODO:\n  // - https://eprint.iacr.org/2024/750.pdf\n  // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n  // 0 is accepted in scalars\n  validateMSMPoints(points, c);\n  validateMSMScalars(scalars, fieldN);\n  const plength = points.length;\n  const slength = scalars.length;\n  if (plength !== slength) throw new Error('arrays of points and scalars must have equal length');\n  // if (plength === 0) throw new Error('array must be of length >= 2');\n  const zero = c.ZERO;\n  const wbits = bitLen(BigInt(plength));\n  let windowSize = 1; // bits\n  if (wbits > 12) windowSize = wbits - 3;\n  else if (wbits > 4) windowSize = wbits - 2;\n  else if (wbits > 0) windowSize = 2;\n  const MASK = bitMask(windowSize);\n  const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array\n  const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n  let sum = zero;\n  for (let i = lastBits; i >= 0; i -= windowSize) {\n    buckets.fill(zero);\n    for (let j = 0; j < slength; j++) {\n      const scalar = scalars[j];\n      const wbits = Number((scalar >> BigInt(i)) & MASK);\n      buckets[wbits] = buckets[wbits].add(points[j]);\n    }\n    let resI = zero; // not using this will do small speed-up, but will lose ct\n    // Skip first bucket, because it is zero\n    for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n      sumI = sumI.add(buckets[j]);\n      resI = resI.add(sumI);\n    }\n    sum = sum.add(resI);\n    if (i !== 0) for (let j = 0; j < windowSize; j++) sum = sum.double();\n  }\n  return sum as P;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nexport function precomputeMSMUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  c: PC,\n  fieldN: IField<bigint>,\n  points: P[],\n  windowSize: number\n): (scalars: bigint[]) => P {\n  /**\n   * Performance Analysis of Window-based Precomputation\n   *\n   * Base Case (256-bit scalar, 8-bit window):\n   * - Standard precomputation requires:\n   *   - 31 additions per scalar \u00D7 256 scalars = 7,936 ops\n   *   - Plus 255 summary additions = 8,191 total ops\n   *   Note: Summary additions can be optimized via accumulator\n   *\n   * Chunked Precomputation Analysis:\n   * - Using 32 chunks requires:\n   *   - 255 additions per chunk\n   *   - 256 doublings\n   *   - Total: (255 \u00D7 32) + 256 = 8,416 ops\n   *\n   * Memory Usage Comparison:\n   * Window Size | Standard Points | Chunked Points\n   * ------------|-----------------|---------------\n   *     4-bit   |     520         |      15\n   *     8-bit   |    4,224        |     255\n   *    10-bit   |   13,824        |   1,023\n   *    16-bit   |  557,056        |  65,535\n   *\n   * Key Advantages:\n   * 1. Enables larger window sizes due to reduced memory overhead\n   * 2. More efficient for smaller scalar counts:\n   *    - 16 chunks: (16 \u00D7 255) + 256 = 4,336 ops\n   *    - ~2x faster than standard 8,191 ops\n   *\n   * Limitations:\n   * - Not suitable for plain precomputes (requires 256 constant doublings)\n   * - Performance degrades with larger scalar counts:\n   *   - Optimal for ~256 scalars\n   *   - Less efficient for 4096+ scalars (Pippenger preferred)\n   */\n  validateW(windowSize, fieldN.BITS);\n  validateMSMPoints(points, c);\n  const zero = c.ZERO;\n  const tableSize = 2 ** windowSize - 1; // table size (without zero)\n  const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n  const MASK = bitMask(windowSize);\n  const tables = points.map((p: P) => {\n    const res = [];\n    for (let i = 0, acc = p; i < tableSize; i++) {\n      res.push(acc);\n      acc = acc.add(p);\n    }\n    return res;\n  });\n  return (scalars: bigint[]): P => {\n    validateMSMScalars(scalars, fieldN);\n    if (scalars.length > points.length)\n      throw new Error('array of scalars must be smaller than array of points');\n    let res = zero;\n    for (let i = 0; i < chunks; i++) {\n      // No need to double if accumulator is still zero.\n      if (res !== zero) for (let j = 0; j < windowSize; j++) res = res.double();\n      const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n      for (let j = 0; j < scalars.length; j++) {\n        const n = scalars[j];\n        const curr = Number((n >> shiftBy) & MASK);\n        if (!curr) continue; // skip zero scalars chunks\n        res = res.add(tables[j][curr - 1]);\n      }\n    }\n    return res;\n  };\n}\n\n// TODO: remove\n/**\n * Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n * Though generator can be different (Fp2 / Fp6 for BLS).\n */\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\n// TODO: remove\n/** @deprecated */\nexport function validateBasic<FP, T>(\n  curve: BasicCurve<FP> & T\n): Readonly<\n  {\n    readonly nBitLength: number;\n    readonly nByteLength: number;\n  } & BasicCurve<FP> &\n    T & {\n      p: bigint;\n    }\n> {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n\nexport type ValidCurveParams<T> = {\n  p: bigint;\n  n: bigint;\n  h: bigint;\n  a: T;\n  b?: T;\n  d?: T;\n  Gx: T;\n  Gy: T;\n};\n\nfunction createField<T>(order: bigint, field?: IField<T>, isLE?: boolean): IField<T> {\n  if (field) {\n    if (field.ORDER !== order) throw new Error('Field.ORDER must match order: Fp == p, Fn == n');\n    validateField(field);\n    return field;\n  } else {\n    return Field(order, { isLE }) as unknown as IField<T>;\n  }\n}\nexport type FpFn<T> = { Fp: IField<T>; Fn: IField<bigint> };\n\n/** Validates CURVE opts and creates fields */\nexport function _createCurveFields<T>(\n  type: 'weierstrass' | 'edwards',\n  CURVE: ValidCurveParams<T>,\n  curveOpts: Partial<FpFn<T>> = {},\n  FpFnLE?: boolean\n): FpFn<T> & { CURVE: ValidCurveParams<T> } {\n  if (FpFnLE === undefined) FpFnLE = type === 'edwards';\n  if (!CURVE || typeof CURVE !== 'object') throw new Error(`expected valid ${type} CURVE object`);\n  for (const p of ['p', 'n', 'h'] as const) {\n    const val = CURVE[p];\n    if (!(typeof val === 'bigint' && val > _0n))\n      throw new Error(`CURVE.${p} must be positive bigint`);\n  }\n  const Fp = createField(CURVE.p, curveOpts.Fp, FpFnLE);\n  const Fn = createField(CURVE.n, curveOpts.Fn, FpFnLE);\n  const _b: 'b' | 'd' = type === 'weierstrass' ? 'b' : 'd';\n  const params = ['Gx', 'Gy', 'a', _b] as const;\n  for (const p of params) {\n    // @ts-ignore\n    if (!Fp.isValid(CURVE[p]))\n      throw new Error(`CURVE.${p} must be valid field element of CURVE.Fp`);\n  }\n  CURVE = Object.freeze(Object.assign({}, CURVE));\n  return { CURVE, Fp, Fn };\n}\n", "/**\n * Short Weierstrass curve methods. The formula is: y\u00B2 = x\u00B3 + ax + b.\n *\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance\n * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create\n * unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * @todo https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac as nobleHmac } from '@noble/hashes/hmac.js';\nimport { ahash } from '@noble/hashes/utils';\nimport {\n  _validateObject,\n  _abool2 as abool,\n  _abytes2 as abytes,\n  aInRange,\n  bitLen,\n  bitMask,\n  bytesToHex,\n  bytesToNumberBE,\n  concatBytes,\n  createHmacDrbg,\n  ensureBytes,\n  hexToBytes,\n  inRange,\n  isBytes,\n  memoized,\n  numberToHexUnpadded,\n  randomBytes as randomBytesWeb,\n  type CHash,\n  type Hex,\n  type PrivKey,\n} from '../utils.ts';\nimport {\n  _createCurveFields,\n  mulEndoUnsafe,\n  negateCt,\n  normalizeZ,\n  pippenger,\n  wNAF,\n  type AffinePoint,\n  type BasicCurve,\n  type CurveLengths,\n  type CurvePoint,\n  type CurvePointCons,\n} from './curve.ts';\nimport {\n  Field,\n  FpInvertBatch,\n  getMinHashLength,\n  mapHashToField,\n  nLength,\n  validateField,\n  type IField,\n  type NLength,\n} from './modular.ts';\n\nexport type { AffinePoint };\nexport type HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\n\ntype EndoBasis = [[bigint, bigint], [bigint, bigint]];\n/**\n * When Weierstrass curve has `a=0`, it becomes Koblitz curve.\n * Koblitz curves allow using **efficiently-computable GLV endomorphism \u03C8**.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n *\n * Endomorphism consists of beta, lambda and splitScalar:\n *\n * 1. GLV endomorphism \u03C8 transforms a point: `P = (x, y) \u21A6 \u03C8(P) = (\u03B2\u00B7x mod p, y)`\n * 2. GLV scalar decomposition transforms a scalar: `k \u2261 k\u2081 + k\u2082\u00B7\u03BB (mod n)`\n * 3. Then these are combined: `k\u00B7P = k\u2081\u00B7P + k\u2082\u00B7\u03C8(P)`\n * 4. Two 128-bit point-by-scalar multiplications + one point addition is faster than\n *    one 256-bit multiplication.\n *\n * where\n * * beta: \u03B2 \u2208 F\u209A with \u03B2\u00B3 = 1, \u03B2 \u2260 1\n * * lambda: \u03BB \u2208 F\u2099 with \u03BB\u00B3 = 1, \u03BB \u2260 1\n * * splitScalar decomposes k \u21A6 k\u2081, k\u2082, by using reduced basis vectors.\n *   Gauss lattice reduction calculates them from initial basis vectors `(n, 0), (-\u03BB, 0)`\n *\n * Check out `test/misc/endomorphism.js` and\n * [gist](https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066).\n */\nexport type EndomorphismOpts = {\n  beta: bigint;\n  basises?: EndoBasis;\n  splitScalar?: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\n\n// We construct basis in such way that den is always positive and equals n, but num sign depends on basis (not on secret value)\nconst divNearest = (num: bigint, den: bigint) => (num + (num >= 0 ? den : -den) / _2n) / den;\n\nexport type ScalarEndoParts = { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n\n/**\n * Splits scalar for GLV endomorphism.\n */\nexport function _splitEndoScalar(k: bigint, basis: EndoBasis, n: bigint): ScalarEndoParts {\n  // Split scalar into two such that part is ~half bits: `abs(part) < sqrt(N)`\n  // Since part can be negative, we need to do this on point.\n  // TODO: verifyScalar function which consumes lambda\n  const [[a1, b1], [a2, b2]] = basis;\n  const c1 = divNearest(b2 * k, n);\n  const c2 = divNearest(-b1 * k, n);\n  // |k1|/|k2| is < sqrt(N), but can be negative.\n  // If we do `k1 mod N`, we'll get big scalar (`> sqrt(N)`): so, we do cheaper negation instead.\n  let k1 = k - c1 * a1 - c2 * a2;\n  let k2 = -c1 * b1 - c2 * b2;\n  const k1neg = k1 < _0n;\n  const k2neg = k2 < _0n;\n  if (k1neg) k1 = -k1;\n  if (k2neg) k2 = -k2;\n  // Double check that resulting scalar less than half bits of N: otherwise wNAF will fail.\n  // This should only happen on wrong basises. Also, math inside is too complex and I don't trust it.\n  const MAX_NUM = bitMask(Math.ceil(bitLen(n) / 2)) + _1n; // Half bits of N\n  if (k1 < _0n || k1 >= MAX_NUM || k2 < _0n || k2 >= MAX_NUM) {\n    throw new Error('splitScalar (endomorphism): failed, k=' + k);\n  }\n  return { k1neg, k1, k2neg, k2 };\n}\n\nexport type ECDSASigFormat = 'compact' | 'recovered' | 'der';\nexport type ECDSARecoverOpts = {\n  prehash?: boolean;\n};\nexport type ECDSAVerifyOpts = {\n  prehash?: boolean;\n  lowS?: boolean;\n  format?: ECDSASigFormat;\n};\nexport type ECDSASignOpts = {\n  prehash?: boolean;\n  lowS?: boolean;\n  format?: ECDSASigFormat;\n  extraEntropy?: Uint8Array | boolean;\n};\n\nfunction validateSigFormat(format: string): ECDSASigFormat {\n  if (!['compact', 'recovered', 'der'].includes(format))\n    throw new Error('Signature format must be \"compact\", \"recovered\", or \"der\"');\n  return format as ECDSASigFormat;\n}\n\nfunction validateSigOpts<T extends ECDSASignOpts, D extends Required<ECDSASignOpts>>(\n  opts: T,\n  def: D\n): Required<ECDSASignOpts> {\n  const optsn: ECDSASignOpts = {};\n  for (let optName of Object.keys(def)) {\n    // @ts-ignore\n    optsn[optName] = opts[optName] === undefined ? def[optName] : opts[optName];\n  }\n  abool(optsn.lowS!, 'lowS');\n  abool(optsn.prehash!, 'prehash');\n  if (optsn.format !== undefined) validateSigFormat(optsn.format);\n  return optsn as Required<ECDSASignOpts>;\n}\n\n/** Instance methods for 3D XYZ projective points. */\nexport interface WeierstrassPoint<T> extends CurvePoint<T, WeierstrassPoint<T>> {\n  /** projective X coordinate. Different from affine x. */\n  readonly X: T;\n  /** projective Y coordinate. Different from affine y. */\n  readonly Y: T;\n  /** projective z coordinate */\n  readonly Z: T;\n  /** affine x coordinate. Different from projective X. */\n  get x(): T;\n  /** affine y coordinate. Different from projective Y. */\n  get y(): T;\n  /** Encodes point using IEEE P1363 (DER) encoding. First byte is 2/3/4. Default = isCompressed. */\n  toBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  /** @deprecated use `.X` */\n  readonly px: T;\n  /** @deprecated use `.Y` */\n  readonly py: T;\n  /** @deprecated use `.Z` */\n  readonly pz: T;\n  /** @deprecated use `toBytes` */\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  /** @deprecated use `multiplyUnsafe` */\n  multiplyAndAddUnsafe(\n    Q: WeierstrassPoint<T>,\n    a: bigint,\n    b: bigint\n  ): WeierstrassPoint<T> | undefined;\n  /** @deprecated use `p.y % 2n === 0n` */\n  hasEvenY(): boolean;\n  /** @deprecated use `p.precompute(windowSize)` */\n  _setWindowSize(windowSize: number): void;\n}\n\n/** Static methods for 3D XYZ projective points. */\nexport interface WeierstrassPointCons<T> extends CurvePointCons<WeierstrassPoint<T>> {\n  /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n  new (X: T, Y: T, Z: T): WeierstrassPoint<T>;\n  CURVE(): WeierstrassOpts<T>;\n  /** @deprecated use `Point.BASE.multiply(Point.Fn.fromBytes(privateKey))` */\n  fromPrivateKey(privateKey: PrivKey): WeierstrassPoint<T>;\n  /** @deprecated use `import { normalizeZ } from '@noble/curves/abstract/curve.js';` */\n  normalizeZ(points: WeierstrassPoint<T>[]): WeierstrassPoint<T>[];\n  /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */\n  msm(points: WeierstrassPoint<T>[], scalars: bigint[]): WeierstrassPoint<T>;\n}\n\n/**\n * Weierstrass curve options.\n *\n * * p: prime characteristic (order) of finite field, in which arithmetics is done\n * * n: order of prime subgroup a.k.a total amount of valid curve points\n * * h: cofactor, usually 1. h*n is group order; n is subgroup order\n * * a: formula param, must be in field of p\n * * b: formula param, must be in field of p\n * * Gx: x coordinate of generator point a.k.a. base point\n * * Gy: y coordinate of generator point\n */\nexport type WeierstrassOpts<T> = Readonly<{\n  p: bigint;\n  n: bigint;\n  h: bigint;\n  a: T;\n  b: T;\n  Gx: T;\n  Gy: T;\n}>;\n\n// When a cofactor != 1, there can be an effective methods to:\n// 1. Determine whether a point is torsion-free\n// 2. Clear torsion component\n// wrapPrivateKey: bls12-381 requires mod(n) instead of rejecting keys >= n\nexport type WeierstrassExtraOpts<T> = Partial<{\n  Fp: IField<T>;\n  Fn: IField<bigint>;\n  allowInfinityPoint: boolean;\n  endo: EndomorphismOpts;\n  isTorsionFree: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => boolean;\n  clearCofactor: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => WeierstrassPoint<T>;\n  fromBytes: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes: (\n    c: WeierstrassPointCons<T>,\n    point: WeierstrassPoint<T>,\n    isCompressed: boolean\n  ) => Uint8Array;\n}>;\n\n/**\n * Options for ECDSA signatures over a Weierstrass curve.\n *\n * * lowS: (default: true) whether produced / verified signatures occupy low half of ecdsaOpts.p. Prevents malleability.\n * * hmac: (default: noble-hashes hmac) function, would be used to init hmac-drbg for k generation.\n * * randomBytes: (default: webcrypto os-level CSPRNG) custom method for fetching secure randomness.\n * * bits2int, bits2int_modN: used in sigs, sometimes overridden by curves\n */\nexport type ECDSAOpts = Partial<{\n  lowS: boolean;\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  bits2int: (bytes: Uint8Array) => bigint;\n  bits2int_modN: (bytes: Uint8Array) => bigint;\n}>;\n\n/**\n * Elliptic Curve Diffie-Hellman interface.\n * Provides keygen, secret-to-public conversion, calculating shared secrets.\n */\nexport interface ECDH {\n  keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };\n  getPublicKey: (secretKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (secretKeyA: PrivKey, publicKeyB: Hex, isCompressed?: boolean) => Uint8Array;\n  Point: WeierstrassPointCons<bigint>;\n  utils: {\n    isValidSecretKey: (secretKey: PrivKey) => boolean;\n    isValidPublicKey: (publicKey: Uint8Array, isCompressed?: boolean) => boolean;\n    randomSecretKey: (seed?: Uint8Array) => Uint8Array;\n    /** @deprecated use `randomSecretKey` */\n    randomPrivateKey: (seed?: Uint8Array) => Uint8Array;\n    /** @deprecated use `isValidSecretKey` */\n    isValidPrivateKey: (secretKey: PrivKey) => boolean;\n    /** @deprecated use `Point.Fn.fromBytes()` */\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    /** @deprecated use `point.precompute()` */\n    precompute: (windowSize?: number, point?: WeierstrassPoint<bigint>) => WeierstrassPoint<bigint>;\n  };\n  lengths: CurveLengths;\n}\n\n/**\n * ECDSA interface.\n * Only supported for prime fields, not Fp2 (extension fields).\n */\nexport interface ECDSA extends ECDH {\n  sign: (message: Hex, secretKey: PrivKey, opts?: ECDSASignOpts) => ECDSASigRecovered;\n  verify: (\n    signature: Uint8Array,\n    message: Uint8Array,\n    publicKey: Uint8Array,\n    opts?: ECDSAVerifyOpts\n  ) => boolean;\n  recoverPublicKey(signature: Uint8Array, message: Uint8Array, opts?: ECDSARecoverOpts): Uint8Array;\n  Signature: ECDSASignatureCons;\n}\nexport class DERErr extends Error {\n  constructor(m = '') {\n    super(m);\n  }\n}\nexport type IDER = {\n  // asn.1 DER encoding utils\n  Err: typeof DERErr;\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string) => string;\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array };\n  };\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint): string;\n    decode(data: Uint8Array): bigint;\n  };\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint };\n  hexFromSig(sig: { r: bigint; s: bigint }): string;\n};\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n *     [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexport const DER: IDER = {\n  // asn.1 DER encoding utils\n  Err: DERErr,\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string): string => {\n      const { Err: E } = DER;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length & 1) throw new E('tlv.encode: unpadded data');\n      const dataLen = data.length / 2;\n      const len = numberToHexUnpadded(dataLen);\n      if ((len.length / 2) & 0b1000_0000) throw new E('tlv.encode: long form length too big');\n      // length of length with long form flag\n      const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) | 0b1000_0000) : '';\n      const t = numberToHexUnpadded(tag);\n      return t + lenLen + len + data;\n    },\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array } {\n      const { Err: E } = DER;\n      let pos = 0;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length < 2 || data[pos++] !== tag) throw new E('tlv.decode: wrong tlv');\n      const first = data[pos++];\n      const isLong = !!(first & 0b1000_0000); // First bit of first length byte is flag for short/long form\n      let length = 0;\n      if (!isLong) length = first;\n      else {\n        // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n        const lenLen = first & 0b0111_1111;\n        if (!lenLen) throw new E('tlv.decode(long): indefinite length not supported');\n        if (lenLen > 4) throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n        const lengthBytes = data.subarray(pos, pos + lenLen);\n        if (lengthBytes.length !== lenLen) throw new E('tlv.decode: length bytes not complete');\n        if (lengthBytes[0] === 0) throw new E('tlv.decode(long): zero leftmost byte');\n        for (const b of lengthBytes) length = (length << 8) | b;\n        pos += lenLen;\n        if (length < 128) throw new E('tlv.decode(long): not minimal encoding');\n      }\n      const v = data.subarray(pos, pos + length);\n      if (v.length !== length) throw new E('tlv.decode: wrong value length');\n      return { v, l: data.subarray(pos + length) };\n    },\n  },\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint): string {\n      const { Err: E } = DER;\n      if (num < _0n) throw new E('integer: negative integers are not allowed');\n      let hex = numberToHexUnpadded(num);\n      // Pad with zero byte if negative flag is present\n      if (Number.parseInt(hex[0], 16) & 0b1000) hex = '00' + hex;\n      if (hex.length & 1) throw new E('unexpected DER parsing assertion: unpadded hex');\n      return hex;\n    },\n    decode(data: Uint8Array): bigint {\n      const { Err: E } = DER;\n      if (data[0] & 0b1000_0000) throw new E('invalid signature integer: negative');\n      if (data[0] === 0x00 && !(data[1] & 0b1000_0000))\n        throw new E('invalid signature integer: unnecessary leading zero');\n      return bytesToNumberBE(data);\n    },\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E, _int: int, _tlv: tlv } = DER;\n    const data = ensureBytes('signature', hex);\n    const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n    if (seqLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n    const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n    const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n    if (sLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n    return { r: int.decode(rBytes), s: int.decode(sBytes) };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    const { _tlv: tlv, _int: int } = DER;\n    const rs = tlv.encode(0x02, int.encode(sig.r));\n    const ss = tlv.encode(0x02, int.encode(sig.s));\n    const seq = rs + ss;\n    return tlv.encode(0x30, seq);\n  },\n};\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function _normFnElement(Fn: IField<bigint>, key: PrivKey): bigint {\n  const { BYTES: expected } = Fn;\n  let num: bigint;\n  if (typeof key === 'bigint') {\n    num = key;\n  } else {\n    let bytes = ensureBytes('private key', key);\n    try {\n      num = Fn.fromBytes(bytes);\n    } catch (error) {\n      throw new Error(`invalid private key: expected ui8a of size ${expected}, got ${typeof key}`);\n    }\n  }\n  if (!Fn.isValidNot0(num)) throw new Error('invalid private key: out of range [1..N-1]');\n  return num;\n}\n\n/**\n * Creates weierstrass Point constructor, based on specified curve options.\n *\n * @example\n```js\nconst opts = {\n  p: BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'),\n  n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),\n  h: BigInt(1),\n  a: BigInt('0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc'),\n  b: BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b'),\n  Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),\n  Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),\n};\nconst p256_Point = weierstrass(opts);\n```\n */\nexport function weierstrassN<T>(\n  params: WeierstrassOpts<T>,\n  extraOpts: WeierstrassExtraOpts<T> = {}\n): WeierstrassPointCons<T> {\n  const validated = _createCurveFields('weierstrass', params, extraOpts);\n  const { Fp, Fn } = validated;\n  let CURVE = validated.CURVE as WeierstrassOpts<T>;\n  const { h: cofactor, n: CURVE_ORDER } = CURVE;\n  _validateObject(\n    extraOpts,\n    {},\n    {\n      allowInfinityPoint: 'boolean',\n      clearCofactor: 'function',\n      isTorsionFree: 'function',\n      fromBytes: 'function',\n      toBytes: 'function',\n      endo: 'object',\n      wrapPrivateKey: 'boolean',\n    }\n  );\n\n  const { endo } = extraOpts;\n  if (endo) {\n    // validateObject(endo, { beta: 'bigint', splitScalar: 'function' });\n    if (!Fp.is0(CURVE.a) || typeof endo.beta !== 'bigint' || !Array.isArray(endo.basises)) {\n      throw new Error('invalid endo: expected \"beta\": bigint and \"basises\": array');\n    }\n  }\n\n  const lengths = getWLengths(Fp, Fn);\n\n  function assertCompressionIsSupported() {\n    if (!Fp.isOdd) throw new Error('compression is not supported: Field does not have .isOdd()');\n  }\n\n  // Implements IEEE P1363 point encoding\n  function pointToBytes(\n    _c: WeierstrassPointCons<T>,\n    point: WeierstrassPoint<T>,\n    isCompressed: boolean\n  ): Uint8Array {\n    const { x, y } = point.toAffine();\n    const bx = Fp.toBytes(x);\n    abool(isCompressed, 'isCompressed');\n    if (isCompressed) {\n      assertCompressionIsSupported();\n      const hasEvenY = !Fp.isOdd!(y);\n      return concatBytes(pprefix(hasEvenY), bx);\n    } else {\n      return concatBytes(Uint8Array.of(0x04), bx, Fp.toBytes(y));\n    }\n  }\n  function pointFromBytes(bytes: Uint8Array) {\n    abytes(bytes, undefined, 'Point');\n    const { publicKey: comp, publicKeyUncompressed: uncomp } = lengths; // e.g. for 32-byte: 33, 65\n    const length = bytes.length;\n    const head = bytes[0];\n    const tail = bytes.subarray(1);\n    // No actual validation is done here: use .assertValidity()\n    if (length === comp && (head === 0x02 || head === 0x03)) {\n      const x = Fp.fromBytes(tail);\n      if (!Fp.isValid(x)) throw new Error('bad point: is not on curve, wrong x');\n      const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n      let y: T;\n      try {\n        y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n      } catch (sqrtError) {\n        const err = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n        throw new Error('bad point: is not on curve, sqrt error' + err);\n      }\n      assertCompressionIsSupported();\n      const isYOdd = Fp.isOdd!(y); // (y & _1n) === _1n;\n      const isHeadOdd = (head & 1) === 1; // ECDSA-specific\n      if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n      return { x, y };\n    } else if (length === uncomp && head === 0x04) {\n      // TODO: more checks\n      const L = Fp.BYTES;\n      const x = Fp.fromBytes(tail.subarray(0, L));\n      const y = Fp.fromBytes(tail.subarray(L, L * 2));\n      if (!isValidXY(x, y)) throw new Error('bad point: is not on curve');\n      return { x, y };\n    } else {\n      throw new Error(\n        `bad point: got length ${length}, expected compressed=${comp} or uncompressed=${uncomp}`\n      );\n    }\n  }\n\n  const encodePoint = extraOpts.toBytes || pointToBytes;\n  const decodePoint = extraOpts.fromBytes || pointFromBytes;\n  function weierstrassEquation(x: T): T {\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x\u00B2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, CURVE.a)), CURVE.b); // x\u00B3 + a * x + b\n  }\n\n  // TODO: move top-level\n  /** Checks whether equation holds for given x, y: y\u00B2 == x\u00B3 + ax + b */\n  function isValidXY(x: T, y: T): boolean {\n    const left = Fp.sqr(y); // y\u00B2\n    const right = weierstrassEquation(x); // x\u00B3 + ax + b\n    return Fp.eql(left, right);\n  }\n\n  // Validate whether the passed curve params are valid.\n  // Test 1: equation y\u00B2 = x\u00B3 + ax + b should work for generator point.\n  if (!isValidXY(CURVE.Gx, CURVE.Gy)) throw new Error('bad curve params: generator point');\n\n  // Test 2: discriminant \u0394 part should be non-zero: 4a\u00B3 + 27b\u00B2 != 0.\n  // Guarantees curve is genus-1, smooth (non-singular).\n  const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n), _4n);\n  const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27));\n  if (Fp.is0(Fp.add(_4a3, _27b2))) throw new Error('bad curve params: a or b');\n\n  /** Asserts coordinate is valid: 0 <= n < Fp.ORDER. */\n  function acoord(title: string, n: T, banZero = false) {\n    if (!Fp.isValid(n) || (banZero && Fp.is0(n))) throw new Error(`bad point coordinate ${title}`);\n    return n;\n  }\n\n  function aprjpoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n\n  function splitEndoScalarN(k: bigint) {\n    if (!endo || !endo.basises) throw new Error('no endo');\n    return _splitEndoScalar(k, endo.basises, Fn.ORDER);\n  }\n\n  // Memoized toAffine / validity check. They are heavy. Points are immutable.\n\n  // Converts Projective point to affine (x, y) coordinates.\n  // Can accept precomputed Z^-1 - for example, from invertBatch.\n  // (X, Y, Z) \u220B (x=X/Z, y=Y/Z)\n  const toAffineMemo = memoized((p: Point, iz?: T): AffinePoint<T> => {\n    const { X, Y, Z } = p;\n    // Fast-path for normalized points\n    if (Fp.eql(Z, Fp.ONE)) return { x: X, y: Y };\n    const is0 = p.is0();\n    // If invZ was 0, we return zero point. However we still want to execute\n    // all operations, so we replace invZ with a random number, 1.\n    if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(Z);\n    const x = Fp.mul(X, iz);\n    const y = Fp.mul(Y, iz);\n    const zz = Fp.mul(Z, iz);\n    if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n    if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n    return { x, y };\n  });\n  // NOTE: on exception this will crash 'cached' and no value will be set.\n  // Otherwise true will be return\n  const assertValidMemo = memoized((p: Point) => {\n    if (p.is0()) {\n      // (0, 1, 0) aka ZERO is invalid in most contexts.\n      // In BLS, ZERO can be serialized, so we allow it.\n      // (0, 0, 0) is invalid representation of ZERO.\n      if (extraOpts.allowInfinityPoint && !Fp.is0(p.Y)) return;\n      throw new Error('bad point: ZERO');\n    }\n    // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n    const { x, y } = p.toAffine();\n    if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not field elements');\n    if (!isValidXY(x, y)) throw new Error('bad point: equation left != right');\n    if (!p.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    return true;\n  });\n\n  function finishEndo(\n    endoBeta: EndomorphismOpts['beta'],\n    k1p: Point,\n    k2p: Point,\n    k1neg: boolean,\n    k2neg: boolean\n  ) {\n    k2p = new Point(Fp.mul(k2p.X, endoBeta), k2p.Y, k2p.Z);\n    k1p = negateCt(k1neg, k1p);\n    k2p = negateCt(k2neg, k2p);\n    return k1p.add(k2p);\n  }\n\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates:(X, Y, Z) \u220B (x=X/Z, y=Y/Z).\n   * Default Point works in 2d / affine coordinates: (x, y).\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements WeierstrassPoint<T> {\n    // base / generator point\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    // zero / infinity / identity point\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0\n    // math field\n    static readonly Fp = Fp;\n    // scalar field\n    static readonly Fn = Fn;\n\n    readonly X: T;\n    readonly Y: T;\n    readonly Z: T;\n\n    /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n    constructor(X: T, Y: T, Z: T) {\n      this.X = acoord('x', X);\n      this.Y = acoord('y', Y, true);\n      this.Z = acoord('z', Z);\n      Object.freeze(this);\n    }\n\n    static CURVE(): WeierstrassOpts<T> {\n      return CURVE;\n    }\n\n    /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      // (0, 0) would've produced (0, 0, 1) - instead, we need (0, 1, 0)\n      if (Fp.is0(x) && Fp.is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    static fromBytes(bytes: Uint8Array): Point {\n      const P = Point.fromAffine(decodePoint(abytes(bytes, undefined, 'point')));\n      P.assertValidity();\n      return P;\n    }\n    static fromHex(hex: Hex): Point {\n      return Point.fromBytes(ensureBytes('pointHex', hex));\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     *\n     * @param windowSize\n     * @param isLazy true will defer table computation until the first multiplication\n     * @returns\n     */\n    precompute(windowSize: number = 8, isLazy = true): Point {\n      wnaf.createCache(this, windowSize);\n      if (!isLazy) this.multiply(_3n); // random number\n      return this;\n    }\n\n    // TODO: return `this`\n    /** A point on curve is valid if it conforms to equation. */\n    assertValidity(): void {\n      assertValidMemo(this);\n    }\n\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (!Fp.isOdd) throw new Error(\"Field doesn't support isOdd\");\n      return !Fp.isOdd(y);\n    }\n\n    /** Compare one point to another. */\n    equals(other: Point): boolean {\n      aprjpoint(other);\n      const { X: X1, Y: Y1, Z: Z1 } = this;\n      const { X: X2, Y: Y2, Z: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /** Flips point to one corresponding to (x, -y) in Affine coordinates. */\n    negate(): Point {\n      return new Point(this.X, Fp.neg(this.Y), this.Z);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { X: X1, Y: Y1, Z: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      aprjpoint(other);\n      const { X: X1, Y: Y1, Z: Z1 } = this;\n      const { X: X2, Y: Y2, Z: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    is0(): boolean {\n      return this.equals(Point.ZERO);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      const { endo } = extraOpts;\n      if (!Fn.isValidNot0(scalar)) throw new Error('invalid scalar: out of range'); // 0 is invalid\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const mul = (n: bigint) => wnaf.cached(this, n, (p) => normalizeZ(Point, p));\n      /** See docs for {@link EndomorphismOpts} */\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(scalar);\n        const { p: k1p, f: k1f } = mul(k1);\n        const { p: k2p, f: k2f } = mul(k2);\n        fake = k1f.add(k2f);\n        point = finishEndo(endo.beta, k1p, k2p, k1neg, k2neg);\n      } else {\n        const { p, f } = mul(scalar);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return normalizeZ(Point, [point, fake])[0];\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed secret key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(sc: bigint): Point {\n      const { endo } = extraOpts;\n      const p = this as Point;\n      if (!Fn.isValid(sc)) throw new Error('invalid scalar: out of range'); // 0 is valid\n      if (sc === _0n || p.is0()) return Point.ZERO;\n      if (sc === _1n) return p; // fast-path\n      if (wnaf.hasCache(this)) return this.multiply(sc);\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc);\n        const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2); // 30% faster vs wnaf.unsafe\n        return finishEndo(endo.beta, p1, p2, k1neg, k2neg);\n      } else {\n        return wnaf.unsafe(p, sc);\n      }\n    }\n\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const sum = this.multiplyUnsafe(a).add(Q.multiplyUnsafe(b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    /**\n     * Converts Projective point to affine (x, y) coordinates.\n     * @param invertedZ Z^-1 (inverted zero) - optional, precomputation is useful for invertBatch\n     */\n    toAffine(invertedZ?: T): AffinePoint<T> {\n      return toAffineMemo(this, invertedZ);\n    }\n\n    /**\n     * Checks whether Point is free of torsion elements (is in prime subgroup).\n     * Always torsion-free for cofactor=1 curves.\n     */\n    isTorsionFree(): boolean {\n      const { isTorsionFree } = extraOpts;\n      if (cofactor === _1n) return true;\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      return wnaf.unsafe(this, CURVE_ORDER).is0();\n    }\n\n    clearCofactor(): Point {\n      const { clearCofactor } = extraOpts;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(cofactor);\n    }\n\n    isSmallOrder(): boolean {\n      // can we use this.clearCofactor()?\n      return this.multiplyUnsafe(cofactor).is0();\n    }\n\n    toBytes(isCompressed = true): Uint8Array {\n      abool(isCompressed, 'isCompressed');\n      this.assertValidity();\n      return encodePoint(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return bytesToHex(this.toBytes(isCompressed));\n    }\n\n    toString() {\n      return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`;\n    }\n\n    // TODO: remove\n    get px(): T {\n      return this.X;\n    }\n    get py(): T {\n      return this.X;\n    }\n    get pz(): T {\n      return this.Z;\n    }\n    toRawBytes(isCompressed = true): Uint8Array {\n      return this.toBytes(isCompressed);\n    }\n    _setWindowSize(windowSize: number) {\n      this.precompute(windowSize);\n    }\n    static normalizeZ(points: Point[]): Point[] {\n      return normalizeZ(Point, points);\n    }\n    static msm(points: Point[], scalars: bigint[]): Point {\n      return pippenger(Point, Fn, points, scalars);\n    }\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(_normFnElement(Fn, privateKey));\n    }\n  }\n  const bits = Fn.BITS;\n  const wnaf = new wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits);\n  Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n  return Point;\n}\n\n/** Methods of ECDSA signature instance. */\nexport interface ECDSASignature {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  addRecoveryBit(recovery: number): ECDSASigRecovered;\n  hasHighS(): boolean;\n  toBytes(format?: string): Uint8Array;\n  toHex(format?: string): string;\n\n  /** @deprecated */\n  assertValidity(): void;\n  /** @deprecated */\n  normalizeS(): ECDSASignature;\n  /** @deprecated use standalone method `curve.recoverPublicKey(sig.toBytes('recovered'), msg)` */\n  recoverPublicKey(msgHash: Hex): WeierstrassPoint<bigint>;\n  /** @deprecated use `.toBytes('compact')` */\n  toCompactRawBytes(): Uint8Array;\n  /** @deprecated use `.toBytes('compact')` */\n  toCompactHex(): string;\n  /** @deprecated use `.toBytes('der')` */\n  toDERRawBytes(): Uint8Array;\n  /** @deprecated use `.toBytes('der')` */\n  toDERHex(): string;\n}\nexport type ECDSASigRecovered = ECDSASignature & {\n  readonly recovery: number;\n};\n/** Methods of ECDSA signature constructor. */\nexport type ECDSASignatureCons = {\n  new (r: bigint, s: bigint, recovery?: number): ECDSASignature;\n  fromBytes(bytes: Uint8Array, format?: ECDSASigFormat): ECDSASignature;\n  fromHex(hex: string, format?: ECDSASigFormat): ECDSASignature;\n\n  /** @deprecated use `.fromBytes(bytes, 'compact')` */\n  fromCompact(hex: Hex): ECDSASignature;\n  /** @deprecated use `.fromBytes(bytes, 'der')` */\n  fromDER(hex: Hex): ECDSASignature;\n};\n\n// Points start with byte 0x02 when y is even; otherwise 0x03\nfunction pprefix(hasEvenY: boolean): Uint8Array {\n  return Uint8Array.of(hasEvenY ? 0x02 : 0x03);\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(\n  Fp: IField<T>,\n  Z: T\n): (u: T, v: T) => { isValid: boolean; value: T } {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n): (u: T) => { x: T; y: T } {\n  validateField(Fp);\n  const { A, B, Z } = opts;\n  if (!Fp.isValid(A) || !Fp.isValid(B) || !Fp.isValid(Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, Z);\n  if (!Fp.isOdd) throw new Error('Field does not have .isOdd()');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    const tv4_inv = FpInvertBatch(Fp, [tv4], true)[0];\n    x = Fp.mul(x, tv4_inv); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n\nfunction getWLengths<T>(Fp: IField<T>, Fn: IField<bigint>) {\n  return {\n    secretKey: Fn.BYTES,\n    publicKey: 1 + Fp.BYTES,\n    publicKeyUncompressed: 1 + 2 * Fp.BYTES,\n    publicKeyHasPrefix: true,\n    signature: 2 * Fn.BYTES,\n  };\n}\n\n/**\n * Sometimes users only need getPublicKey, getSharedSecret, and secret key handling.\n * This helper ensures no signature functionality is present. Less code, smaller bundle size.\n */\nexport function ecdh(\n  Point: WeierstrassPointCons<bigint>,\n  ecdhOpts: { randomBytes?: (bytesLength?: number) => Uint8Array } = {}\n): ECDH {\n  const { Fn } = Point;\n  const randomBytes_ = ecdhOpts.randomBytes || randomBytesWeb;\n  const lengths = Object.assign(getWLengths(Point.Fp, Fn), { seed: getMinHashLength(Fn.ORDER) });\n\n  function isValidSecretKey(secretKey: PrivKey) {\n    try {\n      return !!_normFnElement(Fn, secretKey);\n    } catch (error) {\n      return false;\n    }\n  }\n\n  function isValidPublicKey(publicKey: Uint8Array, isCompressed?: boolean): boolean {\n    const { publicKey: comp, publicKeyUncompressed } = lengths;\n    try {\n      const l = publicKey.length;\n      if (isCompressed === true && l !== comp) return false;\n      if (isCompressed === false && l !== publicKeyUncompressed) return false;\n      return !!Point.fromBytes(publicKey);\n    } catch (error) {\n      return false;\n    }\n  }\n\n  /**\n   * Produces cryptographically secure secret key from random of size\n   * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n   */\n  function randomSecretKey(seed = randomBytes_(lengths.seed)): Uint8Array {\n    return mapHashToField(abytes(seed, lengths.seed, 'seed'), Fn.ORDER);\n  }\n\n  /**\n   * Computes public key for a secret key. Checks for validity of the secret key.\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(secretKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.BASE.multiply(_normFnElement(Fn, secretKey)).toBytes(isCompressed);\n  }\n\n  function keygen(seed?: Uint8Array) {\n    const secretKey = randomSecretKey(seed);\n    return { secretKey, publicKey: getPublicKey(secretKey) };\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean | undefined {\n    if (typeof item === 'bigint') return false;\n    if (item instanceof Point) return true;\n    const { secretKey, publicKey, publicKeyUncompressed } = lengths;\n    if (Fn.allowedLengths || secretKey === publicKey) return undefined;\n    const l = ensureBytes('key', item).length;\n    return l === publicKey || l === publicKeyUncompressed;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from secret key A and public key B.\n   * Checks: 1) secret key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(secretKeyA: PrivKey, publicKeyB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(secretKeyA) === true) throw new Error('first arg must be private key');\n    if (isProbPub(publicKeyB) === false) throw new Error('second arg must be public key');\n    const s = _normFnElement(Fn, secretKeyA);\n    const b = Point.fromHex(publicKeyB); // checks for being on-curve\n    return b.multiply(s).toBytes(isCompressed);\n  }\n\n  const utils = {\n    isValidSecretKey,\n    isValidPublicKey,\n    randomSecretKey,\n\n    // TODO: remove\n    isValidPrivateKey: isValidSecretKey,\n    randomPrivateKey: randomSecretKey,\n    normPrivateKeyToScalar: (key: PrivKey) => _normFnElement(Fn, key),\n    precompute(windowSize = 8, point = Point.BASE): WeierstrassPoint<bigint> {\n      return point.precompute(windowSize, false);\n    },\n  };\n\n  return Object.freeze({ getPublicKey, getSharedSecret, keygen, Point, utils, lengths });\n}\n\n/**\n * Creates ECDSA signing interface for given elliptic curve `Point` and `hash` function.\n * We need `hash` for 2 features:\n * 1. Message prehash-ing. NOT used if `sign` / `verify` are called with `prehash: false`\n * 2. k generation in `sign`, using HMAC-drbg(hash)\n *\n * ECDSAOpts are only rarely needed.\n *\n * @example\n * ```js\n * const p256_Point = weierstrass(...);\n * const p256_sha256 = ecdsa(p256_Point, sha256);\n * const p256_sha224 = ecdsa(p256_Point, sha224);\n * const p256_sha224_r = ecdsa(p256_Point, sha224, { randomBytes: (length) => { ... } });\n * ```\n */\nexport function ecdsa(\n  Point: WeierstrassPointCons<bigint>,\n  hash: CHash,\n  ecdsaOpts: ECDSAOpts = {}\n): ECDSA {\n  ahash(hash);\n  _validateObject(\n    ecdsaOpts,\n    {},\n    {\n      hmac: 'function',\n      lowS: 'boolean',\n      randomBytes: 'function',\n      bits2int: 'function',\n      bits2int_modN: 'function',\n    }\n  );\n\n  const randomBytes = ecdsaOpts.randomBytes || randomBytesWeb;\n  const hmac: HmacFnSync =\n    ecdsaOpts.hmac ||\n    (((key, ...msgs) => nobleHmac(hash, key, concatBytes(...msgs))) satisfies HmacFnSync);\n\n  const { Fp, Fn } = Point;\n  const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn;\n  const { keygen, getPublicKey, getSharedSecret, utils, lengths } = ecdh(Point, ecdsaOpts);\n  const defaultSigOpts: Required<ECDSASignOpts> = {\n    prehash: false,\n    lowS: typeof ecdsaOpts.lowS === 'boolean' ? ecdsaOpts.lowS : false,\n    format: undefined as any, //'compact' as ECDSASigFormat,\n    extraEntropy: false,\n  };\n  const defaultSigOpts_format = 'compact';\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n  function validateRS(title: string, num: bigint): bigint {\n    if (!Fn.isValidNot0(num))\n      throw new Error(`invalid signature ${title}: out of range 1..Point.Fn.ORDER`);\n    return num;\n  }\n  function validateSigLength(bytes: Uint8Array, format: ECDSASigFormat) {\n    validateSigFormat(format);\n    const size = lengths.signature!;\n    const sizer = format === 'compact' ? size : format === 'recovered' ? size + 1 : undefined;\n    return abytes(bytes, sizer, `${format} signature`);\n  }\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports compact, recovered & DER representations.\n   */\n  class Signature implements ECDSASignature {\n    readonly r: bigint;\n    readonly s: bigint;\n    readonly recovery?: number;\n    constructor(r: bigint, s: bigint, recovery?: number) {\n      this.r = validateRS('r', r); // r in [1..N-1];\n      this.s = validateRS('s', s); // s in [1..N-1];\n      if (recovery != null) this.recovery = recovery;\n      Object.freeze(this);\n    }\n\n    static fromBytes(bytes: Uint8Array, format: ECDSASigFormat = defaultSigOpts_format): Signature {\n      validateSigLength(bytes, format);\n      let recid: number | undefined;\n      if (format === 'der') {\n        const { r, s } = DER.toSig(abytes(bytes));\n        return new Signature(r, s);\n      }\n      if (format === 'recovered') {\n        recid = bytes[0];\n        format = 'compact';\n        bytes = bytes.subarray(1);\n      }\n      const L = Fn.BYTES;\n      const r = bytes.subarray(0, L);\n      const s = bytes.subarray(L, L * 2);\n      return new Signature(Fn.fromBytes(r), Fn.fromBytes(s), recid);\n    }\n\n    static fromHex(hex: string, format?: ECDSASigFormat) {\n      return this.fromBytes(hexToBytes(hex), format);\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(messageHash: Hex): WeierstrassPoint<bigint> {\n      const FIELD_ORDER = Fp.ORDER;\n      const { r, s, recovery: rec } = this;\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n\n      // ECDSA recovery is hard for cofactor > 1 curves.\n      // In sign, `r = q.x mod n`, and here we recover q.x from r.\n      // While recovering q.x >= n, we need to add r+n for cofactor=1 curves.\n      // However, for cofactor>1, r+n may not get q.x:\n      // r+n*i would need to be done instead where i is unknown.\n      // To easily get i, we either need to:\n      // a. increase amount of valid recid values (4, 5...); OR\n      // b. prohibit non-prime-order signatures (recid > 1).\n      const hasCofactor = CURVE_ORDER * _2n < FIELD_ORDER;\n      if (hasCofactor && rec > 1) throw new Error('recovery id is ambiguous for h>1 curve');\n\n      const radj = rec === 2 || rec === 3 ? r + CURVE_ORDER : r;\n      if (!Fp.isValid(radj)) throw new Error('recovery id 2 or 3 invalid');\n      const x = Fp.toBytes(radj);\n      const R = Point.fromBytes(concatBytes(pprefix((rec & 1) === 0), x));\n      const ir = Fn.inv(radj); // r^-1\n      const h = bits2int_modN(ensureBytes('msgHash', messageHash)); // Truncate hash\n      const u1 = Fn.create(-h * ir); // -hr^-1\n      const u2 = Fn.create(s * ir); // sr^-1\n      // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1). unsafe is fine: there is no private data.\n      const Q = Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2));\n      if (Q.is0()) throw new Error('point at infinify');\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    toBytes(format: ECDSASigFormat = defaultSigOpts_format) {\n      validateSigFormat(format);\n      if (format === 'der') return hexToBytes(DER.hexFromSig(this));\n      const r = Fn.toBytes(this.r);\n      const s = Fn.toBytes(this.s);\n      if (format === 'recovered') {\n        if (this.recovery == null) throw new Error('recovery bit must be present');\n        return concatBytes(Uint8Array.of(this.recovery), r, s);\n      }\n      return concatBytes(r, s);\n    }\n\n    toHex(format?: ECDSASigFormat) {\n      return bytesToHex(this.toBytes(format));\n    }\n\n    // TODO: remove\n    assertValidity(): void {}\n    static fromCompact(hex: Hex) {\n      return Signature.fromBytes(ensureBytes('sig', hex), 'compact');\n    }\n    static fromDER(hex: Hex) {\n      return Signature.fromBytes(ensureBytes('sig', hex), 'der');\n    }\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, Fn.neg(this.s), this.recovery) : this;\n    }\n    toDERRawBytes() {\n      return this.toBytes('der');\n    }\n    toDERHex() {\n      return bytesToHex(this.toBytes('der'));\n    }\n    toCompactRawBytes() {\n      return this.toBytes('compact');\n    }\n    toCompactHex() {\n      return bytesToHex(this.toBytes('compact'));\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    ecdsaOpts.bits2int ||\n    function bits2int_def(bytes: Uint8Array): bigint {\n      // Our custom check \"just in case\", for protection against DoS\n      if (bytes.length > 8192) throw new Error('input is too large');\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - fnBits; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    ecdsaOpts.bits2int_modN ||\n    function bits2int_modN_def(bytes: Uint8Array): bigint {\n      return Fn.create(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // Pads output with zero as per spec\n  const ORDER_MASK = bitMask(fnBits);\n  /** Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`. */\n  function int2octets(num: bigint): Uint8Array {\n    // IMPORTANT: the check ensures working for case `Fn.BYTES != Fn.BITS * 8`\n    aInRange('num < 2^' + fnBits, num, _0n, ORDER_MASK);\n    return Fn.toBytes(num);\n  }\n\n  function validateMsgAndHash(message: Uint8Array, prehash: boolean) {\n    abytes(message, undefined, 'message');\n    return prehash ? abytes(hash(message), undefined, 'prehashed message') : message;\n  }\n\n  /**\n   * Steps A, D of RFC6979 3.2.\n   * Creates RFC6979 seed; converts msg/privKey to numbers.\n   * Used only in sign, not in verify.\n   *\n   * Warning: we cannot assume here that message has same amount of bytes as curve order,\n   * this will be invalid at least for P521. Also it can be bigger for P224 + SHA256.\n   */\n  function prepSig(message: Uint8Array, privateKey: PrivKey, opts: ECDSASignOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { lowS, prehash, extraEntropy } = validateSigOpts(opts, defaultSigOpts);\n    message = validateMsgAndHash(message, prehash); // RFC6979 3.2 A: h1 = H(m)\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with fnBits % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(message);\n    const d = _normFnElement(Fn, privateKey); // validate secret key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (extraEntropy != null && extraEntropy !== false) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      // gen random bytes OR pass as-is\n      const e = extraEntropy === true ? randomBytes(lengths.secretKey) : extraEntropy;\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    // To transform k => Signature:\n    // q = k\u22C5G\n    // r = q.x mod n\n    // s = k^-1(m + rd) mod n\n    // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n    // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n    // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      // Important: all mod() calls here must be done over N\n      const k = bits2int(kBytes); // mod n, not mod p\n      if (!Fn.isValidNot0(k)) return; // Valid scalars (including k) must be in 1..N-1\n      const ik = Fn.inv(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = k\u22C5G\n      const r = Fn.create(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      const s = Fn.create(ik * Fn.create(m + r * d)); // Not using blinding here, see comment above\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = Fn.neg(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n\n  /**\n   * Signs message hash with a secret key.\n   *\n   * ```\n   * sign(m, d) where\n   *   k = rfc6979_hmac_drbg(m, d)\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr) / k mod n\n   * ```\n   */\n  function sign(message: Hex, secretKey: PrivKey, opts: ECDSASignOpts = {}): RecoveredSignature {\n    message = ensureBytes('message', message);\n    const { seed, k2sig } = prepSig(message, secretKey, opts); // Steps A, D of RFC6979 3.2.\n    const drbg = createHmacDrbg<RecoveredSignature>(hash.outputLen, Fn.BYTES, hmac);\n    const sig = drbg(seed, k2sig); // Steps B, C, D, E, F, G\n    return sig;\n  }\n\n  function tryParsingSig(sg: Hex | SignatureLike) {\n    // Try to deduce format\n    let sig: Signature | undefined = undefined;\n    const isHex = typeof sg === 'string' || isBytes(sg);\n    const isObj =\n      !isHex &&\n      sg !== null &&\n      typeof sg === 'object' &&\n      typeof sg.r === 'bigint' &&\n      typeof sg.s === 'bigint';\n    if (!isHex && !isObj)\n      throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance');\n    if (isObj) {\n      sig = new Signature(sg.r, sg.s);\n    } else if (isHex) {\n      try {\n        sig = Signature.fromBytes(ensureBytes('sig', sg), 'der');\n      } catch (derError) {\n        if (!(derError instanceof DER.Err)) throw derError;\n      }\n      if (!sig) {\n        try {\n          sig = Signature.fromBytes(ensureBytes('sig', sg), 'compact');\n        } catch (error) {\n          return false;\n        }\n      }\n    }\n    if (!sig) return false;\n    return sig;\n  }\n\n  /**\n   * Verifies a signature against message and public key.\n   * Rejects lowS signatures by default: see {@link ECDSAVerifyOpts}.\n   * Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   u1 = hs^-1 mod n\n   *   u2 = rs^-1 mod n\n   *   R = u1\u22C5G + u2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    message: Hex,\n    publicKey: Hex,\n    opts: ECDSAVerifyOpts = {}\n  ): boolean {\n    const { lowS, prehash, format } = validateSigOpts(opts, defaultSigOpts);\n    publicKey = ensureBytes('publicKey', publicKey);\n    message = validateMsgAndHash(ensureBytes('message', message), prehash);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    const sig =\n      format === undefined\n        ? tryParsingSig(signature)\n        : Signature.fromBytes(ensureBytes('sig', signature as Hex), format);\n    if (sig === false) return false;\n    try {\n      const P = Point.fromBytes(publicKey);\n      if (lowS && sig.hasHighS()) return false;\n      const { r, s } = sig;\n      const h = bits2int_modN(message); // mod n, not mod p\n      const is = Fn.inv(s); // s^-1 mod n\n      const u1 = Fn.create(h * is); // u1 = hs^-1 mod n\n      const u2 = Fn.create(r * is); // u2 = rs^-1 mod n\n      const R = Point.BASE.multiplyUnsafe(u1).add(P.multiplyUnsafe(u2)); // u1\u22C5G + u2\u22C5P\n      if (R.is0()) return false;\n      const v = Fn.create(R.x); // v = r.x mod n\n      return v === r;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function recoverPublicKey(\n    signature: Uint8Array,\n    message: Uint8Array,\n    opts: ECDSARecoverOpts = {}\n  ): Uint8Array {\n    const { prehash } = validateSigOpts(opts, defaultSigOpts);\n    message = validateMsgAndHash(message, prehash);\n    return Signature.fromBytes(signature, 'recovered').recoverPublicKey(message).toBytes();\n  }\n\n  return Object.freeze({\n    keygen,\n    getPublicKey,\n    getSharedSecret,\n    utils,\n    lengths,\n    Point,\n    sign,\n    verify,\n    recoverPublicKey,\n    Signature,\n    hash,\n  });\n}\n\n// TODO: remove everything below\n/** @deprecated use ECDSASignature */\nexport type SignatureType = ECDSASignature;\n/** @deprecated use ECDSASigRecovered */\nexport type RecoveredSignatureType = ECDSASigRecovered;\n/** @deprecated switch to Uint8Array signatures in format 'compact' */\nexport type SignatureLike = { r: bigint; s: bigint };\nexport type ECDSAExtraEntropy = Hex | boolean;\n/** @deprecated use `ECDSAExtraEntropy` */\nexport type Entropy = Hex | boolean;\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts;\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => WeierstrassPoint<T>;\n};\n/** @deprecated use ECDSASignOpts */\nexport type SignOpts = ECDSASignOpts;\n/** @deprecated use ECDSASignOpts */\nexport type VerOpts = ECDSAVerifyOpts;\n\n/** @deprecated use WeierstrassPoint */\nexport type ProjPointType<T> = WeierstrassPoint<T>;\n/** @deprecated use WeierstrassPointCons */\nexport type ProjConstructor<T> = WeierstrassPointCons<T>;\n/** @deprecated use ECDSASignatureCons */\nexport type SignatureConstructor = ECDSASignatureCons;\n\n// TODO: remove\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (\n    c: WeierstrassPointCons<T>,\n    point: WeierstrassPoint<T>,\n    isCompressed: boolean\n  ) => Uint8Array;\n};\n\n// LegacyWeierstrassOpts\nexport type CurvePointsTypeWithLength<T> = Readonly<CurvePointsType<T> & Partial<NLength>>;\n\n// LegacyWeierstrass\nexport type CurvePointsRes<T> = {\n  Point: WeierstrassPointCons<T>;\n\n  /** @deprecated use `Point.CURVE()` */\n  CURVE: CurvePointsType<T>;\n  /** @deprecated use `Point` */\n  ProjectivePoint: WeierstrassPointCons<T>;\n  /** @deprecated use `Point.Fn.fromBytes(privateKey)` */\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  /** @deprecated */\n  weierstrassEquation: (x: T) => T;\n  /** @deprecated use `Point.Fn.isValidNot0(num)` */\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\n// Aliases to legacy types\n// export type CurveType = LegacyECDSAOpts;\n// export type CurveFn = LegacyECDSA;\n// export type CurvePointsRes<T> = LegacyWeierstrass<T>;\n// export type CurvePointsType<T> = LegacyWeierstrassOpts<T>;\n// export type CurvePointsTypeWithLength<T> = LegacyWeierstrassOpts<T>;\n// export type BasicWCurve<T> = LegacyWeierstrassOpts<T>;\n\n/** @deprecated use `Uint8Array` */\nexport type PubKey = Hex | WeierstrassPoint<bigint>;\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac?: HmacFnSync;\n  randomBytes?: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\nexport type CurveFn = {\n  /** @deprecated use `Point.CURVE()` */\n  CURVE: CurvePointsType<bigint>;\n  keygen: ECDSA['keygen'];\n  getPublicKey: ECDSA['getPublicKey'];\n  getSharedSecret: ECDSA['getSharedSecret'];\n  sign: ECDSA['sign'];\n  verify: ECDSA['verify'];\n  Point: WeierstrassPointCons<bigint>;\n  /** @deprecated use `Point` */\n  ProjectivePoint: WeierstrassPointCons<bigint>;\n  Signature: ECDSASignatureCons;\n  utils: ECDSA['utils'];\n  lengths: ECDSA['lengths'];\n};\n/** @deprecated use `weierstrass` in newer releases */\nexport function weierstrassPoints<T>(c: CurvePointsTypeWithLength<T>): CurvePointsRes<T> {\n  const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c);\n  const Point = weierstrassN(CURVE, curveOpts);\n  return _weierstrass_new_output_to_legacy(c, Point);\n}\nexport type WsPointComposed<T> = {\n  CURVE: WeierstrassOpts<T>;\n  curveOpts: WeierstrassExtraOpts<T>;\n};\nexport type WsComposed = {\n  /** @deprecated use `Point.CURVE()` */\n  CURVE: WeierstrassOpts<bigint>;\n  hash: CHash;\n  curveOpts: WeierstrassExtraOpts<bigint>;\n  ecdsaOpts: ECDSAOpts;\n};\nfunction _weierstrass_legacy_opts_to_new<T>(c: CurvePointsType<T>): WsPointComposed<T> {\n  const CURVE: WeierstrassOpts<T> = {\n    a: c.a,\n    b: c.b,\n    p: c.Fp.ORDER,\n    n: c.n,\n    h: c.h,\n    Gx: c.Gx,\n    Gy: c.Gy,\n  };\n  const Fp = c.Fp;\n  let allowedLengths = c.allowedPrivateKeyLengths\n    ? Array.from(new Set(c.allowedPrivateKeyLengths.map((l) => Math.ceil(l / 2))))\n    : undefined;\n  const Fn = Field(CURVE.n, {\n    BITS: c.nBitLength,\n    allowedLengths: allowedLengths,\n    modFromBytes: c.wrapPrivateKey,\n  });\n  const curveOpts: WeierstrassExtraOpts<T> = {\n    Fp,\n    Fn,\n    allowInfinityPoint: c.allowInfinityPoint,\n    endo: c.endo,\n    isTorsionFree: c.isTorsionFree,\n    clearCofactor: c.clearCofactor,\n    fromBytes: c.fromBytes,\n    toBytes: c.toBytes,\n  };\n  return { CURVE, curveOpts };\n}\nfunction _ecdsa_legacy_opts_to_new(c: CurveType): WsComposed {\n  const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c);\n  const ecdsaOpts: ECDSAOpts = {\n    hmac: c.hmac,\n    randomBytes: c.randomBytes,\n    lowS: c.lowS,\n    bits2int: c.bits2int,\n    bits2int_modN: c.bits2int_modN,\n  };\n  return { CURVE, curveOpts, hash: c.hash, ecdsaOpts };\n}\nexport function _legacyHelperEquat<T>(Fp: IField<T>, a: T, b: T): (x: T) => T {\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula. Takes x, returns y\u00B2.\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x\u00B2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x\u00B3 + a * x + b\n  }\n  return weierstrassEquation;\n}\nfunction _weierstrass_new_output_to_legacy<T>(\n  c: CurvePointsType<T>,\n  Point: WeierstrassPointCons<T>\n): CurvePointsRes<T> {\n  const { Fp, Fn } = Point;\n  function isWithinCurveOrder(num: bigint): boolean {\n    return inRange(num, _1n, Fn.ORDER);\n  }\n  const weierstrassEquation = _legacyHelperEquat(Fp, c.a, c.b);\n  return Object.assign(\n    {},\n    {\n      CURVE: c,\n      Point: Point,\n      ProjectivePoint: Point,\n      normPrivateKeyToScalar: (key: PrivKey) => _normFnElement(Fn, key),\n      weierstrassEquation,\n      isWithinCurveOrder,\n    }\n  );\n}\nfunction _ecdsa_new_output_to_legacy(c: CurveType, _ecdsa: ECDSA): CurveFn {\n  const Point = _ecdsa.Point;\n  return Object.assign({}, _ecdsa, {\n    ProjectivePoint: Point,\n    CURVE: Object.assign({}, c, nLength(Point.Fn.ORDER, Point.Fn.BITS)),\n  });\n}\n\n// _ecdsa_legacy\nexport function weierstrass(c: CurveType): CurveFn {\n  const { CURVE, curveOpts, hash, ecdsaOpts } = _ecdsa_legacy_opts_to_new(c);\n  const Point = weierstrassN(CURVE, curveOpts);\n  const signs = ecdsa(Point, hash, ecdsaOpts);\n  return _ecdsa_new_output_to_legacy(c, signs);\n}\n", "/**\n * Utilities for short weierstrass curves, combined with noble-hashes.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { type CurveFn, type CurveType, weierstrass } from './abstract/weierstrass.ts';\nimport type { CHash } from './utils.ts';\n\n/** connects noble-curves to noble-hashes */\nexport function getHash(hash: CHash): { hash: CHash } {\n  return { hash };\n}\n/** Same API as @noble/hashes, with ability to create curve with custom hash */\nexport type CurveDef = Readonly<Omit<CurveType, 'hash'>>;\nexport type CurveFnWithCreate = CurveFn & { create: (hash: CHash) => CurveFn };\n\n/** @deprecated use new `weierstrass()` and `ecdsa()` methods */\nexport function createCurve(curveDef: CurveDef, defHash: CHash): CurveFnWithCreate {\n  const create = (hash: CHash): CurveFn => weierstrass({ ...curveDef, hash: hash });\n  return { ...create(defHash), create };\n}\n", "/**\n * hash-to-curve from RFC 9380.\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * https://www.rfc-editor.org/rfc/rfc9380\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { CHash } from '../utils.ts';\nimport {\n  _validateObject,\n  abytes,\n  bytesToNumberBE,\n  concatBytes,\n  isBytes,\n  isHash,\n  utf8ToBytes,\n} from '../utils.ts';\nimport type { AffinePoint, Group, GroupConstructor } from './curve.ts';\nimport { FpInvertBatch, mod, type IField } from './modular.ts';\n\nexport type UnicodeOrBytes = string | Uint8Array;\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\nexport type H2COpts = {\n  DST: UnicodeOrBytes;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n  p: bigint;\n  m: number;\n  k: number;\n};\nexport type H2CHashOpts = {\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n};\n// todo: remove\nexport type Opts = H2COpts;\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n  anum(value);\n  anum(length);\n  if (value < 0 || value >= 1 << (8 * length)) throw new Error('invalid I2OSP input: ' + value);\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr;\n}\n\nfunction anum(item: unknown): void {\n  if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\nfunction normDST(DST: UnicodeOrBytes): Uint8Array {\n  if (!isBytes(DST) && typeof DST !== 'string') throw new Error('DST must be Uint8Array or string');\n  return typeof DST === 'string' ? utf8ToBytes(DST) : DST;\n}\n\n/**\n * Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits.\n * [RFC 9380 5.3.1](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1).\n */\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: UnicodeOrBytes,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  anum(lenInBytes);\n  DST = normDST(DST);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (lenInBytes > 65535 || ell > 255) throw new Error('expand_message_xmd: invalid lenInBytes');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = i2osp(0, r_in_bytes);\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  for (let i = 1; i <= ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\n/**\n * Produces a uniformly random byte string using an extendable-output function (XOF) H.\n * 1. The collision resistance of H MUST be at least k bits.\n * 2. H MUST be an XOF that has been proved indifferentiable from\n *    a random oracle under a reasonable cryptographic assumption.\n * [RFC 9380 5.3.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2).\n */\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: UnicodeOrBytes,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  anum(lenInBytes);\n  DST = normDST(DST);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * [RFC 9380 5.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.2).\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: H2COpts): bigint[][] {\n  _validateObject(options, {\n    p: 'bigint',\n    m: 'number',\n    k: 'number',\n    hash: 'function',\n  });\n  const { p, k, m, hash, expand, DST } = options;\n  if (!isHash(options.hash)) throw new Error('expected valid hash');\n  abytes(msg);\n  anum(count);\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\nexport type XY<T> = (x: T, y: T) => { x: T; y: T };\nexport type XYRatio<T> = [T[], T[], T[], T[]]; // xn/xd, yn/yd\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: XYRatio<T>): XY<T> {\n  // Make same order as in spec\n  const coeff = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xn, xd, yn, yd] = coeff.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    // 6.6.3\n    // Exceptional cases of iso_map are inputs that cause the denominator of\n    // either rational function to evaluate to zero; such cases MUST return\n    // the identity point on E.\n    const [xd_inv, yd_inv] = FpInvertBatch(field, [xd, yd], true);\n    x = field.mul(xn, xd_inv); // xNum / xDen\n    y = field.mul(y, field.mul(yn, yd_inv)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\n/** Point interface, which curves must implement to work correctly with the module. */\nexport interface H2CPoint<T> extends Group<H2CPoint<T>> {\n  add(rhs: H2CPoint<T>): H2CPoint<T>;\n  toAffine(iz?: bigint): AffinePoint<T>;\n  clearCofactor(): H2CPoint<T>;\n  assertValidity(): void;\n}\n\nexport interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {\n  fromAffine(ap: AffinePoint<T>): H2CPoint<T>;\n}\n\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\nexport type H2CMethod<T> = (msg: Uint8Array, options?: htfBasicOpts) => H2CPoint<T>;\n// TODO: remove\nexport type HTFMethod<T> = H2CMethod<T>;\nexport type MapMethod<T> = (scalars: bigint[]) => H2CPoint<T>;\nexport type H2CHasherBase<T> = {\n  hashToCurve: H2CMethod<T>;\n  hashToScalar: (msg: Uint8Array, options: htfBasicOpts) => bigint;\n};\n/**\n * RFC 9380 methods, with cofactor clearing. See https://www.rfc-editor.org/rfc/rfc9380#section-3.\n *\n * * hashToCurve: `map(hash(input))`, encodes RANDOM bytes to curve (WITH hashing)\n * * encodeToCurve: `map(hash(input))`, encodes NON-UNIFORM bytes to curve (WITH hashing)\n * * mapToCurve: `map(scalars)`, encodes NON-UNIFORM scalars to curve (NO hashing)\n */\nexport type H2CHasher<T> = H2CHasherBase<T> & {\n  encodeToCurve: H2CMethod<T>;\n  mapToCurve: MapMethod<T>;\n  defaults: H2COpts & { encodeDST?: UnicodeOrBytes };\n};\n// TODO: remove\nexport type Hasher<T> = H2CHasher<T>;\n\nexport const _DST_scalar: Uint8Array = utf8ToBytes('HashToScalar-');\n\n/** Creates hash-to-curve methods from EC Point and mapToCurve function. See {@link H2CHasher}. */\nexport function createHasher<T>(\n  Point: H2CPointConstructor<T>,\n  mapToCurve: MapToCurve<T>,\n  defaults: H2COpts & { encodeDST?: UnicodeOrBytes }\n): H2CHasher<T> {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  function map(num: bigint[]) {\n    return Point.fromAffine(mapToCurve(num));\n  }\n  function clear(initial: H2CPoint<T>) {\n    const P = initial.clearCofactor();\n    if (P.equals(Point.ZERO)) return Point.ZERO; // zero will throw in assert\n    P.assertValidity();\n    return P;\n  }\n\n  return {\n    defaults,\n\n    hashToCurve(msg: Uint8Array, options?: htfBasicOpts): H2CPoint<T> {\n      const opts = Object.assign({}, defaults, options);\n      const u = hash_to_field(msg, 2, opts);\n      const u0 = map(u[0]);\n      const u1 = map(u[1]);\n      return clear(u0.add(u1));\n    },\n    encodeToCurve(msg: Uint8Array, options?: htfBasicOpts): H2CPoint<T> {\n      const optsDst = defaults.encodeDST ? { DST: defaults.encodeDST } : {};\n      const opts = Object.assign({}, defaults, optsDst, options);\n      const u = hash_to_field(msg, 1, opts);\n      const u0 = map(u[0]);\n      return clear(u0);\n    },\n    /** See {@link H2CHasher} */\n    mapToCurve(scalars: bigint[]): H2CPoint<T> {\n      if (!Array.isArray(scalars)) throw new Error('expected array of bigints');\n      for (const i of scalars)\n        if (typeof i !== 'bigint') throw new Error('expected array of bigints');\n      return clear(map(scalars));\n    },\n\n    // hash_to_scalar can produce 0: https://www.rfc-editor.org/errata/eid8393\n    // RFC 9380, draft-irtf-cfrg-bbs-signatures-08\n    hashToScalar(msg: Uint8Array, options?: htfBasicOpts): bigint {\n      // @ts-ignore\n      const N = Point.Fn.ORDER;\n      const opts = Object.assign({}, defaults, { p: N, m: 1, DST: _DST_scalar }, options);\n      return hash_to_field(msg, 1, opts)[0][0];\n    },\n  };\n}\n", "/**\n * SECG secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf).\n *\n * Belongs to Koblitz curves: it has efficiently-computable GLV endomorphism \u03C8,\n * check out {@link EndomorphismOpts}. Seems to be rigid (not backdoored).\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha2.js';\nimport { randomBytes } from '@noble/hashes/utils.js';\nimport { createCurve, type CurveFnWithCreate } from './_shortw_utils.ts';\nimport type { CurveLengths } from './abstract/curve.ts';\nimport {\n  createHasher,\n  type H2CHasher,\n  type H2CMethod,\n  isogenyMap,\n} from './abstract/hash-to-curve.ts';\nimport { Field, mapHashToField, mod, pow2 } from './abstract/modular.ts';\nimport {\n  _normFnElement,\n  type EndomorphismOpts,\n  mapToCurveSimpleSWU,\n  type WeierstrassPoint as PointType,\n  type WeierstrassOpts,\n  type WeierstrassPointCons,\n} from './abstract/weierstrass.ts';\nimport type { Hex, PrivKey } from './utils.ts';\nimport {\n  bytesToNumberBE,\n  concatBytes,\n  ensureBytes,\n  inRange,\n  numberToBytesBE,\n  utf8ToBytes,\n} from './utils.ts';\n\n// Seems like generator was produced from some seed:\n// `Point.BASE.multiply(Point.Fn.inv(2n, N)).toAffine().x`\n// // gives short x 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63n\nconst secp256k1_CURVE: WeierstrassOpts<bigint> = {\n  p: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'),\n  n: BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141'),\n  h: BigInt(1),\n  a: BigInt(0),\n  b: BigInt(7),\n  Gx: BigInt('0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'),\n  Gy: BigInt('0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8'),\n};\n\nconst secp256k1_ENDO: EndomorphismOpts = {\n  beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n  basises: [\n    [BigInt('0x3086d221a7d46bcde86c90e49284eb15'), -BigInt('0xe4437ed6010e88286f547fa90abfe4c3')],\n    [BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8'), BigInt('0x3086d221a7d46bcde86c90e49284eb15')],\n  ],\n};\n\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\n\n/**\n * \u221An = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y: bigint): bigint {\n  const P = secp256k1_CURVE.p;\n  // prettier-ignore\n  const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n  // prettier-ignore\n  const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n  const b2 = (y * y * y) % P; // x^3, 11\n  const b3 = (b2 * b2 * y) % P; // x^7\n  const b6 = (pow2(b3, _3n, P) * b3) % P;\n  const b9 = (pow2(b6, _3n, P) * b3) % P;\n  const b11 = (pow2(b9, _2n, P) * b2) % P;\n  const b22 = (pow2(b11, _11n, P) * b11) % P;\n  const b44 = (pow2(b22, _22n, P) * b22) % P;\n  const b88 = (pow2(b44, _44n, P) * b44) % P;\n  const b176 = (pow2(b88, _88n, P) * b88) % P;\n  const b220 = (pow2(b176, _44n, P) * b44) % P;\n  const b223 = (pow2(b220, _3n, P) * b3) % P;\n  const t1 = (pow2(b223, _23n, P) * b22) % P;\n  const t2 = (pow2(t1, _6n, P) * b2) % P;\n  const root = pow2(t2, _2n, P);\n  if (!Fpk1.eql(Fpk1.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fpk1 = Field(secp256k1_CURVE.p, { sqrt: sqrtMod });\n\n/**\n * secp256k1 curve, ECDSA and ECDH methods.\n *\n * Field: `2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n`\n *\n * @example\n * ```js\n * import { secp256k1 } from '@noble/curves/secp256k1';\n * const { secretKey, publicKey } = secp256k1.keygen();\n * const msg = new TextEncoder().encode('hello');\n * const sig = secp256k1.sign(msg, secretKey);\n * const isValid = secp256k1.verify(sig, msg, publicKey) === true;\n * ```\n */\nexport const secp256k1: CurveFnWithCreate = createCurve(\n  { ...secp256k1_CURVE, Fp: Fpk1, lowS: true, endo: secp256k1_ENDO },\n  sha256\n);\n\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\n  let tagP = TAGGED_HASH_PREFIXES[tag];\n  if (tagP === undefined) {\n    const tagH = sha256(utf8ToBytes(tag));\n    tagP = concatBytes(tagH, tagH);\n    TAGGED_HASH_PREFIXES[tag] = tagP;\n  }\n  return sha256(concatBytes(tagP, ...messages));\n}\n\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toBytes(true).slice(1);\nconst Pointk1 = /* @__PURE__ */ (() => secp256k1.Point)();\nconst hasEven = (y: bigint) => y % _2n === _0n;\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  const { Fn, BASE } = Pointk1;\n  const d_ = _normFnElement(Fn, priv);\n  const p = BASE.multiply(d_); // P = d'\u22C5G; 0 < d' < n check is done inside\n  const scalar = hasEven(p.y) ? d_ : Fn.neg(d_);\n  return { scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x: bigint): PointType<bigint> {\n  const Fp = Fpk1;\n  if (!Fp.isValidNot0(x)) throw new Error('invalid x: Fail if x \u2265 p');\n  const xx = Fp.create(x * x);\n  const c = Fp.create(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = Fp.sqrt(c); // Let y = c^(p+1)/4 mod p. Same as sqrt().\n  // Return the unique point P such that x(P) = x and\n  // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n  if (!hasEven(y)) y = Fp.neg(y);\n  const p = Pointk1.fromAffine({ x, y });\n  p.assertValidity();\n  return p;\n}\nconst num = bytesToNumberBE;\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return Pointk1.Fn.create(num(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(secretKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(secretKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\n\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(message: Hex, secretKey: PrivKey, auxRand: Hex = randomBytes(32)): Uint8Array {\n  const { Fn } = Pointk1;\n  const m = ensureBytes('message', message);\n  const { bytes: px, scalar: d } = schnorrGetExtPubKey(secretKey); // checks for isWithinCurveOrder\n  const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n  const t = Fn.toBytes(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n  const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n  // Let k' = int(rand) mod n. Fail if k' = 0. Let R = k'\u22C5G\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(rand);\n  const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n  const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n  sig.set(rx, 0);\n  sig.set(Fn.toBytes(Fn.create(k + e * d)), 32);\n  // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n  if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\n  const { Fn, BASE } = Pointk1;\n  const sig = ensureBytes('signature', signature, 64);\n  const m = ensureBytes('message', message);\n  const pub = ensureBytes('publicKey', publicKey, 32);\n  try {\n    const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!inRange(r, _1n, secp256k1_CURVE.p)) return false;\n    const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!inRange(s, _1n, secp256k1_CURVE.n)) return false;\n    // int(challenge(bytes(r)||bytes(P)||m))%n\n    const e = challenge(Fn.toBytes(r), pointToBytes(P), m);\n    // R = s\u22C5G - e\u22C5P, where -eP == (n-e)P\n    const R = BASE.multiplyUnsafe(s).add(P.multiplyUnsafe(Fn.neg(e)));\n    const { x, y } = R.toAffine();\n    // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n    if (R.is0() || !hasEven(y) || x !== r) return false;\n    return true;\n  } catch (error) {\n    return false;\n  }\n}\n\nexport type SecpSchnorr = {\n  keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };\n  getPublicKey: typeof schnorrGetPublicKey;\n  sign: typeof schnorrSign;\n  verify: typeof schnorrVerify;\n  Point: WeierstrassPointCons<bigint>;\n  utils: {\n    randomSecretKey: (seed?: Uint8Array) => Uint8Array;\n    pointToBytes: (point: PointType<bigint>) => Uint8Array;\n    lift_x: typeof lift_x;\n    taggedHash: typeof taggedHash;\n\n    /** @deprecated use `randomSecretKey` */\n    randomPrivateKey: (seed?: Uint8Array) => Uint8Array;\n    /** @deprecated use `utils` */\n    numberToBytesBE: typeof numberToBytesBE;\n    /** @deprecated use `utils` */\n    bytesToNumberBE: typeof bytesToNumberBE;\n    /** @deprecated use `modular` */\n    mod: typeof mod;\n  };\n  lengths: CurveLengths;\n};\n/**\n * Schnorr signatures over secp256k1.\n * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n * @example\n * ```js\n * import { schnorr } from '@noble/curves/secp256k1';\n * const { secretKey, publicKey } = schnorr.keygen();\n * // const publicKey = schnorr.getPublicKey(secretKey);\n * const msg = new TextEncoder().encode('hello');\n * const sig = schnorr.sign(msg, secretKey);\n * const isValid = schnorr.verify(sig, msg, publicKey);\n * ```\n */\nexport const schnorr: SecpSchnorr = /* @__PURE__ */ (() => {\n  const size = 32;\n  const seedLength = 48;\n  const randomSecretKey = (seed = randomBytes(seedLength)): Uint8Array => {\n    return mapHashToField(seed, secp256k1_CURVE.n);\n  };\n  // TODO: remove\n  secp256k1.utils.randomSecretKey;\n  function keygen(seed?: Uint8Array) {\n    const secretKey = randomSecretKey(seed);\n    return { secretKey, publicKey: schnorrGetPublicKey(secretKey) };\n  }\n  return {\n    keygen,\n    getPublicKey: schnorrGetPublicKey,\n    sign: schnorrSign,\n    verify: schnorrVerify,\n    Point: Pointk1,\n    utils: {\n      randomSecretKey: randomSecretKey,\n      randomPrivateKey: randomSecretKey,\n      taggedHash,\n\n      // TODO: remove\n      lift_x,\n      pointToBytes,\n      numberToBytesBE,\n      bytesToNumberBE,\n      mod,\n    },\n    lengths: {\n      secretKey: size,\n      publicKey: size,\n      publicKeyHasPrefix: false,\n      signature: size * 2,\n      seed: seedLength,\n    },\n  };\n})();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fpk1,\n    [\n      // xNum\n      [\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n        '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n        '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n      ],\n      // xDen\n      [\n        '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n        '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n      // yNum\n      [\n        '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n        '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n        '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n        '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n      ],\n      // yDen\n      [\n        '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n        '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n        '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n    ].map((i) => i.map((j) => BigInt(j))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fpk1, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fpk1.create(BigInt('-11')),\n  }))();\n\n/** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */\nexport const secp256k1_hasher: H2CHasher<bigint> = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.Point,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fpk1.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fpk1.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  ))();\n\n/** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */\nexport const hashToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() =>\n  secp256k1_hasher.hashToCurve)();\n\n/** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */\nexport const encodeToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() =>\n  secp256k1_hasher.encodeToCurve)();\n", "/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\nexport interface Coder<F, T> {\n  encode(from: F): T;\n  decode(to: T): F;\n}\n\nexport interface BytesCoder extends Coder<Uint8Array, string> {\n  encode: (data: Uint8Array) => string;\n  decode: (str: string) => Uint8Array;\n}\n\nfunction isBytes(a: unknown): a is Uint8Array {\n  return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n  if (!isBytes(b)) throw new Error('Uint8Array expected');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n\nfunction isArrayOf(isString: boolean, arr: any[]) {\n  if (!Array.isArray(arr)) return false;\n  if (arr.length === 0) return true;\n  if (isString) {\n    return arr.every((item) => typeof item === 'string');\n  } else {\n    return arr.every((item) => Number.isSafeInteger(item));\n  }\n}\n\n// no abytes: seems to have 10% slowdown. Why?!\n\nfunction afn(input: Function): input is Function {\n  if (typeof input !== 'function') throw new Error('function expected');\n  return true;\n}\n\nfunction astr(label: string, input: unknown): input is string {\n  if (typeof input !== 'string') throw new Error(`${label}: string expected`);\n  return true;\n}\n\nfunction anumber(n: number): void {\n  if (!Number.isSafeInteger(n)) throw new Error(`invalid integer: ${n}`);\n}\n\nfunction aArr(input: any[]) {\n  if (!Array.isArray(input)) throw new Error('array expected');\n}\nfunction astrArr(label: string, input: string[]) {\n  if (!isArrayOf(true, input)) throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label: string, input: number[]) {\n  if (!isArrayOf(false, input)) throw new Error(`${label}: array of numbers expected`);\n}\n\n// TODO: some recusive type inference so it would check correct order of input/output inside rest?\n// like <string, number>, <number, bytes>, <bytes, float>\ntype Chain = [Coder<any, any>, ...Coder<any, any>[]];\n// Extract info from Coder type\ntype Input<F> = F extends Coder<infer T, any> ? T : never;\ntype Output<F> = F extends Coder<any, infer T> ? T : never;\n// Generic function for arrays\ntype First<T> = T extends [infer U, ...any[]] ? U : never;\ntype Last<T> = T extends [...any[], infer U] ? U : never;\ntype Tail<T> = T extends [any, ...infer U] ? U : never;\n\ntype AsChain<C extends Chain, Rest = Tail<C>> = {\n  // C[K] = Coder<Input<C[K]>, Input<Rest[k]>>\n  [K in keyof C]: Coder<Input<C[K]>, Input<K extends keyof Rest ? Rest[K] : any>>;\n};\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain<T extends Chain & AsChain<T>>(...args: T): Coder<Input<First<T>>, Output<Last<T>>> {\n  const id = (a: any) => a;\n  // Wrap call in closure so JIT can inline calls\n  const wrap = (a: any, b: any) => (c: any) => a(b(c));\n  // Construct chain of args[-1].encode(args[-2].encode([...]))\n  const encode = args.map((x) => x.encode).reduceRight(wrap, id);\n  // Construct chain of args[0].decode(args[1].decode(...))\n  const decode = args.map((x) => x.decode).reduce(wrap, id);\n  return { encode, decode };\n}\n\n/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters: string | string[]): Coder<number[], string[]> {\n  // mapping 1 to \"b\"\n  const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n  const len = lettersA.length;\n  astrArr('alphabet', lettersA);\n\n  // mapping \"b\" to 1\n  const indexes = new Map(lettersA.map((l, i) => [l, i]));\n  return {\n    encode: (digits: number[]) => {\n      aArr(digits);\n      return digits.map((i) => {\n        if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n          throw new Error(\n            `alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`\n          );\n        return lettersA[i]!;\n      });\n    },\n    decode: (input: string[]): number[] => {\n      aArr(input);\n      return input.map((letter) => {\n        astr('alphabet.decode', letter);\n        const i = indexes.get(letter);\n        if (i === undefined) throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n        return i;\n      });\n    },\n  };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = ''): Coder<string[], string> {\n  astr('join', separator);\n  return {\n    encode: (from) => {\n      astrArr('join.decode', from);\n      return from.join(separator);\n    },\n    decode: (to) => {\n      astr('join.decode', to);\n      return to.split(separator);\n    },\n  };\n}\n\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits: number, chr = '='): Coder<string[], string[]> {\n  anumber(bits);\n  astr('padding', chr);\n  return {\n    encode(data: string[]): string[] {\n      astrArr('padding.encode', data);\n      while ((data.length * bits) % 8) data.push(chr);\n      return data;\n    },\n    decode(input: string[]): string[] {\n      astrArr('padding.decode', input);\n      let end = input.length;\n      if ((end * bits) % 8)\n        throw new Error('padding: invalid, string should have whole number of bytes');\n      for (; end > 0 && input[end - 1] === chr; end--) {\n        const last = end - 1;\n        const byte = last * bits;\n        if (byte % 8 === 0) throw new Error('padding: invalid, string has too much padding');\n      }\n      return input.slice(0, end);\n    },\n  };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize<T>(fn: (val: T) => T): Coder<T, T> {\n  afn(fn);\n  return { encode: (from: T) => from, decode: (to: T) => fn(to) };\n}\n\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data: number[], from: number, to: number): number[] {\n  // base 1 is impossible\n  if (from < 2) throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n  if (to < 2) throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n  aArr(data);\n  if (!data.length) return [];\n  let pos = 0;\n  const res = [];\n  const digits = Array.from(data, (d) => {\n    anumber(d);\n    if (d < 0 || d >= from) throw new Error(`invalid integer: ${d}`);\n    return d;\n  });\n  const dlen = digits.length;\n  while (true) {\n    let carry = 0;\n    let done = true;\n    for (let i = pos; i < dlen; i++) {\n      const digit = digits[i]!;\n      const fromCarry = from * carry;\n      const digitBase = fromCarry + digit;\n      if (\n        !Number.isSafeInteger(digitBase) ||\n        fromCarry / from !== carry ||\n        digitBase - digit !== fromCarry\n      ) {\n        throw new Error('convertRadix: carry overflow');\n      }\n      const div = digitBase / to;\n      carry = digitBase % to;\n      const rounded = Math.floor(div);\n      digits[i] = rounded;\n      if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n        throw new Error('convertRadix: carry overflow');\n      if (!done) continue;\n      else if (!rounded) pos = i;\n      else done = false;\n    }\n    res.push(carry);\n    if (done) break;\n  }\n  for (let i = 0; i < data.length - 1 && data[i] === 0; i++) res.push(0);\n  return res.reverse();\n}\n\nconst gcd = (a: number, b: number): number => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from: number, to: number) =>\n  from + (to - gcd(from, to));\nconst powers: number[] = /* @__PURE__ */ (() => {\n  let res = [];\n  for (let i = 0; i < 40; i++) res.push(2 ** i);\n  return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data: number[], from: number, to: number, padding: boolean): number[] {\n  aArr(data);\n  if (from <= 0 || from > 32) throw new Error(`convertRadix2: wrong from=${from}`);\n  if (to <= 0 || to > 32) throw new Error(`convertRadix2: wrong to=${to}`);\n  if (radix2carry(from, to) > 32) {\n    throw new Error(\n      `convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`\n    );\n  }\n  let carry = 0;\n  let pos = 0; // bitwise position in current element\n  const max = powers[from]!;\n  const mask = powers[to]! - 1;\n  const res: number[] = [];\n  for (const n of data) {\n    anumber(n);\n    if (n >= max) throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n    carry = (carry << from) | n;\n    if (pos + from > 32) throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n    pos += from;\n    for (; pos >= to; pos -= to) res.push(((carry >> (pos - to)) & mask) >>> 0);\n    const pow = powers[pos];\n    if (pow === undefined) throw new Error('invalid carry');\n    carry &= pow - 1; // clean carry, otherwise it will cause overflow\n  }\n  carry = (carry << (to - pos)) & mask;\n  if (!padding && pos >= from) throw new Error('Excess padding');\n  if (!padding && carry > 0) throw new Error(`Non-zero padding: ${carry}`);\n  if (padding && pos > 0) res.push(carry >>> 0);\n  return res;\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num: number): Coder<Uint8Array, number[]> {\n  anumber(num);\n  const _256 = 2 ** 8;\n  return {\n    encode: (bytes: Uint8Array) => {\n      if (!isBytes(bytes)) throw new Error('radix.encode input should be Uint8Array');\n      return convertRadix(Array.from(bytes), _256, num);\n    },\n    decode: (digits: number[]) => {\n      anumArr('radix.decode', digits);\n      return Uint8Array.from(convertRadix(digits, num, _256));\n    },\n  };\n}\n\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits: number, revPadding = false): Coder<Uint8Array, number[]> {\n  anumber(bits);\n  if (bits <= 0 || bits > 32) throw new Error('radix2: bits should be in (0..32]');\n  if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n    throw new Error('radix2: carry overflow');\n  return {\n    encode: (bytes: Uint8Array) => {\n      if (!isBytes(bytes)) throw new Error('radix2.encode input should be Uint8Array');\n      return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n    },\n    decode: (digits: number[]) => {\n      anumArr('radix2.decode', digits);\n      return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n    },\n  };\n}\n\ntype ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;\nfunction unsafeWrapper<T extends (...args: any) => any>(fn: T) {\n  afn(fn);\n  return function (...args: ArgumentTypes<T>): ReturnType<T> | void {\n    try {\n      return fn.apply(null, args);\n    } catch (e) {}\n  };\n}\n\nfunction checksum(\n  len: number,\n  fn: (data: Uint8Array) => Uint8Array\n): Coder<Uint8Array, Uint8Array> {\n  anumber(len);\n  afn(fn);\n  return {\n    encode(data: Uint8Array) {\n      if (!isBytes(data)) throw new Error('checksum.encode: input should be Uint8Array');\n      const sum = fn(data).slice(0, len);\n      const res = new Uint8Array(data.length + len);\n      res.set(data);\n      res.set(sum, data.length);\n      return res;\n    },\n    decode(data: Uint8Array) {\n      if (!isBytes(data)) throw new Error('checksum.decode: input should be Uint8Array');\n      const payload = data.slice(0, -len);\n      const oldChecksum = data.slice(-len);\n      const newChecksum = fn(payload).slice(0, len);\n      for (let i = 0; i < len; i++)\n        if (newChecksum[i] !== oldChecksum[i]) throw new Error('Invalid checksum');\n      return payload;\n    },\n  };\n}\n\n// prettier-ignore\nexport const utils: { alphabet: typeof alphabet; chain: typeof chain; checksum: typeof checksum; convertRadix: typeof convertRadix; convertRadix2: typeof convertRadix2; radix: typeof radix; radix2: typeof radix2; join: typeof join; padding: typeof padding; } = {\n  alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n\n// RFC 4648 aka RFC 3548\n// ---------------------\n\n/**\n * base16 encoding from RFC 4648.\n * @example\n * ```js\n * base16.encode(Uint8Array.from([0x12, 0xab]));\n * // => '12AB'\n * ```\n */\nexport const base16: BytesCoder = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\n\n/**\n * base32 encoding from RFC 4648. Has padding.\n * Use `base32nopad` for unpadded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ===='\n * base32.decode('CKVQ====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32: BytesCoder = chain(\n  radix2(5),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n  padding(5),\n  join('')\n);\n\n/**\n * base32 encoding from RFC 4648. No padding.\n * Use `base32` for padded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ'\n * base32nopad.decode('CKVQ');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32nopad: BytesCoder = chain(\n  radix2(5),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n  join('')\n);\n/**\n * base32 encoding from RFC 4648. Padded. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hexnopad` for unpadded version.\n * @example\n * ```js\n * base32hex.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG===='\n * base32hex.decode('2ALG====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hex: BytesCoder = chain(\n  radix2(5),\n  alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n  padding(5),\n  join('')\n);\n\n/**\n * base32 encoding from RFC 4648. No padding. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hex` for padded version.\n * @example\n * ```js\n * base32hexnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG'\n * base32hexnopad.decode('2ALG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hexnopad: BytesCoder = chain(\n  radix2(5),\n  alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n  join('')\n);\n/**\n * base32 encoding from RFC 4648. Doug Crockford's version.\n * https://www.crockford.com/base32.html\n * @example\n * ```js\n * base32crockford.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ANG'\n * base32crockford.decode('2ANG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32crockford: BytesCoder = chain(\n  radix2(5),\n  alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'),\n  join(''),\n  normalize((s: string) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1'))\n);\n\n// Built-in base64 conversion https://caniuse.com/mdn-javascript_builtins_uint8array_frombase64\n// prettier-ignore\nconst hasBase64Builtin: boolean = /* @__PURE__ */ (() =>\n  typeof (Uint8Array as any).from([]).toBase64 === 'function' &&\n  typeof (Uint8Array as any).fromBase64 === 'function')();\n\nconst decodeBase64Builtin = (s: string, isUrl: boolean) => {\n  astr('base64', s);\n  const re = isUrl ? /^[A-Za-z0-9=_-]+$/ : /^[A-Za-z0-9=+/]+$/;\n  const alphabet = isUrl ? 'base64url' : 'base64';\n  if (s.length > 0 && !re.test(s)) throw new Error('invalid base64');\n  return (Uint8Array as any).fromBase64(s, { alphabet, lastChunkHandling: 'strict' });\n};\n\n/**\n * base64 from RFC 4648. Padded.\n * Use `base64nopad` for unpadded version.\n * Also check out `base64url`, `base64urlnopad`.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64: BytesCoder = hasBase64Builtin ? {\n  encode(b) { abytes(b); return (b as any).toBase64(); },\n  decode(s) { return decodeBase64Builtin(s, false); },\n} : chain(\n  radix2(6),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n  padding(6),\n  join('')\n);\n/**\n * base64 from RFC 4648. No padding.\n * Use `base64` for padded version.\n * @example\n * ```js\n * base64nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64nopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64nopad: BytesCoder = chain(\n  radix2(6),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n  join('')\n);\n\n/**\n * base64 from RFC 4648, using URL-safe alphabet. Padded.\n * Use `base64urlnopad` for unpadded version.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64url.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64url.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64url: BytesCoder = hasBase64Builtin ? {\n  encode(b) { abytes(b); return (b as any).toBase64({ alphabet: 'base64url' }); },\n  decode(s) { return decodeBase64Builtin(s, true); },\n} : chain(\n  radix2(6),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n  padding(6),\n  join('')\n);\n\n/**\n * base64 from RFC 4648, using URL-safe alphabet. No padding.\n * Use `base64url` for padded version.\n * @example\n * ```js\n * base64urlnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64urlnopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64urlnopad: BytesCoder = chain(\n  radix2(6),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n  join('')\n);\n\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc: string) =>\n  chain(radix(58), alphabet(abc), join(''));\n\n/**\n * base58: base64 without ambigous characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n * @example\n * ```js\n * base58.decode('01abcdef');\n * // => '3UhJW'\n * ```\n */\nexport const base58: BytesCoder = genBase58(\n  '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n);\n/**\n * base58: flickr version. Check out `base58`.\n */\nexport const base58flickr: BytesCoder = genBase58(\n  '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n);\n/**\n * base58: XRP version. Check out `base58`.\n */\nexport const base58xrp: BytesCoder = genBase58(\n  'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'\n);\n\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n\n/**\n * base58: XMR version. Check out `base58`.\n * Done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n * Block encoding significantly reduces quadratic complexity of base58.\n */\nexport const base58xmr: BytesCoder = {\n  encode(data: Uint8Array) {\n    let res = '';\n    for (let i = 0; i < data.length; i += 8) {\n      const block = data.subarray(i, i + 8);\n      res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length]!, '1');\n    }\n    return res;\n  },\n  decode(str: string) {\n    let res: number[] = [];\n    for (let i = 0; i < str.length; i += 11) {\n      const slice = str.slice(i, i + 11);\n      const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n      const block = base58.decode(slice);\n      for (let j = 0; j < block.length - blockLen; j++) {\n        if (block[j] !== 0) throw new Error('base58xmr: wrong padding');\n      }\n      res = res.concat(Array.from(block.slice(block.length - blockLen)));\n    }\n    return Uint8Array.from(res);\n  },\n};\n\n/**\n * Method, which creates base58check encoder.\n * Requires function, calculating sha256.\n */\nexport const createBase58check = (sha256: (data: Uint8Array) => Uint8Array): BytesCoder =>\n  chain(\n    checksum(4, (data) => sha256(sha256(data))),\n    base58\n  );\n\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexport const base58check: (sha256: (data: Uint8Array) => Uint8Array) => BytesCoder =\n  createBase58check;\n\n// Bech32 code\n// -----------\nexport interface Bech32Decoded<Prefix extends string = string> {\n  prefix: Prefix;\n  words: number[];\n}\nexport interface Bech32DecodedWithArray<Prefix extends string = string> {\n  prefix: Prefix;\n  words: number[];\n  bytes: Uint8Array;\n}\n\nconst BECH_ALPHABET: Coder<number[], string> = chain(\n  alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'),\n  join('')\n);\n\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre: number): number {\n  const b = pre >> 25;\n  let chk = (pre & 0x1ffffff) << 5;\n  for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n    if (((b >> i) & 1) === 1) chk ^= POLYMOD_GENERATORS[i]!;\n  }\n  return chk;\n}\n\nfunction bechChecksum(prefix: string, words: number[], encodingConst = 1): string {\n  const len = prefix.length;\n  let chk = 1;\n  for (let i = 0; i < len; i++) {\n    const c = prefix.charCodeAt(i);\n    if (c < 33 || c > 126) throw new Error(`Invalid prefix (${prefix})`);\n    chk = bech32Polymod(chk) ^ (c >> 5);\n  }\n  chk = bech32Polymod(chk);\n  for (let i = 0; i < len; i++) chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n  for (let v of words) chk = bech32Polymod(chk) ^ v;\n  for (let i = 0; i < 6; i++) chk = bech32Polymod(chk);\n  chk ^= encodingConst;\n  return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]!], 30, 5, false));\n}\n\nexport interface Bech32 {\n  encode<Prefix extends string>(\n    prefix: Prefix,\n    words: number[] | Uint8Array,\n    limit?: number | false\n  ): `${Lowercase<Prefix>}1${string}`;\n  decode<Prefix extends string>(\n    str: `${Prefix}1${string}`,\n    limit?: number | false\n  ): Bech32Decoded<Prefix>;\n  encodeFromBytes(prefix: string, bytes: Uint8Array): string;\n  decodeToBytes(str: string): Bech32DecodedWithArray;\n  decodeUnsafe(str: string, limit?: number | false): void | Bech32Decoded<string>;\n  fromWords(to: number[]): Uint8Array;\n  fromWordsUnsafe(to: number[]): void | Uint8Array;\n  toWords(from: Uint8Array): number[];\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding: 'bech32' | 'bech32m'): Bech32 {\n  const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n  const _words = radix2(5);\n  const fromWords = _words.decode;\n  const toWords = _words.encode;\n  const fromWordsUnsafe = unsafeWrapper(fromWords);\n\n  function encode<Prefix extends string>(\n    prefix: Prefix,\n    words: number[] | Uint8Array,\n    limit: number | false = 90\n  ): `${Lowercase<Prefix>}1${string}` {\n    astr('bech32.encode prefix', prefix);\n    if (isBytes(words)) words = Array.from(words);\n    anumArr('bech32.encode', words);\n    const plen = prefix.length;\n    if (plen === 0) throw new TypeError(`Invalid prefix length ${plen}`);\n    const actualLength = plen + 7 + words.length;\n    if (limit !== false && actualLength > limit)\n      throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n    const lowered = prefix.toLowerCase();\n    const sum = bechChecksum(lowered, words, ENCODING_CONST);\n    return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}` as `${Lowercase<Prefix>}1${string}`;\n  }\n\n  function decode<Prefix extends string>(\n    str: `${Prefix}1${string}`,\n    limit?: number | false\n  ): Bech32Decoded<Prefix>;\n  function decode(str: string, limit?: number | false): Bech32Decoded;\n  function decode(str: string, limit: number | false = 90): Bech32Decoded {\n    astr('bech32.decode input', str);\n    const slen = str.length;\n    if (slen < 8 || (limit !== false && slen > limit))\n      throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n    // don't allow mixed case\n    const lowered = str.toLowerCase();\n    if (str !== lowered && str !== str.toUpperCase())\n      throw new Error(`String must be lowercase or uppercase`);\n    const sepIndex = lowered.lastIndexOf('1');\n    if (sepIndex === 0 || sepIndex === -1)\n      throw new Error(`Letter \"1\" must be present between prefix and data only`);\n    const prefix = lowered.slice(0, sepIndex);\n    const data = lowered.slice(sepIndex + 1);\n    if (data.length < 6) throw new Error('Data must be at least 6 characters long');\n    const words = BECH_ALPHABET.decode(data).slice(0, -6);\n    const sum = bechChecksum(prefix, words, ENCODING_CONST);\n    if (!data.endsWith(sum)) throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n    return { prefix, words };\n  }\n\n  const decodeUnsafe = unsafeWrapper(decode);\n\n  function decodeToBytes(str: string): Bech32DecodedWithArray {\n    const { prefix, words } = decode(str, false);\n    return { prefix, words, bytes: fromWords(words) };\n  }\n\n  function encodeFromBytes(prefix: string, bytes: Uint8Array) {\n    return encode(prefix, toWords(bytes));\n  }\n\n  return {\n    encode,\n    decode,\n    encodeFromBytes,\n    decodeToBytes,\n    decodeUnsafe,\n    fromWords,\n    fromWordsUnsafe,\n    toWords,\n  };\n}\n\n/**\n * bech32 from BIP 173. Operates on words.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32: Bech32 = genBech32('bech32');\n\n/**\n * bech32m from BIP 350. Operates on words.\n * It was to mitigate `bech32` weaknesses.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32m: Bech32 = genBech32('bech32m');\n\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * ```js\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n * ```\n */\nexport const utf8: BytesCoder = {\n  encode: (data) => new TextDecoder().decode(data),\n  decode: (str) => new TextEncoder().encode(str),\n};\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\n// prettier-ignore\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n  typeof (Uint8Array as any).from([]).toHex === 'function' &&\n  typeof (Uint8Array as any).fromHex === 'function')();\n// prettier-ignore\nconst hexBuiltin: BytesCoder = {\n  encode(data) { abytes(data); return (data as any).toHex(); },\n  decode(s) { astr('hex', s); return (Uint8Array as any).fromHex(s); },\n};\n/**\n * hex string decoder. Uses built-in function, when available.\n * @example\n * ```js\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n * ```\n */\nexport const hex: BytesCoder = hasHexBuiltin\n  ? hexBuiltin\n  : chain(\n      radix2(4),\n      alphabet('0123456789abcdef'),\n      join(''),\n      normalize((s: string) => {\n        if (typeof s !== 'string' || s.length % 2 !== 0)\n          throw new TypeError(\n            `hex.decode: expected string, got ${typeof s} with length ${s.length}`\n          );\n        return s.toLowerCase();\n      })\n    );\n\nexport type SomeCoders = {\n  utf8: BytesCoder;\n  hex: BytesCoder;\n  base16: BytesCoder;\n  base32: BytesCoder;\n  base64: BytesCoder;\n  base64url: BytesCoder;\n  base58: BytesCoder;\n  base58xmr: BytesCoder;\n};\n// prettier-ignore\nconst CODERS: SomeCoders = {\n  utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\ntype CoderType = keyof SomeCoders;\nconst coderTypeError =\n  'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n\n/** @deprecated */\nexport const bytesToString = (type: CoderType, bytes: Uint8Array): string => {\n  if (typeof type !== 'string' || !CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n  if (!isBytes(bytes)) throw new TypeError('bytesToString() expects Uint8Array');\n  return CODERS[type].encode(bytes);\n};\n\n/** @deprecated */\nexport const str: (type: CoderType, bytes: Uint8Array) => string = bytesToString; // as in python, but for bytes only\n\n/** @deprecated */\nexport const stringToBytes = (type: CoderType, str: string): Uint8Array => {\n  if (!CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n  if (typeof str !== 'string') throw new TypeError('stringToBytes() expects string');\n  return CODERS[type].decode(str);\n};\n/** @deprecated */\nexport const bytes: (type: CoderType, str: string) => Uint8Array = stringToBytes;\n", "/**\n * @module BIP32 hierarchical deterministic (HD) wallets over secp256k1.\n * @example\n * ```js\n * import { HDKey } from \"@scure/bip32\";\n * const hdkey1 = HDKey.fromMasterSeed(seed);\n * const hdkey2 = HDKey.fromExtendedKey(base58key);\n * const hdkey3 = HDKey.fromJSON({ xpriv: string });\n *\n * // props\n * [hdkey1.depth, hdkey1.index, hdkey1.chainCode];\n * console.log(hdkey2.privateKey, hdkey2.publicKey);\n * console.log(hdkey3.derive(\"m/0/2147483647'/1\"));\n * const sig = hdkey3.sign(hash);\n * hdkey3.verify(hash, sig);\n * ```\n */\n/*! scure-bip32 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */\nimport { mod } from '@noble/curves/abstract/modular';\nimport { secp256k1 as secp } from '@noble/curves/secp256k1';\nimport { hmac } from '@noble/hashes/hmac';\nimport { ripemd160 } from '@noble/hashes/legacy';\nimport { sha256, sha512 } from '@noble/hashes/sha2';\nimport {\n  abytes,\n  bytesToHex,\n  concatBytes,\n  createView,\n  hexToBytes,\n  utf8ToBytes,\n} from '@noble/hashes/utils';\nimport { createBase58check } from '@scure/base';\n\nconst Point = secp.ProjectivePoint;\nconst base58check = createBase58check(sha256);\n\nfunction bytesToNumber(bytes: Uint8Array): bigint {\n  abytes(bytes);\n  const h = bytes.length === 0 ? '0' : bytesToHex(bytes);\n  return BigInt('0x' + h);\n}\n\nfunction numberToBytes(num: bigint): Uint8Array {\n  if (typeof num !== 'bigint') throw new Error('bigint expected');\n  return hexToBytes(num.toString(16).padStart(64, '0'));\n}\n\nconst MASTER_SECRET = utf8ToBytes('Bitcoin seed');\n// Bitcoin hardcoded by default\nconst BITCOIN_VERSIONS: Versions = { private: 0x0488ade4, public: 0x0488b21e };\nexport const HARDENED_OFFSET: number = 0x80000000;\n\nexport interface Versions {\n  private: number;\n  public: number;\n}\n\nconst hash160 = (data: Uint8Array) => ripemd160(sha256(data));\nconst fromU32 = (data: Uint8Array) => createView(data).getUint32(0, false);\nconst toU32 = (n: number) => {\n  if (!Number.isSafeInteger(n) || n < 0 || n > 2 ** 32 - 1) {\n    throw new Error('invalid number, should be from 0 to 2**32-1, got ' + n);\n  }\n  const buf = new Uint8Array(4);\n  createView(buf).setUint32(0, n, false);\n  return buf;\n};\n\ninterface HDKeyOpt {\n  versions?: Versions;\n  depth?: number;\n  index?: number;\n  parentFingerprint?: number;\n  chainCode?: Uint8Array;\n  publicKey?: Uint8Array;\n  privateKey?: Uint8Array | bigint;\n}\n\nexport class HDKey {\n  get fingerprint(): number {\n    if (!this.pubHash) {\n      throw new Error('No publicKey set!');\n    }\n    return fromU32(this.pubHash);\n  }\n  get identifier(): Uint8Array | undefined {\n    return this.pubHash;\n  }\n  get pubKeyHash(): Uint8Array | undefined {\n    return this.pubHash;\n  }\n  get privateKey(): Uint8Array | null {\n    return this.privKeyBytes || null;\n  }\n  get publicKey(): Uint8Array | null {\n    return this.pubKey || null;\n  }\n  get privateExtendedKey(): string {\n    const priv = this.privateKey;\n    if (!priv) {\n      throw new Error('No private key');\n    }\n    return base58check.encode(\n      this.serialize(this.versions.private, concatBytes(new Uint8Array([0]), priv))\n    );\n  }\n  get publicExtendedKey(): string {\n    if (!this.pubKey) {\n      throw new Error('No public key');\n    }\n    return base58check.encode(this.serialize(this.versions.public, this.pubKey));\n  }\n\n  public static fromMasterSeed(seed: Uint8Array, versions: Versions = BITCOIN_VERSIONS): HDKey {\n    abytes(seed);\n    if (8 * seed.length < 128 || 8 * seed.length > 512) {\n      throw new Error(\n        'HDKey: seed length must be between 128 and 512 bits; 256 bits is advised, got ' +\n          seed.length\n      );\n    }\n    const I = hmac(sha512, MASTER_SECRET, seed);\n    return new HDKey({\n      versions,\n      chainCode: I.slice(32),\n      privateKey: I.slice(0, 32),\n    });\n  }\n\n  public static fromExtendedKey(base58key: string, versions: Versions = BITCOIN_VERSIONS): HDKey {\n    // => version(4) || depth(1) || fingerprint(4) || index(4) || chain(32) || key(33)\n    const keyBuffer: Uint8Array = base58check.decode(base58key);\n    const keyView = createView(keyBuffer);\n    const version = keyView.getUint32(0, false);\n    const opt = {\n      versions,\n      depth: keyBuffer[4],\n      parentFingerprint: keyView.getUint32(5, false),\n      index: keyView.getUint32(9, false),\n      chainCode: keyBuffer.slice(13, 45),\n    };\n    const key = keyBuffer.slice(45);\n    const isPriv = key[0] === 0;\n    if (version !== versions[isPriv ? 'private' : 'public']) {\n      throw new Error('Version mismatch');\n    }\n    if (isPriv) {\n      return new HDKey({ ...opt, privateKey: key.slice(1) });\n    } else {\n      return new HDKey({ ...opt, publicKey: key });\n    }\n  }\n\n  public static fromJSON(json: { xpriv: string }): HDKey {\n    return HDKey.fromExtendedKey(json.xpriv);\n  }\n  public readonly versions: Versions;\n  public readonly depth: number = 0;\n  public readonly index: number = 0;\n  public readonly chainCode: Uint8Array | null = null;\n  public readonly parentFingerprint: number = 0;\n  private privKey?: bigint;\n  private privKeyBytes?: Uint8Array;\n  private pubKey?: Uint8Array;\n  private pubHash: Uint8Array | undefined;\n\n  constructor(opt: HDKeyOpt) {\n    if (!opt || typeof opt !== 'object') {\n      throw new Error('HDKey.constructor must not be called directly');\n    }\n    this.versions = opt.versions || BITCOIN_VERSIONS;\n    this.depth = opt.depth || 0;\n    this.chainCode = opt.chainCode || null;\n    this.index = opt.index || 0;\n    this.parentFingerprint = opt.parentFingerprint || 0;\n    if (!this.depth) {\n      if (this.parentFingerprint || this.index) {\n        throw new Error('HDKey: zero depth with non-zero index/parent fingerprint');\n      }\n    }\n    if (opt.publicKey && opt.privateKey) {\n      throw new Error('HDKey: publicKey and privateKey at same time.');\n    }\n    if (opt.privateKey) {\n      if (!secp.utils.isValidPrivateKey(opt.privateKey)) {\n        throw new Error('Invalid private key');\n      }\n      this.privKey =\n        typeof opt.privateKey === 'bigint' ? opt.privateKey : bytesToNumber(opt.privateKey);\n      this.privKeyBytes = numberToBytes(this.privKey);\n      this.pubKey = secp.getPublicKey(opt.privateKey, true);\n    } else if (opt.publicKey) {\n      this.pubKey = Point.fromHex(opt.publicKey).toRawBytes(true); // force compressed point\n    } else {\n      throw new Error('HDKey: no public or private key provided');\n    }\n    this.pubHash = hash160(this.pubKey);\n  }\n\n  public derive(path: string): HDKey {\n    if (!/^[mM]'?/.test(path)) {\n      throw new Error('Path must start with \"m\" or \"M\"');\n    }\n    if (/^[mM]'?$/.test(path)) {\n      return this;\n    }\n    const parts = path.replace(/^[mM]'?\\//, '').split('/');\n    // tslint:disable-next-line\n    let child: HDKey = this;\n    for (const c of parts) {\n      const m = /^(\\d+)('?)$/.exec(c);\n      const m1 = m && m[1];\n      if (!m || m.length !== 3 || typeof m1 !== 'string')\n        throw new Error('invalid child index: ' + c);\n      let idx = +m1;\n      if (!Number.isSafeInteger(idx) || idx >= HARDENED_OFFSET) {\n        throw new Error('Invalid index');\n      }\n      // hardened key\n      if (m[2] === \"'\") {\n        idx += HARDENED_OFFSET;\n      }\n      child = child.deriveChild(idx);\n    }\n    return child;\n  }\n\n  public deriveChild(index: number): HDKey {\n    if (!this.pubKey || !this.chainCode) {\n      throw new Error('No publicKey or chainCode set');\n    }\n    let data = toU32(index);\n    if (index >= HARDENED_OFFSET) {\n      // Hardened\n      const priv = this.privateKey;\n      if (!priv) {\n        throw new Error('Could not derive hardened child key');\n      }\n      // Hardened child: 0x00 || ser256(kpar) || ser32(index)\n      data = concatBytes(new Uint8Array([0]), priv, data);\n    } else {\n      // Normal child: serP(point(kpar)) || ser32(index)\n      data = concatBytes(this.pubKey, data);\n    }\n    const I = hmac(sha512, this.chainCode, data);\n    const childTweak = bytesToNumber(I.slice(0, 32));\n    const chainCode = I.slice(32);\n    if (!secp.utils.isValidPrivateKey(childTweak)) {\n      throw new Error('Tweak bigger than curve order');\n    }\n    const opt: HDKeyOpt = {\n      versions: this.versions,\n      chainCode,\n      depth: this.depth + 1,\n      parentFingerprint: this.fingerprint,\n      index,\n    };\n    try {\n      // Private parent key -> private child key\n      if (this.privateKey) {\n        const added = mod(this.privKey! + childTweak, secp.CURVE.n);\n        if (!secp.utils.isValidPrivateKey(added)) {\n          throw new Error('The tweak was out of range or the resulted private key is invalid');\n        }\n        opt.privateKey = added;\n      } else {\n        const added = Point.fromHex(this.pubKey).add(Point.fromPrivateKey(childTweak));\n        // Cryptographically impossible: hmac-sha512 preimage would need to be found\n        if (added.equals(Point.ZERO)) {\n          throw new Error('The tweak was equal to negative P, which made the result key invalid');\n        }\n        opt.publicKey = added.toRawBytes(true);\n      }\n      return new HDKey(opt);\n    } catch (err) {\n      return this.deriveChild(index + 1);\n    }\n  }\n\n  public sign(hash: Uint8Array): Uint8Array {\n    if (!this.privateKey) {\n      throw new Error('No privateKey set!');\n    }\n    abytes(hash, 32);\n    return secp.sign(hash, this.privKey!).toCompactRawBytes();\n  }\n\n  public verify(hash: Uint8Array, signature: Uint8Array): boolean {\n    abytes(hash, 32);\n    abytes(signature, 64);\n    if (!this.publicKey) {\n      throw new Error('No publicKey set!');\n    }\n    let sig;\n    try {\n      sig = secp.Signature.fromCompact(signature);\n    } catch (error) {\n      return false;\n    }\n    return secp.verify(sig, hash, this.publicKey);\n  }\n\n  public wipePrivateData(): this {\n    this.privKey = undefined;\n    if (this.privKeyBytes) {\n      this.privKeyBytes.fill(0);\n      this.privKeyBytes = undefined;\n    }\n    return this;\n  }\n  public toJSON(): { xpriv: string; xpub: string } {\n    return {\n      xpriv: this.privateExtendedKey,\n      xpub: this.publicExtendedKey,\n    };\n  }\n\n  private serialize(version: number, key: Uint8Array) {\n    if (!this.chainCode) {\n      throw new Error('No chainCode set');\n    }\n    abytes(key, 33);\n    // version(4) || depth(1) || fingerprint(4) || index(4) || chain(32) || key(33)\n    return concatBytes(\n      toU32(version),\n      new Uint8Array([this.depth]),\n      toU32(this.parentFingerprint),\n      toU32(this.index),\n      this.chainCode,\n      key\n    );\n  }\n}\n", "/**\n * PBKDF (RFC 2898). Can be used to create a key from password and salt.\n * @module\n */\nimport { hmac } from './hmac.ts';\n// prettier-ignore\nimport {\n  ahash, anumber,\n  asyncLoop, checkOpts, clean, createView, Hash, kdfInputToBytes,\n  type CHash,\n  type KDFInput\n} from './utils.ts';\n\nexport type Pbkdf2Opt = {\n  c: number; // Iterations\n  dkLen?: number; // Desired key length in bytes (Intended output length in octets of the derived key\n  asyncTick?: number; // Maximum time in ms for which async function can block execution\n};\n// Common prologue and epilogue for sync/async functions\nfunction pbkdf2Init(hash: CHash, _password: KDFInput, _salt: KDFInput, _opts: Pbkdf2Opt) {\n  ahash(hash);\n  const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n  const { c, dkLen, asyncTick } = opts;\n  anumber(c);\n  anumber(dkLen);\n  anumber(asyncTick);\n  if (c < 1) throw new Error('iterations (c) should be >= 1');\n  const password = kdfInputToBytes(_password);\n  const salt = kdfInputToBytes(_salt);\n  // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n  const DK = new Uint8Array(dkLen);\n  // U1 = PRF(Password, Salt + INT_32_BE(i))\n  const PRF = hmac.create(hash, password);\n  const PRFSalt = PRF._cloneInto().update(salt);\n  return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\n\nfunction pbkdf2Output<T extends Hash<T>>(\n  PRF: Hash<T>,\n  PRFSalt: Hash<T>,\n  DK: Uint8Array,\n  prfW: Hash<T>,\n  u: Uint8Array\n) {\n  PRF.destroy();\n  PRFSalt.destroy();\n  if (prfW) prfW.destroy();\n  clean(u);\n  return DK;\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n * @example\n * const key = pbkdf2(sha256, 'password', 'salt', { dkLen: 32, c: Math.pow(2, 18) });\n */\nexport function pbkdf2(\n  hash: CHash,\n  password: KDFInput,\n  salt: KDFInput,\n  opts: Pbkdf2Opt\n): Uint8Array {\n  const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n  let prfW: any; // Working copy\n  const arr = new Uint8Array(4);\n  const view = createView(arr);\n  const u = new Uint8Array(PRF.outputLen);\n  // DK = T1 + T2 + \u22EF + Tdklen/hlen\n  for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n    // Ti = F(Password, Salt, c, i)\n    const Ti = DK.subarray(pos, pos + PRF.outputLen);\n    view.setInt32(0, ti, false);\n    // F(Password, Salt, c, i) = U1 ^ U2 ^ \u22EF ^ Uc\n    // U1 = PRF(Password, Salt + INT_32_BE(i))\n    (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n    Ti.set(u.subarray(0, Ti.length));\n    for (let ui = 1; ui < c; ui++) {\n      // Uc = PRF(Password, Uc\u22121)\n      PRF._cloneInto(prfW).update(u).digestInto(u);\n      for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n    }\n  }\n  return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function. Async version.\n * @example\n * await pbkdf2Async(sha256, 'password', 'salt', { dkLen: 32, c: 500_000 });\n */\nexport async function pbkdf2Async(\n  hash: CHash,\n  password: KDFInput,\n  salt: KDFInput,\n  opts: Pbkdf2Opt\n): Promise<Uint8Array> {\n  const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n  let prfW: any; // Working copy\n  const arr = new Uint8Array(4);\n  const view = createView(arr);\n  const u = new Uint8Array(PRF.outputLen);\n  // DK = T1 + T2 + \u22EF + Tdklen/hlen\n  for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n    // Ti = F(Password, Salt, c, i)\n    const Ti = DK.subarray(pos, pos + PRF.outputLen);\n    view.setInt32(0, ti, false);\n    // F(Password, Salt, c, i) = U1 ^ U2 ^ \u22EF ^ Uc\n    // U1 = PRF(Password, Salt + INT_32_BE(i))\n    (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n    Ti.set(u.subarray(0, Ti.length));\n    await asyncLoop(c - 1, asyncTick, () => {\n      // Uc = PRF(Password, Uc\u22121)\n      PRF._cloneInto(prfW).update(u).digestInto(u);\n      for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n    });\n  }\n  return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n", "\"use strict\";\n/**\n * Audited & minimal JS implementation of\n * [BIP39 mnemonic phrases](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki).\n * @module\n * @example\n```js\nimport * as bip39 from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\nconst mn = bip39.generateMnemonic(wordlist);\nconsole.log(mn);\nconst ent = bip39.mnemonicToEntropy(mn, wordlist)\nbip39.entropyToMnemonic(ent, wordlist);\nbip39.validateMnemonic(mn, wordlist);\nawait bip39.mnemonicToSeed(mn, 'password');\nbip39.mnemonicToSeedSync(mn, 'password');\n\n// Wordlists\nimport { wordlist as czech } from '@scure/bip39/wordlists/czech';\nimport { wordlist as english } from '@scure/bip39/wordlists/english';\nimport { wordlist as french } from '@scure/bip39/wordlists/french';\nimport { wordlist as italian } from '@scure/bip39/wordlists/italian';\nimport { wordlist as japanese } from '@scure/bip39/wordlists/japanese';\nimport { wordlist as korean } from '@scure/bip39/wordlists/korean';\nimport { wordlist as portuguese } from '@scure/bip39/wordlists/portuguese';\nimport { wordlist as simplifiedChinese } from '@scure/bip39/wordlists/simplified-chinese';\nimport { wordlist as spanish } from '@scure/bip39/wordlists/spanish';\nimport { wordlist as traditionalChinese } from '@scure/bip39/wordlists/traditional-chinese';\n```\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateMnemonic = generateMnemonic;\nexports.mnemonicToEntropy = mnemonicToEntropy;\nexports.entropyToMnemonic = entropyToMnemonic;\nexports.validateMnemonic = validateMnemonic;\nexports.mnemonicToSeed = mnemonicToSeed;\nexports.mnemonicToSeedSync = mnemonicToSeedSync;\n/*! scure-bip39 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */\nconst pbkdf2_1 = require(\"@noble/hashes/pbkdf2\");\nconst sha2_1 = require(\"@noble/hashes/sha2\");\nconst utils_1 = require(\"@noble/hashes/utils\");\nconst base_1 = require(\"@scure/base\");\n// Japanese wordlist\nconst isJapanese = (wordlist) => wordlist[0] === '\\u3042\\u3044\\u3053\\u304f\\u3057\\u3093';\n// Normalization replaces equivalent sequences of characters\n// so that any two texts that are equivalent will be reduced\n// to the same sequence of code points, called the normal form of the original text.\n// https://tonsky.me/blog/unicode/#why-is-a----\nfunction nfkd(str) {\n    if (typeof str !== 'string')\n        throw new TypeError('invalid mnemonic type: ' + typeof str);\n    return str.normalize('NFKD');\n}\nfunction normalize(str) {\n    const norm = nfkd(str);\n    const words = norm.split(' ');\n    if (![12, 15, 18, 21, 24].includes(words.length))\n        throw new Error('Invalid mnemonic');\n    return { nfkd: norm, words };\n}\nfunction aentropy(ent) {\n    (0, utils_1.abytes)(ent, 16, 20, 24, 28, 32);\n}\n/**\n * Generate x random words. Uses Cryptographically-Secure Random Number Generator.\n * @param wordlist imported wordlist for specific language\n * @param strength mnemonic strength 128-256 bits\n * @example\n * generateMnemonic(wordlist, 128)\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nfunction generateMnemonic(wordlist, strength = 128) {\n    (0, utils_1.anumber)(strength);\n    if (strength % 32 !== 0 || strength > 256)\n        throw new TypeError('Invalid entropy');\n    return entropyToMnemonic((0, utils_1.randomBytes)(strength / 8), wordlist);\n}\nconst calcChecksum = (entropy) => {\n    // Checksum is ent.length/4 bits long\n    const bitsLeft = 8 - entropy.length / 4;\n    // Zero rightmost \"bitsLeft\" bits in byte\n    // For example: bitsLeft=4 val=10111101 -> 10110000\n    return new Uint8Array([((0, sha2_1.sha256)(entropy)[0] >> bitsLeft) << bitsLeft]);\n};\nfunction getCoder(wordlist) {\n    if (!Array.isArray(wordlist) || wordlist.length !== 2048 || typeof wordlist[0] !== 'string')\n        throw new Error('Wordlist: expected array of 2048 strings');\n    wordlist.forEach((i) => {\n        if (typeof i !== 'string')\n            throw new Error('wordlist: non-string element: ' + i);\n    });\n    return base_1.utils.chain(base_1.utils.checksum(1, calcChecksum), base_1.utils.radix2(11, true), base_1.utils.alphabet(wordlist));\n}\n/**\n * Reversible: Converts mnemonic string to raw entropy in form of byte array.\n * @param mnemonic 12-24 words\n * @param wordlist imported wordlist for specific language\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToEntropy(mnem, wordlist)\n * // Produces\n * new Uint8Array([\n *   0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n *   0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ])\n */\nfunction mnemonicToEntropy(mnemonic, wordlist) {\n    const { words } = normalize(mnemonic);\n    const entropy = getCoder(wordlist).decode(words);\n    aentropy(entropy);\n    return entropy;\n}\n/**\n * Reversible: Converts raw entropy in form of byte array to mnemonic string.\n * @param entropy byte array\n * @param wordlist imported wordlist for specific language\n * @returns 12-24 words\n * @example\n * const ent = new Uint8Array([\n *   0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n *   0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ]);\n * entropyToMnemonic(ent, wordlist);\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nfunction entropyToMnemonic(entropy, wordlist) {\n    aentropy(entropy);\n    const words = getCoder(wordlist).encode(entropy);\n    return words.join(isJapanese(wordlist) ? '\\u3000' : ' ');\n}\n/**\n * Validates mnemonic for being 12-24 words contained in `wordlist`.\n */\nfunction validateMnemonic(mnemonic, wordlist) {\n    try {\n        mnemonicToEntropy(mnemonic, wordlist);\n    }\n    catch (e) {\n        return false;\n    }\n    return true;\n}\nconst psalt = (passphrase) => nfkd('mnemonic' + passphrase);\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * await mnemonicToSeed(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nfunction mnemonicToSeed(mnemonic, passphrase = '') {\n    return (0, pbkdf2_1.pbkdf2Async)(sha2_1.sha512, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToSeedSync(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nfunction mnemonicToSeedSync(mnemonic, passphrase = '') {\n    return (0, pbkdf2_1.pbkdf2)(sha2_1.sha512, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n", "import { generateMnemonic as generateMnemonic_ } from '@scure/bip39'\nimport type { ErrorType } from '../errors/utils.js'\n\nexport type GenerateMnemonicErrorType = ErrorType\n\n/**\n * @description Generates a random mnemonic phrase with a given wordlist.\n *\n * @param wordlist The wordlist to use for generating the mnemonic phrase.\n * @param strength mnemonic strength 128-256 bits\n *\n * @returns A randomly generated mnemonic phrase.\n */\nexport function generateMnemonic(\n  wordlist: string[],\n  strength?: number | undefined,\n): string {\n  return generateMnemonic_(wordlist, strength)\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\n\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Hex } from '../types/misc.js'\nimport { type ToHexErrorType, toHex } from '../utils/encoding/toHex.js'\n\nexport type GeneratePrivateKeyErrorType = ToHexErrorType | ErrorType\n\n/**\n * @description Generates a random private key.\n *\n * @returns A randomly generated private key.\n */\nexport function generatePrivateKey(): Hex {\n  return toHex(secp256k1.utils.randomPrivateKey())\n}\n", "// TODO(v3): Rename to `toLocalAccount` + add `source` property to define source (privateKey, mnemonic, hdKey, etc).\n\nimport type { Address } from 'abitype'\n\nimport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../errors/address.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport {\n  type IsAddressErrorType,\n  isAddress,\n} from '../utils/address/isAddress.js'\nimport type {\n  AccountSource,\n  CustomSource,\n  JsonRpcAccount,\n  LocalAccount,\n} from './types.js'\n\ntype GetAccountReturnType<accountSource extends AccountSource> =\n  | (accountSource extends Address ? JsonRpcAccount : never)\n  | (accountSource extends CustomSource ? LocalAccount : never)\n\nexport type ToAccountErrorType =\n  | InvalidAddressErrorType\n  | IsAddressErrorType\n  | ErrorType\n\n/**\n * @description Creates an Account from a custom signing implementation.\n *\n * @returns A Local Account.\n */\nexport function toAccount<accountSource extends AccountSource>(\n  source: accountSource,\n): GetAccountReturnType<accountSource> {\n  if (typeof source === 'string') {\n    if (!isAddress(source, { strict: false }))\n      throw new InvalidAddressError({ address: source })\n    return {\n      address: source,\n      type: 'json-rpc',\n    } as GetAccountReturnType<accountSource>\n  }\n\n  if (!isAddress(source.address, { strict: false }))\n    throw new InvalidAddressError({ address: source.address })\n  return {\n    address: source.address,\n    nonceManager: source.nonceManager,\n    sign: source.sign,\n    signAuthorization: source.signAuthorization,\n    signMessage: source.signMessage,\n    signTransaction: source.signTransaction,\n    signTypedData: source.signTypedData,\n    source: 'custom',\n    type: 'local',\n  } as GetAccountReturnType<accountSource>\n}\n", "// TODO(v3): Convert to sync.\n\nimport { secp256k1 } from '@noble/curves/secp256k1'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../../utils/data/isHex.js'\nimport {\n  type HexToBytesErrorType,\n  hexToBytes,\n} from '../../utils/encoding/toBytes.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { serializeSignature } from '../../utils/signature/serializeSignature.js'\n\ntype To = 'object' | 'bytes' | 'hex'\n\nexport type SignParameters<to extends To = 'object'> = {\n  hash: Hex\n  privateKey: Hex\n  to?: to | To | undefined\n}\n\nexport type SignReturnType<to extends To = 'object'> =\n  | (to extends 'object' ? Signature : never)\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type SignErrorType =\n  | HexToBytesErrorType\n  | IsHexErrorType\n  | NumberToHexErrorType\n  | ErrorType\n\nlet extraEntropy: Hex | boolean = false\n\n/**\n * Sets extra entropy for signing functions.\n */\nexport function setSignEntropy(entropy: true | Hex) {\n  if (!entropy) throw new Error('must be a `true` or a hex value.')\n  extraEntropy = entropy\n}\n\n/**\n * @description Signs a hash with a given private key.\n *\n * @param hash The hash to sign.\n * @param privateKey The private key to sign with.\n *\n * @returns The signature.\n */\nexport async function sign<to extends To = 'object'>({\n  hash,\n  privateKey,\n  to = 'object',\n}: SignParameters<to>): Promise<SignReturnType<to>> {\n  const { r, s, recovery } = secp256k1.sign(\n    hash.slice(2),\n    privateKey.slice(2),\n    {\n      lowS: true,\n      extraEntropy: isHex(extraEntropy, { strict: false })\n        ? hexToBytes(extraEntropy)\n        : extraEntropy,\n    },\n  )\n  const signature = {\n    r: numberToHex(r, { size: 32 }),\n    s: numberToHex(s, { size: 32 }),\n    v: recovery ? 28n : 27n,\n    yParity: recovery,\n  }\n  return (() => {\n    if (to === 'bytes' || to === 'hex')\n      return serializeSignature({ ...signature, to })\n    return signature\n  })() as SignReturnType<to>\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type {\n  AuthorizationRequest,\n  SignedAuthorization,\n} from '../../types/authorization.js'\nimport type { Hex, Signature } from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type HashAuthorizationErrorType,\n  hashAuthorization,\n} from '../../utils/authorization/hashAuthorization.js'\nimport {\n  type SignErrorType,\n  type SignParameters,\n  type SignReturnType,\n  sign,\n} from './sign.js'\n\ntype To = 'object' | 'bytes' | 'hex'\n\nexport type SignAuthorizationParameters<to extends To = 'object'> =\n  AuthorizationRequest & {\n    /** The private key to sign with. */\n    privateKey: Hex\n    to?: SignParameters<to>['to'] | undefined\n  }\n\nexport type SignAuthorizationReturnType<to extends To = 'object'> = Prettify<\n  to extends 'object' ? SignedAuthorization : SignReturnType<to>\n>\n\nexport type SignAuthorizationErrorType =\n  | SignErrorType\n  | HashAuthorizationErrorType\n  | ErrorType\n\n/**\n * Signs an Authorization hash in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n */\nexport async function signAuthorization<to extends To = 'object'>(\n  parameters: SignAuthorizationParameters<to>,\n): Promise<SignAuthorizationReturnType<to>> {\n  const { chainId, nonce, privateKey, to = 'object' } = parameters\n  const address = parameters.contractAddress ?? parameters.address\n  const signature = await sign({\n    hash: hashAuthorization({ address, chainId, nonce }),\n    privateKey,\n    to,\n  })\n  if (to === 'object')\n    return {\n      address,\n      chainId,\n      nonce,\n      ...(signature as Signature),\n    } as any\n  return signature as any\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex, SignableMessage } from '../../types/misc.js'\nimport {\n  type HashMessageErrorType,\n  hashMessage,\n} from '../../utils/signature/hashMessage.js'\n\nimport { type SignErrorType, sign } from './sign.js'\n\nexport type SignMessageParameters = {\n  /** The message to sign. */\n  message: SignableMessage\n  /** The private key to sign with. */\n  privateKey: Hex\n}\n\nexport type SignMessageReturnType = Hex\n\nexport type SignMessageErrorType =\n  | SignErrorType\n  | HashMessageErrorType\n  | ErrorType\n\n/**\n * @description Calculates an Ethereum-specific signature in [EIP-191 format](https://eips.ethereum.org/EIPS/eip-191):\n * `keccak256(\"\\x19Ethereum Signed Message:\\n\" + len(message) + message))`.\n *\n * @returns The signature.\n */\nexport async function signMessage({\n  message,\n  privateKey,\n}: SignMessageParameters): Promise<SignMessageReturnType> {\n  return await sign({ hash: hashMessage(message), privateKey, to: 'hex' })\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n  TransactionSerializable,\n  TransactionSerialized,\n} from '../../types/transaction.js'\nimport {\n  type Keccak256ErrorType,\n  keccak256,\n} from '../../utils/hash/keccak256.js'\nimport type { GetTransactionType } from '../../utils/transaction/getTransactionType.js'\nimport {\n  type SerializeTransactionFn,\n  serializeTransaction,\n} from '../../utils/transaction/serializeTransaction.js'\n\nimport { type SignErrorType, sign } from './sign.js'\n\nexport type SignTransactionParameters<\n  serializer extends\n    SerializeTransactionFn<TransactionSerializable> = SerializeTransactionFn<TransactionSerializable>,\n  transaction extends Parameters<serializer>[0] = Parameters<serializer>[0],\n> = {\n  privateKey: Hex\n  transaction: transaction\n  serializer?: serializer | undefined\n}\n\nexport type SignTransactionReturnType<\n  serializer extends\n    SerializeTransactionFn<TransactionSerializable> = SerializeTransactionFn<TransactionSerializable>,\n  transaction extends Parameters<serializer>[0] = Parameters<serializer>[0],\n> = TransactionSerialized<GetTransactionType<transaction>>\n\nexport type SignTransactionErrorType =\n  | Keccak256ErrorType\n  | SignErrorType\n  | ErrorType\n\nexport async function signTransaction<\n  serializer extends\n    SerializeTransactionFn<TransactionSerializable> = SerializeTransactionFn<TransactionSerializable>,\n  transaction extends Parameters<serializer>[0] = Parameters<serializer>[0],\n>(\n  parameters: SignTransactionParameters<serializer, transaction>,\n): Promise<SignTransactionReturnType<serializer, transaction>> {\n  const {\n    privateKey,\n    transaction,\n    serializer = serializeTransaction,\n  } = parameters\n\n  const signableTransaction = (() => {\n    // For EIP-4844 Transactions, we want to sign the transaction payload body (tx_payload_body) without the sidecars (ie. without the network wrapper).\n    // See: https://github.com/ethereum/EIPs/blob/e00f4daa66bd56e2dbd5f1d36d09fd613811a48b/EIPS/eip-4844.md#networking\n    if (transaction.type === 'eip4844')\n      return {\n        ...transaction,\n        sidecars: false,\n      }\n    return transaction\n  })()\n\n  const signature = await sign({\n    hash: keccak256(await serializer(signableTransaction)),\n    privateKey,\n  })\n  return (await serializer(\n    transaction,\n    signature,\n  )) as SignTransactionReturnType<serializer, transaction>\n}\n", "import type { TypedData } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { TypedDataDefinition } from '../../types/typedData.js'\nimport {\n  type HashTypedDataErrorType,\n  hashTypedData,\n} from '../../utils/signature/hashTypedData.js'\nimport { type SignErrorType, sign } from './sign.js'\n\nexport type SignTypedDataParameters<\n  typedData extends TypedData | Record<string, unknown> = TypedData,\n  primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n> = TypedDataDefinition<typedData, primaryType> & {\n  /** The private key to sign with. */\n  privateKey: Hex\n}\n\nexport type SignTypedDataReturnType = Hex\n\nexport type SignTypedDataErrorType =\n  | HashTypedDataErrorType\n  | SignErrorType\n  | ErrorType\n\n/**\n * @description Signs typed data and calculates an Ethereum-specific signature in [https://eips.ethereum.org/EIPS/eip-712](https://eips.ethereum.org/EIPS/eip-712):\n * `sign(keccak256(\"\\x19\\x01\" \u2016 domainSeparator \u2016 hashStruct(message)))`.\n *\n * @returns The signature.\n */\nexport async function signTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n>(\n  parameters: SignTypedDataParameters<typedData, primaryType>,\n): Promise<SignTypedDataReturnType> {\n  const { privateKey, ...typedData } =\n    parameters as unknown as SignTypedDataParameters\n  return await sign({\n    hash: hashTypedData(typedData),\n    privateKey,\n    to: 'hex',\n  })\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Hex } from '../types/misc.js'\nimport { type ToHexErrorType, toHex } from '../utils/encoding/toHex.js'\nimport type { NonceManager } from '../utils/nonceManager.js'\nimport { type ToAccountErrorType, toAccount } from './toAccount.js'\nimport type { PrivateKeyAccount } from './types.js'\nimport {\n  type PublicKeyToAddressErrorType,\n  publicKeyToAddress,\n} from './utils/publicKeyToAddress.js'\nimport { type SignErrorType, sign } from './utils/sign.js'\nimport { signAuthorization } from './utils/signAuthorization.js'\nimport { type SignMessageErrorType, signMessage } from './utils/signMessage.js'\nimport {\n  type SignTransactionErrorType,\n  signTransaction,\n} from './utils/signTransaction.js'\nimport {\n  type SignTypedDataErrorType,\n  signTypedData,\n} from './utils/signTypedData.js'\n\nexport type PrivateKeyToAccountOptions = {\n  nonceManager?: NonceManager | undefined\n}\n\nexport type PrivateKeyToAccountErrorType =\n  | ToAccountErrorType\n  | ToHexErrorType\n  | PublicKeyToAddressErrorType\n  | SignErrorType\n  | SignMessageErrorType\n  | SignTransactionErrorType\n  | SignTypedDataErrorType\n  | ErrorType\n\n/**\n * @description Creates an Account from a private key.\n *\n * @returns A Private Key Account.\n */\nexport function privateKeyToAccount(\n  privateKey: Hex,\n  options: PrivateKeyToAccountOptions = {},\n): PrivateKeyAccount {\n  const { nonceManager } = options\n  const publicKey = toHex(secp256k1.getPublicKey(privateKey.slice(2), false))\n  const address = publicKeyToAddress(publicKey)\n\n  const account = toAccount({\n    address,\n    nonceManager,\n    async sign({ hash }) {\n      return sign({ hash, privateKey, to: 'hex' })\n    },\n    async signAuthorization(authorization) {\n      return signAuthorization({ ...authorization, privateKey })\n    },\n    async signMessage({ message }) {\n      return signMessage({ message, privateKey })\n    },\n    async signTransaction(transaction, { serializer } = {}) {\n      return signTransaction({ privateKey, transaction, serializer })\n    },\n    async signTypedData(typedData) {\n      return signTypedData({ ...typedData, privateKey } as any)\n    },\n  })\n\n  return {\n    ...account,\n    publicKey,\n    source: 'privateKey',\n  } as PrivateKeyAccount\n}\n", "import type { ErrorType } from '../errors/utils.js'\nimport type { HDKey } from '../types/account.js'\nimport { type ToHexErrorType, toHex } from '../utils/encoding/toHex.js'\nimport {\n  type PrivateKeyToAccountErrorType,\n  type PrivateKeyToAccountOptions,\n  privateKeyToAccount,\n} from './privateKeyToAccount.js'\nimport type { HDAccount, HDOptions } from './types.js'\n\nexport type HDKeyToAccountOptions = HDOptions & PrivateKeyToAccountOptions\n\nexport type HDKeyToAccountErrorType =\n  | PrivateKeyToAccountErrorType\n  | ToHexErrorType\n  | ErrorType\n\n/**\n * @description Creates an Account from a HD Key.\n *\n * @returns A HD Account.\n */\nexport function hdKeyToAccount(\n  hdKey_: HDKey,\n  {\n    accountIndex = 0,\n    addressIndex = 0,\n    changeIndex = 0,\n    path,\n    ...options\n  }: HDKeyToAccountOptions = {},\n): HDAccount {\n  const hdKey = hdKey_.derive(\n    path || `m/44'/60'/${accountIndex}'/${changeIndex}/${addressIndex}`,\n  )\n  const account = privateKeyToAccount(toHex(hdKey.privateKey!), options)\n  return {\n    ...account,\n    getHdKey: () => hdKey,\n    source: 'hd',\n  }\n}\n", "import { HDKey } from '@scure/bip32'\nimport { mnemonicToSeedSync } from '@scure/bip39'\n\nimport type { ErrorType } from '../errors/utils.js'\nimport {\n  type HDKeyToAccountErrorType,\n  type HDKeyToAccountOptions,\n  hdKeyToAccount,\n} from './hdKeyToAccount.js'\nimport type { HDAccount } from './types.js'\n\nexport type MnemonicToAccountOptions = HDKeyToAccountOptions & {\n  passphrase?: string\n}\n\nexport type MnemonicToAccountErrorType = HDKeyToAccountErrorType | ErrorType\n\n/**\n * @description Creates an Account from a mnemonic phrase.\n *\n * @returns A HD Account.\n */\nexport function mnemonicToAccount(\n  mnemonic: string,\n  { passphrase, ...hdKeyOpts }: MnemonicToAccountOptions = {},\n): HDAccount {\n  const seed = mnemonicToSeedSync(mnemonic, passphrase)\n  return hdKeyToAccount(HDKey.fromMasterSeed(seed), hdKeyOpts)\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\nimport type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport {\n  type BytesToHexErrorType,\n  bytesToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type PublicKeyToAddressErrorType,\n  publicKeyToAddress,\n} from './publicKeyToAddress.js'\n\nexport type PrivateKeyToAddressErrorType =\n  | BytesToHexErrorType\n  | PublicKeyToAddressErrorType\n  | ErrorType\n\n/**\n * @description Converts an ECDSA private key to an address.\n *\n * @param privateKey The private key to convert.\n *\n * @returns The address.\n */\nexport function privateKeyToAddress(privateKey: Hex): Address {\n  const publicKey = bytesToHex(\n    secp256k1.getPublicKey(privateKey.slice(2), false),\n  )\n  return publicKeyToAddress(publicKey)\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wordlist = void 0;\nexports.wordlist = `abdikace\nabeceda\nadresa\nagrese\nakce\naktovka\nalej\nalkohol\namputace\nananas\nandulka\nanekdota\nanketa\nantika\nanulovat\narcha\narogance\nasfalt\nasistent\naspirace\nastma\nastronom\natlas\natletika\natol\nautobus\nazyl\nbabka\nbachor\nbacil\nbaculka\nbadatel\nbageta\nbagr\nbahno\nbakterie\nbalada\nbaletka\nbalkon\nbalonek\nbalvan\nbalza\nbambus\nbankomat\nbarbar\nbaret\nbarman\nbaroko\nbarva\nbaterka\nbatoh\nbavlna\nbazalka\nbazilika\nbazuka\nbedna\nberan\nbeseda\nbestie\nbeton\nbezinka\nbezmoc\nbeztak\nbicykl\nbidlo\nbiftek\nbikiny\nbilance\nbiograf\nbiolog\nbitva\nbizon\nblahobyt\nblatouch\nblecha\nbledule\nblesk\nblikat\nblizna\nblokovat\nbloudit\nblud\nbobek\nbobr\nbodlina\nbodnout\nbohatost\nbojkot\nbojovat\nbokorys\nbolest\nborec\nborovice\nbota\nboubel\nbouchat\nbouda\nboule\nbourat\nboxer\nbradavka\nbrambora\nbranka\nbratr\nbrepta\nbriketa\nbrko\nbrloh\nbronz\nbroskev\nbrunetka\nbrusinka\nbrzda\nbrzy\nbublina\nbubnovat\nbuchta\nbuditel\nbudka\nbudova\nbufet\nbujarost\nbukvice\nbuldok\nbulva\nbunda\nbunkr\nburza\nbutik\nbuvol\nbuzola\nbydlet\nbylina\nbytovka\nbzukot\ncapart\ncarevna\ncedr\ncedule\ncejch\ncejn\ncela\nceler\ncelkem\ncelnice\ncenina\ncennost\ncenovka\ncentrum\ncenzor\ncestopis\ncetka\nchalupa\nchapadlo\ncharita\nchata\nchechtat\nchemie\nchichot\nchirurg\nchlad\nchleba\nchlubit\nchmel\nchmura\nchobot\nchochol\nchodba\ncholera\nchomout\nchopit\nchoroba\nchov\nchrapot\nchrlit\nchrt\nchrup\nchtivost\nchudina\nchutnat\nchvat\nchvilka\nchvost\nchyba\nchystat\nchytit\ncibule\ncigareta\ncihelna\ncihla\ncinkot\ncirkus\ncisterna\ncitace\ncitrus\ncizinec\ncizost\nclona\ncokoliv\ncouvat\nctitel\nctnost\ncudnost\ncuketa\ncukr\ncupot\ncvaknout\ncval\ncvik\ncvrkot\ncyklista\ndaleko\ndareba\ndatel\ndatum\ndcera\ndebata\ndechovka\ndecibel\ndeficit\ndeflace\ndekl\ndekret\ndemokrat\ndeprese\nderby\ndeska\ndetektiv\ndikobraz\ndiktovat\ndioda\ndiplom\ndisk\ndisplej\ndivadlo\ndivoch\ndlaha\ndlouho\ndluhopis\ndnes\ndobro\ndobytek\ndocent\ndochutit\ndodnes\ndohled\ndohoda\ndohra\ndojem\ndojnice\ndoklad\ndokola\ndoktor\ndokument\ndolar\ndoleva\ndolina\ndoma\ndominant\ndomluvit\ndomov\ndonutit\ndopad\ndopis\ndoplnit\ndoposud\ndoprovod\ndopustit\ndorazit\ndorost\ndort\ndosah\ndoslov\ndostatek\ndosud\ndosyta\ndotaz\ndotek\ndotknout\ndoufat\ndoutnat\ndovozce\ndozadu\ndoznat\ndozorce\ndrahota\ndrak\ndramatik\ndravec\ndraze\ndrdol\ndrobnost\ndrogerie\ndrozd\ndrsnost\ndrtit\ndrzost\nduben\nduchovno\ndudek\nduha\nduhovka\ndusit\ndusno\ndutost\ndvojice\ndvorec\ndynamit\nekolog\nekonomie\nelektron\nelipsa\nemail\nemise\nemoce\nempatie\nepizoda\nepocha\nepopej\nepos\nesej\nesence\neskorta\neskymo\netiketa\neuforie\nevoluce\nexekuce\nexkurze\nexpedice\nexploze\nexport\nextrakt\nfacka\nfajfka\nfakulta\nfanatik\nfantazie\nfarmacie\nfavorit\nfazole\nfederace\nfejeton\nfenka\nfialka\nfigurant\nfilozof\nfiltr\nfinance\nfinta\nfixace\nfjord\nflanel\nflirt\nflotila\nfond\nfosfor\nfotbal\nfotka\nfoton\nfrakce\nfreska\nfronta\nfukar\nfunkce\nfyzika\ngaleje\ngarant\ngenetika\ngeolog\ngilotina\nglazura\nglejt\ngolem\ngolfista\ngotika\ngraf\ngramofon\ngranule\ngrep\ngril\ngrog\ngroteska\nguma\nhadice\nhadr\nhala\nhalenka\nhanba\nhanopis\nharfa\nharpuna\nhavran\nhebkost\nhejkal\nhejno\nhejtman\nhektar\nhelma\nhematom\nherec\nherna\nheslo\nhezky\nhistorik\nhladovka\nhlasivky\nhlava\nhledat\nhlen\nhlodavec\nhloh\nhloupost\nhltat\nhlubina\nhluchota\nhmat\nhmota\nhmyz\nhnis\nhnojivo\nhnout\nhoblina\nhoboj\nhoch\nhodiny\nhodlat\nhodnota\nhodovat\nhojnost\nhokej\nholinka\nholka\nholub\nhomole\nhonitba\nhonorace\nhoral\nhorda\nhorizont\nhorko\nhorlivec\nhormon\nhornina\nhoroskop\nhorstvo\nhospoda\nhostina\nhotovost\nhouba\nhouf\nhoupat\nhouska\nhovor\nhradba\nhranice\nhravost\nhrazda\nhrbolek\nhrdina\nhrdlo\nhrdost\nhrnek\nhrobka\nhromada\nhrot\nhrouda\nhrozen\nhrstka\nhrubost\nhryzat\nhubenost\nhubnout\nhudba\nhukot\nhumr\nhusita\nhustota\nhvozd\nhybnost\nhydrant\nhygiena\nhymna\nhysterik\nidylka\nihned\nikona\niluze\nimunita\ninfekce\ninflace\ninkaso\ninovace\ninspekce\ninternet\ninvalida\ninvestor\ninzerce\nironie\njablko\njachta\njahoda\njakmile\njakost\njalovec\njantar\njarmark\njaro\njasan\njasno\njatka\njavor\njazyk\njedinec\njedle\njednatel\njehlan\njekot\njelen\njelito\njemnost\njenom\njepice\njeseter\njevit\njezdec\njezero\njinak\njindy\njinoch\njiskra\njistota\njitrnice\njizva\njmenovat\njogurt\njurta\nkabaret\nkabel\nkabinet\nkachna\nkadet\nkadidlo\nkahan\nkajak\nkajuta\nkakao\nkaktus\nkalamita\nkalhoty\nkalibr\nkalnost\nkamera\nkamkoliv\nkamna\nkanibal\nkanoe\nkantor\nkapalina\nkapela\nkapitola\nkapka\nkaple\nkapota\nkapr\nkapusta\nkapybara\nkaramel\nkarotka\nkarton\nkasa\nkatalog\nkatedra\nkauce\nkauza\nkavalec\nkazajka\nkazeta\nkazivost\nkdekoliv\nkdesi\nkedluben\nkemp\nkeramika\nkino\nklacek\nkladivo\nklam\nklapot\nklasika\nklaun\nklec\nklenba\nklepat\nklesnout\nklid\nklima\nklisna\nklobouk\nklokan\nklopa\nkloub\nklubovna\nklusat\nkluzkost\nkmen\nkmitat\nkmotr\nkniha\nknot\nkoalice\nkoberec\nkobka\nkobliha\nkobyla\nkocour\nkohout\nkojenec\nkokos\nkoktejl\nkolaps\nkoleda\nkolize\nkolo\nkomando\nkometa\nkomik\nkomnata\nkomora\nkompas\nkomunita\nkonat\nkoncept\nkondice\nkonec\nkonfese\nkongres\nkonina\nkonkurs\nkontakt\nkonzerva\nkopanec\nkopie\nkopnout\nkoprovka\nkorbel\nkorektor\nkormidlo\nkoroptev\nkorpus\nkoruna\nkoryto\nkorzet\nkosatec\nkostka\nkotel\nkotleta\nkotoul\nkoukat\nkoupelna\nkousek\nkouzlo\nkovboj\nkoza\nkozoroh\nkrabice\nkrach\nkrajina\nkralovat\nkrasopis\nkravata\nkredit\nkrejcar\nkresba\nkreveta\nkriket\nkritik\nkrize\nkrkavec\nkrmelec\nkrmivo\nkrocan\nkrok\nkronika\nkropit\nkroupa\nkrovka\nkrtek\nkruhadlo\nkrupice\nkrutost\nkrvinka\nkrychle\nkrypta\nkrystal\nkryt\nkudlanka\nkufr\nkujnost\nkukla\nkulajda\nkulich\nkulka\nkulomet\nkultura\nkuna\nkupodivu\nkurt\nkurzor\nkutil\nkvalita\nkvasinka\nkvestor\nkynolog\nkyselina\nkytara\nkytice\nkytka\nkytovec\nkyvadlo\nlabrador\nlachtan\nladnost\nlaik\nlakomec\nlamela\nlampa\nlanovka\nlasice\nlaso\nlastura\nlatinka\nlavina\nlebka\nleckdy\nleden\nlednice\nledovka\nledvina\nlegenda\nlegie\nlegrace\nlehce\nlehkost\nlehnout\nlektvar\nlenochod\nlentilka\nlepenka\nlepidlo\nletadlo\nletec\nletmo\nletokruh\nlevhart\nlevitace\nlevobok\nlibra\nlichotka\nlidojed\nlidskost\nlihovina\nlijavec\nlilek\nlimetka\nlinie\nlinka\nlinoleum\nlistopad\nlitina\nlitovat\nlobista\nlodivod\nlogika\nlogoped\nlokalita\nloket\nlomcovat\nlopata\nlopuch\nlord\nlosos\nlotr\nloudal\nlouh\nlouka\nlouskat\nlovec\nlstivost\nlucerna\nlucifer\nlump\nlusk\nlustrace\nlvice\nlyra\nlyrika\nlysina\nmadam\nmadlo\nmagistr\nmahagon\nmajetek\nmajitel\nmajorita\nmakak\nmakovice\nmakrela\nmalba\nmalina\nmalovat\nmalvice\nmaminka\nmandle\nmanko\nmarnost\nmasakr\nmaskot\nmasopust\nmatice\nmatrika\nmaturita\nmazanec\nmazivo\nmazlit\nmazurka\nmdloba\nmechanik\nmeditace\nmedovina\nmelasa\nmeloun\nmentolka\nmetla\nmetoda\nmetr\nmezera\nmigrace\nmihnout\nmihule\nmikina\nmikrofon\nmilenec\nmilimetr\nmilost\nmimika\nmincovna\nminibar\nminomet\nminulost\nmiska\nmistr\nmixovat\nmladost\nmlha\nmlhovina\nmlok\nmlsat\nmluvit\nmnich\nmnohem\nmobil\nmocnost\nmodelka\nmodlitba\nmohyla\nmokro\nmolekula\nmomentka\nmonarcha\nmonokl\nmonstrum\nmontovat\nmonzun\nmosaz\nmoskyt\nmost\nmotivace\nmotorka\nmotyka\nmoucha\nmoudrost\nmozaika\nmozek\nmozol\nmramor\nmravenec\nmrkev\nmrtvola\nmrzet\nmrzutost\nmstitel\nmudrc\nmuflon\nmulat\nmumie\nmunice\nmuset\nmutace\nmuzeum\nmuzikant\nmyslivec\nmzda\nnabourat\nnachytat\nnadace\nnadbytek\nnadhoz\nnadobro\nnadpis\nnahlas\nnahnat\nnahodile\nnahradit\nnaivita\nnajednou\nnajisto\nnajmout\nnaklonit\nnakonec\nnakrmit\nnalevo\nnamazat\nnamluvit\nnanometr\nnaoko\nnaopak\nnaostro\nnapadat\nnapevno\nnaplnit\nnapnout\nnaposled\nnaprosto\nnarodit\nnaruby\nnarychlo\nnasadit\nnasekat\nnaslepo\nnastat\nnatolik\nnavenek\nnavrch\nnavzdory\nnazvat\nnebe\nnechat\nnecky\nnedaleko\nnedbat\nneduh\nnegace\nnehet\nnehoda\nnejen\nnejprve\nneklid\nnelibost\nnemilost\nnemoc\nneochota\nneonka\nnepokoj\nnerost\nnerv\nnesmysl\nnesoulad\nnetvor\nneuron\nnevina\nnezvykle\nnicota\nnijak\nnikam\nnikdy\nnikl\nnikterak\nnitro\nnocleh\nnohavice\nnominace\nnora\nnorek\nnositel\nnosnost\nnouze\nnoviny\nnovota\nnozdra\nnuda\nnudle\nnuget\nnutit\nnutnost\nnutrie\nnymfa\nobal\nobarvit\nobava\nobdiv\nobec\nobehnat\nobejmout\nobezita\nobhajoba\nobilnice\nobjasnit\nobjekt\nobklopit\noblast\noblek\nobliba\nobloha\nobluda\nobnos\nobohatit\nobojek\nobout\nobrazec\nobrna\nobruba\nobrys\nobsah\nobsluha\nobstarat\nobuv\nobvaz\nobvinit\nobvod\nobvykle\nobyvatel\nobzor\nocas\nocel\nocenit\nochladit\nochota\nochrana\nocitnout\nodboj\nodbyt\nodchod\nodcizit\nodebrat\nodeslat\nodevzdat\nodezva\nodhadce\nodhodit\nodjet\nodjinud\nodkaz\nodkoupit\nodliv\nodluka\nodmlka\nodolnost\nodpad\nodpis\nodplout\nodpor\nodpustit\nodpykat\nodrazka\nodsoudit\nodstup\nodsun\nodtok\nodtud\nodvaha\nodveta\nodvolat\nodvracet\nodznak\nofina\nofsajd\nohlas\nohnisko\nohrada\nohrozit\nohryzek\nokap\nokenice\noklika\nokno\nokouzlit\nokovy\nokrasa\nokres\nokrsek\nokruh\nokupant\nokurka\nokusit\nolejnina\nolizovat\nomak\nomeleta\nomezit\nomladina\nomlouvat\nomluva\nomyl\nonehdy\nopakovat\nopasek\noperace\nopice\nopilost\nopisovat\nopora\nopozice\nopravdu\noproti\norbital\norchestr\norgie\norlice\norloj\nortel\nosada\noschnout\nosika\nosivo\noslava\noslepit\noslnit\noslovit\nosnova\nosoba\nosolit\nospalec\nosten\nostraha\nostuda\nostych\nosvojit\noteplit\notisk\notop\notrhat\notrlost\notrok\notruby\notvor\novanout\novar\noves\novlivnit\novoce\noxid\nozdoba\npachatel\npacient\npadouch\npahorek\npakt\npalanda\npalec\npalivo\npaluba\npamflet\npamlsek\npanenka\npanika\npanna\npanovat\npanstvo\npantofle\npaprika\nparketa\nparodie\nparta\nparuka\nparyba\npaseka\npasivita\npastelka\npatent\npatrona\npavouk\npazneht\npazourek\npecka\npedagog\npejsek\npeklo\npeloton\npenalta\npendrek\npenze\nperiskop\npero\npestrost\npetarda\npetice\npetrolej\npevnina\npexeso\npianista\npiha\npijavice\npikle\npiknik\npilina\npilnost\npilulka\npinzeta\npipeta\npisatel\npistole\npitevna\npivnice\npivovar\nplacenta\nplakat\nplamen\nplaneta\nplastika\nplatit\nplavidlo\nplaz\nplech\nplemeno\nplenta\nples\npletivo\nplevel\nplivat\nplnit\nplno\nplocha\nplodina\nplomba\nplout\npluk\nplyn\npobavit\npobyt\npochod\npocit\npoctivec\npodat\npodcenit\npodepsat\npodhled\npodivit\npodklad\npodmanit\npodnik\npodoba\npodpora\npodraz\npodstata\npodvod\npodzim\npoezie\npohanka\npohnutka\npohovor\npohroma\npohyb\npointa\npojistka\npojmout\npokazit\npokles\npokoj\npokrok\npokuta\npokyn\npoledne\npolibek\npolknout\npoloha\npolynom\npomalu\npominout\npomlka\npomoc\npomsta\npomyslet\nponechat\nponorka\nponurost\npopadat\npopel\npopisek\npoplach\npoprosit\npopsat\npopud\nporadce\nporce\nporod\nporucha\nporyv\nposadit\nposed\nposila\nposkok\nposlanec\nposoudit\npospolu\npostava\nposudek\nposyp\npotah\npotkan\npotlesk\npotomek\npotrava\npotupa\npotvora\npoukaz\npouto\npouzdro\npovaha\npovidla\npovlak\npovoz\npovrch\npovstat\npovyk\npovzdech\npozdrav\npozemek\npoznatek\npozor\npozvat\npracovat\nprahory\npraktika\nprales\npraotec\npraporek\nprase\npravda\nprincip\nprkno\nprobudit\nprocento\nprodej\nprofese\nprohra\nprojekt\nprolomit\npromile\npronikat\npropad\nprorok\nprosba\nproton\nproutek\nprovaz\nprskavka\nprsten\nprudkost\nprut\nprvek\nprvohory\npsanec\npsovod\npstruh\nptactvo\npuberta\npuch\npudl\npukavec\npuklina\npukrle\npult\npumpa\npunc\npupen\npusa\npusinka\npustina\nputovat\nputyka\npyramida\npysk\npytel\nracek\nrachot\nradiace\nradnice\nradon\nraft\nragby\nraketa\nrakovina\nrameno\nrampouch\nrande\nrarach\nrarita\nrasovna\nrastr\nratolest\nrazance\nrazidlo\nreagovat\nreakce\nrecept\nredaktor\nreferent\nreflex\nrejnok\nreklama\nrekord\nrekrut\nrektor\nreputace\nrevize\nrevma\nrevolver\nrezerva\nriskovat\nriziko\nrobotika\nrodokmen\nrohovka\nrokle\nrokoko\nromaneto\nropovod\nropucha\nrorejs\nrosol\nrostlina\nrotmistr\nrotoped\nrotunda\nroubenka\nroucho\nroup\nroura\nrovina\nrovnice\nrozbor\nrozchod\nrozdat\nrozeznat\nrozhodce\nrozinka\nrozjezd\nrozkaz\nrozloha\nrozmar\nrozpad\nrozruch\nrozsah\nroztok\nrozum\nrozvod\nrubrika\nruchadlo\nrukavice\nrukopis\nryba\nrybolov\nrychlost\nrydlo\nrypadlo\nrytina\nryzost\nsadista\nsahat\nsako\nsamec\nsamizdat\nsamota\nsanitka\nsardinka\nsasanka\nsatelit\nsazba\nsazenice\nsbor\nschovat\nsebranka\nsecese\nsedadlo\nsediment\nsedlo\nsehnat\nsejmout\nsekera\nsekta\nsekunda\nsekvoje\nsemeno\nseno\nservis\nsesadit\nseshora\nseskok\nseslat\nsestra\nsesuv\nsesypat\nsetba\nsetina\nsetkat\nsetnout\nsetrvat\nsever\nseznam\nshoda\nshrnout\nsifon\nsilnice\nsirka\nsirotek\nsirup\nsituace\nskafandr\nskalisko\nskanzen\nskaut\nskeptik\nskica\nskladba\nsklenice\nsklo\nskluz\nskoba\nskokan\nskoro\nskripta\nskrz\nskupina\nskvost\nskvrna\nslabika\nsladidlo\nslanina\nslast\nslavnost\nsledovat\nslepec\nsleva\nslezina\nslib\nslina\nsliznice\nslon\nsloupek\nslovo\nsluch\nsluha\nslunce\nslupka\nslza\nsmaragd\nsmetana\nsmilstvo\nsmlouva\nsmog\nsmrad\nsmrk\nsmrtka\nsmutek\nsmysl\nsnad\nsnaha\nsnob\nsobota\nsocha\nsodovka\nsokol\nsopka\nsotva\nsouboj\nsoucit\nsoudce\nsouhlas\nsoulad\nsoumrak\nsouprava\nsoused\nsoutok\nsouviset\nspalovna\nspasitel\nspis\nsplav\nspodek\nspojenec\nspolu\nsponzor\nspornost\nspousta\nsprcha\nspustit\nsranda\nsraz\nsrdce\nsrna\nsrnec\nsrovnat\nsrpen\nsrst\nsrub\nstanice\nstarosta\nstatika\nstavba\nstehno\nstezka\nstodola\nstolek\nstopa\nstorno\nstoupat\nstrach\nstres\nstrhnout\nstrom\nstruna\nstudna\nstupnice\nstvol\nstyk\nsubjekt\nsubtropy\nsuchar\nsudost\nsukno\nsundat\nsunout\nsurikata\nsurovina\nsvah\nsvalstvo\nsvetr\nsvatba\nsvazek\nsvisle\nsvitek\nsvoboda\nsvodidlo\nsvorka\nsvrab\nsykavka\nsykot\nsynek\nsynovec\nsypat\nsypkost\nsyrovost\nsysel\nsytost\ntabletka\ntabule\ntahoun\ntajemno\ntajfun\ntajga\ntajit\ntajnost\ntaktika\ntamhle\ntampon\ntancovat\ntanec\ntanker\ntapeta\ntavenina\ntazatel\ntechnika\ntehdy\ntekutina\ntelefon\ntemnota\ntendence\ntenista\ntenor\nteplota\ntepna\nteprve\nterapie\ntermoska\ntextil\nticho\ntiskopis\ntitulek\ntkadlec\ntkanina\ntlapka\ntleskat\ntlukot\ntlupa\ntmel\ntoaleta\ntopinka\ntopol\ntorzo\ntouha\ntoulec\ntradice\ntraktor\ntramp\ntrasa\ntraverza\ntrefit\ntrest\ntrezor\ntrhavina\ntrhlina\ntrochu\ntrojice\ntroska\ntrouba\ntrpce\ntrpitel\ntrpkost\ntrubec\ntruchlit\ntruhlice\ntrus\ntrvat\ntudy\ntuhnout\ntuhost\ntundra\nturista\nturnaj\ntuzemsko\ntvaroh\ntvorba\ntvrdost\ntvrz\ntygr\ntykev\nubohost\nuboze\nubrat\nubrousek\nubrus\nubytovna\nucho\nuctivost\nudivit\nuhradit\nujednat\nujistit\nujmout\nukazatel\nuklidnit\nuklonit\nukotvit\nukrojit\nulice\nulita\nulovit\numyvadlo\nunavit\nuniforma\nuniknout\nupadnout\nuplatnit\nuplynout\nupoutat\nupravit\nuran\nurazit\nusednout\nusilovat\nusmrtit\nusnadnit\nusnout\nusoudit\nustlat\nustrnout\nutahovat\nutkat\nutlumit\nutonout\nutopenec\nutrousit\nuvalit\nuvolnit\nuvozovka\nuzdravit\nuzel\nuzenina\nuzlina\nuznat\nvagon\nvalcha\nvaloun\nvana\nvandal\nvanilka\nvaran\nvarhany\nvarovat\nvcelku\nvchod\nvdova\nvedro\nvegetace\nvejce\nvelbloud\nveletrh\nvelitel\nvelmoc\nvelryba\nvenkov\nveranda\nverze\nveselka\nveskrze\nvesnice\nvespodu\nvesta\nveterina\nveverka\nvibrace\nvichr\nvideohra\nvidina\nvidle\nvila\nvinice\nviset\nvitalita\nvize\nvizitka\nvjezd\nvklad\nvkus\nvlajka\nvlak\nvlasec\nvlevo\nvlhkost\nvliv\nvlnovka\nvloupat\nvnucovat\nvnuk\nvoda\nvodivost\nvodoznak\nvodstvo\nvojensky\nvojna\nvojsko\nvolant\nvolba\nvolit\nvolno\nvoskovka\nvozidlo\nvozovna\nvpravo\nvrabec\nvracet\nvrah\nvrata\nvrba\nvrcholek\nvrhat\nvrstva\nvrtule\nvsadit\nvstoupit\nvstup\nvtip\nvybavit\nvybrat\nvychovat\nvydat\nvydra\nvyfotit\nvyhledat\nvyhnout\nvyhodit\nvyhradit\nvyhubit\nvyjasnit\nvyjet\nvyjmout\nvyklopit\nvykonat\nvylekat\nvymazat\nvymezit\nvymizet\nvymyslet\nvynechat\nvynikat\nvynutit\nvypadat\nvyplatit\nvypravit\nvypustit\nvyrazit\nvyrovnat\nvyrvat\nvyslovit\nvysoko\nvystavit\nvysunout\nvysypat\nvytasit\nvytesat\nvytratit\nvyvinout\nvyvolat\nvyvrhel\nvyzdobit\nvyznat\nvzadu\nvzbudit\nvzchopit\nvzdor\nvzduch\nvzdychat\nvzestup\nvzhledem\nvzkaz\nvzlykat\nvznik\nvzorek\nvzpoura\nvztah\nvztek\nxylofon\nzabrat\nzabydlet\nzachovat\nzadarmo\nzadusit\nzafoukat\nzahltit\nzahodit\nzahrada\nzahynout\nzajatec\nzajet\nzajistit\nzaklepat\nzakoupit\nzalepit\nzamezit\nzamotat\nzamyslet\nzanechat\nzanikat\nzaplatit\nzapojit\nzapsat\nzarazit\nzastavit\nzasunout\nzatajit\nzatemnit\nzatknout\nzaujmout\nzavalit\nzavelet\nzavinit\nzavolat\nzavrtat\nzazvonit\nzbavit\nzbrusu\nzbudovat\nzbytek\nzdaleka\nzdarma\nzdatnost\nzdivo\nzdobit\nzdroj\nzdvih\nzdymadlo\nzelenina\nzeman\nzemina\nzeptat\nzezadu\nzezdola\nzhatit\nzhltnout\nzhluboka\nzhotovit\nzhruba\nzima\nzimnice\nzjemnit\nzklamat\nzkoumat\nzkratka\nzkumavka\nzlato\nzlehka\nzloba\nzlom\nzlost\nzlozvyk\nzmapovat\nzmar\nzmatek\nzmije\nzmizet\nzmocnit\nzmodrat\nzmrzlina\nzmutovat\nznak\nznalost\nznamenat\nznovu\nzobrazit\nzotavit\nzoubek\nzoufale\nzplodit\nzpomalit\nzprava\nzprostit\nzprudka\nzprvu\nzrada\nzranit\nzrcadlo\nzrnitost\nzrno\nzrovna\nzrychlit\nzrzavost\nzticha\nztratit\nzubovina\nzubr\nzvednout\nzvenku\nzvesela\nzvon\nzvrat\nzvukovod\nzvyk`.split('\\n');\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wordlist = void 0;\nexports.wordlist = `abandon\nability\nable\nabout\nabove\nabsent\nabsorb\nabstract\nabsurd\nabuse\naccess\naccident\naccount\naccuse\nachieve\nacid\nacoustic\nacquire\nacross\nact\naction\nactor\nactress\nactual\nadapt\nadd\naddict\naddress\nadjust\nadmit\nadult\nadvance\nadvice\naerobic\naffair\nafford\nafraid\nagain\nage\nagent\nagree\nahead\naim\nair\nairport\naisle\nalarm\nalbum\nalcohol\nalert\nalien\nall\nalley\nallow\nalmost\nalone\nalpha\nalready\nalso\nalter\nalways\namateur\namazing\namong\namount\namused\nanalyst\nanchor\nancient\nanger\nangle\nangry\nanimal\nankle\nannounce\nannual\nanother\nanswer\nantenna\nantique\nanxiety\nany\napart\napology\nappear\napple\napprove\napril\narch\narctic\narea\narena\nargue\narm\narmed\narmor\narmy\naround\narrange\narrest\narrive\narrow\nart\nartefact\nartist\nartwork\nask\naspect\nassault\nasset\nassist\nassume\nasthma\nathlete\natom\nattack\nattend\nattitude\nattract\nauction\naudit\naugust\naunt\nauthor\nauto\nautumn\naverage\navocado\navoid\nawake\naware\naway\nawesome\nawful\nawkward\naxis\nbaby\nbachelor\nbacon\nbadge\nbag\nbalance\nbalcony\nball\nbamboo\nbanana\nbanner\nbar\nbarely\nbargain\nbarrel\nbase\nbasic\nbasket\nbattle\nbeach\nbean\nbeauty\nbecause\nbecome\nbeef\nbefore\nbegin\nbehave\nbehind\nbelieve\nbelow\nbelt\nbench\nbenefit\nbest\nbetray\nbetter\nbetween\nbeyond\nbicycle\nbid\nbike\nbind\nbiology\nbird\nbirth\nbitter\nblack\nblade\nblame\nblanket\nblast\nbleak\nbless\nblind\nblood\nblossom\nblouse\nblue\nblur\nblush\nboard\nboat\nbody\nboil\nbomb\nbone\nbonus\nbook\nboost\nborder\nboring\nborrow\nboss\nbottom\nbounce\nbox\nboy\nbracket\nbrain\nbrand\nbrass\nbrave\nbread\nbreeze\nbrick\nbridge\nbrief\nbright\nbring\nbrisk\nbroccoli\nbroken\nbronze\nbroom\nbrother\nbrown\nbrush\nbubble\nbuddy\nbudget\nbuffalo\nbuild\nbulb\nbulk\nbullet\nbundle\nbunker\nburden\nburger\nburst\nbus\nbusiness\nbusy\nbutter\nbuyer\nbuzz\ncabbage\ncabin\ncable\ncactus\ncage\ncake\ncall\ncalm\ncamera\ncamp\ncan\ncanal\ncancel\ncandy\ncannon\ncanoe\ncanvas\ncanyon\ncapable\ncapital\ncaptain\ncar\ncarbon\ncard\ncargo\ncarpet\ncarry\ncart\ncase\ncash\ncasino\ncastle\ncasual\ncat\ncatalog\ncatch\ncategory\ncattle\ncaught\ncause\ncaution\ncave\nceiling\ncelery\ncement\ncensus\ncentury\ncereal\ncertain\nchair\nchalk\nchampion\nchange\nchaos\nchapter\ncharge\nchase\nchat\ncheap\ncheck\ncheese\nchef\ncherry\nchest\nchicken\nchief\nchild\nchimney\nchoice\nchoose\nchronic\nchuckle\nchunk\nchurn\ncigar\ncinnamon\ncircle\ncitizen\ncity\ncivil\nclaim\nclap\nclarify\nclaw\nclay\nclean\nclerk\nclever\nclick\nclient\ncliff\nclimb\nclinic\nclip\nclock\nclog\nclose\ncloth\ncloud\nclown\nclub\nclump\ncluster\nclutch\ncoach\ncoast\ncoconut\ncode\ncoffee\ncoil\ncoin\ncollect\ncolor\ncolumn\ncombine\ncome\ncomfort\ncomic\ncommon\ncompany\nconcert\nconduct\nconfirm\ncongress\nconnect\nconsider\ncontrol\nconvince\ncook\ncool\ncopper\ncopy\ncoral\ncore\ncorn\ncorrect\ncost\ncotton\ncouch\ncountry\ncouple\ncourse\ncousin\ncover\ncoyote\ncrack\ncradle\ncraft\ncram\ncrane\ncrash\ncrater\ncrawl\ncrazy\ncream\ncredit\ncreek\ncrew\ncricket\ncrime\ncrisp\ncritic\ncrop\ncross\ncrouch\ncrowd\ncrucial\ncruel\ncruise\ncrumble\ncrunch\ncrush\ncry\ncrystal\ncube\nculture\ncup\ncupboard\ncurious\ncurrent\ncurtain\ncurve\ncushion\ncustom\ncute\ncycle\ndad\ndamage\ndamp\ndance\ndanger\ndaring\ndash\ndaughter\ndawn\nday\ndeal\ndebate\ndebris\ndecade\ndecember\ndecide\ndecline\ndecorate\ndecrease\ndeer\ndefense\ndefine\ndefy\ndegree\ndelay\ndeliver\ndemand\ndemise\ndenial\ndentist\ndeny\ndepart\ndepend\ndeposit\ndepth\ndeputy\nderive\ndescribe\ndesert\ndesign\ndesk\ndespair\ndestroy\ndetail\ndetect\ndevelop\ndevice\ndevote\ndiagram\ndial\ndiamond\ndiary\ndice\ndiesel\ndiet\ndiffer\ndigital\ndignity\ndilemma\ndinner\ndinosaur\ndirect\ndirt\ndisagree\ndiscover\ndisease\ndish\ndismiss\ndisorder\ndisplay\ndistance\ndivert\ndivide\ndivorce\ndizzy\ndoctor\ndocument\ndog\ndoll\ndolphin\ndomain\ndonate\ndonkey\ndonor\ndoor\ndose\ndouble\ndove\ndraft\ndragon\ndrama\ndrastic\ndraw\ndream\ndress\ndrift\ndrill\ndrink\ndrip\ndrive\ndrop\ndrum\ndry\nduck\ndumb\ndune\nduring\ndust\ndutch\nduty\ndwarf\ndynamic\neager\neagle\nearly\nearn\nearth\neasily\neast\neasy\necho\necology\neconomy\nedge\nedit\neducate\neffort\negg\neight\neither\nelbow\nelder\nelectric\nelegant\nelement\nelephant\nelevator\nelite\nelse\nembark\nembody\nembrace\nemerge\nemotion\nemploy\nempower\nempty\nenable\nenact\nend\nendless\nendorse\nenemy\nenergy\nenforce\nengage\nengine\nenhance\nenjoy\nenlist\nenough\nenrich\nenroll\nensure\nenter\nentire\nentry\nenvelope\nepisode\nequal\nequip\nera\nerase\nerode\nerosion\nerror\nerupt\nescape\nessay\nessence\nestate\neternal\nethics\nevidence\nevil\nevoke\nevolve\nexact\nexample\nexcess\nexchange\nexcite\nexclude\nexcuse\nexecute\nexercise\nexhaust\nexhibit\nexile\nexist\nexit\nexotic\nexpand\nexpect\nexpire\nexplain\nexpose\nexpress\nextend\nextra\neye\neyebrow\nfabric\nface\nfaculty\nfade\nfaint\nfaith\nfall\nfalse\nfame\nfamily\nfamous\nfan\nfancy\nfantasy\nfarm\nfashion\nfat\nfatal\nfather\nfatigue\nfault\nfavorite\nfeature\nfebruary\nfederal\nfee\nfeed\nfeel\nfemale\nfence\nfestival\nfetch\nfever\nfew\nfiber\nfiction\nfield\nfigure\nfile\nfilm\nfilter\nfinal\nfind\nfine\nfinger\nfinish\nfire\nfirm\nfirst\nfiscal\nfish\nfit\nfitness\nfix\nflag\nflame\nflash\nflat\nflavor\nflee\nflight\nflip\nfloat\nflock\nfloor\nflower\nfluid\nflush\nfly\nfoam\nfocus\nfog\nfoil\nfold\nfollow\nfood\nfoot\nforce\nforest\nforget\nfork\nfortune\nforum\nforward\nfossil\nfoster\nfound\nfox\nfragile\nframe\nfrequent\nfresh\nfriend\nfringe\nfrog\nfront\nfrost\nfrown\nfrozen\nfruit\nfuel\nfun\nfunny\nfurnace\nfury\nfuture\ngadget\ngain\ngalaxy\ngallery\ngame\ngap\ngarage\ngarbage\ngarden\ngarlic\ngarment\ngas\ngasp\ngate\ngather\ngauge\ngaze\ngeneral\ngenius\ngenre\ngentle\ngenuine\ngesture\nghost\ngiant\ngift\ngiggle\nginger\ngiraffe\ngirl\ngive\nglad\nglance\nglare\nglass\nglide\nglimpse\nglobe\ngloom\nglory\nglove\nglow\nglue\ngoat\ngoddess\ngold\ngood\ngoose\ngorilla\ngospel\ngossip\ngovern\ngown\ngrab\ngrace\ngrain\ngrant\ngrape\ngrass\ngravity\ngreat\ngreen\ngrid\ngrief\ngrit\ngrocery\ngroup\ngrow\ngrunt\nguard\nguess\nguide\nguilt\nguitar\ngun\ngym\nhabit\nhair\nhalf\nhammer\nhamster\nhand\nhappy\nharbor\nhard\nharsh\nharvest\nhat\nhave\nhawk\nhazard\nhead\nhealth\nheart\nheavy\nhedgehog\nheight\nhello\nhelmet\nhelp\nhen\nhero\nhidden\nhigh\nhill\nhint\nhip\nhire\nhistory\nhobby\nhockey\nhold\nhole\nholiday\nhollow\nhome\nhoney\nhood\nhope\nhorn\nhorror\nhorse\nhospital\nhost\nhotel\nhour\nhover\nhub\nhuge\nhuman\nhumble\nhumor\nhundred\nhungry\nhunt\nhurdle\nhurry\nhurt\nhusband\nhybrid\nice\nicon\nidea\nidentify\nidle\nignore\nill\nillegal\nillness\nimage\nimitate\nimmense\nimmune\nimpact\nimpose\nimprove\nimpulse\ninch\ninclude\nincome\nincrease\nindex\nindicate\nindoor\nindustry\ninfant\ninflict\ninform\ninhale\ninherit\ninitial\ninject\ninjury\ninmate\ninner\ninnocent\ninput\ninquiry\ninsane\ninsect\ninside\ninspire\ninstall\nintact\ninterest\ninto\ninvest\ninvite\ninvolve\niron\nisland\nisolate\nissue\nitem\nivory\njacket\njaguar\njar\njazz\njealous\njeans\njelly\njewel\njob\njoin\njoke\njourney\njoy\njudge\njuice\njump\njungle\njunior\njunk\njust\nkangaroo\nkeen\nkeep\nketchup\nkey\nkick\nkid\nkidney\nkind\nkingdom\nkiss\nkit\nkitchen\nkite\nkitten\nkiwi\nknee\nknife\nknock\nknow\nlab\nlabel\nlabor\nladder\nlady\nlake\nlamp\nlanguage\nlaptop\nlarge\nlater\nlatin\nlaugh\nlaundry\nlava\nlaw\nlawn\nlawsuit\nlayer\nlazy\nleader\nleaf\nlearn\nleave\nlecture\nleft\nleg\nlegal\nlegend\nleisure\nlemon\nlend\nlength\nlens\nleopard\nlesson\nletter\nlevel\nliar\nliberty\nlibrary\nlicense\nlife\nlift\nlight\nlike\nlimb\nlimit\nlink\nlion\nliquid\nlist\nlittle\nlive\nlizard\nload\nloan\nlobster\nlocal\nlock\nlogic\nlonely\nlong\nloop\nlottery\nloud\nlounge\nlove\nloyal\nlucky\nluggage\nlumber\nlunar\nlunch\nluxury\nlyrics\nmachine\nmad\nmagic\nmagnet\nmaid\nmail\nmain\nmajor\nmake\nmammal\nman\nmanage\nmandate\nmango\nmansion\nmanual\nmaple\nmarble\nmarch\nmargin\nmarine\nmarket\nmarriage\nmask\nmass\nmaster\nmatch\nmaterial\nmath\nmatrix\nmatter\nmaximum\nmaze\nmeadow\nmean\nmeasure\nmeat\nmechanic\nmedal\nmedia\nmelody\nmelt\nmember\nmemory\nmention\nmenu\nmercy\nmerge\nmerit\nmerry\nmesh\nmessage\nmetal\nmethod\nmiddle\nmidnight\nmilk\nmillion\nmimic\nmind\nminimum\nminor\nminute\nmiracle\nmirror\nmisery\nmiss\nmistake\nmix\nmixed\nmixture\nmobile\nmodel\nmodify\nmom\nmoment\nmonitor\nmonkey\nmonster\nmonth\nmoon\nmoral\nmore\nmorning\nmosquito\nmother\nmotion\nmotor\nmountain\nmouse\nmove\nmovie\nmuch\nmuffin\nmule\nmultiply\nmuscle\nmuseum\nmushroom\nmusic\nmust\nmutual\nmyself\nmystery\nmyth\nnaive\nname\nnapkin\nnarrow\nnasty\nnation\nnature\nnear\nneck\nneed\nnegative\nneglect\nneither\nnephew\nnerve\nnest\nnet\nnetwork\nneutral\nnever\nnews\nnext\nnice\nnight\nnoble\nnoise\nnominee\nnoodle\nnormal\nnorth\nnose\nnotable\nnote\nnothing\nnotice\nnovel\nnow\nnuclear\nnumber\nnurse\nnut\noak\nobey\nobject\noblige\nobscure\nobserve\nobtain\nobvious\noccur\nocean\noctober\nodor\noff\noffer\noffice\noften\noil\nokay\nold\nolive\nolympic\nomit\nonce\none\nonion\nonline\nonly\nopen\nopera\nopinion\noppose\noption\norange\norbit\norchard\norder\nordinary\norgan\norient\noriginal\norphan\nostrich\nother\noutdoor\nouter\noutput\noutside\noval\noven\nover\nown\nowner\noxygen\noyster\nozone\npact\npaddle\npage\npair\npalace\npalm\npanda\npanel\npanic\npanther\npaper\nparade\nparent\npark\nparrot\nparty\npass\npatch\npath\npatient\npatrol\npattern\npause\npave\npayment\npeace\npeanut\npear\npeasant\npelican\npen\npenalty\npencil\npeople\npepper\nperfect\npermit\nperson\npet\nphone\nphoto\nphrase\nphysical\npiano\npicnic\npicture\npiece\npig\npigeon\npill\npilot\npink\npioneer\npipe\npistol\npitch\npizza\nplace\nplanet\nplastic\nplate\nplay\nplease\npledge\npluck\nplug\nplunge\npoem\npoet\npoint\npolar\npole\npolice\npond\npony\npool\npopular\nportion\nposition\npossible\npost\npotato\npottery\npoverty\npowder\npower\npractice\npraise\npredict\nprefer\nprepare\npresent\npretty\nprevent\nprice\npride\nprimary\nprint\npriority\nprison\nprivate\nprize\nproblem\nprocess\nproduce\nprofit\nprogram\nproject\npromote\nproof\nproperty\nprosper\nprotect\nproud\nprovide\npublic\npudding\npull\npulp\npulse\npumpkin\npunch\npupil\npuppy\npurchase\npurity\npurpose\npurse\npush\nput\npuzzle\npyramid\nquality\nquantum\nquarter\nquestion\nquick\nquit\nquiz\nquote\nrabbit\nraccoon\nrace\nrack\nradar\nradio\nrail\nrain\nraise\nrally\nramp\nranch\nrandom\nrange\nrapid\nrare\nrate\nrather\nraven\nraw\nrazor\nready\nreal\nreason\nrebel\nrebuild\nrecall\nreceive\nrecipe\nrecord\nrecycle\nreduce\nreflect\nreform\nrefuse\nregion\nregret\nregular\nreject\nrelax\nrelease\nrelief\nrely\nremain\nremember\nremind\nremove\nrender\nrenew\nrent\nreopen\nrepair\nrepeat\nreplace\nreport\nrequire\nrescue\nresemble\nresist\nresource\nresponse\nresult\nretire\nretreat\nreturn\nreunion\nreveal\nreview\nreward\nrhythm\nrib\nribbon\nrice\nrich\nride\nridge\nrifle\nright\nrigid\nring\nriot\nripple\nrisk\nritual\nrival\nriver\nroad\nroast\nrobot\nrobust\nrocket\nromance\nroof\nrookie\nroom\nrose\nrotate\nrough\nround\nroute\nroyal\nrubber\nrude\nrug\nrule\nrun\nrunway\nrural\nsad\nsaddle\nsadness\nsafe\nsail\nsalad\nsalmon\nsalon\nsalt\nsalute\nsame\nsample\nsand\nsatisfy\nsatoshi\nsauce\nsausage\nsave\nsay\nscale\nscan\nscare\nscatter\nscene\nscheme\nschool\nscience\nscissors\nscorpion\nscout\nscrap\nscreen\nscript\nscrub\nsea\nsearch\nseason\nseat\nsecond\nsecret\nsection\nsecurity\nseed\nseek\nsegment\nselect\nsell\nseminar\nsenior\nsense\nsentence\nseries\nservice\nsession\nsettle\nsetup\nseven\nshadow\nshaft\nshallow\nshare\nshed\nshell\nsheriff\nshield\nshift\nshine\nship\nshiver\nshock\nshoe\nshoot\nshop\nshort\nshoulder\nshove\nshrimp\nshrug\nshuffle\nshy\nsibling\nsick\nside\nsiege\nsight\nsign\nsilent\nsilk\nsilly\nsilver\nsimilar\nsimple\nsince\nsing\nsiren\nsister\nsituate\nsix\nsize\nskate\nsketch\nski\nskill\nskin\nskirt\nskull\nslab\nslam\nsleep\nslender\nslice\nslide\nslight\nslim\nslogan\nslot\nslow\nslush\nsmall\nsmart\nsmile\nsmoke\nsmooth\nsnack\nsnake\nsnap\nsniff\nsnow\nsoap\nsoccer\nsocial\nsock\nsoda\nsoft\nsolar\nsoldier\nsolid\nsolution\nsolve\nsomeone\nsong\nsoon\nsorry\nsort\nsoul\nsound\nsoup\nsource\nsouth\nspace\nspare\nspatial\nspawn\nspeak\nspecial\nspeed\nspell\nspend\nsphere\nspice\nspider\nspike\nspin\nspirit\nsplit\nspoil\nsponsor\nspoon\nsport\nspot\nspray\nspread\nspring\nspy\nsquare\nsqueeze\nsquirrel\nstable\nstadium\nstaff\nstage\nstairs\nstamp\nstand\nstart\nstate\nstay\nsteak\nsteel\nstem\nstep\nstereo\nstick\nstill\nsting\nstock\nstomach\nstone\nstool\nstory\nstove\nstrategy\nstreet\nstrike\nstrong\nstruggle\nstudent\nstuff\nstumble\nstyle\nsubject\nsubmit\nsubway\nsuccess\nsuch\nsudden\nsuffer\nsugar\nsuggest\nsuit\nsummer\nsun\nsunny\nsunset\nsuper\nsupply\nsupreme\nsure\nsurface\nsurge\nsurprise\nsurround\nsurvey\nsuspect\nsustain\nswallow\nswamp\nswap\nswarm\nswear\nsweet\nswift\nswim\nswing\nswitch\nsword\nsymbol\nsymptom\nsyrup\nsystem\ntable\ntackle\ntag\ntail\ntalent\ntalk\ntank\ntape\ntarget\ntask\ntaste\ntattoo\ntaxi\nteach\nteam\ntell\nten\ntenant\ntennis\ntent\nterm\ntest\ntext\nthank\nthat\ntheme\nthen\ntheory\nthere\nthey\nthing\nthis\nthought\nthree\nthrive\nthrow\nthumb\nthunder\nticket\ntide\ntiger\ntilt\ntimber\ntime\ntiny\ntip\ntired\ntissue\ntitle\ntoast\ntobacco\ntoday\ntoddler\ntoe\ntogether\ntoilet\ntoken\ntomato\ntomorrow\ntone\ntongue\ntonight\ntool\ntooth\ntop\ntopic\ntopple\ntorch\ntornado\ntortoise\ntoss\ntotal\ntourist\ntoward\ntower\ntown\ntoy\ntrack\ntrade\ntraffic\ntragic\ntrain\ntransfer\ntrap\ntrash\ntravel\ntray\ntreat\ntree\ntrend\ntrial\ntribe\ntrick\ntrigger\ntrim\ntrip\ntrophy\ntrouble\ntruck\ntrue\ntruly\ntrumpet\ntrust\ntruth\ntry\ntube\ntuition\ntumble\ntuna\ntunnel\nturkey\nturn\nturtle\ntwelve\ntwenty\ntwice\ntwin\ntwist\ntwo\ntype\ntypical\nugly\numbrella\nunable\nunaware\nuncle\nuncover\nunder\nundo\nunfair\nunfold\nunhappy\nuniform\nunique\nunit\nuniverse\nunknown\nunlock\nuntil\nunusual\nunveil\nupdate\nupgrade\nuphold\nupon\nupper\nupset\nurban\nurge\nusage\nuse\nused\nuseful\nuseless\nusual\nutility\nvacant\nvacuum\nvague\nvalid\nvalley\nvalve\nvan\nvanish\nvapor\nvarious\nvast\nvault\nvehicle\nvelvet\nvendor\nventure\nvenue\nverb\nverify\nversion\nvery\nvessel\nveteran\nviable\nvibrant\nvicious\nvictory\nvideo\nview\nvillage\nvintage\nviolin\nvirtual\nvirus\nvisa\nvisit\nvisual\nvital\nvivid\nvocal\nvoice\nvoid\nvolcano\nvolume\nvote\nvoyage\nwage\nwagon\nwait\nwalk\nwall\nwalnut\nwant\nwarfare\nwarm\nwarrior\nwash\nwasp\nwaste\nwater\nwave\nway\nwealth\nweapon\nwear\nweasel\nweather\nweb\nwedding\nweekend\nweird\nwelcome\nwest\nwet\nwhale\nwhat\nwheat\nwheel\nwhen\nwhere\nwhip\nwhisper\nwide\nwidth\nwife\nwild\nwill\nwin\nwindow\nwine\nwing\nwink\nwinner\nwinter\nwire\nwisdom\nwise\nwish\nwitness\nwolf\nwoman\nwonder\nwood\nwool\nword\nwork\nworld\nworry\nworth\nwrap\nwreck\nwrestle\nwrist\nwrite\nwrong\nyard\nyear\nyellow\nyou\nyoung\nyouth\nzebra\nzero\nzone\nzoo`.split('\\n');\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wordlist = void 0;\nexports.wordlist = `abaisser\nabandon\nabdiquer\nabeille\nabolir\naborder\naboutir\naboyer\nabrasif\nabreuver\nabriter\nabroger\nabrupt\nabsence\nabsolu\nabsurde\nabusif\nabyssal\nacade\u0301mie\nacajou\nacarien\naccabler\naccepter\nacclamer\naccolade\naccroche\naccuser\nacerbe\nachat\nacheter\naciduler\nacier\nacompte\nacque\u0301rir\nacronyme\nacteur\nactif\nactuel\nadepte\nade\u0301quat\nadhe\u0301sif\nadjectif\nadjuger\nadmettre\nadmirer\nadopter\nadorer\nadoucir\nadresse\nadroit\nadulte\nadverbe\nae\u0301rer\nae\u0301ronef\naffaire\naffecter\naffiche\naffreux\naffubler\nagacer\nagencer\nagile\nagiter\nagrafer\nagre\u0301able\nagrume\naider\naiguille\nailier\naimable\naisance\najouter\najuster\nalarmer\nalchimie\nalerte\nalge\u0300bre\nalgue\nalie\u0301ner\naliment\nalle\u0301ger\nalliage\nallouer\nallumer\nalourdir\nalpaga\naltesse\nalve\u0301ole\namateur\nambigu\nambre\name\u0301nager\namertume\namidon\namiral\namorcer\namour\namovible\namphibie\nampleur\namusant\nanalyse\nanaphore\nanarchie\nanatomie\nancien\nane\u0301antir\nangle\nangoisse\nanguleux\nanimal\nannexer\nannonce\nannuel\nanodin\nanomalie\nanonyme\nanormal\nantenne\nantidote\nanxieux\napaiser\nape\u0301ritif\naplanir\napologie\nappareil\nappeler\napporter\nappuyer\naquarium\naqueduc\narbitre\narbuste\nardeur\nardoise\nargent\narlequin\narmature\narmement\narmoire\narmure\narpenter\narracher\narriver\narroser\narsenic\narte\u0301riel\narticle\naspect\nasphalte\naspirer\nassaut\nasservir\nassiette\nassocier\nassurer\nasticot\nastre\nastuce\natelier\natome\natrium\natroce\nattaque\nattentif\nattirer\nattraper\naubaine\nauberge\naudace\naudible\naugurer\naurore\nautomne\nautruche\navaler\navancer\navarice\navenir\naverse\naveugle\naviateur\navide\navion\naviser\navoine\navouer\navril\naxial\naxiome\nbadge\nbafouer\nbagage\nbaguette\nbaignade\nbalancer\nbalcon\nbaleine\nbalisage\nbambin\nbancaire\nbandage\nbanlieue\nbannie\u0300re\nbanquier\nbarbier\nbaril\nbaron\nbarque\nbarrage\nbassin\nbastion\nbataille\nbateau\nbatterie\nbaudrier\nbavarder\nbelette\nbe\u0301lier\nbelote\nbe\u0301ne\u0301fice\nberceau\nberger\nberline\nbermuda\nbesace\nbesogne\nbe\u0301tail\nbeurre\nbiberon\nbicycle\nbidule\nbijou\nbilan\nbilingue\nbillard\nbinaire\nbiologie\nbiopsie\nbiotype\nbiscuit\nbison\nbistouri\nbitume\nbizarre\nblafard\nblague\nblanchir\nblessant\nblinder\nblond\nbloquer\nblouson\nbobard\nbobine\nboire\nboiser\nbolide\nbonbon\nbondir\nbonheur\nbonifier\nbonus\nbordure\nborne\nbotte\nboucle\nboueux\nbougie\nboulon\nbouquin\nbourse\nboussole\nboutique\nboxeur\nbranche\nbrasier\nbrave\nbrebis\nbre\u0300che\nbreuvage\nbricoler\nbrigade\nbrillant\nbrioche\nbrique\nbrochure\nbroder\nbronzer\nbrousse\nbroyeur\nbrume\nbrusque\nbrutal\nbruyant\nbuffle\nbuisson\nbulletin\nbureau\nburin\nbustier\nbutiner\nbutoir\nbuvable\nbuvette\ncabanon\ncabine\ncachette\ncadeau\ncadre\ncafe\u0301ine\ncaillou\ncaisson\ncalculer\ncalepin\ncalibre\ncalmer\ncalomnie\ncalvaire\ncamarade\ncame\u0301ra\ncamion\ncampagne\ncanal\ncaneton\ncanon\ncantine\ncanular\ncapable\ncaporal\ncaprice\ncapsule\ncapter\ncapuche\ncarabine\ncarbone\ncaresser\ncaribou\ncarnage\ncarotte\ncarreau\ncarton\ncascade\ncasier\ncasque\ncassure\ncauser\ncaution\ncavalier\ncaverne\ncaviar\nce\u0301dille\nceinture\nce\u0301leste\ncellule\ncendrier\ncensurer\ncentral\ncercle\nce\u0301re\u0301bral\ncerise\ncerner\ncerveau\ncesser\nchagrin\nchaise\nchaleur\nchambre\nchance\nchapitre\ncharbon\nchasseur\nchaton\nchausson\nchavirer\nchemise\nchenille\nche\u0301quier\nchercher\ncheval\nchien\nchiffre\nchignon\nchime\u0300re\nchiot\nchlorure\nchocolat\nchoisir\nchose\nchouette\nchrome\nchute\ncigare\ncigogne\ncimenter\ncine\u0301ma\ncintrer\ncirculer\ncirer\ncirque\nciterne\ncitoyen\ncitron\ncivil\nclairon\nclameur\nclaquer\nclasse\nclavier\nclient\ncligner\nclimat\nclivage\ncloche\nclonage\ncloporte\ncobalt\ncobra\ncocasse\ncocotier\ncoder\ncodifier\ncoffre\ncogner\ncohe\u0301sion\ncoiffer\ncoincer\ncole\u0300re\ncolibri\ncolline\ncolmater\ncolonel\ncombat\ncome\u0301die\ncommande\ncompact\nconcert\nconduire\nconfier\ncongeler\nconnoter\nconsonne\ncontact\nconvexe\ncopain\ncopie\ncorail\ncorbeau\ncordage\ncorniche\ncorpus\ncorrect\ncorte\u0300ge\ncosmique\ncostume\ncoton\ncoude\ncoupure\ncourage\ncouteau\ncouvrir\ncoyote\ncrabe\ncrainte\ncravate\ncrayon\ncre\u0301ature\ncre\u0301diter\ncre\u0301meux\ncreuser\ncrevette\ncribler\ncrier\ncristal\ncrite\u0300re\ncroire\ncroquer\ncrotale\ncrucial\ncruel\ncrypter\ncubique\ncueillir\ncuille\u0300re\ncuisine\ncuivre\nculminer\ncultiver\ncumuler\ncupide\ncuratif\ncurseur\ncyanure\ncycle\ncylindre\ncynique\ndaigner\ndamier\ndanger\ndanseur\ndauphin\nde\u0301battre\nde\u0301biter\nde\u0301border\nde\u0301brider\nde\u0301butant\nde\u0301caler\nde\u0301cembre\nde\u0301chirer\nde\u0301cider\nde\u0301clarer\nde\u0301corer\nde\u0301crire\nde\u0301cupler\nde\u0301dale\nde\u0301ductif\nde\u0301esse\nde\u0301fensif\nde\u0301filer\nde\u0301frayer\nde\u0301gager\nde\u0301givrer\nde\u0301glutir\nde\u0301grafer\nde\u0301jeuner\nde\u0301lice\nde\u0301loger\ndemander\ndemeurer\nde\u0301molir\nde\u0301nicher\nde\u0301nouer\ndentelle\nde\u0301nuder\nde\u0301part\nde\u0301penser\nde\u0301phaser\nde\u0301placer\nde\u0301poser\nde\u0301ranger\nde\u0301rober\nde\u0301sastre\ndescente\nde\u0301sert\nde\u0301signer\nde\u0301sobe\u0301ir\ndessiner\ndestrier\nde\u0301tacher\nde\u0301tester\nde\u0301tourer\nde\u0301tresse\ndevancer\ndevenir\ndeviner\ndevoir\ndiable\ndialogue\ndiamant\ndicter\ndiffe\u0301rer\ndige\u0301rer\ndigital\ndigne\ndiluer\ndimanche\ndiminuer\ndioxyde\ndirectif\ndiriger\ndiscuter\ndisposer\ndissiper\ndistance\ndivertir\ndiviser\ndocile\ndocteur\ndogme\ndoigt\ndomaine\ndomicile\ndompter\ndonateur\ndonjon\ndonner\ndopamine\ndortoir\ndorure\ndosage\ndoseur\ndossier\ndotation\ndouanier\ndouble\ndouceur\ndouter\ndoyen\ndragon\ndraper\ndresser\ndribbler\ndroiture\nduperie\nduplexe\ndurable\ndurcir\ndynastie\ne\u0301blouir\ne\u0301carter\ne\u0301charpe\ne\u0301chelle\ne\u0301clairer\ne\u0301clipse\ne\u0301clore\ne\u0301cluse\ne\u0301cole\ne\u0301conomie\ne\u0301corce\ne\u0301couter\ne\u0301craser\ne\u0301cre\u0301mer\ne\u0301crivain\ne\u0301crou\ne\u0301cume\ne\u0301cureuil\ne\u0301difier\ne\u0301duquer\neffacer\neffectif\neffigie\neffort\neffrayer\neffusion\ne\u0301galiser\ne\u0301garer\ne\u0301jecter\ne\u0301laborer\ne\u0301largir\ne\u0301lectron\ne\u0301le\u0301gant\ne\u0301le\u0301phant\ne\u0301le\u0300ve\ne\u0301ligible\ne\u0301litisme\ne\u0301loge\ne\u0301lucider\ne\u0301luder\nemballer\nembellir\nembryon\ne\u0301meraude\ne\u0301mission\nemmener\ne\u0301motion\ne\u0301mouvoir\nempereur\nemployer\nemporter\nemprise\ne\u0301mulsion\nencadrer\nenche\u0300re\nenclave\nencoche\nendiguer\nendosser\nendroit\nenduire\ne\u0301nergie\nenfance\nenfermer\nenfouir\nengager\nengin\nenglober\ne\u0301nigme\nenjamber\nenjeu\nenlever\nennemi\nennuyeux\nenrichir\nenrobage\nenseigne\nentasser\nentendre\nentier\nentourer\nentraver\ne\u0301nume\u0301rer\nenvahir\nenviable\nenvoyer\nenzyme\ne\u0301olien\ne\u0301paissir\ne\u0301pargne\ne\u0301patant\ne\u0301paule\ne\u0301picerie\ne\u0301pide\u0301mie\ne\u0301pier\ne\u0301pilogue\ne\u0301pine\ne\u0301pisode\ne\u0301pitaphe\ne\u0301poque\ne\u0301preuve\ne\u0301prouver\ne\u0301puisant\ne\u0301querre\ne\u0301quipe\ne\u0301riger\ne\u0301rosion\nerreur\ne\u0301ruption\nescalier\nespadon\nespe\u0300ce\nespie\u0300gle\nespoir\nesprit\nesquiver\nessayer\nessence\nessieu\nessorer\nestime\nestomac\nestrade\ne\u0301tage\u0300re\ne\u0301taler\ne\u0301tanche\ne\u0301tatique\ne\u0301teindre\ne\u0301tendoir\ne\u0301ternel\ne\u0301thanol\ne\u0301thique\nethnie\ne\u0301tirer\ne\u0301toffer\ne\u0301toile\ne\u0301tonnant\ne\u0301tourdir\ne\u0301trange\ne\u0301troit\ne\u0301tude\neuphorie\ne\u0301valuer\ne\u0301vasion\ne\u0301ventail\ne\u0301vidence\ne\u0301viter\ne\u0301volutif\ne\u0301voquer\nexact\nexage\u0301rer\nexaucer\nexceller\nexcitant\nexclusif\nexcuse\nexe\u0301cuter\nexemple\nexercer\nexhaler\nexhorter\nexigence\nexiler\nexister\nexotique\nexpe\u0301dier\nexplorer\nexposer\nexprimer\nexquis\nextensif\nextraire\nexulter\nfable\nfabuleux\nfacette\nfacile\nfacture\nfaiblir\nfalaise\nfameux\nfamille\nfarceur\nfarfelu\nfarine\nfarouche\nfasciner\nfatal\nfatigue\nfaucon\nfautif\nfaveur\nfavori\nfe\u0301brile\nfe\u0301conder\nfe\u0301de\u0301rer\nfe\u0301lin\nfemme\nfe\u0301mur\nfendoir\nfe\u0301odal\nfermer\nfe\u0301roce\nferveur\nfestival\nfeuille\nfeutre\nfe\u0301vrier\nfiasco\nficeler\nfictif\nfide\u0300le\nfigure\nfilature\nfiletage\nfilie\u0300re\nfilleul\nfilmer\nfilou\nfiltrer\nfinancer\nfinir\nfiole\nfirme\nfissure\nfixer\nflairer\nflamme\nflasque\nflatteur\nfle\u0301au\nfle\u0300che\nfleur\nflexion\nflocon\nflore\nfluctuer\nfluide\nfluvial\nfolie\nfonderie\nfongible\nfontaine\nforcer\nforgeron\nformuler\nfortune\nfossile\nfoudre\nfouge\u0300re\nfouiller\nfoulure\nfourmi\nfragile\nfraise\nfranchir\nfrapper\nfrayeur\nfre\u0301gate\nfreiner\nfrelon\nfre\u0301mir\nfre\u0301ne\u0301sie\nfre\u0300re\nfriable\nfriction\nfrisson\nfrivole\nfroid\nfromage\nfrontal\nfrotter\nfruit\nfugitif\nfuite\nfureur\nfurieux\nfurtif\nfusion\nfutur\ngagner\ngalaxie\ngalerie\ngambader\ngarantir\ngardien\ngarnir\ngarrigue\ngazelle\ngazon\nge\u0301ant\nge\u0301latine\nge\u0301lule\ngendarme\nge\u0301ne\u0301ral\nge\u0301nie\ngenou\ngentil\nge\u0301ologie\nge\u0301ome\u0300tre\nge\u0301ranium\ngerme\ngestuel\ngeyser\ngibier\ngicler\ngirafe\ngivre\nglace\nglaive\nglisser\nglobe\ngloire\nglorieux\ngolfeur\ngomme\ngonfler\ngorge\ngorille\ngoudron\ngouffre\ngoulot\ngoupille\ngourmand\ngoutte\ngraduel\ngraffiti\ngraine\ngrand\ngrappin\ngratuit\ngravir\ngrenat\ngriffure\ngriller\ngrimper\ngrogner\ngronder\ngrotte\ngroupe\ngruger\ngrutier\ngruye\u0300re\ngue\u0301pard\nguerrier\nguide\nguimauve\nguitare\ngustatif\ngymnaste\ngyrostat\nhabitude\nhachoir\nhalte\nhameau\nhangar\nhanneton\nharicot\nharmonie\nharpon\nhasard\nhe\u0301lium\nhe\u0301matome\nherbe\nhe\u0301risson\nhermine\nhe\u0301ron\nhe\u0301siter\nheureux\nhiberner\nhibou\nhilarant\nhistoire\nhiver\nhomard\nhommage\nhomoge\u0300ne\nhonneur\nhonorer\nhonteux\nhorde\nhorizon\nhorloge\nhormone\nhorrible\nhouleux\nhousse\nhublot\nhuileux\nhumain\nhumble\nhumide\nhumour\nhurler\nhydromel\nhygie\u0300ne\nhymne\nhypnose\nidylle\nignorer\niguane\nillicite\nillusion\nimage\nimbiber\nimiter\nimmense\nimmobile\nimmuable\nimpact\nimpe\u0301rial\nimplorer\nimposer\nimprimer\nimputer\nincarner\nincendie\nincident\nincliner\nincolore\nindexer\nindice\ninductif\nine\u0301dit\nineptie\ninexact\ninfini\ninfliger\ninformer\ninfusion\ninge\u0301rer\ninhaler\ninhiber\ninjecter\ninjure\ninnocent\ninoculer\ninonder\ninscrire\ninsecte\ninsigne\ninsolite\ninspirer\ninstinct\ninsulter\nintact\nintense\nintime\nintrigue\nintuitif\ninutile\ninvasion\ninventer\ninviter\ninvoquer\nironique\nirradier\nirre\u0301el\nirriter\nisoler\nivoire\nivresse\njaguar\njaillir\njambe\njanvier\njardin\njauger\njaune\njavelot\njetable\njeton\njeudi\njeunesse\njoindre\njoncher\njongler\njoueur\njouissif\njournal\njovial\njoyau\njoyeux\njubiler\njugement\njunior\njupon\njuriste\njustice\njuteux\njuve\u0301nile\nkayak\nkimono\nkiosque\nlabel\nlabial\nlabourer\nlace\u0301rer\nlactose\nlagune\nlaine\nlaisser\nlaitier\nlambeau\nlamelle\nlampe\nlanceur\nlangage\nlanterne\nlapin\nlargeur\nlarme\nlaurier\nlavabo\nlavoir\nlecture\nle\u0301gal\nle\u0301ger\nle\u0301gume\nlessive\nlettre\nlevier\nlexique\nle\u0301zard\nliasse\nlibe\u0301rer\nlibre\nlicence\nlicorne\nlie\u0300ge\nlie\u0300vre\nligature\nligoter\nligue\nlimer\nlimite\nlimonade\nlimpide\nline\u0301aire\nlingot\nlionceau\nliquide\nlisie\u0300re\nlister\nlithium\nlitige\nlittoral\nlivreur\nlogique\nlointain\nloisir\nlombric\nloterie\nlouer\nlourd\nloutre\nlouve\nloyal\nlubie\nlucide\nlucratif\nlueur\nlugubre\nluisant\nlumie\u0300re\nlunaire\nlundi\nluron\nlutter\nluxueux\nmachine\nmagasin\nmagenta\nmagique\nmaigre\nmaillon\nmaintien\nmairie\nmaison\nmajorer\nmalaxer\nmale\u0301fice\nmalheur\nmalice\nmallette\nmammouth\nmandater\nmaniable\nmanquant\nmanteau\nmanuel\nmarathon\nmarbre\nmarchand\nmardi\nmaritime\nmarqueur\nmarron\nmarteler\nmascotte\nmassif\nmate\u0301riel\nmatie\u0300re\nmatraque\nmaudire\nmaussade\nmauve\nmaximal\nme\u0301chant\nme\u0301connu\nme\u0301daille\nme\u0301decin\nme\u0301diter\nme\u0301duse\nmeilleur\nme\u0301lange\nme\u0301lodie\nmembre\nme\u0301moire\nmenacer\nmener\nmenhir\nmensonge\nmentor\nmercredi\nme\u0301rite\nmerle\nmessager\nmesure\nme\u0301tal\nme\u0301te\u0301ore\nme\u0301thode\nme\u0301tier\nmeuble\nmiauler\nmicrobe\nmiette\nmignon\nmigrer\nmilieu\nmillion\nmimique\nmince\nmine\u0301ral\nminimal\nminorer\nminute\nmiracle\nmiroiter\nmissile\nmixte\nmobile\nmoderne\nmoelleux\nmondial\nmoniteur\nmonnaie\nmonotone\nmonstre\nmontagne\nmonument\nmoqueur\nmorceau\nmorsure\nmortier\nmoteur\nmotif\nmouche\nmoufle\nmoulin\nmousson\nmouton\nmouvant\nmultiple\nmunition\nmuraille\nmure\u0300ne\nmurmure\nmuscle\nmuse\u0301um\nmusicien\nmutation\nmuter\nmutuel\nmyriade\nmyrtille\nmyste\u0300re\nmythique\nnageur\nnappe\nnarquois\nnarrer\nnatation\nnation\nnature\nnaufrage\nnautique\nnavire\nne\u0301buleux\nnectar\nne\u0301faste\nne\u0301gation\nne\u0301gliger\nne\u0301gocier\nneige\nnerveux\nnettoyer\nneurone\nneutron\nneveu\nniche\nnickel\nnitrate\nniveau\nnoble\nnocif\nnocturne\nnoirceur\nnoisette\nnomade\nnombreux\nnommer\nnormatif\nnotable\nnotifier\nnotoire\nnourrir\nnouveau\nnovateur\nnovembre\nnovice\nnuage\nnuancer\nnuire\nnuisible\nnume\u0301ro\nnuptial\nnuque\nnutritif\nobe\u0301ir\nobjectif\nobliger\nobscur\nobserver\nobstacle\nobtenir\nobturer\noccasion\noccuper\noce\u0301an\noctobre\noctroyer\noctupler\noculaire\nodeur\nodorant\noffenser\nofficier\noffrir\nogive\noiseau\noisillon\nolfactif\nolivier\nombrage\nomettre\nonctueux\nonduler\none\u0301reux\nonirique\nopale\nopaque\nope\u0301rer\nopinion\nopportun\nopprimer\nopter\noptique\norageux\norange\norbite\nordonner\noreille\norgane\norgueil\norifice\nornement\norque\nortie\nosciller\nosmose\nossature\notarie\nouragan\nourson\noutil\noutrager\nouvrage\novation\noxyde\noxyge\u0300ne\nozone\npaisible\npalace\npalmare\u0300s\npalourde\npalper\npanache\npanda\npangolin\npaniquer\npanneau\npanorama\npantalon\npapaye\npapier\npapoter\npapyrus\nparadoxe\nparcelle\nparesse\nparfumer\nparler\nparole\nparrain\nparsemer\npartager\nparure\nparvenir\npassion\npaste\u0300que\npaternel\npatience\npatron\npavillon\npavoiser\npayer\npaysage\npeigne\npeintre\npelage\npe\u0301lican\npelle\npelouse\npeluche\npendule\npe\u0301ne\u0301trer\npe\u0301nible\npensif\npe\u0301nurie\npe\u0301pite\npe\u0301plum\nperdrix\nperforer\npe\u0301riode\npermuter\nperplexe\npersil\nperte\npeser\npe\u0301tale\npetit\npe\u0301trir\npeuple\npharaon\nphobie\nphoque\nphoton\nphrase\nphysique\npiano\npictural\npie\u0300ce\npierre\npieuvre\npilote\npinceau\npipette\npiquer\npirogue\npiscine\npiston\npivoter\npixel\npizza\nplacard\nplafond\nplaisir\nplaner\nplaque\nplastron\nplateau\npleurer\nplexus\npliage\nplomb\nplonger\npluie\nplumage\npochette\npoe\u0301sie\npoe\u0300te\npointe\npoirier\npoisson\npoivre\npolaire\npolicier\npollen\npolygone\npommade\npompier\nponctuel\nponde\u0301rer\nponey\nportique\nposition\nposse\u0301der\nposture\npotager\npoteau\npotion\npouce\npoulain\npoumon\npourpre\npoussin\npouvoir\nprairie\npratique\npre\u0301cieux\npre\u0301dire\npre\u0301fixe\npre\u0301lude\npre\u0301nom\npre\u0301sence\npre\u0301texte\npre\u0301voir\nprimitif\nprince\nprison\npriver\nproble\u0300me\nproce\u0301der\nprodige\nprofond\nprogre\u0300s\nproie\nprojeter\nprologue\npromener\npropre\nprospe\u0300re\nprote\u0301ger\nprouesse\nproverbe\nprudence\npruneau\npsychose\npublic\npuceron\npuiser\npulpe\npulsar\npunaise\npunitif\npupitre\npurifier\npuzzle\npyramide\nquasar\nquerelle\nquestion\nquie\u0301tude\nquitter\nquotient\nracine\nraconter\nradieux\nragondin\nraideur\nraisin\nralentir\nrallonge\nramasser\nrapide\nrasage\nratisser\nravager\nravin\nrayonner\nre\u0301actif\nre\u0301agir\nre\u0301aliser\nre\u0301animer\nrecevoir\nre\u0301citer\nre\u0301clamer\nre\u0301colter\nrecruter\nreculer\nrecycler\nre\u0301diger\nredouter\nrefaire\nre\u0301flexe\nre\u0301former\nrefrain\nrefuge\nre\u0301galien\nre\u0301gion\nre\u0301glage\nre\u0301gulier\nre\u0301ite\u0301rer\nrejeter\nrejouer\nrelatif\nrelever\nrelief\nremarque\nreme\u0300de\nremise\nremonter\nremplir\nremuer\nrenard\nrenfort\nrenifler\nrenoncer\nrentrer\nrenvoi\nreplier\nreporter\nreprise\nreptile\nrequin\nre\u0301serve\nre\u0301sineux\nre\u0301soudre\nrespect\nrester\nre\u0301sultat\nre\u0301tablir\nretenir\nre\u0301ticule\nretomber\nretracer\nre\u0301union\nre\u0301ussir\nrevanche\nrevivre\nre\u0301volte\nre\u0301vulsif\nrichesse\nrideau\nrieur\nrigide\nrigoler\nrincer\nriposter\nrisible\nrisque\nrituel\nrival\nrivie\u0300re\nrocheux\nromance\nrompre\nronce\nrondin\nroseau\nrosier\nrotatif\nrotor\nrotule\nrouge\nrouille\nrouleau\nroutine\nroyaume\nruban\nrubis\nruche\nruelle\nrugueux\nruiner\nruisseau\nruser\nrustique\nrythme\nsabler\nsaboter\nsabre\nsacoche\nsafari\nsagesse\nsaisir\nsalade\nsalive\nsalon\nsaluer\nsamedi\nsanction\nsanglier\nsarcasme\nsardine\nsaturer\nsaugrenu\nsaumon\nsauter\nsauvage\nsavant\nsavonner\nscalpel\nscandale\nsce\u0301le\u0301rat\nsce\u0301nario\nsceptre\nsche\u0301ma\nscience\nscinder\nscore\nscrutin\nsculpter\nse\u0301ance\nse\u0301cable\nse\u0301cher\nsecouer\nse\u0301cre\u0301ter\nse\u0301datif\nse\u0301duire\nseigneur\nse\u0301jour\nse\u0301lectif\nsemaine\nsembler\nsemence\nse\u0301minal\nse\u0301nateur\nsensible\nsentence\nse\u0301parer\nse\u0301quence\nserein\nsergent\nse\u0301rieux\nserrure\nse\u0301rum\nservice\nse\u0301same\nse\u0301vir\nsevrage\nsextuple\nside\u0301ral\nsie\u0300cle\nsie\u0301ger\nsiffler\nsigle\nsignal\nsilence\nsilicium\nsimple\nsince\u0300re\nsinistre\nsiphon\nsirop\nsismique\nsituer\nskier\nsocial\nsocle\nsodium\nsoigneux\nsoldat\nsoleil\nsolitude\nsoluble\nsombre\nsommeil\nsomnoler\nsonde\nsongeur\nsonnette\nsonore\nsorcier\nsortir\nsosie\nsottise\nsoucieux\nsoudure\nsouffle\nsoulever\nsoupape\nsource\nsoutirer\nsouvenir\nspacieux\nspatial\nspe\u0301cial\nsphe\u0300re\nspiral\nstable\nstation\nsternum\nstimulus\nstipuler\nstrict\nstudieux\nstupeur\nstyliste\nsublime\nsubstrat\nsubtil\nsubvenir\nsucce\u0300s\nsucre\nsuffixe\nsugge\u0301rer\nsuiveur\nsulfate\nsuperbe\nsupplier\nsurface\nsuricate\nsurmener\nsurprise\nsursaut\nsurvie\nsuspect\nsyllabe\nsymbole\nsyme\u0301trie\nsynapse\nsyntaxe\nsyste\u0300me\ntabac\ntablier\ntactile\ntailler\ntalent\ntalisman\ntalonner\ntambour\ntamiser\ntangible\ntapis\ntaquiner\ntarder\ntarif\ntartine\ntasse\ntatami\ntatouage\ntaupe\ntaureau\ntaxer\nte\u0301moin\ntemporel\ntenaille\ntendre\nteneur\ntenir\ntension\nterminer\nterne\nterrible\nte\u0301tine\ntexte\nthe\u0300me\nthe\u0301orie\nthe\u0301rapie\nthorax\ntibia\ntie\u0300de\ntimide\ntirelire\ntiroir\ntissu\ntitane\ntitre\ntituber\ntoboggan\ntole\u0301rant\ntomate\ntonique\ntonneau\ntoponyme\ntorche\ntordre\ntornade\ntorpille\ntorrent\ntorse\ntortue\ntotem\ntoucher\ntournage\ntousser\ntoxine\ntraction\ntrafic\ntragique\ntrahir\ntrain\ntrancher\ntravail\ntre\u0300fle\ntremper\ntre\u0301sor\ntreuil\ntriage\ntribunal\ntricoter\ntrilogie\ntriomphe\ntripler\ntriturer\ntrivial\ntrombone\ntronc\ntropical\ntroupeau\ntuile\ntulipe\ntumulte\ntunnel\nturbine\ntuteur\ntutoyer\ntuyau\ntympan\ntyphon\ntypique\ntyran\nubuesque\nultime\nultrason\nunanime\nunifier\nunion\nunique\nunitaire\nunivers\nuranium\nurbain\nurticant\nusage\nusine\nusuel\nusure\nutile\nutopie\nvacarme\nvaccin\nvagabond\nvague\nvaillant\nvaincre\nvaisseau\nvalable\nvalise\nvallon\nvalve\nvampire\nvanille\nvapeur\nvarier\nvaseux\nvassal\nvaste\nvecteur\nvedette\nve\u0301ge\u0301tal\nve\u0301hicule\nveinard\nve\u0301loce\nvendredi\nve\u0301ne\u0301rer\nvenger\nvenimeux\nventouse\nverdure\nve\u0301rin\nvernir\nverrou\nverser\nvertu\nveston\nve\u0301te\u0301ran\nve\u0301tuste\nvexant\nvexer\nviaduc\nviande\nvictoire\nvidange\nvide\u0301o\nvignette\nvigueur\nvilain\nvillage\nvinaigre\nviolon\nvipe\u0300re\nvirement\nvirtuose\nvirus\nvisage\nviseur\nvision\nvisqueux\nvisuel\nvital\nvitesse\nviticole\nvitrine\nvivace\nvivipare\nvocation\nvoguer\nvoile\nvoisin\nvoiture\nvolaille\nvolcan\nvoltiger\nvolume\nvorace\nvortex\nvoter\nvouloir\nvoyage\nvoyelle\nwagon\nxe\u0301non\nyacht\nze\u0300bre\nze\u0301nith\nzeste\nzoologie`.split('\\n');\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wordlist = void 0;\nexports.wordlist = `abaco\nabbaglio\nabbinato\nabete\nabisso\nabolire\nabrasivo\nabrogato\naccadere\naccenno\naccusato\nacetone\nachille\nacido\nacqua\nacre\nacrilico\nacrobata\nacuto\nadagio\naddebito\naddome\nadeguato\naderire\nadipe\nadottare\nadulare\naffabile\naffetto\naffisso\naffranto\naforisma\nafoso\nafricano\nagave\nagente\nagevole\naggancio\nagire\nagitare\nagonismo\nagricolo\nagrumeto\naguzzo\nalabarda\nalato\nalbatro\nalberato\nalbo\nalbume\nalce\nalcolico\nalettone\nalfa\nalgebra\naliante\nalibi\nalimento\nallagato\nallegro\nallievo\nallodola\nallusivo\nalmeno\nalogeno\nalpaca\nalpestre\naltalena\nalterno\nalticcio\naltrove\nalunno\nalveolo\nalzare\namalgama\namanita\namarena\nambito\nambrato\nameba\namerica\nametista\namico\nammasso\nammenda\nammirare\nammonito\namore\nampio\nampliare\namuleto\nanacardo\nanagrafe\nanalista\nanarchia\nanatra\nanca\nancella\nancora\nandare\nandrea\nanello\nangelo\nangolare\nangusto\nanima\nannegare\nannidato\nanno\nannuncio\nanonimo\nanticipo\nanzi\napatico\napertura\napode\napparire\nappetito\nappoggio\napprodo\nappunto\naprile\narabica\narachide\naragosta\naraldica\narancio\naratura\narazzo\narbitro\narchivio\nardito\narenile\nargento\nargine\narguto\naria\narmonia\narnese\narredato\narringa\narrosto\narsenico\narso\nartefice\narzillo\nasciutto\nascolto\nasepsi\nasettico\nasfalto\nasino\nasola\naspirato\naspro\nassaggio\nasse\nassoluto\nassurdo\nasta\nastenuto\nastice\nastratto\natavico\nateismo\natomico\natono\nattesa\nattivare\nattorno\nattrito\nattuale\nausilio\naustria\nautista\nautonomo\nautunno\navanzato\navere\navvenire\navviso\navvolgere\nazione\nazoto\nazzimo\nazzurro\nbabele\nbaccano\nbacino\nbaco\nbadessa\nbadilata\nbagnato\nbaita\nbalcone\nbaldo\nbalena\nballata\nbalzano\nbambino\nbandire\nbaraonda\nbarbaro\nbarca\nbaritono\nbarlume\nbarocco\nbasilico\nbasso\nbatosta\nbattuto\nbaule\nbava\nbavosa\nbecco\nbeffa\nbelgio\nbelva\nbenda\nbenevole\nbenigno\nbenzina\nbere\nberlina\nbeta\nbibita\nbici\nbidone\nbifido\nbiga\nbilancia\nbimbo\nbinocolo\nbiologo\nbipede\nbipolare\nbirbante\nbirra\nbiscotto\nbisesto\nbisnonno\nbisonte\nbisturi\nbizzarro\nblando\nblatta\nbollito\nbonifico\nbordo\nbosco\nbotanico\nbottino\nbozzolo\nbraccio\nbradipo\nbrama\nbranca\nbravura\nbretella\nbrevetto\nbrezza\nbriglia\nbrillante\nbrindare\nbroccolo\nbrodo\nbronzina\nbrullo\nbruno\nbubbone\nbuca\nbudino\nbuffone\nbuio\nbulbo\nbuono\nburlone\nburrasca\nbussola\nbusta\ncadetto\ncaduco\ncalamaro\ncalcolo\ncalesse\ncalibro\ncalmo\ncaloria\ncambusa\ncamerata\ncamicia\ncammino\ncamola\ncampale\ncanapa\ncandela\ncane\ncanino\ncanotto\ncantina\ncapace\ncapello\ncapitolo\ncapogiro\ncappero\ncapra\ncapsula\ncarapace\ncarcassa\ncardo\ncarisma\ncarovana\ncarretto\ncartolina\ncasaccio\ncascata\ncaserma\ncaso\ncassone\ncastello\ncasuale\ncatasta\ncatena\ncatrame\ncauto\ncavillo\ncedibile\ncedrata\ncefalo\ncelebre\ncellulare\ncena\ncenone\ncentesimo\nceramica\ncercare\ncerto\ncerume\ncervello\ncesoia\ncespo\nceto\nchela\nchiaro\nchicca\nchiedere\nchimera\nchina\nchirurgo\nchitarra\nciao\nciclismo\ncifrare\ncigno\ncilindro\nciottolo\ncirca\ncirrosi\ncitrico\ncittadino\nciuffo\ncivetta\ncivile\nclassico\nclinica\ncloro\ncocco\ncodardo\ncodice\ncoerente\ncognome\ncollare\ncolmato\ncolore\ncolposo\ncoltivato\ncolza\ncoma\ncometa\ncommando\ncomodo\ncomputer\ncomune\nconciso\ncondurre\nconferma\ncongelare\nconiuge\nconnesso\nconoscere\nconsumo\ncontinuo\nconvegno\ncoperto\ncopione\ncoppia\ncopricapo\ncorazza\ncordata\ncoricato\ncornice\ncorolla\ncorpo\ncorredo\ncorsia\ncortese\ncosmico\ncostante\ncottura\ncovato\ncratere\ncravatta\ncreato\ncredere\ncremoso\ncrescita\ncreta\ncriceto\ncrinale\ncrisi\ncritico\ncroce\ncronaca\ncrostata\ncruciale\ncrusca\ncucire\ncuculo\ncugino\ncullato\ncupola\ncuratore\ncursore\ncurvo\ncuscino\ncustode\ndado\ndaino\ndalmata\ndamerino\ndaniela\ndannoso\ndanzare\ndatato\ndavanti\ndavvero\ndebutto\ndecennio\ndeciso\ndeclino\ndecollo\ndecreto\ndedicato\ndefinito\ndeforme\ndegno\ndelegare\ndelfino\ndelirio\ndelta\ndemenza\ndenotato\ndentro\ndeposito\nderapata\nderivare\nderoga\ndescritto\ndeserto\ndesiderio\ndesumere\ndetersivo\ndevoto\ndiametro\ndicembre\ndiedro\ndifeso\ndiffuso\ndigerire\ndigitale\ndiluvio\ndinamico\ndinnanzi\ndipinto\ndiploma\ndipolo\ndiradare\ndire\ndirotto\ndirupo\ndisagio\ndiscreto\ndisfare\ndisgelo\ndisposto\ndistanza\ndisumano\ndito\ndivano\ndivelto\ndividere\ndivorato\ndoblone\ndocente\ndoganale\ndogma\ndolce\ndomato\ndomenica\ndominare\ndondolo\ndono\ndormire\ndote\ndottore\ndovuto\ndozzina\ndrago\ndruido\ndubbio\ndubitare\nducale\nduna\nduomo\nduplice\nduraturo\nebano\neccesso\necco\neclissi\neconomia\nedera\nedicola\nedile\neditoria\neducare\negemonia\negli\negoismo\negregio\nelaborato\nelargire\nelegante\nelencato\neletto\nelevare\nelfico\nelica\nelmo\nelsa\neluso\nemanato\nemblema\nemesso\nemiro\nemotivo\nemozione\nempirico\nemulo\nendemico\nenduro\nenergia\nenfasi\nenoteca\nentrare\nenzima\nepatite\nepilogo\nepisodio\nepocale\neppure\nequatore\nerario\nerba\nerboso\nerede\neremita\nerigere\nermetico\neroe\nerosivo\nerrante\nesagono\nesame\nesanime\nesaudire\nesca\nesempio\nesercito\nesibito\nesigente\nesistere\nesito\nesofago\nesortato\nesoso\nespanso\nespresso\nessenza\nesso\nesteso\nestimare\nestonia\nestroso\nesultare\netilico\netnico\netrusco\netto\neuclideo\neuropa\nevaso\nevidenza\nevitato\nevoluto\nevviva\nfabbrica\nfaccenda\nfachiro\nfalco\nfamiglia\nfanale\nfanfara\nfango\nfantasma\nfare\nfarfalla\nfarinoso\nfarmaco\nfascia\nfastoso\nfasullo\nfaticare\nfato\nfavoloso\nfebbre\nfecola\nfede\nfegato\nfelpa\nfeltro\nfemmina\nfendere\nfenomeno\nfermento\nferro\nfertile\nfessura\nfestivo\nfetta\nfeudo\nfiaba\nfiducia\nfifa\nfigurato\nfilo\nfinanza\nfinestra\nfinire\nfiore\nfiscale\nfisico\nfiume\nflacone\nflamenco\nflebo\nflemma\nflorido\nfluente\nfluoro\nfobico\nfocaccia\nfocoso\nfoderato\nfoglio\nfolata\nfolclore\nfolgore\nfondente\nfonetico\nfonia\nfontana\nforbito\nforchetta\nforesta\nformica\nfornaio\nforo\nfortezza\nforzare\nfosfato\nfosso\nfracasso\nfrana\nfrassino\nfratello\nfreccetta\nfrenata\nfresco\nfrigo\nfrollino\nfronde\nfrugale\nfrutta\nfucilata\nfucsia\nfuggente\nfulmine\nfulvo\nfumante\nfumetto\nfumoso\nfune\nfunzione\nfuoco\nfurbo\nfurgone\nfurore\nfuso\nfutile\ngabbiano\ngaffe\ngalateo\ngallina\ngaloppo\ngambero\ngamma\ngaranzia\ngarbo\ngarofano\ngarzone\ngasdotto\ngasolio\ngastrico\ngatto\ngaudio\ngazebo\ngazzella\ngeco\ngelatina\ngelso\ngemello\ngemmato\ngene\ngenitore\ngennaio\ngenotipo\ngergo\nghepardo\nghiaccio\nghisa\ngiallo\ngilda\nginepro\ngiocare\ngioiello\ngiorno\ngiove\ngirato\ngirone\ngittata\ngiudizio\ngiurato\ngiusto\nglobulo\nglutine\ngnomo\ngobba\ngolf\ngomito\ngommone\ngonfio\ngonna\ngoverno\ngracile\ngrado\ngrafico\ngrammo\ngrande\ngrattare\ngravoso\ngrazia\ngreca\ngregge\ngrifone\ngrigio\ngrinza\ngrotta\ngruppo\nguadagno\nguaio\nguanto\nguardare\ngufo\nguidare\nibernato\nicona\nidentico\nidillio\nidolo\nidra\nidrico\nidrogeno\nigiene\nignaro\nignorato\nilare\nilleso\nillogico\nilludere\nimballo\nimbevuto\nimbocco\nimbuto\nimmane\nimmerso\nimmolato\nimpacco\nimpeto\nimpiego\nimporto\nimpronta\ninalare\ninarcare\ninattivo\nincanto\nincendio\ninchino\nincisivo\nincluso\nincontro\nincrocio\nincubo\nindagine\nindia\nindole\ninedito\ninfatti\ninfilare\ninflitto\ningaggio\ningegno\ninglese\ningordo\ningrosso\ninnesco\ninodore\ninoltrare\ninondato\ninsano\ninsetto\ninsieme\ninsonnia\ninsulina\nintasato\nintero\nintonaco\nintuito\ninumidire\ninvalido\ninvece\ninvito\niperbole\nipnotico\nipotesi\nippica\niride\nirlanda\nironico\nirrigato\nirrorare\nisolato\nisotopo\nisterico\nistituto\nistrice\nitalia\niterare\nlabbro\nlabirinto\nlacca\nlacerato\nlacrima\nlacuna\nladdove\nlago\nlampo\nlancetta\nlanterna\nlardoso\nlarga\nlaringe\nlastra\nlatenza\nlatino\nlattuga\nlavagna\nlavoro\nlegale\nleggero\nlembo\nlentezza\nlenza\nleone\nlepre\nlesivo\nlessato\nlesto\nletterale\nleva\nlevigato\nlibero\nlido\nlievito\nlilla\nlimatura\nlimitare\nlimpido\nlineare\nlingua\nliquido\nlira\nlirica\nlisca\nlite\nlitigio\nlivrea\nlocanda\nlode\nlogica\nlombare\nlondra\nlongevo\nloquace\nlorenzo\nloto\nlotteria\nluce\nlucidato\nlumaca\nluminoso\nlungo\nlupo\nluppolo\nlusinga\nlusso\nlutto\nmacabro\nmacchina\nmacero\nmacinato\nmadama\nmagico\nmaglia\nmagnete\nmagro\nmaiolica\nmalafede\nmalgrado\nmalinteso\nmalsano\nmalto\nmalumore\nmana\nmancia\nmandorla\nmangiare\nmanifesto\nmannaro\nmanovra\nmansarda\nmantide\nmanubrio\nmappa\nmaratona\nmarcire\nmaretta\nmarmo\nmarsupio\nmaschera\nmassaia\nmastino\nmaterasso\nmatricola\nmattone\nmaturo\nmazurca\nmeandro\nmeccanico\nmecenate\nmedesimo\nmeditare\nmega\nmelassa\nmelis\nmelodia\nmeninge\nmeno\nmensola\nmercurio\nmerenda\nmerlo\nmeschino\nmese\nmessere\nmestolo\nmetallo\nmetodo\nmettere\nmiagolare\nmica\nmicelio\nmichele\nmicrobo\nmidollo\nmiele\nmigliore\nmilano\nmilite\nmimosa\nminerale\nmini\nminore\nmirino\nmirtillo\nmiscela\nmissiva\nmisto\nmisurare\nmitezza\nmitigare\nmitra\nmittente\nmnemonico\nmodello\nmodifica\nmodulo\nmogano\nmogio\nmole\nmolosso\nmonastero\nmonco\nmondina\nmonetario\nmonile\nmonotono\nmonsone\nmontato\nmonviso\nmora\nmordere\nmorsicato\nmostro\nmotivato\nmotosega\nmotto\nmovenza\nmovimento\nmozzo\nmucca\nmucosa\nmuffa\nmughetto\nmugnaio\nmulatto\nmulinello\nmultiplo\nmummia\nmunto\nmuovere\nmurale\nmusa\nmuscolo\nmusica\nmutevole\nmuto\nnababbo\nnafta\nnanometro\nnarciso\nnarice\nnarrato\nnascere\nnastrare\nnaturale\nnautica\nnaviglio\nnebulosa\nnecrosi\nnegativo\nnegozio\nnemmeno\nneofita\nneretto\nnervo\nnessuno\nnettuno\nneutrale\nneve\nnevrotico\nnicchia\nninfa\nnitido\nnobile\nnocivo\nnodo\nnome\nnomina\nnordico\nnormale\nnorvegese\nnostrano\nnotare\nnotizia\nnotturno\nnovella\nnucleo\nnulla\nnumero\nnuovo\nnutrire\nnuvola\nnuziale\noasi\nobbedire\nobbligo\nobelisco\noblio\nobolo\nobsoleto\noccasione\nocchio\noccidente\noccorrere\noccultare\nocra\noculato\nodierno\nodorare\nofferta\noffrire\noffuscato\noggetto\noggi\nognuno\nolandese\nolfatto\noliato\noliva\nologramma\noltre\nomaggio\nombelico\nombra\nomega\nomissione\nondoso\nonere\nonice\nonnivoro\nonorevole\nonta\noperato\nopinione\nopposto\noracolo\norafo\nordine\norecchino\norefice\norfano\norganico\norigine\norizzonte\norma\normeggio\nornativo\norologio\norrendo\norribile\nortensia\nortica\norzata\norzo\nosare\noscurare\nosmosi\nospedale\nospite\nossa\nossidare\nostacolo\noste\notite\notre\nottagono\nottimo\nottobre\novale\novest\novino\noviparo\novocito\novunque\novviare\nozio\npacchetto\npace\npacifico\npadella\npadrone\npaese\npaga\npagina\npalazzina\npalesare\npallido\npalo\npalude\npandoro\npannello\npaolo\npaonazzo\npaprica\nparabola\nparcella\nparere\npargolo\npari\nparlato\nparola\npartire\nparvenza\nparziale\npassivo\npasticca\npatacca\npatologia\npattume\npavone\npeccato\npedalare\npedonale\npeggio\npeloso\npenare\npendice\npenisola\npennuto\npenombra\npensare\npentola\npepe\npepita\nperbene\npercorso\nperdonato\nperforare\npergamena\nperiodo\npermesso\nperno\nperplesso\npersuaso\npertugio\npervaso\npesatore\npesista\npeso\npestifero\npetalo\npettine\npetulante\npezzo\npiacere\npianta\npiattino\npiccino\npicozza\npiega\npietra\npiffero\npigiama\npigolio\npigro\npila\npilifero\npillola\npilota\npimpante\npineta\npinna\npinolo\npioggia\npiombo\npiramide\npiretico\npirite\npirolisi\npitone\npizzico\nplacebo\nplanare\nplasma\nplatano\nplenario\npochezza\npoderoso\npodismo\npoesia\npoggiare\npolenta\npoligono\npollice\npolmonite\npolpetta\npolso\npoltrona\npolvere\npomice\npomodoro\nponte\npopoloso\nporfido\nporoso\nporpora\nporre\nportata\nposa\npositivo\npossesso\npostulato\npotassio\npotere\npranzo\nprassi\npratica\nprecluso\npredica\nprefisso\npregiato\nprelievo\npremere\nprenotare\npreparato\npresenza\npretesto\nprevalso\nprima\nprincipe\nprivato\nproblema\nprocura\nprodurre\nprofumo\nprogetto\nprolunga\npromessa\npronome\nproposta\nproroga\nproteso\nprova\nprudente\nprugna\nprurito\npsiche\npubblico\npudica\npugilato\npugno\npulce\npulito\npulsante\npuntare\npupazzo\npupilla\npuro\nquadro\nqualcosa\nquasi\nquerela\nquota\nraccolto\nraddoppio\nradicale\nradunato\nraffica\nragazzo\nragione\nragno\nramarro\nramingo\nramo\nrandagio\nrantolare\nrapato\nrapina\nrappreso\nrasatura\nraschiato\nrasente\nrassegna\nrastrello\nrata\nravveduto\nreale\nrecepire\nrecinto\nrecluta\nrecondito\nrecupero\nreddito\nredimere\nregalato\nregistro\nregola\nregresso\nrelazione\nremare\nremoto\nrenna\nreplica\nreprimere\nreputare\nresa\nresidente\nresponso\nrestauro\nrete\nretina\nretorica\nrettifica\nrevocato\nriassunto\nribadire\nribelle\nribrezzo\nricarica\nricco\nricevere\nriciclato\nricordo\nricreduto\nridicolo\nridurre\nrifasare\nriflesso\nriforma\nrifugio\nrigare\nrigettato\nrighello\nrilassato\nrilevato\nrimanere\nrimbalzo\nrimedio\nrimorchio\nrinascita\nrincaro\nrinforzo\nrinnovo\nrinomato\nrinsavito\nrintocco\nrinuncia\nrinvenire\nriparato\nripetuto\nripieno\nriportare\nripresa\nripulire\nrisata\nrischio\nriserva\nrisibile\nriso\nrispetto\nristoro\nrisultato\nrisvolto\nritardo\nritegno\nritmico\nritrovo\nriunione\nriva\nriverso\nrivincita\nrivolto\nrizoma\nroba\nrobotico\nrobusto\nroccia\nroco\nrodaggio\nrodere\nroditore\nrogito\nrollio\nromantico\nrompere\nronzio\nrosolare\nrospo\nrotante\nrotondo\nrotula\nrovescio\nrubizzo\nrubrica\nruga\nrullino\nrumine\nrumoroso\nruolo\nrupe\nrussare\nrustico\nsabato\nsabbiare\nsabotato\nsagoma\nsalasso\nsaldatura\nsalgemma\nsalivare\nsalmone\nsalone\nsaltare\nsaluto\nsalvo\nsapere\nsapido\nsaporito\nsaraceno\nsarcasmo\nsarto\nsassoso\nsatellite\nsatira\nsatollo\nsaturno\nsavana\nsavio\nsaziato\nsbadiglio\nsbalzo\nsbancato\nsbarra\nsbattere\nsbavare\nsbendare\nsbirciare\nsbloccato\nsbocciato\nsbrinare\nsbruffone\nsbuffare\nscabroso\nscadenza\nscala\nscambiare\nscandalo\nscapola\nscarso\nscatenare\nscavato\nscelto\nscenico\nscettro\nscheda\nschiena\nsciarpa\nscienza\nscindere\nscippo\nsciroppo\nscivolo\nsclerare\nscodella\nscolpito\nscomparto\nsconforto\nscoprire\nscorta\nscossone\nscozzese\nscriba\nscrollare\nscrutinio\nscuderia\nscultore\nscuola\nscuro\nscusare\nsdebitare\nsdoganare\nseccatura\nsecondo\nsedano\nseggiola\nsegnalato\nsegregato\nseguito\nselciato\nselettivo\nsella\nselvaggio\nsemaforo\nsembrare\nseme\nseminato\nsempre\nsenso\nsentire\nsepolto\nsequenza\nserata\nserbato\nsereno\nserio\nserpente\nserraglio\nservire\nsestina\nsetola\nsettimana\nsfacelo\nsfaldare\nsfamato\nsfarzoso\nsfaticato\nsfera\nsfida\nsfilato\nsfinge\nsfocato\nsfoderare\nsfogo\nsfoltire\nsforzato\nsfratto\nsfruttato\nsfuggito\nsfumare\nsfuso\nsgabello\nsgarbato\nsgonfiare\nsgorbio\nsgrassato\nsguardo\nsibilo\nsiccome\nsierra\nsigla\nsignore\nsilenzio\nsillaba\nsimbolo\nsimpatico\nsimulato\nsinfonia\nsingolo\nsinistro\nsino\nsintesi\nsinusoide\nsipario\nsisma\nsistole\nsituato\nslitta\nslogatura\nsloveno\nsmarrito\nsmemorato\nsmentito\nsmeraldo\nsmilzo\nsmontare\nsmottato\nsmussato\nsnellire\nsnervato\nsnodo\nsobbalzo\nsobrio\nsoccorso\nsociale\nsodale\nsoffitto\nsogno\nsoldato\nsolenne\nsolido\nsollazzo\nsolo\nsolubile\nsolvente\nsomatico\nsomma\nsonda\nsonetto\nsonnifero\nsopire\nsoppeso\nsopra\nsorgere\nsorpasso\nsorriso\nsorso\nsorteggio\nsorvolato\nsospiro\nsosta\nsottile\nspada\nspalla\nspargere\nspatola\nspavento\nspazzola\nspecie\nspedire\nspegnere\nspelatura\nsperanza\nspessore\nspettrale\nspezzato\nspia\nspigoloso\nspillato\nspinoso\nspirale\nsplendido\nsportivo\nsposo\nspranga\nsprecare\nspronato\nspruzzo\nspuntino\nsquillo\nsradicare\nsrotolato\nstabile\nstacco\nstaffa\nstagnare\nstampato\nstantio\nstarnuto\nstasera\nstatuto\nstelo\nsteppa\nsterzo\nstiletto\nstima\nstirpe\nstivale\nstizzoso\nstonato\nstorico\nstrappo\nstregato\nstridulo\nstrozzare\nstrutto\nstuccare\nstufo\nstupendo\nsubentro\nsuccoso\nsudore\nsuggerito\nsugo\nsultano\nsuonare\nsuperbo\nsupporto\nsurgelato\nsurrogato\nsussurro\nsutura\nsvagare\nsvedese\nsveglio\nsvelare\nsvenuto\nsvezia\nsviluppo\nsvista\nsvizzera\nsvolta\nsvuotare\ntabacco\ntabulato\ntacciare\ntaciturno\ntale\ntalismano\ntampone\ntannino\ntara\ntardivo\ntargato\ntariffa\ntarpare\ntartaruga\ntasto\ntattico\ntaverna\ntavolata\ntazza\nteca\ntecnico\ntelefono\ntemerario\ntempo\ntemuto\ntendone\ntenero\ntensione\ntentacolo\nteorema\nterme\nterrazzo\nterzetto\ntesi\ntesserato\ntestato\ntetro\ntettoia\ntifare\ntigella\ntimbro\ntinto\ntipico\ntipografo\ntiraggio\ntiro\ntitanio\ntitolo\ntitubante\ntizio\ntizzone\ntoccare\ntollerare\ntolto\ntombola\ntomo\ntonfo\ntonsilla\ntopazio\ntopologia\ntoppa\ntorba\ntornare\ntorrone\ntortora\ntoscano\ntossire\ntostatura\ntotano\ntrabocco\ntrachea\ntrafila\ntragedia\ntralcio\ntramonto\ntransito\ntrapano\ntrarre\ntrasloco\ntrattato\ntrave\ntreccia\ntremolio\ntrespolo\ntributo\ntricheco\ntrifoglio\ntrillo\ntrincea\ntrio\ntristezza\ntriturato\ntrivella\ntromba\ntrono\ntroppo\ntrottola\ntrovare\ntruccato\ntubatura\ntuffato\ntulipano\ntumulto\ntunisia\nturbare\nturchino\ntuta\ntutela\nubicato\nuccello\nuccisore\nudire\nuditivo\nuffa\nufficio\nuguale\nulisse\nultimato\numano\numile\numorismo\nuncinetto\nungere\nungherese\nunicorno\nunificato\nunisono\nunitario\nunte\nuovo\nupupa\nuragano\nurgenza\nurlo\nusanza\nusato\nuscito\nusignolo\nusuraio\nutensile\nutilizzo\nutopia\nvacante\nvaccinato\nvagabondo\nvagliato\nvalanga\nvalgo\nvalico\nvalletta\nvaloroso\nvalutare\nvalvola\nvampata\nvangare\nvanitoso\nvano\nvantaggio\nvanvera\nvapore\nvarano\nvarcato\nvariante\nvasca\nvedetta\nvedova\nveduto\nvegetale\nveicolo\nvelcro\nvelina\nvelluto\nveloce\nvenato\nvendemmia\nvento\nverace\nverbale\nvergogna\nverifica\nvero\nverruca\nverticale\nvescica\nvessillo\nvestale\nveterano\nvetrina\nvetusto\nviandante\nvibrante\nvicenda\nvichingo\nvicinanza\nvidimare\nvigilia\nvigneto\nvigore\nvile\nvillano\nvimini\nvincitore\nviola\nvipera\nvirgola\nvirologo\nvirulento\nviscoso\nvisione\nvispo\nvissuto\nvisura\nvita\nvitello\nvittima\nvivanda\nvivido\nviziare\nvoce\nvoga\nvolatile\nvolere\nvolpe\nvoragine\nvulcano\nzampogna\nzanna\nzappato\nzattera\nzavorra\nzefiro\nzelante\nzelo\nzenzero\nzerbino\nzibetto\nzinco\nzircone\nzitto\nzolla\nzotico\nzucchero\nzufolo\nzulu\nzuppa`.split('\\n');\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wordlist = void 0;\nexports.wordlist = `\u3042\u3044\u3053\u304F\u3057\u3093\n\u3042\u3044\u3055\u3064\n\u3042\u3044\u305F\u3099\n\u3042\u304A\u305D\u3099\u3089\n\u3042\u304B\u3061\u3083\u3093\n\u3042\u304D\u308B\n\u3042\u3051\u304B\u3099\u305F\n\u3042\u3051\u308B\n\u3042\u3053\u304B\u3099\u308C\u308B\n\u3042\u3055\u3044\n\u3042\u3055\u3072\n\u3042\u3057\u3042\u3068\n\u3042\u3057\u3099\u308F\u3046\n\u3042\u3059\u3099\u304B\u308B\n\u3042\u3059\u3099\u304D\n\u3042\u305D\u3075\u3099\n\u3042\u305F\u3048\u308B\n\u3042\u305F\u305F\u3081\u308B\n\u3042\u305F\u308A\u307E\u3048\n\u3042\u305F\u308B\n\u3042\u3064\u3044\n\u3042\u3064\u304B\u3046\n\u3042\u3063\u3057\u3085\u304F\n\u3042\u3064\u307E\u308A\n\u3042\u3064\u3081\u308B\n\u3042\u3066\u306A\n\u3042\u3066\u306F\u307E\u308B\n\u3042\u3072\u308B\n\u3042\u3075\u3099\u3089\n\u3042\u3075\u3099\u308B\n\u3042\u3075\u308C\u308B\n\u3042\u307E\u3044\n\u3042\u307E\u3068\u3099\n\u3042\u307E\u3084\u304B\u3059\n\u3042\u307E\u308A\n\u3042\u307F\u3082\u306E\n\u3042\u3081\u308A\u304B\n\u3042\u3084\u307E\u308B\n\u3042\u3086\u3080\n\u3042\u3089\u3044\u304F\u3099\u307E\n\u3042\u3089\u3057\n\u3042\u3089\u3059\u3057\u3099\n\u3042\u3089\u305F\u3081\u308B\n\u3042\u3089\u3086\u308B\n\u3042\u3089\u308F\u3059\n\u3042\u308A\u304B\u3099\u3068\u3046\n\u3042\u308F\u305B\u308B\n\u3042\u308F\u3066\u308B\n\u3042\u3093\u3044\n\u3042\u3093\u304B\u3099\u3044\n\u3042\u3093\u3053\n\u3042\u3093\u305B\u3099\u3093\n\u3042\u3093\u3066\u3044\n\u3042\u3093\u306A\u3044\n\u3042\u3093\u307E\u308A\n\u3044\u3044\u305F\u3099\u3059\n\u3044\u304A\u3093\n\u3044\u304B\u3099\u3044\n\u3044\u304B\u3099\u304F\n\u3044\u304D\u304A\u3044\n\u3044\u304D\u306A\u308A\n\u3044\u304D\u3082\u306E\n\u3044\u304D\u308B\n\u3044\u304F\u3057\u3099\n\u3044\u304F\u3075\u3099\u3093\n\u3044\u3051\u306F\u3099\u306A\n\u3044\u3051\u3093\n\u3044\u3053\u3046\n\u3044\u3053\u304F\n\u3044\u3053\u3064\n\u3044\u3055\u307E\u3057\u3044\n\u3044\u3055\u3093\n\u3044\u3057\u304D\n\u3044\u3057\u3099\u3085\u3046\n\u3044\u3057\u3099\u3087\u3046\n\u3044\u3057\u3099\u308F\u308B\n\u3044\u3059\u3099\u307F\n\u3044\u3059\u3099\u308C\n\u3044\u305B\u3044\n\u3044\u305B\u3048\u3072\u3099\n\u3044\u305B\u304B\u3044\n\u3044\u305B\u304D\n\u3044\u305B\u3099\u3093\n\u3044\u305D\u3046\u308D\u3046\n\u3044\u305D\u304B\u3099\u3057\u3044\n\u3044\u305F\u3099\u3044\n\u3044\u305F\u3099\u304F\n\u3044\u305F\u3059\u3099\u3089\n\u3044\u305F\u307F\n\u3044\u305F\u308A\u3042\n\u3044\u3061\u304A\u3046\n\u3044\u3061\u3057\u3099\n\u3044\u3061\u3068\u3099\n\u3044\u3061\u306F\u3099\n\u3044\u3061\u3075\u3099\n\u3044\u3061\u308A\u3085\u3046\n\u3044\u3064\u304B\n\u3044\u3063\u3057\u3085\u3093\n\u3044\u3063\u305B\u3044\n\u3044\u3063\u305D\u3046\n\u3044\u3063\u305F\u3093\n\u3044\u3063\u3061\n\u3044\u3063\u3066\u3044\n\u3044\u3063\u307B\u309A\u3046\n\u3044\u3066\u3055\u3099\n\u3044\u3066\u3093\n\u3044\u3068\u3099\u3046\n\u3044\u3068\u3053\n\u3044\u306A\u3044\n\u3044\u306A\u304B\n\u3044\u306D\u3080\u308A\n\u3044\u306E\u3061\n\u3044\u306E\u308B\n\u3044\u306F\u3064\n\u3044\u306F\u3099\u308B\n\u3044\u306F\u3093\n\u3044\u3072\u3099\u304D\n\u3044\u3072\u3093\n\u3044\u3075\u304F\n\u3044\u3078\u3093\n\u3044\u307B\u3046\n\u3044\u307F\u3093\n\u3044\u3082\u3046\u3068\n\u3044\u3082\u305F\u308C\n\u3044\u3082\u308A\n\u3044\u3084\u304B\u3099\u308B\n\u3044\u3084\u3059\n\u3044\u3088\u304B\u3093\n\u3044\u3088\u304F\n\u3044\u3089\u3044\n\u3044\u3089\u3059\u3068\n\u3044\u308A\u304F\u3099\u3061\n\u3044\u308A\u3087\u3046\n\u3044\u308C\u3044\n\u3044\u308C\u3082\u306E\n\u3044\u308C\u308B\n\u3044\u308D\u3048\u3093\u3072\u309A\u3064\n\u3044\u308F\u3044\n\u3044\u308F\u3046\n\u3044\u308F\u304B\u3093\n\u3044\u308F\u306F\u3099\n\u3044\u308F\u3086\u308B\n\u3044\u3093\u3051\u3099\u3093\u307E\u3081\n\u3044\u3093\u3055\u3064\n\u3044\u3093\u3057\u3087\u3046\n\u3044\u3093\u3088\u3046\n\u3046\u3048\u304D\n\u3046\u3048\u308B\n\u3046\u304A\u3055\u3099\n\u3046\u304B\u3099\u3044\n\u3046\u304B\u3075\u3099\n\u3046\u304B\u3078\u3099\u308B\n\u3046\u304D\u308F\n\u3046\u304F\u3089\u3044\u306A\n\u3046\u304F\u308C\u308C\n\u3046\u3051\u305F\u307E\u308F\u308B\n\u3046\u3051\u3064\u3051\n\u3046\u3051\u3068\u308B\n\u3046\u3051\u3082\u3064\n\u3046\u3051\u308B\n\u3046\u3053\u3099\u304B\u3059\n\u3046\u3053\u3099\u304F\n\u3046\u3053\u3093\n\u3046\u3055\u304D\u3099\n\u3046\u3057\u306A\u3046\n\u3046\u3057\u308D\u304B\u3099\u307F\n\u3046\u3059\u3044\n\u3046\u3059\u304D\u3099\n\u3046\u3059\u304F\u3099\u3089\u3044\n\u3046\u3059\u3081\u308B\n\u3046\u305B\u3064\n\u3046\u3061\u3042\u308F\u305B\n\u3046\u3061\u304B\u3099\u308F\n\u3046\u3061\u304D\n\u3046\u3061\u3085\u3046\n\u3046\u3063\u304B\u308A\n\u3046\u3064\u304F\u3057\u3044\n\u3046\u3063\u305F\u3048\u308B\n\u3046\u3064\u308B\n\u3046\u3068\u3099\u3093\n\u3046\u306A\u304D\u3099\n\u3046\u306A\u3057\u3099\n\u3046\u306A\u3059\u3099\u304F\n\u3046\u306A\u308B\n\u3046\u306D\u308B\n\u3046\u306E\u3046\n\u3046\u3075\u3099\u3051\u3099\n\u3046\u3075\u3099\u3053\u3099\u3048\n\u3046\u307E\u308C\u308B\n\u3046\u3081\u308B\n\u3046\u3082\u3046\n\u3046\u3084\u307E\u3046\n\u3046\u3088\u304F\n\u3046\u3089\u304B\u3099\u3048\u3059\n\u3046\u3089\u304F\u3099\u3061\n\u3046\u3089\u306A\u3044\n\u3046\u308A\u3042\u3051\u3099\n\u3046\u308A\u304D\u308C\n\u3046\u308B\u3055\u3044\n\u3046\u308C\u3057\u3044\n\u3046\u308C\u3086\u304D\n\u3046\u308C\u308B\n\u3046\u308D\u3053\n\u3046\u308F\u304D\n\u3046\u308F\u3055\n\u3046\u3093\u3053\u3046\n\u3046\u3093\u3061\u3093\n\u3046\u3093\u3066\u3093\n\u3046\u3093\u3068\u3099\u3046\n\u3048\u3044\u3048\u3093\n\u3048\u3044\u304B\u3099\n\u3048\u3044\u304D\u3087\u3046\n\u3048\u3044\u3053\u3099\n\u3048\u3044\u305B\u3044\n\u3048\u3044\u3075\u3099\u3093\n\u3048\u3044\u3088\u3046\n\u3048\u3044\u308F\n\u3048\u304A\u308A\n\u3048\u304B\u3099\u304A\n\u3048\u304B\u3099\u304F\n\u3048\u304D\u305F\u3044\n\u3048\u304F\u305B\u308B\n\u3048\u3057\u3083\u304F\n\u3048\u3059\u3066\n\u3048\u3064\u3089\u3093\n\u3048\u306E\u304F\u3099\n\u3048\u307B\u3046\u307E\u304D\n\u3048\u307B\u3093\n\u3048\u307E\u304D\n\u3048\u3082\u3057\u3099\n\u3048\u3082\u306E\n\u3048\u3089\u3044\n\u3048\u3089\u3075\u3099\n\u3048\u308A\u3042\n\u3048\u3093\u3048\u3093\n\u3048\u3093\u304B\u3044\n\u3048\u3093\u304D\u3099\n\u3048\u3093\u3051\u3099\u304D\n\u3048\u3093\u3057\u3085\u3046\n\u3048\u3093\u305B\u3099\u3064\n\u3048\u3093\u305D\u304F\n\u3048\u3093\u3061\u3087\u3046\n\u3048\u3093\u3068\u3064\n\u304A\u3044\u304B\u3051\u308B\n\u304A\u3044\u3053\u3059\n\u304A\u3044\u3057\u3044\n\u304A\u3044\u3064\u304F\n\u304A\u3046\u3048\u3093\n\u304A\u3046\u3055\u307E\n\u304A\u3046\u3057\u3099\n\u304A\u3046\u305B\u3064\n\u304A\u3046\u305F\u3044\n\u304A\u3046\u3075\u304F\n\u304A\u3046\u3078\u3099\u3044\n\u304A\u3046\u3088\u3046\n\u304A\u3048\u308B\n\u304A\u304A\u3044\n\u304A\u304A\u3046\n\u304A\u304A\u3068\u3099\u304A\u308A\n\u304A\u304A\u3084\n\u304A\u304A\u3088\u305D\n\u304A\u304B\u3048\u308A\n\u304A\u304B\u3059\u3099\n\u304A\u304B\u3099\u3080\n\u304A\u304B\u308F\u308A\n\u304A\u304D\u3099\u306A\u3046\n\u304A\u304D\u308B\n\u304A\u304F\u3055\u307E\n\u304A\u304F\u3057\u3099\u3087\u3046\n\u304A\u304F\u308A\u304B\u3099\u306A\n\u304A\u304F\u308B\n\u304A\u304F\u308C\u308B\n\u304A\u3053\u3059\n\u304A\u3053\u306A\u3046\n\u304A\u3053\u308B\n\u304A\u3055\u3048\u308B\n\u304A\u3055\u306A\u3044\n\u304A\u3055\u3081\u308B\n\u304A\u3057\u3044\u308C\n\u304A\u3057\u3048\u308B\n\u304A\u3057\u3099\u304D\u3099\n\u304A\u3057\u3099\u3055\u3093\n\u304A\u3057\u3083\u308C\n\u304A\u305D\u3089\u304F\n\u304A\u305D\u308F\u308B\n\u304A\u305F\u304B\u3099\u3044\n\u304A\u305F\u304F\n\u304A\u305F\u3099\u3084\u304B\n\u304A\u3061\u3064\u304F\n\u304A\u3063\u3068\n\u304A\u3064\u308A\n\u304A\u3066\u3099\u304B\u3051\n\u304A\u3068\u3057\u3082\u306E\n\u304A\u3068\u306A\u3057\u3044\n\u304A\u3068\u3099\u308A\n\u304A\u3068\u3099\u308D\u304B\u3059\n\u304A\u306F\u3099\u3055\u3093\n\u304A\u307E\u3044\u308A\n\u304A\u3081\u3066\u3099\u3068\u3046\n\u304A\u3082\u3044\u3066\u3099\n\u304A\u3082\u3046\n\u304A\u3082\u305F\u3044\n\u304A\u3082\u3061\u3083\n\u304A\u3084\u3064\n\u304A\u3084\u3086\u3072\u3099\n\u304A\u3088\u307B\u3099\u3059\n\u304A\u3089\u3093\u305F\u3099\n\u304A\u308D\u3059\n\u304A\u3093\u304B\u3099\u304F\n\u304A\u3093\u3051\u3044\n\u304A\u3093\u3057\u3083\n\u304A\u3093\u305B\u3093\n\u304A\u3093\u305F\u3099\u3093\n\u304A\u3093\u3061\u3085\u3046\n\u304A\u3093\u3068\u3099\u3051\u3044\n\u304B\u3042\u3064\n\u304B\u3044\u304B\u3099\n\u304B\u3099\u3044\u304D\n\u304B\u3099\u3044\u3051\u3093\n\u304B\u3099\u3044\u3053\u3046\n\u304B\u3044\u3055\u3064\n\u304B\u3044\u3057\u3083\n\u304B\u3044\u3059\u3044\u3088\u304F\n\u304B\u3044\u305B\u3099\u3093\n\u304B\u3044\u305D\u3099\u3046\u3068\u3099\n\u304B\u3044\u3064\u3046\n\u304B\u3044\u3066\u3093\n\u304B\u3044\u3068\u3046\n\u304B\u3044\u3075\u304F\n\u304B\u3099\u3044\u3078\u304D\n\u304B\u3044\u307B\u3046\n\u304B\u3044\u3088\u3046\n\u304B\u3099\u3044\u3089\u3044\n\u304B\u3044\u308F\n\u304B\u3048\u308B\n\u304B\u304A\u308A\n\u304B\u304B\u3048\u308B\n\u304B\u304B\u3099\u304F\n\u304B\u304B\u3099\u3057\n\u304B\u304B\u3099\u307F\n\u304B\u304F\u3053\u3099\n\u304B\u304F\u3068\u304F\n\u304B\u3055\u3099\u308B\n\u304B\u3099\u305D\u3099\u3046\n\u304B\u305F\u3044\n\u304B\u305F\u3061\n\u304B\u3099\u3061\u3087\u3046\n\u304B\u3099\u3063\u304D\u3085\u3046\n\u304B\u3099\u3063\u3053\u3046\n\u304B\u3099\u3063\u3055\u3093\n\u304B\u3099\u3063\u3057\u3087\u3046\n\u304B\u306A\u3055\u3099\u308F\u3057\n\u304B\u306E\u3046\n\u304B\u3099\u306F\u304F\n\u304B\u3075\u3099\u304B\n\u304B\u307B\u3046\n\u304B\u307B\u3053\u3099\n\u304B\u307E\u3046\n\u304B\u307E\u307B\u3099\u3053\n\u304B\u3081\u308C\u304A\u3093\n\u304B\u3086\u3044\n\u304B\u3088\u3046\u3072\u3099\n\u304B\u3089\u3044\n\u304B\u308B\u3044\n\u304B\u308D\u3046\n\u304B\u308F\u304F\n\u304B\u308F\u3089\n\u304B\u3099\u3093\u304B\n\u304B\u3093\u3051\u3044\n\u304B\u3093\u3053\u3046\n\u304B\u3093\u3057\u3083\n\u304B\u3093\u305D\u3046\n\u304B\u3093\u305F\u3093\n\u304B\u3093\u3061\n\u304B\u3099\u3093\u306F\u3099\u308B\n\u304D\u3042\u3044\n\u304D\u3042\u3064\n\u304D\u3044\u308D\n\u304D\u3099\u3044\u3093\n\u304D\u3046\u3044\n\u304D\u3046\u3093\n\u304D\u3048\u308B\n\u304D\u304A\u3046\n\u304D\u304A\u304F\n\u304D\u304A\u3061\n\u304D\u304A\u3093\n\u304D\u304B\u3044\n\u304D\u304B\u304F\n\u304D\u304B\u3093\u3057\u3083\n\u304D\u304D\u3066\n\u304D\u304F\u306F\u3099\u308A\n\u304D\u304F\u3089\u3051\u3099\n\u304D\u3051\u3093\u305B\u3044\n\u304D\u3053\u3046\n\u304D\u3053\u3048\u308B\n\u304D\u3053\u304F\n\u304D\u3055\u3044\n\u304D\u3055\u304F\n\u304D\u3055\u307E\n\u304D\u3055\u3089\u304D\u3099\n\u304D\u3099\u3057\u3099\u304B\u304B\u3099\u304F\n\u304D\u3099\u3057\u304D\n\u304D\u3099\u3057\u3099\u305F\u3044\u3051\u3093\n\u304D\u3099\u3057\u3099\u306B\u3063\u3066\u3044\n\u304D\u3099\u3057\u3099\u3085\u3064\u3057\u3083\n\u304D\u3059\u3046\n\u304D\u305B\u3044\n\u304D\u305B\u304D\n\u304D\u305B\u3064\n\u304D\u305D\u3046\n\u304D\u305D\u3099\u304F\n\u304D\u305D\u3099\u3093\n\u304D\u305F\u3048\u308B\n\u304D\u3061\u3087\u3046\n\u304D\u3064\u3048\u3093\n\u304D\u3099\u3063\u3061\u308A\n\u304D\u3064\u3064\u304D\n\u304D\u3064\u306D\n\u304D\u3066\u3044\n\u304D\u3068\u3099\u3046\n\u304D\u3068\u3099\u304F\n\u304D\u306A\u3044\n\u304D\u306A\u304B\u3099\n\u304D\u306A\u3053\n\u304D\u306C\u3053\u3099\u3057\n\u304D\u306D\u3093\n\u304D\u306E\u3046\n\u304D\u306E\u3057\u305F\n\u304D\u306F\u304F\n\u304D\u3072\u3099\u3057\u3044\n\u304D\u3072\u3093\n\u304D\u3075\u304F\n\u304D\u3075\u3099\u3093\n\u304D\u307B\u3099\u3046\n\u304D\u307B\u3093\n\u304D\u307E\u308B\n\u304D\u307F\u3064\n\u304D\u3080\u3059\u3099\u304B\u3057\u3044\n\u304D\u3081\u308B\n\u304D\u3082\u305F\u3099\u3081\u3057\n\u304D\u3082\u3061\n\u304D\u3082\u306E\n\u304D\u3083\u304F\n\u304D\u3084\u304F\n\u304D\u3099\u3085\u3046\u306B\u304F\n\u304D\u3088\u3046\n\u304D\u3087\u3046\u308A\u3085\u3046\n\u304D\u3089\u3044\n\u304D\u3089\u304F\n\u304D\u308A\u3093\n\u304D\u308C\u3044\n\u304D\u308C\u3064\n\u304D\u308D\u304F\n\u304D\u3099\u308D\u3093\n\u304D\u308F\u3081\u308B\n\u304D\u3099\u3093\u3044\u308D\n\u304D\u3093\u304B\u304F\u3057\u3099\n\u304D\u3093\u3057\u3099\u3087\n\u304D\u3093\u3088\u3046\u3072\u3099\n\u304F\u3099\u3042\u3044\n\u304F\u3044\u3059\u3099\n\u304F\u3046\u304B\u3093\n\u304F\u3046\u304D\n\u304F\u3046\u304F\u3099\u3093\n\u304F\u3046\u3053\u3046\n\u304F\u3099\u3046\u305B\u3044\n\u304F\u3046\u305D\u3046\n\u304F\u3099\u3046\u305F\u3089\n\u304F\u3046\u3075\u304F\n\u304F\u3046\u307B\u3099\n\u304F\u304B\u3093\n\u304F\u304D\u3087\u3046\n\u304F\u3051\u3099\u3093\n\u304F\u3099\u3053\u3046\n\u304F\u3055\u3044\n\u304F\u3055\u304D\n\u304F\u3055\u306F\u3099\u306A\n\u304F\u3055\u308B\n\u304F\u3057\u3083\u307F\n\u304F\u3057\u3087\u3046\n\u304F\u3059\u306E\u304D\n\u304F\u3059\u308A\u3086\u3072\u3099\n\u304F\u305B\u3051\u3099\n\u304F\u305B\u3093\n\u304F\u3099\u305F\u3044\u3066\u304D\n\u304F\u305F\u3099\u3055\u308B\n\u304F\u305F\u3072\u3099\u308C\u308B\n\u304F\u3061\u3053\u307F\n\u304F\u3061\u3055\u304D\n\u304F\u3064\u3057\u305F\n\u304F\u3099\u3063\u3059\u308A\n\u304F\u3064\u308D\u304F\u3099\n\u304F\u3068\u3046\u3066\u3093\n\u304F\u3068\u3099\u304F\n\u304F\u306A\u3093\n\u304F\u306D\u304F\u306D\n\u304F\u306E\u3046\n\u304F\u3075\u3046\n\u304F\u307F\u3042\u308F\u305B\n\u304F\u307F\u305F\u3066\u308B\n\u304F\u3081\u308B\n\u304F\u3084\u304F\u3057\u3087\n\u304F\u3089\u3059\n\u304F\u3089\u3078\u3099\u308B\n\u304F\u308B\u307E\n\u304F\u308C\u308B\n\u304F\u308D\u3046\n\u304F\u308F\u3057\u3044\n\u304F\u3099\u3093\u304B\u3093\n\u304F\u3099\u3093\u3057\u3087\u304F\n\u304F\u3099\u3093\u305F\u3044\n\u304F\u3099\u3093\u3066\n\u3051\u3042\u306A\n\u3051\u3044\u304B\u304F\n\u3051\u3044\u3051\u3093\n\u3051\u3044\u3053\n\u3051\u3044\u3055\u3064\n\u3051\u3099\u3044\u3057\u3099\u3085\u3064\n\u3051\u3044\u305F\u3044\n\u3051\u3099\u3044\u306E\u3046\u3057\u3099\u3093\n\u3051\u3044\u308C\u304D\n\u3051\u3044\u308D\n\u3051\u304A\u3068\u3059\n\u3051\u304A\u308A\u3082\u306E\n\u3051\u3099\u304D\u304B\n\u3051\u3099\u304D\u3051\u3099\u3093\n\u3051\u3099\u304D\u305F\u3099\u3093\n\u3051\u3099\u304D\u3061\u3093\n\u3051\u3099\u304D\u3068\u3064\n\u3051\u3099\u304D\u306F\n\u3051\u3099\u304D\u3084\u304F\n\u3051\u3099\u3053\u3046\n\u3051\u3099\u3053\u304F\u3057\u3099\u3087\u3046\n\u3051\u3099\u3055\u3099\u3044\n\u3051\u3055\u304D\n\u3051\u3099\u3055\u3099\u3093\n\u3051\u3057\u304D\n\u3051\u3057\u3053\u3099\u3080\n\u3051\u3057\u3087\u3046\n\u3051\u3099\u3059\u3068\n\u3051\u305F\u306F\u3099\n\u3051\u3061\u3083\u3063\u3075\u309A\n\u3051\u3061\u3089\u3059\n\u3051\u3064\u3042\u3064\n\u3051\u3064\u3044\n\u3051\u3064\u3048\u304D\n\u3051\u3063\u3053\u3093\n\u3051\u3064\u3057\u3099\u3087\n\u3051\u3063\u305B\u304D\n\u3051\u3063\u3066\u3044\n\u3051\u3064\u307E\u3064\n\u3051\u3099\u3064\u3088\u3046\u3072\u3099\n\u3051\u3099\u3064\u308C\u3044\n\u3051\u3064\u308D\u3093\n\u3051\u3099\u3068\u3099\u304F\n\u3051\u3068\u306F\u3099\u3059\n\u3051\u3068\u308B\n\u3051\u306A\u3051\u3099\n\u3051\u306A\u3059\n\u3051\u306A\u307F\n\u3051\u306C\u304D\n\u3051\u3099\u306D\u3064\n\u3051\u306D\u3093\n\u3051\u306F\u3044\n\u3051\u3099\u3072\u3093\n\u3051\u3075\u3099\u304B\u3044\n\u3051\u3099\u307B\u3099\u304F\n\u3051\u307E\u308A\n\u3051\u307F\u304B\u308B\n\u3051\u3080\u3057\n\u3051\u3080\u308A\n\u3051\u3082\u306E\n\u3051\u3089\u3044\n\u3051\u308D\u3051\u308D\n\u3051\u308F\u3057\u3044\n\u3051\u3093\u3044\n\u3051\u3093\u3048\u3064\n\u3051\u3093\u304A\n\u3051\u3093\u304B\n\u3051\u3099\u3093\u304D\n\u3051\u3093\u3051\u3099\u3093\n\u3051\u3093\u3053\u3046\n\u3051\u3093\u3055\u304F\n\u3051\u3093\u3057\u3085\u3046\n\u3051\u3093\u3059\u3046\n\u3051\u3099\u3093\u305D\u3046\n\u3051\u3093\u3061\u304F\n\u3051\u3093\u3066\u3044\n\u3051\u3093\u3068\u3046\n\u3051\u3093\u306A\u3044\n\u3051\u3093\u306B\u3093\n\u3051\u3099\u3093\u3075\u3099\u3064\n\u3051\u3093\u307E\n\u3051\u3093\u307F\u3093\n\u3051\u3093\u3081\u3044\n\u3051\u3093\u3089\u3093\n\u3051\u3093\u308A\n\u3053\u3042\u304F\u307E\n\u3053\u3044\u306C\n\u3053\u3044\u3072\u3099\u3068\n\u3053\u3099\u3046\u3044\n\u3053\u3046\u3048\u3093\n\u3053\u3046\u304A\u3093\n\u3053\u3046\u304B\u3093\n\u3053\u3099\u3046\u304D\u3085\u3046\n\u3053\u3099\u3046\u3051\u3044\n\u3053\u3046\u3053\u3046\n\u3053\u3046\u3055\u3044\n\u3053\u3046\u3057\u3099\n\u3053\u3046\u3059\u3044\n\u3053\u3099\u3046\u305B\u3044\n\u3053\u3046\u305D\u304F\n\u3053\u3046\u305F\u3044\n\u3053\u3046\u3061\u3083\n\u3053\u3046\u3064\u3046\n\u3053\u3046\u3066\u3044\n\u3053\u3046\u3068\u3099\u3046\n\u3053\u3046\u306A\u3044\n\u3053\u3046\u306F\u3044\n\u3053\u3099\u3046\u307B\u3046\n\u3053\u3099\u3046\u307E\u3093\n\u3053\u3046\u3082\u304F\n\u3053\u3046\u308A\u3064\n\u3053\u3048\u308B\n\u3053\u304A\u308A\n\u3053\u3099\u304B\u3044\n\u3053\u3099\u304B\u3099\u3064\n\u3053\u3099\u304B\u3093\n\u3053\u304F\u3053\u3099\n\u3053\u304F\u3055\u3044\n\u3053\u304F\u3068\u3046\n\u3053\u304F\u306A\u3044\n\u3053\u304F\u306F\u304F\n\u3053\u304F\u3099\u307E\n\u3053\u3051\u3044\n\u3053\u3051\u308B\n\u3053\u3053\u306E\u304B\n\u3053\u3053\u308D\n\u3053\u3055\u3081\n\u3053\u3057\u3064\n\u3053\u3059\u3046\n\u3053\u305B\u3044\n\u3053\u305B\u304D\n\u3053\u305B\u3099\u3093\n\u3053\u305D\u305F\u3099\u3066\n\u3053\u305F\u3044\n\u3053\u305F\u3048\u308B\n\u3053\u305F\u3064\n\u3053\u3061\u3087\u3046\n\u3053\u3063\u304B\n\u3053\u3064\u3053\u3064\n\u3053\u3064\u306F\u3099\u3093\n\u3053\u3064\u3075\u3099\n\u3053\u3066\u3044\n\u3053\u3066\u3093\n\u3053\u3068\u304B\u3099\u3089\n\u3053\u3068\u3057\n\u3053\u3068\u306F\u3099\n\u3053\u3068\u308A\n\u3053\u306A\u3053\u3099\u306A\n\u3053\u306D\u3053\u306D\n\u3053\u306E\u307E\u307E\n\u3053\u306E\u307F\n\u3053\u306E\u3088\n\u3053\u3099\u306F\u3093\n\u3053\u3072\u3064\u3057\u3099\n\u3053\u3075\u3046\n\u3053\u3075\u3093\n\u3053\u307B\u3099\u308C\u308B\n\u3053\u3099\u307E\u3042\u3075\u3099\u3089\n\u3053\u307E\u304B\u3044\n\u3053\u3099\u307E\u3059\u308A\n\u3053\u307E\u3064\u306A\n\u3053\u307E\u308B\n\u3053\u3080\u304D\u3099\u3053\n\u3053\u3082\u3057\u3099\n\u3053\u3082\u3061\n\u3053\u3082\u306E\n\u3053\u3082\u3093\n\u3053\u3084\u304F\n\u3053\u3084\u307E\n\u3053\u3086\u3046\n\u3053\u3086\u3072\u3099\n\u3053\u3088\u3044\n\u3053\u3088\u3046\n\u3053\u308A\u308B\n\u3053\u308C\u304F\u3057\u3087\u3093\n\u3053\u308D\u3063\u3051\n\u3053\u308F\u3082\u3066\n\u3053\u308F\u308C\u308B\n\u3053\u3093\u3044\u3093\n\u3053\u3093\u304B\u3044\n\u3053\u3093\u304D\n\u3053\u3093\u3057\u3085\u3046\n\u3053\u3093\u3059\u3044\n\u3053\u3093\u305F\u3099\u3066\n\u3053\u3093\u3068\u3093\n\u3053\u3093\u306A\u3093\n\u3053\u3093\u3072\u3099\u306B\n\u3053\u3093\u307B\u309A\u3093\n\u3053\u3093\u307E\u3051\n\u3053\u3093\u3084\n\u3053\u3093\u308C\u3044\n\u3053\u3093\u308F\u304F\n\u3055\u3099\u3044\u3048\u304D\n\u3055\u3044\u304B\u3044\n\u3055\u3044\u304D\u3093\n\u3055\u3099\u3044\u3051\u3099\u3093\n\u3055\u3099\u3044\u3053\n\u3055\u3044\u3057\u3087\n\u3055\u3044\u305B\u3044\n\u3055\u3099\u3044\u305F\u304F\n\u3055\u3099\u3044\u3061\u3085\u3046\n\u3055\u3044\u3066\u304D\n\u3055\u3099\u3044\u308A\u3087\u3046\n\u3055\u3046\u306A\n\u3055\u304B\u3044\u3057\n\u3055\u304B\u3099\u3059\n\u3055\u304B\u306A\n\u3055\u304B\u307F\u3061\n\u3055\u304B\u3099\u308B\n\u3055\u304D\u3099\u3087\u3046\n\u3055\u304F\u3057\n\u3055\u304F\u3072\u3093\n\u3055\u304F\u3089\n\u3055\u3053\u304F\n\u3055\u3053\u3064\n\u3055\u3059\u3099\u304B\u308B\n\u3055\u3099\u305B\u304D\n\u3055\u305F\u3093\n\u3055\u3064\u3048\u3044\n\u3055\u3099\u3064\u304A\u3093\n\u3055\u3099\u3063\u304B\n\u3055\u3099\u3064\u304B\u3099\u304F\n\u3055\u3063\u304D\u3087\u304F\n\u3055\u3099\u3063\u3057\n\u3055\u3064\u3057\u3099\u3093\n\u3055\u3099\u3063\u305D\u3046\n\u3055\u3064\u305F\u306F\u3099\n\u3055\u3064\u307E\u3044\u3082\n\u3055\u3066\u3044\n\u3055\u3068\u3044\u3082\n\u3055\u3068\u3046\n\u3055\u3068\u304A\u3084\n\u3055\u3068\u3057\n\u3055\u3068\u308B\n\u3055\u306E\u3046\n\u3055\u306F\u3099\u304F\n\u3055\u3072\u3099\u3057\u3044\n\u3055\u3078\u3099\u3064\n\u3055\u307B\u3046\n\u3055\u307B\u3068\u3099\n\u3055\u307E\u3059\n\u3055\u307F\u3057\u3044\n\u3055\u307F\u305F\u3099\u308C\n\u3055\u3080\u3051\n\u3055\u3081\u308B\n\u3055\u3084\u3048\u3093\u3068\u3099\u3046\n\u3055\u3086\u3046\n\u3055\u3088\u3046\n\u3055\u3088\u304F\n\u3055\u3089\u305F\u3099\n\u3055\u3099\u308B\u305D\u306F\u3099\n\u3055\u308F\u3084\u304B\n\u3055\u308F\u308B\n\u3055\u3093\u3044\u3093\n\u3055\u3093\u304B\n\u3055\u3093\u304D\u3083\u304F\n\u3055\u3093\u3053\u3046\n\u3055\u3093\u3055\u3044\n\u3055\u3099\u3093\u3057\u3087\n\u3055\u3093\u3059\u3046\n\u3055\u3093\u305B\u3044\n\u3055\u3093\u305D\n\u3055\u3093\u3061\n\u3055\u3093\u307E\n\u3055\u3093\u307F\n\u3055\u3093\u3089\u3093\n\u3057\u3042\u3044\n\u3057\u3042\u3051\u3099\n\u3057\u3042\u3055\u3063\u3066\n\u3057\u3042\u308F\u305B\n\u3057\u3044\u304F\n\u3057\u3044\u3093\n\u3057\u3046\u3061\n\u3057\u3048\u3044\n\u3057\u304A\u3051\n\u3057\u304B\u3044\n\u3057\u304B\u304F\n\u3057\u3099\u304B\u3093\n\u3057\u3053\u3099\u3068\n\u3057\u3059\u3046\n\u3057\u3099\u305F\u3099\u3044\n\u3057\u305F\u3046\u3051\n\u3057\u305F\u304D\u3099\n\u3057\u305F\u3066\n\u3057\u305F\u307F\n\u3057\u3061\u3087\u3046\n\u3057\u3061\u308A\u3093\n\u3057\u3063\u304B\u308A\n\u3057\u3064\u3057\u3099\n\u3057\u3064\u3082\u3093\n\u3057\u3066\u3044\n\u3057\u3066\u304D\n\u3057\u3066\u3064\n\u3057\u3099\u3066\u3093\n\u3057\u3099\u3068\u3099\u3046\n\u3057\u306A\u304D\u3099\u308C\n\u3057\u306A\u3082\u306E\n\u3057\u306A\u3093\n\u3057\u306D\u307E\n\u3057\u306D\u3093\n\u3057\u306E\u304F\u3099\n\u3057\u306E\u3075\u3099\n\u3057\u306F\u3044\n\u3057\u306F\u3099\u304B\u308A\n\u3057\u306F\u3064\n\u3057\u306F\u3089\u3044\n\u3057\u306F\u3093\n\u3057\u3072\u3087\u3046\n\u3057\u3075\u304F\n\u3057\u3099\u3075\u3099\u3093\n\u3057\u3078\u3044\n\u3057\u307B\u3046\n\u3057\u307B\u3093\n\u3057\u307E\u3046\n\u3057\u307E\u308B\n\u3057\u307F\u3093\n\u3057\u3080\u3051\u308B\n\u3057\u3099\u3080\u3057\u3087\n\u3057\u3081\u3044\n\u3057\u3081\u308B\n\u3057\u3082\u3093\n\u3057\u3083\u3044\u3093\n\u3057\u3083\u3046\u3093\n\u3057\u3083\u304A\u3093\n\u3057\u3099\u3083\u304B\u3099\u3044\u3082\n\u3057\u3084\u304F\u3057\u3087\n\u3057\u3083\u304F\u307B\u3046\n\u3057\u3083\u3051\u3093\n\u3057\u3083\u3053\n\u3057\u3083\u3055\u3099\u3044\n\u3057\u3083\u3057\u3093\n\u3057\u3083\u305B\u3093\n\u3057\u3083\u305D\u3046\n\u3057\u3083\u305F\u3044\n\u3057\u3083\u3061\u3087\u3046\n\u3057\u3083\u3063\u304D\u3093\n\u3057\u3099\u3083\u307E\n\u3057\u3083\u308A\u3093\n\u3057\u3083\u308C\u3044\n\u3057\u3099\u3086\u3046\n\u3057\u3099\u3085\u3046\u3057\u3087\n\u3057\u3085\u304F\u306F\u304F\n\u3057\u3099\u3085\u3057\u3093\n\u3057\u3085\u3063\u305B\u304D\n\u3057\u3085\u307F\n\u3057\u3085\u3089\u306F\u3099\n\u3057\u3099\u3085\u3093\u306F\u3099\u3093\n\u3057\u3087\u3046\u304B\u3044\n\u3057\u3087\u304F\u305F\u304F\n\u3057\u3087\u3063\u3051\u3093\n\u3057\u3087\u3068\u3099\u3046\n\u3057\u3087\u3082\u3064\n\u3057\u3089\u305B\u308B\n\u3057\u3089\u3078\u3099\u308B\n\u3057\u3093\u304B\n\u3057\u3093\u3053\u3046\n\u3057\u3099\u3093\u3057\u3099\u3083\n\u3057\u3093\u305B\u3044\u3057\u3099\n\u3057\u3093\u3061\u304F\n\u3057\u3093\u308A\u3093\n\u3059\u3042\u3051\u3099\n\u3059\u3042\u3057\n\u3059\u3042\u306A\n\u3059\u3099\u3042\u3093\n\u3059\u3044\u3048\u3044\n\u3059\u3044\u304B\n\u3059\u3044\u3068\u3046\n\u3059\u3099\u3044\u3075\u3099\u3093\n\u3059\u3044\u3088\u3046\u3072\u3099\n\u3059\u3046\u304B\u3099\u304F\n\u3059\u3046\u3057\u3099\u3064\n\u3059\u3046\u305B\u3093\n\u3059\u304A\u3068\u3099\u308A\n\u3059\u304D\u307E\n\u3059\u304F\u3046\n\u3059\u304F\u306A\u3044\n\u3059\u3051\u308B\n\u3059\u3053\u3099\u3044\n\u3059\u3053\u3057\n\u3059\u3099\u3055\u3093\n\u3059\u3059\u3099\u3057\u3044\n\u3059\u3059\u3080\n\u3059\u3059\u3081\u308B\n\u3059\u3063\u304B\u308A\n\u3059\u3099\u3063\u3057\u308A\n\u3059\u3099\u3063\u3068\n\u3059\u3066\u304D\n\u3059\u3066\u308B\n\u3059\u306D\u308B\n\u3059\u306E\u3053\n\u3059\u306F\u305F\u3099\n\u3059\u306F\u3099\u3089\u3057\u3044\n\u3059\u3099\u3072\u3087\u3046\n\u3059\u3099\u3075\u3099\u306C\u308C\n\u3059\u3075\u3099\u308A\n\u3059\u3075\u308C\n\u3059\u3078\u3099\u3066\n\u3059\u3078\u3099\u308B\n\u3059\u3099\u307B\u3046\n\u3059\u307B\u3099\u3093\n\u3059\u307E\u3044\n\u3059\u3081\u3057\n\u3059\u3082\u3046\n\u3059\u3084\u304D\n\u3059\u3089\u3059\u3089\n\u3059\u308B\u3081\n\u3059\u308C\u3061\u304B\u3099\u3046\n\u3059\u308D\u3063\u3068\n\u3059\u308F\u308B\n\u3059\u3093\u305B\u3099\u3093\n\u3059\u3093\u307B\u309A\u3046\n\u305B\u3042\u3075\u3099\u3089\n\u305B\u3044\u304B\u3064\n\u305B\u3044\u3051\u3099\u3093\n\u305B\u3044\u3057\u3099\n\u305B\u3044\u3088\u3046\n\u305B\u304A\u3046\n\u305B\u304B\u3044\u304B\u3093\n\u305B\u304D\u306B\u3093\n\u305B\u304D\u3080\n\u305B\u304D\u3086\n\u305B\u304D\u3089\u3093\u3046\u3093\n\u305B\u3051\u3093\n\u305B\u3053\u3046\n\u305B\u3059\u3057\u3099\n\u305B\u305F\u3044\n\u305B\u305F\u3051\n\u305B\u3063\u304B\u304F\n\u305B\u3063\u304D\u3083\u304F\n\u305B\u3099\u3063\u304F\n\u305B\u3063\u3051\u3093\n\u305B\u3063\u3053\u3064\n\u305B\u3063\u3055\u305F\u304F\u307E\n\u305B\u3064\u305D\u3099\u304F\n\u305B\u3064\u305F\u3099\u3093\n\u305B\u3064\u3066\u3099\u3093\n\u305B\u3063\u306F\u309A\u3093\n\u305B\u3064\u3072\u3099\n\u305B\u3064\u3075\u3099\u3093\n\u305B\u3064\u3081\u3044\n\u305B\u3064\u308A\u3064\n\u305B\u306A\u304B\n\u305B\u306E\u3072\u3099\n\u305B\u306F\u306F\u3099\n\u305B\u3072\u3099\u308D\n\u305B\u307B\u3099\u306D\n\u305B\u307E\u3044\n\u305B\u307E\u308B\n\u305B\u3081\u308B\n\u305B\u3082\u305F\u308C\n\u305B\u308A\u3075\n\u305B\u3099\u3093\u3042\u304F\n\u305B\u3093\u3044\n\u305B\u3093\u3048\u3044\n\u305B\u3093\u304B\n\u305B\u3093\u304D\u3087\n\u305B\u3093\u304F\n\u305B\u3093\u3051\u3099\u3093\n\u305B\u3099\u3093\u3053\u3099\n\u305B\u3093\u3055\u3044\n\u305B\u3093\u3057\u3085\n\u305B\u3093\u3059\u3044\n\u305B\u3093\u305B\u3044\n\u305B\u3093\u305D\u3099\n\u305B\u3093\u305F\u304F\n\u305B\u3093\u3061\u3087\u3046\n\u305B\u3093\u3066\u3044\n\u305B\u3093\u3068\u3046\n\u305B\u3093\u306C\u304D\n\u305B\u3093\u306D\u3093\n\u305B\u3093\u306F\u309A\u3044\n\u305B\u3099\u3093\u3075\u3099\n\u305B\u3099\u3093\u307B\u309A\u3046\n\u305B\u3093\u3080\n\u305B\u3093\u3081\u3093\u3057\u3099\u3087\n\u305B\u3093\u3082\u3093\n\u305B\u3093\u3084\u304F\n\u305B\u3093\u3086\u3046\n\u305B\u3093\u3088\u3046\n\u305B\u3099\u3093\u3089\n\u305B\u3099\u3093\u308A\u3083\u304F\n\u305B\u3093\u308C\u3044\n\u305B\u3093\u308D\n\u305D\u3042\u304F\n\u305D\u3044\u3068\u3051\u3099\u308B\n\u305D\u3044\u306D\n\u305D\u3046\u304B\u3099\u3093\u304D\u3087\u3046\n\u305D\u3046\u304D\n\u305D\u3046\u3053\u3099\n\u305D\u3046\u3057\u3093\n\u305D\u3046\u305F\u3099\u3093\n\u305D\u3046\u306A\u3093\n\u305D\u3046\u3072\u3099\n\u305D\u3046\u3081\u3093\n\u305D\u3046\u308A\n\u305D\u3048\u3082\u306E\n\u305D\u3048\u3093\n\u305D\u304B\u3099\u3044\n\u305D\u3051\u3099\u304D\n\u305D\u3053\u3046\n\u305D\u3053\u305D\u3053\n\u305D\u3055\u3099\u3044\n\u305D\u3057\u306A\n\u305D\u305B\u3044\n\u305D\u305B\u3093\n\u305D\u305D\u304F\u3099\n\u305D\u305F\u3099\u3066\u308B\n\u305D\u3064\u3046\n\u305D\u3064\u3048\u3093\n\u305D\u3063\u304B\u3093\n\u305D\u3064\u304D\u3099\u3087\u3046\n\u305D\u3063\u3051\u3064\n\u305D\u3063\u3053\u3046\n\u305D\u3063\u305B\u3093\n\u305D\u3063\u3068\n\u305D\u3068\u304B\u3099\u308F\n\u305D\u3068\u3064\u3099\u3089\n\u305D\u306A\u3048\u308B\n\u305D\u306A\u305F\n\u305D\u3075\u307B\u3099\n\u305D\u307B\u3099\u304F\n\u305D\u307B\u3099\u308D\n\u305D\u307E\u3064\n\u305D\u307E\u308B\n\u305D\u3080\u304F\n\u305D\u3080\u308A\u3048\n\u305D\u3081\u308B\n\u305D\u3082\u305D\u3082\n\u305D\u3088\u304B\u305B\u3099\n\u305D\u3089\u307E\u3081\n\u305D\u308D\u3046\n\u305D\u3093\u304B\u3044\n\u305D\u3093\u3051\u3044\n\u305D\u3093\u3055\u3099\u3044\n\u305D\u3093\u3057\u3064\n\u305D\u3093\u305D\u3099\u304F\n\u305D\u3093\u3061\u3087\u3046\n\u305D\u3099\u3093\u3072\u3099\n\u305D\u3099\u3093\u3075\u3099\u3093\n\u305D\u3093\u307F\u3093\n\u305F\u3042\u3044\n\u305F\u3044\u3044\u3093\n\u305F\u3044\u3046\u3093\n\u305F\u3044\u3048\u304D\n\u305F\u3044\u304A\u3046\n\u305F\u3099\u3044\u304B\u3099\u304F\n\u305F\u3044\u304D\n\u305F\u3044\u304F\u3099\u3046\n\u305F\u3044\u3051\u3093\n\u305F\u3044\u3053\n\u305F\u3044\u3055\u3099\u3044\n\u305F\u3099\u3044\u3057\u3099\u3087\u3046\u3075\u3099\n\u305F\u3099\u3044\u3059\u304D\n\u305F\u3044\u305B\u3064\n\u305F\u3044\u305D\u3046\n\u305F\u3099\u3044\u305F\u3044\n\u305F\u3044\u3061\u3087\u3046\n\u305F\u3044\u3066\u3044\n\u305F\u3099\u3044\u3068\u3099\u3053\u308D\n\u305F\u3044\u306A\u3044\n\u305F\u3044\u306D\u3064\n\u305F\u3044\u306E\u3046\n\u305F\u3044\u306F\u3093\n\u305F\u3099\u3044\u3072\u3087\u3046\n\u305F\u3044\u3075\u3046\n\u305F\u3044\u3078\u3093\n\u305F\u3044\u307B\n\u305F\u3044\u307E\u3064\u306F\u3099\u306A\n\u305F\u3044\u307F\u3093\u304F\u3099\n\u305F\u3044\u3080\n\u305F\u3044\u3081\u3093\n\u305F\u3044\u3084\u304D\n\u305F\u3044\u3088\u3046\n\u305F\u3044\u3089\n\u305F\u3044\u308A\u3087\u304F\n\u305F\u3044\u308B\n\u305F\u3044\u308F\u3093\n\u305F\u3046\u3048\n\u305F\u3048\u308B\n\u305F\u304A\u3059\n\u305F\u304A\u308B\n\u305F\u304A\u308C\u308B\n\u305F\u304B\u3044\n\u305F\u304B\u306D\n\u305F\u304D\u3072\u3099\n\u305F\u304F\u3055\u3093\n\u305F\u3053\u304F\n\u305F\u3053\u3084\u304D\n\u305F\u3055\u3044\n\u305F\u3057\u3055\u3099\u3093\n\u305F\u3099\u3057\u3099\u3083\u308C\n\u305F\u3059\u3051\u308B\n\u305F\u3059\u3099\u3055\u308F\u308B\n\u305F\u305D\u304B\u3099\u308C\n\u305F\u305F\u304B\u3046\n\u305F\u305F\u304F\n\u305F\u305F\u3099\u3057\u3044\n\u305F\u305F\u307F\n\u305F\u3061\u306F\u3099\u306A\n\u305F\u3099\u3063\u304B\u3044\n\u305F\u3099\u3063\u304D\u3083\u304F\n\u305F\u3099\u3063\u3053\n\u305F\u3099\u3063\u3057\u3085\u3064\n\u305F\u3099\u3063\u305F\u3044\n\u305F\u3066\u308B\n\u305F\u3068\u3048\u308B\n\u305F\u306A\u306F\u3099\u305F\n\u305F\u306B\u3093\n\u305F\u306C\u304D\n\u305F\u306E\u3057\u307F\n\u305F\u306F\u3064\n\u305F\u3075\u3099\u3093\n\u305F\u3078\u3099\u308B\n\u305F\u307B\u3099\u3046\n\u305F\u307E\u3053\u3099\n\u305F\u307E\u308B\n\u305F\u3099\u3080\u308B\n\u305F\u3081\u3044\u304D\n\u305F\u3081\u3059\n\u305F\u3081\u308B\n\u305F\u3082\u3064\n\u305F\u3084\u3059\u3044\n\u305F\u3088\u308B\n\u305F\u3089\u3059\n\u305F\u308A\u304D\u307B\u3093\u304B\u3099\u3093\n\u305F\u308A\u3087\u3046\n\u305F\u308A\u308B\n\u305F\u308B\u3068\n\u305F\u308C\u308B\n\u305F\u308C\u3093\u3068\n\u305F\u308D\u3063\u3068\n\u305F\u308F\u3080\u308C\u308B\n\u305F\u3099\u3093\u3042\u3064\n\u305F\u3093\u3044\n\u305F\u3093\u304A\u3093\n\u305F\u3093\u304B\n\u305F\u3093\u304D\n\u305F\u3093\u3051\u3093\n\u305F\u3093\u3053\u3099\n\u305F\u3093\u3055\u3093\n\u305F\u3093\u3057\u3099\u3087\u3046\u3072\u3099\n\u305F\u3099\u3093\u305B\u3044\n\u305F\u3093\u305D\u304F\n\u305F\u3093\u305F\u3044\n\u305F\u3099\u3093\u3061\n\u305F\u3093\u3066\u3044\n\u305F\u3093\u3068\u3046\n\u305F\u3099\u3093\u306A\n\u305F\u3093\u306B\u3093\n\u305F\u3099\u3093\u306D\u3064\n\u305F\u3093\u306E\u3046\n\u305F\u3093\u3072\u309A\u3093\n\u305F\u3099\u3093\u307B\u3099\u3046\n\u305F\u3093\u307E\u3064\n\u305F\u3093\u3081\u3044\n\u305F\u3099\u3093\u308C\u3064\n\u305F\u3099\u3093\u308D\n\u305F\u3099\u3093\u308F\n\u3061\u3042\u3044\n\u3061\u3042\u3093\n\u3061\u3044\u304D\n\u3061\u3044\u3055\u3044\n\u3061\u3048\u3093\n\u3061\u304B\u3044\n\u3061\u304B\u3089\n\u3061\u304D\u3085\u3046\n\u3061\u304D\u3093\n\u3061\u3051\u3044\u3059\u3099\n\u3061\u3051\u3093\n\u3061\u3053\u304F\n\u3061\u3055\u3044\n\u3061\u3057\u304D\n\u3061\u3057\u308A\u3087\u3046\n\u3061\u305B\u3044\n\u3061\u305D\u3046\n\u3061\u305F\u3044\n\u3061\u305F\u3093\n\u3061\u3061\u304A\u3084\n\u3061\u3064\u3057\u3099\u3087\n\u3061\u3066\u304D\n\u3061\u3066\u3093\n\u3061\u306C\u304D\n\u3061\u306C\u308A\n\u3061\u306E\u3046\n\u3061\u3072\u3087\u3046\n\u3061\u3078\u3044\u305B\u3093\n\u3061\u307B\u3046\n\u3061\u307E\u305F\n\u3061\u307F\u3064\n\u3061\u307F\u3068\u3099\u308D\n\u3061\u3081\u3044\u3068\u3099\n\u3061\u3083\u3093\u3053\u306A\u3078\u3099\n\u3061\u3085\u3046\u3044\n\u3061\u3086\u308A\u3087\u304F\n\u3061\u3087\u3046\u3057\n\u3061\u3087\u3055\u304F\u3051\u3093\n\u3061\u3089\u3057\n\u3061\u3089\u307F\n\u3061\u308A\u304B\u3099\u307F\n\u3061\u308A\u3087\u3046\n\u3061\u308B\u3068\u3099\n\u3061\u308F\u308F\n\u3061\u3093\u305F\u3044\n\u3061\u3093\u3082\u304F\n\u3064\u3044\u304B\n\u3064\u3044\u305F\u3061\n\u3064\u3046\u304B\n\u3064\u3046\u3057\u3099\u3087\u3046\n\u3064\u3046\u306F\u3093\n\u3064\u3046\u308F\n\u3064\u304B\u3046\n\u3064\u304B\u308C\u308B\n\u3064\u304F\u306D\n\u3064\u304F\u308B\n\u3064\u3051\u306D\n\u3064\u3051\u308B\n\u3064\u3053\u3099\u3046\n\u3064\u305F\u3048\u308B\n\u3064\u3064\u3099\u304F\n\u3064\u3064\u3057\u3099\n\u3064\u3064\u3080\n\u3064\u3068\u3081\u308B\n\u3064\u306A\u304B\u3099\u308B\n\u3064\u306A\u307F\n\u3064\u306D\u3064\u3099\u306D\n\u3064\u306E\u308B\n\u3064\u3075\u3099\u3059\n\u3064\u307E\u3089\u306A\u3044\n\u3064\u307E\u308B\n\u3064\u307F\u304D\n\u3064\u3081\u305F\u3044\n\u3064\u3082\u308A\n\u3064\u3082\u308B\n\u3064\u3088\u3044\n\u3064\u308B\u307B\u3099\n\u3064\u308B\u307F\u304F\n\u3064\u308F\u3082\u306E\n\u3064\u308F\u308A\n\u3066\u3042\u3057\n\u3066\u3042\u3066\n\u3066\u3042\u307F\n\u3066\u3044\u304A\u3093\n\u3066\u3044\u304B\n\u3066\u3044\u304D\n\u3066\u3044\u3051\u3044\n\u3066\u3044\u3053\u304F\n\u3066\u3044\u3055\u3064\n\u3066\u3044\u3057\n\u3066\u3044\u305B\u3044\n\u3066\u3044\u305F\u3044\n\u3066\u3044\u3068\u3099\n\u3066\u3044\u306D\u3044\n\u3066\u3044\u3072\u3087\u3046\n\u3066\u3044\u3078\u3093\n\u3066\u3044\u307B\u3099\u3046\n\u3066\u3046\u3061\n\u3066\u304A\u304F\u308C\n\u3066\u304D\u3068\u3046\n\u3066\u304F\u3072\u3099\n\u3066\u3099\u3053\u307B\u3099\u3053\n\u3066\u3055\u304D\u3099\u3087\u3046\n\u3066\u3055\u3051\u3099\n\u3066\u3059\u308A\n\u3066\u305D\u3046\n\u3066\u3061\u304B\u3099\u3044\n\u3066\u3061\u3087\u3046\n\u3066\u3064\u304B\u3099\u304F\n\u3066\u3064\u3064\u3099\u304D\n\u3066\u3099\u3063\u306F\u309A\n\u3066\u3064\u307B\u3099\u3046\n\u3066\u3064\u3084\n\u3066\u3099\u306C\u304B\u3048\n\u3066\u306C\u304D\n\u3066\u306C\u304F\u3099\u3044\n\u3066\u306E\u3072\u3089\n\u3066\u306F\u3044\n\u3066\u3075\u3099\u304F\u308D\n\u3066\u3075\u305F\u3099\n\u3066\u307B\u3068\u3099\u304D\n\u3066\u307B\u3093\n\u3066\u307E\u3048\n\u3066\u307E\u304D\u3059\u3099\u3057\n\u3066\u307F\u3057\u3099\u304B\n\u3066\u307F\u3084\u3051\u3099\n\u3066\u3089\u3059\n\u3066\u308C\u3072\u3099\n\u3066\u308F\u3051\n\u3066\u308F\u305F\u3057\n\u3066\u3099\u3093\u3042\u3064\n\u3066\u3093\u3044\u3093\n\u3066\u3093\u304B\u3044\n\u3066\u3093\u304D\n\u3066\u3093\u304F\u3099\n\u3066\u3093\u3051\u3093\n\u3066\u3093\u3053\u3099\u304F\n\u3066\u3093\u3055\u3044\n\u3066\u3093\u3057\n\u3066\u3093\u3059\u3046\n\u3066\u3099\u3093\u3061\n\u3066\u3093\u3066\u304D\n\u3066\u3093\u3068\u3046\n\u3066\u3093\u306A\u3044\n\u3066\u3093\u3075\u309A\u3089\n\u3066\u3093\u307B\u3099\u3046\u305F\u3099\u3044\n\u3066\u3093\u3081\u3064\n\u3066\u3093\u3089\u3093\u304B\u3044\n\u3066\u3099\u3093\u308A\u3087\u304F\n\u3066\u3099\u3093\u308F\n\u3068\u3099\u3042\u3044\n\u3068\u3044\u308C\n\u3068\u3099\u3046\u304B\u3093\n\u3068\u3046\u304D\u3085\u3046\n\u3068\u3099\u3046\u304F\u3099\n\u3068\u3046\u3057\n\u3068\u3046\u3080\u304D\u3099\n\u3068\u304A\u3044\n\u3068\u304A\u304B\n\u3068\u304A\u304F\n\u3068\u304A\u3059\n\u3068\u304A\u308B\n\u3068\u304B\u3044\n\u3068\u304B\u3059\n\u3068\u304D\u304A\u308A\n\u3068\u304D\u3068\u3099\u304D\n\u3068\u304F\u3044\n\u3068\u304F\u3057\u3085\u3046\n\u3068\u304F\u3066\u3093\n\u3068\u304F\u306B\n\u3068\u304F\u3078\u3099\u3064\n\u3068\u3051\u3044\n\u3068\u3051\u308B\n\u3068\u3053\u3084\n\u3068\u3055\u304B\n\u3068\u3057\u3087\u304B\u3093\n\u3068\u305D\u3046\n\u3068\u305F\u3093\n\u3068\u3061\u3085\u3046\n\u3068\u3063\u304D\u3085\u3046\n\u3068\u3063\u304F\u3093\n\u3068\u3064\u305B\u3099\u3093\n\u3068\u3064\u306B\u3085\u3046\n\u3068\u3068\u3099\u3051\u308B\n\u3068\u3068\u306E\u3048\u308B\n\u3068\u306A\u3044\n\u3068\u306A\u3048\u308B\n\u3068\u306A\u308A\n\u3068\u306E\u3055\u307E\n\u3068\u306F\u3099\u3059\n\u3068\u3099\u3075\u3099\u304B\u3099\u308F\n\u3068\u307B\u3046\n\u3068\u307E\u308B\n\u3068\u3081\u308B\n\u3068\u3082\u305F\u3099\u3061\n\u3068\u3082\u308B\n\u3068\u3099\u3088\u3046\u3072\u3099\n\u3068\u3089\u3048\u308B\n\u3068\u3093\u304B\u3064\n\u3068\u3099\u3093\u3075\u3099\u308A\n\u306A\u3044\u304B\u304F\n\u306A\u3044\u3053\u3046\n\u306A\u3044\u3057\u3087\n\u306A\u3044\u3059\n\u306A\u3044\u305B\u3093\n\u306A\u3044\u305D\u3046\n\u306A\u304A\u3059\n\u306A\u304B\u3099\u3044\n\u306A\u304F\u3059\n\u306A\u3051\u3099\u308B\n\u306A\u3053\u3046\u3068\u3099\n\u306A\u3055\u3051\n\u306A\u305F\u3066\u3099\u3053\u3053\n\u306A\u3063\u3068\u3046\n\u306A\u3064\u3084\u3059\u307F\n\u306A\u306A\u304A\u3057\n\u306A\u306B\u3053\u3099\u3068\n\u306A\u306B\u3082\u306E\n\u306A\u306B\u308F\n\u306A\u306E\u304B\n\u306A\u3075\u305F\u3099\n\u306A\u307E\u3044\u304D\n\u306A\u307E\u3048\n\u306A\u307E\u307F\n\u306A\u307F\u305F\u3099\n\u306A\u3081\u3089\u304B\n\u306A\u3081\u308B\n\u306A\u3084\u3080\n\u306A\u3089\u3046\n\u306A\u3089\u3072\u3099\n\u306A\u3089\u3075\u3099\n\u306A\u308C\u308B\n\u306A\u308F\u3068\u3072\u3099\n\u306A\u308F\u306F\u3099\u308A\n\u306B\u3042\u3046\n\u306B\u3044\u304B\u3099\u305F\n\u306B\u3046\u3051\n\u306B\u304A\u3044\n\u306B\u304B\u3044\n\u306B\u304B\u3099\u3066\n\u306B\u304D\u3072\u3099\n\u306B\u304F\u3057\u307F\n\u306B\u304F\u307E\u3093\n\u306B\u3051\u3099\u308B\n\u306B\u3055\u3093\u304B\u305F\u3093\u305D\n\u306B\u3057\u304D\n\u306B\u305B\u3082\u306E\n\u306B\u3061\u3057\u3099\u3087\u3046\n\u306B\u3061\u3088\u3046\u3072\u3099\n\u306B\u3063\u304B\n\u306B\u3063\u304D\n\u306B\u3063\u3051\u3044\n\u306B\u3063\u3053\u3046\n\u306B\u3063\u3055\u3093\n\u306B\u3063\u3057\u3087\u304F\n\u306B\u3063\u3059\u3046\n\u306B\u3063\u305B\u304D\n\u306B\u3063\u3066\u3044\n\u306B\u306A\u3046\n\u306B\u307B\u3093\n\u306B\u307E\u3081\n\u306B\u3082\u3064\n\u306B\u3084\u308A\n\u306B\u3085\u3046\u3044\u3093\n\u306B\u308A\u3093\u3057\u3083\n\u306B\u308F\u3068\u308A\n\u306B\u3093\u3044\n\u306B\u3093\u304B\n\u306B\u3093\u304D\n\u306B\u3093\u3051\u3099\u3093\n\u306B\u3093\u3057\u304D\n\u306B\u3093\u3059\u3099\u3046\n\u306B\u3093\u305D\u3046\n\u306B\u3093\u305F\u3044\n\u306B\u3093\u3061\n\u306B\u3093\u3066\u3044\n\u306B\u3093\u306B\u304F\n\u306B\u3093\u3075\u309A\n\u306B\u3093\u307E\u308A\n\u306B\u3093\u3080\n\u306B\u3093\u3081\u3044\n\u306B\u3093\u3088\u3046\n\u306C\u3044\u304F\u304D\u3099\n\u306C\u304B\u3059\n\u306C\u304F\u3099\u3044\u3068\u308B\n\u306C\u304F\u3099\u3046\n\u306C\u304F\u3082\u308A\n\u306C\u3059\u3080\n\u306C\u307E\u3048\u3072\u3099\n\u306C\u3081\u308A\n\u306C\u3089\u3059\n\u306C\u3093\u3061\u3083\u304F\n\u306D\u3042\u3051\u3099\n\u306D\u3044\u304D\n\u306D\u3044\u308B\n\u306D\u3044\u308D\n\u306D\u304F\u3099\u305B\n\u306D\u304F\u305F\u3044\n\u306D\u304F\u3089\n\u306D\u3053\u305B\u3099\n\u306D\u3053\u3080\n\u306D\u3055\u3051\u3099\n\u306D\u3059\u3053\u3099\u3059\n\u306D\u305D\u3078\u3099\u308B\n\u306D\u305F\u3099\u3093\n\u306D\u3064\u3044\n\u306D\u3063\u3057\u3093\n\u306D\u3064\u305D\u3099\u3046\n\u306D\u3063\u305F\u3044\u304D\u3099\u3087\n\u306D\u3075\u3099\u305D\u304F\n\u306D\u3075\u305F\u3099\n\u306D\u307B\u3099\u3046\n\u306D\u307B\u308A\u306F\u307B\u308A\n\u306D\u307E\u304D\n\u306D\u307E\u308F\u3057\n\u306D\u307F\u307F\n\u306D\u3080\u3044\n\u306D\u3080\u305F\u3044\n\u306D\u3082\u3068\n\u306D\u3089\u3046\n\u306D\u308F\u3055\u3099\n\u306D\u3093\u3044\u308A\n\u306D\u3093\u304A\u3057\n\u306D\u3093\u304B\u3093\n\u306D\u3093\u304D\u3093\n\u306D\u3093\u304F\u3099\n\u306D\u3093\u3055\u3099\n\u306D\u3093\u3057\n\u306D\u3093\u3061\u3083\u304F\n\u306D\u3093\u3068\u3099\n\u306D\u3093\u3072\u309A\n\u306D\u3093\u3075\u3099\u3064\n\u306D\u3093\u307E\u3064\n\u306D\u3093\u308A\u3087\u3046\n\u306D\u3093\u308C\u3044\n\u306E\u3044\u3059\u3099\n\u306E\u304A\u3064\u3099\u307E\n\u306E\u304B\u3099\u3059\n\u306E\u304D\u306A\u307F\n\u306E\u3053\u304D\u3099\u308A\n\u306E\u3053\u3059\n\u306E\u3053\u308B\n\u306E\u305B\u308B\n\u306E\u305D\u3099\u304F\n\u306E\u305D\u3099\u3080\n\u306E\u305F\u307E\u3046\n\u306E\u3061\u307B\u3068\u3099\n\u306E\u3063\u304F\n\u306E\u306F\u3099\u3059\n\u306E\u306F\u3089\n\u306E\u3078\u3099\u308B\n\u306E\u307B\u3099\u308B\n\u306E\u307F\u3082\u306E\n\u306E\u3084\u307E\n\u306E\u3089\u3044\u306C\n\u306E\u3089\u306D\u3053\n\u306E\u308A\u3082\u306E\n\u306E\u308A\u3086\u304D\n\u306E\u308C\u3093\n\u306E\u3093\u304D\n\u306F\u3099\u3042\u3044\n\u306F\u3042\u304F\n\u306F\u3099\u3042\u3055\u3093\n\u306F\u3099\u3044\u304B\n\u306F\u3099\u3044\u304F\n\u306F\u3044\u3051\u3093\n\u306F\u3044\u3053\u3099\n\u306F\u3044\u3057\u3093\n\u306F\u3044\u3059\u3044\n\u306F\u3044\u305B\u3093\n\u306F\u3044\u305D\u3046\n\u306F\u3044\u3061\n\u306F\u3099\u3044\u306F\u3099\u3044\n\u306F\u3044\u308C\u3064\n\u306F\u3048\u308B\n\u306F\u304A\u308B\n\u306F\u304B\u3044\n\u306F\u3099\u304B\u308A\n\u306F\u304B\u308B\n\u306F\u304F\u3057\u3085\n\u306F\u3051\u3093\n\u306F\u3053\u3075\u3099\n\u306F\u3055\u307F\n\u306F\u3055\u3093\n\u306F\u3057\u3053\u3099\n\u306F\u3099\u3057\u3087\n\u306F\u3057\u308B\n\u306F\u305B\u308B\n\u306F\u309A\u305D\u3053\u3093\n\u306F\u305D\u3093\n\u306F\u305F\u3093\n\u306F\u3061\u307F\u3064\n\u306F\u3064\u304A\u3093\n\u306F\u3063\u304B\u304F\n\u306F\u3064\u3099\u304D\n\u306F\u3063\u304D\u308A\n\u306F\u3063\u304F\u3064\n\u306F\u3063\u3051\u3093\n\u306F\u3063\u3053\u3046\n\u306F\u3063\u3055\u3093\n\u306F\u3063\u3057\u3093\n\u306F\u3063\u305F\u3064\n\u306F\u3063\u3061\u3085\u3046\n\u306F\u3063\u3066\u3093\n\u306F\u3063\u3072\u309A\u3087\u3046\n\u306F\u3063\u307B\u309A\u3046\n\u306F\u306A\u3059\n\u306F\u306A\u3072\u3099\n\u306F\u306B\u304B\u3080\n\u306F\u3075\u3099\u3089\u3057\n\u306F\u307F\u304B\u3099\u304D\n\u306F\u3080\u304B\u3046\n\u306F\u3081\u3064\n\u306F\u3084\u3044\n\u306F\u3084\u3057\n\u306F\u3089\u3046\n\u306F\u308D\u3046\u3043\u3093\n\u306F\u308F\u3044\n\u306F\u3093\u3044\n\u306F\u3093\u3048\u3044\n\u306F\u3093\u304A\u3093\n\u306F\u3093\u304B\u304F\n\u306F\u3093\u304D\u3087\u3046\n\u306F\u3099\u3093\u304F\u3099\u307F\n\u306F\u3093\u3053\n\u306F\u3093\u3057\u3083\n\u306F\u3093\u3059\u3046\n\u306F\u3093\u305F\u3099\u3093\n\u306F\u309A\u3093\u3061\n\u306F\u309A\u3093\u3064\n\u306F\u3093\u3066\u3044\n\u306F\u3093\u3068\u3057\n\u306F\u3093\u306E\u3046\n\u306F\u3093\u306F\u309A\n\u306F\u3093\u3075\u3099\u3093\n\u306F\u3093\u3078\u309A\u3093\n\u306F\u3093\u307B\u3099\u3046\u304D\n\u306F\u3093\u3081\u3044\n\u306F\u3093\u3089\u3093\n\u306F\u3093\u308D\u3093\n\u3072\u3044\u304D\n\u3072\u3046\u3093\n\u3072\u3048\u308B\n\u3072\u304B\u304F\n\u3072\u304B\u308A\n\u3072\u304B\u308B\n\u3072\u304B\u3093\n\u3072\u304F\u3044\n\u3072\u3051\u3064\n\u3072\u3053\u3046\u304D\n\u3072\u3053\u304F\n\u3072\u3055\u3044\n\u3072\u3055\u3057\u3075\u3099\u308A\n\u3072\u3055\u3093\n\u3072\u3099\u3057\u3099\u3085\u3064\u304B\u3093\n\u3072\u3057\u3087\n\u3072\u305D\u304B\n\u3072\u305D\u3080\n\u3072\u305F\u3080\u304D\n\u3072\u305F\u3099\u308A\n\u3072\u305F\u308B\n\u3072\u3064\u304D\u3099\n\u3072\u3063\u3053\u3057\n\u3072\u3063\u3057\n\u3072\u3064\u3057\u3099\u3085\u3072\u3093\n\u3072\u3063\u3059\n\u3072\u3064\u305B\u3099\u3093\n\u3072\u309A\u3063\u305F\u308A\n\u3072\u309A\u3063\u3061\u308A\n\u3072\u3064\u3088\u3046\n\u3072\u3066\u3044\n\u3072\u3068\u3053\u3099\u307F\n\u3072\u306A\u307E\u3064\u308A\n\u3072\u306A\u3093\n\u3072\u306D\u308B\n\u3072\u306F\u3093\n\u3072\u3072\u3099\u304F\n\u3072\u3072\u3087\u3046\n\u3072\u307B\u3046\n\u3072\u307E\u308F\u308A\n\u3072\u307E\u3093\n\u3072\u307F\u3064\n\u3072\u3081\u3044\n\u3072\u3081\u3057\u3099\u3057\n\u3072\u3084\u3051\n\u3072\u3084\u3059\n\u3072\u3088\u3046\n\u3072\u3099\u3087\u3046\u304D\n\u3072\u3089\u304B\u3099\u306A\n\u3072\u3089\u304F\n\u3072\u308A\u3064\n\u3072\u308A\u3087\u3046\n\u3072\u308B\u307E\n\u3072\u308B\u3084\u3059\u307F\n\u3072\u308C\u3044\n\u3072\u308D\u3044\n\u3072\u308D\u3046\n\u3072\u308D\u304D\n\u3072\u308D\u3086\u304D\n\u3072\u3093\u304B\u304F\n\u3072\u3093\u3051\u3064\n\u3072\u3093\u3053\u3093\n\u3072\u3093\u3057\u3085\n\u3072\u3093\u305D\u3046\n\u3072\u309A\u3093\u3061\n\u3072\u3093\u306F\u309A\u3093\n\u3072\u3099\u3093\u307B\u3099\u3046\n\u3075\u3042\u3093\n\u3075\u3044\u3046\u3061\n\u3075\u3046\u3051\u3044\n\u3075\u3046\u305B\u3093\n\u3075\u309A\u3046\u305F\u308D\u3046\n\u3075\u3046\u3068\u3046\n\u3075\u3046\u3075\n\u3075\u3048\u308B\n\u3075\u304A\u3093\n\u3075\u304B\u3044\n\u3075\u304D\u3093\n\u3075\u304F\u3055\u3099\u3064\n\u3075\u304F\u3075\u3099\u304F\u308D\n\u3075\u3053\u3046\n\u3075\u3055\u3044\n\u3075\u3057\u304D\u3099\n\u3075\u3057\u3099\u307F\n\u3075\u3059\u307E\n\u3075\u305B\u3044\n\u3075\u305B\u304F\u3099\n\u3075\u305D\u304F\n\u3075\u3099\u305F\u306B\u304F\n\u3075\u305F\u3093\n\u3075\u3061\u3087\u3046\n\u3075\u3064\u3046\n\u3075\u3064\u304B\n\u3075\u3063\u304B\u3064\n\u3075\u3063\u304D\n\u3075\u3063\u3053\u304F\n\u3075\u3099\u3068\u3099\u3046\n\u3075\u3068\u308B\n\u3075\u3068\u3093\n\u3075\u306E\u3046\n\u3075\u306F\u3044\n\u3075\u3072\u3087\u3046\n\u3075\u3078\u3093\n\u3075\u307E\u3093\n\u3075\u307F\u3093\n\u3075\u3081\u3064\n\u3075\u3081\u3093\n\u3075\u3088\u3046\n\u3075\u308A\u3053\n\u3075\u308A\u308B\n\u3075\u308B\u3044\n\u3075\u3093\u3044\u304D\n\u3075\u3099\u3093\u304B\u3099\u304F\n\u3075\u3099\u3093\u304F\u3099\n\u3075\u3093\u3057\u3064\n\u3075\u3099\u3093\u305B\u304D\n\u3075\u3093\u305D\u3046\n\u3075\u3099\u3093\u307B\u309A\u3046\n\u3078\u3044\u3042\u3093\n\u3078\u3044\u304A\u3093\n\u3078\u3044\u304B\u3099\u3044\n\u3078\u3044\u304D\n\u3078\u3044\u3051\u3099\u3093\n\u3078\u3044\u3053\u3046\n\u3078\u3044\u3055\n\u3078\u3044\u3057\u3083\n\u3078\u3044\u305B\u3064\n\u3078\u3044\u305D\n\u3078\u3044\u305F\u304F\n\u3078\u3044\u3066\u3093\n\u3078\u3044\u306D\u3064\n\u3078\u3044\u308F\n\u3078\u304D\u304B\u3099\n\u3078\u3053\u3080\n\u3078\u3099\u306B\u3044\u308D\n\u3078\u3099\u306B\u3057\u3087\u3046\u304B\u3099\n\u3078\u3089\u3059\n\u3078\u3093\u304B\u3093\n\u3078\u3099\u3093\u304D\u3087\u3046\n\u3078\u3099\u3093\u3053\u3099\u3057\n\u3078\u3093\u3055\u3044\n\u3078\u3093\u305F\u3044\n\u3078\u3099\u3093\u308A\n\u307B\u3042\u3093\n\u307B\u3044\u304F\n\u307B\u3099\u3046\u304D\u3099\u3087\n\u307B\u3046\u3053\u304F\n\u307B\u3046\u305D\u3046\n\u307B\u3046\u307B\u3046\n\u307B\u3046\u3082\u3093\n\u307B\u3046\u308A\u3064\n\u307B\u3048\u308B\n\u307B\u304A\u3093\n\u307B\u304B\u3093\n\u307B\u304D\u3087\u3046\n\u307B\u3099\u304D\u3093\n\u307B\u304F\u308D\n\u307B\u3051\u3064\n\u307B\u3051\u3093\n\u307B\u3053\u3046\n\u307B\u3053\u308B\n\u307B\u3057\u3044\n\u307B\u3057\u3064\n\u307B\u3057\u3085\n\u307B\u3057\u3087\u3046\n\u307B\u305B\u3044\n\u307B\u305D\u3044\n\u307B\u305D\u304F\n\u307B\u305F\u3066\n\u307B\u305F\u308B\n\u307B\u309A\u3061\u3075\u3099\u304F\u308D\n\u307B\u3063\u304D\u3087\u304F\n\u307B\u3063\u3055\n\u307B\u3063\u305F\u3093\n\u307B\u3068\u3093\u3068\u3099\n\u307B\u3081\u308B\n\u307B\u3093\u3044\n\u307B\u3093\u304D\n\u307B\u3093\u3051\n\u307B\u3093\u3057\u3064\n\u307B\u3093\u3084\u304F\n\u307E\u3044\u306B\u3061\n\u307E\u304B\u3044\n\u307E\u304B\u305B\u308B\n\u307E\u304B\u3099\u308B\n\u307E\u3051\u308B\n\u307E\u3053\u3068\n\u307E\u3055\u3064\n\u307E\u3057\u3099\u3081\n\u307E\u3059\u304F\n\u307E\u305B\u3099\u308B\n\u307E\u3064\u308A\n\u307E\u3068\u3081\n\u307E\u306A\u3075\u3099\n\u307E\u306C\u3051\n\u307E\u306D\u304F\n\u307E\u307B\u3046\n\u307E\u3082\u308B\n\u307E\u3086\u3051\u3099\n\u307E\u3088\u3046\n\u307E\u308D\u3084\u304B\n\u307E\u308F\u3059\n\u307E\u308F\u308A\n\u307E\u308F\u308B\n\u307E\u3093\u304B\u3099\n\u307E\u3093\u304D\u3064\n\u307E\u3093\u305D\u3099\u304F\n\u307E\u3093\u306A\u304B\n\u307F\u3044\u3089\n\u307F\u3046\u3061\n\u307F\u3048\u308B\n\u307F\u304B\u3099\u304F\n\u307F\u304B\u305F\n\u307F\u304B\u3093\n\u307F\u3051\u3093\n\u307F\u3053\u3093\n\u307F\u3057\u3099\u304B\u3044\n\u307F\u3059\u3044\n\u307F\u3059\u3048\u308B\n\u307F\u305B\u308B\n\u307F\u3063\u304B\n\u307F\u3064\u304B\u308B\n\u307F\u3064\u3051\u308B\n\u307F\u3066\u3044\n\u307F\u3068\u3081\u308B\n\u307F\u306A\u3068\n\u307F\u306A\u307F\u304B\u3055\u3044\n\u307F\u306D\u3089\u308B\n\u307F\u306E\u3046\n\u307F\u306E\u304B\u3099\u3059\n\u307F\u307B\u3093\n\u307F\u3082\u3068\n\u307F\u3084\u3051\u3099\n\u307F\u3089\u3044\n\u307F\u308A\u3087\u304F\n\u307F\u308F\u304F\n\u307F\u3093\u304B\n\u307F\u3093\u305D\u3099\u304F\n\u3080\u3044\u304B\n\u3080\u3048\u304D\n\u3080\u3048\u3093\n\u3080\u304B\u3044\n\u3080\u304B\u3046\n\u3080\u304B\u3048\n\u3080\u304B\u3057\n\u3080\u304D\u3099\u3061\u3083\n\u3080\u3051\u308B\n\u3080\u3051\u3099\u3093\n\u3080\u3055\u307B\u3099\u308B\n\u3080\u3057\u3042\u3064\u3044\n\u3080\u3057\u306F\u3099\n\u3080\u3057\u3099\u3085\u3093\n\u3080\u3057\u308D\n\u3080\u3059\u3046\n\u3080\u3059\u3053\n\u3080\u3059\u3075\u3099\n\u3080\u3059\u3081\n\u3080\u305B\u308B\n\u3080\u305B\u3093\n\u3080\u3061\u3085\u3046\n\u3080\u306A\u3057\u3044\n\u3080\u306E\u3046\n\u3080\u3084\u307F\n\u3080\u3088\u3046\n\u3080\u3089\u3055\u304D\n\u3080\u308A\u3087\u3046\n\u3080\u308D\u3093\n\u3081\u3044\u3042\u3093\n\u3081\u3044\u3046\u3093\n\u3081\u3044\u3048\u3093\n\u3081\u3044\u304B\u304F\n\u3081\u3044\u304D\u3087\u304F\n\u3081\u3044\u3055\u3044\n\u3081\u3044\u3057\n\u3081\u3044\u305D\u3046\n\u3081\u3044\u3075\u3099\u3064\n\u3081\u3044\u308C\u3044\n\u3081\u3044\u308F\u304F\n\u3081\u304F\u3099\u307E\u308C\u308B\n\u3081\u3055\u3099\u3059\n\u3081\u3057\u305F\n\u3081\u3059\u3099\u3089\u3057\u3044\n\u3081\u305F\u3099\u3064\n\u3081\u307E\u3044\n\u3081\u3084\u3059\n\u3081\u3093\u304D\u3087\n\u3081\u3093\u305B\u304D\n\u3081\u3093\u3068\u3099\u3046\n\u3082\u3046\u3057\u3042\u3051\u3099\u308B\n\u3082\u3046\u3068\u3099\u3046\u3051\u3093\n\u3082\u3048\u308B\n\u3082\u304F\u3057\n\u3082\u304F\u3066\u304D\n\u3082\u304F\u3088\u3046\u3072\u3099\n\u3082\u3061\u308D\u3093\n\u3082\u3068\u3099\u308B\n\u3082\u3089\u3046\n\u3082\u3093\u304F\n\u3082\u3093\u305F\u3099\u3044\n\u3084\u304A\u3084\n\u3084\u3051\u308B\n\u3084\u3055\u3044\n\u3084\u3055\u3057\u3044\n\u3084\u3059\u3044\n\u3084\u3059\u305F\u308D\u3046\n\u3084\u3059\u307F\n\u3084\u305B\u308B\n\u3084\u305D\u3046\n\u3084\u305F\u3044\n\u3084\u3061\u3093\n\u3084\u3063\u3068\n\u3084\u3063\u306F\u309A\u308A\n\u3084\u3075\u3099\u308B\n\u3084\u3081\u308B\n\u3084\u3084\u3053\u3057\u3044\n\u3084\u3088\u3044\n\u3084\u308F\u3089\u304B\u3044\n\u3086\u3046\u304D\n\u3086\u3046\u3072\u3099\u3093\u304D\u3087\u304F\n\u3086\u3046\u3078\u3099\n\u3086\u3046\u3081\u3044\n\u3086\u3051\u3064\n\u3086\u3057\u3085\u3064\n\u3086\u305B\u3093\n\u3086\u305D\u3046\n\u3086\u305F\u304B\n\u3086\u3061\u3083\u304F\n\u3086\u3066\u3099\u308B\n\u3086\u306B\u3085\u3046\n\u3086\u3072\u3099\u308F\n\u3086\u3089\u3044\n\u3086\u308C\u308B\n\u3088\u3046\u3044\n\u3088\u3046\u304B\n\u3088\u3046\u304D\u3085\u3046\n\u3088\u3046\u3057\u3099\n\u3088\u3046\u3059\n\u3088\u3046\u3061\u3048\u3093\n\u3088\u304B\u305B\u3099\n\u3088\u304B\u3093\n\u3088\u304D\u3093\n\u3088\u304F\u305B\u3044\n\u3088\u304F\u307B\u3099\u3046\n\u3088\u3051\u3044\n\u3088\u3053\u3099\u308C\u308B\n\u3088\u3055\u3093\n\u3088\u3057\u3085\u3046\n\u3088\u305D\u3046\n\u3088\u305D\u304F\n\u3088\u3063\u304B\n\u3088\u3066\u3044\n\u3088\u3068\u3099\u304B\u3099\u308F\u304F\n\u3088\u306D\u3064\n\u3088\u3084\u304F\n\u3088\u3086\u3046\n\u3088\u308D\u3053\u3075\u3099\n\u3088\u308D\u3057\u3044\n\u3089\u3044\u3046\n\u3089\u304F\u304B\u3099\u304D\n\u3089\u304F\u3053\u3099\n\u3089\u304F\u3055\u3064\n\u3089\u304F\u305F\u3099\n\u3089\u3057\u3093\u306F\u3099\u3093\n\u3089\u305B\u3093\n\u3089\u305D\u3099\u304F\n\u3089\u305F\u3044\n\u3089\u3063\u304B\n\u3089\u308C\u3064\n\u308A\u3048\u304D\n\u308A\u304B\u3044\n\u308A\u304D\u3055\u304F\n\u308A\u304D\u305B\u3064\n\u308A\u304F\u304F\u3099\u3093\n\u308A\u304F\u3064\n\u308A\u3051\u3093\n\u308A\u3053\u3046\n\u308A\u305B\u3044\n\u308A\u305D\u3046\n\u308A\u305D\u304F\n\u308A\u3066\u3093\n\u308A\u306D\u3093\n\u308A\u3086\u3046\n\u308A\u3085\u3046\u304B\u3099\u304F\n\u308A\u3088\u3046\n\u308A\u3087\u3046\u308A\n\u308A\u3087\u304B\u3093\n\u308A\u3087\u304F\u3061\u3083\n\u308A\u3087\u3053\u3046\n\u308A\u308A\u304F\n\u308A\u308C\u304D\n\u308A\u308D\u3093\n\u308A\u3093\u3053\u3099\n\u308B\u3044\u3051\u3044\n\u308B\u3044\u3055\u3044\n\u308B\u3044\u3057\u3099\n\u308B\u3044\u305B\u304D\n\u308B\u3059\u306F\u3099\u3093\n\u308B\u308A\u304B\u3099\u308F\u3089\n\u308C\u3044\u304B\u3093\n\u308C\u3044\u304D\u3099\n\u308C\u3044\u305B\u3044\n\u308C\u3044\u305D\u3099\u3046\u3053\n\u308C\u3044\u3068\u3046\n\u308C\u3044\u307B\u3099\u3046\n\u308C\u304D\u3057\n\u308C\u304D\u305F\u3099\u3044\n\u308C\u3093\u3042\u3044\n\u308C\u3093\u3051\u3044\n\u308C\u3093\u3053\u3093\n\u308C\u3093\u3055\u3044\n\u308C\u3093\u3057\u3085\u3046\n\u308C\u3093\u305D\u3099\u304F\n\u308C\u3093\u3089\u304F\n\u308D\u3046\u304B\n\u308D\u3046\u3053\u3099\n\u308D\u3046\u3057\u3099\u3093\n\u308D\u3046\u305D\u304F\n\u308D\u304F\u304B\u3099\n\u308D\u3053\u3064\n\u308D\u3057\u3099\u3046\u3089\n\u308D\u3057\u3085\u3064\n\u308D\u305B\u3093\n\u308D\u3066\u3093\n\u308D\u3081\u3093\n\u308D\u308C\u3064\n\u308D\u3093\u304D\u3099\n\u308D\u3093\u306F\u309A\n\u308D\u3093\u3075\u3099\u3093\n\u308D\u3093\u308A\n\u308F\u304B\u3059\n\u308F\u304B\u3081\n\u308F\u304B\u3084\u307E\n\u308F\u304B\u308C\u308B\n\u308F\u3057\u3064\n\u308F\u3057\u3099\u307E\u3057\n\u308F\u3059\u308C\u3082\u306E\n\u308F\u3089\u3046\n\u308F\u308C\u308B`.split('\\n');\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wordlist = void 0;\nexports.wordlist = `\u1100\u1161\u1100\u1167\u11A8\n\u1100\u1161\u1101\u1173\u11B7\n\u1100\u1161\u1102\u1161\u11AB\n\u1100\u1161\u1102\u1173\u11BC\n\u1100\u1161\u1103\u1173\u11A8\n\u1100\u1161\u1105\u1173\u110E\u1175\u11B7\n\u1100\u1161\u1106\u116E\u11B7\n\u1100\u1161\u1107\u1161\u11BC\n\u1100\u1161\u1109\u1161\u11BC\n\u1100\u1161\u1109\u1173\u11B7\n\u1100\u1161\u110B\u116E\u11AB\u1103\u1166\n\u1100\u1161\u110B\u1173\u11AF\n\u1100\u1161\u110B\u1175\u1103\u1173\n\u1100\u1161\u110B\u1175\u11B8\n\u1100\u1161\u110C\u1161\u11BC\n\u1100\u1161\u110C\u1165\u11BC\n\u1100\u1161\u110C\u1169\u11A8\n\u1100\u1161\u110C\u116E\u11A8\n\u1100\u1161\u11A8\u110B\u1169\n\u1100\u1161\u11A8\u110C\u1161\n\u1100\u1161\u11AB\u1100\u1167\u11A8\n\u1100\u1161\u11AB\u1107\u116E\n\u1100\u1161\u11AB\u1109\u1165\u11B8\n\u1100\u1161\u11AB\u110C\u1161\u11BC\n\u1100\u1161\u11AB\u110C\u1165\u11B8\n\u1100\u1161\u11AB\u1111\u1161\u11AB\n\u1100\u1161\u11AF\u1103\u1173\u11BC\n\u1100\u1161\u11AF\u1107\u1175\n\u1100\u1161\u11AF\u1109\u1162\u11A8\n\u1100\u1161\u11AF\u110C\u1173\u11BC\n\u1100\u1161\u11B7\u1100\u1161\u11A8\n\u1100\u1161\u11B7\u1100\u1175\n\u1100\u1161\u11B7\u1109\u1169\n\u1100\u1161\u11B7\u1109\u116E\u1109\u1165\u11BC\n\u1100\u1161\u11B7\u110C\u1161\n\u1100\u1161\u11B7\u110C\u1165\u11BC\n\u1100\u1161\u11B8\u110C\u1161\u1100\u1175\n\u1100\u1161\u11BC\u1102\u1161\u11B7\n\u1100\u1161\u11BC\u1103\u1161\u11BC\n\u1100\u1161\u11BC\u1103\u1169\n\u1100\u1161\u11BC\u1105\u1167\u11A8\u1112\u1175\n\u1100\u1161\u11BC\u1107\u1167\u11AB\n\u1100\u1161\u11BC\u1107\u116E\u11A8\n\u1100\u1161\u11BC\u1109\u1161\n\u1100\u1161\u11BC\u1109\u116E\u1105\u1163\u11BC\n\u1100\u1161\u11BC\u110B\u1161\u110C\u1175\n\u1100\u1161\u11BC\u110B\u116F\u11AB\u1103\u1169\n\u1100\u1161\u11BC\u110B\u1174\n\u1100\u1161\u11BC\u110C\u1166\n\u1100\u1161\u11BC\u110C\u1169\n\u1100\u1161\u11C0\u110B\u1175\n\u1100\u1162\u1100\u116E\u1105\u1175\n\u1100\u1162\u1102\u1161\u1105\u1175\n\u1100\u1162\u1107\u1161\u11BC\n\u1100\u1162\u1107\u1167\u11AF\n\u1100\u1162\u1109\u1165\u11AB\n\u1100\u1162\u1109\u1165\u11BC\n\u1100\u1162\u110B\u1175\u11AB\n\u1100\u1162\u11A8\u1100\u116A\u11AB\u110C\u1165\u11A8\n\u1100\u1165\u1109\u1175\u11AF\n\u1100\u1165\u110B\u1162\u11A8\n\u1100\u1165\u110B\u116E\u11AF\n\u1100\u1165\u110C\u1175\u11BA\n\u1100\u1165\u1111\u116E\u11B7\n\u1100\u1165\u11A8\u110C\u1165\u11BC\n\u1100\u1165\u11AB\u1100\u1161\u11BC\n\u1100\u1165\u11AB\u1106\u116E\u11AF\n\u1100\u1165\u11AB\u1109\u1165\u11AF\n\u1100\u1165\u11AB\u110C\u1169\n\u1100\u1165\u11AB\u110E\u116E\u11A8\n\u1100\u1165\u11AF\u110B\u1173\u11B7\n\u1100\u1165\u11B7\u1109\u1161\n\u1100\u1165\u11B7\u1110\u1169\n\u1100\u1166\u1109\u1175\u1111\u1161\u11AB\n\u1100\u1166\u110B\u1175\u11B7\n\u1100\u1167\u110B\u116E\u11AF\n\u1100\u1167\u11AB\u1112\u1162\n\u1100\u1167\u11AF\u1100\u116A\n\u1100\u1167\u11AF\u1100\u116E\u11A8\n\u1100\u1167\u11AF\u1105\u1169\u11AB\n\u1100\u1167\u11AF\u1109\u1165\u11A8\n\u1100\u1167\u11AF\u1109\u1173\u11BC\n\u1100\u1167\u11AF\u1109\u1175\u11B7\n\u1100\u1167\u11AF\u110C\u1165\u11BC\n\u1100\u1167\u11AF\u1112\u1169\u11AB\n\u1100\u1167\u11BC\u1100\u1168\n\u1100\u1167\u11BC\u1100\u1169\n\u1100\u1167\u11BC\u1100\u1175\n\u1100\u1167\u11BC\u1105\u1167\u11A8\n\u1100\u1167\u11BC\u1107\u1169\u11A8\u1100\u116E\u11BC\n\u1100\u1167\u11BC\u1107\u1175\n\u1100\u1167\u11BC\u1109\u1161\u11BC\u1103\u1169\n\u1100\u1167\u11BC\u110B\u1167\u11BC\n\u1100\u1167\u11BC\u110B\u116E\n\u1100\u1167\u11BC\u110C\u1162\u11BC\n\u1100\u1167\u11BC\u110C\u1166\n\u1100\u1167\u11BC\u110C\u116E\n\u1100\u1167\u11BC\u110E\u1161\u11AF\n\u1100\u1167\u11BC\u110E\u1175\n\u1100\u1167\u11BC\u1112\u1163\u11BC\n\u1100\u1167\u11BC\u1112\u1165\u11B7\n\u1100\u1168\u1100\u1169\u11A8\n\u1100\u1168\u1103\u1161\u11AB\n\u1100\u1168\u1105\u1161\u11AB\n\u1100\u1168\u1109\u1161\u11AB\n\u1100\u1168\u1109\u1169\u11A8\n\u1100\u1168\u110B\u1163\u11A8\n\u1100\u1168\u110C\u1165\u11AF\n\u1100\u1168\u110E\u1173\u11BC\n\u1100\u1168\u1112\u116C\u11A8\n\u1100\u1169\u1100\u1162\u11A8\n\u1100\u1169\u1100\u116E\u1105\u1167\n\u1100\u1169\u1100\u116E\u11BC\n\u1100\u1169\u1100\u1173\u11B8\n\u1100\u1169\u1103\u1173\u11BC\u1112\u1161\u11A8\u1109\u1162\u11BC\n\u1100\u1169\u1106\u116E\u1109\u1175\u11AB\n\u1100\u1169\u1106\u1175\u11AB\n\u1100\u1169\u110B\u1163\u11BC\u110B\u1175\n\u1100\u1169\u110C\u1161\u11BC\n\u1100\u1169\u110C\u1165\u11AB\n\u1100\u1169\u110C\u1175\u11B8\n\u1100\u1169\u110E\u116E\u11BA\u1100\u1161\u1105\u116E\n\u1100\u1169\u1110\u1169\u11BC\n\u1100\u1169\u1112\u1163\u11BC\n\u1100\u1169\u11A8\u1109\u1175\u11A8\n\u1100\u1169\u11AF\u1106\u1169\u11A8\n\u1100\u1169\u11AF\u110D\u1161\u1100\u1175\n\u1100\u1169\u11AF\u1111\u1173\n\u1100\u1169\u11BC\u1100\u1161\u11AB\n\u1100\u1169\u11BC\u1100\u1162\n\u1100\u1169\u11BC\u1100\u1167\u11A8\n\u1100\u1169\u11BC\u1100\u116E\u11AB\n\u1100\u1169\u11BC\u1100\u1173\u11B8\n\u1100\u1169\u11BC\u1100\u1175\n\u1100\u1169\u11BC\u1103\u1169\u11BC\n\u1100\u1169\u11BC\u1106\u116E\u110B\u116F\u11AB\n\u1100\u1169\u11BC\u1107\u116E\n\u1100\u1169\u11BC\u1109\u1161\n\u1100\u1169\u11BC\u1109\u1175\u11A8\n\u1100\u1169\u11BC\u110B\u1165\u11B8\n\u1100\u1169\u11BC\u110B\u1167\u11AB\n\u1100\u1169\u11BC\u110B\u116F\u11AB\n\u1100\u1169\u11BC\u110C\u1161\u11BC\n\u1100\u1169\u11BC\u110D\u1161\n\u1100\u1169\u11BC\u110E\u1162\u11A8\n\u1100\u1169\u11BC\u1110\u1169\u11BC\n\u1100\u1169\u11BC\u1111\u1169\n\u1100\u1169\u11BC\u1112\u1161\u11BC\n\u1100\u1169\u11BC\u1112\u1172\u110B\u1175\u11AF\n\u1100\u116A\u1106\u1169\u11A8\n\u1100\u116A\u110B\u1175\u11AF\n\u1100\u116A\u110C\u1161\u11BC\n\u1100\u116A\u110C\u1165\u11BC\n\u1100\u116A\u1112\u1161\u11A8\n\u1100\u116A\u11AB\u1100\u1162\u11A8\n\u1100\u116A\u11AB\u1100\u1168\n\u1100\u116A\u11AB\u1100\u116A\u11BC\n\u1100\u116A\u11AB\u1102\u1167\u11B7\n\u1100\u116A\u11AB\u1105\u1161\u11B7\n\u1100\u116A\u11AB\u1105\u1167\u11AB\n\u1100\u116A\u11AB\u1105\u1175\n\u1100\u116A\u11AB\u1109\u1173\u11B8\n\u1100\u116A\u11AB\u1109\u1175\u11B7\n\u1100\u116A\u11AB\u110C\u1165\u11B7\n\u1100\u116A\u11AB\u110E\u1161\u11AF\n\u1100\u116A\u11BC\u1100\u1167\u11BC\n\u1100\u116A\u11BC\u1100\u1169\n\u1100\u116A\u11BC\u110C\u1161\u11BC\n\u1100\u116A\u11BC\u110C\u116E\n\u1100\u116C\u1105\u1169\u110B\u116E\u11B7\n\u1100\u116C\u11BC\u110C\u1161\u11BC\u1112\u1175\n\u1100\u116D\u1100\u116A\u1109\u1165\n\u1100\u116D\u1106\u116E\u11AB\n\u1100\u116D\u1107\u1169\u11A8\n\u1100\u116D\u1109\u1175\u11AF\n\u1100\u116D\u110B\u1163\u11BC\n\u1100\u116D\u110B\u1172\u11A8\n\u1100\u116D\u110C\u1161\u11BC\n\u1100\u116D\u110C\u1175\u11A8\n\u1100\u116D\u1110\u1169\u11BC\n\u1100\u116D\u1112\u116A\u11AB\n\u1100\u116D\u1112\u116E\u11AB\n\u1100\u116E\u1100\u1167\u11BC\n\u1100\u116E\u1105\u1173\u11B7\n\u1100\u116E\u1106\u1165\u11BC\n\u1100\u116E\u1107\u1167\u11AF\n\u1100\u116E\u1107\u116E\u11AB\n\u1100\u116E\u1109\u1165\u11A8\n\u1100\u116E\u1109\u1165\u11BC\n\u1100\u116E\u1109\u1169\u11A8\n\u1100\u116E\u110B\u1167\u11A8\n\u1100\u116E\u110B\u1175\u11B8\n\u1100\u116E\u110E\u1165\u11BC\n\u1100\u116E\u110E\u1166\u110C\u1165\u11A8\n\u1100\u116E\u11A8\u1100\u1161\n\u1100\u116E\u11A8\u1100\u1175\n\u1100\u116E\u11A8\u1102\u1162\n\u1100\u116E\u11A8\u1105\u1175\u11B8\n\u1100\u116E\u11A8\u1106\u116E\u11AF\n\u1100\u116E\u11A8\u1106\u1175\u11AB\n\u1100\u116E\u11A8\u1109\u116E\n\u1100\u116E\u11A8\u110B\u1165\n\u1100\u116E\u11A8\u110B\u116A\u11BC\n\u1100\u116E\u11A8\u110C\u1165\u11A8\n\u1100\u116E\u11A8\u110C\u1166\n\u1100\u116E\u11A8\u1112\u116C\n\u1100\u116E\u11AB\u1103\u1162\n\u1100\u116E\u11AB\u1109\u1161\n\u1100\u116E\u11AB\u110B\u1175\u11AB\n\u1100\u116E\u11BC\u1100\u1173\u11A8\u110C\u1165\u11A8\n\u1100\u116F\u11AB\u1105\u1175\n\u1100\u116F\u11AB\u110B\u1171\n\u1100\u116F\u11AB\u1110\u116E\n\u1100\u1171\u1100\u116E\u11A8\n\u1100\u1171\u1109\u1175\u11AB\n\u1100\u1172\u110C\u1165\u11BC\n\u1100\u1172\u110E\u1175\u11A8\n\u1100\u1172\u11AB\u1112\u1167\u11BC\n\u1100\u1173\u1102\u1161\u11AF\n\u1100\u1173\u1102\u1163\u11BC\n\u1100\u1173\u1102\u1173\u11AF\n\u1100\u1173\u1105\u1165\u1102\u1161\n\u1100\u1173\u1105\u116E\u11B8\n\u1100\u1173\u1105\u1173\u11BA\n\u1100\u1173\u1105\u1175\u11B7\n\u1100\u1173\u110C\u1166\u1109\u1165\u110B\u1163\n\u1100\u1173\u1110\u1169\u1105\u1169\u11A8\n\u1100\u1173\u11A8\u1107\u1169\u11A8\n\u1100\u1173\u11A8\u1112\u1175\n\u1100\u1173\u11AB\u1100\u1165\n\u1100\u1173\u11AB\u1100\u116D\n\u1100\u1173\u11AB\u1105\u1162\n\u1100\u1173\u11AB\u1105\u1169\n\u1100\u1173\u11AB\u1106\u116E\n\u1100\u1173\u11AB\u1107\u1169\u11AB\n\u1100\u1173\u11AB\u110B\u116F\u11AB\n\u1100\u1173\u11AB\u110B\u1172\u11A8\n\u1100\u1173\u11AB\u110E\u1165\n\u1100\u1173\u11AF\u110A\u1175\n\u1100\u1173\u11AF\u110C\u1161\n\u1100\u1173\u11B7\u1100\u1161\u11BC\u1109\u1161\u11AB\n\u1100\u1173\u11B7\u1100\u1169\n\u1100\u1173\u11B7\u1102\u1167\u11AB\n\u1100\u1173\u11B7\u1106\u1166\u1103\u1161\u11AF\n\u1100\u1173\u11B7\u110B\u1162\u11A8\n\u1100\u1173\u11B7\u110B\u1167\u11AB\n\u1100\u1173\u11B7\u110B\u116D\u110B\u1175\u11AF\n\u1100\u1173\u11B7\u110C\u1175\n\u1100\u1173\u11BC\u110C\u1165\u11BC\u110C\u1165\u11A8\n\u1100\u1175\u1100\u1161\u11AB\n\u1100\u1175\u1100\u116A\u11AB\n\u1100\u1175\u1102\u1167\u11B7\n\u1100\u1175\u1102\u1173\u11BC\n\u1100\u1175\u1103\u1169\u11A8\u1100\u116D\n\u1100\u1175\u1103\u116E\u11BC\n\u1100\u1175\u1105\u1169\u11A8\n\u1100\u1175\u1105\u1173\u11B7\n\u1100\u1175\u1107\u1165\u11B8\n\u1100\u1175\u1107\u1169\u11AB\n\u1100\u1175\u1107\u116E\u11AB\n\u1100\u1175\u1108\u1173\u11B7\n\u1100\u1175\u1109\u116E\u11A8\u1109\u1161\n\u1100\u1175\u1109\u116E\u11AF\n\u1100\u1175\u110B\u1165\u11A8\n\u1100\u1175\u110B\u1165\u11B8\n\u1100\u1175\u110B\u1169\u11AB\n\u1100\u1175\u110B\u116E\u11AB\n\u1100\u1175\u110B\u116F\u11AB\n\u1100\u1175\u110C\u1165\u11A8\n\u1100\u1175\u110C\u116E\u11AB\n\u1100\u1175\u110E\u1175\u11B7\n\u1100\u1175\u1112\u1169\u11AB\n\u1100\u1175\u1112\u116C\u11A8\n\u1100\u1175\u11AB\u1100\u1173\u11B8\n\u1100\u1175\u11AB\u110C\u1161\u11BC\n\u1100\u1175\u11AF\u110B\u1175\n\u1100\u1175\u11B7\u1107\u1161\u11B8\n\u1100\u1175\u11B7\u110E\u1175\n\u1100\u1175\u11B7\u1111\u1169\u1100\u1169\u11BC\u1112\u1161\u11BC\n\u1101\u1161\u11A8\u1103\u116E\u1100\u1175\n\u1101\u1161\u11B7\u1108\u1161\u11A8\n\u1101\u1162\u1103\u1161\u11AF\u110B\u1173\u11B7\n\u1101\u1162\u1109\u1169\u1100\u1173\u11B7\n\u1101\u1165\u11B8\u110C\u1175\u11AF\n\u1101\u1169\u11A8\u1103\u1162\u1100\u1175\n\u1101\u1169\u11BE\u110B\u1175\u11C1\n\u1102\u1161\u1103\u1173\u11AF\u110B\u1175\n\u1102\u1161\u1105\u1161\u11AB\u1112\u1175\n\u1102\u1161\u1106\u1165\u110C\u1175\n\u1102\u1161\u1106\u116E\u11AF\n\u1102\u1161\u110E\u1175\u11B7\u1107\u1161\u11AB\n\u1102\u1161\u1112\u1173\u11AF\n\u1102\u1161\u11A8\u110B\u1167\u11B8\n\u1102\u1161\u11AB\u1107\u1161\u11BC\n\u1102\u1161\u11AF\u1100\u1162\n\u1102\u1161\u11AF\u110A\u1175\n\u1102\u1161\u11AF\u110D\u1161\n\u1102\u1161\u11B7\u1102\u1167\n\u1102\u1161\u11B7\u1103\u1162\u1106\u116E\u11AB\n\u1102\u1161\u11B7\u1106\u1162\n\u1102\u1161\u11B7\u1109\u1161\u11AB\n\u1102\u1161\u11B7\u110C\u1161\n\u1102\u1161\u11B7\u1111\u1167\u11AB\n\u1102\u1161\u11B7\u1112\u1161\u11A8\u1109\u1162\u11BC\n\u1102\u1161\u11BC\u1107\u1175\n\u1102\u1161\u11C0\u1106\u1161\u11AF\n\u1102\u1162\u1102\u1167\u11AB\n\u1102\u1162\u110B\u116D\u11BC\n\u1102\u1162\u110B\u1175\u11AF\n\u1102\u1162\u11B7\u1107\u1175\n\u1102\u1162\u11B7\u1109\u1162\n\u1102\u1162\u11BA\u1106\u116E\u11AF\n\u1102\u1162\u11BC\u1103\u1169\u11BC\n\u1102\u1162\u11BC\u1106\u1167\u11AB\n\u1102\u1162\u11BC\u1107\u1161\u11BC\n\u1102\u1162\u11BC\u110C\u1161\u11BC\u1100\u1169\n\u1102\u1166\u11A8\u1110\u1161\u110B\u1175\n\u1102\u1166\u11BA\u110D\u1162\n\u1102\u1169\u1103\u1169\u11BC\n\u1102\u1169\u1105\u1161\u11AB\u1109\u1162\u11A8\n\u1102\u1169\u1105\u1167\u11A8\n\u1102\u1169\u110B\u1175\u11AB\n\u1102\u1169\u11A8\u110B\u1173\u11B7\n\u1102\u1169\u11A8\u110E\u1161\n\u1102\u1169\u11A8\u1112\u116A\n\u1102\u1169\u11AB\u1105\u1175\n\u1102\u1169\u11AB\u1106\u116E\u11AB\n\u1102\u1169\u11AB\u110C\u1162\u11BC\n\u1102\u1169\u11AF\u110B\u1175\n\u1102\u1169\u11BC\u1100\u116E\n\u1102\u1169\u11BC\u1103\u1161\u11B7\n\u1102\u1169\u11BC\u1106\u1175\u11AB\n\u1102\u1169\u11BC\u1107\u116E\n\u1102\u1169\u11BC\u110B\u1165\u11B8\n\u1102\u1169\u11BC\u110C\u1161\u11BC\n\u1102\u1169\u11BC\u110E\u1169\u11AB\n\u1102\u1169\u11C1\u110B\u1175\n\u1102\u116E\u11AB\u1103\u1169\u11BC\u110C\u1161\n\u1102\u116E\u11AB\u1106\u116E\u11AF\n\u1102\u116E\u11AB\u110A\u1165\u11B8\n\u1102\u1172\u110B\u116D\u11A8\n\u1102\u1173\u1101\u1175\u11B7\n\u1102\u1173\u11A8\u1103\u1162\n\u1102\u1173\u11BC\u1103\u1169\u11BC\u110C\u1165\u11A8\n\u1102\u1173\u11BC\u1105\u1167\u11A8\n\u1103\u1161\u1107\u1161\u11BC\n\u1103\u1161\u110B\u1163\u11BC\u1109\u1165\u11BC\n\u1103\u1161\u110B\u1173\u11B7\n\u1103\u1161\u110B\u1175\u110B\u1165\u1110\u1173\n\u1103\u1161\u1112\u1162\u11BC\n\u1103\u1161\u11AB\u1100\u1168\n\u1103\u1161\u11AB\u1100\u1169\u11AF\n\u1103\u1161\u11AB\u1103\u1169\u11A8\n\u1103\u1161\u11AB\u1106\u1161\u11BA\n\u1103\u1161\u11AB\u1109\u116E\u11AB\n\u1103\u1161\u11AB\u110B\u1165\n\u1103\u1161\u11AB\u110B\u1171\n\u1103\u1161\u11AB\u110C\u1165\u11B7\n\u1103\u1161\u11AB\u110E\u1166\n\u1103\u1161\u11AB\u110E\u116E\n\u1103\u1161\u11AB\u1111\u1167\u11AB\n\u1103\u1161\u11AB\u1111\u116E\u11BC\n\u1103\u1161\u11AF\u1100\u1163\u11AF\n\u1103\u1161\u11AF\u1105\u1165\n\u1103\u1161\u11AF\u1105\u1167\u11A8\n\u1103\u1161\u11AF\u1105\u1175\n\u1103\u1161\u11B0\u1100\u1169\u1100\u1175\n\u1103\u1161\u11B7\u1103\u1161\u11BC\n\u1103\u1161\u11B7\u1107\u1162\n\u1103\u1161\u11B7\u110B\u116D\n\u1103\u1161\u11B7\u110B\u1175\u11B7\n\u1103\u1161\u11B8\u1107\u1167\u11AB\n\u1103\u1161\u11B8\u110C\u1161\u11BC\n\u1103\u1161\u11BC\u1100\u1173\u11AB\n\u1103\u1161\u11BC\u1107\u116E\u11AB\u1100\u1161\u11AB\n\u1103\u1161\u11BC\u110B\u1167\u11AB\u1112\u1175\n\u1103\u1161\u11BC\u110C\u1161\u11BC\n\u1103\u1162\u1100\u1172\u1106\u1169\n\u1103\u1162\u1102\u1161\u11BD\n\u1103\u1162\u1103\u1161\u11AB\u1112\u1175\n\u1103\u1162\u1103\u1161\u11B8\n\u1103\u1162\u1103\u1169\u1109\u1175\n\u1103\u1162\u1105\u1163\u11A8\n\u1103\u1162\u1105\u1163\u11BC\n\u1103\u1162\u1105\u1172\u11A8\n\u1103\u1162\u1106\u116E\u11AB\n\u1103\u1162\u1107\u116E\u1107\u116E\u11AB\n\u1103\u1162\u1109\u1175\u11AB\n\u1103\u1162\u110B\u1173\u11BC\n\u1103\u1162\u110C\u1161\u11BC\n\u1103\u1162\u110C\u1165\u11AB\n\u1103\u1162\u110C\u1165\u11B8\n\u1103\u1162\u110C\u116E\u11BC\n\u1103\u1162\u110E\u1162\u11A8\n\u1103\u1162\u110E\u116E\u11AF\n\u1103\u1162\u110E\u116E\u11BC\n\u1103\u1162\u1110\u1169\u11BC\u1105\u1167\u11BC\n\u1103\u1162\u1112\u1161\u11A8\n\u1103\u1162\u1112\u1161\u11AB\u1106\u1175\u11AB\u1100\u116E\u11A8\n\u1103\u1162\u1112\u1161\u11B8\u1109\u1175\u11AF\n\u1103\u1162\u1112\u1167\u11BC\n\u1103\u1165\u11BC\u110B\u1165\u1105\u1175\n\u1103\u1166\u110B\u1175\u1110\u1173\n\u1103\u1169\u1103\u1162\u110E\u1166\n\u1103\u1169\u1103\u1165\u11A8\n\u1103\u1169\u1103\u116E\u11A8\n\u1103\u1169\u1106\u1161\u11BC\n\u1103\u1169\u1109\u1165\u1100\u116A\u11AB\n\u1103\u1169\u1109\u1175\u11B7\n\u1103\u1169\u110B\u116E\u11B7\n\u1103\u1169\u110B\u1175\u11B8\n\u1103\u1169\u110C\u1161\u1100\u1175\n\u1103\u1169\u110C\u1165\u1112\u1175\n\u1103\u1169\u110C\u1165\u11AB\n\u1103\u1169\u110C\u116E\u11BC\n\u1103\u1169\u110E\u1161\u11A8\n\u1103\u1169\u11A8\u1100\u1161\u11B7\n\u1103\u1169\u11A8\u1105\u1175\u11B8\n\u1103\u1169\u11A8\u1109\u1165\n\u1103\u1169\u11A8\u110B\u1175\u11AF\n\u1103\u1169\u11A8\u110E\u1161\u11BC\u110C\u1165\u11A8\n\u1103\u1169\u11BC\u1112\u116A\u110E\u1162\u11A8\n\u1103\u1171\u11BA\u1106\u1169\u1109\u1173\u11B8\n\u1103\u1171\u11BA\u1109\u1161\u11AB\n\u1104\u1161\u11AF\u110B\u1161\u110B\u1175\n\u1106\u1161\u1102\u116E\u1105\u1161\n\u1106\u1161\u1102\u1173\u11AF\n\u1106\u1161\u1103\u1161\u11BC\n\u1106\u1161\u1105\u1161\u1110\u1169\u11AB\n\u1106\u1161\u1105\u1167\u11AB\n\u1106\u1161\u1106\u116E\u1105\u1175\n\u1106\u1161\u1109\u1161\u110C\u1175\n\u1106\u1161\u110B\u1163\u11A8\n\u1106\u1161\u110B\u116D\u1102\u1166\u110C\u1173\n\u1106\u1161\u110B\u1173\u11AF\n\u1106\u1161\u110B\u1173\u11B7\n\u1106\u1161\u110B\u1175\u110F\u1173\n\u1106\u1161\u110C\u116E\u11BC\n\u1106\u1161\u110C\u1175\u1106\u1161\u11A8\n\u1106\u1161\u110E\u1161\u11AB\u1100\u1161\u110C\u1175\n\u1106\u1161\u110E\u1161\u11AF\n\u1106\u1161\u1112\u1173\u11AB\n\u1106\u1161\u11A8\u1100\u1165\u11AF\u1105\u1175\n\u1106\u1161\u11A8\u1102\u1162\n\u1106\u1161\u11A8\u1109\u1161\u11BC\n\u1106\u1161\u11AB\u1102\u1161\u11B7\n\u1106\u1161\u11AB\u1103\u116E\n\u1106\u1161\u11AB\u1109\u1166\n\u1106\u1161\u11AB\u110B\u1163\u11A8\n\u1106\u1161\u11AB\u110B\u1175\u11AF\n\u1106\u1161\u11AB\u110C\u1165\u11B7\n\u1106\u1161\u11AB\u110C\u1169\u11A8\n\u1106\u1161\u11AB\u1112\u116A\n\u1106\u1161\u11AD\u110B\u1175\n\u1106\u1161\u11AF\u1100\u1175\n\u1106\u1161\u11AF\u110A\u1173\u11B7\n\u1106\u1161\u11AF\u1110\u116E\n\u1106\u1161\u11B7\u1103\u1162\u1105\u1169\n\u1106\u1161\u11BC\u110B\u116F\u11AB\u1100\u1167\u11BC\n\u1106\u1162\u1102\u1167\u11AB\n\u1106\u1162\u1103\u1161\u11AF\n\u1106\u1162\u1105\u1167\u11A8\n\u1106\u1162\u1107\u1165\u11AB\n\u1106\u1162\u1109\u1173\u110F\u1165\u11B7\n\u1106\u1162\u110B\u1175\u11AF\n\u1106\u1162\u110C\u1161\u11BC\n\u1106\u1162\u11A8\u110C\u116E\n\u1106\u1165\u11A8\u110B\u1175\n\u1106\u1165\u11AB\u110C\u1165\n\u1106\u1165\u11AB\u110C\u1175\n\u1106\u1165\u11AF\u1105\u1175\n\u1106\u1166\u110B\u1175\u11AF\n\u1106\u1167\u1102\u1173\u1105\u1175\n\u1106\u1167\u110E\u1175\u11AF\n\u1106\u1167\u11AB\u1103\u1161\u11B7\n\u1106\u1167\u11AF\u110E\u1175\n\u1106\u1167\u11BC\u1103\u1161\u11AB\n\u1106\u1167\u11BC\u1105\u1167\u11BC\n\u1106\u1167\u11BC\u110B\u1168\n\u1106\u1167\u11BC\u110B\u1174\n\u1106\u1167\u11BC\u110C\u1165\u11AF\n\u1106\u1167\u11BC\u110E\u1175\u11BC\n\u1106\u1167\u11BC\u1112\u1161\u11B7\n\u1106\u1169\u1100\u1173\u11B7\n\u1106\u1169\u1102\u1175\u1110\u1165\n\u1106\u1169\u1103\u1166\u11AF\n\u1106\u1169\u1103\u1173\u11AB\n\u1106\u1169\u1107\u1165\u11B7\n\u1106\u1169\u1109\u1173\u11B8\n\u1106\u1169\u110B\u1163\u11BC\n\u1106\u1169\u110B\u1175\u11B7\n\u1106\u1169\u110C\u1169\u1105\u1175\n\u1106\u1169\u110C\u1175\u11B8\n\u1106\u1169\u1110\u116E\u11BC\u110B\u1175\n\u1106\u1169\u11A8\u1100\u1165\u11AF\u110B\u1175\n\u1106\u1169\u11A8\u1105\u1169\u11A8\n\u1106\u1169\u11A8\u1109\u1161\n\u1106\u1169\u11A8\u1109\u1169\u1105\u1175\n\u1106\u1169\u11A8\u1109\u116E\u11B7\n\u1106\u1169\u11A8\u110C\u1165\u11A8\n\u1106\u1169\u11A8\u1111\u116D\n\u1106\u1169\u11AF\u1105\u1162\n\u1106\u1169\u11B7\u1106\u1162\n\u1106\u1169\u11B7\u1106\u116E\u1100\u1166\n\u1106\u1169\u11B7\u1109\u1161\u11AF\n\u1106\u1169\u11B7\u1109\u1169\u11A8\n\u1106\u1169\u11B7\u110C\u1175\u11BA\n\u1106\u1169\u11B7\u1110\u1169\u11BC\n\u1106\u1169\u11B8\u1109\u1175\n\u1106\u116E\u1100\u116A\u11AB\u1109\u1175\u11B7\n\u1106\u116E\u1100\u116E\u11BC\u1112\u116A\n\u1106\u116E\u1103\u1165\u110B\u1171\n\u1106\u116E\u1103\u1165\u11B7\n\u1106\u116E\u1105\u1173\u11C1\n\u1106\u116E\u1109\u1173\u11AB\n\u1106\u116E\u110B\u1165\u11BA\n\u1106\u116E\u110B\u1167\u11A8\n\u1106\u116E\u110B\u116D\u11BC\n\u1106\u116E\u110C\u1169\u1100\u1165\u11AB\n\u1106\u116E\u110C\u1175\u1100\u1162\n\u1106\u116E\u110E\u1165\u11A8\n\u1106\u116E\u11AB\u1100\u116E\n\u1106\u116E\u11AB\u1103\u1173\u11A8\n\u1106\u116E\u11AB\u1107\u1165\u11B8\n\u1106\u116E\u11AB\u1109\u1165\n\u1106\u116E\u11AB\u110C\u1166\n\u1106\u116E\u11AB\u1112\u1161\u11A8\n\u1106\u116E\u11AB\u1112\u116A\n\u1106\u116E\u11AF\u1100\u1161\n\u1106\u116E\u11AF\u1100\u1165\u11AB\n\u1106\u116E\u11AF\u1100\u1167\u11AF\n\u1106\u116E\u11AF\u1100\u1169\u1100\u1175\n\u1106\u116E\u11AF\u1105\u1169\u11AB\n\u1106\u116E\u11AF\u1105\u1175\u1112\u1161\u11A8\n\u1106\u116E\u11AF\u110B\u1173\u11B7\n\u1106\u116E\u11AF\u110C\u1175\u11AF\n\u1106\u116E\u11AF\u110E\u1166\n\u1106\u1175\u1100\u116E\u11A8\n\u1106\u1175\u1103\u1175\u110B\u1165\n\u1106\u1175\u1109\u1161\u110B\u1175\u11AF\n\u1106\u1175\u1109\u116E\u11AF\n\u1106\u1175\u110B\u1167\u11A8\n\u1106\u1175\u110B\u116D\u11BC\u1109\u1175\u11AF\n\u1106\u1175\u110B\u116E\u11B7\n\u1106\u1175\u110B\u1175\u11AB\n\u1106\u1175\u1110\u1175\u11BC\n\u1106\u1175\u1112\u1169\u11AB\n\u1106\u1175\u11AB\u1100\u1161\u11AB\n\u1106\u1175\u11AB\u110C\u1169\u11A8\n\u1106\u1175\u11AB\u110C\u116E\n\u1106\u1175\u11AE\u110B\u1173\u11B7\n\u1106\u1175\u11AF\u1100\u1161\u1105\u116E\n\u1106\u1175\u11AF\u1105\u1175\u1106\u1175\u1110\u1165\n\u1106\u1175\u11C0\u1107\u1161\u1103\u1161\u11A8\n\u1107\u1161\u1100\u1161\u110C\u1175\n\u1107\u1161\u1100\u116E\u1102\u1175\n\u1107\u1161\u1102\u1161\u1102\u1161\n\u1107\u1161\u1102\u1173\u11AF\n\u1107\u1161\u1103\u1161\u11A8\n\u1107\u1161\u1103\u1161\u11BA\u1100\u1161\n\u1107\u1161\u1105\u1161\u11B7\n\u1107\u1161\u110B\u1175\u1105\u1165\u1109\u1173\n\u1107\u1161\u1110\u1161\u11BC\n\u1107\u1161\u11A8\u1106\u116E\u11AF\u1100\u116A\u11AB\n\u1107\u1161\u11A8\u1109\u1161\n\u1107\u1161\u11A8\u1109\u116E\n\u1107\u1161\u11AB\u1103\u1162\n\u1107\u1161\u11AB\u1103\u1173\u1109\u1175\n\u1107\u1161\u11AB\u1106\u1161\u11AF\n\u1107\u1161\u11AB\u1107\u1161\u11AF\n\u1107\u1161\u11AB\u1109\u1165\u11BC\n\u1107\u1161\u11AB\u110B\u1173\u11BC\n\u1107\u1161\u11AB\u110C\u1161\u11BC\n\u1107\u1161\u11AB\u110C\u116E\u11A8\n\u1107\u1161\u11AB\u110C\u1175\n\u1107\u1161\u11AB\u110E\u1161\u11AB\n\u1107\u1161\u11AE\u110E\u1175\u11B7\n\u1107\u1161\u11AF\u1100\u1161\u1105\u1161\u11A8\n\u1107\u1161\u11AF\u1100\u1165\u11AF\u110B\u1173\u11B7\n\u1107\u1161\u11AF\u1100\u1167\u11AB\n\u1107\u1161\u11AF\u1103\u1161\u11AF\n\u1107\u1161\u11AF\u1105\u1166\n\u1107\u1161\u11AF\u1106\u1169\u11A8\n\u1107\u1161\u11AF\u1107\u1161\u1103\u1161\u11A8\n\u1107\u1161\u11AF\u1109\u1162\u11BC\n\u1107\u1161\u11AF\u110B\u1173\u11B7\n\u1107\u1161\u11AF\u110C\u1161\u1100\u116E\u11A8\n\u1107\u1161\u11AF\u110C\u1165\u11AB\n\u1107\u1161\u11AF\u1110\u1169\u11B8\n\u1107\u1161\u11AF\u1111\u116D\n\u1107\u1161\u11B7\u1112\u1161\u1102\u1173\u11AF\n\u1107\u1161\u11B8\u1100\u1173\u1105\u1173\u11BA\n\u1107\u1161\u11B8\u1106\u1161\u11BA\n\u1107\u1161\u11B8\u1109\u1161\u11BC\n\u1107\u1161\u11B8\u1109\u1169\u11C0\n\u1107\u1161\u11BC\u1100\u1173\u11B7\n\u1107\u1161\u11BC\u1106\u1167\u11AB\n\u1107\u1161\u11BC\u1106\u116E\u11AB\n\u1107\u1161\u11BC\u1107\u1161\u1103\u1161\u11A8\n\u1107\u1161\u11BC\u1107\u1165\u11B8\n\u1107\u1161\u11BC\u1109\u1169\u11BC\n\u1107\u1161\u11BC\u1109\u1175\u11A8\n\u1107\u1161\u11BC\u110B\u1161\u11AB\n\u1107\u1161\u11BC\u110B\u116E\u11AF\n\u1107\u1161\u11BC\u110C\u1175\n\u1107\u1161\u11BC\u1112\u1161\u11A8\n\u1107\u1161\u11BC\u1112\u1162\n\u1107\u1161\u11BC\u1112\u1163\u11BC\n\u1107\u1162\u1100\u1167\u11BC\n\u1107\u1162\u1101\u1169\u11B8\n\u1107\u1162\u1103\u1161\u11AF\n\u1107\u1162\u1103\u1173\u1106\u1175\u11AB\u1110\u1165\u11AB\n\u1107\u1162\u11A8\u1103\u116E\u1109\u1161\u11AB\n\u1107\u1162\u11A8\u1109\u1162\u11A8\n\u1107\u1162\u11A8\u1109\u1165\u11BC\n\u1107\u1162\u11A8\u110B\u1175\u11AB\n\u1107\u1162\u11A8\u110C\u1166\n\u1107\u1162\u11A8\u1112\u116A\u110C\u1165\u11B7\n\u1107\u1165\u1105\u1173\u11BA\n\u1107\u1165\u1109\u1165\u11BA\n\u1107\u1165\u1110\u1173\u11AB\n\u1107\u1165\u11AB\u1100\u1162\n\u1107\u1165\u11AB\u110B\u1167\u11A8\n\u1107\u1165\u11AB\u110C\u1175\n\u1107\u1165\u11AB\u1112\u1169\n\u1107\u1165\u11AF\u1100\u1173\u11B7\n\u1107\u1165\u11AF\u1105\u1166\n\u1107\u1165\u11AF\u110A\u1165\n\u1107\u1165\u11B7\u110B\u1171\n\u1107\u1165\u11B7\u110B\u1175\u11AB\n\u1107\u1165\u11B7\u110C\u116C\n\u1107\u1165\u11B8\u1105\u1172\u11AF\n\u1107\u1165\u11B8\u110B\u116F\u11AB\n\u1107\u1165\u11B8\u110C\u1165\u11A8\n\u1107\u1165\u11B8\u110E\u1175\u11A8\n\u1107\u1166\u110B\u1175\u110C\u1175\u11BC\n\u1107\u1166\u11AF\u1110\u1173\n\u1107\u1167\u11AB\u1100\u1167\u11BC\n\u1107\u1167\u11AB\u1103\u1169\u11BC\n\u1107\u1167\u11AB\u1106\u1167\u11BC\n\u1107\u1167\u11AB\u1109\u1175\u11AB\n\u1107\u1167\u11AB\u1112\u1169\u1109\u1161\n\u1107\u1167\u11AB\u1112\u116A\n\u1107\u1167\u11AF\u1103\u1169\n\u1107\u1167\u11AF\u1106\u1167\u11BC\n\u1107\u1167\u11AF\u110B\u1175\u11AF\n\u1107\u1167\u11BC\u1109\u1175\u11AF\n\u1107\u1167\u11BC\u110B\u1161\u1105\u1175\n\u1107\u1167\u11BC\u110B\u116F\u11AB\n\u1107\u1169\u1100\u116A\u11AB\n\u1107\u1169\u1102\u1165\u1109\u1173\n\u1107\u1169\u1105\u1161\u1109\u1162\u11A8\n\u1107\u1169\u1105\u1161\u11B7\n\u1107\u1169\u1105\u1173\u11B7\n\u1107\u1169\u1109\u1161\u11BC\n\u1107\u1169\u110B\u1161\u11AB\n\u1107\u1169\u110C\u1161\u1100\u1175\n\u1107\u1169\u110C\u1161\u11BC\n\u1107\u1169\u110C\u1165\u11AB\n\u1107\u1169\u110C\u1169\u11AB\n\u1107\u1169\u1110\u1169\u11BC\n\u1107\u1169\u1111\u1167\u11AB\u110C\u1165\u11A8\n\u1107\u1169\u1112\u1165\u11B7\n\u1107\u1169\u11A8\u1103\u1169\n\u1107\u1169\u11A8\u1109\u1161\n\u1107\u1169\u11A8\u1109\u116E\u11BC\u110B\u1161\n\u1107\u1169\u11A8\u1109\u1173\u11B8\n\u1107\u1169\u11A9\u110B\u1173\u11B7\n\u1107\u1169\u11AB\u1100\u1167\u11A8\u110C\u1165\u11A8\n\u1107\u1169\u11AB\u1105\u1162\n\u1107\u1169\u11AB\u1107\u116E\n\u1107\u1169\u11AB\u1109\u1161\n\u1107\u1169\u11AB\u1109\u1165\u11BC\n\u1107\u1169\u11AB\u110B\u1175\u11AB\n\u1107\u1169\u11AB\u110C\u1175\u11AF\n\u1107\u1169\u11AF\u1111\u1166\u11AB\n\u1107\u1169\u11BC\u1109\u1161\n\u1107\u1169\u11BC\u110C\u1175\n\u1107\u1169\u11BC\u1110\u116E\n\u1107\u116E\u1100\u1173\u11AB\n\u1107\u116E\u1101\u1173\u1105\u1165\u110B\u116E\u11B7\n\u1107\u116E\u1103\u1161\u11B7\n\u1107\u116E\u1103\u1169\u11BC\u1109\u1161\u11AB\n\u1107\u116E\u1106\u116E\u11AB\n\u1107\u116E\u1107\u116E\u11AB\n\u1107\u116E\u1109\u1161\u11AB\n\u1107\u116E\u1109\u1161\u11BC\n\u1107\u116E\u110B\u1165\u11BF\n\u1107\u116E\u110B\u1175\u11AB\n\u1107\u116E\u110C\u1161\u11A8\u110B\u116D\u11BC\n\u1107\u116E\u110C\u1161\u11BC\n\u1107\u116E\u110C\u1165\u11BC\n\u1107\u116E\u110C\u1169\u11A8\n\u1107\u116E\u110C\u1175\u1105\u1165\u11AB\u1112\u1175\n\u1107\u116E\u110E\u1175\u11AB\n\u1107\u116E\u1110\u1161\u11A8\n\u1107\u116E\u1111\u116E\u11B7\n\u1107\u116E\u1112\u116C\u110C\u1161\u11BC\n\u1107\u116E\u11A8\u1107\u116E\n\u1107\u116E\u11A8\u1112\u1161\u11AB\n\u1107\u116E\u11AB\u1102\u1169\n\u1107\u116E\u11AB\u1105\u1163\u11BC\n\u1107\u116E\u11AB\u1105\u1175\n\u1107\u116E\u11AB\u1106\u1167\u11BC\n\u1107\u116E\u11AB\u1109\u1165\u11A8\n\u1107\u116E\u11AB\u110B\u1163\n\u1107\u116E\u11AB\u110B\u1171\u1100\u1175\n\u1107\u116E\u11AB\u1111\u1175\u11AF\n\u1107\u116E\u11AB\u1112\u1169\u11BC\u1109\u1162\u11A8\n\u1107\u116E\u11AF\u1100\u1169\u1100\u1175\n\u1107\u116E\u11AF\u1100\u116A\n\u1107\u116E\u11AF\u1100\u116D\n\u1107\u116E\u11AF\u1101\u1169\u11BE\n\u1107\u116E\u11AF\u1106\u1161\u11AB\n\u1107\u116E\u11AF\u1107\u1165\u11B8\n\u1107\u116E\u11AF\u1107\u1175\u11BE\n\u1107\u116E\u11AF\u110B\u1161\u11AB\n\u1107\u116E\u11AF\u110B\u1175\u110B\u1175\u11A8\n\u1107\u116E\u11AF\u1112\u1162\u11BC\n\u1107\u1173\u1105\u1162\u11AB\u1103\u1173\n\u1107\u1175\u1100\u1173\u11A8\n\u1107\u1175\u1102\u1161\u11AB\n\u1107\u1175\u1102\u1175\u11AF\n\u1107\u1175\u1103\u116E\u11AF\u1100\u1175\n\u1107\u1175\u1103\u1175\u110B\u1169\n\u1107\u1175\u1105\u1169\u1109\u1169\n\u1107\u1175\u1106\u1161\u11AB\n\u1107\u1175\u1106\u1167\u11BC\n\u1107\u1175\u1106\u1175\u11AF\n\u1107\u1175\u1107\u1161\u1105\u1161\u11B7\n\u1107\u1175\u1107\u1175\u11B7\u1107\u1161\u11B8\n\u1107\u1175\u1109\u1161\u11BC\n\u1107\u1175\u110B\u116D\u11BC\n\u1107\u1175\u110B\u1172\u11AF\n\u1107\u1175\u110C\u116E\u11BC\n\u1107\u1175\u1110\u1161\u1106\u1175\u11AB\n\u1107\u1175\u1111\u1161\u11AB\n\u1107\u1175\u11AF\u1103\u1175\u11BC\n\u1107\u1175\u11BA\u1106\u116E\u11AF\n\u1107\u1175\u11BA\u1107\u1161\u11BC\u110B\u116E\u11AF\n\u1107\u1175\u11BA\u110C\u116E\u11AF\u1100\u1175\n\u1107\u1175\u11BE\u1101\u1161\u11AF\n\u1108\u1161\u11AF\u1100\u1161\u11AB\u1109\u1162\u11A8\n\u1108\u1161\u11AF\u1105\u1162\n\u1108\u1161\u11AF\u1105\u1175\n\u1109\u1161\u1100\u1165\u11AB\n\u1109\u1161\u1100\u1168\u110C\u1165\u11AF\n\u1109\u1161\u1102\u1161\u110B\u1175\n\u1109\u1161\u1102\u1163\u11BC\n\u1109\u1161\u1105\u1161\u11B7\n\u1109\u1161\u1105\u1161\u11BC\n\u1109\u1161\u1105\u1175\u11B8\n\u1109\u1161\u1106\u1169\u1102\u1175\u11B7\n\u1109\u1161\u1106\u116E\u11AF\n\u1109\u1161\u1107\u1161\u11BC\n\u1109\u1161\u1109\u1161\u11BC\n\u1109\u1161\u1109\u1162\u11BC\u1112\u116A\u11AF\n\u1109\u1161\u1109\u1165\u11AF\n\u1109\u1161\u1109\u1173\u11B7\n\u1109\u1161\u1109\u1175\u11AF\n\u1109\u1161\u110B\u1165\u11B8\n\u1109\u1161\u110B\u116D\u11BC\n\u1109\u1161\u110B\u116F\u11AF\n\u1109\u1161\u110C\u1161\u11BC\n\u1109\u1161\u110C\u1165\u11AB\n\u1109\u1161\u110C\u1175\u11AB\n\u1109\u1161\u110E\u1169\u11AB\n\u1109\u1161\u110E\u116E\u11AB\u1100\u1175\n\u1109\u1161\u1110\u1161\u11BC\n\u1109\u1161\u1110\u116E\u1105\u1175\n\u1109\u1161\u1112\u1173\u11AF\n\u1109\u1161\u11AB\u1100\u1175\u11AF\n\u1109\u1161\u11AB\u1107\u116E\u110B\u1175\u11AB\u1100\u116A\n\u1109\u1161\u11AB\u110B\u1165\u11B8\n\u1109\u1161\u11AB\u110E\u1162\u11A8\n\u1109\u1161\u11AF\u1105\u1175\u11B7\n\u1109\u1161\u11AF\u110B\u1175\u11AB\n\u1109\u1161\u11AF\u110D\u1161\u11A8\n\u1109\u1161\u11B7\u1100\u1168\u1110\u1161\u11BC\n\u1109\u1161\u11B7\u1100\u116E\u11A8\n\u1109\u1161\u11B7\u1109\u1175\u11B8\n\u1109\u1161\u11B7\u110B\u116F\u11AF\n\u1109\u1161\u11B7\u110E\u1169\u11AB\n\u1109\u1161\u11BC\u1100\u116A\u11AB\n\u1109\u1161\u11BC\u1100\u1173\u11B7\n\u1109\u1161\u11BC\u1103\u1162\n\u1109\u1161\u11BC\u1105\u1172\n\u1109\u1161\u11BC\u1107\u1161\u11AB\u1100\u1175\n\u1109\u1161\u11BC\u1109\u1161\u11BC\n\u1109\u1161\u11BC\u1109\u1175\u11A8\n\u1109\u1161\u11BC\u110B\u1165\u11B8\n\u1109\u1161\u11BC\u110B\u1175\u11AB\n\u1109\u1161\u11BC\u110C\u1161\n\u1109\u1161\u11BC\u110C\u1165\u11B7\n\u1109\u1161\u11BC\u110E\u1165\n\u1109\u1161\u11BC\u110E\u116E\n\u1109\u1161\u11BC\u1110\u1162\n\u1109\u1161\u11BC\u1111\u116D\n\u1109\u1161\u11BC\u1111\u116E\u11B7\n\u1109\u1161\u11BC\u1112\u116A\u11BC\n\u1109\u1162\u1107\u1167\u11A8\n\u1109\u1162\u11A8\u1101\u1161\u11AF\n\u1109\u1162\u11A8\u110B\u1167\u11AB\u1111\u1175\u11AF\n\u1109\u1162\u11BC\u1100\u1161\u11A8\n\u1109\u1162\u11BC\u1106\u1167\u11BC\n\u1109\u1162\u11BC\u1106\u116E\u11AF\n\u1109\u1162\u11BC\u1107\u1161\u11BC\u1109\u1169\u11BC\n\u1109\u1162\u11BC\u1109\u1161\u11AB\n\u1109\u1162\u11BC\u1109\u1165\u11AB\n\u1109\u1162\u11BC\u1109\u1175\u11AB\n\u1109\u1162\u11BC\u110B\u1175\u11AF\n\u1109\u1162\u11BC\u1112\u116A\u11AF\n\u1109\u1165\u1105\u1161\u11B8\n\u1109\u1165\u1105\u1173\u11AB\n\u1109\u1165\u1106\u1167\u11BC\n\u1109\u1165\u1106\u1175\u11AB\n\u1109\u1165\u1107\u1175\u1109\u1173\n\u1109\u1165\u110B\u1163\u11BC\n\u1109\u1165\u110B\u116E\u11AF\n\u1109\u1165\u110C\u1165\u11A8\n\u1109\u1165\u110C\u1165\u11B7\n\u1109\u1165\u110D\u1169\u11A8\n\u1109\u1165\u110F\u1173\u11AF\n\u1109\u1165\u11A8\u1109\u1161\n\u1109\u1165\u11A8\u110B\u1172\n\u1109\u1165\u11AB\u1100\u1165\n\u1109\u1165\u11AB\u1106\u116E\u11AF\n\u1109\u1165\u11AB\u1107\u1162\n\u1109\u1165\u11AB\u1109\u1162\u11BC\n\u1109\u1165\u11AB\u1109\u116E\n\u1109\u1165\u11AB\u110B\u116F\u11AB\n\u1109\u1165\u11AB\u110C\u1161\u11BC\n\u1109\u1165\u11AB\u110C\u1165\u11AB\n\u1109\u1165\u11AB\u1110\u1162\u11A8\n\u1109\u1165\u11AB\u1111\u116E\u11BC\u1100\u1175\n\u1109\u1165\u11AF\u1100\u1165\u110C\u1175\n\u1109\u1165\u11AF\u1102\u1161\u11AF\n\u1109\u1165\u11AF\u1105\u1165\u11BC\u1110\u1161\u11BC\n\u1109\u1165\u11AF\u1106\u1167\u11BC\n\u1109\u1165\u11AF\u1106\u116E\u11AB\n\u1109\u1165\u11AF\u1109\u1161\n\u1109\u1165\u11AF\u110B\u1161\u11A8\u1109\u1161\u11AB\n\u1109\u1165\u11AF\u110E\u1175\n\u1109\u1165\u11AF\u1110\u1161\u11BC\n\u1109\u1165\u11B8\u110A\u1175\n\u1109\u1165\u11BC\u1100\u1169\u11BC\n\u1109\u1165\u11BC\u1103\u1161\u11BC\n\u1109\u1165\u11BC\u1106\u1167\u11BC\n\u1109\u1165\u11BC\u1107\u1167\u11AF\n\u1109\u1165\u11BC\u110B\u1175\u11AB\n\u1109\u1165\u11BC\u110C\u1161\u11BC\n\u1109\u1165\u11BC\u110C\u1165\u11A8\n\u1109\u1165\u11BC\u110C\u1175\u11AF\n\u1109\u1165\u11BC\u1112\u1161\u11B7\n\u1109\u1166\u1100\u1173\u11B7\n\u1109\u1166\u1106\u1175\u1102\u1161\n\u1109\u1166\u1109\u1161\u11BC\n\u1109\u1166\u110B\u116F\u11AF\n\u1109\u1166\u110C\u1169\u11BC\u1103\u1162\u110B\u116A\u11BC\n\u1109\u1166\u1110\u1161\u11A8\n\u1109\u1166\u11AB\u1110\u1165\n\u1109\u1166\u11AB\u1110\u1175\u1106\u1175\u1110\u1165\n\u1109\u1166\u11BA\u110D\u1162\n\u1109\u1169\u1100\u1172\u1106\u1169\n\u1109\u1169\u1100\u1173\u11A8\u110C\u1165\u11A8\n\u1109\u1169\u1100\u1173\u11B7\n\u1109\u1169\u1102\u1161\u1100\u1175\n\u1109\u1169\u1102\u1167\u11AB\n\u1109\u1169\u1103\u1173\u11A8\n\u1109\u1169\u1106\u1161\u11BC\n\u1109\u1169\u1106\u116E\u11AB\n\u1109\u1169\u1109\u1165\u11AF\n\u1109\u1169\u1109\u1169\u11A8\n\u1109\u1169\u110B\u1161\u1100\u116A\n\u1109\u1169\u110B\u116D\u11BC\n\u1109\u1169\u110B\u116F\u11AB\n\u1109\u1169\u110B\u1173\u11B7\n\u1109\u1169\u110C\u116E\u11BC\u1112\u1175\n\u1109\u1169\u110C\u1175\u1111\u116E\u11B7\n\u1109\u1169\u110C\u1175\u11AF\n\u1109\u1169\u1111\u116E\u11BC\n\u1109\u1169\u1112\u1167\u11BC\n\u1109\u1169\u11A8\u1103\u1161\u11B7\n\u1109\u1169\u11A8\u1103\u1169\n\u1109\u1169\u11A8\u110B\u1169\u11BA\n\u1109\u1169\u11AB\u1100\u1161\u1105\u1161\u11A8\n\u1109\u1169\u11AB\u1100\u1175\u11AF\n\u1109\u1169\u11AB\u1102\u1167\n\u1109\u1169\u11AB\u1102\u1175\u11B7\n\u1109\u1169\u11AB\u1103\u1173\u11BC\n\u1109\u1169\u11AB\u1106\u1169\u11A8\n\u1109\u1169\u11AB\u1108\u1167\u11A8\n\u1109\u1169\u11AB\u1109\u1175\u11AF\n\u1109\u1169\u11AB\u110C\u1175\u11AF\n\u1109\u1169\u11AB\u1110\u1169\u11B8\n\u1109\u1169\u11AB\u1112\u1162\n\u1109\u1169\u11AF\u110C\u1175\u11A8\u1112\u1175\n\u1109\u1169\u11B7\u110A\u1175\n\u1109\u1169\u11BC\u110B\u1161\u110C\u1175\n\u1109\u1169\u11BC\u110B\u1175\n\u1109\u1169\u11BC\u1111\u1167\u11AB\n\u1109\u116C\u1100\u1169\u1100\u1175\n\u1109\u116D\u1111\u1175\u11BC\n\u1109\u116E\u1100\u1165\u11AB\n\u1109\u116E\u1102\u1167\u11AB\n\u1109\u116E\u1103\u1161\u11AB\n\u1109\u116E\u1103\u1169\u11BA\u1106\u116E\u11AF\n\u1109\u116E\u1103\u1169\u11BC\u110C\u1165\u11A8\n\u1109\u116E\u1106\u1167\u11AB\n\u1109\u116E\u1106\u1167\u11BC\n\u1109\u116E\u1107\u1161\u11A8\n\u1109\u116E\u1109\u1161\u11BC\n\u1109\u116E\u1109\u1165\u11A8\n\u1109\u116E\u1109\u116E\u11AF\n\u1109\u116E\u1109\u1175\u1105\u1169\n\u1109\u116E\u110B\u1165\u11B8\n\u1109\u116E\u110B\u1167\u11B7\n\u1109\u116E\u110B\u1167\u11BC\n\u1109\u116E\u110B\u1175\u11B8\n\u1109\u116E\u110C\u116E\u11AB\n\u1109\u116E\u110C\u1175\u11B8\n\u1109\u116E\u110E\u116E\u11AF\n\u1109\u116E\u110F\u1165\u11BA\n\u1109\u116E\u1111\u1175\u11AF\n\u1109\u116E\u1112\u1161\u11A8\n\u1109\u116E\u1112\u1165\u11B7\u1109\u1162\u11BC\n\u1109\u116E\u1112\u116A\u1100\u1175\n\u1109\u116E\u11A8\u1102\u1167\n\u1109\u116E\u11A8\u1109\u1169\n\u1109\u116E\u11A8\u110C\u1166\n\u1109\u116E\u11AB\u1100\u1161\u11AB\n\u1109\u116E\u11AB\u1109\u1165\n\u1109\u116E\u11AB\u1109\u116E\n\u1109\u116E\u11AB\u1109\u1175\u11A8\u1100\u1161\u11AB\n\u1109\u116E\u11AB\u110B\u1171\n\u1109\u116E\u11AE\u1100\u1161\u1105\u1161\u11A8\n\u1109\u116E\u11AF\u1107\u1167\u11BC\n\u1109\u116E\u11AF\u110C\u1175\u11B8\n\u1109\u116E\u11BA\u110C\u1161\n\u1109\u1173\u1102\u1175\u11B7\n\u1109\u1173\u1106\u116E\u11AF\n\u1109\u1173\u1109\u1173\u1105\u1169\n\u1109\u1173\u1109\u1173\u11BC\n\u1109\u1173\u110B\u1170\u1110\u1165\n\u1109\u1173\u110B\u1171\u110E\u1175\n\u1109\u1173\u110F\u1166\u110B\u1175\u1110\u1173\n\u1109\u1173\u1110\u1172\u1103\u1175\u110B\u1169\n\u1109\u1173\u1110\u1173\u1105\u1166\u1109\u1173\n\u1109\u1173\u1111\u1169\u110E\u1173\n\u1109\u1173\u11AF\u110D\u1165\u11A8\n\u1109\u1173\u11AF\u1111\u1173\u11B7\n\u1109\u1173\u11B8\u1100\u116A\u11AB\n\u1109\u1173\u11B8\u1100\u1175\n\u1109\u1173\u11BC\u1100\u1162\u11A8\n\u1109\u1173\u11BC\u1105\u1175\n\u1109\u1173\u11BC\u1107\u116E\n\u1109\u1173\u11BC\u110B\u116D\u11BC\u110E\u1161\n\u1109\u1173\u11BC\u110C\u1175\u11AB\n\u1109\u1175\u1100\u1161\u11A8\n\u1109\u1175\u1100\u1161\u11AB\n\u1109\u1175\u1100\u1169\u11AF\n\u1109\u1175\u1100\u1173\u11B7\u110E\u1175\n\u1109\u1175\u1102\u1161\u1105\u1175\u110B\u1169\n\u1109\u1175\u1103\u1162\u11A8\n\u1109\u1175\u1105\u1175\u110C\u1173\n\u1109\u1175\u1106\u1166\u11AB\u1110\u1173\n\u1109\u1175\u1106\u1175\u11AB\n\u1109\u1175\u1107\u116E\u1106\u1169\n\u1109\u1175\u1109\u1165\u11AB\n\u1109\u1175\u1109\u1165\u11AF\n\u1109\u1175\u1109\u1173\u1110\u1166\u11B7\n\u1109\u1175\u110B\u1161\u1107\u1165\u110C\u1175\n\u1109\u1175\u110B\u1165\u1106\u1165\u1102\u1175\n\u1109\u1175\u110B\u116F\u11AF\n\u1109\u1175\u110B\u1175\u11AB\n\u1109\u1175\u110B\u1175\u11AF\n\u1109\u1175\u110C\u1161\u11A8\n\u1109\u1175\u110C\u1161\u11BC\n\u1109\u1175\u110C\u1165\u11AF\n\u1109\u1175\u110C\u1165\u11B7\n\u1109\u1175\u110C\u116E\u11BC\n\u1109\u1175\u110C\u1173\u11AB\n\u1109\u1175\u110C\u1175\u11B8\n\u1109\u1175\u110E\u1165\u11BC\n\u1109\u1175\u1112\u1161\u11B8\n\u1109\u1175\u1112\u1165\u11B7\n\u1109\u1175\u11A8\u1100\u116E\n\u1109\u1175\u11A8\u1100\u1175\n\u1109\u1175\u11A8\u1103\u1161\u11BC\n\u1109\u1175\u11A8\u1105\u1163\u11BC\n\u1109\u1175\u11A8\u1105\u116D\u1111\u116E\u11B7\n\u1109\u1175\u11A8\u1106\u116E\u11AF\n\u1109\u1175\u11A8\u1108\u1161\u11BC\n\u1109\u1175\u11A8\u1109\u1161\n\u1109\u1175\u11A8\u1109\u1162\u11BC\u1112\u116A\u11AF\n\u1109\u1175\u11A8\u110E\u1169\n\u1109\u1175\u11A8\u1110\u1161\u11A8\n\u1109\u1175\u11A8\u1111\u116E\u11B7\n\u1109\u1175\u11AB\u1100\u1169\n\u1109\u1175\u11AB\u1100\u1172\n\u1109\u1175\u11AB\u1102\u1167\u11B7\n\u1109\u1175\u11AB\u1106\u116E\u11AB\n\u1109\u1175\u11AB\u1107\u1161\u11AF\n\u1109\u1175\u11AB\u1107\u1175\n\u1109\u1175\u11AB\u1109\u1161\n\u1109\u1175\u11AB\u1109\u1166\n\u1109\u1175\u11AB\u110B\u116D\u11BC\n\u1109\u1175\u11AB\u110C\u1166\u1111\u116E\u11B7\n\u1109\u1175\u11AB\u110E\u1165\u11BC\n\u1109\u1175\u11AB\u110E\u1166\n\u1109\u1175\u11AB\u1112\u116A\n\u1109\u1175\u11AF\u1100\u1161\u11B7\n\u1109\u1175\u11AF\u1102\u1162\n\u1109\u1175\u11AF\u1105\u1167\u11A8\n\u1109\u1175\u11AF\u1105\u1168\n\u1109\u1175\u11AF\u1106\u1161\u11BC\n\u1109\u1175\u11AF\u1109\u116E\n\u1109\u1175\u11AF\u1109\u1173\u11B8\n\u1109\u1175\u11AF\u1109\u1175\n\u1109\u1175\u11AF\u110C\u1161\u11BC\n\u1109\u1175\u11AF\u110C\u1165\u11BC\n\u1109\u1175\u11AF\u110C\u1175\u11AF\u110C\u1165\u11A8\n\u1109\u1175\u11AF\u110E\u1165\u11AB\n\u1109\u1175\u11AF\u110E\u1166\n\u1109\u1175\u11AF\u110F\u1165\u11BA\n\u1109\u1175\u11AF\u1110\u1162\n\u1109\u1175\u11AF\u1111\u1162\n\u1109\u1175\u11AF\u1112\u1165\u11B7\n\u1109\u1175\u11AF\u1112\u1167\u11AB\n\u1109\u1175\u11B7\u1105\u1175\n\u1109\u1175\u11B7\u1107\u116E\u1105\u1173\u11B7\n\u1109\u1175\u11B7\u1109\u1161\n\u1109\u1175\u11B7\u110C\u1161\u11BC\n\u1109\u1175\u11B7\u110C\u1165\u11BC\n\u1109\u1175\u11B7\u1111\u1161\u11AB\n\u110A\u1161\u11BC\u1103\u116E\u11BC\u110B\u1175\n\u110A\u1175\u1105\u1173\u11B7\n\u110A\u1175\u110B\u1161\u11BA\n\u110B\u1161\u1100\u1161\u110A\u1175\n\u110B\u1161\u1102\u1161\u110B\u116E\u11AB\u1109\u1165\n\u110B\u1161\u1103\u1173\u1102\u1175\u11B7\n\u110B\u1161\u1103\u1173\u11AF\n\u110B\u1161\u1109\u1171\u110B\u116E\u11B7\n\u110B\u1161\u1109\u1173\u1111\u1161\u11AF\u1110\u1173\n\u110B\u1161\u1109\u1175\u110B\u1161\n\u110B\u1161\u110B\u116E\u11AF\u1105\u1165\n\u110B\u1161\u110C\u1165\u110A\u1175\n\u110B\u1161\u110C\u116E\u11B7\u1106\u1161\n\u110B\u1161\u110C\u1175\u11A8\n\u110B\u1161\u110E\u1175\u11B7\n\u110B\u1161\u1111\u1161\u1110\u1173\n\u110B\u1161\u1111\u1173\u1105\u1175\u110F\u1161\n\u110B\u1161\u1111\u1173\u11B7\n\u110B\u1161\u1112\u1169\u11B8\n\u110B\u1161\u1112\u1173\u11AB\n\u110B\u1161\u11A8\u1100\u1175\n\u110B\u1161\u11A8\u1106\u1169\u11BC\n\u110B\u1161\u11A8\u1109\u116E\n\u110B\u1161\u11AB\u1100\u1162\n\u110B\u1161\u11AB\u1100\u1167\u11BC\n\u110B\u1161\u11AB\u1100\u116A\n\u110B\u1161\u11AB\u1102\u1162\n\u110B\u1161\u11AB\u1102\u1167\u11BC\n\u110B\u1161\u11AB\u1103\u1169\u11BC\n\u110B\u1161\u11AB\u1107\u1161\u11BC\n\u110B\u1161\u11AB\u1107\u116E\n\u110B\u1161\u11AB\u110C\u116E\n\u110B\u1161\u11AF\u1105\u116E\u1106\u1175\u1102\u1172\u11B7\n\u110B\u1161\u11AF\u110F\u1169\u110B\u1169\u11AF\n\u110B\u1161\u11B7\u1109\u1175\n\u110B\u1161\u11B7\u110F\u1165\u11BA\n\u110B\u1161\u11B8\u1105\u1167\u11A8\n\u110B\u1161\u11C1\u1102\u1161\u11AF\n\u110B\u1161\u11C1\u1106\u116E\u11AB\n\u110B\u1162\u110B\u1175\u11AB\n\u110B\u1162\u110C\u1165\u11BC\n\u110B\u1162\u11A8\u1109\u116E\n\u110B\u1162\u11AF\u1107\u1165\u11B7\n\u110B\u1163\u1100\u1161\u11AB\n\u110B\u1163\u1103\u1161\u11AB\n\u110B\u1163\u110B\u1169\u11BC\n\u110B\u1163\u11A8\u1100\u1161\u11AB\n\u110B\u1163\u11A8\u1100\u116E\u11A8\n\u110B\u1163\u11A8\u1109\u1169\u11A8\n\u110B\u1163\u11A8\u1109\u116E\n\u110B\u1163\u11A8\u110C\u1165\u11B7\n\u110B\u1163\u11A8\u1111\u116E\u11B7\n\u110B\u1163\u11A8\u1112\u1169\u11AB\u1102\u1167\n\u110B\u1163\u11BC\u1102\u1167\u11B7\n\u110B\u1163\u11BC\u1105\u1167\u11A8\n\u110B\u1163\u11BC\u1106\u1161\u11AF\n\u110B\u1163\u11BC\u1107\u1162\u110E\u116E\n\u110B\u1163\u11BC\u110C\u116E\n\u110B\u1163\u11BC\u1111\u1161\n\u110B\u1165\u1103\u116E\u11B7\n\u110B\u1165\u1105\u1167\u110B\u116E\u11B7\n\u110B\u1165\u1105\u1173\u11AB\n\u110B\u1165\u110C\u1166\u11BA\u1107\u1161\u11B7\n\u110B\u1165\u110D\u1162\u11BB\u1103\u1173\u11AB\n\u110B\u1165\u110D\u1165\u1103\u1161\u1100\u1161\n\u110B\u1165\u110D\u1165\u11AB\u110C\u1175\n\u110B\u1165\u11AB\u1102\u1175\n\u110B\u1165\u11AB\u1103\u1165\u11A8\n\u110B\u1165\u11AB\u1105\u1169\u11AB\n\u110B\u1165\u11AB\u110B\u1165\n\u110B\u1165\u11AF\u1100\u116E\u11AF\n\u110B\u1165\u11AF\u1105\u1173\u11AB\n\u110B\u1165\u11AF\u110B\u1173\u11B7\n\u110B\u1165\u11AF\u1111\u1175\u11BA\n\u110B\u1165\u11B7\u1106\u1161\n\u110B\u1165\u11B8\u1106\u116E\n\u110B\u1165\u11B8\u110C\u1169\u11BC\n\u110B\u1165\u11B8\u110E\u1166\n\u110B\u1165\u11BC\u1103\u1165\u11BC\u110B\u1175\n\u110B\u1165\u11BC\u1106\u1161\u11BC\n\u110B\u1165\u11BC\u1110\u1165\u1105\u1175\n\u110B\u1165\u11BD\u1100\u1173\u110C\u1166\n\u110B\u1166\u1102\u1165\u110C\u1175\n\u110B\u1166\u110B\u1165\u110F\u1165\u11AB\n\u110B\u1166\u11AB\u110C\u1175\u11AB\n\u110B\u1167\u1100\u1165\u11AB\n\u110B\u1167\u1100\u1169\u1109\u1162\u11BC\n\u110B\u1167\u1100\u116A\u11AB\n\u110B\u1167\u1100\u116E\u11AB\n\u110B\u1167\u1100\u116F\u11AB\n\u110B\u1167\u1103\u1162\u1109\u1162\u11BC\n\u110B\u1167\u1103\u1165\u11B2\n\u110B\u1167\u1103\u1169\u11BC\u1109\u1162\u11BC\n\u110B\u1167\u1103\u1173\u11AB\n\u110B\u1167\u1105\u1169\u11AB\n\u110B\u1167\u1105\u1173\u11B7\n\u110B\u1167\u1109\u1165\u11BA\n\u110B\u1167\u1109\u1165\u11BC\n\u110B\u1167\u110B\u116A\u11BC\n\u110B\u1167\u110B\u1175\u11AB\n\u110B\u1167\u110C\u1165\u11AB\u1112\u1175\n\u110B\u1167\u110C\u1175\u11A8\u110B\u116F\u11AB\n\u110B\u1167\u1112\u1161\u11A8\u1109\u1162\u11BC\n\u110B\u1167\u1112\u1162\u11BC\n\u110B\u1167\u11A8\u1109\u1161\n\u110B\u1167\u11A8\u1109\u1175\n\u110B\u1167\u11A8\u1112\u1161\u11AF\n\u110B\u1167\u11AB\u1100\u1167\u11AF\n\u110B\u1167\u11AB\u1100\u116E\n\u110B\u1167\u11AB\u1100\u1173\u11A8\n\u110B\u1167\u11AB\u1100\u1175\n\u110B\u1167\u11AB\u1105\u1161\u11A8\n\u110B\u1167\u11AB\u1109\u1165\u11AF\n\u110B\u1167\u11AB\u1109\u1166\n\u110B\u1167\u11AB\u1109\u1169\u11A8\n\u110B\u1167\u11AB\u1109\u1173\u11B8\n\u110B\u1167\u11AB\u110B\u1162\n\u110B\u1167\u11AB\u110B\u1168\u110B\u1175\u11AB\n\u110B\u1167\u11AB\u110B\u1175\u11AB\n\u110B\u1167\u11AB\u110C\u1161\u11BC\n\u110B\u1167\u11AB\u110C\u116E\n\u110B\u1167\u11AB\u110E\u116E\u11AF\n\u110B\u1167\u11AB\u1111\u1175\u11AF\n\u110B\u1167\u11AB\u1112\u1161\u11B8\n\u110B\u1167\u11AB\u1112\u1172\n\u110B\u1167\u11AF\u1100\u1175\n\u110B\u1167\u11AF\u1106\u1162\n\u110B\u1167\u11AF\u1109\u116C\n\u110B\u1167\u11AF\u1109\u1175\u11B7\u1112\u1175\n\u110B\u1167\u11AF\u110C\u1165\u11BC\n\u110B\u1167\u11AF\u110E\u1161\n\u110B\u1167\u11AF\u1112\u1173\u11AF\n\u110B\u1167\u11B7\u1105\u1167\n\u110B\u1167\u11B8\u1109\u1165\n\u110B\u1167\u11BC\u1100\u116E\u11A8\n\u110B\u1167\u11BC\u1102\u1161\u11B7\n\u110B\u1167\u11BC\u1109\u1161\u11BC\n\u110B\u1167\u11BC\u110B\u1163\u11BC\n\u110B\u1167\u11BC\u110B\u1167\u11A8\n\u110B\u1167\u11BC\u110B\u116E\u11BC\n\u110B\u1167\u11BC\u110B\u116F\u11AB\u1112\u1175\n\u110B\u1167\u11BC\u1112\u1161\n\u110B\u1167\u11BC\u1112\u1163\u11BC\n\u110B\u1167\u11BC\u1112\u1169\u11AB\n\u110B\u1167\u11BC\u1112\u116A\n\u110B\u1167\u11C1\u1100\u116E\u1105\u1175\n\u110B\u1167\u11C1\u1107\u1161\u11BC\n\u110B\u1167\u11C1\u110C\u1175\u11B8\n\u110B\u1168\u1100\u1161\u11B7\n\u110B\u1168\u1100\u1173\u11B7\n\u110B\u1168\u1107\u1161\u11BC\n\u110B\u1168\u1109\u1161\u11AB\n\u110B\u1168\u1109\u1161\u11BC\n\u110B\u1168\u1109\u1165\u11AB\n\u110B\u1168\u1109\u116E\u11AF\n\u110B\u1168\u1109\u1173\u11B8\n\u110B\u1168\u1109\u1175\u11A8\u110C\u1161\u11BC\n\u110B\u1168\u110B\u1163\u11A8\n\u110B\u1168\u110C\u1165\u11AB\n\u110B\u1168\u110C\u1165\u11AF\n\u110B\u1168\u110C\u1165\u11BC\n\u110B\u1168\u110F\u1165\u11AB\u1103\u1162\n\u110B\u1168\u11BA\u1102\u1161\u11AF\n\u110B\u1169\u1102\u1173\u11AF\n\u110B\u1169\u1105\u1161\u11A8\n\u110B\u1169\u1105\u1162\u11BA\u1103\u1169\u11BC\u110B\u1161\u11AB\n\u110B\u1169\u1105\u1166\u11AB\u110C\u1175\n\u110B\u1169\u1105\u1169\u110C\u1175\n\u110B\u1169\u1105\u1173\u11AB\u1107\u1161\u11AF\n\u110B\u1169\u1107\u1173\u11AB\n\u110B\u1169\u1109\u1175\u11B8\n\u110B\u1169\u110B\u1167\u11B7\n\u110B\u1169\u110B\u116F\u11AF\n\u110B\u1169\u110C\u1165\u11AB\n\u110B\u1169\u110C\u1175\u11A8\n\u110B\u1169\u110C\u1175\u11BC\u110B\u1165\n\u110B\u1169\u1111\u1166\u1105\u1161\n\u110B\u1169\u1111\u1175\u1109\u1173\u1110\u1166\u11AF\n\u110B\u1169\u1112\u1175\u1105\u1167\n\u110B\u1169\u11A8\u1109\u1161\u11BC\n\u110B\u1169\u11A8\u1109\u116E\u1109\u116E\n\u110B\u1169\u11AB\u1100\u1161\u11BD\n\u110B\u1169\u11AB\u1105\u1161\u110B\u1175\u11AB\n\u110B\u1169\u11AB\u1106\u1169\u11B7\n\u110B\u1169\u11AB\u110C\u1169\u11BC\u110B\u1175\u11AF\n\u110B\u1169\u11AB\u1110\u1169\u11BC\n\u110B\u1169\u11AF\u1100\u1161\u110B\u1173\u11AF\n\u110B\u1169\u11AF\u1105\u1175\u11B7\u1111\u1175\u11A8\n\u110B\u1169\u11AF\u1112\u1162\n\u110B\u1169\u11BA\u110E\u1161\u1105\u1175\u11B7\n\u110B\u116A\u110B\u1175\u1109\u1167\u110E\u1173\n\u110B\u116A\u110B\u1175\u11AB\n\u110B\u116A\u11AB\u1109\u1165\u11BC\n\u110B\u116A\u11AB\u110C\u1165\u11AB\n\u110B\u116A\u11BC\u1107\u1175\n\u110B\u116A\u11BC\u110C\u1161\n\u110B\u116B\u1102\u1163\u1112\u1161\u1106\u1167\u11AB\n\u110B\u116B\u11AB\u110C\u1175\n\u110B\u116C\u1100\u1161\u11BA\u110C\u1175\u11B8\n\u110B\u116C\u1100\u116E\u11A8\n\u110B\u116C\u1105\u1169\u110B\u116E\u11B7\n\u110B\u116C\u1109\u1161\u11B7\u110E\u1169\u11AB\n\u110B\u116C\u110E\u116E\u11AF\n\u110B\u116C\u110E\u1175\u11B7\n\u110B\u116C\u1112\u1161\u11AF\u1106\u1165\u1102\u1175\n\u110B\u116C\u11AB\u1107\u1161\u11AF\n\u110B\u116C\u11AB\u1109\u1169\u11AB\n\u110B\u116C\u11AB\u110D\u1169\u11A8\n\u110B\u116D\u1100\u1173\u11B7\n\u110B\u116D\u110B\u1175\u11AF\n\u110B\u116D\u110C\u1173\u11B7\n\u110B\u116D\u110E\u1165\u11BC\n\u110B\u116D\u11BC\u1100\u1175\n\u110B\u116D\u11BC\u1109\u1165\n\u110B\u116D\u11BC\u110B\u1165\n\u110B\u116E\u1109\u1161\u11AB\n\u110B\u116E\u1109\u1165\u11AB\n\u110B\u116E\u1109\u1173\u11BC\n\u110B\u116E\u110B\u1167\u11AB\u1112\u1175\n\u110B\u116E\u110C\u1165\u11BC\n\u110B\u116E\u110E\u1166\u1100\u116E\u11A8\n\u110B\u116E\u1111\u1167\u11AB\n\u110B\u116E\u11AB\u1103\u1169\u11BC\n\u110B\u116E\u11AB\u1106\u1167\u11BC\n\u110B\u116E\u11AB\u1107\u1161\u11AB\n\u110B\u116E\u11AB\u110C\u1165\u11AB\n\u110B\u116E\u11AB\u1112\u1162\u11BC\n\u110B\u116E\u11AF\u1109\u1161\u11AB\n\u110B\u116E\u11AF\u110B\u1173\u11B7\n\u110B\u116E\u11B7\u110C\u1175\u11A8\u110B\u1175\u11B7\n\u110B\u116E\u11BA\u110B\u1165\u1105\u1173\u11AB\n\u110B\u116E\u11BA\u110B\u1173\u11B7\n\u110B\u116F\u1102\u1161\u11A8\n\u110B\u116F\u11AB\u1100\u1169\n\u110B\u116F\u11AB\u1105\u1162\n\u110B\u116F\u11AB\u1109\u1165\n\u110B\u116F\u11AB\u1109\u116E\u11BC\u110B\u1175\n\u110B\u116F\u11AB\u110B\u1175\u11AB\n\u110B\u116F\u11AB\u110C\u1161\u11BC\n\u110B\u116F\u11AB\u1111\u1175\u1109\u1173\n\u110B\u116F\u11AF\u1100\u1173\u11B8\n\u110B\u116F\u11AF\u1103\u1173\u110F\u1165\u11B8\n\u110B\u116F\u11AF\u1109\u1166\n\u110B\u116F\u11AF\u110B\u116D\u110B\u1175\u11AF\n\u110B\u1170\u110B\u1175\u1110\u1165\n\u110B\u1171\u1107\u1161\u11AB\n\u110B\u1171\u1107\u1165\u11B8\n\u110B\u1171\u1109\u1165\u11BC\n\u110B\u1171\u110B\u116F\u11AB\n\u110B\u1171\u1112\u1165\u11B7\n\u110B\u1171\u1112\u1167\u11B8\n\u110B\u1171\u11BA\u1109\u1161\u1105\u1161\u11B7\n\u110B\u1172\u1102\u1161\u11AB\u1112\u1175\n\u110B\u1172\u1105\u1165\u11B8\n\u110B\u1172\u1106\u1167\u11BC\n\u110B\u1172\u1106\u116E\u11AF\n\u110B\u1172\u1109\u1161\u11AB\n\u110B\u1172\u110C\u1165\u11A8\n\u110B\u1172\u110E\u1175\u110B\u116F\u11AB\n\u110B\u1172\u1112\u1161\u11A8\n\u110B\u1172\u1112\u1162\u11BC\n\u110B\u1172\u1112\u1167\u11BC\n\u110B\u1172\u11A8\u1100\u116E\u11AB\n\u110B\u1172\u11A8\u1109\u1161\u11BC\n\u110B\u1172\u11A8\u1109\u1175\u11B8\n\u110B\u1172\u11A8\u110E\u1166\n\u110B\u1173\u11AB\u1112\u1162\u11BC\n\u110B\u1173\u11B7\u1105\u1167\u11A8\n\u110B\u1173\u11B7\u1105\u116D\n\u110B\u1173\u11B7\u1107\u1161\u11AB\n\u110B\u1173\u11B7\u1109\u1165\u11BC\n\u110B\u1173\u11B7\u1109\u1175\u11A8\n\u110B\u1173\u11B7\u110B\u1161\u11A8\n\u110B\u1173\u11B7\u110C\u116E\n\u110B\u1174\u1100\u1167\u11AB\n\u110B\u1174\u1102\u1169\u11AB\n\u110B\u1174\u1106\u116E\u11AB\n\u110B\u1174\u1107\u1169\u11A8\n\u110B\u1174\u1109\u1175\u11A8\n\u110B\u1174\u1109\u1175\u11B7\n\u110B\u1174\u110B\u116C\u1105\u1169\n\u110B\u1174\u110B\u116D\u11A8\n\u110B\u1174\u110B\u116F\u11AB\n\u110B\u1174\u1112\u1161\u11A8\n\u110B\u1175\u1100\u1165\u11BA\n\u110B\u1175\u1100\u1169\u11BA\n\u110B\u1175\u1102\u1167\u11B7\n\u110B\u1175\u1102\u1169\u11B7\n\u110B\u1175\u1103\u1161\u11AF\n\u110B\u1175\u1103\u1162\u1105\u1169\n\u110B\u1175\u1103\u1169\u11BC\n\u110B\u1175\u1105\u1165\u11C2\u1100\u1166\n\u110B\u1175\u1105\u1167\u11A8\u1109\u1165\n\u110B\u1175\u1105\u1169\u11AB\u110C\u1165\u11A8\n\u110B\u1175\u1105\u1173\u11B7\n\u110B\u1175\u1106\u1175\u11AB\n\u110B\u1175\u1107\u1161\u11AF\u1109\u1169\n\u110B\u1175\u1107\u1167\u11AF\n\u110B\u1175\u1107\u116E\u11AF\n\u110B\u1175\u1108\u1161\u11AF\n\u110B\u1175\u1109\u1161\u11BC\n\u110B\u1175\u1109\u1165\u11BC\n\u110B\u1175\u1109\u1173\u11AF\n\u110B\u1175\u110B\u1163\u1100\u1175\n\u110B\u1175\u110B\u116D\u11BC\n\u110B\u1175\u110B\u116E\u11BA\n\u110B\u1175\u110B\u116F\u11AF\n\u110B\u1175\u110B\u1173\u11A8\u1100\u1169\n\u110B\u1175\u110B\u1175\u11A8\n\u110B\u1175\u110C\u1165\u11AB\n\u110B\u1175\u110C\u116E\u11BC\n\u110B\u1175\u1110\u1173\u11AE\u1102\u1161\u11AF\n\u110B\u1175\u1110\u1173\u11AF\n\u110B\u1175\u1112\u1169\u11AB\n\u110B\u1175\u11AB\u1100\u1161\u11AB\n\u110B\u1175\u11AB\u1100\u1167\u11A8\n\u110B\u1175\u11AB\u1100\u1169\u11BC\n\u110B\u1175\u11AB\u1100\u116E\n\u110B\u1175\u11AB\u1100\u1173\u11AB\n\u110B\u1175\u11AB\u1100\u1175\n\u110B\u1175\u11AB\u1103\u1169\n\u110B\u1175\u11AB\u1105\u1172\n\u110B\u1175\u11AB\u1106\u116E\u11AF\n\u110B\u1175\u11AB\u1109\u1162\u11BC\n\u110B\u1175\u11AB\u1109\u116B\n\u110B\u1175\u11AB\u110B\u1167\u11AB\n\u110B\u1175\u11AB\u110B\u116F\u11AB\n\u110B\u1175\u11AB\u110C\u1162\n\u110B\u1175\u11AB\u110C\u1169\u11BC\n\u110B\u1175\u11AB\u110E\u1165\u11AB\n\u110B\u1175\u11AB\u110E\u1166\n\u110B\u1175\u11AB\u1110\u1165\u1102\u1166\u11BA\n\u110B\u1175\u11AB\u1112\u1161\n\u110B\u1175\u11AB\u1112\u1167\u11BC\n\u110B\u1175\u11AF\u1100\u1169\u11B8\n\u110B\u1175\u11AF\u1100\u1175\n\u110B\u1175\u11AF\u1103\u1161\u11AB\n\u110B\u1175\u11AF\u1103\u1162\n\u110B\u1175\u11AF\u1103\u1173\u11BC\n\u110B\u1175\u11AF\u1107\u1161\u11AB\n\u110B\u1175\u11AF\u1107\u1169\u11AB\n\u110B\u1175\u11AF\u1107\u116E\n\u110B\u1175\u11AF\u1109\u1161\u11BC\n\u110B\u1175\u11AF\u1109\u1162\u11BC\n\u110B\u1175\u11AF\u1109\u1169\u11AB\n\u110B\u1175\u11AF\u110B\u116D\u110B\u1175\u11AF\n\u110B\u1175\u11AF\u110B\u116F\u11AF\n\u110B\u1175\u11AF\u110C\u1165\u11BC\n\u110B\u1175\u11AF\u110C\u1169\u11BC\n\u110B\u1175\u11AF\u110C\u116E\u110B\u1175\u11AF\n\u110B\u1175\u11AF\u110D\u1175\u11A8\n\u110B\u1175\u11AF\u110E\u1166\n\u110B\u1175\u11AF\u110E\u1175\n\u110B\u1175\u11AF\u1112\u1162\u11BC\n\u110B\u1175\u11AF\u1112\u116C\u110B\u116D\u11BC\n\u110B\u1175\u11B7\u1100\u1173\u11B7\n\u110B\u1175\u11B7\u1106\u116E\n\u110B\u1175\u11B8\u1103\u1162\n\u110B\u1175\u11B8\u1105\u1167\u11A8\n\u110B\u1175\u11B8\u1106\u1161\u11BA\n\u110B\u1175\u11B8\u1109\u1161\n\u110B\u1175\u11B8\u1109\u116E\u11AF\n\u110B\u1175\u11B8\u1109\u1175\n\u110B\u1175\u11B8\u110B\u116F\u11AB\n\u110B\u1175\u11B8\u110C\u1161\u11BC\n\u110B\u1175\u11B8\u1112\u1161\u11A8\n\u110C\u1161\u1100\u1161\u110B\u116D\u11BC\n\u110C\u1161\u1100\u1167\u11A8\n\u110C\u1161\u1100\u1173\u11A8\n\u110C\u1161\u1103\u1169\u11BC\n\u110C\u1161\u1105\u1161\u11BC\n\u110C\u1161\u1107\u116E\u1109\u1175\u11B7\n\u110C\u1161\u1109\u1175\u11A8\n\u110C\u1161\u1109\u1175\u11AB\n\u110C\u1161\u110B\u1167\u11AB\n\u110C\u1161\u110B\u116F\u11AB\n\u110C\u1161\u110B\u1172\u11AF\n\u110C\u1161\u110C\u1165\u11AB\u1100\u1165\n\u110C\u1161\u110C\u1165\u11BC\n\u110C\u1161\u110C\u1169\u11AB\u1109\u1175\u11B7\n\u110C\u1161\u1111\u1161\u11AB\n\u110C\u1161\u11A8\u1100\u1161\n\u110C\u1161\u11A8\u1102\u1167\u11AB\n\u110C\u1161\u11A8\u1109\u1165\u11BC\n\u110C\u1161\u11A8\u110B\u1165\u11B8\n\u110C\u1161\u11A8\u110B\u116D\u11BC\n\u110C\u1161\u11A8\u110B\u1173\u11AB\u1104\u1161\u11AF\n\u110C\u1161\u11A8\u1111\u116E\u11B7\n\u110C\u1161\u11AB\u1103\u1175\n\u110C\u1161\u11AB\u1104\u1173\u11A8\n\u110C\u1161\u11AB\u110E\u1175\n\u110C\u1161\u11AF\u1106\u1169\u11BA\n\u110C\u1161\u11B7\u1101\u1161\u11AB\n\u110C\u1161\u11B7\u1109\u116E\u1112\u1161\u11B7\n\u110C\u1161\u11B7\u1109\u1175\n\u110C\u1161\u11B7\u110B\u1169\u11BA\n\u110C\u1161\u11B7\u110C\u1161\u1105\u1175\n\u110C\u1161\u11B8\u110C\u1175\n\u110C\u1161\u11BC\u1100\u116A\u11AB\n\u110C\u1161\u11BC\u1100\u116E\u11AB\n\u110C\u1161\u11BC\u1100\u1175\u1100\u1161\u11AB\n\u110C\u1161\u11BC\u1105\u1162\n\u110C\u1161\u11BC\u1105\u1168\n\u110C\u1161\u11BC\u1105\u1173\n\u110C\u1161\u11BC\u1106\u1161\n\u110C\u1161\u11BC\u1106\u1167\u11AB\n\u110C\u1161\u11BC\u1106\u1169\n\u110C\u1161\u11BC\u1106\u1175\n\u110C\u1161\u11BC\u1107\u1175\n\u110C\u1161\u11BC\u1109\u1161\n\u110C\u1161\u11BC\u1109\u1169\n\u110C\u1161\u11BC\u1109\u1175\u11A8\n\u110C\u1161\u11BC\u110B\u1162\u110B\u1175\u11AB\n\u110C\u1161\u11BC\u110B\u1175\u11AB\n\u110C\u1161\u11BC\u110C\u1165\u11B7\n\u110C\u1161\u11BC\u110E\u1161\n\u110C\u1161\u11BC\u1112\u1161\u11A8\u1100\u1173\u11B7\n\u110C\u1162\u1102\u1173\u11BC\n\u110C\u1162\u1108\u1161\u11AF\u1105\u1175\n\u110C\u1162\u1109\u1161\u11AB\n\u110C\u1162\u1109\u1162\u11BC\n\u110C\u1162\u110C\u1161\u11A8\u1102\u1167\u11AB\n\u110C\u1162\u110C\u1165\u11BC\n\u110C\u1162\u110E\u1162\u1100\u1175\n\u110C\u1162\u1111\u1161\u11AB\n\u110C\u1162\u1112\u1161\u11A8\n\u110C\u1162\u1112\u116A\u11AF\u110B\u116D\u11BC\n\u110C\u1165\u1100\u1165\u11BA\n\u110C\u1165\u1100\u1169\u1105\u1175\n\u110C\u1165\u1100\u1169\u11BA\n\u110C\u1165\u1102\u1167\u11A8\n\u110C\u1165\u1105\u1165\u11AB\n\u110C\u1165\u1105\u1165\u11C2\u1100\u1166\n\u110C\u1165\u1107\u1165\u11AB\n\u110C\u1165\u110B\u116E\u11AF\n\u110C\u1165\u110C\u1165\u11AF\u1105\u1169\n\u110C\u1165\u110E\u116E\u11A8\n\u110C\u1165\u11A8\u1100\u1173\u11A8\n\u110C\u1165\u11A8\u1103\u1161\u11BC\u1112\u1175\n\u110C\u1165\u11A8\u1109\u1165\u11BC\n\u110C\u1165\u11A8\u110B\u116D\u11BC\n\u110C\u1165\u11A8\u110B\u1173\u11BC\n\u110C\u1165\u11AB\u1100\u1162\n\u110C\u1165\u11AB\u1100\u1169\u11BC\n\u110C\u1165\u11AB\u1100\u1175\n\u110C\u1165\u11AB\u1103\u1161\u11AF\n\u110C\u1165\u11AB\u1105\u1161\u1103\u1169\n\u110C\u1165\u11AB\u1106\u1161\u11BC\n\u110C\u1165\u11AB\u1106\u116E\u11AB\n\u110C\u1165\u11AB\u1107\u1161\u11AB\n\u110C\u1165\u11AB\u1107\u116E\n\u110C\u1165\u11AB\u1109\u1166\n\u110C\u1165\u11AB\u1109\u1175\n\u110C\u1165\u11AB\u110B\u116D\u11BC\n\u110C\u1165\u11AB\u110C\u1161\n\u110C\u1165\u11AB\u110C\u1162\u11BC\n\u110C\u1165\u11AB\u110C\u116E\n\u110C\u1165\u11AB\u110E\u1165\u11AF\n\u110C\u1165\u11AB\u110E\u1166\n\u110C\u1165\u11AB\u1110\u1169\u11BC\n\u110C\u1165\u11AB\u1112\u1167\n\u110C\u1165\u11AB\u1112\u116E\n\u110C\u1165\u11AF\u1103\u1162\n\u110C\u1165\u11AF\u1106\u1161\u11BC\n\u110C\u1165\u11AF\u1107\u1161\u11AB\n\u110C\u1165\u11AF\u110B\u1163\u11A8\n\u110C\u1165\u11AF\u110E\u1161\n\u110C\u1165\u11B7\u1100\u1165\u11B7\n\u110C\u1165\u11B7\u1109\u116E\n\u110C\u1165\u11B7\u1109\u1175\u11B7\n\u110C\u1165\u11B7\u110B\u116F\u11AB\n\u110C\u1165\u11B7\u110C\u1165\u11B7\n\u110C\u1165\u11B7\u110E\u1161\n\u110C\u1165\u11B8\u1100\u1173\u11AB\n\u110C\u1165\u11B8\u1109\u1175\n\u110C\u1165\u11B8\u110E\u1169\u11A8\n\u110C\u1165\u11BA\u1100\u1161\u1105\u1161\u11A8\n\u110C\u1165\u11BC\u1100\u1165\u110C\u1161\u11BC\n\u110C\u1165\u11BC\u1103\u1169\n\u110C\u1165\u11BC\u1105\u1172\u110C\u1161\u11BC\n\u110C\u1165\u11BC\u1105\u1175\n\u110C\u1165\u11BC\u1106\u1161\u11AF\n\u110C\u1165\u11BC\u1106\u1167\u11AB\n\u110C\u1165\u11BC\u1106\u116E\u11AB\n\u110C\u1165\u11BC\u1107\u1161\u11AB\u1103\u1162\n\u110C\u1165\u11BC\u1107\u1169\n\u110C\u1165\u11BC\u1107\u116E\n\u110C\u1165\u11BC\u1107\u1175\n\u110C\u1165\u11BC\u1109\u1161\u11BC\n\u110C\u1165\u11BC\u1109\u1165\u11BC\n\u110C\u1165\u11BC\u110B\u1169\n\u110C\u1165\u11BC\u110B\u116F\u11AB\n\u110C\u1165\u11BC\u110C\u1161\u11BC\n\u110C\u1165\u11BC\u110C\u1175\n\u110C\u1165\u11BC\u110E\u1175\n\u110C\u1165\u11BC\u1112\u116A\u11A8\u1112\u1175\n\u110C\u1166\u1100\u1169\u11BC\n\u110C\u1166\u1100\u116A\u110C\u1165\u11B7\n\u110C\u1166\u1103\u1162\u1105\u1169\n\u110C\u1166\u1106\u1169\u11A8\n\u110C\u1166\u1107\u1161\u11AF\n\u110C\u1166\u1107\u1165\u11B8\n\u110C\u1166\u1109\u1161\u11BA\u1102\u1161\u11AF\n\u110C\u1166\u110B\u1161\u11AB\n\u110C\u1166\u110B\u1175\u11AF\n\u110C\u1166\u110C\u1161\u11A8\n\u110C\u1166\u110C\u116E\u1103\u1169\n\u110C\u1166\u110E\u116E\u11AF\n\u110C\u1166\u1111\u116E\u11B7\n\u110C\u1166\u1112\u1161\u11AB\n\u110C\u1169\u1100\u1161\u11A8\n\u110C\u1169\u1100\u1165\u11AB\n\u110C\u1169\u1100\u1173\u11B7\n\u110C\u1169\u1100\u1175\u11BC\n\u110C\u1169\u1106\u1167\u11BC\n\u110C\u1169\u1106\u1175\u1105\u116D\n\u110C\u1169\u1109\u1161\u11BC\n\u110C\u1169\u1109\u1165\u11AB\n\u110C\u1169\u110B\u116D\u11BC\u1112\u1175\n\u110C\u1169\u110C\u1165\u11AF\n\u110C\u1169\u110C\u1165\u11BC\n\u110C\u1169\u110C\u1175\u11A8\n\u110C\u1169\u11AB\u1103\u1162\u11BA\u1106\u1161\u11AF\n\u110C\u1169\u11AB\u110C\u1162\n\u110C\u1169\u11AF\u110B\u1165\u11B8\n\u110C\u1169\u11AF\u110B\u1173\u11B7\n\u110C\u1169\u11BC\u1100\u116D\n\u110C\u1169\u11BC\u1105\u1169\n\u110C\u1169\u11BC\u1105\u1172\n\u110C\u1169\u11BC\u1109\u1169\u1105\u1175\n\u110C\u1169\u11BC\u110B\u1165\u11B8\u110B\u116F\u11AB\n\u110C\u1169\u11BC\u110C\u1169\u11BC\n\u110C\u1169\u11BC\u1112\u1161\u11B8\n\u110C\u116A\u1109\u1165\u11A8\n\u110C\u116C\u110B\u1175\u11AB\n\u110C\u116E\u1100\u116A\u11AB\u110C\u1165\u11A8\n\u110C\u116E\u1105\u1173\u11B7\n\u110C\u116E\u1106\u1161\u11AF\n\u110C\u116E\u1106\u1165\u1102\u1175\n\u110C\u116E\u1106\u1165\u11A8\n\u110C\u116E\u1106\u116E\u11AB\n\u110C\u116E\u1106\u1175\u11AB\n\u110C\u116E\u1107\u1161\u11BC\n\u110C\u116E\u1107\u1167\u11AB\n\u110C\u116E\u1109\u1175\u11A8\n\u110C\u116E\u110B\u1175\u11AB\n\u110C\u116E\u110B\u1175\u11AF\n\u110C\u116E\u110C\u1161\u11BC\n\u110C\u116E\u110C\u1165\u11AB\u110C\u1161\n\u110C\u116E\u1110\u1162\u11A8\n\u110C\u116E\u11AB\u1107\u1175\n\u110C\u116E\u11AF\u1100\u1165\u1105\u1175\n\u110C\u116E\u11AF\u1100\u1175\n\u110C\u116E\u11AF\u1106\u116E\u1102\u1174\n\u110C\u116E\u11BC\u1100\u1161\u11AB\n\u110C\u116E\u11BC\u1100\u1168\u1107\u1161\u11BC\u1109\u1169\u11BC\n\u110C\u116E\u11BC\u1100\u116E\u11A8\n\u110C\u116E\u11BC\u1102\u1167\u11AB\n\u110C\u116E\u11BC\u1103\u1161\u11AB\n\u110C\u116E\u11BC\u1103\u1169\u11A8\n\u110C\u116E\u11BC\u1107\u1161\u11AB\n\u110C\u116E\u11BC\u1107\u116E\n\u110C\u116E\u11BC\u1109\u1166\n\u110C\u116E\u11BC\u1109\u1169\u1100\u1175\u110B\u1165\u11B8\n\u110C\u116E\u11BC\u1109\u116E\u11AB\n\u110C\u116E\u11BC\u110B\u1161\u11BC\n\u110C\u116E\u11BC\u110B\u116D\n\u110C\u116E\u11BC\u1112\u1161\u11A8\u1100\u116D\n\u110C\u1173\u11A8\u1109\u1165\u11A8\n\u110C\u1173\u11A8\u1109\u1175\n\u110C\u1173\u11AF\u1100\u1165\u110B\u116E\u11B7\n\u110C\u1173\u11BC\u1100\u1161\n\u110C\u1173\u11BC\u1100\u1165\n\u110C\u1173\u11BC\u1100\u116F\u11AB\n\u110C\u1173\u11BC\u1109\u1161\u11BC\n\u110C\u1173\u11BC\u1109\u1166\n\u110C\u1175\u1100\u1161\u11A8\n\u110C\u1175\u1100\u1161\u11B8\n\u110C\u1175\u1100\u1167\u11BC\n\u110C\u1175\u1100\u1173\u11A8\u1112\u1175\n\u110C\u1175\u1100\u1173\u11B7\n\u110C\u1175\u1100\u1173\u11B8\n\u110C\u1175\u1102\u1173\u11BC\n\u110C\u1175\u1105\u1173\u11B7\u1100\u1175\u11AF\n\u110C\u1175\u1105\u1175\u1109\u1161\u11AB\n\u110C\u1175\u1107\u1161\u11BC\n\u110C\u1175\u1107\u116E\u11BC\n\u110C\u1175\u1109\u1175\u11A8\n\u110C\u1175\u110B\u1167\u11A8\n\u110C\u1175\u110B\u116E\u1100\u1162\n\u110C\u1175\u110B\u116F\u11AB\n\u110C\u1175\u110C\u1165\u11A8\n\u110C\u1175\u110C\u1165\u11B7\n\u110C\u1175\u110C\u1175\u11AB\n\u110C\u1175\u110E\u116E\u11AF\n\u110C\u1175\u11A8\u1109\u1165\u11AB\n\u110C\u1175\u11A8\u110B\u1165\u11B8\n\u110C\u1175\u11A8\u110B\u116F\u11AB\n\u110C\u1175\u11A8\u110C\u1161\u11BC\n\u110C\u1175\u11AB\u1100\u1173\u11B8\n\u110C\u1175\u11AB\u1103\u1169\u11BC\n\u110C\u1175\u11AB\u1105\u1169\n\u110C\u1175\u11AB\u1105\u116D\n\u110C\u1175\u11AB\u1105\u1175\n\u110C\u1175\u11AB\u110D\u1161\n\u110C\u1175\u11AB\u110E\u1161\u11AF\n\u110C\u1175\u11AB\u110E\u116E\u11AF\n\u110C\u1175\u11AB\u1110\u1169\u11BC\n\u110C\u1175\u11AB\u1112\u1162\u11BC\n\u110C\u1175\u11AF\u1106\u116E\u11AB\n\u110C\u1175\u11AF\u1107\u1167\u11BC\n\u110C\u1175\u11AF\u1109\u1165\n\u110C\u1175\u11B7\u110C\u1161\u11A8\n\u110C\u1175\u11B8\u1103\u1161\u11AB\n\u110C\u1175\u11B8\u110B\u1161\u11AB\n\u110C\u1175\u11B8\u110C\u116E\u11BC\n\u110D\u1161\u110C\u1173\u11BC\n\u110D\u1175\u1101\u1165\u1100\u1175\n\u110E\u1161\u1102\u1161\u11B7\n\u110E\u1161\u1105\u1161\u1105\u1175\n\u110E\u1161\u1105\u1163\u11BC\n\u110E\u1161\u1105\u1175\u11B7\n\u110E\u1161\u1107\u1167\u11AF\n\u110E\u1161\u1109\u1165\u11AB\n\u110E\u1161\u110E\u1173\u11B7\n\u110E\u1161\u11A8\u1100\u1161\u11A8\n\u110E\u1161\u11AB\u1106\u116E\u11AF\n\u110E\u1161\u11AB\u1109\u1165\u11BC\n\u110E\u1161\u11B7\u1100\u1161\n\u110E\u1161\u11B7\u1100\u1175\u1105\u1173\u11B7\n\u110E\u1161\u11B7\u1109\u1162\n\u110E\u1161\u11B7\u1109\u1165\u11A8\n\u110E\u1161\u11B7\u110B\u1167\n\u110E\u1161\u11B7\u110B\u116C\n\u110E\u1161\u11B7\u110C\u1169\n\u110E\u1161\u11BA\u110C\u1161\u11AB\n\u110E\u1161\u11BC\u1100\u1161\n\u110E\u1161\u11BC\u1100\u1169\n\u110E\u1161\u11BC\u1100\u116E\n\u110E\u1161\u11BC\u1106\u116E\u11AB\n\u110E\u1161\u11BC\u1107\u1161\u11A9\n\u110E\u1161\u11BC\u110C\u1161\u11A8\n\u110E\u1161\u11BC\u110C\u1169\n\u110E\u1162\u1102\u1165\u11AF\n\u110E\u1162\u110C\u1165\u11B7\n\u110E\u1162\u11A8\u1100\u1161\u1107\u1161\u11BC\n\u110E\u1162\u11A8\u1107\u1161\u11BC\n\u110E\u1162\u11A8\u1109\u1161\u11BC\n\u110E\u1162\u11A8\u110B\u1175\u11B7\n\u110E\u1162\u11B7\u1111\u1175\u110B\u1165\u11AB\n\u110E\u1165\u1107\u1165\u11AF\n\u110E\u1165\u110B\u1173\u11B7\n\u110E\u1165\u11AB\u1100\u116E\u11A8\n\u110E\u1165\u11AB\u1103\u116E\u11BC\n\u110E\u1165\u11AB\u110C\u1161\u11BC\n\u110E\u1165\u11AB\u110C\u1162\n\u110E\u1165\u11AB\u110E\u1165\u11AB\u1112\u1175\n\u110E\u1165\u11AF\u1103\u1169\n\u110E\u1165\u11AF\u110C\u1165\u1112\u1175\n\u110E\u1165\u11AF\u1112\u1161\u11A8\n\u110E\u1165\u11BA\u1102\u1161\u11AF\n\u110E\u1165\u11BA\u110D\u1162\n\u110E\u1165\u11BC\u1102\u1167\u11AB\n\u110E\u1165\u11BC\u1107\u1161\u110C\u1175\n\u110E\u1165\u11BC\u1109\u1169\n\u110E\u1165\u11BC\u110E\u116E\u11AB\n\u110E\u1166\u1100\u1168\n\u110E\u1166\u1105\u1167\u11A8\n\u110E\u1166\u110B\u1169\u11AB\n\u110E\u1166\u110B\u1172\u11A8\n\u110E\u1166\u110C\u116E\u11BC\n\u110E\u1166\u1112\u1165\u11B7\n\u110E\u1169\u1103\u1173\u11BC\u1112\u1161\u11A8\u1109\u1162\u11BC\n\u110E\u1169\u1107\u1161\u11AB\n\u110E\u1169\u1107\u1161\u11B8\n\u110E\u1169\u1109\u1161\u11BC\u1112\u116A\n\u110E\u1169\u1109\u116E\u11AB\n\u110E\u1169\u110B\u1167\u1105\u1173\u11B7\n\u110E\u1169\u110B\u116F\u11AB\n\u110E\u1169\u110C\u1165\u1102\u1167\u11A8\n\u110E\u1169\u110C\u1165\u11B7\n\u110E\u1169\u110E\u1165\u11BC\n\u110E\u1169\u110F\u1169\u11AF\u1105\u1175\u11BA\n\u110E\u1169\u11BA\u1107\u116E\u11AF\n\u110E\u1169\u11BC\u1100\u1161\u11A8\n\u110E\u1169\u11BC\u1105\u1175\n\u110E\u1169\u11BC\u110C\u1161\u11BC\n\u110E\u116A\u11AF\u110B\u1167\u11BC\n\u110E\u116C\u1100\u1173\u11AB\n\u110E\u116C\u1109\u1161\u11BC\n\u110E\u116C\u1109\u1165\u11AB\n\u110E\u116C\u1109\u1175\u11AB\n\u110E\u116C\u110B\u1161\u11A8\n\u110E\u116C\u110C\u1169\u11BC\n\u110E\u116E\u1109\u1165\u11A8\n\u110E\u116E\u110B\u1165\u11A8\n\u110E\u116E\u110C\u1175\u11AB\n\u110E\u116E\u110E\u1165\u11AB\n\u110E\u116E\u110E\u1173\u11A8\n\u110E\u116E\u11A8\u1100\u116E\n\u110E\u116E\u11A8\u1109\u1169\n\u110E\u116E\u11A8\u110C\u1166\n\u110E\u116E\u11A8\u1112\u1161\n\u110E\u116E\u11AF\u1100\u1173\u11AB\n\u110E\u116E\u11AF\u1107\u1161\u11AF\n\u110E\u116E\u11AF\u1109\u1161\u11AB\n\u110E\u116E\u11AF\u1109\u1175\u11AB\n\u110E\u116E\u11AF\u110B\u1167\u11AB\n\u110E\u116E\u11AF\u110B\u1175\u11B8\n\u110E\u116E\u11AF\u110C\u1161\u11BC\n\u110E\u116E\u11AF\u1111\u1161\u11AB\n\u110E\u116E\u11BC\u1100\u1167\u11A8\n\u110E\u116E\u11BC\u1100\u1169\n\u110E\u116E\u11BC\u1103\u1169\u11AF\n\u110E\u116E\u11BC\u1107\u116E\u11AB\u1112\u1175\n\u110E\u116E\u11BC\u110E\u1165\u11BC\u1103\u1169\n\u110E\u1171\u110B\u1165\u11B8\n\u110E\u1171\u110C\u1175\u11A8\n\u110E\u1171\u1112\u1163\u11BC\n\u110E\u1175\u110B\u1163\u11A8\n\u110E\u1175\u11AB\u1100\u116E\n\u110E\u1175\u11AB\u110E\u1165\u11A8\n\u110E\u1175\u11AF\u1109\u1175\u11B8\n\u110E\u1175\u11AF\u110B\u116F\u11AF\n\u110E\u1175\u11AF\u1111\u1161\u11AB\n\u110E\u1175\u11B7\u1103\u1162\n\u110E\u1175\u11B7\u1106\u116E\u11A8\n\u110E\u1175\u11B7\u1109\u1175\u11AF\n\u110E\u1175\u11BA\u1109\u1169\u11AF\n\u110E\u1175\u11BC\u110E\u1161\u11AB\n\u110F\u1161\u1106\u1166\u1105\u1161\n\u110F\u1161\u110B\u116E\u11AB\u1110\u1165\n\u110F\u1161\u11AF\u1100\u116E\u11A8\u1109\u116E\n\u110F\u1162\u1105\u1175\u11A8\u1110\u1165\n\u110F\u1162\u11B7\u1111\u1165\u1109\u1173\n\u110F\u1162\u11B7\u1111\u1166\u110B\u1175\u11AB\n\u110F\u1165\u1110\u1173\u11AB\n\u110F\u1165\u11AB\u1103\u1175\u1109\u1167\u11AB\n\u110F\u1165\u11AF\u1105\u1165\n\u110F\u1165\u11B7\u1111\u1172\u1110\u1165\n\u110F\u1169\u1101\u1175\u1105\u1175\n\u110F\u1169\u1106\u1175\u1103\u1175\n\u110F\u1169\u11AB\u1109\u1165\u1110\u1173\n\u110F\u1169\u11AF\u1105\u1161\n\u110F\u1169\u11B7\u1111\u1173\u11AF\u1105\u1166\u11A8\u1109\u1173\n\u110F\u1169\u11BC\u1102\u1161\u1106\u116E\u11AF\n\u110F\u116B\u1100\u1161\u11B7\n\u110F\u116E\u1103\u1166\u1110\u1161\n\u110F\u1173\u1105\u1175\u11B7\n\u110F\u1173\u11AB\u1100\u1175\u11AF\n\u110F\u1173\u11AB\u1104\u1161\u11AF\n\u110F\u1173\u11AB\u1109\u1169\u1105\u1175\n\u110F\u1173\u11AB\u110B\u1161\u1103\u1173\u11AF\n\u110F\u1173\u11AB\u110B\u1165\u1106\u1165\u1102\u1175\n\u110F\u1173\u11AB\u110B\u1175\u11AF\n\u110F\u1173\u11AB\u110C\u1165\u11AF\n\u110F\u1173\u11AF\u1105\u1162\u1109\u1175\u11A8\n\u110F\u1173\u11AF\u1105\u1165\u11B8\n\u110F\u1175\u11AF\u1105\u1169\n\u1110\u1161\u110B\u1175\u11B8\n\u1110\u1161\u110C\u1161\u1100\u1175\n\u1110\u1161\u11A8\u1100\u116E\n\u1110\u1161\u11A8\u110C\u1161\n\u1110\u1161\u11AB\u1109\u1162\u11BC\n\u1110\u1162\u1100\u116F\u11AB\u1103\u1169\n\u1110\u1162\u110B\u1163\u11BC\n\u1110\u1162\u1111\u116E\u11BC\n\u1110\u1162\u11A8\u1109\u1175\n\u1110\u1162\u11AF\u1105\u1165\u11AB\u1110\u1173\n\u1110\u1165\u1102\u1165\u11AF\n\u1110\u1165\u1106\u1175\u1102\u1165\u11AF\n\u1110\u1166\u1102\u1175\u1109\u1173\n\u1110\u1166\u1109\u1173\u1110\u1173\n\u1110\u1166\u110B\u1175\u1107\u1173\u11AF\n\u1110\u1166\u11AF\u1105\u1166\u1107\u1175\u110C\u1165\u11AB\n\u1110\u1169\u1105\u1169\u11AB\n\u1110\u1169\u1106\u1161\u1110\u1169\n\u1110\u1169\u110B\u116D\u110B\u1175\u11AF\n\u1110\u1169\u11BC\u1100\u1168\n\u1110\u1169\u11BC\u1100\u116A\n\u1110\u1169\u11BC\u1105\u1169\n\u1110\u1169\u11BC\u1109\u1175\u11AB\n\u1110\u1169\u11BC\u110B\u1167\u11A8\n\u1110\u1169\u11BC\u110B\u1175\u11AF\n\u1110\u1169\u11BC\u110C\u1161\u11BC\n\u1110\u1169\u11BC\u110C\u1166\n\u1110\u1169\u11BC\u110C\u1173\u11BC\n\u1110\u1169\u11BC\u1112\u1161\u11B8\n\u1110\u1169\u11BC\u1112\u116A\n\u1110\u116C\u1100\u1173\u11AB\n\u1110\u116C\u110B\u116F\u11AB\n\u1110\u116C\u110C\u1175\u11A8\u1100\u1173\u11B7\n\u1110\u1171\u1100\u1175\u11B7\n\u1110\u1173\u1105\u1165\u11A8\n\u1110\u1173\u11A8\u1100\u1173\u11B8\n\u1110\u1173\u11A8\u1107\u1167\u11AF\n\u1110\u1173\u11A8\u1109\u1165\u11BC\n\u1110\u1173\u11A8\u1109\u116E\n\u1110\u1173\u11A8\u110C\u1175\u11BC\n\u1110\u1173\u11A8\u1112\u1175\n\u1110\u1173\u11AB\u1110\u1173\u11AB\u1112\u1175\n\u1110\u1175\u1109\u1167\u110E\u1173\n\u1111\u1161\u1105\u1161\u11AB\u1109\u1162\u11A8\n\u1111\u1161\u110B\u1175\u11AF\n\u1111\u1161\u110E\u116E\u11AF\u1109\u1169\n\u1111\u1161\u11AB\u1100\u1167\u11AF\n\u1111\u1161\u11AB\u1103\u1161\u11AB\n\u1111\u1161\u11AB\u1106\u1162\n\u1111\u1161\u11AB\u1109\u1161\n\u1111\u1161\u11AF\u1109\u1175\u11B8\n\u1111\u1161\u11AF\u110B\u116F\u11AF\n\u1111\u1161\u11B8\u1109\u1169\u11BC\n\u1111\u1162\u1109\u1167\u11AB\n\u1111\u1162\u11A8\u1109\u1173\n\u1111\u1162\u11A8\u1109\u1175\u1106\u1175\u11AF\u1105\u1175\n\u1111\u1162\u11AB\u1110\u1175\n\u1111\u1165\u1109\u1166\u11AB\u1110\u1173\n\u1111\u1166\u110B\u1175\u11AB\u1110\u1173\n\u1111\u1167\u11AB\u1100\u1167\u11AB\n\u1111\u1167\u11AB\u110B\u1174\n\u1111\u1167\u11AB\u110C\u1175\n\u1111\u1167\u11AB\u1112\u1175\n\u1111\u1167\u11BC\u1100\u1161\n\u1111\u1167\u11BC\u1100\u1172\u11AB\n\u1111\u1167\u11BC\u1109\u1162\u11BC\n\u1111\u1167\u11BC\u1109\u1169\n\u1111\u1167\u11BC\u110B\u1163\u11BC\n\u1111\u1167\u11BC\u110B\u1175\u11AF\n\u1111\u1167\u11BC\u1112\u116A\n\u1111\u1169\u1109\u1173\u1110\u1165\n\u1111\u1169\u110B\u1175\u11AB\u1110\u1173\n\u1111\u1169\u110C\u1161\u11BC\n\u1111\u1169\u1112\u1161\u11B7\n\u1111\u116D\u1106\u1167\u11AB\n\u1111\u116D\u110C\u1165\u11BC\n\u1111\u116D\u110C\u116E\u11AB\n\u1111\u116D\u1112\u1167\u11AB\n\u1111\u116E\u11B7\u1106\u1169\u11A8\n\u1111\u116E\u11B7\u110C\u1175\u11AF\n\u1111\u116E\u11BC\u1100\u1167\u11BC\n\u1111\u116E\u11BC\u1109\u1169\u11A8\n\u1111\u116E\u11BC\u1109\u1173\u11B8\n\u1111\u1173\u1105\u1161\u11BC\u1109\u1173\n\u1111\u1173\u1105\u1175\u11AB\u1110\u1165\n\u1111\u1173\u11AF\u1105\u1161\u1109\u1173\u1110\u1175\u11A8\n\u1111\u1175\u1100\u1169\u11AB\n\u1111\u1175\u1106\u1161\u11BC\n\u1111\u1175\u110B\u1161\u1102\u1169\n\u1111\u1175\u11AF\u1105\u1173\u11B7\n\u1111\u1175\u11AF\u1109\u116E\n\u1111\u1175\u11AF\u110B\u116D\n\u1111\u1175\u11AF\u110C\u1161\n\u1111\u1175\u11AF\u1110\u1169\u11BC\n\u1111\u1175\u11BC\u1100\u1168\n\u1112\u1161\u1102\u1173\u1102\u1175\u11B7\n\u1112\u1161\u1102\u1173\u11AF\n\u1112\u1161\u1103\u1173\u110B\u1170\u110B\u1165\n\u1112\u1161\u1105\u116E\u11BA\u1107\u1161\u11B7\n\u1112\u1161\u1107\u1161\u11AB\u1100\u1175\n\u1112\u1161\u1109\u116E\u11A8\u110C\u1175\u11B8\n\u1112\u1161\u1109\u116E\u11AB\n\u1112\u1161\u110B\u1167\u1110\u1173\u11AB\n\u1112\u1161\u110C\u1175\u1106\u1161\u11AB\n\u1112\u1161\u110E\u1165\u11AB\n\u1112\u1161\u1111\u116E\u11B7\n\u1112\u1161\u1111\u1175\u11AF\n\u1112\u1161\u11A8\u1100\u116A\n\u1112\u1161\u11A8\u1100\u116D\n\u1112\u1161\u11A8\u1100\u1173\u11B8\n\u1112\u1161\u11A8\u1100\u1175\n\u1112\u1161\u11A8\u1102\u1167\u11AB\n\u1112\u1161\u11A8\u1105\u1167\u11A8\n\u1112\u1161\u11A8\u1107\u1165\u11AB\n\u1112\u1161\u11A8\u1107\u116E\u1106\u1169\n\u1112\u1161\u11A8\u1107\u1175\n\u1112\u1161\u11A8\u1109\u1162\u11BC\n\u1112\u1161\u11A8\u1109\u116E\u11AF\n\u1112\u1161\u11A8\u1109\u1173\u11B8\n\u1112\u1161\u11A8\u110B\u116D\u11BC\u1111\u116E\u11B7\n\u1112\u1161\u11A8\u110B\u116F\u11AB\n\u1112\u1161\u11A8\u110B\u1171\n\u1112\u1161\u11A8\u110C\u1161\n\u1112\u1161\u11A8\u110C\u1165\u11B7\n\u1112\u1161\u11AB\u1100\u1168\n\u1112\u1161\u11AB\u1100\u1173\u11AF\n\u1112\u1161\u11AB\u1101\u1165\u1107\u1165\u11AB\u110B\u1166\n\u1112\u1161\u11AB\u1102\u1161\u11BD\n\u1112\u1161\u11AB\u1102\u116E\u11AB\n\u1112\u1161\u11AB\u1103\u1169\u11BC\u110B\u1161\u11AB\n\u1112\u1161\u11AB\u1104\u1162\n\u1112\u1161\u11AB\u1105\u1161\u1109\u1161\u11AB\n\u1112\u1161\u11AB\u1106\u1161\u1103\u1175\n\u1112\u1161\u11AB\u1106\u116E\u11AB\n\u1112\u1161\u11AB\u1107\u1165\u11AB\n\u1112\u1161\u11AB\u1107\u1169\u11A8\n\u1112\u1161\u11AB\u1109\u1175\u11A8\n\u1112\u1161\u11AB\u110B\u1167\u1105\u1173\u11B7\n\u1112\u1161\u11AB\u110D\u1169\u11A8\n\u1112\u1161\u11AF\u1106\u1165\u1102\u1175\n\u1112\u1161\u11AF\u110B\u1161\u1107\u1165\u110C\u1175\n\u1112\u1161\u11AF\u110B\u1175\u11AB\n\u1112\u1161\u11B7\u1101\u1166\n\u1112\u1161\u11B7\u1107\u116E\u1105\u1169\n\u1112\u1161\u11B8\u1100\u1167\u11A8\n\u1112\u1161\u11B8\u1105\u1175\u110C\u1165\u11A8\n\u1112\u1161\u11BC\u1100\u1169\u11BC\n\u1112\u1161\u11BC\u1100\u116E\n\u1112\u1161\u11BC\u1109\u1161\u11BC\n\u1112\u1161\u11BC\u110B\u1174\n\u1112\u1162\u1100\u1167\u11AF\n\u1112\u1162\u1100\u116E\u11AB\n\u1112\u1162\u1103\u1161\u11B8\n\u1112\u1162\u1103\u1161\u11BC\n\u1112\u1162\u1106\u116E\u11AF\n\u1112\u1162\u1109\u1165\u11A8\n\u1112\u1162\u1109\u1165\u11AF\n\u1112\u1162\u1109\u116E\u110B\u116D\u11A8\u110C\u1161\u11BC\n\u1112\u1162\u110B\u1161\u11AB\n\u1112\u1162\u11A8\u1109\u1175\u11B7\n\u1112\u1162\u11AB\u1103\u1173\u1107\u1162\u11A8\n\u1112\u1162\u11B7\u1107\u1165\u1100\u1165\n\u1112\u1162\u11BA\u1107\u1167\u11C0\n\u1112\u1162\u11BA\u1109\u1161\u11AF\n\u1112\u1162\u11BC\u1103\u1169\u11BC\n\u1112\u1162\u11BC\u1107\u1169\u11A8\n\u1112\u1162\u11BC\u1109\u1161\n\u1112\u1162\u11BC\u110B\u116E\u11AB\n\u1112\u1162\u11BC\u110B\u1171\n\u1112\u1163\u11BC\u1100\u1175\n\u1112\u1163\u11BC\u1109\u1161\u11BC\n\u1112\u1163\u11BC\u1109\u116E\n\u1112\u1165\u1105\u1161\u11A8\n\u1112\u1165\u110B\u116D\u11BC\n\u1112\u1166\u11AF\u1100\u1175\n\u1112\u1167\u11AB\u1100\u116A\u11AB\n\u1112\u1167\u11AB\u1100\u1173\u11B7\n\u1112\u1167\u11AB\u1103\u1162\n\u1112\u1167\u11AB\u1109\u1161\u11BC\n\u1112\u1167\u11AB\u1109\u1175\u11AF\n\u1112\u1167\u11AB\u110C\u1161\u11BC\n\u1112\u1167\u11AB\u110C\u1162\n\u1112\u1167\u11AB\u110C\u1175\n\u1112\u1167\u11AF\u110B\u1162\u11A8\n\u1112\u1167\u11B8\u1105\u1167\u11A8\n\u1112\u1167\u11BC\u1107\u116E\n\u1112\u1167\u11BC\u1109\u1161\n\u1112\u1167\u11BC\u1109\u116E\n\u1112\u1167\u11BC\u1109\u1175\u11A8\n\u1112\u1167\u11BC\u110C\u1166\n\u1112\u1167\u11BC\u1110\u1162\n\u1112\u1167\u11BC\u1111\u1167\u11AB\n\u1112\u1168\u1110\u1162\u11A8\n\u1112\u1169\u1100\u1175\u1109\u1175\u11B7\n\u1112\u1169\u1102\u1161\u11B7\n\u1112\u1169\u1105\u1161\u11BC\u110B\u1175\n\u1112\u1169\u1107\u1161\u11A8\n\u1112\u1169\u1110\u1166\u11AF\n\u1112\u1169\u1112\u1173\u11B8\n\u1112\u1169\u11A8\u1109\u1175\n\u1112\u1169\u11AF\u1105\u1169\n\u1112\u1169\u11B7\u1111\u1166\u110B\u1175\u110C\u1175\n\u1112\u1169\u11BC\u1107\u1169\n\u1112\u1169\u11BC\u1109\u116E\n\u1112\u1169\u11BC\u110E\u1161\n\u1112\u116A\u1106\u1167\u11AB\n\u1112\u116A\u1107\u116E\u11AB\n\u1112\u116A\u1109\u1161\u11AF\n\u1112\u116A\u110B\u116D\u110B\u1175\u11AF\n\u1112\u116A\u110C\u1161\u11BC\n\u1112\u116A\u1112\u1161\u11A8\n\u1112\u116A\u11A8\u1107\u1169\n\u1112\u116A\u11A8\u110B\u1175\u11AB\n\u1112\u116A\u11A8\u110C\u1161\u11BC\n\u1112\u116A\u11A8\u110C\u1165\u11BC\n\u1112\u116A\u11AB\u1100\u1161\u11B8\n\u1112\u116A\u11AB\u1100\u1167\u11BC\n\u1112\u116A\u11AB\u110B\u1167\u11BC\n\u1112\u116A\u11AB\u110B\u1172\u11AF\n\u1112\u116A\u11AB\u110C\u1161\n\u1112\u116A\u11AF\u1100\u1175\n\u1112\u116A\u11AF\u1103\u1169\u11BC\n\u1112\u116A\u11AF\u1107\u1161\u11AF\u1112\u1175\n\u1112\u116A\u11AF\u110B\u116D\u11BC\n\u1112\u116A\u11AF\u110D\u1161\u11A8\n\u1112\u116C\u1100\u1167\u11AB\n\u1112\u116C\u1100\u116A\u11AB\n\u1112\u116C\u1107\u1169\u11A8\n\u1112\u116C\u1109\u1162\u11A8\n\u1112\u116C\u110B\u116F\u11AB\n\u1112\u116C\u110C\u1161\u11BC\n\u1112\u116C\u110C\u1165\u11AB\n\u1112\u116C\u11BA\u1109\u116E\n\u1112\u116C\u11BC\u1103\u1161\u11AB\u1107\u1169\u1103\u1169\n\u1112\u116D\u110B\u1172\u11AF\u110C\u1165\u11A8\n\u1112\u116E\u1107\u1161\u11AB\n\u1112\u116E\u110E\u116E\u11BA\u1100\u1161\u1105\u116E\n\u1112\u116E\u11AB\u1105\u1167\u11AB\n\u1112\u116F\u11AF\u110A\u1175\u11AB\n\u1112\u1172\u1109\u1175\u11A8\n\u1112\u1172\u110B\u1175\u11AF\n\u1112\u1172\u11BC\u1102\u1162\n\u1112\u1173\u1105\u1173\u11B7\n\u1112\u1173\u11A8\u1107\u1162\u11A8\n\u1112\u1173\u11A8\u110B\u1175\u11AB\n\u1112\u1173\u11AB\u110C\u1165\u11A8\n\u1112\u1173\u11AB\u1112\u1175\n\u1112\u1173\u11BC\u1106\u1175\n\u1112\u1173\u11BC\u1107\u116E\u11AB\n\u1112\u1174\u1100\u1169\u11A8\n\u1112\u1174\u1106\u1161\u11BC\n\u1112\u1174\u1109\u1162\u11BC\n\u1112\u1174\u11AB\u1109\u1162\u11A8\n\u1112\u1175\u11B7\u1101\u1165\u11BA`.split('\\n');\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wordlist = void 0;\nexports.wordlist = `abacate\nabaixo\nabalar\nabater\nabduzir\nabelha\naberto\nabismo\nabotoar\nabranger\nabreviar\nabrigar\nabrupto\nabsinto\nabsoluto\nabsurdo\nabutre\nacabado\nacalmar\nacampar\nacanhar\nacaso\naceitar\nacelerar\nacenar\nacervo\nacessar\nacetona\nachatar\nacidez\nacima\nacionado\nacirrar\naclamar\naclive\nacolhida\nacomodar\nacoplar\nacordar\nacumular\nacusador\nadaptar\nadega\nadentro\nadepto\nadequar\naderente\nadesivo\nadeus\nadiante\naditivo\nadjetivo\nadjunto\nadmirar\nadorar\nadquirir\nadubo\nadverso\nadvogado\naeronave\nafastar\naferir\nafetivo\nafinador\nafivelar\naflito\nafluente\nafrontar\nagachar\nagarrar\nagasalho\nagenciar\nagilizar\nagiota\nagitado\nagora\nagradar\nagreste\nagrupar\naguardar\nagulha\najoelhar\najudar\najustar\nalameda\nalarme\nalastrar\nalavanca\nalbergue\nalbino\nalcatra\naldeia\nalecrim\nalegria\nalertar\nalface\nalfinete\nalgum\nalheio\naliar\nalicate\nalienar\nalinhar\naliviar\nalmofada\nalocar\nalpiste\nalterar\naltitude\nalucinar\nalugar\naluno\nalusivo\nalvo\namaciar\namador\namarelo\namassar\nambas\nambiente\nameixa\namenizar\namido\namistoso\namizade\namolador\namontoar\namoroso\namostra\namparar\nampliar\nampola\nanagrama\nanalisar\nanarquia\nanatomia\nandaime\nanel\nanexo\nangular\nanimar\nanjo\nanomalia\nanotado\nansioso\nanterior\nanuidade\nanunciar\nanzol\napagador\napalpar\napanhado\napego\napelido\napertada\napesar\napetite\napito\naplauso\naplicada\napoio\napontar\naposta\naprendiz\naprovar\naquecer\narame\naranha\narara\narcada\nardente\nareia\narejar\narenito\naresta\nargiloso\nargola\narma\narquivo\narraial\narrebate\narriscar\narroba\narrumar\narsenal\narterial\nartigo\narvoredo\nasfaltar\nasilado\naspirar\nassador\nassinar\nassoalho\nassunto\nastral\natacado\natadura\natalho\natarefar\natear\natender\naterro\nateu\natingir\natirador\nativo\natoleiro\natracar\natrevido\natriz\natual\natum\nauditor\naumentar\naura\naurora\nautismo\nautoria\nautuar\navaliar\navante\navaria\navental\navesso\naviador\navisar\navulso\naxila\nazarar\nazedo\nazeite\nazulejo\nbabar\nbabosa\nbacalhau\nbacharel\nbacia\nbagagem\nbaiano\nbailar\nbaioneta\nbairro\nbaixista\nbajular\nbaleia\nbaliza\nbalsa\nbanal\nbandeira\nbanho\nbanir\nbanquete\nbarato\nbarbado\nbaronesa\nbarraca\nbarulho\nbaseado\nbastante\nbatata\nbatedor\nbatida\nbatom\nbatucar\nbaunilha\nbeber\nbeijo\nbeirada\nbeisebol\nbeldade\nbeleza\nbelga\nbeliscar\nbendito\nbengala\nbenzer\nberimbau\nberlinda\nberro\nbesouro\nbexiga\nbezerro\nbico\nbicudo\nbienal\nbifocal\nbifurcar\nbigorna\nbilhete\nbimestre\nbimotor\nbiologia\nbiombo\nbiosfera\nbipolar\nbirrento\nbiscoito\nbisneto\nbispo\nbissexto\nbitola\nbizarro\nblindado\nbloco\nbloquear\nboato\nbobagem\nbocado\nbocejo\nbochecha\nboicotar\nbolada\nboletim\nbolha\nbolo\nbombeiro\nbonde\nboneco\nbonita\nborbulha\nborda\nboreal\nborracha\nbovino\nboxeador\nbranco\nbrasa\nbraveza\nbreu\nbriga\nbrilho\nbrincar\nbroa\nbrochura\nbronzear\nbroto\nbruxo\nbucha\nbudismo\nbufar\nbule\nburaco\nbusca\nbusto\nbuzina\ncabana\ncabelo\ncabide\ncabo\ncabrito\ncacau\ncacetada\ncachorro\ncacique\ncadastro\ncadeado\ncafezal\ncaiaque\ncaipira\ncaixote\ncajado\ncaju\ncalafrio\ncalcular\ncaldeira\ncalibrar\ncalmante\ncalota\ncamada\ncambista\ncamisa\ncamomila\ncampanha\ncamuflar\ncanavial\ncancelar\ncaneta\ncanguru\ncanhoto\ncanivete\ncanoa\ncansado\ncantar\ncanudo\ncapacho\ncapela\ncapinar\ncapotar\ncapricho\ncaptador\ncapuz\ncaracol\ncarbono\ncardeal\ncareca\ncarimbar\ncarneiro\ncarpete\ncarreira\ncartaz\ncarvalho\ncasaco\ncasca\ncasebre\ncastelo\ncasulo\ncatarata\ncativar\ncaule\ncausador\ncautelar\ncavalo\ncaverna\ncebola\ncedilha\ncegonha\ncelebrar\ncelular\ncenoura\ncenso\ncenteio\ncercar\ncerrado\ncerteiro\ncerveja\ncetim\ncevada\nchacota\nchaleira\nchamado\nchapada\ncharme\nchatice\nchave\nchefe\nchegada\ncheiro\ncheque\nchicote\nchifre\nchinelo\nchocalho\nchover\nchumbo\nchutar\nchuva\ncicatriz\nciclone\ncidade\ncidreira\nciente\ncigana\ncimento\ncinto\ncinza\nciranda\ncircuito\ncirurgia\ncitar\nclareza\nclero\nclicar\nclone\nclube\ncoado\ncoagir\ncobaia\ncobertor\ncobrar\ncocada\ncoelho\ncoentro\ncoeso\ncogumelo\ncoibir\ncoifa\ncoiote\ncolar\ncoleira\ncolher\ncolidir\ncolmeia\ncolono\ncoluna\ncomando\ncombinar\ncomentar\ncomitiva\ncomover\ncomplexo\ncomum\nconcha\ncondor\nconectar\nconfuso\ncongelar\nconhecer\nconjugar\nconsumir\ncontrato\nconvite\ncooperar\ncopeiro\ncopiador\ncopo\ncoquetel\ncoragem\ncordial\ncorneta\ncoronha\ncorporal\ncorreio\ncortejo\ncoruja\ncorvo\ncosseno\ncostela\ncotonete\ncouro\ncouve\ncovil\ncozinha\ncratera\ncravo\ncreche\ncredor\ncreme\ncrer\ncrespo\ncriada\ncriminal\ncrioulo\ncrise\ncriticar\ncrosta\ncrua\ncruzeiro\ncubano\ncueca\ncuidado\ncujo\nculatra\nculminar\nculpar\ncultura\ncumprir\ncunhado\ncupido\ncurativo\ncurral\ncursar\ncurto\ncuspir\ncustear\ncutelo\ndamasco\ndatar\ndebater\ndebitar\ndeboche\ndebulhar\ndecalque\ndecimal\ndeclive\ndecote\ndecretar\ndedal\ndedicado\ndeduzir\ndefesa\ndefumar\ndegelo\ndegrau\ndegustar\ndeitado\ndeixar\ndelator\ndelegado\ndelinear\ndelonga\ndemanda\ndemitir\ndemolido\ndentista\ndepenado\ndepilar\ndepois\ndepressa\ndepurar\nderiva\nderramar\ndesafio\ndesbotar\ndescanso\ndesenho\ndesfiado\ndesgaste\ndesigual\ndeslize\ndesmamar\ndesova\ndespesa\ndestaque\ndesviar\ndetalhar\ndetentor\ndetonar\ndetrito\ndeusa\ndever\ndevido\ndevotado\ndezena\ndiagrama\ndialeto\ndidata\ndifuso\ndigitar\ndilatado\ndiluente\ndiminuir\ndinastia\ndinheiro\ndiocese\ndireto\ndiscreta\ndisfarce\ndisparo\ndisquete\ndissipar\ndistante\nditador\ndiurno\ndiverso\ndivisor\ndivulgar\ndizer\ndobrador\ndolorido\ndomador\ndominado\ndonativo\ndonzela\ndormente\ndorsal\ndosagem\ndourado\ndoutor\ndrenagem\ndrible\ndrogaria\nduelar\nduende\ndueto\nduplo\nduquesa\ndurante\nduvidoso\neclodir\necoar\necologia\nedificar\nedital\neducado\nefeito\nefetivar\nejetar\nelaborar\neleger\neleitor\nelenco\nelevador\neliminar\nelogiar\nembargo\nembolado\nembrulho\nembutido\nemenda\nemergir\nemissor\nempatia\nempenho\nempinado\nempolgar\nemprego\nempurrar\nemulador\nencaixe\nencenado\nenchente\nencontro\nendeusar\nendossar\nenfaixar\nenfeite\nenfim\nengajado\nengenho\nenglobar\nengomado\nengraxar\nenguia\nenjoar\nenlatar\nenquanto\nenraizar\nenrolado\nenrugar\nensaio\nenseada\nensino\nensopado\nentanto\nenteado\nentidade\nentortar\nentrada\nentulho\nenvergar\nenviado\nenvolver\nenxame\nenxerto\nenxofre\nenxuto\nepiderme\nequipar\nereto\nerguido\nerrata\nerva\nervilha\nesbanjar\nesbelto\nescama\nescola\nescrita\nescuta\nesfinge\nesfolar\nesfregar\nesfumado\nesgrima\nesmalte\nespanto\nespelho\nespiga\nesponja\nespreita\nespumar\nesquerda\nestaca\nesteira\nesticar\nestofado\nestrela\nestudo\nesvaziar\netanol\netiqueta\neuforia\neuropeu\nevacuar\nevaporar\nevasivo\neventual\nevidente\nevoluir\nexagero\nexalar\nexaminar\nexato\nexausto\nexcesso\nexcitar\nexclamar\nexecutar\nexemplo\nexibir\nexigente\nexonerar\nexpandir\nexpelir\nexpirar\nexplanar\nexposto\nexpresso\nexpulsar\nexterno\nextinto\nextrato\nfabricar\nfabuloso\nfaceta\nfacial\nfada\nfadiga\nfaixa\nfalar\nfalta\nfamiliar\nfandango\nfanfarra\nfantoche\nfardado\nfarelo\nfarinha\nfarofa\nfarpa\nfartura\nfatia\nfator\nfavorita\nfaxina\nfazenda\nfechado\nfeijoada\nfeirante\nfelino\nfeminino\nfenda\nfeno\nfera\nferiado\nferrugem\nferver\nfestejar\nfetal\nfeudal\nfiapo\nfibrose\nficar\nficheiro\nfigurado\nfileira\nfilho\nfilme\nfiltrar\nfirmeza\nfisgada\nfissura\nfita\nfivela\nfixador\nfixo\nflacidez\nflamingo\nflanela\nflechada\nflora\nflutuar\nfluxo\nfocal\nfocinho\nfofocar\nfogo\nfoguete\nfoice\nfolgado\nfolheto\nforjar\nformiga\nforno\nforte\nfosco\nfossa\nfragata\nfralda\nfrango\nfrasco\nfraterno\nfreira\nfrente\nfretar\nfrieza\nfriso\nfritura\nfronha\nfrustrar\nfruteira\nfugir\nfulano\nfuligem\nfundar\nfungo\nfunil\nfurador\nfurioso\nfutebol\ngabarito\ngabinete\ngado\ngaiato\ngaiola\ngaivota\ngalega\ngalho\ngalinha\ngalocha\nganhar\ngaragem\ngarfo\ngargalo\ngarimpo\ngaroupa\ngarrafa\ngasoduto\ngasto\ngata\ngatilho\ngaveta\ngazela\ngelado\ngeleia\ngelo\ngemada\ngemer\ngemido\ngeneroso\ngengiva\ngenial\ngenoma\ngenro\ngeologia\ngerador\ngerminar\ngesso\ngestor\nginasta\ngincana\ngingado\ngirafa\ngirino\nglacial\nglicose\nglobal\nglorioso\ngoela\ngoiaba\ngolfe\ngolpear\ngordura\ngorjeta\ngorro\ngostoso\ngoteira\ngovernar\ngracejo\ngradual\ngrafite\ngralha\ngrampo\ngranada\ngratuito\ngraveto\ngraxa\ngrego\ngrelhar\ngreve\ngrilo\ngrisalho\ngritaria\ngrosso\ngrotesco\ngrudado\ngrunhido\ngruta\nguache\nguarani\nguaxinim\nguerrear\nguiar\nguincho\nguisado\ngula\nguloso\nguru\nhabitar\nharmonia\nhaste\nhaver\nhectare\nherdar\nheresia\nhesitar\nhiato\nhibernar\nhidratar\nhiena\nhino\nhipismo\nhipnose\nhipoteca\nhoje\nholofote\nhomem\nhonesto\nhonrado\nhormonal\nhospedar\nhumorado\niate\nideia\nidoso\nignorado\nigreja\niguana\nileso\nilha\niludido\niluminar\nilustrar\nimagem\nimediato\nimenso\nimersivo\niminente\nimitador\nimortal\nimpacto\nimpedir\nimplante\nimpor\nimprensa\nimpune\nimunizar\ninalador\ninapto\ninativo\nincenso\ninchar\nincidir\nincluir\nincolor\nindeciso\nindireto\nindutor\nineficaz\ninerente\ninfantil\ninfestar\ninfinito\ninflamar\ninformal\ninfrator\ningerir\ninibido\ninicial\ninimigo\ninjetar\ninocente\ninodoro\ninovador\ninox\ninquieto\ninscrito\ninseto\ninsistir\ninspetor\ninstalar\ninsulto\nintacto\nintegral\nintimar\nintocado\nintriga\ninvasor\ninverno\ninvicto\ninvocar\niogurte\niraniano\nironizar\nirreal\nirritado\nisca\nisento\nisolado\nisqueiro\nitaliano\njaneiro\njangada\njanta\njararaca\njardim\njarro\njasmim\njato\njavali\njazida\njejum\njoaninha\njoelhada\njogador\njoia\njornal\njorrar\njovem\njuba\njudeu\njudoca\njuiz\njulgador\njulho\njurado\njurista\njuro\njusta\nlabareda\nlaboral\nlacre\nlactante\nladrilho\nlagarta\nlagoa\nlaje\nlamber\nlamentar\nlaminar\nlampejo\nlanche\nlapidar\nlapso\nlaranja\nlareira\nlargura\nlasanha\nlastro\nlateral\nlatido\nlavanda\nlavoura\nlavrador\nlaxante\nlazer\nlealdade\nlebre\nlegado\nlegendar\nlegista\nleigo\nleiloar\nleitura\nlembrete\nleme\nlenhador\nlentilha\nleoa\nlesma\nleste\nletivo\nletreiro\nlevar\nleveza\nlevitar\nliberal\nlibido\nliderar\nligar\nligeiro\nlimitar\nlimoeiro\nlimpador\nlinda\nlinear\nlinhagem\nliquidez\nlistagem\nlisura\nlitoral\nlivro\nlixa\nlixeira\nlocador\nlocutor\nlojista\nlombo\nlona\nlonge\nlontra\nlorde\nlotado\nloteria\nloucura\nlousa\nlouvar\nluar\nlucidez\nlucro\nluneta\nlustre\nlutador\nluva\nmacaco\nmacete\nmachado\nmacio\nmadeira\nmadrinha\nmagnata\nmagreza\nmaior\nmais\nmalandro\nmalha\nmalote\nmaluco\nmamilo\nmamoeiro\nmamute\nmanada\nmancha\nmandato\nmanequim\nmanhoso\nmanivela\nmanobrar\nmansa\nmanter\nmanusear\nmapeado\nmaquinar\nmarcador\nmaresia\nmarfim\nmargem\nmarinho\nmarmita\nmaroto\nmarquise\nmarreco\nmartelo\nmarujo\nmascote\nmasmorra\nmassagem\nmastigar\nmatagal\nmaterno\nmatinal\nmatutar\nmaxilar\nmedalha\nmedida\nmedusa\nmegafone\nmeiga\nmelancia\nmelhor\nmembro\nmemorial\nmenino\nmenos\nmensagem\nmental\nmerecer\nmergulho\nmesada\nmesclar\nmesmo\nmesquita\nmestre\nmetade\nmeteoro\nmetragem\nmexer\nmexicano\nmicro\nmigalha\nmigrar\nmilagre\nmilenar\nmilhar\nmimado\nminerar\nminhoca\nministro\nminoria\nmiolo\nmirante\nmirtilo\nmisturar\nmocidade\nmoderno\nmodular\nmoeda\nmoer\nmoinho\nmoita\nmoldura\nmoleza\nmolho\nmolinete\nmolusco\nmontanha\nmoqueca\nmorango\nmorcego\nmordomo\nmorena\nmosaico\nmosquete\nmostarda\nmotel\nmotim\nmoto\nmotriz\nmuda\nmuito\nmulata\nmulher\nmultar\nmundial\nmunido\nmuralha\nmurcho\nmuscular\nmuseu\nmusical\nnacional\nnadador\nnaja\nnamoro\nnarina\nnarrado\nnascer\nnativa\nnatureza\nnavalha\nnavegar\nnavio\nneblina\nnebuloso\nnegativa\nnegociar\nnegrito\nnervoso\nneta\nneural\nnevasca\nnevoeiro\nninar\nninho\nnitidez\nnivelar\nnobreza\nnoite\nnoiva\nnomear\nnominal\nnordeste\nnortear\nnotar\nnoticiar\nnoturno\nnovelo\nnovilho\nnovo\nnublado\nnudez\nnumeral\nnupcial\nnutrir\nnuvem\nobcecado\nobedecer\nobjetivo\nobrigado\nobscuro\nobstetra\nobter\nobturar\nocidente\nocioso\nocorrer\noculista\nocupado\nofegante\nofensiva\noferenda\noficina\nofuscado\nogiva\nolaria\noleoso\nolhar\noliveira\nombro\nomelete\nomisso\nomitir\nondulado\noneroso\nontem\nopcional\noperador\noponente\noportuno\noposto\norar\norbitar\nordem\nordinal\norfanato\norgasmo\norgulho\noriental\norigem\noriundo\norla\nortodoxo\norvalho\noscilar\nossada\nosso\nostentar\notimismo\nousadia\noutono\noutubro\nouvido\novelha\novular\noxidar\noxigenar\npacato\npaciente\npacote\npactuar\npadaria\npadrinho\npagar\npagode\npainel\npairar\npaisagem\npalavra\npalestra\npalheta\npalito\npalmada\npalpitar\npancada\npanela\npanfleto\npanqueca\npantanal\npapagaio\npapelada\npapiro\nparafina\nparcial\npardal\nparede\npartida\npasmo\npassado\npastel\npatamar\npatente\npatinar\npatrono\npaulada\npausar\npeculiar\npedalar\npedestre\npediatra\npedra\npegada\npeitoral\npeixe\npele\npelicano\npenca\npendurar\npeneira\npenhasco\npensador\npente\nperceber\nperfeito\npergunta\nperito\npermitir\nperna\nperplexo\npersiana\npertence\nperuca\npescado\npesquisa\npessoa\npetiscar\npiada\npicado\npiedade\npigmento\npilastra\npilhado\npilotar\npimenta\npincel\npinguim\npinha\npinote\npintar\npioneiro\npipoca\npiquete\npiranha\npires\npirueta\npiscar\npistola\npitanga\npivete\nplanta\nplaqueta\nplatina\nplebeu\nplumagem\npluvial\npneu\npoda\npoeira\npoetisa\npolegada\npoliciar\npoluente\npolvilho\npomar\npomba\nponderar\npontaria\npopuloso\nporta\npossuir\npostal\npote\npoupar\npouso\npovoar\npraia\nprancha\nprato\npraxe\nprece\npredador\nprefeito\npremiar\nprensar\npreparar\npresilha\npretexto\nprevenir\nprezar\nprimata\nprincesa\nprisma\nprivado\nprocesso\nproduto\nprofeta\nproibido\nprojeto\nprometer\npropagar\nprosa\nprotetor\nprovador\npublicar\npudim\npular\npulmonar\npulseira\npunhal\npunir\npupilo\npureza\npuxador\nquadra\nquantia\nquarto\nquase\nquebrar\nqueda\nqueijo\nquente\nquerido\nquimono\nquina\nquiosque\nrabanada\nrabisco\nrachar\nracionar\nradial\nraiar\nrainha\nraio\nraiva\nrajada\nralado\nramal\nranger\nranhura\nrapadura\nrapel\nrapidez\nraposa\nraquete\nraridade\nrasante\nrascunho\nrasgar\nraspador\nrasteira\nrasurar\nratazana\nratoeira\nrealeza\nreanimar\nreaver\nrebaixar\nrebelde\nrebolar\nrecado\nrecente\nrecheio\nrecibo\nrecordar\nrecrutar\nrecuar\nrede\nredimir\nredonda\nreduzida\nreenvio\nrefinar\nrefletir\nrefogar\nrefresco\nrefugiar\nregalia\nregime\nregra\nreinado\nreitor\nrejeitar\nrelativo\nremador\nremendo\nremorso\nrenovado\nreparo\nrepelir\nrepleto\nrepolho\nrepresa\nrepudiar\nrequerer\nresenha\nresfriar\nresgatar\nresidir\nresolver\nrespeito\nressaca\nrestante\nresumir\nretalho\nreter\nretirar\nretomada\nretratar\nrevelar\nrevisor\nrevolta\nriacho\nrica\nrigidez\nrigoroso\nrimar\nringue\nrisada\nrisco\nrisonho\nrobalo\nrochedo\nrodada\nrodeio\nrodovia\nroedor\nroleta\nromano\nroncar\nrosado\nroseira\nrosto\nrota\nroteiro\nrotina\nrotular\nrouco\nroupa\nroxo\nrubro\nrugido\nrugoso\nruivo\nrumo\nrupestre\nrusso\nsabor\nsaciar\nsacola\nsacudir\nsadio\nsafira\nsaga\nsagrada\nsaibro\nsalada\nsaleiro\nsalgado\nsaliva\nsalpicar\nsalsicha\nsaltar\nsalvador\nsambar\nsamurai\nsanar\nsanfona\nsangue\nsanidade\nsapato\nsarda\nsargento\nsarjeta\nsaturar\nsaudade\nsaxofone\nsazonal\nsecar\nsecular\nseda\nsedento\nsediado\nsedoso\nsedutor\nsegmento\nsegredo\nsegundo\nseiva\nseleto\nselvagem\nsemanal\nsemente\nsenador\nsenhor\nsensual\nsentado\nseparado\nsereia\nseringa\nserra\nservo\nsetembro\nsetor\nsigilo\nsilhueta\nsilicone\nsimetria\nsimpatia\nsimular\nsinal\nsincero\nsingular\nsinopse\nsintonia\nsirene\nsiri\nsituado\nsoberano\nsobra\nsocorro\nsogro\nsoja\nsolda\nsoletrar\nsolteiro\nsombrio\nsonata\nsondar\nsonegar\nsonhador\nsono\nsoprano\nsoquete\nsorrir\nsorteio\nsossego\nsotaque\nsoterrar\nsovado\nsozinho\nsuavizar\nsubida\nsubmerso\nsubsolo\nsubtrair\nsucata\nsucesso\nsuco\nsudeste\nsufixo\nsugador\nsugerir\nsujeito\nsulfato\nsumir\nsuor\nsuperior\nsuplicar\nsuposto\nsuprimir\nsurdina\nsurfista\nsurpresa\nsurreal\nsurtir\nsuspiro\nsustento\ntabela\ntablete\ntabuada\ntacho\ntagarela\ntalher\ntalo\ntalvez\ntamanho\ntamborim\ntampa\ntangente\ntanto\ntapar\ntapioca\ntardio\ntarefa\ntarja\ntarraxa\ntatuagem\ntaurino\ntaxativo\ntaxista\nteatral\ntecer\ntecido\nteclado\ntedioso\nteia\nteimar\ntelefone\ntelhado\ntempero\ntenente\ntensor\ntentar\ntermal\nterno\nterreno\ntese\ntesoura\ntestado\nteto\ntextura\ntexugo\ntiara\ntigela\ntijolo\ntimbrar\ntimidez\ntingido\ntinteiro\ntiragem\ntitular\ntoalha\ntocha\ntolerar\ntolice\ntomada\ntomilho\ntonel\ntontura\ntopete\ntora\ntorcido\ntorneio\ntorque\ntorrada\ntorto\ntostar\ntouca\ntoupeira\ntoxina\ntrabalho\ntracejar\ntradutor\ntrafegar\ntrajeto\ntrama\ntrancar\ntrapo\ntraseiro\ntratador\ntravar\ntreino\ntremer\ntrepidar\ntrevo\ntriagem\ntribo\ntriciclo\ntridente\ntrilogia\ntrindade\ntriplo\ntriturar\ntriunfal\ntrocar\ntrombeta\ntrova\ntrunfo\ntruque\ntubular\ntucano\ntudo\ntulipa\ntupi\nturbo\nturma\nturquesa\ntutelar\ntutorial\nuivar\numbigo\nunha\nunidade\nuniforme\nurologia\nurso\nurtiga\nurubu\nusado\nusina\nusufruir\nvacina\nvadiar\nvagaroso\nvaidoso\nvala\nvalente\nvalidade\nvalores\nvantagem\nvaqueiro\nvaranda\nvareta\nvarrer\nvascular\nvasilha\nvassoura\nvazar\nvazio\nveado\nvedar\nvegetar\nveicular\nveleiro\nvelhice\nveludo\nvencedor\nvendaval\nvenerar\nventre\nverbal\nverdade\nvereador\nvergonha\nvermelho\nverniz\nversar\nvertente\nvespa\nvestido\nvetorial\nviaduto\nviagem\nviajar\nviatura\nvibrador\nvideira\nvidraria\nviela\nviga\nvigente\nvigiar\nvigorar\nvilarejo\nvinco\nvinheta\nvinil\nvioleta\nvirada\nvirtude\nvisitar\nvisto\nvitral\nviveiro\nvizinho\nvoador\nvoar\nvogal\nvolante\nvoleibol\nvoltagem\nvolumoso\nvontade\nvulto\nvuvuzela\nxadrez\nxarope\nxeque\nxeretar\nxerife\nxingar\nzangado\nzarpar\nzebu\nzelador\nzombar\nzoologia\nzumbido`.split('\\n');\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wordlist = void 0;\nexports.wordlist = `\u7684\n\u4E00\n\u662F\n\u5728\n\u4E0D\n\u4E86\n\u6709\n\u548C\n\u4EBA\n\u8FD9\n\u4E2D\n\u5927\n\u4E3A\n\u4E0A\n\u4E2A\n\u56FD\n\u6211\n\u4EE5\n\u8981\n\u4ED6\n\u65F6\n\u6765\n\u7528\n\u4EEC\n\u751F\n\u5230\n\u4F5C\n\u5730\n\u4E8E\n\u51FA\n\u5C31\n\u5206\n\u5BF9\n\u6210\n\u4F1A\n\u53EF\n\u4E3B\n\u53D1\n\u5E74\n\u52A8\n\u540C\n\u5DE5\n\u4E5F\n\u80FD\n\u4E0B\n\u8FC7\n\u5B50\n\u8BF4\n\u4EA7\n\u79CD\n\u9762\n\u800C\n\u65B9\n\u540E\n\u591A\n\u5B9A\n\u884C\n\u5B66\n\u6CD5\n\u6240\n\u6C11\n\u5F97\n\u7ECF\n\u5341\n\u4E09\n\u4E4B\n\u8FDB\n\u7740\n\u7B49\n\u90E8\n\u5EA6\n\u5BB6\n\u7535\n\u529B\n\u91CC\n\u5982\n\u6C34\n\u5316\n\u9AD8\n\u81EA\n\u4E8C\n\u7406\n\u8D77\n\u5C0F\n\u7269\n\u73B0\n\u5B9E\n\u52A0\n\u91CF\n\u90FD\n\u4E24\n\u4F53\n\u5236\n\u673A\n\u5F53\n\u4F7F\n\u70B9\n\u4ECE\n\u4E1A\n\u672C\n\u53BB\n\u628A\n\u6027\n\u597D\n\u5E94\n\u5F00\n\u5B83\n\u5408\n\u8FD8\n\u56E0\n\u7531\n\u5176\n\u4E9B\n\u7136\n\u524D\n\u5916\n\u5929\n\u653F\n\u56DB\n\u65E5\n\u90A3\n\u793E\n\u4E49\n\u4E8B\n\u5E73\n\u5F62\n\u76F8\n\u5168\n\u8868\n\u95F4\n\u6837\n\u4E0E\n\u5173\n\u5404\n\u91CD\n\u65B0\n\u7EBF\n\u5185\n\u6570\n\u6B63\n\u5FC3\n\u53CD\n\u4F60\n\u660E\n\u770B\n\u539F\n\u53C8\n\u4E48\n\u5229\n\u6BD4\n\u6216\n\u4F46\n\u8D28\n\u6C14\n\u7B2C\n\u5411\n\u9053\n\u547D\n\u6B64\n\u53D8\n\u6761\n\u53EA\n\u6CA1\n\u7ED3\n\u89E3\n\u95EE\n\u610F\n\u5EFA\n\u6708\n\u516C\n\u65E0\n\u7CFB\n\u519B\n\u5F88\n\u60C5\n\u8005\n\u6700\n\u7ACB\n\u4EE3\n\u60F3\n\u5DF2\n\u901A\n\u5E76\n\u63D0\n\u76F4\n\u9898\n\u515A\n\u7A0B\n\u5C55\n\u4E94\n\u679C\n\u6599\n\u8C61\n\u5458\n\u9769\n\u4F4D\n\u5165\n\u5E38\n\u6587\n\u603B\n\u6B21\n\u54C1\n\u5F0F\n\u6D3B\n\u8BBE\n\u53CA\n\u7BA1\n\u7279\n\u4EF6\n\u957F\n\u6C42\n\u8001\n\u5934\n\u57FA\n\u8D44\n\u8FB9\n\u6D41\n\u8DEF\n\u7EA7\n\u5C11\n\u56FE\n\u5C71\n\u7EDF\n\u63A5\n\u77E5\n\u8F83\n\u5C06\n\u7EC4\n\u89C1\n\u8BA1\n\u522B\n\u5979\n\u624B\n\u89D2\n\u671F\n\u6839\n\u8BBA\n\u8FD0\n\u519C\n\u6307\n\u51E0\n\u4E5D\n\u533A\n\u5F3A\n\u653E\n\u51B3\n\u897F\n\u88AB\n\u5E72\n\u505A\n\u5FC5\n\u6218\n\u5148\n\u56DE\n\u5219\n\u4EFB\n\u53D6\n\u636E\n\u5904\n\u961F\n\u5357\n\u7ED9\n\u8272\n\u5149\n\u95E8\n\u5373\n\u4FDD\n\u6CBB\n\u5317\n\u9020\n\u767E\n\u89C4\n\u70ED\n\u9886\n\u4E03\n\u6D77\n\u53E3\n\u4E1C\n\u5BFC\n\u5668\n\u538B\n\u5FD7\n\u4E16\n\u91D1\n\u589E\n\u4E89\n\u6D4E\n\u9636\n\u6CB9\n\u601D\n\u672F\n\u6781\n\u4EA4\n\u53D7\n\u8054\n\u4EC0\n\u8BA4\n\u516D\n\u5171\n\u6743\n\u6536\n\u8BC1\n\u6539\n\u6E05\n\u7F8E\n\u518D\n\u91C7\n\u8F6C\n\u66F4\n\u5355\n\u98CE\n\u5207\n\u6253\n\u767D\n\u6559\n\u901F\n\u82B1\n\u5E26\n\u5B89\n\u573A\n\u8EAB\n\u8F66\n\u4F8B\n\u771F\n\u52A1\n\u5177\n\u4E07\n\u6BCF\n\u76EE\n\u81F3\n\u8FBE\n\u8D70\n\u79EF\n\u793A\n\u8BAE\n\u58F0\n\u62A5\n\u6597\n\u5B8C\n\u7C7B\n\u516B\n\u79BB\n\u534E\n\u540D\n\u786E\n\u624D\n\u79D1\n\u5F20\n\u4FE1\n\u9A6C\n\u8282\n\u8BDD\n\u7C73\n\u6574\n\u7A7A\n\u5143\n\u51B5\n\u4ECA\n\u96C6\n\u6E29\n\u4F20\n\u571F\n\u8BB8\n\u6B65\n\u7FA4\n\u5E7F\n\u77F3\n\u8BB0\n\u9700\n\u6BB5\n\u7814\n\u754C\n\u62C9\n\u6797\n\u5F8B\n\u53EB\n\u4E14\n\u7A76\n\u89C2\n\u8D8A\n\u7EC7\n\u88C5\n\u5F71\n\u7B97\n\u4F4E\n\u6301\n\u97F3\n\u4F17\n\u4E66\n\u5E03\n\u590D\n\u5BB9\n\u513F\n\u987B\n\u9645\n\u5546\n\u975E\n\u9A8C\n\u8FDE\n\u65AD\n\u6DF1\n\u96BE\n\u8FD1\n\u77FF\n\u5343\n\u5468\n\u59D4\n\u7D20\n\u6280\n\u5907\n\u534A\n\u529E\n\u9752\n\u7701\n\u5217\n\u4E60\n\u54CD\n\u7EA6\n\u652F\n\u822C\n\u53F2\n\u611F\n\u52B3\n\u4FBF\n\u56E2\n\u5F80\n\u9178\n\u5386\n\u5E02\n\u514B\n\u4F55\n\u9664\n\u6D88\n\u6784\n\u5E9C\n\u79F0\n\u592A\n\u51C6\n\u7CBE\n\u503C\n\u53F7\n\u7387\n\u65CF\n\u7EF4\n\u5212\n\u9009\n\u6807\n\u5199\n\u5B58\n\u5019\n\u6BDB\n\u4EB2\n\u5FEB\n\u6548\n\u65AF\n\u9662\n\u67E5\n\u6C5F\n\u578B\n\u773C\n\u738B\n\u6309\n\u683C\n\u517B\n\u6613\n\u7F6E\n\u6D3E\n\u5C42\n\u7247\n\u59CB\n\u5374\n\u4E13\n\u72B6\n\u80B2\n\u5382\n\u4EAC\n\u8BC6\n\u9002\n\u5C5E\n\u5706\n\u5305\n\u706B\n\u4F4F\n\u8C03\n\u6EE1\n\u53BF\n\u5C40\n\u7167\n\u53C2\n\u7EA2\n\u7EC6\n\u5F15\n\u542C\n\u8BE5\n\u94C1\n\u4EF7\n\u4E25\n\u9996\n\u5E95\n\u6DB2\n\u5B98\n\u5FB7\n\u968F\n\u75C5\n\u82CF\n\u5931\n\u5C14\n\u6B7B\n\u8BB2\n\u914D\n\u5973\n\u9EC4\n\u63A8\n\u663E\n\u8C08\n\u7F6A\n\u795E\n\u827A\n\u5462\n\u5E2D\n\u542B\n\u4F01\n\u671B\n\u5BC6\n\u6279\n\u8425\n\u9879\n\u9632\n\u4E3E\n\u7403\n\u82F1\n\u6C27\n\u52BF\n\u544A\n\u674E\n\u53F0\n\u843D\n\u6728\n\u5E2E\n\u8F6E\n\u7834\n\u4E9A\n\u5E08\n\u56F4\n\u6CE8\n\u8FDC\n\u5B57\n\u6750\n\u6392\n\u4F9B\n\u6CB3\n\u6001\n\u5C01\n\u53E6\n\u65BD\n\u51CF\n\u6811\n\u6EB6\n\u600E\n\u6B62\n\u6848\n\u8A00\n\u58EB\n\u5747\n\u6B66\n\u56FA\n\u53F6\n\u9C7C\n\u6CE2\n\u89C6\n\u4EC5\n\u8D39\n\u7D27\n\u7231\n\u5DE6\n\u7AE0\n\u65E9\n\u671D\n\u5BB3\n\u7EED\n\u8F7B\n\u670D\n\u8BD5\n\u98DF\n\u5145\n\u5175\n\u6E90\n\u5224\n\u62A4\n\u53F8\n\u8DB3\n\u67D0\n\u7EC3\n\u5DEE\n\u81F4\n\u677F\n\u7530\n\u964D\n\u9ED1\n\u72AF\n\u8D1F\n\u51FB\n\u8303\n\u7EE7\n\u5174\n\u4F3C\n\u4F59\n\u575A\n\u66F2\n\u8F93\n\u4FEE\n\u6545\n\u57CE\n\u592B\n\u591F\n\u9001\n\u7B14\n\u8239\n\u5360\n\u53F3\n\u8D22\n\u5403\n\u5BCC\n\u6625\n\u804C\n\u89C9\n\u6C49\n\u753B\n\u529F\n\u5DF4\n\u8DDF\n\u867D\n\u6742\n\u98DE\n\u68C0\n\u5438\n\u52A9\n\u5347\n\u9633\n\u4E92\n\u521D\n\u521B\n\u6297\n\u8003\n\u6295\n\u574F\n\u7B56\n\u53E4\n\u5F84\n\u6362\n\u672A\n\u8DD1\n\u7559\n\u94A2\n\u66FE\n\u7AEF\n\u8D23\n\u7AD9\n\u7B80\n\u8FF0\n\u94B1\n\u526F\n\u5C3D\n\u5E1D\n\u5C04\n\u8349\n\u51B2\n\u627F\n\u72EC\n\u4EE4\n\u9650\n\u963F\n\u5BA3\n\u73AF\n\u53CC\n\u8BF7\n\u8D85\n\u5FAE\n\u8BA9\n\u63A7\n\u5DDE\n\u826F\n\u8F74\n\u627E\n\u5426\n\u7EAA\n\u76CA\n\u4F9D\n\u4F18\n\u9876\n\u7840\n\u8F7D\n\u5012\n\u623F\n\u7A81\n\u5750\n\u7C89\n\u654C\n\u7565\n\u5BA2\n\u8881\n\u51B7\n\u80DC\n\u7EDD\n\u6790\n\u5757\n\u5242\n\u6D4B\n\u4E1D\n\u534F\n\u8BC9\n\u5FF5\n\u9648\n\u4ECD\n\u7F57\n\u76D0\n\u53CB\n\u6D0B\n\u9519\n\u82E6\n\u591C\n\u5211\n\u79FB\n\u9891\n\u9010\n\u9760\n\u6DF7\n\u6BCD\n\u77ED\n\u76AE\n\u7EC8\n\u805A\n\u6C7D\n\u6751\n\u4E91\n\u54EA\n\u65E2\n\u8DDD\n\u536B\n\u505C\n\u70C8\n\u592E\n\u5BDF\n\u70E7\n\u8FC5\n\u5883\n\u82E5\n\u5370\n\u6D32\n\u523B\n\u62EC\n\u6FC0\n\u5B54\n\u641E\n\u751A\n\u5BA4\n\u5F85\n\u6838\n\u6821\n\u6563\n\u4FB5\n\u5427\n\u7532\n\u6E38\n\u4E45\n\u83DC\n\u5473\n\u65E7\n\u6A21\n\u6E56\n\u8D27\n\u635F\n\u9884\n\u963B\n\u6BEB\n\u666E\n\u7A33\n\u4E59\n\u5988\n\u690D\n\u606F\n\u6269\n\u94F6\n\u8BED\n\u6325\n\u9152\n\u5B88\n\u62FF\n\u5E8F\n\u7EB8\n\u533B\n\u7F3A\n\u96E8\n\u5417\n\u9488\n\u5218\n\u554A\n\u6025\n\u5531\n\u8BEF\n\u8BAD\n\u613F\n\u5BA1\n\u9644\n\u83B7\n\u8336\n\u9C9C\n\u7CAE\n\u65A4\n\u5B69\n\u8131\n\u786B\n\u80A5\n\u5584\n\u9F99\n\u6F14\n\u7236\n\u6E10\n\u8840\n\u6B22\n\u68B0\n\u638C\n\u6B4C\n\u6C99\n\u521A\n\u653B\n\u8C13\n\u76FE\n\u8BA8\n\u665A\n\u7C92\n\u4E71\n\u71C3\n\u77DB\n\u4E4E\n\u6740\n\u836F\n\u5B81\n\u9C81\n\u8D35\n\u949F\n\u7164\n\u8BFB\n\u73ED\n\u4F2F\n\u9999\n\u4ECB\n\u8FEB\n\u53E5\n\u4E30\n\u57F9\n\u63E1\n\u5170\n\u62C5\n\u5F26\n\u86CB\n\u6C89\n\u5047\n\u7A7F\n\u6267\n\u7B54\n\u4E50\n\u8C01\n\u987A\n\u70DF\n\u7F29\n\u5F81\n\u8138\n\u559C\n\u677E\n\u811A\n\u56F0\n\u5F02\n\u514D\n\u80CC\n\u661F\n\u798F\n\u4E70\n\u67D3\n\u4E95\n\u6982\n\u6162\n\u6015\n\u78C1\n\u500D\n\u7956\n\u7687\n\u4FC3\n\u9759\n\u8865\n\u8BC4\n\u7FFB\n\u8089\n\u8DF5\n\u5C3C\n\u8863\n\u5BBD\n\u626C\n\u68C9\n\u5E0C\n\u4F24\n\u64CD\n\u5782\n\u79CB\n\u5B9C\n\u6C22\n\u5957\n\u7763\n\u632F\n\u67B6\n\u4EAE\n\u672B\n\u5BAA\n\u5E86\n\u7F16\n\u725B\n\u89E6\n\u6620\n\u96F7\n\u9500\n\u8BD7\n\u5EA7\n\u5C45\n\u6293\n\u88C2\n\u80DE\n\u547C\n\u5A18\n\u666F\n\u5A01\n\u7EFF\n\u6676\n\u539A\n\u76DF\n\u8861\n\u9E21\n\u5B59\n\u5EF6\n\u5371\n\u80F6\n\u5C4B\n\u4E61\n\u4E34\n\u9646\n\u987E\n\u6389\n\u5440\n\u706F\n\u5C81\n\u63AA\n\u675F\n\u8010\n\u5267\n\u7389\n\u8D75\n\u8DF3\n\u54E5\n\u5B63\n\u8BFE\n\u51EF\n\u80E1\n\u989D\n\u6B3E\n\u7ECD\n\u5377\n\u9F50\n\u4F1F\n\u84B8\n\u6B96\n\u6C38\n\u5B97\n\u82D7\n\u5DDD\n\u7089\n\u5CA9\n\u5F31\n\u96F6\n\u6768\n\u594F\n\u6CBF\n\u9732\n\u6746\n\u63A2\n\u6ED1\n\u9547\n\u996D\n\u6D53\n\u822A\n\u6000\n\u8D76\n\u5E93\n\u593A\n\u4F0A\n\u7075\n\u7A0E\n\u9014\n\u706D\n\u8D5B\n\u5F52\n\u53EC\n\u9F13\n\u64AD\n\u76D8\n\u88C1\n\u9669\n\u5EB7\n\u552F\n\u5F55\n\u83CC\n\u7EAF\n\u501F\n\u7CD6\n\u76D6\n\u6A2A\n\u7B26\n\u79C1\n\u52AA\n\u5802\n\u57DF\n\u67AA\n\u6DA6\n\u5E45\n\u54C8\n\u7ADF\n\u719F\n\u866B\n\u6CFD\n\u8111\n\u58E4\n\u78B3\n\u6B27\n\u904D\n\u4FA7\n\u5BE8\n\u6562\n\u5F7B\n\u8651\n\u659C\n\u8584\n\u5EAD\n\u7EB3\n\u5F39\n\u9972\n\u4F38\n\u6298\n\u9EA6\n\u6E7F\n\u6697\n\u8377\n\u74E6\n\u585E\n\u5E8A\n\u7B51\n\u6076\n\u6237\n\u8BBF\n\u5854\n\u5947\n\u900F\n\u6881\n\u5200\n\u65CB\n\u8FF9\n\u5361\n\u6C2F\n\u9047\n\u4EFD\n\u6BD2\n\u6CE5\n\u9000\n\u6D17\n\u6446\n\u7070\n\u5F69\n\u5356\n\u8017\n\u590F\n\u62E9\n\u5FD9\n\u94DC\n\u732E\n\u786C\n\u4E88\n\u7E41\n\u5708\n\u96EA\n\u51FD\n\u4EA6\n\u62BD\n\u7BC7\n\u9635\n\u9634\n\u4E01\n\u5C3A\n\u8FFD\n\u5806\n\u96C4\n\u8FCE\n\u6CDB\n\u7238\n\u697C\n\u907F\n\u8C0B\n\u5428\n\u91CE\n\u732A\n\u65D7\n\u7D2F\n\u504F\n\u5178\n\u9986\n\u7D22\n\u79E6\n\u8102\n\u6F6E\n\u7237\n\u8C46\n\u5FFD\n\u6258\n\u60CA\n\u5851\n\u9057\n\u6108\n\u6731\n\u66FF\n\u7EA4\n\u7C97\n\u503E\n\u5C1A\n\u75DB\n\u695A\n\u8C22\n\u594B\n\u8D2D\n\u78E8\n\u541B\n\u6C60\n\u65C1\n\u788E\n\u9AA8\n\u76D1\n\u6355\n\u5F1F\n\u66B4\n\u5272\n\u8D2F\n\u6B8A\n\u91CA\n\u8BCD\n\u4EA1\n\u58C1\n\u987F\n\u5B9D\n\u5348\n\u5C18\n\u95FB\n\u63ED\n\u70AE\n\u6B8B\n\u51AC\n\u6865\n\u5987\n\u8B66\n\u7EFC\n\u62DB\n\u5434\n\u4ED8\n\u6D6E\n\u906D\n\u5F90\n\u60A8\n\u6447\n\u8C37\n\u8D5E\n\u7BB1\n\u9694\n\u8BA2\n\u7537\n\u5439\n\u56ED\n\u7EB7\n\u5510\n\u8D25\n\u5B8B\n\u73BB\n\u5DE8\n\u8015\n\u5766\n\u8363\n\u95ED\n\u6E7E\n\u952E\n\u51E1\n\u9A7B\n\u9505\n\u6551\n\u6069\n\u5265\n\u51DD\n\u78B1\n\u9F7F\n\u622A\n\u70BC\n\u9EBB\n\u7EBA\n\u7981\n\u5E9F\n\u76DB\n\u7248\n\u7F13\n\u51C0\n\u775B\n\u660C\n\u5A5A\n\u6D89\n\u7B52\n\u5634\n\u63D2\n\u5CB8\n\u6717\n\u5E84\n\u8857\n\u85CF\n\u59D1\n\u8D38\n\u8150\n\u5974\n\u5566\n\u60EF\n\u4E58\n\u4F19\n\u6062\n\u5300\n\u7EB1\n\u624E\n\u8FA9\n\u8033\n\u5F6A\n\u81E3\n\u4EBF\n\u7483\n\u62B5\n\u8109\n\u79C0\n\u8428\n\u4FC4\n\u7F51\n\u821E\n\u5E97\n\u55B7\n\u7EB5\n\u5BF8\n\u6C57\n\u6302\n\u6D2A\n\u8D3A\n\u95EA\n\u67EC\n\u7206\n\u70EF\n\u6D25\n\u7A3B\n\u5899\n\u8F6F\n\u52C7\n\u50CF\n\u6EDA\n\u5398\n\u8499\n\u82B3\n\u80AF\n\u5761\n\u67F1\n\u8361\n\u817F\n\u4EEA\n\u65C5\n\u5C3E\n\u8F67\n\u51B0\n\u8D21\n\u767B\n\u9ECE\n\u524A\n\u94BB\n\u52D2\n\u9003\n\u969C\n\u6C28\n\u90ED\n\u5CF0\n\u5E01\n\u6E2F\n\u4F0F\n\u8F68\n\u4EA9\n\u6BD5\n\u64E6\n\u83AB\n\u523A\n\u6D6A\n\u79D8\n\u63F4\n\u682A\n\u5065\n\u552E\n\u80A1\n\u5C9B\n\u7518\n\u6CE1\n\u7761\n\u7AE5\n\u94F8\n\u6C64\n\u9600\n\u4F11\n\u6C47\n\u820D\n\u7267\n\u7ED5\n\u70B8\n\u54F2\n\u78F7\n\u7EE9\n\u670B\n\u6DE1\n\u5C16\n\u542F\n\u9677\n\u67F4\n\u5448\n\u5F92\n\u989C\n\u6CEA\n\u7A0D\n\u5FD8\n\u6CF5\n\u84DD\n\u62D6\n\u6D1E\n\u6388\n\u955C\n\u8F9B\n\u58EE\n\u950B\n\u8D2B\n\u865A\n\u5F2F\n\u6469\n\u6CF0\n\u5E7C\n\u5EF7\n\u5C0A\n\u7A97\n\u7EB2\n\u5F04\n\u96B6\n\u7591\n\u6C0F\n\u5BAB\n\u59D0\n\u9707\n\u745E\n\u602A\n\u5C24\n\u7434\n\u5FAA\n\u63CF\n\u819C\n\u8FDD\n\u5939\n\u8170\n\u7F18\n\u73E0\n\u7A77\n\u68EE\n\u679D\n\u7AF9\n\u6C9F\n\u50AC\n\u7EF3\n\u5FC6\n\u90A6\n\u5269\n\u5E78\n\u6D46\n\u680F\n\u62E5\n\u7259\n\u8D2E\n\u793C\n\u6EE4\n\u94A0\n\u7EB9\n\u7F62\n\u62CD\n\u54B1\n\u558A\n\u8896\n\u57C3\n\u52E4\n\u7F5A\n\u7126\n\u6F5C\n\u4F0D\n\u58A8\n\u6B32\n\u7F1D\n\u59D3\n\u520A\n\u9971\n\u4EFF\n\u5956\n\u94DD\n\u9B3C\n\u4E3D\n\u8DE8\n\u9ED8\n\u6316\n\u94FE\n\u626B\n\u559D\n\u888B\n\u70AD\n\u6C61\n\u5E55\n\u8BF8\n\u5F27\n\u52B1\n\u6885\n\u5976\n\u6D01\n\u707E\n\u821F\n\u9274\n\u82EF\n\u8BBC\n\u62B1\n\u6BC1\n\u61C2\n\u5BD2\n\u667A\n\u57D4\n\u5BC4\n\u5C4A\n\u8DC3\n\u6E21\n\u6311\n\u4E39\n\u8270\n\u8D1D\n\u78B0\n\u62D4\n\u7239\n\u6234\n\u7801\n\u68A6\n\u82BD\n\u7194\n\u8D64\n\u6E14\n\u54ED\n\u656C\n\u9897\n\u5954\n\u94C5\n\u4EF2\n\u864E\n\u7A00\n\u59B9\n\u4E4F\n\u73CD\n\u7533\n\u684C\n\u9075\n\u5141\n\u9686\n\u87BA\n\u4ED3\n\u9B4F\n\u9510\n\u6653\n\u6C2E\n\u517C\n\u9690\n\u788D\n\u8D6B\n\u62E8\n\u5FE0\n\u8083\n\u7F38\n\u7275\n\u62A2\n\u535A\n\u5DE7\n\u58F3\n\u5144\n\u675C\n\u8BAF\n\u8BDA\n\u78A7\n\u7965\n\u67EF\n\u9875\n\u5DE1\n\u77E9\n\u60B2\n\u704C\n\u9F84\n\u4F26\n\u7968\n\u5BFB\n\u6842\n\u94FA\n\u5723\n\u6050\n\u6070\n\u90D1\n\u8DA3\n\u62AC\n\u8352\n\u817E\n\u8D34\n\u67D4\n\u6EF4\n\u731B\n\u9614\n\u8F86\n\u59BB\n\u586B\n\u64A4\n\u50A8\n\u7B7E\n\u95F9\n\u6270\n\u7D2B\n\u7802\n\u9012\n\u620F\n\u540A\n\u9676\n\u4F10\n\u5582\n\u7597\n\u74F6\n\u5A46\n\u629A\n\u81C2\n\u6478\n\u5FCD\n\u867E\n\u8721\n\u90BB\n\u80F8\n\u5DE9\n\u6324\n\u5076\n\u5F03\n\u69FD\n\u52B2\n\u4E73\n\u9093\n\u5409\n\u4EC1\n\u70C2\n\u7816\n\u79DF\n\u4E4C\n\u8230\n\u4F34\n\u74DC\n\u6D45\n\u4E19\n\u6682\n\u71E5\n\u6A61\n\u67F3\n\u8FF7\n\u6696\n\u724C\n\u79E7\n\u80C6\n\u8BE6\n\u7C27\n\u8E0F\n\u74F7\n\u8C31\n\u5446\n\u5BBE\n\u7CCA\n\u6D1B\n\u8F89\n\u6124\n\u7ADE\n\u9699\n\u6012\n\u7C98\n\u4E43\n\u7EEA\n\u80A9\n\u7C4D\n\u654F\n\u6D82\n\u7199\n\u7686\n\u4FA6\n\u60AC\n\u6398\n\u4EAB\n\u7EA0\n\u9192\n\u72C2\n\u9501\n\u6DC0\n\u6068\n\u7272\n\u9738\n\u722C\n\u8D4F\n\u9006\n\u73A9\n\u9675\n\u795D\n\u79D2\n\u6D59\n\u8C8C\n\u5F79\n\u5F7C\n\u6089\n\u9E2D\n\u8D8B\n\u51E4\n\u6668\n\u755C\n\u8F88\n\u79E9\n\u5375\n\u7F72\n\u68AF\n\u708E\n\u6EE9\n\u68CB\n\u9A71\n\u7B5B\n\u5CE1\n\u5192\n\u5565\n\u5BFF\n\u8BD1\n\u6D78\n\u6CC9\n\u5E3D\n\u8FDF\n\u7845\n\u7586\n\u8D37\n\u6F0F\n\u7A3F\n\u51A0\n\u5AE9\n\u80C1\n\u82AF\n\u7262\n\u53DB\n\u8680\n\u5965\n\u9E23\n\u5CAD\n\u7F8A\n\u51ED\n\u4E32\n\u5858\n\u7ED8\n\u9175\n\u878D\n\u76C6\n\u9521\n\u5E99\n\u7B79\n\u51BB\n\u8F85\n\u6444\n\u88AD\n\u7B4B\n\u62D2\n\u50DA\n\u65F1\n\u94BE\n\u9E1F\n\u6F06\n\u6C88\n\u7709\n\u758F\n\u6DFB\n\u68D2\n\u7A57\n\u785D\n\u97E9\n\u903C\n\u626D\n\u4FA8\n\u51C9\n\u633A\n\u7897\n\u683D\n\u7092\n\u676F\n\u60A3\n\u998F\n\u529D\n\u8C6A\n\u8FBD\n\u52C3\n\u9E3F\n\u65E6\n\u540F\n\u62DC\n\u72D7\n\u57CB\n\u8F8A\n\u63A9\n\u996E\n\u642C\n\u9A82\n\u8F9E\n\u52FE\n\u6263\n\u4F30\n\u848B\n\u7ED2\n\u96FE\n\u4E08\n\u6735\n\u59C6\n\u62DF\n\u5B87\n\u8F91\n\u9655\n\u96D5\n\u507F\n\u84C4\n\u5D07\n\u526A\n\u5021\n\u5385\n\u54AC\n\u9A76\n\u85AF\n\u5237\n\u65A5\n\u756A\n\u8D4B\n\u5949\n\u4F5B\n\u6D47\n\u6F2B\n\u66FC\n\u6247\n\u9499\n\u6843\n\u6276\n\u4ED4\n\u8FD4\n\u4FD7\n\u4E8F\n\u8154\n\u978B\n\u68F1\n\u8986\n\u6846\n\u6084\n\u53D4\n\u649E\n\u9A97\n\u52D8\n\u65FA\n\u6CB8\n\u5B64\n\u5410\n\u5B5F\n\u6E20\n\u5C48\n\u75BE\n\u5999\n\u60DC\n\u4EF0\n\u72E0\n\u80C0\n\u8C10\n\u629B\n\u9709\n\u6851\n\u5C97\n\u561B\n\u8870\n\u76D7\n\u6E17\n\u810F\n\u8D56\n\u6D8C\n\u751C\n\u66F9\n\u9605\n\u808C\n\u54E9\n\u5389\n\u70C3\n\u7EAC\n\u6BC5\n\u6628\n\u4F2A\n\u75C7\n\u716E\n\u53F9\n\u9489\n\u642D\n\u830E\n\u7B3C\n\u9177\n\u5077\n\u5F13\n\u9525\n\u6052\n\u6770\n\u5751\n\u9F3B\n\u7FFC\n\u7EB6\n\u53D9\n\u72F1\n\u902E\n\u7F50\n\u7EDC\n\u68DA\n\u6291\n\u81A8\n\u852C\n\u5BFA\n\u9AA4\n\u7A46\n\u51B6\n\u67AF\n\u518C\n\u5C38\n\u51F8\n\u7EC5\n\u576F\n\u727A\n\u7130\n\u8F70\n\u6B23\n\u664B\n\u7626\n\u5FA1\n\u952D\n\u9526\n\u4E27\n\u65EC\n\u953B\n\u5784\n\u641C\n\u6251\n\u9080\n\u4EAD\n\u916F\n\u8FC8\n\u8212\n\u8106\n\u9176\n\u95F2\n\u5FE7\n\u915A\n\u987D\n\u7FBD\n\u6DA8\n\u5378\n\u4ED7\n\u966A\n\u8F9F\n\u60E9\n\u676D\n\u59DA\n\u809A\n\u6349\n\u98D8\n\u6F02\n\u6606\n\u6B3A\n\u543E\n\u90CE\n\u70F7\n\u6C41\n\u5475\n\u9970\n\u8427\n\u96C5\n\u90AE\n\u8FC1\n\u71D5\n\u6492\n\u59FB\n\u8D74\n\u5BB4\n\u70E6\n\u503A\n\u5E10\n\u6591\n\u94C3\n\u65E8\n\u9187\n\u8463\n\u997C\n\u96CF\n\u59FF\n\u62CC\n\u5085\n\u8179\n\u59A5\n\u63C9\n\u8D24\n\u62C6\n\u6B6A\n\u8461\n\u80FA\n\u4E22\n\u6D69\n\u5FBD\n\u6602\n\u57AB\n\u6321\n\u89C8\n\u8D2A\n\u6170\n\u7F34\n\u6C6A\n\u614C\n\u51AF\n\u8BFA\n\u59DC\n\u8C0A\n\u51F6\n\u52A3\n\u8BEC\n\u8000\n\u660F\n\u8EBA\n\u76C8\n\u9A91\n\u4E54\n\u6EAA\n\u4E1B\n\u5362\n\u62B9\n\u95F7\n\u54A8\n\u522E\n\u9A7E\n\u7F06\n\u609F\n\u6458\n\u94D2\n\u63B7\n\u9887\n\u5E7B\n\u67C4\n\u60E0\n\u60E8\n\u4F73\n\u4EC7\n\u814A\n\u7A9D\n\u6DA4\n\u5251\n\u77A7\n\u5821\n\u6CFC\n\u8471\n\u7F69\n\u970D\n\u635E\n\u80CE\n\u82CD\n\u6EE8\n\u4FE9\n\u6345\n\u6E58\n\u780D\n\u971E\n\u90B5\n\u8404\n\u75AF\n\u6DEE\n\u9042\n\u718A\n\u7CAA\n\u70D8\n\u5BBF\n\u6863\n\u6208\n\u9A73\n\u5AC2\n\u88D5\n\u5F99\n\u7BAD\n\u6350\n\u80A0\n\u6491\n\u6652\n\u8FA8\n\u6BBF\n\u83B2\n\u644A\n\u6405\n\u9171\n\u5C4F\n\u75AB\n\u54C0\n\u8521\n\u5835\n\u6CAB\n\u76B1\n\u7545\n\u53E0\n\u9601\n\u83B1\n\u6572\n\u8F96\n\u94A9\n\u75D5\n\u575D\n\u5DF7\n\u997F\n\u7978\n\u4E18\n\u7384\n\u6E9C\n\u66F0\n\u903B\n\u5F6D\n\u5C1D\n\u537F\n\u59A8\n\u8247\n\u541E\n\u97E6\n\u6028\n\u77EE\n\u6B47`.split('\\n');\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wordlist = void 0;\nexports.wordlist = `a\u0301baco\nabdomen\nabeja\nabierto\nabogado\nabono\naborto\nabrazo\nabrir\nabuelo\nabuso\nacabar\nacademia\nacceso\naccio\u0301n\naceite\nacelga\nacento\naceptar\na\u0301cido\naclarar\nacne\u0301\nacoger\nacoso\nactivo\nacto\nactriz\nactuar\nacudir\nacuerdo\nacusar\nadicto\nadmitir\nadoptar\nadorno\naduana\nadulto\nae\u0301reo\nafectar\naficio\u0301n\nafinar\nafirmar\na\u0301gil\nagitar\nagoni\u0301a\nagosto\nagotar\nagregar\nagrio\nagua\nagudo\na\u0301guila\naguja\nahogo\nahorro\naire\naislar\najedrez\najeno\najuste\nalacra\u0301n\nalambre\nalarma\nalba\na\u0301lbum\nalcalde\naldea\nalegre\nalejar\nalerta\naleta\nalfiler\nalga\nalgodo\u0301n\naliado\naliento\nalivio\nalma\nalmeja\nalmi\u0301bar\naltar\nalteza\naltivo\nalto\naltura\nalumno\nalzar\namable\namante\namapola\namargo\namasar\na\u0301mbar\na\u0301mbito\nameno\namigo\namistad\namor\namparo\namplio\nancho\nanciano\nancla\nandar\nande\u0301n\nanemia\na\u0301ngulo\nanillo\na\u0301nimo\nani\u0301s\nanotar\nantena\nantiguo\nantojo\nanual\nanular\nanuncio\nan\u0303adir\nan\u0303ejo\nan\u0303o\napagar\naparato\napetito\napio\naplicar\napodo\naporte\napoyo\naprender\naprobar\napuesta\napuro\narado\naran\u0303a\narar\na\u0301rbitro\na\u0301rbol\narbusto\narchivo\narco\narder\nardilla\narduo\na\u0301rea\na\u0301rido\naries\narmoni\u0301a\narne\u0301s\naroma\narpa\narpo\u0301n\narreglo\narroz\narruga\narte\nartista\nasa\nasado\nasalto\nascenso\nasegurar\naseo\nasesor\nasiento\nasilo\nasistir\nasno\nasombro\na\u0301spero\nastilla\nastro\nastuto\nasumir\nasunto\natajo\nataque\natar\natento\nateo\na\u0301tico\natleta\na\u0301tomo\natraer\natroz\natu\u0301n\naudaz\naudio\nauge\naula\naumento\nausente\nautor\naval\navance\navaro\nave\navellana\navena\navestruz\navio\u0301n\naviso\nayer\nayuda\nayuno\nazafra\u0301n\nazar\nazote\nazu\u0301car\nazufre\nazul\nbaba\nbabor\nbache\nbahi\u0301a\nbaile\nbajar\nbalanza\nbalco\u0301n\nbalde\nbambu\u0301\nbanco\nbanda\nban\u0303o\nbarba\nbarco\nbarniz\nbarro\nba\u0301scula\nbasto\u0301n\nbasura\nbatalla\nbateri\u0301a\nbatir\nbatuta\nbau\u0301l\nbazar\nbebe\u0301\nbebida\nbello\nbesar\nbeso\nbestia\nbicho\nbien\nbingo\nblanco\nbloque\nblusa\nboa\nbobina\nbobo\nboca\nbocina\nboda\nbodega\nboina\nbola\nbolero\nbolsa\nbomba\nbondad\nbonito\nbono\nbonsa\u0301i\nborde\nborrar\nbosque\nbote\nboti\u0301n\nbo\u0301veda\nbozal\nbravo\nbrazo\nbrecha\nbreve\nbrillo\nbrinco\nbrisa\nbroca\nbroma\nbronce\nbrote\nbruja\nbrusco\nbruto\nbuceo\nbucle\nbueno\nbuey\nbufanda\nbufo\u0301n\nbu\u0301ho\nbuitre\nbulto\nburbuja\nburla\nburro\nbuscar\nbutaca\nbuzo\u0301n\ncaballo\ncabeza\ncabina\ncabra\ncacao\ncada\u0301ver\ncadena\ncaer\ncafe\u0301\ncai\u0301da\ncaima\u0301n\ncaja\ncajo\u0301n\ncal\ncalamar\ncalcio\ncaldo\ncalidad\ncalle\ncalma\ncalor\ncalvo\ncama\ncambio\ncamello\ncamino\ncampo\nca\u0301ncer\ncandil\ncanela\ncanguro\ncanica\ncanto\ncan\u0303a\ncan\u0303o\u0301n\ncaoba\ncaos\ncapaz\ncapita\u0301n\ncapote\ncaptar\ncapucha\ncara\ncarbo\u0301n\nca\u0301rcel\ncareta\ncarga\ncarin\u0303o\ncarne\ncarpeta\ncarro\ncarta\ncasa\ncasco\ncasero\ncaspa\ncastor\ncatorce\ncatre\ncaudal\ncausa\ncazo\ncebolla\nceder\ncedro\ncelda\nce\u0301lebre\nceloso\nce\u0301lula\ncemento\nceniza\ncentro\ncerca\ncerdo\ncereza\ncero\ncerrar\ncerteza\nce\u0301sped\ncetro\nchacal\nchaleco\nchampu\u0301\nchancla\nchapa\ncharla\nchico\nchiste\nchivo\nchoque\nchoza\nchuleta\nchupar\nciclo\u0301n\nciego\ncielo\ncien\ncierto\ncifra\ncigarro\ncima\ncinco\ncine\ncinta\ncipre\u0301s\ncirco\nciruela\ncisne\ncita\nciudad\nclamor\nclan\nclaro\nclase\nclave\ncliente\nclima\ncli\u0301nica\ncobre\ncoccio\u0301n\ncochino\ncocina\ncoco\nco\u0301digo\ncodo\ncofre\ncoger\ncohete\ncoji\u0301n\ncojo\ncola\ncolcha\ncolegio\ncolgar\ncolina\ncollar\ncolmo\ncolumna\ncombate\ncomer\ncomida\nco\u0301modo\ncompra\nconde\nconejo\nconga\nconocer\nconsejo\ncontar\ncopa\ncopia\ncorazo\u0301n\ncorbata\ncorcho\ncordo\u0301n\ncorona\ncorrer\ncoser\ncosmos\ncosta\ncra\u0301neo\ncra\u0301ter\ncrear\ncrecer\ncrei\u0301do\ncrema\ncri\u0301a\ncrimen\ncripta\ncrisis\ncromo\ncro\u0301nica\ncroqueta\ncrudo\ncruz\ncuadro\ncuarto\ncuatro\ncubo\ncubrir\ncuchara\ncuello\ncuento\ncuerda\ncuesta\ncueva\ncuidar\nculebra\nculpa\nculto\ncumbre\ncumplir\ncuna\ncuneta\ncuota\ncupo\u0301n\ncu\u0301pula\ncurar\ncurioso\ncurso\ncurva\ncutis\ndama\ndanza\ndar\ndardo\nda\u0301til\ndeber\nde\u0301bil\nde\u0301cada\ndecir\ndedo\ndefensa\ndefinir\ndejar\ndelfi\u0301n\ndelgado\ndelito\ndemora\ndenso\ndental\ndeporte\nderecho\nderrota\ndesayuno\ndeseo\ndesfile\ndesnudo\ndestino\ndesvi\u0301o\ndetalle\ndetener\ndeuda\ndi\u0301a\ndiablo\ndiadema\ndiamante\ndiana\ndiario\ndibujo\ndictar\ndiente\ndieta\ndiez\ndifi\u0301cil\ndigno\ndilema\ndiluir\ndinero\ndirecto\ndirigir\ndisco\ndisen\u0303o\ndisfraz\ndiva\ndivino\ndoble\ndoce\ndolor\ndomingo\ndon\ndonar\ndorado\ndormir\ndorso\ndos\ndosis\ndrago\u0301n\ndroga\nducha\nduda\nduelo\nduen\u0303o\ndulce\ndu\u0301o\nduque\ndurar\ndureza\nduro\ne\u0301bano\nebrio\nechar\neco\necuador\nedad\nedicio\u0301n\nedificio\neditor\neducar\nefecto\neficaz\neje\nejemplo\nelefante\nelegir\nelemento\nelevar\nelipse\ne\u0301lite\nelixir\nelogio\neludir\nembudo\nemitir\nemocio\u0301n\nempate\nempen\u0303o\nempleo\nempresa\nenano\nencargo\nenchufe\nenci\u0301a\nenemigo\nenero\nenfado\nenfermo\nengan\u0303o\nenigma\nenlace\nenorme\nenredo\nensayo\nensen\u0303ar\nentero\nentrar\nenvase\nenvi\u0301o\ne\u0301poca\nequipo\nerizo\nescala\nescena\nescolar\nescribir\nescudo\nesencia\nesfera\nesfuerzo\nespada\nespejo\nespi\u0301a\nesposa\nespuma\nesqui\u0301\nestar\neste\nestilo\nestufa\netapa\neterno\ne\u0301tica\netnia\nevadir\nevaluar\nevento\nevitar\nexacto\nexamen\nexceso\nexcusa\nexento\nexigir\nexilio\nexistir\ne\u0301xito\nexperto\nexplicar\nexponer\nextremo\nfa\u0301brica\nfa\u0301bula\nfachada\nfa\u0301cil\nfactor\nfaena\nfaja\nfalda\nfallo\nfalso\nfaltar\nfama\nfamilia\nfamoso\nfarao\u0301n\nfarmacia\nfarol\nfarsa\nfase\nfatiga\nfauna\nfavor\nfax\nfebrero\nfecha\nfeliz\nfeo\nferia\nferoz\nfe\u0301rtil\nfervor\nfesti\u0301n\nfiable\nfianza\nfiar\nfibra\nficcio\u0301n\nficha\nfideo\nfiebre\nfiel\nfiera\nfiesta\nfigura\nfijar\nfijo\nfila\nfilete\nfilial\nfiltro\nfin\nfinca\nfingir\nfinito\nfirma\nflaco\nflauta\nflecha\nflor\nflota\nfluir\nflujo\nflu\u0301or\nfobia\nfoca\nfogata\nfogo\u0301n\nfolio\nfolleto\nfondo\nforma\nforro\nfortuna\nforzar\nfosa\nfoto\nfracaso\nfra\u0301gil\nfranja\nfrase\nfraude\nfrei\u0301r\nfreno\nfresa\nfri\u0301o\nfrito\nfruta\nfuego\nfuente\nfuerza\nfuga\nfumar\nfuncio\u0301n\nfunda\nfurgo\u0301n\nfuria\nfusil\nfu\u0301tbol\nfuturo\ngacela\ngafas\ngaita\ngajo\ngala\ngaleri\u0301a\ngallo\ngamba\nganar\ngancho\nganga\nganso\ngaraje\ngarza\ngasolina\ngastar\ngato\ngavila\u0301n\ngemelo\ngemir\ngen\nge\u0301nero\ngenio\ngente\ngeranio\ngerente\ngermen\ngesto\ngigante\ngimnasio\ngirar\ngiro\nglaciar\nglobo\ngloria\ngol\ngolfo\ngoloso\ngolpe\ngoma\ngordo\ngorila\ngorra\ngota\ngoteo\ngozar\ngrada\ngra\u0301fico\ngrano\ngrasa\ngratis\ngrave\ngrieta\ngrillo\ngripe\ngris\ngrito\ngrosor\ngru\u0301a\ngrueso\ngrumo\ngrupo\nguante\nguapo\nguardia\nguerra\ngui\u0301a\nguin\u0303o\nguion\nguiso\nguitarra\ngusano\ngustar\nhaber\nha\u0301bil\nhablar\nhacer\nhacha\nhada\nhallar\nhamaca\nharina\nhaz\nhazan\u0303a\nhebilla\nhebra\nhecho\nhelado\nhelio\nhembra\nherir\nhermano\nhe\u0301roe\nhervir\nhielo\nhierro\nhi\u0301gado\nhigiene\nhijo\nhimno\nhistoria\nhocico\nhogar\nhoguera\nhoja\nhombre\nhongo\nhonor\nhonra\nhora\nhormiga\nhorno\nhostil\nhoyo\nhueco\nhuelga\nhuerta\nhueso\nhuevo\nhuida\nhuir\nhumano\nhu\u0301medo\nhumilde\nhumo\nhundir\nhuraca\u0301n\nhurto\nicono\nideal\nidioma\ni\u0301dolo\niglesia\niglu\u0301\nigual\nilegal\nilusio\u0301n\nimagen\nima\u0301n\nimitar\nimpar\nimperio\nimponer\nimpulso\nincapaz\ni\u0301ndice\ninerte\ninfiel\ninforme\ningenio\ninicio\ninmenso\ninmune\ninnato\ninsecto\ninstante\nintere\u0301s\ni\u0301ntimo\nintuir\ninu\u0301til\ninvierno\nira\niris\nironi\u0301a\nisla\nislote\njabali\u0301\njabo\u0301n\njamo\u0301n\njarabe\njardi\u0301n\njarra\njaula\njazmi\u0301n\njefe\njeringa\njinete\njornada\njoroba\njoven\njoya\njuerga\njueves\njuez\njugador\njugo\njuguete\njuicio\njunco\njungla\njunio\njuntar\nju\u0301piter\njurar\njusto\njuvenil\njuzgar\nkilo\nkoala\nlabio\nlacio\nlacra\nlado\nladro\u0301n\nlagarto\nla\u0301grima\nlaguna\nlaico\nlamer\nla\u0301mina\nla\u0301mpara\nlana\nlancha\nlangosta\nlanza\nla\u0301piz\nlargo\nlarva\nla\u0301stima\nlata\nla\u0301tex\nlatir\nlaurel\nlavar\nlazo\nleal\nleccio\u0301n\nleche\nlector\nleer\nlegio\u0301n\nlegumbre\nlejano\nlengua\nlento\nlen\u0303a\nleo\u0301n\nleopardo\nlesio\u0301n\nletal\nletra\nleve\nleyenda\nlibertad\nlibro\nlicor\nli\u0301der\nlidiar\nlienzo\nliga\nligero\nlima\nli\u0301mite\nlimo\u0301n\nlimpio\nlince\nlindo\nli\u0301nea\nlingote\nlino\nlinterna\nli\u0301quido\nliso\nlista\nlitera\nlitio\nlitro\nllaga\nllama\nllanto\nllave\nllegar\nllenar\nllevar\nllorar\nllover\nlluvia\nlobo\nlocio\u0301n\nloco\nlocura\nlo\u0301gica\nlogro\nlombriz\nlomo\nlonja\nlote\nlucha\nlucir\nlugar\nlujo\nluna\nlunes\nlupa\nlustro\nluto\nluz\nmaceta\nmacho\nmadera\nmadre\nmaduro\nmaestro\nmafia\nmagia\nmago\nmai\u0301z\nmaldad\nmaleta\nmalla\nmalo\nmama\u0301\nmambo\nmamut\nmanco\nmando\nmanejar\nmanga\nmaniqui\u0301\nmanjar\nmano\nmanso\nmanta\nman\u0303ana\nmapa\nma\u0301quina\nmar\nmarco\nmarea\nmarfil\nmargen\nmarido\nma\u0301rmol\nmarro\u0301n\nmartes\nmarzo\nmasa\nma\u0301scara\nmasivo\nmatar\nmateria\nmatiz\nmatriz\nma\u0301ximo\nmayor\nmazorca\nmecha\nmedalla\nmedio\nme\u0301dula\nmejilla\nmejor\nmelena\nmelo\u0301n\nmemoria\nmenor\nmensaje\nmente\nmenu\u0301\nmercado\nmerengue\nme\u0301rito\nmes\nmeso\u0301n\nmeta\nmeter\nme\u0301todo\nmetro\nmezcla\nmiedo\nmiel\nmiembro\nmiga\nmil\nmilagro\nmilitar\nmillo\u0301n\nmimo\nmina\nminero\nmi\u0301nimo\nminuto\nmiope\nmirar\nmisa\nmiseria\nmisil\nmismo\nmitad\nmito\nmochila\nmocio\u0301n\nmoda\nmodelo\nmoho\nmojar\nmolde\nmoler\nmolino\nmomento\nmomia\nmonarca\nmoneda\nmonja\nmonto\nmon\u0303o\nmorada\nmorder\nmoreno\nmorir\nmorro\nmorsa\nmortal\nmosca\nmostrar\nmotivo\nmover\nmo\u0301vil\nmozo\nmucho\nmudar\nmueble\nmuela\nmuerte\nmuestra\nmugre\nmujer\nmula\nmuleta\nmulta\nmundo\nmun\u0303eca\nmural\nmuro\nmu\u0301sculo\nmuseo\nmusgo\nmu\u0301sica\nmuslo\nna\u0301car\nnacio\u0301n\nnadar\nnaipe\nnaranja\nnariz\nnarrar\nnasal\nnatal\nnativo\nnatural\nna\u0301usea\nnaval\nnave\nnavidad\nnecio\nne\u0301ctar\nnegar\nnegocio\nnegro\nneo\u0301n\nnervio\nneto\nneutro\nnevar\nnevera\nnicho\nnido\nniebla\nnieto\nnin\u0303ez\nnin\u0303o\nni\u0301tido\nnivel\nnobleza\nnoche\nno\u0301mina\nnoria\nnorma\nnorte\nnota\nnoticia\nnovato\nnovela\nnovio\nnube\nnuca\nnu\u0301cleo\nnudillo\nnudo\nnuera\nnueve\nnuez\nnulo\nnu\u0301mero\nnutria\noasis\nobeso\nobispo\nobjeto\nobra\nobrero\nobservar\nobtener\nobvio\noca\nocaso\noce\u0301ano\nochenta\nocho\nocio\nocre\noctavo\noctubre\noculto\nocupar\nocurrir\nodiar\nodio\nodisea\noeste\nofensa\noferta\noficio\nofrecer\nogro\noi\u0301do\noi\u0301r\nojo\nola\noleada\nolfato\nolivo\nolla\nolmo\nolor\nolvido\nombligo\nonda\nonza\nopaco\nopcio\u0301n\no\u0301pera\nopinar\noponer\noptar\no\u0301ptica\nopuesto\noracio\u0301n\norador\noral\no\u0301rbita\norca\norden\noreja\no\u0301rgano\norgi\u0301a\norgullo\noriente\norigen\norilla\noro\norquesta\noruga\nosadi\u0301a\noscuro\nosezno\noso\nostra\noton\u0303o\notro\noveja\no\u0301vulo\no\u0301xido\noxi\u0301geno\noyente\nozono\npacto\npadre\npaella\npa\u0301gina\npago\npai\u0301s\npa\u0301jaro\npalabra\npalco\npaleta\npa\u0301lido\npalma\npaloma\npalpar\npan\npanal\npa\u0301nico\npantera\npan\u0303uelo\npapa\u0301\npapel\npapilla\npaquete\nparar\nparcela\npared\nparir\nparo\npa\u0301rpado\nparque\npa\u0301rrafo\nparte\npasar\npaseo\npasio\u0301n\npaso\npasta\npata\npatio\npatria\npausa\npauta\npavo\npayaso\npeato\u0301n\npecado\npecera\npecho\npedal\npedir\npegar\npeine\npelar\npeldan\u0303o\npelea\npeligro\npellejo\npelo\npeluca\npena\npensar\npen\u0303o\u0301n\npeo\u0301n\npeor\npepino\npequen\u0303o\npera\npercha\nperder\npereza\nperfil\nperico\nperla\npermiso\nperro\npersona\npesa\npesca\npe\u0301simo\npestan\u0303a\npe\u0301talo\npetro\u0301leo\npez\npezun\u0303a\npicar\npicho\u0301n\npie\npiedra\npierna\npieza\npijama\npilar\npiloto\npimienta\npino\npintor\npinza\npin\u0303a\npiojo\npipa\npirata\npisar\npiscina\npiso\npista\npito\u0301n\npizca\nplaca\nplan\nplata\nplaya\nplaza\npleito\npleno\nplomo\npluma\nplural\npobre\npoco\npoder\npodio\npoema\npoesi\u0301a\npoeta\npolen\npolici\u0301a\npollo\npolvo\npomada\npomelo\npomo\npompa\nponer\nporcio\u0301n\nportal\nposada\nposeer\nposible\nposte\npotencia\npotro\npozo\nprado\nprecoz\npregunta\npremio\nprensa\npreso\nprevio\nprimo\npri\u0301ncipe\nprisio\u0301n\nprivar\nproa\nprobar\nproceso\nproducto\nproeza\nprofesor\nprograma\nprole\npromesa\npronto\npropio\npro\u0301ximo\nprueba\npu\u0301blico\npuchero\npudor\npueblo\npuerta\npuesto\npulga\npulir\npulmo\u0301n\npulpo\npulso\npuma\npunto\npun\u0303al\npun\u0303o\npupa\npupila\npure\u0301\nquedar\nqueja\nquemar\nquerer\nqueso\nquieto\nqui\u0301mica\nquince\nquitar\nra\u0301bano\nrabia\nrabo\nracio\u0301n\nradical\nrai\u0301z\nrama\nrampa\nrancho\nrango\nrapaz\nra\u0301pido\nrapto\nrasgo\nraspa\nrato\nrayo\nraza\nrazo\u0301n\nreaccio\u0301n\nrealidad\nreban\u0303o\nrebote\nrecaer\nreceta\nrechazo\nrecoger\nrecreo\nrecto\nrecurso\nred\nredondo\nreducir\nreflejo\nreforma\nrefra\u0301n\nrefugio\nregalo\nregir\nregla\nregreso\nrehe\u0301n\nreino\nrei\u0301r\nreja\nrelato\nrelevo\nrelieve\nrelleno\nreloj\nremar\nremedio\nremo\nrencor\nrendir\nrenta\nreparto\nrepetir\nreposo\nreptil\nres\nrescate\nresina\nrespeto\nresto\nresumen\nretiro\nretorno\nretrato\nreunir\nreve\u0301s\nrevista\nrey\nrezar\nrico\nriego\nrienda\nriesgo\nrifa\nri\u0301gido\nrigor\nrinco\u0301n\nrin\u0303o\u0301n\nri\u0301o\nriqueza\nrisa\nritmo\nrito\nrizo\nroble\nroce\nrociar\nrodar\nrodeo\nrodilla\nroer\nrojizo\nrojo\nromero\nromper\nron\nronco\nronda\nropa\nropero\nrosa\nrosca\nrostro\nrotar\nrubi\u0301\nrubor\nrudo\nrueda\nrugir\nruido\nruina\nruleta\nrulo\nrumbo\nrumor\nruptura\nruta\nrutina\nsa\u0301bado\nsaber\nsabio\nsable\nsacar\nsagaz\nsagrado\nsala\nsaldo\nsalero\nsalir\nsalmo\u0301n\nsalo\u0301n\nsalsa\nsalto\nsalud\nsalvar\nsamba\nsancio\u0301n\nsandi\u0301a\nsanear\nsangre\nsanidad\nsano\nsanto\nsapo\nsaque\nsardina\nsarte\u0301n\nsastre\nsata\u0301n\nsauna\nsaxofo\u0301n\nseccio\u0301n\nseco\nsecreto\nsecta\nsed\nseguir\nseis\nsello\nselva\nsemana\nsemilla\nsenda\nsensor\nsen\u0303al\nsen\u0303or\nseparar\nsepia\nsequi\u0301a\nser\nserie\nsermo\u0301n\nservir\nsesenta\nsesio\u0301n\nseta\nsetenta\nsevero\nsexo\nsexto\nsidra\nsiesta\nsiete\nsiglo\nsigno\nsi\u0301laba\nsilbar\nsilencio\nsilla\nsi\u0301mbolo\nsimio\nsirena\nsistema\nsitio\nsituar\nsobre\nsocio\nsodio\nsol\nsolapa\nsoldado\nsoledad\nso\u0301lido\nsoltar\nsolucio\u0301n\nsombra\nsondeo\nsonido\nsonoro\nsonrisa\nsopa\nsoplar\nsoporte\nsordo\nsorpresa\nsorteo\nsoste\u0301n\nso\u0301tano\nsuave\nsubir\nsuceso\nsudor\nsuegra\nsuelo\nsuen\u0303o\nsuerte\nsufrir\nsujeto\nsulta\u0301n\nsumar\nsuperar\nsuplir\nsuponer\nsupremo\nsur\nsurco\nsuren\u0303o\nsurgir\nsusto\nsutil\ntabaco\ntabique\ntabla\ntabu\u0301\ntaco\ntacto\ntajo\ntalar\ntalco\ntalento\ntalla\ntalo\u0301n\ntaman\u0303o\ntambor\ntango\ntanque\ntapa\ntapete\ntapia\ntapo\u0301n\ntaquilla\ntarde\ntarea\ntarifa\ntarjeta\ntarot\ntarro\ntarta\ntatuaje\ntauro\ntaza\ntazo\u0301n\nteatro\ntecho\ntecla\nte\u0301cnica\ntejado\ntejer\ntejido\ntela\ntele\u0301fono\ntema\ntemor\ntemplo\ntenaz\ntender\ntener\ntenis\ntenso\nteori\u0301a\nterapia\nterco\nte\u0301rmino\nternura\nterror\ntesis\ntesoro\ntestigo\ntetera\ntexto\ntez\ntibio\ntiburo\u0301n\ntiempo\ntienda\ntierra\ntieso\ntigre\ntijera\ntilde\ntimbre\nti\u0301mido\ntimo\ntinta\nti\u0301o\nti\u0301pico\ntipo\ntira\ntiro\u0301n\ntita\u0301n\nti\u0301tere\nti\u0301tulo\ntiza\ntoalla\ntobillo\ntocar\ntocino\ntodo\ntoga\ntoldo\ntomar\ntono\ntonto\ntopar\ntope\ntoque\nto\u0301rax\ntorero\ntormenta\ntorneo\ntoro\ntorpedo\ntorre\ntorso\ntortuga\ntos\ntosco\ntoser\nto\u0301xico\ntrabajo\ntractor\ntraer\ntra\u0301fico\ntrago\ntraje\ntramo\ntrance\ntrato\ntrauma\ntrazar\ntre\u0301bol\ntregua\ntreinta\ntren\ntrepar\ntres\ntribu\ntrigo\ntripa\ntriste\ntriunfo\ntrofeo\ntrompa\ntronco\ntropa\ntrote\ntrozo\ntruco\ntrueno\ntrufa\ntuberi\u0301a\ntubo\ntuerto\ntumba\ntumor\ntu\u0301nel\ntu\u0301nica\nturbina\nturismo\nturno\ntutor\nubicar\nu\u0301lcera\numbral\nunidad\nunir\nuniverso\nuno\nuntar\nun\u0303a\nurbano\nurbe\nurgente\nurna\nusar\nusuario\nu\u0301til\nutopi\u0301a\nuva\nvaca\nvaci\u0301o\nvacuna\nvagar\nvago\nvaina\nvajilla\nvale\nva\u0301lido\nvalle\nvalor\nva\u0301lvula\nvampiro\nvara\nvariar\nvaro\u0301n\nvaso\nvecino\nvector\nvehi\u0301culo\nveinte\nvejez\nvela\nvelero\nveloz\nvena\nvencer\nvenda\nveneno\nvengar\nvenir\nventa\nvenus\nver\nverano\nverbo\nverde\nvereda\nverja\nverso\nverter\nvi\u0301a\nviaje\nvibrar\nvicio\nvi\u0301ctima\nvida\nvi\u0301deo\nvidrio\nviejo\nviernes\nvigor\nvil\nvilla\nvinagre\nvino\nvin\u0303edo\nvioli\u0301n\nviral\nvirgo\nvirtud\nvisor\nvi\u0301spera\nvista\nvitamina\nviudo\nvivaz\nvivero\nvivir\nvivo\nvolca\u0301n\nvolumen\nvolver\nvoraz\nvotar\nvoto\nvoz\nvuelo\nvulgar\nyacer\nyate\nyegua\nyema\nyerno\nyeso\nyodo\nyoga\nyogur\nzafiro\nzanja\nzapato\nzarza\nzona\nzorro\nzumo\nzurdo`.split('\\n');\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wordlist = void 0;\nexports.wordlist = `\u7684\n\u4E00\n\u662F\n\u5728\n\u4E0D\n\u4E86\n\u6709\n\u548C\n\u4EBA\n\u9019\n\u4E2D\n\u5927\n\u70BA\n\u4E0A\n\u500B\n\u570B\n\u6211\n\u4EE5\n\u8981\n\u4ED6\n\u6642\n\u4F86\n\u7528\n\u5011\n\u751F\n\u5230\n\u4F5C\n\u5730\n\u65BC\n\u51FA\n\u5C31\n\u5206\n\u5C0D\n\u6210\n\u6703\n\u53EF\n\u4E3B\n\u767C\n\u5E74\n\u52D5\n\u540C\n\u5DE5\n\u4E5F\n\u80FD\n\u4E0B\n\u904E\n\u5B50\n\u8AAA\n\u7522\n\u7A2E\n\u9762\n\u800C\n\u65B9\n\u5F8C\n\u591A\n\u5B9A\n\u884C\n\u5B78\n\u6CD5\n\u6240\n\u6C11\n\u5F97\n\u7D93\n\u5341\n\u4E09\n\u4E4B\n\u9032\n\u8457\n\u7B49\n\u90E8\n\u5EA6\n\u5BB6\n\u96FB\n\u529B\n\u88E1\n\u5982\n\u6C34\n\u5316\n\u9AD8\n\u81EA\n\u4E8C\n\u7406\n\u8D77\n\u5C0F\n\u7269\n\u73FE\n\u5BE6\n\u52A0\n\u91CF\n\u90FD\n\u5169\n\u9AD4\n\u5236\n\u6A5F\n\u7576\n\u4F7F\n\u9EDE\n\u5F9E\n\u696D\n\u672C\n\u53BB\n\u628A\n\u6027\n\u597D\n\u61C9\n\u958B\n\u5B83\n\u5408\n\u9084\n\u56E0\n\u7531\n\u5176\n\u4E9B\n\u7136\n\u524D\n\u5916\n\u5929\n\u653F\n\u56DB\n\u65E5\n\u90A3\n\u793E\n\u7FA9\n\u4E8B\n\u5E73\n\u5F62\n\u76F8\n\u5168\n\u8868\n\u9593\n\u6A23\n\u8207\n\u95DC\n\u5404\n\u91CD\n\u65B0\n\u7DDA\n\u5167\n\u6578\n\u6B63\n\u5FC3\n\u53CD\n\u4F60\n\u660E\n\u770B\n\u539F\n\u53C8\n\u9EBC\n\u5229\n\u6BD4\n\u6216\n\u4F46\n\u8CEA\n\u6C23\n\u7B2C\n\u5411\n\u9053\n\u547D\n\u6B64\n\u8B8A\n\u689D\n\u53EA\n\u6C92\n\u7D50\n\u89E3\n\u554F\n\u610F\n\u5EFA\n\u6708\n\u516C\n\u7121\n\u7CFB\n\u8ECD\n\u5F88\n\u60C5\n\u8005\n\u6700\n\u7ACB\n\u4EE3\n\u60F3\n\u5DF2\n\u901A\n\u4E26\n\u63D0\n\u76F4\n\u984C\n\u9EE8\n\u7A0B\n\u5C55\n\u4E94\n\u679C\n\u6599\n\u8C61\n\u54E1\n\u9769\n\u4F4D\n\u5165\n\u5E38\n\u6587\n\u7E3D\n\u6B21\n\u54C1\n\u5F0F\n\u6D3B\n\u8A2D\n\u53CA\n\u7BA1\n\u7279\n\u4EF6\n\u9577\n\u6C42\n\u8001\n\u982D\n\u57FA\n\u8CC7\n\u908A\n\u6D41\n\u8DEF\n\u7D1A\n\u5C11\n\u5716\n\u5C71\n\u7D71\n\u63A5\n\u77E5\n\u8F03\n\u5C07\n\u7D44\n\u898B\n\u8A08\n\u5225\n\u5979\n\u624B\n\u89D2\n\u671F\n\u6839\n\u8AD6\n\u904B\n\u8FB2\n\u6307\n\u5E7E\n\u4E5D\n\u5340\n\u5F37\n\u653E\n\u6C7A\n\u897F\n\u88AB\n\u5E79\n\u505A\n\u5FC5\n\u6230\n\u5148\n\u56DE\n\u5247\n\u4EFB\n\u53D6\n\u64DA\n\u8655\n\u968A\n\u5357\n\u7D66\n\u8272\n\u5149\n\u9580\n\u5373\n\u4FDD\n\u6CBB\n\u5317\n\u9020\n\u767E\n\u898F\n\u71B1\n\u9818\n\u4E03\n\u6D77\n\u53E3\n\u6771\n\u5C0E\n\u5668\n\u58D3\n\u5FD7\n\u4E16\n\u91D1\n\u589E\n\u722D\n\u6FDF\n\u968E\n\u6CB9\n\u601D\n\u8853\n\u6975\n\u4EA4\n\u53D7\n\u806F\n\u4EC0\n\u8A8D\n\u516D\n\u5171\n\u6B0A\n\u6536\n\u8B49\n\u6539\n\u6E05\n\u7F8E\n\u518D\n\u63A1\n\u8F49\n\u66F4\n\u55AE\n\u98A8\n\u5207\n\u6253\n\u767D\n\u6559\n\u901F\n\u82B1\n\u5E36\n\u5B89\n\u5834\n\u8EAB\n\u8ECA\n\u4F8B\n\u771F\n\u52D9\n\u5177\n\u842C\n\u6BCF\n\u76EE\n\u81F3\n\u9054\n\u8D70\n\u7A4D\n\u793A\n\u8B70\n\u8072\n\u5831\n\u9B25\n\u5B8C\n\u985E\n\u516B\n\u96E2\n\u83EF\n\u540D\n\u78BA\n\u624D\n\u79D1\n\u5F35\n\u4FE1\n\u99AC\n\u7BC0\n\u8A71\n\u7C73\n\u6574\n\u7A7A\n\u5143\n\u6CC1\n\u4ECA\n\u96C6\n\u6EAB\n\u50B3\n\u571F\n\u8A31\n\u6B65\n\u7FA4\n\u5EE3\n\u77F3\n\u8A18\n\u9700\n\u6BB5\n\u7814\n\u754C\n\u62C9\n\u6797\n\u5F8B\n\u53EB\n\u4E14\n\u7A76\n\u89C0\n\u8D8A\n\u7E54\n\u88DD\n\u5F71\n\u7B97\n\u4F4E\n\u6301\n\u97F3\n\u773E\n\u66F8\n\u5E03\n\u590D\n\u5BB9\n\u5152\n\u9808\n\u969B\n\u5546\n\u975E\n\u9A57\n\u9023\n\u65B7\n\u6DF1\n\u96E3\n\u8FD1\n\u7926\n\u5343\n\u9031\n\u59D4\n\u7D20\n\u6280\n\u5099\n\u534A\n\u8FA6\n\u9752\n\u7701\n\u5217\n\u7FD2\n\u97FF\n\u7D04\n\u652F\n\u822C\n\u53F2\n\u611F\n\u52DE\n\u4FBF\n\u5718\n\u5F80\n\u9178\n\u6B77\n\u5E02\n\u514B\n\u4F55\n\u9664\n\u6D88\n\u69CB\n\u5E9C\n\u7A31\n\u592A\n\u6E96\n\u7CBE\n\u503C\n\u865F\n\u7387\n\u65CF\n\u7DAD\n\u5283\n\u9078\n\u6A19\n\u5BEB\n\u5B58\n\u5019\n\u6BDB\n\u89AA\n\u5FEB\n\u6548\n\u65AF\n\u9662\n\u67E5\n\u6C5F\n\u578B\n\u773C\n\u738B\n\u6309\n\u683C\n\u990A\n\u6613\n\u7F6E\n\u6D3E\n\u5C64\n\u7247\n\u59CB\n\u537B\n\u5C08\n\u72C0\n\u80B2\n\u5EE0\n\u4EAC\n\u8B58\n\u9069\n\u5C6C\n\u5713\n\u5305\n\u706B\n\u4F4F\n\u8ABF\n\u6EFF\n\u7E23\n\u5C40\n\u7167\n\u53C3\n\u7D05\n\u7D30\n\u5F15\n\u807D\n\u8A72\n\u9435\n\u50F9\n\u56B4\n\u9996\n\u5E95\n\u6DB2\n\u5B98\n\u5FB7\n\u96A8\n\u75C5\n\u8607\n\u5931\n\u723E\n\u6B7B\n\u8B1B\n\u914D\n\u5973\n\u9EC3\n\u63A8\n\u986F\n\u8AC7\n\u7F6A\n\u795E\n\u85DD\n\u5462\n\u5E2D\n\u542B\n\u4F01\n\u671B\n\u5BC6\n\u6279\n\u71DF\n\u9805\n\u9632\n\u8209\n\u7403\n\u82F1\n\u6C27\n\u52E2\n\u544A\n\u674E\n\u53F0\n\u843D\n\u6728\n\u5E6B\n\u8F2A\n\u7834\n\u4E9E\n\u5E2B\n\u570D\n\u6CE8\n\u9060\n\u5B57\n\u6750\n\u6392\n\u4F9B\n\u6CB3\n\u614B\n\u5C01\n\u53E6\n\u65BD\n\u6E1B\n\u6A39\n\u6EB6\n\u600E\n\u6B62\n\u6848\n\u8A00\n\u58EB\n\u5747\n\u6B66\n\u56FA\n\u8449\n\u9B5A\n\u6CE2\n\u8996\n\u50C5\n\u8CBB\n\u7DCA\n\u611B\n\u5DE6\n\u7AE0\n\u65E9\n\u671D\n\u5BB3\n\u7E8C\n\u8F15\n\u670D\n\u8A66\n\u98DF\n\u5145\n\u5175\n\u6E90\n\u5224\n\u8B77\n\u53F8\n\u8DB3\n\u67D0\n\u7DF4\n\u5DEE\n\u81F4\n\u677F\n\u7530\n\u964D\n\u9ED1\n\u72AF\n\u8CA0\n\u64CA\n\u8303\n\u7E7C\n\u8208\n\u4F3C\n\u9918\n\u5805\n\u66F2\n\u8F38\n\u4FEE\n\u6545\n\u57CE\n\u592B\n\u5920\n\u9001\n\u7B46\n\u8239\n\u4F54\n\u53F3\n\u8CA1\n\u5403\n\u5BCC\n\u6625\n\u8077\n\u89BA\n\u6F22\n\u756B\n\u529F\n\u5DF4\n\u8DDF\n\u96D6\n\u96DC\n\u98DB\n\u6AA2\n\u5438\n\u52A9\n\u6607\n\u967D\n\u4E92\n\u521D\n\u5275\n\u6297\n\u8003\n\u6295\n\u58DE\n\u7B56\n\u53E4\n\u5F91\n\u63DB\n\u672A\n\u8DD1\n\u7559\n\u92FC\n\u66FE\n\u7AEF\n\u8CAC\n\u7AD9\n\u7C21\n\u8FF0\n\u9322\n\u526F\n\u76E1\n\u5E1D\n\u5C04\n\u8349\n\u885D\n\u627F\n\u7368\n\u4EE4\n\u9650\n\u963F\n\u5BA3\n\u74B0\n\u96D9\n\u8ACB\n\u8D85\n\u5FAE\n\u8B93\n\u63A7\n\u5DDE\n\u826F\n\u8EF8\n\u627E\n\u5426\n\u7D00\n\u76CA\n\u4F9D\n\u512A\n\u9802\n\u790E\n\u8F09\n\u5012\n\u623F\n\u7A81\n\u5750\n\u7C89\n\u6575\n\u7565\n\u5BA2\n\u8881\n\u51B7\n\u52DD\n\u7D55\n\u6790\n\u584A\n\u5291\n\u6E2C\n\u7D72\n\u5354\n\u8A34\n\u5FF5\n\u9673\n\u4ECD\n\u7F85\n\u9E7D\n\u53CB\n\u6D0B\n\u932F\n\u82E6\n\u591C\n\u5211\n\u79FB\n\u983B\n\u9010\n\u9760\n\u6DF7\n\u6BCD\n\u77ED\n\u76AE\n\u7D42\n\u805A\n\u6C7D\n\u6751\n\u96F2\n\u54EA\n\u65E2\n\u8DDD\n\u885B\n\u505C\n\u70C8\n\u592E\n\u5BDF\n\u71D2\n\u8FC5\n\u5883\n\u82E5\n\u5370\n\u6D32\n\u523B\n\u62EC\n\u6FC0\n\u5B54\n\u641E\n\u751A\n\u5BA4\n\u5F85\n\u6838\n\u6821\n\u6563\n\u4FB5\n\u5427\n\u7532\n\u904A\n\u4E45\n\u83DC\n\u5473\n\u820A\n\u6A21\n\u6E56\n\u8CA8\n\u640D\n\u9810\n\u963B\n\u6BEB\n\u666E\n\u7A69\n\u4E59\n\u5ABD\n\u690D\n\u606F\n\u64F4\n\u9280\n\u8A9E\n\u63EE\n\u9152\n\u5B88\n\u62FF\n\u5E8F\n\u7D19\n\u91AB\n\u7F3A\n\u96E8\n\u55CE\n\u91DD\n\u5289\n\u554A\n\u6025\n\u5531\n\u8AA4\n\u8A13\n\u9858\n\u5BE9\n\u9644\n\u7372\n\u8336\n\u9BAE\n\u7CE7\n\u65A4\n\u5B69\n\u812B\n\u786B\n\u80A5\n\u5584\n\u9F8D\n\u6F14\n\u7236\n\u6F38\n\u8840\n\u6B61\n\u68B0\n\u638C\n\u6B4C\n\u6C99\n\u525B\n\u653B\n\u8B02\n\u76FE\n\u8A0E\n\u665A\n\u7C92\n\u4E82\n\u71C3\n\u77DB\n\u4E4E\n\u6BBA\n\u85E5\n\u5BE7\n\u9B6F\n\u8CB4\n\u9418\n\u7164\n\u8B80\n\u73ED\n\u4F2F\n\u9999\n\u4ECB\n\u8FEB\n\u53E5\n\u8C50\n\u57F9\n\u63E1\n\u862D\n\u64D4\n\u5F26\n\u86CB\n\u6C89\n\u5047\n\u7A7F\n\u57F7\n\u7B54\n\u6A02\n\u8AB0\n\u9806\n\u7159\n\u7E2E\n\u5FB5\n\u81C9\n\u559C\n\u677E\n\u8173\n\u56F0\n\u7570\n\u514D\n\u80CC\n\u661F\n\u798F\n\u8CB7\n\u67D3\n\u4E95\n\u6982\n\u6162\n\u6015\n\u78C1\n\u500D\n\u7956\n\u7687\n\u4FC3\n\u975C\n\u88DC\n\u8A55\n\u7FFB\n\u8089\n\u8E10\n\u5C3C\n\u8863\n\u5BEC\n\u63DA\n\u68C9\n\u5E0C\n\u50B7\n\u64CD\n\u5782\n\u79CB\n\u5B9C\n\u6C2B\n\u5957\n\u7763\n\u632F\n\u67B6\n\u4EAE\n\u672B\n\u61B2\n\u6176\n\u7DE8\n\u725B\n\u89F8\n\u6620\n\u96F7\n\u92B7\n\u8A69\n\u5EA7\n\u5C45\n\u6293\n\u88C2\n\u80DE\n\u547C\n\u5A18\n\u666F\n\u5A01\n\u7DA0\n\u6676\n\u539A\n\u76DF\n\u8861\n\u96DE\n\u5B6B\n\u5EF6\n\u5371\n\u81A0\n\u5C4B\n\u9109\n\u81E8\n\u9678\n\u9867\n\u6389\n\u5440\n\u71C8\n\u6B72\n\u63AA\n\u675F\n\u8010\n\u5287\n\u7389\n\u8D99\n\u8DF3\n\u54E5\n\u5B63\n\u8AB2\n\u51F1\n\u80E1\n\u984D\n\u6B3E\n\u7D39\n\u5377\n\u9F4A\n\u5049\n\u84B8\n\u6B96\n\u6C38\n\u5B97\n\u82D7\n\u5DDD\n\u7210\n\u5CA9\n\u5F31\n\u96F6\n\u694A\n\u594F\n\u6CBF\n\u9732\n\u687F\n\u63A2\n\u6ED1\n\u93AE\n\u98EF\n\u6FC3\n\u822A\n\u61F7\n\u8D95\n\u5EAB\n\u596A\n\u4F0A\n\u9748\n\u7A05\n\u9014\n\u6EC5\n\u8CFD\n\u6B78\n\u53EC\n\u9F13\n\u64AD\n\u76E4\n\u88C1\n\u96AA\n\u5EB7\n\u552F\n\u9304\n\u83CC\n\u7D14\n\u501F\n\u7CD6\n\u84CB\n\u6A6B\n\u7B26\n\u79C1\n\u52AA\n\u5802\n\u57DF\n\u69CD\n\u6F64\n\u5E45\n\u54C8\n\u7ADF\n\u719F\n\u87F2\n\u6FA4\n\u8166\n\u58E4\n\u78B3\n\u6B50\n\u904D\n\u5074\n\u5BE8\n\u6562\n\u5FB9\n\u616E\n\u659C\n\u8584\n\u5EAD\n\u7D0D\n\u5F48\n\u98FC\n\u4F38\n\u6298\n\u9EA5\n\u6FD5\n\u6697\n\u8377\n\u74E6\n\u585E\n\u5E8A\n\u7BC9\n\u60E1\n\u6236\n\u8A2A\n\u5854\n\u5947\n\u900F\n\u6881\n\u5200\n\u65CB\n\u8DE1\n\u5361\n\u6C2F\n\u9047\n\u4EFD\n\u6BD2\n\u6CE5\n\u9000\n\u6D17\n\u64FA\n\u7070\n\u5F69\n\u8CE3\n\u8017\n\u590F\n\u64C7\n\u5FD9\n\u9285\n\u737B\n\u786C\n\u4E88\n\u7E41\n\u5708\n\u96EA\n\u51FD\n\u4EA6\n\u62BD\n\u7BC7\n\u9663\n\u9670\n\u4E01\n\u5C3A\n\u8FFD\n\u5806\n\u96C4\n\u8FCE\n\u6CDB\n\u7238\n\u6A13\n\u907F\n\u8B00\n\u5678\n\u91CE\n\u8C6C\n\u65D7\n\u7D2F\n\u504F\n\u5178\n\u9928\n\u7D22\n\u79E6\n\u8102\n\u6F6E\n\u723A\n\u8C46\n\u5FFD\n\u6258\n\u9A5A\n\u5851\n\u907A\n\u6108\n\u6731\n\u66FF\n\u7E96\n\u7C97\n\u50BE\n\u5C1A\n\u75DB\n\u695A\n\u8B1D\n\u596E\n\u8CFC\n\u78E8\n\u541B\n\u6C60\n\u65C1\n\u788E\n\u9AA8\n\u76E3\n\u6355\n\u5F1F\n\u66B4\n\u5272\n\u8CAB\n\u6B8A\n\u91CB\n\u8A5E\n\u4EA1\n\u58C1\n\u9813\n\u5BF6\n\u5348\n\u5875\n\u805E\n\u63ED\n\u70AE\n\u6B98\n\u51AC\n\u6A4B\n\u5A66\n\u8B66\n\u7D9C\n\u62DB\n\u5433\n\u4ED8\n\u6D6E\n\u906D\n\u5F90\n\u60A8\n\u6416\n\u8C37\n\u8D0A\n\u7BB1\n\u9694\n\u8A02\n\u7537\n\u5439\n\u5712\n\u7D1B\n\u5510\n\u6557\n\u5B8B\n\u73BB\n\u5DE8\n\u8015\n\u5766\n\u69AE\n\u9589\n\u7063\n\u9375\n\u51E1\n\u99D0\n\u934B\n\u6551\n\u6069\n\u525D\n\u51DD\n\u9E7C\n\u9F52\n\u622A\n\u7149\n\u9EBB\n\u7D21\n\u7981\n\u5EE2\n\u76DB\n\u7248\n\u7DE9\n\u6DE8\n\u775B\n\u660C\n\u5A5A\n\u6D89\n\u7B52\n\u5634\n\u63D2\n\u5CB8\n\u6717\n\u838A\n\u8857\n\u85CF\n\u59D1\n\u8CBF\n\u8150\n\u5974\n\u5566\n\u6163\n\u4E58\n\u5925\n\u6062\n\u52FB\n\u7D17\n\u624E\n\u8FAF\n\u8033\n\u5F6A\n\u81E3\n\u5104\n\u7483\n\u62B5\n\u8108\n\u79C0\n\u85A9\n\u4FC4\n\u7DB2\n\u821E\n\u5E97\n\u5674\n\u7E31\n\u5BF8\n\u6C57\n\u639B\n\u6D2A\n\u8CC0\n\u9583\n\u67EC\n\u7206\n\u70EF\n\u6D25\n\u7A3B\n\u7246\n\u8EDF\n\u52C7\n\u50CF\n\u6EFE\n\u5398\n\u8499\n\u82B3\n\u80AF\n\u5761\n\u67F1\n\u76EA\n\u817F\n\u5100\n\u65C5\n\u5C3E\n\u8ECB\n\u51B0\n\u8CA2\n\u767B\n\u9ECE\n\u524A\n\u947D\n\u52D2\n\u9003\n\u969C\n\u6C28\n\u90ED\n\u5CF0\n\u5E63\n\u6E2F\n\u4F0F\n\u8ECC\n\u755D\n\u7562\n\u64E6\n\u83AB\n\u523A\n\u6D6A\n\u79D8\n\u63F4\n\u682A\n\u5065\n\u552E\n\u80A1\n\u5CF6\n\u7518\n\u6CE1\n\u7761\n\u7AE5\n\u9444\n\u6E6F\n\u95A5\n\u4F11\n\u532F\n\u820D\n\u7267\n\u7E5E\n\u70B8\n\u54F2\n\u78F7\n\u7E3E\n\u670B\n\u6DE1\n\u5C16\n\u555F\n\u9677\n\u67F4\n\u5448\n\u5F92\n\u984F\n\u6DDA\n\u7A0D\n\u5FD8\n\u6CF5\n\u85CD\n\u62D6\n\u6D1E\n\u6388\n\u93E1\n\u8F9B\n\u58EF\n\u92D2\n\u8CA7\n\u865B\n\u5F4E\n\u6469\n\u6CF0\n\u5E7C\n\u5EF7\n\u5C0A\n\u7A97\n\u7DB1\n\u5F04\n\u96B8\n\u7591\n\u6C0F\n\u5BAE\n\u59D0\n\u9707\n\u745E\n\u602A\n\u5C24\n\u7434\n\u5FAA\n\u63CF\n\u819C\n\u9055\n\u593E\n\u8170\n\u7DE3\n\u73E0\n\u7AAE\n\u68EE\n\u679D\n\u7AF9\n\u6E9D\n\u50AC\n\u7E69\n\u61B6\n\u90A6\n\u5269\n\u5E78\n\u6F3F\n\u6B04\n\u64C1\n\u7259\n\u8CAF\n\u79AE\n\u6FFE\n\u9209\n\u7D0B\n\u7F77\n\u62CD\n\u54B1\n\u558A\n\u8896\n\u57C3\n\u52E4\n\u7F70\n\u7126\n\u6F5B\n\u4F0D\n\u58A8\n\u6B32\n\u7E2B\n\u59D3\n\u520A\n\u98FD\n\u4EFF\n\u734E\n\u92C1\n\u9B3C\n\u9E97\n\u8DE8\n\u9ED8\n\u6316\n\u93C8\n\u6383\n\u559D\n\u888B\n\u70AD\n\u6C61\n\u5E55\n\u8AF8\n\u5F27\n\u52F5\n\u6885\n\u5976\n\u6F54\n\u707D\n\u821F\n\u9451\n\u82EF\n\u8A1F\n\u62B1\n\u6BC0\n\u61C2\n\u5BD2\n\u667A\n\u57D4\n\u5BC4\n\u5C46\n\u8E8D\n\u6E21\n\u6311\n\u4E39\n\u8271\n\u8C9D\n\u78B0\n\u62D4\n\u7239\n\u6234\n\u78BC\n\u5922\n\u82BD\n\u7194\n\u8D64\n\u6F01\n\u54ED\n\u656C\n\u9846\n\u5954\n\u925B\n\u4EF2\n\u864E\n\u7A00\n\u59B9\n\u4E4F\n\u73CD\n\u7533\n\u684C\n\u9075\n\u5141\n\u9686\n\u87BA\n\u5009\n\u9B4F\n\u92B3\n\u66C9\n\u6C2E\n\u517C\n\u96B1\n\u7919\n\u8D6B\n\u64A5\n\u5FE0\n\u8085\n\u7F38\n\u727D\n\u6436\n\u535A\n\u5DE7\n\u6BBC\n\u5144\n\u675C\n\u8A0A\n\u8AA0\n\u78A7\n\u7965\n\u67EF\n\u9801\n\u5DE1\n\u77E9\n\u60B2\n\u704C\n\u9F61\n\u502B\n\u7968\n\u5C0B\n\u6842\n\u92EA\n\u8056\n\u6050\n\u6070\n\u912D\n\u8DA3\n\u62AC\n\u8352\n\u9A30\n\u8CBC\n\u67D4\n\u6EF4\n\u731B\n\u95CA\n\u8F1B\n\u59BB\n\u586B\n\u64A4\n\u5132\n\u7C3D\n\u9B27\n\u64FE\n\u7D2B\n\u7802\n\u905E\n\u6232\n\u540A\n\u9676\n\u4F10\n\u9935\n\u7642\n\u74F6\n\u5A46\n\u64AB\n\u81C2\n\u6478\n\u5FCD\n\u8766\n\u881F\n\u9130\n\u80F8\n\u978F\n\u64E0\n\u5076\n\u68C4\n\u69FD\n\u52C1\n\u4E73\n\u9127\n\u5409\n\u4EC1\n\u721B\n\u78DA\n\u79DF\n\u70CF\n\u8266\n\u4F34\n\u74DC\n\u6DFA\n\u4E19\n\u66AB\n\u71E5\n\u6A61\n\u67F3\n\u8FF7\n\u6696\n\u724C\n\u79E7\n\u81BD\n\u8A73\n\u7C27\n\u8E0F\n\u74F7\n\u8B5C\n\u5446\n\u8CD3\n\u7CCA\n\u6D1B\n\u8F1D\n\u61A4\n\u7AF6\n\u9699\n\u6012\n\u7C98\n\u4E43\n\u7DD2\n\u80A9\n\u7C4D\n\u654F\n\u5857\n\u7199\n\u7686\n\u5075\n\u61F8\n\u6398\n\u4EAB\n\u7CFE\n\u9192\n\u72C2\n\u9396\n\u6DC0\n\u6068\n\u7272\n\u9738\n\u722C\n\u8CDE\n\u9006\n\u73A9\n\u9675\n\u795D\n\u79D2\n\u6D59\n\u8C8C\n\u5F79\n\u5F7C\n\u6089\n\u9D28\n\u8DA8\n\u9CF3\n\u6668\n\u755C\n\u8F29\n\u79E9\n\u5375\n\u7F72\n\u68AF\n\u708E\n\u7058\n\u68CB\n\u9A45\n\u7BE9\n\u5CFD\n\u5192\n\u5565\n\u58FD\n\u8B6F\n\u6D78\n\u6CC9\n\u5E3D\n\u9072\n\u77FD\n\u7586\n\u8CB8\n\u6F0F\n\u7A3F\n\u51A0\n\u5AE9\n\u8105\n\u82AF\n\u7262\n\u53DB\n\u8755\n\u5967\n\u9CF4\n\u5DBA\n\u7F8A\n\u6191\n\u4E32\n\u5858\n\u7E6A\n\u9175\n\u878D\n\u76C6\n\u932B\n\u5EDF\n\u7C4C\n\u51CD\n\u8F14\n\u651D\n\u8972\n\u7B4B\n\u62D2\n\u50DA\n\u65F1\n\u9240\n\u9CE5\n\u6F06\n\u6C88\n\u7709\n\u758F\n\u6DFB\n\u68D2\n\u7A57\n\u785D\n\u97D3\n\u903C\n\u626D\n\u50D1\n\u6DBC\n\u633A\n\u7897\n\u683D\n\u7092\n\u676F\n\u60A3\n\u993E\n\u52F8\n\u8C6A\n\u907C\n\u52C3\n\u9D3B\n\u65E6\n\u540F\n\u62DC\n\u72D7\n\u57CB\n\u8F25\n\u63A9\n\u98F2\n\u642C\n\u7F75\n\u8FAD\n\u52FE\n\u6263\n\u4F30\n\u8523\n\u7D68\n\u9727\n\u4E08\n\u6735\n\u59C6\n\u64EC\n\u5B87\n\u8F2F\n\u965D\n\u96D5\n\u511F\n\u84C4\n\u5D07\n\u526A\n\u5021\n\u5EF3\n\u54AC\n\u99DB\n\u85AF\n\u5237\n\u65A5\n\u756A\n\u8CE6\n\u5949\n\u4F5B\n\u6F86\n\u6F2B\n\u66FC\n\u6247\n\u9223\n\u6843\n\u6276\n\u4ED4\n\u8FD4\n\u4FD7\n\u8667\n\u8154\n\u978B\n\u68F1\n\u8986\n\u6846\n\u6084\n\u53D4\n\u649E\n\u9A19\n\u52D8\n\u65FA\n\u6CB8\n\u5B64\n\u5410\n\u5B5F\n\u6E20\n\u5C48\n\u75BE\n\u5999\n\u60DC\n\u4EF0\n\u72E0\n\u8139\n\u8AE7\n\u62CB\n\u9EF4\n\u6851\n\u5D17\n\u561B\n\u8870\n\u76DC\n\u6EF2\n\u81DF\n\u8CF4\n\u6E67\n\u751C\n\u66F9\n\u95B1\n\u808C\n\u54E9\n\u53B2\n\u70F4\n\u7DEF\n\u6BC5\n\u6628\n\u507D\n\u75C7\n\u716E\n\u5606\n\u91D8\n\u642D\n\u8396\n\u7C60\n\u9177\n\u5077\n\u5F13\n\u9310\n\u6046\n\u5091\n\u5751\n\u9F3B\n\u7FFC\n\u7DB8\n\u6558\n\u7344\n\u902E\n\u7F50\n\u7D61\n\u68DA\n\u6291\n\u81A8\n\u852C\n\u5BFA\n\u9A5F\n\u7A46\n\u51B6\n\u67AF\n\u518A\n\u5C4D\n\u51F8\n\u7D33\n\u576F\n\u72A7\n\u7130\n\u8F5F\n\u6B23\n\u6649\n\u7626\n\u79A6\n\u9320\n\u9326\n\u55AA\n\u65EC\n\u935B\n\u58DF\n\u641C\n\u64B2\n\u9080\n\u4EAD\n\u916F\n\u9081\n\u8212\n\u8106\n\u9176\n\u9592\n\u6182\n\u915A\n\u9811\n\u7FBD\n\u6F32\n\u5378\n\u4ED7\n\u966A\n\u95E2\n\u61F2\n\u676D\n\u59DA\n\u809A\n\u6349\n\u98C4\n\u6F02\n\u6606\n\u6B3A\n\u543E\n\u90CE\n\u70F7\n\u6C41\n\u5475\n\u98FE\n\u856D\n\u96C5\n\u90F5\n\u9077\n\u71D5\n\u6492\n\u59FB\n\u8D74\n\u5BB4\n\u7169\n\u50B5\n\u5E33\n\u6591\n\u9234\n\u65E8\n\u9187\n\u8463\n\u9905\n\u96DB\n\u59FF\n\u62CC\n\u5085\n\u8179\n\u59A5\n\u63C9\n\u8CE2\n\u62C6\n\u6B6A\n\u8461\n\u80FA\n\u4E1F\n\u6D69\n\u5FBD\n\u6602\n\u588A\n\u64CB\n\u89BD\n\u8CAA\n\u6170\n\u7E73\n\u6C6A\n\u614C\n\u99AE\n\u8AFE\n\u59DC\n\u8ABC\n\u5147\n\u52A3\n\u8AA3\n\u8000\n\u660F\n\u8EBA\n\u76C8\n\u9A0E\n\u55AC\n\u6EAA\n\u53E2\n\u76E7\n\u62B9\n\u60B6\n\u8AEE\n\u522E\n\u99D5\n\u7E9C\n\u609F\n\u6458\n\u927A\n\u64F2\n\u9817\n\u5E7B\n\u67C4\n\u60E0\n\u6158\n\u4F73\n\u4EC7\n\u81D8\n\u7AA9\n\u6ECC\n\u528D\n\u77A7\n\u5821\n\u6F51\n\u8525\n\u7F69\n\u970D\n\u6488\n\u80CE\n\u84BC\n\u6FF1\n\u5006\n\u6345\n\u6E58\n\u780D\n\u971E\n\u90B5\n\u8404\n\u760B\n\u6DEE\n\u9042\n\u718A\n\u7CDE\n\u70D8\n\u5BBF\n\u6A94\n\u6208\n\u99C1\n\u5AC2\n\u88D5\n\u5F99\n\u7BAD\n\u6350\n\u8178\n\u6490\n\u66EC\n\u8FA8\n\u6BBF\n\u84EE\n\u6524\n\u652A\n\u91AC\n\u5C4F\n\u75AB\n\u54C0\n\u8521\n\u5835\n\u6CAB\n\u76BA\n\u66A2\n\u758A\n\u95A3\n\u840A\n\u6572\n\u8F44\n\u9264\n\u75D5\n\u58E9\n\u5DF7\n\u9913\n\u798D\n\u4E18\n\u7384\n\u6E9C\n\u66F0\n\u908F\n\u5F6D\n\u5617\n\u537F\n\u59A8\n\u8247\n\u541E\n\u97CB\n\u6028\n\u77EE\n\u6B47`.split('\\n');\n", "// biome-ignore lint/performance/noBarrelFile: _\nexport { wordlist as czech } from '@scure/bip39/wordlists/czech'\nexport { wordlist as english } from '@scure/bip39/wordlists/english'\nexport { wordlist as french } from '@scure/bip39/wordlists/french'\nexport { wordlist as italian } from '@scure/bip39/wordlists/italian'\nexport { wordlist as japanese } from '@scure/bip39/wordlists/japanese'\nexport { wordlist as korean } from '@scure/bip39/wordlists/korean'\nexport { wordlist as portuguese } from '@scure/bip39/wordlists/portuguese'\nexport { wordlist as simplifiedChinese } from '@scure/bip39/wordlists/simplified-chinese'\nexport { wordlist as spanish } from '@scure/bip39/wordlists/spanish'\nexport { wordlist as traditionalChinese } from '@scure/bip39/wordlists/traditional-chinese'\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport { HDKey } from '@scure/bip32'\nexport type { Address } from 'abitype'\nexport {\n  type CreateNonceManagerParameters,\n  createNonceManager,\n  type NonceManager,\n  type NonceManagerSource,\n  nonceManager,\n} from '../utils/nonceManager.js'\nexport {\n  /** @deprecated Use `SignatureToHexErrorType` instead. */\n  type SerializeSignatureErrorType as SignatureToHexErrorType,\n  type SerializeSignatureErrorType,\n  /** @deprecated Use `serializeSignature` instead. */\n  serializeSignature as signatureToHex,\n  serializeSignature,\n} from '../utils/signature/serializeSignature.js'\nexport {\n  type GenerateMnemonicErrorType,\n  generateMnemonic,\n} from './generateMnemonic.js'\nexport {\n  type GeneratePrivateKeyErrorType,\n  generatePrivateKey,\n} from './generatePrivateKey.js'\nexport {\n  type HDKeyToAccountErrorType,\n  type HDKeyToAccountOptions,\n  hdKeyToAccount,\n} from './hdKeyToAccount.js'\nexport {\n  type MnemonicToAccountErrorType,\n  type MnemonicToAccountOptions,\n  mnemonicToAccount,\n} from './mnemonicToAccount.js'\nexport {\n  type PrivateKeyToAccountErrorType,\n  type PrivateKeyToAccountOptions,\n  privateKeyToAccount,\n} from './privateKeyToAccount.js'\nexport { type ToAccountErrorType, toAccount } from './toAccount.js'\nexport type {\n  Account,\n  AccountSource,\n  CustomSource,\n  HDAccount,\n  HDOptions,\n  JsonRpcAccount,\n  LocalAccount,\n  PrivateKeyAccount,\n} from './types.js'\nexport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from './utils/parseAccount.js'\nexport {\n  type PrivateKeyToAddressErrorType,\n  privateKeyToAddress,\n} from './utils/privateKeyToAddress.js'\nexport {\n  type PublicKeyToAddressErrorType,\n  publicKeyToAddress,\n} from './utils/publicKeyToAddress.js'\nexport {\n  type SignErrorType,\n  type SignParameters,\n  type SignReturnType,\n  setSignEntropy,\n  sign,\n} from './utils/sign.js'\nexport {\n  type SignAuthorizationErrorType,\n  type SignAuthorizationParameters,\n  type SignAuthorizationReturnType,\n  signAuthorization,\n} from './utils/signAuthorization.js'\nexport {\n  type SignMessageErrorType,\n  type SignMessageParameters,\n  type SignMessageReturnType,\n  signMessage,\n} from './utils/signMessage.js'\nexport {\n  type SignTransactionErrorType,\n  type SignTransactionParameters,\n  type SignTransactionReturnType,\n  signTransaction,\n} from './utils/signTransaction.js'\nexport {\n  type SignTypedDataErrorType,\n  type SignTypedDataParameters,\n  type SignTypedDataReturnType,\n  signTypedData,\n} from './utils/signTypedData.js'\nexport {\n  czech,\n  english,\n  french,\n  italian,\n  japanese,\n  korean,\n  portuguese,\n  simplifiedChinese,\n  spanish,\n  traditionalChinese,\n} from './wordlists.js'\n", "import type { TypedData } from 'abitype'\nimport { serializeSignature } from '../../../accounts/index.js'\nimport type { ByteArray, Hex, Signature } from '../../../types/misc.js'\nimport type { TypedDataDefinition } from '../../../types/typedData.js'\nimport { encodePacked } from '../../../utils/abi/encodePacked.js'\nimport { type IsHexErrorType, isHex } from '../../../utils/data/isHex.js'\nimport { size } from '../../../utils/data/size.js'\nimport { bytesToHex, stringToHex } from '../../../utils/encoding/toHex.js'\nimport {\n  encodeType,\n  hashStruct,\n} from '../../../utils/signature/hashTypedData.js'\nimport { getTypesForEIP712Domain } from '../../../utils/typedData.js'\n\nexport type WrapTypedDataSignatureParameters<\n  typedData extends TypedData | Record<string, unknown> = TypedData,\n  primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n  ///\n  primaryTypes = typedData extends TypedData ? keyof typedData : string,\n> = TypedDataDefinition<typedData, primaryType, primaryTypes> & {\n  signature: Hex | ByteArray | Signature\n}\n\nexport type WrapTypedDataSignatureReturnType = Hex\n\nexport type WrapTypedDataSignatureErrorType = IsHexErrorType\n\n/**\n * Wraps a typed data signature for ERC-7739.\n *\n * @example\n * ```ts\n * const signature = wrapTypedDataSignature({\n *   domain: {\n *     name: 'Ether Mail',\n *     version: '1',\n *     chainId: 1,\n *     verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n *   },\n *   types: {\n *     Person: [\n *       { name: 'name', type: 'string' },\n *       { name: 'wallet', type: 'address' },\n *     ],\n *     Mail: [\n *       { name: 'from', type: 'Person' },\n *       { name: 'to', type: 'Person' },\n *       { name: 'contents', type: 'string' },\n *     ],\n *   },\n *   primaryType: 'Mail',\n *   message: {\n *     from: {\n *       name: 'Cow',\n *       wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n *     },\n *     to: {\n *       name: 'Bob',\n *       wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n *     },\n *     contents: 'Hello, Bob!',\n *   },\n *   signature: '0x...',\n * })\n * ```\n */\nexport function wrapTypedDataSignature(\n  parameters: WrapTypedDataSignatureParameters,\n): WrapTypedDataSignatureReturnType {\n  const { domain, message, primaryType, signature, types } = parameters\n\n  const signatureHex = (() => {\n    if (isHex(signature)) return signature\n    if (typeof signature === 'object' && 'r' in signature && 's' in signature)\n      return serializeSignature(signature)\n    return bytesToHex(signature)\n  })()\n\n  // Compute dependencies for wrapped signature.\n  const hashedDomain = hashStruct({\n    data: domain ?? {},\n    types: {\n      EIP712Domain: getTypesForEIP712Domain({ domain }),\n    },\n    primaryType: 'EIP712Domain',\n  })\n  const hashedContents = hashStruct({\n    data: message,\n    types: types as any,\n    primaryType,\n  })\n  const encodedType = encodeType({\n    primaryType,\n    types: types as any,\n  })\n\n  // Construct wrapped signature.\n  return encodePacked(\n    ['bytes', 'bytes32', 'bytes32', 'bytes', 'uint16'],\n    [\n      signatureHex,\n      hashedDomain,\n      hashedContents,\n      stringToHex(encodedType),\n      size(stringToHex(encodedType)),\n    ],\n  )\n}\n", "import type { Address, TypedData, TypedDataDomain } from 'abitype'\n\nimport type { Account } from '../../../accounts/types.js'\nimport { parseAccount } from '../../../accounts/utils/parseAccount.js'\nimport {\n  type GetEip712DomainParameters,\n  getEip712Domain,\n} from '../../../actions/public/getEip712Domain.js'\nimport { signTypedData as signTypedData_ } from '../../../actions/wallet/signTypedData.js'\nimport type { Client } from '../../../clients/createClient.js'\nimport type { Transport } from '../../../clients/transports/createTransport.js'\nimport { AccountNotFoundError } from '../../../errors/account.js'\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { GetAccountParameter } from '../../../types/account.js'\nimport type { Chain } from '../../../types/chain.js'\nimport type { Hex } from '../../../types/misc.js'\nimport type { TypedDataDefinition } from '../../../types/typedData.js'\nimport type { OneOf, RequiredBy } from '../../../types/utils.js'\nimport { getAction } from '../../../utils/getAction.js'\nimport type { GetVerifierParameter } from '../types.js'\nimport { wrapTypedDataSignature } from '../utils/wrapTypedDataSignature.js'\n\nexport type SignTypedDataParameters<\n  typedData extends TypedData | Record<string, unknown> = TypedData,\n  primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n  account extends Account | undefined = undefined,\n  accountOverride extends Account | undefined = undefined,\n  verifier extends Address | undefined = Address | undefined,\n  ///\n  primaryTypes = typedData extends TypedData ? keyof typedData : string,\n> = TypedDataDefinition<typedData, primaryType, primaryTypes> &\n  Pick<GetEip712DomainParameters, 'factory' | 'factoryData'> &\n  GetAccountParameter<account, accountOverride> &\n  OneOf<\n    | {\n        verifierDomain: RequiredBy<\n          TypedDataDomain,\n          'chainId' | 'name' | 'verifyingContract' | 'salt' | 'version'\n        >\n        verifier?: undefined\n      }\n    | (GetVerifierParameter<verifier> & {\n        verifierDomain?:\n          | RequiredBy<\n              TypedDataDomain,\n              'chainId' | 'name' | 'verifyingContract' | 'salt' | 'version'\n            >\n          | undefined\n      })\n  >\n\nexport type SignTypedDataReturnType = Hex\n\nexport type SignTypedDataErrorType = ErrorType\n\n/**\n * Signs an [EIP-712](https://eips.ethereum.org/EIPS/eip-712) typed data message via [ERC-7739 `TypedDataSign` format](https://eips.ethereum.org/EIPS/eip-7702).\n *\n * This Action is suitable to sign messages for Smart Accounts that implement (or conform to) [ERC-7739](https://eips.ethereum.org/EIPS/eip-7702) (e.g. Solady's [ERC1271.sol](https://github.com/Vectorized/solady/blob/main/src/accounts/ERC1271.sol)).\n *\n * - Docs: https://viem.sh/experimental/erc7739/signTypedData\n *\n * @param client - Client to use\n * @param parameters - {@link SignTypedDataParameters}\n * @returns The signed data. {@link SignTypedDataReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { signTypedData } from 'viem/experimental/erc7739'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const signature = await signTypedData(client, {\n *   account: '0xE8Df82fA4E10e6A12a9Dab552bceA2acd26De9bb',\n *   domain: {\n *     name: 'Ether Mail',\n *     version: '1',\n *     chainId: 1,\n *     verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n *   },\n *   types: {\n *     Person: [\n *       { name: 'name', type: 'string' },\n *       { name: 'wallet', type: 'address' },\n *     ],\n *     Mail: [\n *       { name: 'from', type: 'Person' },\n *       { name: 'to', type: 'Person' },\n *       { name: 'contents', type: 'string' },\n *     ],\n *   },\n *   primaryType: 'Mail',\n *   message: {\n *     from: {\n *       name: 'Cow',\n *       wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n *     },\n *     to: {\n *       name: 'Bob',\n *       wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n *     },\n *     contents: 'Hello, Bob!',\n *   },\n *   verifier: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { signTypedData } from 'viem/experimental/erc7739'\n *\n * const client = createWalletClient({\n *   account: '0xE8Df82fA4E10e6A12a9Dab552bceA2acd26De9bb'\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const signature = await signTypedData(client, {\n *   domain: {\n *     name: 'Ether Mail',\n *     version: '1',\n *     chainId: 1,\n *     verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n *   },\n *   types: {\n *     Person: [\n *       { name: 'name', type: 'string' },\n *       { name: 'wallet', type: 'address' },\n *     ],\n *     Mail: [\n *       { name: 'from', type: 'Person' },\n *       { name: 'to', type: 'Person' },\n *       { name: 'contents', type: 'string' },\n *     ],\n *   },\n *   primaryType: 'Mail',\n *   message: {\n *     from: {\n *       name: 'Cow',\n *       wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n *     },\n *     to: {\n *       name: 'Bob',\n *       wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n *     },\n *     contents: 'Hello, Bob!',\n *   },\n *   verifier: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function signTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  accountOverride extends Account | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: SignTypedDataParameters<\n    typedData,\n    primaryType,\n    account,\n    accountOverride\n  >,\n): Promise<SignTypedDataReturnType> {\n  const {\n    account: account_ = client.account,\n    domain,\n    factory,\n    factoryData,\n    message,\n    primaryType,\n    types,\n    verifier,\n  } = parameters as unknown as SignTypedDataParameters\n\n  if (!account_)\n    throw new AccountNotFoundError({\n      docsPath: '/experimental/erc7739/signTypedData',\n    })\n  const account = parseAccount(account_!)\n\n  // Retrieve account EIP712 domain.\n  const { domain: verifierDomain } = await (async () => {\n    if (parameters.verifierDomain)\n      return {\n        domain: parameters.verifierDomain,\n      }\n    return getAction(\n      client,\n      getEip712Domain,\n      'getEip712Domain',\n    )({\n      address: verifier!,\n      factory,\n      factoryData,\n    })\n  })()\n\n  // Sign with typed data wrapper.\n  const signature = await getAction(\n    client,\n    signTypedData_,\n    'signTypedData',\n  )({\n    account,\n    domain,\n    types: {\n      ...types,\n      TypedDataSign: [\n        { name: 'contents', type: primaryType },\n        { name: 'name', type: 'string' },\n        { name: 'version', type: 'string' },\n        { name: 'chainId', type: 'uint256' },\n        { name: 'verifyingContract', type: 'address' },\n        { name: 'salt', type: 'bytes32' },\n      ],\n    },\n    primaryType: 'TypedDataSign',\n    message: {\n      contents: message as any,\n      ...(verifierDomain as any),\n    },\n  })\n\n  return wrapTypedDataSignature({\n    domain,\n    message,\n    primaryType,\n    signature,\n    types,\n  })\n}\n", "import type { Address, TypedData } from 'abitype'\nimport type { Client } from '../../../clients/createClient.js'\nimport type { Transport } from '../../../clients/transports/createTransport.js'\nimport type { Account } from '../../../types/account.js'\nimport type { Chain } from '../../../types/chain.js'\nimport {\n  type SignMessageParameters,\n  type SignMessageReturnType,\n  signMessage,\n} from '../actions/signMessage.js'\nimport {\n  type SignTypedDataParameters,\n  type SignTypedDataReturnType,\n  signTypedData,\n} from '../actions/signTypedData.js'\n\nexport type Erc7739Actions<\n  account extends Account | undefined = Account | undefined,\n  verifier extends Address | undefined = Address | undefined,\n> = {\n  /**\n   * Signs a [EIP-191](https://eips.ethereum.org/EIPS/eip-191) personal sign message via [ERC-7739 `PersonalSign` format](https://eips.ethereum.org/EIPS/eip-7702).\n   *\n   * This Action is suitable to sign messages for Smart Accounts that implement (or conform to) [ERC-7739](https://eips.ethereum.org/EIPS/eip-7702) (e.g. Solady's [ERC1271.sol](https://github.com/Vectorized/solady/blob/main/src/accounts/ERC1271.sol)).\n   *\n   * - Docs: https://viem.sh/experimental/erc7739/signMessage\n   *\n   * With the calculated signature, you can:\n   * - use [`verifyMessage`](https://viem.sh/docs/utilities/verifyMessage) to verify the signature,\n   *\n   * @param client - Client to use\n   * @param parameters - {@link SignMessageParameters}\n   * @returns The signed message. {@link SignMessageReturnType}\n   *\n   * @example\n   * ```ts\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { erc7739Actions } from 'viem/experimental/erc7739'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * }).extend(erc7739Actions())\n   *\n   * const signature = await client.signMessage({\n   *   account: '0xE8Df82fA4E10e6A12a9Dab552bceA2acd26De9bb',\n   *   message: 'hello world',\n   *   verifier: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   * ```\n   *\n   * @example Account & Signer Hoisting\n   * ```ts\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { erc7739Actions } from 'viem/experimental/erc7739'\n   *\n   * const client = createWalletClient({\n   *   account: '0xE8Df82fA4E10e6A12a9Dab552bceA2acd26De9bb',\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * }).extend(erc7739Actions({ verifier: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e' }))\n   *\n   * const signature = await client.signMessage({\n   *   message: 'hello world',\n   * })\n   * ```\n   */\n  signMessage: <accountOverride extends Account | undefined = undefined>(\n    parameters: SignMessageParameters<account, accountOverride, verifier>,\n  ) => Promise<SignMessageReturnType>\n  /**\n   * Signs an [EIP-712](https://eips.ethereum.org/EIPS/eip-712) typed data message via [ERC-7739 `TypedDataSign` format](https://eips.ethereum.org/EIPS/eip-7702).\n   *\n   * This Action is suitable to sign messages for Smart Accounts that implement (or conform to) [ERC-7739](https://eips.ethereum.org/EIPS/eip-7702) (e.g. Solady's [ERC1271.sol](https://github.com/Vectorized/solady/blob/main/src/accounts/ERC1271.sol)).\n   *\n   * - Docs: https://viem.sh/experimental/erc7739/signTypedData\n   *\n   * @param client - Client to use\n   * @param parameters - {@link SignTypedDataParameters}\n   * @returns The signed data. {@link SignTypedDataReturnType}\n   *\n   * @example\n   * ```ts\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { erc7739Actions } from 'viem/experimental/erc7739'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * }).extend(erc7739Actions())\n   *\n   * const signature = await client.signTypedData({\n   *   account: '0xE8Df82fA4E10e6A12a9Dab552bceA2acd26De9bb',\n   *   domain: {\n   *     name: 'Ether Mail',\n   *     version: '1',\n   *     chainId: 1,\n   *     verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n   *   },\n   *   types: {\n   *     Person: [\n   *       { name: 'name', type: 'string' },\n   *       { name: 'wallet', type: 'address' },\n   *     ],\n   *     Mail: [\n   *       { name: 'from', type: 'Person' },\n   *       { name: 'to', type: 'Person' },\n   *       { name: 'contents', type: 'string' },\n   *     ],\n   *   },\n   *   primaryType: 'Mail',\n   *   message: {\n   *     from: {\n   *       name: 'Cow',\n   *       wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n   *     },\n   *     to: {\n   *       name: 'Bob',\n   *       wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n   *     },\n   *     contents: 'Hello, Bob!',\n   *   },\n   *   verifier: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   * ```\n   *\n   * @example Account & Signer Hoisting\n   * ```ts\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   * import { erc7739Actions } from 'viem/experimental/erc7739'\n   *\n   * const client = createWalletClient({\n   *   account: '0xE8Df82fA4E10e6A12a9Dab552bceA2acd26De9bb',\n   *   chain: mainnet,\n   *   transport: http(),\n   * }).extend(erc7739Actions({ verifier: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e' }))\n   *\n   * const signature = await client.signTypedData({\n   *   domain: {\n   *     name: 'Ether Mail',\n   *     version: '1',\n   *     chainId: 1,\n   *     verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n   *   },\n   *   types: {\n   *     Person: [\n   *       { name: 'name', type: 'string' },\n   *       { name: 'wallet', type: 'address' },\n   *     ],\n   *     Mail: [\n   *       { name: 'from', type: 'Person' },\n   *       { name: 'to', type: 'Person' },\n   *       { name: 'contents', type: 'string' },\n   *     ],\n   *   },\n   *   primaryType: 'Mail',\n   *   message: {\n   *     from: {\n   *       name: 'Cow',\n   *       wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n   *     },\n   *     to: {\n   *       name: 'Bob',\n   *       wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n   *     },\n   *     contents: 'Hello, Bob!',\n   *   },\n   * })\n   * ```\n   */\n  signTypedData: <\n    const typedData extends TypedData | Record<string, unknown>,\n    primaryType extends keyof typedData | 'EIP712Domain',\n    accountOverride extends Account | undefined = undefined,\n  >(\n    parameters: SignTypedDataParameters<\n      typedData,\n      primaryType,\n      account,\n      accountOverride\n    >,\n  ) => Promise<SignTypedDataReturnType>\n}\n\nexport type Erc7739ActionsParameters<\n  verifier extends Account | Address | undefined =\n    | Account\n    | Address\n    | undefined,\n> = {\n  verifier?: verifier | undefined\n}\n\n/**\n * A suite of Actions based on [Solady contracts](https://github.com/Vectorized/solady).\n *\n * @example\n * import { createPublicClient, createWalletClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { erc7739Actions } from 'viem/experimental'\n *\n * const walletClient = createWalletClient({\n *   chain: mainnet,\n *   transport: http(),\n * }).extend(erc7739Actions())\n *\n * const result = await walletClient.signMessage({...})\n */\nexport function erc7739Actions<\n  verifier extends Address | undefined = undefined,\n>(parameters: Erc7739ActionsParameters<verifier> = {}) {\n  const { verifier } = parameters\n  return <\n    transport extends Transport,\n    chain extends Chain | undefined = Chain | undefined,\n    account extends Account | undefined = Account | undefined,\n  >(\n    client: Client<transport, chain, account>,\n  ): Erc7739Actions<account, verifier> => {\n    return {\n      signMessage: (parameters) =>\n        signMessage(client, { verifier, ...parameters }),\n      signTypedData: (parameters) =>\n        signTypedData(client, { verifier, ...(parameters as any) }),\n    }\n  }\n}\n", "import type { TypedDataDomain } from 'abitype'\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { Hex, SignableMessage } from '../../../types/misc.js'\nimport type { RequiredBy } from '../../../types/utils.js'\nimport { hashTypedData } from '../../../utils/index.js'\nimport type { HashTypedDataErrorType } from '../../../utils/signature/hashTypedData.js'\nimport {\n  type ToPrefixedMessageErrorType,\n  toPrefixedMessage,\n} from '../../../utils/signature/toPrefixedMessage.js'\n\nexport type HashMessageParameters = {\n  message: SignableMessage\n  verifierDomain: RequiredBy<\n    TypedDataDomain,\n    'chainId' | 'name' | 'verifyingContract' | 'version'\n  >\n}\n\nexport type HashMessageReturnType = Hex\n\nexport type HashMessageErrorType =\n  | HashTypedDataErrorType\n  | ToPrefixedMessageErrorType\n  | ErrorType\n\n/**\n * Generates a signable hash for a ERC-7739 personal sign message.\n *\n * @example\n * ```ts\n * const hash = hashMessage({\n *   message: 'hello world',\n *   verifierDomain: {\n *     name: 'Smart Account',\n *     version: '1',\n *     verifyingContract: '0x1234567890abcdef1234567890abcdef12345678',\n *     chainId: 1,\n *   },\n * })\n * ```\n */\nexport function hashMessage(\n  parameters: HashMessageParameters,\n): HashMessageReturnType {\n  const {\n    message,\n    verifierDomain: { salt: _, ...domain },\n  } = parameters\n  return hashTypedData({\n    domain,\n    types: {\n      PersonalSign: [{ name: 'prefixed', type: 'bytes' }],\n    },\n    primaryType: 'PersonalSign',\n    message: {\n      prefixed: toPrefixedMessage(message),\n    },\n  })\n}\n", "import type { TypedData, TypedDataDomain } from 'abitype'\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { Hex } from '../../../types/misc.js'\nimport type { TypedDataDefinition } from '../../../types/typedData.js'\nimport type { RequiredBy } from '../../../types/utils.js'\nimport {\n  type HashTypedDataErrorType as HashTypedDataErrorType_,\n  hashTypedData as hashTypedData_,\n} from '../../../utils/signature/hashTypedData.js'\n\nexport type HashTypedDataParameters<\n  typedData extends TypedData | Record<string, unknown> = TypedData,\n  primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n  ///\n  primaryTypes = typedData extends TypedData ? keyof typedData : string,\n> = TypedDataDefinition<typedData, primaryType, primaryTypes> & {\n  verifierDomain: RequiredBy<\n    TypedDataDomain,\n    'chainId' | 'name' | 'verifyingContract' | 'salt' | 'version'\n  >\n}\n\nexport type HashTypedDataReturnType = Hex\n\nexport type HashTypedDataErrorType = HashTypedDataErrorType_ | ErrorType\n\n/**\n * Generates a signable hash for ERC-7739 typed data.\n *\n * @example\n * ```ts\n * const hash = hashTypedData({\n *   domain: {\n *     name: 'Ether Mail',\n *     version: '1',\n *     chainId: 1,\n *     verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n *   },\n *   types: {\n *     Person: [\n *       { name: 'name', type: 'string' },\n *       { name: 'wallet', type: 'address' },\n *     ],\n *     Mail: [\n *       { name: 'from', type: 'Person' },\n *       { name: 'to', type: 'Person' },\n *       { name: 'contents', type: 'string' },\n *     ],\n *   },\n *   primaryType: 'Mail',\n *   message: {\n *     from: {\n *       name: 'Cow',\n *       wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n *     },\n *     to: {\n *       name: 'Bob',\n *       wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n *     },\n *     contents: 'Hello, Bob!',\n *   },\n *   verifierDomain: {\n *     name: 'Smart Account',\n *     version: '1',\n *     verifyingContract: '0x1234567890abcdef1234567890abcdef12345678',\n *     chainId: 1,\n *   },\n * })\n * ```\n */\nexport function hashTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n>(\n  parameters: HashTypedDataParameters<typedData, primaryType>,\n): HashTypedDataReturnType {\n  const { domain, message, primaryType, types, verifierDomain } = parameters\n\n  return hashTypedData_({\n    domain: domain as any,\n    types: {\n      ...types,\n      TypedDataSign: [\n        { name: 'contents', type: primaryType },\n        { name: 'name', type: 'string' },\n        { name: 'version', type: 'string' },\n        { name: 'chainId', type: 'uint256' },\n        { name: 'verifyingContract', type: 'address' },\n        { name: 'salt', type: 'bytes32' },\n      ],\n    },\n    primaryType: 'TypedDataSign',\n    message: {\n      contents: message as any,\n      ...(verifierDomain as any),\n    },\n  })\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint\nexport {\n  type SignMessageErrorType,\n  type SignMessageParameters,\n  type SignMessageReturnType,\n  signMessage,\n} from './actions/signMessage.js'\nexport {\n  type SignTypedDataErrorType,\n  type SignTypedDataParameters,\n  type SignTypedDataReturnType,\n  signTypedData,\n} from './actions/signTypedData.js'\nexport {\n  type Erc7739Actions,\n  type Erc7739ActionsParameters,\n  erc7739Actions,\n} from './decorators/erc7739.js'\nexport {\n  type HashMessageErrorType,\n  type HashMessageParameters,\n  type HashMessageReturnType,\n  hashMessage,\n} from './utils/hashMessage.js'\nexport {\n  type HashTypedDataErrorType,\n  type HashTypedDataParameters,\n  type HashTypedDataReturnType,\n  hashTypedData,\n} from './utils/hashTypedData.js'\nexport {\n  type WrapTypedDataSignatureErrorType,\n  type WrapTypedDataSignatureParameters,\n  type WrapTypedDataSignatureReturnType,\n  wrapTypedDataSignature,\n} from './utils/wrapTypedDataSignature.js'\n", null, null, "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getParsedType = exports.ZodParsedType = exports.objectUtil = exports.util = void 0;\nvar util;\n(function (util) {\n    util.assertEqual = (_) => { };\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (exports.util = util = {}));\nvar objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (exports.objectUtil = objectUtil = {}));\nexports.ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nconst getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return exports.ZodParsedType.undefined;\n        case \"string\":\n            return exports.ZodParsedType.string;\n        case \"number\":\n            return Number.isNaN(data) ? exports.ZodParsedType.nan : exports.ZodParsedType.number;\n        case \"boolean\":\n            return exports.ZodParsedType.boolean;\n        case \"function\":\n            return exports.ZodParsedType.function;\n        case \"bigint\":\n            return exports.ZodParsedType.bigint;\n        case \"symbol\":\n            return exports.ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return exports.ZodParsedType.array;\n            }\n            if (data === null) {\n                return exports.ZodParsedType.null;\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return exports.ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return exports.ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return exports.ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return exports.ZodParsedType.date;\n            }\n            return exports.ZodParsedType.object;\n        default:\n            return exports.ZodParsedType.unknown;\n    }\n};\nexports.getParsedType = getParsedType;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ZodError = exports.quotelessJson = exports.ZodIssueCode = void 0;\nconst util_js_1 = require(\"./helpers/util.cjs\");\nexports.ZodIssueCode = util_js_1.util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexports.quotelessJson = quotelessJson;\nclass ZodError extends Error {\n    get errors() {\n        return this.issues;\n    }\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util_js_1.util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                const firstEl = sub.path[0];\n                fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n                fieldErrors[firstEl].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nexports.ZodError = ZodError;\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ZodError_js_1 = require(\"../ZodError.cjs\");\nconst util_js_1 = require(\"../helpers/util.cjs\");\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodError_js_1.ZodIssueCode.invalid_type:\n            if (issue.received === util_js_1.ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodError_js_1.ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util_js_1.util.jsonStringifyReplacer)}`;\n            break;\n        case ZodError_js_1.ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util_js_1.util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodError_js_1.ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodError_js_1.ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util_js_1.util.joinValues(issue.options)}`;\n            break;\n        case ZodError_js_1.ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util_js_1.util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodError_js_1.ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodError_js_1.ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodError_js_1.ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodError_js_1.ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util_js_1.util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodError_js_1.ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"bigint\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodError_js_1.ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodError_js_1.ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodError_js_1.ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodError_js_1.ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodError_js_1.ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util_js_1.util.assertNever(issue);\n    }\n    return { message };\n};\nexports.default = errorMap;\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultErrorMap = void 0;\nexports.setErrorMap = setErrorMap;\nexports.getErrorMap = getErrorMap;\nconst en_js_1 = __importDefault(require(\"./locales/en.cjs\"));\nexports.defaultErrorMap = en_js_1.default;\nlet overrideErrorMap = en_js_1.default;\nfunction setErrorMap(map) {\n    overrideErrorMap = map;\n}\nfunction getErrorMap() {\n    return overrideErrorMap;\n}\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAsync = exports.isValid = exports.isDirty = exports.isAborted = exports.OK = exports.DIRTY = exports.INVALID = exports.ParseStatus = exports.EMPTY_PATH = exports.makeIssue = void 0;\nexports.addIssueToContext = addIssueToContext;\nconst errors_js_1 = require(\"../errors.cjs\");\nconst en_js_1 = __importDefault(require(\"../locales/en.cjs\"));\nconst makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    if (issueData.message !== undefined) {\n        return {\n            ...issueData,\n            path: fullPath,\n            message: issueData.message,\n        };\n    }\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: errorMessage,\n    };\n};\nexports.makeIssue = makeIssue;\nexports.EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n    const overrideMap = (0, errors_js_1.getErrorMap)();\n    const issue = (0, exports.makeIssue)({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap, // contextual error map is first priority\n            ctx.schemaErrorMap, // then schema-bound map if available\n            overrideMap, // then global override map\n            overrideMap === en_js_1.default ? undefined : en_js_1.default, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return exports.INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            const key = await pair.key;\n            const value = await pair.value;\n            syncPairs.push({\n                key,\n                value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return exports.INVALID;\n            if (value.status === \"aborted\")\n                return exports.INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nexports.ParseStatus = ParseStatus;\nexports.INVALID = Object.freeze({\n    status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nexports.DIRTY = DIRTY;\nconst OK = (value) => ({ status: \"valid\", value });\nexports.OK = OK;\nconst isAborted = (x) => x.status === \"aborted\";\nexports.isAborted = isAborted;\nconst isDirty = (x) => x.status === \"dirty\";\nexports.isDirty = isDirty;\nconst isValid = (x) => x.status === \"valid\";\nexports.isValid = isValid;\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\nexports.isAsync = isAsync;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.errorUtil = void 0;\nvar errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    // biome-ignore lint:\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (exports.errorUtil = errorUtil = {}));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.discriminatedUnion = exports.date = exports.boolean = exports.bigint = exports.array = exports.any = exports.coerce = exports.ZodFirstPartyTypeKind = exports.late = exports.ZodSchema = exports.Schema = exports.ZodReadonly = exports.ZodPipeline = exports.ZodBranded = exports.BRAND = exports.ZodNaN = exports.ZodCatch = exports.ZodDefault = exports.ZodNullable = exports.ZodOptional = exports.ZodTransformer = exports.ZodEffects = exports.ZodPromise = exports.ZodNativeEnum = exports.ZodEnum = exports.ZodLiteral = exports.ZodLazy = exports.ZodFunction = exports.ZodSet = exports.ZodMap = exports.ZodRecord = exports.ZodTuple = exports.ZodIntersection = exports.ZodDiscriminatedUnion = exports.ZodUnion = exports.ZodObject = exports.ZodArray = exports.ZodVoid = exports.ZodNever = exports.ZodUnknown = exports.ZodAny = exports.ZodNull = exports.ZodUndefined = exports.ZodSymbol = exports.ZodDate = exports.ZodBoolean = exports.ZodBigInt = exports.ZodNumber = exports.ZodString = exports.ZodType = void 0;\nexports.NEVER = exports.void = exports.unknown = exports.union = exports.undefined = exports.tuple = exports.transformer = exports.symbol = exports.string = exports.strictObject = exports.set = exports.record = exports.promise = exports.preprocess = exports.pipeline = exports.ostring = exports.optional = exports.onumber = exports.oboolean = exports.object = exports.number = exports.nullable = exports.null = exports.never = exports.nativeEnum = exports.nan = exports.map = exports.literal = exports.lazy = exports.intersection = exports.instanceof = exports.function = exports.enum = exports.effect = void 0;\nexports.datetimeRegex = datetimeRegex;\nexports.custom = custom;\nconst ZodError_js_1 = require(\"./ZodError.cjs\");\nconst errors_js_1 = require(\"./errors.cjs\");\nconst errorUtil_js_1 = require(\"./helpers/errorUtil.cjs\");\nconst parseUtil_js_1 = require(\"./helpers/parseUtil.cjs\");\nconst util_js_1 = require(\"./helpers/util.cjs\");\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (Array.isArray(this._key)) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if ((0, parseUtil_js_1.isValid)(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError_js_1.ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message ?? ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: message ?? required_error ?? ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: message ?? invalid_type_error ?? ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nclass ZodType {\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return (0, util_js_1.getParsedType)(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: (0, util_js_1.getParsedType)(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new parseUtil_js_1.ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: (0, util_js_1.getParsedType)(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if ((0, parseUtil_js_1.isAsync)(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: params?.async ?? false,\n                contextualErrorMap: params?.errorMap,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: (0, util_js_1.getParsedType)(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    \"~validate\"(data) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: !!this[\"~standard\"].async,\n            },\n            path: [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: (0, util_js_1.getParsedType)(data),\n        };\n        if (!this[\"~standard\"].async) {\n            try {\n                const result = this._parseSync({ data, path: [], parent: ctx });\n                return (0, parseUtil_js_1.isValid)(result)\n                    ? {\n                        value: result.value,\n                    }\n                    : {\n                        issues: ctx.common.issues,\n                    };\n            }\n            catch (err) {\n                if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n                    this[\"~standard\"].async = true;\n                }\n                ctx.common = {\n                    issues: [],\n                    async: true,\n                };\n            }\n        }\n        return this._parseAsync({ data, path: [], parent: ctx }).then((result) => (0, parseUtil_js_1.isValid)(result)\n            ? {\n                value: result.value,\n            }\n            : {\n                issues: ctx.common.issues,\n            });\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params?.errorMap,\n                async: true,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: (0, util_js_1.getParsedType)(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await ((0, parseUtil_js_1.isAsync)(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodError_js_1.ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n        this[\"~standard\"] = {\n            version: 1,\n            vendor: \"zod\",\n            validate: (data) => this[\"~validate\"](data),\n        };\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nexports.ZodType = ZodType;\nexports.Schema = ZodType;\nexports.ZodSchema = ZodType;\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    let secondsRegexSource = `[0-5]\\\\d`;\n    if (args.precision) {\n        secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n    }\n    const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n    return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nfunction isValidJWT(jwt, alg) {\n    if (!jwtRegex.test(jwt))\n        return false;\n    try {\n        const [header] = jwt.split(\".\");\n        if (!header)\n            return false;\n        // Convert base64url to base64\n        const base64 = header\n            .replace(/-/g, \"+\")\n            .replace(/_/g, \"/\")\n            .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n        const decoded = JSON.parse(atob(base64));\n        if (typeof decoded !== \"object\" || decoded === null)\n            return false;\n        if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n            return false;\n        if (!decoded.alg)\n            return false;\n        if (alg && decoded.alg !== alg)\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isValidCidr(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nclass ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== util_js_1.ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        const status = new parseUtil_js_1.ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                            code: ZodError_js_1.ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                            code: ZodError_js_1.ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"email\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"emoji\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"uuid\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"cuid\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"ulid\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"url\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"regex\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"duration\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"ip\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"jwt\") {\n                if (!isValidJWT(input.data, check.alg)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"jwt\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cidr\") {\n                if (!isValidCidr(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"cidr\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"base64\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64url\") {\n                if (!base64urlRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        validation: \"base64url\",\n                        code: ZodError_js_1.ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util_js_1.util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodError_js_1.ZodIssueCode.invalid_string,\n            ...errorUtil_js_1.errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n    }\n    base64url(message) {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return this._addCheck({\n            kind: \"base64url\",\n            ...errorUtil_js_1.errorUtil.errToObj(message),\n        });\n    }\n    jwt(options) {\n        return this._addCheck({ kind: \"jwt\", ...errorUtil_js_1.errorUtil.errToObj(options) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil_js_1.errorUtil.errToObj(options) });\n    }\n    cidr(options) {\n        return this._addCheck({ kind: \"cidr\", ...errorUtil_js_1.errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            offset: options?.offset ?? false,\n            local: options?.local ?? false,\n            ...errorUtil_js_1.errorUtil.errToObj(options?.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            ...errorUtil_js_1.errorUtil.errToObj(options?.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil_js_1.errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options?.position,\n            ...errorUtil_js_1.errorUtil.errToObj(options?.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil_js_1.errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil_js_1.errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil_js_1.errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil_js_1.errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil_js_1.errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * Equivalent to `.min(1)`\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil_js_1.errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isCIDR() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get isBase64url() {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nexports.ZodString = ZodString;\nZodString.create = (params) => {\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nclass ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== util_js_1.ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        let ctx = undefined;\n        const status = new parseUtil_js_1.ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util_js_1.util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util_js_1.util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil_js_1.errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil_js_1.errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil_js_1.errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil_js_1.errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil_js_1.errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil_js_1.errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util_js_1.util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null;\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nexports.ZodNumber = ZodNumber;\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nclass ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            try {\n                input.data = BigInt(input.data);\n            }\n            catch {\n                return this._getInvalidInput(input);\n            }\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== util_js_1.ZodParsedType.bigint) {\n            return this._getInvalidInput(input);\n        }\n        let ctx = undefined;\n        const status = new parseUtil_js_1.ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util_js_1.util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _getInvalidInput(input) {\n        const ctx = this._getOrReturnCtx(input);\n        (0, parseUtil_js_1.addIssueToContext)(ctx, {\n            code: ZodError_js_1.ZodIssueCode.invalid_type,\n            expected: util_js_1.ZodParsedType.bigint,\n            received: ctx.parsedType,\n        });\n        return parseUtil_js_1.INVALID;\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil_js_1.errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil_js_1.errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil_js_1.errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil_js_1.errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil_js_1.errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nexports.ZodBigInt = ZodBigInt;\nZodBigInt.create = (params) => {\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\nclass ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== util_js_1.ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        return (0, parseUtil_js_1.OK)(input.data);\n    }\n}\nexports.ZodBoolean = ZodBoolean;\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nclass ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== util_js_1.ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        if (Number.isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_date,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        const status = new parseUtil_js_1.ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util_js_1.util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil_js_1.errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nexports.ZodDate = ZodDate;\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: params?.coerce || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nclass ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== util_js_1.ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        return (0, parseUtil_js_1.OK)(input.data);\n    }\n}\nexports.ZodSymbol = ZodSymbol;\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nclass ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== util_js_1.ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        return (0, parseUtil_js_1.OK)(input.data);\n    }\n}\nexports.ZodUndefined = ZodUndefined;\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nclass ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== util_js_1.ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        return (0, parseUtil_js_1.OK)(input.data);\n    }\n}\nexports.ZodNull = ZodNull;\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nclass ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return (0, parseUtil_js_1.OK)(input.data);\n    }\n}\nexports.ZodAny = ZodAny;\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nclass ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return (0, parseUtil_js_1.OK)(input.data);\n    }\n}\nexports.ZodUnknown = ZodUnknown;\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nclass ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        (0, parseUtil_js_1.addIssueToContext)(ctx, {\n            code: ZodError_js_1.ZodIssueCode.invalid_type,\n            expected: util_js_1.ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return parseUtil_js_1.INVALID;\n    }\n}\nexports.ZodNever = ZodNever;\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nclass ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== util_js_1.ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        return (0, parseUtil_js_1.OK)(input.data);\n    }\n}\nexports.ZodVoid = ZodVoid;\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nclass ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== util_js_1.ZodParsedType.array) {\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                    code: tooBig ? ZodError_js_1.ZodIssueCode.too_big : ZodError_js_1.ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                    code: ZodError_js_1.ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                    code: ZodError_js_1.ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return parseUtil_js_1.ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return parseUtil_js_1.ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil_js_1.errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil_js_1.errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil_js_1.errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nexports.ZodArray = ZodArray;\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nclass ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util_js_1.util.objectKeys(shape);\n        this._cached = { shape, keys };\n        return this._cached;\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== util_js_1.ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                        code: ZodError_js_1.ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") {\n            }\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return parseUtil_js_1.ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return parseUtil_js_1.ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil_js_1.errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: errorUtil_js_1.errorUtil.errToObj(message).message ?? defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        for (const key of util_js_1.util.objectKeys(mask)) {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        for (const key of util_js_1.util.objectKeys(this.shape)) {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        for (const key of util_js_1.util.objectKeys(this.shape)) {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        for (const key of util_js_1.util.objectKeys(this.shape)) {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util_js_1.util.objectKeys(this.shape));\n    }\n}\nexports.ZodObject = ZodObject;\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nclass ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError_js_1.ZodError(result.ctx.common.issues));\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError_js_1.ZodError(issues));\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nexports.ZodUnion = ZodUnion;\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util_js_1.util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== util_js_1.ZodParsedType.object) {\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nexports.ZodDiscriminatedUnion = ZodDiscriminatedUnion;\nfunction mergeValues(a, b) {\n    const aType = (0, util_js_1.getParsedType)(a);\n    const bType = (0, util_js_1.getParsedType)(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === util_js_1.ZodParsedType.object && bType === util_js_1.ZodParsedType.object) {\n        const bKeys = util_js_1.util.objectKeys(b);\n        const sharedKeys = util_js_1.util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === util_js_1.ZodParsedType.array && bType === util_js_1.ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === util_js_1.ZodParsedType.date && bType === util_js_1.ZodParsedType.date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nclass ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if ((0, parseUtil_js_1.isAborted)(parsedLeft) || (0, parseUtil_js_1.isAborted)(parsedRight)) {\n                return parseUtil_js_1.INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                    code: ZodError_js_1.ZodIssueCode.invalid_intersection_types,\n                });\n                return parseUtil_js_1.INVALID;\n            }\n            if ((0, parseUtil_js_1.isDirty)(parsedLeft) || (0, parseUtil_js_1.isDirty)(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nexports.ZodIntersection = ZodIntersection;\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nclass ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== util_js_1.ZodParsedType.array) {\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return parseUtil_js_1.ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return parseUtil_js_1.ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nexports.ZodTuple = ZodTuple;\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nclass ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== util_js_1.ZodParsedType.object) {\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return parseUtil_js_1.ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return parseUtil_js_1.ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nexports.ZodRecord = ZodRecord;\nclass ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== util_js_1.ZodParsedType.map) {\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return parseUtil_js_1.INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return parseUtil_js_1.INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nexports.ZodMap = ZodMap;\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nclass ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== util_js_1.ZodParsedType.set) {\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                    code: ZodError_js_1.ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                    code: ZodError_js_1.ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return parseUtil_js_1.INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil_js_1.errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil_js_1.errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nexports.ZodSet = ZodSet;\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nclass ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== util_js_1.ZodParsedType.function) {\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return (0, parseUtil_js_1.makeIssue)({\n                data: args,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, (0, errors_js_1.getErrorMap)(), errors_js_1.defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodError_js_1.ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return (0, parseUtil_js_1.makeIssue)({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, (0, errors_js_1.getErrorMap)(), errors_js_1.defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodError_js_1.ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return (0, parseUtil_js_1.OK)(async function (...args) {\n                const error = new ZodError_js_1.ZodError([]);\n                const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return (0, parseUtil_js_1.OK)(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError_js_1.ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError_js_1.ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nexports.ZodFunction = ZodFunction;\nclass ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nexports.ZodLazy = ZodLazy;\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nclass ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                received: ctx.data,\n                code: ZodError_js_1.ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nexports.ZodLiteral = ZodLiteral;\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nclass ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                expected: util_js_1.util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(this._def.values);\n        }\n        if (!this._cache.has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                received: ctx.data,\n                code: ZodError_js_1.ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        return (0, parseUtil_js_1.OK)(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\nexports.ZodEnum = ZodEnum;\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util_js_1.util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== util_js_1.ZodParsedType.string && ctx.parsedType !== util_js_1.ZodParsedType.number) {\n            const expectedValues = util_js_1.util.objectValues(nativeEnumValues);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                expected: util_js_1.util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(util_js_1.util.getValidEnumValues(this._def.values));\n        }\n        if (!this._cache.has(input.data)) {\n            const expectedValues = util_js_1.util.objectValues(nativeEnumValues);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                received: ctx.data,\n                code: ZodError_js_1.ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        return (0, parseUtil_js_1.OK)(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nexports.ZodNativeEnum = ZodNativeEnum;\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nclass ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== util_js_1.ZodParsedType.promise && ctx.common.async === false) {\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        const promisified = ctx.parsedType === util_js_1.ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n        return (0, parseUtil_js_1.OK)(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nexports.ZodPromise = ZodPromise;\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nclass ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                (0, parseUtil_js_1.addIssueToContext)(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return parseUtil_js_1.INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return parseUtil_js_1.INVALID;\n                    if (result.status === \"dirty\")\n                        return (0, parseUtil_js_1.DIRTY)(result.value);\n                    if (status.value === \"dirty\")\n                        return (0, parseUtil_js_1.DIRTY)(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return parseUtil_js_1.INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return parseUtil_js_1.INVALID;\n                if (result.status === \"dirty\")\n                    return (0, parseUtil_js_1.DIRTY)(result.value);\n                if (status.value === \"dirty\")\n                    return (0, parseUtil_js_1.DIRTY)(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return parseUtil_js_1.INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return parseUtil_js_1.INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!(0, parseUtil_js_1.isValid)(base))\n                    return parseUtil_js_1.INVALID;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n                    if (!(0, parseUtil_js_1.isValid)(base))\n                        return parseUtil_js_1.INVALID;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n                        status: status.value,\n                        value: result,\n                    }));\n                });\n            }\n        }\n        util_js_1.util.assertNever(effect);\n    }\n}\nexports.ZodEffects = ZodEffects;\nexports.ZodTransformer = ZodEffects;\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nclass ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === util_js_1.ZodParsedType.undefined) {\n            return (0, parseUtil_js_1.OK)(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nexports.ZodOptional = ZodOptional;\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nclass ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === util_js_1.ZodParsedType.null) {\n            return (0, parseUtil_js_1.OK)(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nexports.ZodNullable = ZodNullable;\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nclass ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === util_js_1.ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nexports.ZodDefault = ZodDefault;\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nclass ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if ((0, parseUtil_js_1.isAsync)(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError_js_1.ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError_js_1.ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nexports.ZodCatch = ZodCatch;\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nclass ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== util_js_1.ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            (0, parseUtil_js_1.addIssueToContext)(ctx, {\n                code: ZodError_js_1.ZodIssueCode.invalid_type,\n                expected: util_js_1.ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return parseUtil_js_1.INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nexports.ZodNaN = ZodNaN;\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nexports.BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nexports.ZodBranded = ZodBranded;\nclass ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return parseUtil_js_1.INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return (0, parseUtil_js_1.DIRTY)(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return parseUtil_js_1.INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nexports.ZodPipeline = ZodPipeline;\nclass ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if ((0, parseUtil_js_1.isValid)(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return (0, parseUtil_js_1.isAsync)(result) ? result.then((data) => freeze(data)) : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nexports.ZodReadonly = ZodReadonly;\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n//////////                    //////////\n//////////      z.custom      //////////\n//////////                    //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n    const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n    const p2 = typeof p === \"string\" ? { message: p } : p;\n    return p2;\n}\nfunction custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            const r = check(data);\n            if (r instanceof Promise) {\n                return r.then((r) => {\n                    if (!r) {\n                        const params = cleanParams(_params, data);\n                        const _fatal = params.fatal ?? fatal ?? true;\n                        ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n                    }\n                });\n            }\n            if (!r) {\n                const params = cleanParams(_params, data);\n                const _fatal = params.fatal ?? fatal ?? true;\n                ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n            }\n            return;\n        });\n    return ZodAny.create();\n}\nexports.late = {\n    object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (exports.ZodFirstPartyTypeKind = ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n    constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nexports.instanceof = instanceOfType;\nconst stringType = ZodString.create;\nexports.string = stringType;\nconst numberType = ZodNumber.create;\nexports.number = numberType;\nconst nanType = ZodNaN.create;\nexports.nan = nanType;\nconst bigIntType = ZodBigInt.create;\nexports.bigint = bigIntType;\nconst booleanType = ZodBoolean.create;\nexports.boolean = booleanType;\nconst dateType = ZodDate.create;\nexports.date = dateType;\nconst symbolType = ZodSymbol.create;\nexports.symbol = symbolType;\nconst undefinedType = ZodUndefined.create;\nexports.undefined = undefinedType;\nconst nullType = ZodNull.create;\nexports.null = nullType;\nconst anyType = ZodAny.create;\nexports.any = anyType;\nconst unknownType = ZodUnknown.create;\nexports.unknown = unknownType;\nconst neverType = ZodNever.create;\nexports.never = neverType;\nconst voidType = ZodVoid.create;\nexports.void = voidType;\nconst arrayType = ZodArray.create;\nexports.array = arrayType;\nconst objectType = ZodObject.create;\nexports.object = objectType;\nconst strictObjectType = ZodObject.strictCreate;\nexports.strictObject = strictObjectType;\nconst unionType = ZodUnion.create;\nexports.union = unionType;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nexports.discriminatedUnion = discriminatedUnionType;\nconst intersectionType = ZodIntersection.create;\nexports.intersection = intersectionType;\nconst tupleType = ZodTuple.create;\nexports.tuple = tupleType;\nconst recordType = ZodRecord.create;\nexports.record = recordType;\nconst mapType = ZodMap.create;\nexports.map = mapType;\nconst setType = ZodSet.create;\nexports.set = setType;\nconst functionType = ZodFunction.create;\nexports.function = functionType;\nconst lazyType = ZodLazy.create;\nexports.lazy = lazyType;\nconst literalType = ZodLiteral.create;\nexports.literal = literalType;\nconst enumType = ZodEnum.create;\nexports.enum = enumType;\nconst nativeEnumType = ZodNativeEnum.create;\nexports.nativeEnum = nativeEnumType;\nconst promiseType = ZodPromise.create;\nexports.promise = promiseType;\nconst effectsType = ZodEffects.create;\nexports.effect = effectsType;\nexports.transformer = effectsType;\nconst optionalType = ZodOptional.create;\nexports.optional = optionalType;\nconst nullableType = ZodNullable.create;\nexports.nullable = nullableType;\nconst preprocessType = ZodEffects.createWithPreprocess;\nexports.preprocess = preprocessType;\nconst pipelineType = ZodPipeline.create;\nexports.pipeline = pipelineType;\nconst ostring = () => stringType().optional();\nexports.ostring = ostring;\nconst onumber = () => numberType().optional();\nexports.onumber = onumber;\nconst oboolean = () => booleanType().optional();\nexports.oboolean = oboolean;\nexports.coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexports.NEVER = parseUtil_js_1.INVALID;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./errors.cjs\"), exports);\n__exportStar(require(\"./helpers/parseUtil.cjs\"), exports);\n__exportStar(require(\"./helpers/typeAliases.cjs\"), exports);\n__exportStar(require(\"./helpers/util.cjs\"), exports);\n__exportStar(require(\"./types.cjs\"), exports);\n__exportStar(require(\"./ZodError.cjs\"), exports);\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.z = void 0;\nconst z = __importStar(require(\"./v3/external.cjs\"));\nexports.z = z;\n__exportStar(require(\"./v3/external.cjs\"), exports);\nexports.default = z;\n", "import { SettleResponse } from \"../types\";\nimport { PaymentPayload, PaymentRequired } from \"../types/payments\";\nimport { Base64EncodedRegex, safeBase64Decode, safeBase64Encode } from \"../utils\";\n\n// HTTP Methods that typically use query parameters\nexport type QueryParamMethods = \"GET\" | \"HEAD\" | \"DELETE\";\n\n// HTTP Methods that typically use request body\nexport type BodyMethods = \"POST\" | \"PUT\" | \"PATCH\";\n\n/**\n * Encodes a payment payload as a base64 header value.\n *\n * @param paymentPayload - The payment payload to encode\n * @returns Base64 encoded string representation of the payment payload\n */\nexport function encodePaymentSignatureHeader(paymentPayload: PaymentPayload): string {\n  return safeBase64Encode(JSON.stringify(paymentPayload));\n}\n\n/**\n * Decodes a base64 payment signature header into a payment payload.\n *\n * @param paymentSignatureHeader - The base64 encoded payment signature header\n * @returns The decoded payment payload\n */\nexport function decodePaymentSignatureHeader(paymentSignatureHeader: string): PaymentPayload {\n  if (!Base64EncodedRegex.test(paymentSignatureHeader)) {\n    throw new Error(\"Invalid payment signature header\");\n  }\n  return JSON.parse(safeBase64Decode(paymentSignatureHeader)) as PaymentPayload;\n}\n\n/**\n * Encodes a payment required object as a base64 header value.\n *\n * @param paymentRequired - The payment required object to encode\n * @returns Base64 encoded string representation of the payment required object\n */\nexport function encodePaymentRequiredHeader(paymentRequired: PaymentRequired): string {\n  return safeBase64Encode(JSON.stringify(paymentRequired));\n}\n\n/**\n * Decodes a base64 payment required header into a payment required object.\n *\n * @param paymentRequiredHeader - The base64 encoded payment required header\n * @returns The decoded payment required object\n */\nexport function decodePaymentRequiredHeader(paymentRequiredHeader: string): PaymentRequired {\n  if (!Base64EncodedRegex.test(paymentRequiredHeader)) {\n    throw new Error(\"Invalid payment required header\");\n  }\n  return JSON.parse(safeBase64Decode(paymentRequiredHeader)) as PaymentRequired;\n}\n\n/**\n * Encodes a payment response as a base64 header value.\n *\n * @param paymentResponse - The payment response to encode\n * @returns Base64 encoded string representation of the payment response\n */\nexport function encodePaymentResponseHeader(paymentResponse: SettleResponse): string {\n  return safeBase64Encode(JSON.stringify(paymentResponse));\n}\n\n/**\n * Decodes a base64 payment response header into a settle response.\n *\n * @param paymentResponseHeader - The base64 encoded payment response header\n * @returns The decoded settle response\n */\nexport function decodePaymentResponseHeader(paymentResponseHeader: string): SettleResponse {\n  if (!Base64EncodedRegex.test(paymentResponseHeader)) {\n    throw new Error(\"Invalid payment response header\");\n  }\n  return JSON.parse(safeBase64Decode(paymentResponseHeader)) as SettleResponse;\n}\n\n// Export HTTP service and types\nexport {\n  x402HTTPResourceServer,\n  HTTPAdapter,\n  HTTPRequestContext,\n  HTTPTransportContext,\n  HTTPResponseInstructions,\n  HTTPProcessResult,\n  PaywallConfig,\n  PaywallProvider,\n  PaymentOption,\n  RouteConfig,\n  RoutesConfig,\n  CompiledRoute,\n  DynamicPayTo,\n  DynamicPrice,\n  UnpaidResponseBody,\n  HTTPResponseBody,\n  SettlementFailedResponseBody,\n  ProcessSettleResultResponse,\n  ProcessSettleSuccessResponse,\n  ProcessSettleFailureResponse,\n  RouteValidationError,\n  RouteConfigurationError,\n  ProtectedRequestHook,\n} from \"./x402HTTPResourceServer\";\nexport {\n  HTTPFacilitatorClient,\n  FacilitatorClient,\n  FacilitatorConfig,\n} from \"./httpFacilitatorClient\";\nexport { FacilitatorResponseError, getFacilitatorResponseError } from \"../types\";\nexport { x402HTTPClient, PaymentRequiredContext, PaymentRequiredHook } from \"./x402HTTPClient\";\n", "import { Network } from \"../types\";\n\n/**\n * Scheme data structure for facilitator storage\n */\nexport interface SchemeData<T> {\n  facilitator: T;\n  networks: Set<Network>;\n  pattern: Network;\n}\n\nexport const findSchemesByNetwork = <T>(\n  map: Map<string, Map<string, T>>,\n  network: Network,\n): Map<string, T> | undefined => {\n  // Direct match first\n  let implementationsByScheme = map.get(network);\n\n  if (!implementationsByScheme) {\n    // Try pattern matching for registered network patterns\n    for (const [registeredNetworkPattern, implementations] of map.entries()) {\n      // Convert the registered network pattern to a regex\n      // e.g., \"eip155:*\" becomes /^eip155:.*$/\n      const pattern = registeredNetworkPattern\n        .replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\") // Escape special regex chars except *\n        .replace(/\\\\\\*/g, \".*\"); // Replace escaped * with .*\n\n      const regex = new RegExp(`^${pattern}$`);\n\n      if (regex.test(network)) {\n        implementationsByScheme = implementations;\n        break;\n      }\n    }\n  }\n\n  return implementationsByScheme;\n};\n\nexport const findByNetworkAndScheme = <T>(\n  map: Map<string, Map<string, T>>,\n  scheme: string,\n  network: Network,\n): T | undefined => {\n  return findSchemesByNetwork(map, network)?.get(scheme);\n};\n\n/**\n * Finds a facilitator by scheme and network using pattern matching.\n * Works with new SchemeData storage structure.\n *\n * @param schemeMap - Map of scheme names to SchemeData\n * @param scheme - The scheme to find\n * @param network - The network to match against\n * @returns The facilitator if found, undefined otherwise\n */\nexport const findFacilitatorBySchemeAndNetwork = <T>(\n  schemeMap: Map<string, SchemeData<T>>,\n  scheme: string,\n  network: Network,\n): T | undefined => {\n  const schemeData = schemeMap.get(scheme);\n  if (!schemeData) return undefined;\n\n  // Check if network is in the stored networks set\n  if (schemeData.networks.has(network)) {\n    return schemeData.facilitator;\n  }\n\n  // Try pattern matching\n  const patternRegex = new RegExp(\"^\" + schemeData.pattern.replace(\"*\", \".*\") + \"$\");\n  if (patternRegex.test(network)) {\n    return schemeData.facilitator;\n  }\n\n  return undefined;\n};\n\nexport const Base64EncodedRegex = /^[A-Za-z0-9+/]*={0,2}$/;\n\n/**\n * Encodes a string to base64 format\n *\n * @param data - The string to be encoded to base64\n * @returns The base64 encoded string\n */\nexport function safeBase64Encode(data: string): string {\n  if (typeof globalThis !== \"undefined\" && typeof globalThis.btoa === \"function\") {\n    const bytes = new TextEncoder().encode(data);\n    const binaryString = Array.from(bytes, byte => String.fromCharCode(byte)).join(\"\");\n    return globalThis.btoa(binaryString);\n  }\n  return Buffer.from(data, \"utf8\").toString(\"base64\");\n}\n\n/**\n * Decodes a base64 string back to its original format\n *\n * @param data - The base64 encoded string to be decoded\n * @returns The decoded string in UTF-8 format\n */\nexport function safeBase64Decode(data: string): string {\n  if (typeof globalThis !== \"undefined\" && typeof globalThis.atob === \"function\") {\n    const binaryString = globalThis.atob(data);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n    const decoder = new TextDecoder(\"utf-8\");\n    return decoder.decode(bytes);\n  }\n  return Buffer.from(data, \"base64\").toString(\"utf-8\");\n}\n\n/**\n * Deep equality comparison for payment requirements\n * Uses a normalized JSON.stringify for consistent comparison\n *\n * @param obj1 - First object to compare\n * @param obj2 - Second object to compare\n * @returns True if objects are deeply equal\n */\nexport function deepEqual(obj1: unknown, obj2: unknown): boolean {\n  // Normalize and stringify both objects for comparison\n  // This handles nested objects, arrays, and different property orders\n  const normalize = (obj: unknown): string => {\n    // Handle primitives and null/undefined\n    if (obj === null || obj === undefined) return JSON.stringify(obj);\n    if (typeof obj !== \"object\") return JSON.stringify(obj);\n\n    // Handle arrays\n    if (Array.isArray(obj)) {\n      return JSON.stringify(\n        obj.map(item =>\n          typeof item === \"object\" && item !== null ? JSON.parse(normalize(item)) : item,\n        ),\n      );\n    }\n\n    // Handle objects - sort keys and recursively normalize values\n    const sorted: Record<string, unknown> = {};\n    Object.keys(obj as Record<string, unknown>)\n      .sort()\n      .forEach(key => {\n        const value = (obj as Record<string, unknown>)[key];\n        sorted[key] =\n          typeof value === \"object\" && value !== null ? JSON.parse(normalize(value)) : value;\n      });\n    return JSON.stringify(sorted);\n  };\n\n  try {\n    return normalize(obj1) === normalize(obj2);\n  } catch {\n    // Fallback to simple comparison if normalization fails\n    return JSON.stringify(obj1) === JSON.stringify(obj2);\n  }\n}\n", "import { PaymentPayload, PaymentRequirements } from \"./payments\";\nimport { Network } from \"./\";\n\nexport type VerifyRequest = {\n  x402Version: number;\n  paymentPayload: PaymentPayload;\n  paymentRequirements: PaymentRequirements;\n};\n\nexport type VerifyResponse = {\n  isValid: boolean;\n  invalidReason?: string;\n  invalidMessage?: string;\n  payer?: string;\n  extensions?: Record<string, unknown>;\n};\n\nexport type SettleRequest = {\n  x402Version: number;\n  paymentPayload: PaymentPayload;\n  paymentRequirements: PaymentRequirements;\n};\n\nexport type SettleResponse = {\n  success: boolean;\n  errorReason?: string;\n  errorMessage?: string;\n  payer?: string;\n  transaction: string;\n  network: Network;\n  /** Actual amount settled in atomic token units. Present for schemes like `upto` where settlement amount may differ from the authorized maximum. */\n  amount?: string;\n  extensions?: Record<string, unknown>;\n};\n\nexport type SupportedKind = {\n  x402Version: number;\n  scheme: string;\n  network: Network;\n  extra?: Record<string, unknown>;\n};\n\nexport type SupportedResponse = {\n  kinds: SupportedKind[];\n  extensions: string[];\n  signers: Record<string, string[]>; // CAIP family pattern → Signer addresses\n};\n\n/**\n * Error thrown when payment verification fails.\n */\nexport class VerifyError extends Error {\n  readonly invalidReason?: string;\n  readonly invalidMessage?: string;\n  readonly payer?: string;\n  readonly statusCode: number;\n\n  /**\n   * Creates a VerifyError from a failed verification response.\n   *\n   * @param statusCode - HTTP status code from the facilitator\n   * @param response - The verify response containing error details\n   */\n  constructor(statusCode: number, response: VerifyResponse) {\n    const reason = response.invalidReason || \"unknown reason\";\n    const message = response.invalidMessage;\n    super(message ? `${reason}: ${message}` : reason);\n    this.name = \"VerifyError\";\n    this.statusCode = statusCode;\n    this.invalidReason = response.invalidReason;\n    this.invalidMessage = response.invalidMessage;\n    this.payer = response.payer;\n  }\n}\n\n/**\n * Error thrown when payment settlement fails.\n */\nexport class SettleError extends Error {\n  readonly errorReason?: string;\n  readonly errorMessage?: string;\n  readonly payer?: string;\n  readonly transaction: string;\n  readonly network: Network;\n  readonly statusCode: number;\n\n  /**\n   * Creates a SettleError from a failed settlement response.\n   *\n   * @param statusCode - HTTP status code from the facilitator\n   * @param response - The settle response containing error details\n   */\n  constructor(statusCode: number, response: SettleResponse) {\n    const reason = response.errorReason || \"unknown reason\";\n    const message = response.errorMessage;\n    super(message ? `${reason}: ${message}` : reason);\n    this.name = \"SettleError\";\n    this.statusCode = statusCode;\n    this.errorReason = response.errorReason;\n    this.errorMessage = response.errorMessage;\n    this.payer = response.payer;\n    this.transaction = response.transaction;\n    this.network = response.network;\n  }\n}\n\n/**\n * Error thrown when a facilitator returns malformed success payload data.\n */\nexport class FacilitatorResponseError extends Error {\n  /**\n   * Creates a FacilitatorResponseError for malformed facilitator responses.\n   *\n   * @param message - The boundary error message\n   */\n  constructor(message: string) {\n    super(message);\n    this.name = \"FacilitatorResponseError\";\n  }\n}\n\n/**\n * Walks an error cause chain to find the first facilitator response error.\n *\n * @param error - The thrown value to inspect\n * @returns The nested facilitator response error, if present\n */\nexport function getFacilitatorResponseError(error: unknown): FacilitatorResponseError | null {\n  let current = error;\n\n  while (current instanceof Error) {\n    if (current instanceof FacilitatorResponseError) {\n      return current;\n    }\n    current = current.cause;\n  }\n\n  return null;\n}\n", "export const x402Version = 2;\n", "import { x402ResourceServer, SettlementOverrides } from \"../server\";\nimport {\n  decodePaymentSignatureHeader,\n  encodePaymentRequiredHeader,\n  encodePaymentResponseHeader,\n} from \".\";\nimport {\n  PaymentPayload,\n  PaymentRequired,\n  SettleResponse,\n  SettleError,\n  FacilitatorResponseError,\n  Price,\n  Network,\n  PaymentRequirements,\n} from \"../types\";\nimport { x402Version } from \"..\";\n\nexport const SETTLEMENT_OVERRIDES_HEADER = \"Settlement-Overrides\";\n\n/**\n * Framework-agnostic HTTP adapter interface\n * Implementations provide framework-specific HTTP operations\n */\nexport interface HTTPAdapter {\n  getHeader(name: string): string | undefined;\n  getMethod(): string;\n  getPath(): string;\n  getUrl(): string;\n  getAcceptHeader(): string;\n  getUserAgent(): string;\n\n  /**\n   * Get query parameters from the request URL\n   *\n   * @returns Record of query parameter key-value pairs\n   */\n  getQueryParams?(): Record<string, string | string[]>;\n\n  /**\n   * Get a specific query parameter by name\n   *\n   * @param name - The query parameter name\n   * @returns The query parameter value(s) or undefined\n   */\n  getQueryParam?(name: string): string | string[] | undefined;\n\n  /**\n   * Get the parsed request body\n   * Framework adapters should parse JSON/form data appropriately\n   *\n   * @returns The parsed request body\n   */\n  getBody?(): unknown;\n}\n\n/**\n * Paywall configuration for HTML responses\n */\nexport interface PaywallConfig {\n  appName?: string;\n  appLogo?: string;\n  sessionTokenEndpoint?: string;\n  currentUrl?: string;\n  testnet?: boolean;\n}\n\n/**\n * Paywall provider interface for generating HTML\n */\nexport interface PaywallProvider {\n  generateHtml(paymentRequired: PaymentRequired, config?: PaywallConfig): string;\n}\n\n/**\n * Dynamic payTo function that receives HTTP request context\n */\nexport type DynamicPayTo = (context: HTTPRequestContext) => string | Promise<string>;\n\n/**\n * Dynamic price function that receives HTTP request context\n */\nexport type DynamicPrice = (context: HTTPRequestContext) => Price | Promise<Price>;\n\n/**\n * Result of response body callbacks containing content type and body.\n */\nexport interface HTTPResponseBody {\n  /**\n   * The content type for the response (e.g., 'application/json', 'text/plain').\n   */\n  contentType: string;\n\n  /**\n   * The response body to include in the 402 response.\n   */\n  body: unknown;\n}\n\n/**\n * Dynamic function to generate a custom response for unpaid requests.\n * Receives the HTTP request context and returns the content type and body to include in the 402 response.\n */\nexport type UnpaidResponseBody = (\n  context: HTTPRequestContext,\n) => HTTPResponseBody | Promise<HTTPResponseBody>;\n\n/**\n * Dynamic function to generate a custom response for settlement failures.\n * Receives the HTTP request context and settle failure result, returns the content type and body.\n */\nexport type SettlementFailedResponseBody = (\n  context: HTTPRequestContext,\n  settleResult: Omit<ProcessSettleFailureResponse, \"response\">,\n) => HTTPResponseBody | Promise<HTTPResponseBody>;\n\n/**\n * A single payment option for a route\n * Represents one way a client can pay for access to the resource\n */\nexport interface PaymentOption {\n  scheme: string;\n  payTo: string | DynamicPayTo;\n  price: Price | DynamicPrice;\n  network: Network;\n  maxTimeoutSeconds?: number;\n  extra?: Record<string, unknown>;\n}\n\n/**\n * Route configuration for HTTP endpoints\n *\n * The 'accepts' field defines payment options for the route.\n * Can be a single PaymentOption or an array of PaymentOptions for multiple payment methods.\n */\nexport interface RouteConfig {\n  // Payment option(s): single or array\n  accepts: PaymentOption | PaymentOption[];\n\n  // HTTP-specific metadata\n  resource?: string;\n  description?: string;\n  mimeType?: string;\n  customPaywallHtml?: string;\n\n  /**\n   * Optional callback to generate a custom response for unpaid API requests.\n   * This allows servers to return preview data, error messages, or other content\n   * when a request lacks payment.\n   *\n   * For browser requests (Accept: text/html), the paywall HTML takes precedence.\n   * This callback is only used for API clients.\n   *\n   * If not provided, defaults to { contentType: 'application/json', body: {} }.\n   *\n   * @param context - The HTTP request context\n   * @returns An object containing both contentType and body for the 402 response\n   */\n  unpaidResponseBody?: UnpaidResponseBody;\n\n  /**\n   * Optional callback to generate a custom response for settlement failures.\n   * If not provided, defaults to { contentType: 'application/json', body: {} }.\n   *\n   * @param context - The HTTP request context\n   * @param settleResult - The settlement failure result\n   * @returns An object containing both contentType and body for the 402 response\n   */\n  settlementFailedResponseBody?: SettlementFailedResponseBody;\n\n  // Extensions\n  extensions?: Record<string, unknown>;\n}\n\n/**\n * Routes configuration - maps path patterns to route configs\n */\nexport type RoutesConfig = Record<string, RouteConfig> | RouteConfig;\n\n/**\n * Hook that runs on every request to a protected route, before payment processing.\n * Can grant access without payment, deny the request, or continue to payment flow.\n *\n * @returns\n * - `void` - Continue to payment processing (default behavior)\n * - `{ grantAccess: true }` - Grant access without requiring payment\n * - `{ abort: true; reason: string }` - Deny the request (returns 403)\n */\nexport type ProtectedRequestHook = (\n  context: HTTPRequestContext,\n  routeConfig: RouteConfig,\n) => Promise<void | { grantAccess: true } | { abort: true; reason: string }>;\n\n/**\n * Compiled route for efficient matching\n */\nexport interface CompiledRoute {\n  verb: string;\n  regex: RegExp;\n  config: RouteConfig;\n  pattern: string;\n}\n\n/**\n * HTTP request context that encapsulates all request data\n */\nexport interface HTTPRequestContext {\n  adapter: HTTPAdapter;\n  path: string;\n  method: string;\n  paymentHeader?: string;\n  routePattern?: string;\n}\n\n/**\n * HTTP transport context contains both request context and optional response data.\n */\nexport interface HTTPTransportContext {\n  /** The HTTP request context */\n  request: HTTPRequestContext;\n  /** The response body buffer */\n  responseBody?: Buffer;\n  /** Response headers set by the route handler (used for settlement overrides) */\n  responseHeaders?: Record<string, string>;\n}\n\n/**\n * HTTP response instructions for the framework middleware\n */\nexport interface HTTPResponseInstructions {\n  status: number;\n  headers: Record<string, string>;\n  body?: unknown; // e.g. Paywall for web browser requests, but could be any other type\n  isHtml?: boolean; // e.g. if body is a paywall, then isHtml is true\n}\n\n/**\n * Result of processing an HTTP request for payment\n */\nexport type HTTPProcessResult =\n  | { type: \"no-payment-required\" }\n  | {\n      type: \"payment-verified\";\n      paymentPayload: PaymentPayload;\n      paymentRequirements: PaymentRequirements;\n      declaredExtensions?: Record<string, unknown>;\n    }\n  | { type: \"payment-error\"; response: HTTPResponseInstructions };\n\n/**\n * Result of processSettlement\n */\nexport type ProcessSettleSuccessResponse = SettleResponse & {\n  success: true;\n  headers: Record<string, string>;\n  requirements: PaymentRequirements;\n};\n\nexport type ProcessSettleFailureResponse = SettleResponse & {\n  success: false;\n  errorReason: string;\n  errorMessage?: string;\n  headers: Record<string, string>;\n  response: HTTPResponseInstructions;\n};\n\nexport type ProcessSettleResultResponse =\n  | ProcessSettleSuccessResponse\n  | ProcessSettleFailureResponse;\n\n/**\n * Represents a validation error for a specific route's payment configuration.\n */\nexport interface RouteValidationError {\n  /** The route pattern (e.g., \"GET /api/weather\") */\n  routePattern: string;\n  /** The payment scheme that failed validation */\n  scheme: string;\n  /** The network that failed validation */\n  network: Network;\n  /** The type of validation failure */\n  reason: \"missing_scheme\" | \"missing_facilitator\";\n  /** Human-readable error message */\n  message: string;\n}\n\n/**\n * Error thrown when route configuration validation fails.\n */\nexport class RouteConfigurationError extends Error {\n  /** The validation errors that caused this exception */\n  public readonly errors: RouteValidationError[];\n\n  /**\n   * Creates a new RouteConfigurationError with the given validation errors.\n   *\n   * @param errors - The validation errors that caused this exception.\n   */\n  constructor(errors: RouteValidationError[]) {\n    const message = `x402 Route Configuration Errors:\\n${errors.map(e => `  - ${e.message}`).join(\"\\n\")}`;\n    super(message);\n    this.name = \"RouteConfigurationError\";\n    this.errors = errors;\n  }\n}\n\n/**\n * HTTP-enhanced x402 resource server\n * Provides framework-agnostic HTTP protocol handling\n */\nexport class x402HTTPResourceServer {\n  private ResourceServer: x402ResourceServer;\n  private compiledRoutes: CompiledRoute[] = [];\n  private routesConfig: RoutesConfig;\n  private paywallProvider?: PaywallProvider;\n  private protectedRequestHooks: ProtectedRequestHook[] = [];\n\n  /**\n   * Creates a new x402HTTPResourceServer instance.\n   *\n   * @param ResourceServer - The core x402ResourceServer instance to use\n   * @param routes - Route configuration for payment-protected endpoints\n   */\n  constructor(ResourceServer: x402ResourceServer, routes: RoutesConfig) {\n    this.ResourceServer = ResourceServer;\n    this.routesConfig = routes;\n\n    // Handle both single route and multiple routes\n    const normalizedRoutes =\n      typeof routes === \"object\" && !(\"accepts\" in routes)\n        ? (routes as Record<string, RouteConfig>)\n        : { \"*\": routes as RouteConfig };\n\n    for (const [pattern, config] of Object.entries(normalizedRoutes)) {\n      const parsed = this.parseRoutePattern(pattern);\n      this.compiledRoutes.push({\n        verb: parsed.verb,\n        regex: parsed.regex,\n        config,\n        pattern: parsed.path,\n      });\n    }\n  }\n\n  /**\n   * Get the underlying x402ResourceServer instance.\n   *\n   * @returns The underlying x402ResourceServer instance\n   */\n  get server(): x402ResourceServer {\n    return this.ResourceServer;\n  }\n\n  /**\n   * Get the routes configuration.\n   *\n   * @returns The routes configuration\n   */\n  get routes(): RoutesConfig {\n    return this.routesConfig;\n  }\n\n  /**\n   * Initialize the HTTP resource server.\n   *\n   * This method initializes the underlying resource server (fetching facilitator support)\n   * and then validates that all route payment configurations have corresponding\n   * registered schemes and facilitator support.\n   *\n   * @throws RouteConfigurationError if any route's payment options don't have\n   *         corresponding registered schemes or facilitator support\n   *\n   * @example\n   * ```typescript\n   * const httpServer = new x402HTTPResourceServer(server, routes);\n   * await httpServer.initialize();\n   * ```\n   */\n  async initialize(): Promise<void> {\n    // First, initialize the underlying resource server (fetches facilitator support)\n    await this.ResourceServer.initialize();\n\n    // Then validate route configuration\n    const errors = this.validateRouteConfiguration();\n    if (errors.length > 0) {\n      throw new RouteConfigurationError(errors);\n    }\n  }\n\n  /**\n   * Register a custom paywall provider for generating HTML\n   *\n   * @param provider - PaywallProvider instance\n   * @returns This service instance for chaining\n   */\n  registerPaywallProvider(provider: PaywallProvider): this {\n    this.paywallProvider = provider;\n    return this;\n  }\n\n  /**\n   * Register a hook that runs on every request to a protected route, before payment processing.\n   * Hooks are executed in order of registration. The first hook to return a non-void result wins.\n   *\n   * @param hook - The request hook function\n   * @returns The x402HTTPResourceServer instance for chaining\n   */\n  onProtectedRequest(hook: ProtectedRequestHook): this {\n    this.protectedRequestHooks.push(hook);\n    return this;\n  }\n\n  /**\n   * Process HTTP request and return response instructions\n   * This is the main entry point for framework middleware\n   *\n   * @param context - HTTP request context\n   * @param paywallConfig - Optional paywall configuration\n   * @returns Process result indicating next action for middleware\n   */\n  async processHTTPRequest(\n    context: HTTPRequestContext,\n    paywallConfig?: PaywallConfig,\n  ): Promise<HTTPProcessResult> {\n    const method = context.method || context.adapter.getMethod();\n    context = { ...context, method };\n    const { adapter, path } = context;\n\n    // Find matching route\n    const routeMatch = this.getRouteConfig(path, method);\n    if (!routeMatch) {\n      return { type: \"no-payment-required\" }; // No payment required for this route\n    }\n    const { config: routeConfig, pattern: routePattern } = routeMatch;\n    const enrichedContext: HTTPRequestContext = { ...context, routePattern };\n\n    // Execute request hooks before any payment processing\n    for (const hook of this.protectedRequestHooks) {\n      const result = await hook(enrichedContext, routeConfig);\n      if (result && \"grantAccess\" in result) {\n        return { type: \"no-payment-required\" };\n      }\n      if (result && \"abort\" in result) {\n        return {\n          type: \"payment-error\",\n          response: {\n            status: 403,\n            headers: { \"Content-Type\": \"application/json\" },\n            body: { error: result.reason },\n          },\n        };\n      }\n    }\n\n    // Normalize accepts field to array of payment options\n    const paymentOptions = this.normalizePaymentOptions(routeConfig);\n\n    // Check for payment header (v1 or v2)\n    const paymentPayload = this.extractPayment(adapter);\n\n    // Create resource info, using config override if provided\n    const resourceInfo = {\n      url: routeConfig.resource || enrichedContext.adapter.getUrl(),\n      description: routeConfig.description || \"\",\n      mimeType: routeConfig.mimeType || \"\",\n    };\n\n    // Build requirements from all payment options\n    // (this method handles resolving dynamic functions internally)\n    let requirements = await this.ResourceServer.buildPaymentRequirementsFromOptions(\n      paymentOptions,\n      enrichedContext,\n    );\n\n    let extensions = routeConfig.extensions;\n    if (extensions) {\n      extensions = this.ResourceServer.enrichExtensions(extensions, enrichedContext);\n    }\n\n    // createPaymentRequiredResponse already handles extension enrichment in the core layer\n    const transportContext: HTTPTransportContext = { request: enrichedContext };\n    const paymentRequired = await this.ResourceServer.createPaymentRequiredResponse(\n      requirements,\n      resourceInfo,\n      !paymentPayload ? \"Payment required\" : undefined,\n      extensions,\n      transportContext,\n    );\n\n    // If no payment provided\n    if (!paymentPayload) {\n      // Resolve custom unpaid response body if provided\n      const unpaidBody = routeConfig.unpaidResponseBody\n        ? await routeConfig.unpaidResponseBody(enrichedContext)\n        : undefined;\n\n      return {\n        type: \"payment-error\",\n        response: this.createHTTPResponse(\n          paymentRequired,\n          this.isWebBrowser(adapter),\n          paywallConfig,\n          routeConfig.customPaywallHtml,\n          unpaidBody,\n        ),\n      };\n    }\n\n    // Verify payment\n    try {\n      const matchingRequirements = this.ResourceServer.findMatchingRequirements(\n        paymentRequired.accepts,\n        paymentPayload,\n      );\n\n      if (!matchingRequirements) {\n        const errorResponse = await this.ResourceServer.createPaymentRequiredResponse(\n          requirements,\n          resourceInfo,\n          \"No matching payment requirements\",\n          routeConfig.extensions,\n          transportContext,\n        );\n        return {\n          type: \"payment-error\",\n          response: this.createHTTPResponse(errorResponse, false, paywallConfig),\n        };\n      }\n\n      const verifyResult = await this.ResourceServer.verifyPayment(\n        paymentPayload,\n        matchingRequirements,\n      );\n\n      if (!verifyResult.isValid) {\n        const errorResponse = await this.ResourceServer.createPaymentRequiredResponse(\n          requirements,\n          resourceInfo,\n          verifyResult.invalidReason,\n          routeConfig.extensions,\n          transportContext,\n        );\n        return {\n          type: \"payment-error\",\n          response: this.createHTTPResponse(errorResponse, false, paywallConfig),\n        };\n      }\n\n      // Payment is valid, return data needed for settlement\n      return {\n        type: \"payment-verified\",\n        paymentPayload,\n        paymentRequirements: matchingRequirements,\n        declaredExtensions: routeConfig.extensions,\n      };\n    } catch (error) {\n      if (error instanceof FacilitatorResponseError) {\n        throw error;\n      }\n      const errorResponse = await this.ResourceServer.createPaymentRequiredResponse(\n        requirements,\n        resourceInfo,\n        error instanceof Error ? error.message : \"Payment verification failed\",\n        routeConfig.extensions,\n        transportContext,\n      );\n      return {\n        type: \"payment-error\",\n        response: this.createHTTPResponse(errorResponse, false, paywallConfig),\n      };\n    }\n  }\n\n  /**\n   * Process settlement after successful response\n   *\n   * @param paymentPayload - The verified payment payload\n   * @param requirements - The matching payment requirements\n   * @param declaredExtensions - Optional declared extensions (for per-key enrichment)\n   * @param transportContext - Optional HTTP transport context\n   * @param settlementOverrides - Optional settlement overrides (e.g., partial settlement amount)\n   * @returns ProcessSettleResultResponse - SettleResponse with headers if success or errorReason if failure\n   */\n  async processSettlement(\n    paymentPayload: PaymentPayload,\n    requirements: PaymentRequirements,\n    declaredExtensions?: Record<string, unknown>,\n    transportContext?: HTTPTransportContext,\n    settlementOverrides?: SettlementOverrides,\n  ): Promise<ProcessSettleResultResponse> {\n    if (transportContext?.request && !transportContext.request.method) {\n      transportContext = {\n        ...transportContext,\n        request: {\n          ...transportContext.request,\n          method: transportContext.request.adapter.getMethod(),\n        },\n      };\n    }\n    try {\n      // Resolve overrides: explicit param takes precedence, fall back to response header\n      let resolvedOverrides = settlementOverrides;\n      if (!resolvedOverrides && transportContext?.responseHeaders) {\n        const overridesKey = SETTLEMENT_OVERRIDES_HEADER.toLowerCase();\n        const rawValue = Object.entries(transportContext.responseHeaders).find(\n          ([key]) => key.toLowerCase() === overridesKey,\n        )?.[1];\n        if (rawValue) {\n          try {\n            resolvedOverrides = JSON.parse(rawValue);\n          } catch {\n            // Ignore malformed header\n          }\n        }\n      }\n\n      const settleResponse = await this.ResourceServer.settlePayment(\n        paymentPayload,\n        requirements,\n        declaredExtensions,\n        transportContext,\n        resolvedOverrides,\n      );\n\n      if (!settleResponse.success) {\n        const failure = {\n          ...settleResponse,\n          success: false as const,\n          errorReason: settleResponse.errorReason || \"Settlement failed\",\n          errorMessage:\n            settleResponse.errorMessage || settleResponse.errorReason || \"Settlement failed\",\n          headers: this.createSettlementHeaders(settleResponse),\n        };\n        const response = await this.buildSettlementFailureResponse(failure, transportContext);\n        return { ...failure, response };\n      }\n\n      return {\n        ...settleResponse,\n        success: true,\n        headers: this.createSettlementHeaders(settleResponse),\n        requirements,\n      };\n    } catch (error) {\n      if (error instanceof FacilitatorResponseError) {\n        throw error;\n      }\n      if (error instanceof SettleError) {\n        const errorReason = error.errorReason || error.message;\n        const settleResponse: SettleResponse = {\n          success: false,\n          errorReason,\n          errorMessage: error.errorMessage || errorReason,\n          payer: error.payer,\n          network: error.network,\n          transaction: error.transaction,\n        };\n        const failure = {\n          ...settleResponse,\n          success: false as const,\n          errorReason,\n          headers: this.createSettlementHeaders(settleResponse),\n        };\n        const response = await this.buildSettlementFailureResponse(failure, transportContext);\n        return { ...failure, response };\n      }\n      const errorReason = error instanceof Error ? error.message : \"Settlement failed\";\n      const settleResponse: SettleResponse = {\n        success: false,\n        errorReason,\n        errorMessage: errorReason,\n        network: requirements.network as Network,\n        transaction: \"\",\n      };\n      const failure = {\n        ...settleResponse,\n        success: false as const,\n        errorReason,\n        headers: this.createSettlementHeaders(settleResponse),\n      };\n      const response = await this.buildSettlementFailureResponse(failure, transportContext);\n      return { ...failure, response };\n    }\n  }\n\n  /**\n   * Check if a request requires payment based on route configuration\n   *\n   * @param context - HTTP request context\n   * @returns True if the route requires payment, false otherwise\n   */\n  requiresPayment(context: HTTPRequestContext): boolean {\n    const method = context.method || context.adapter.getMethod();\n    return this.getRouteConfig(context.path, method) !== undefined;\n  }\n\n  /**\n   * Build HTTPResponseInstructions for settlement failure.\n   * Uses settlementFailedResponseBody hook if configured, otherwise defaults to empty body.\n   *\n   * @param failure - Settlement failure result with headers\n   * @param transportContext - Optional HTTP transport context for the request\n   * @returns HTTP response instructions for the 402 settlement failure response\n   */\n  private async buildSettlementFailureResponse(\n    failure: Omit<ProcessSettleFailureResponse, \"response\">,\n    transportContext?: HTTPTransportContext,\n  ): Promise<HTTPResponseInstructions> {\n    const settlementHeaders = failure.headers;\n    const routeConfig = transportContext\n      ? this.getRouteConfig(transportContext.request.path, transportContext.request.method)\n      : undefined;\n\n    const customBody = routeConfig?.config.settlementFailedResponseBody\n      ? await routeConfig.config.settlementFailedResponseBody(transportContext!.request, failure)\n      : undefined;\n\n    const contentType = customBody ? customBody.contentType : \"application/json\";\n    const body = customBody ? customBody.body : {};\n\n    return {\n      status: 402,\n      headers: {\n        \"Content-Type\": contentType,\n        ...settlementHeaders,\n      },\n      body,\n      isHtml: contentType.includes(\"text/html\"),\n    };\n  }\n\n  /**\n   * Normalizes a RouteConfig's accepts field into an array of PaymentOptions\n   * Handles both single PaymentOption and array formats\n   *\n   * @param routeConfig - Route configuration\n   * @returns Array of payment options\n   */\n  private normalizePaymentOptions(routeConfig: RouteConfig): PaymentOption[] {\n    return Array.isArray(routeConfig.accepts) ? routeConfig.accepts : [routeConfig.accepts];\n  }\n\n  /**\n   * Validates that all payment options in routes have corresponding registered schemes\n   * and facilitator support.\n   *\n   * @returns Array of validation errors (empty if all routes are valid)\n   */\n  private validateRouteConfiguration(): RouteValidationError[] {\n    const errors: RouteValidationError[] = [];\n\n    // Normalize routes to array of [pattern, config] pairs\n    const normalizedRoutes =\n      typeof this.routesConfig === \"object\" && !(\"accepts\" in this.routesConfig)\n        ? Object.entries(this.routesConfig as Record<string, RouteConfig>)\n        : [[\"*\", this.routesConfig as RouteConfig] as [string, RouteConfig]];\n\n    for (const [pattern, config] of normalizedRoutes) {\n      // Warn if wildcard routes are used with discovery extensions\n      const pathPart = pattern.includes(\" \") ? pattern.split(/\\s+/)[1] : pattern;\n      if (\n        pathPart &&\n        pathPart.includes(\"*\") &&\n        config.extensions &&\n        \"bazaar\" in config.extensions\n      ) {\n        console.warn(\n          `[x402] Route \"${pattern}\": Wildcard (*) patterns with bazaar discovery extensions ` +\n            `will auto-generate parameter names (var1, var2, ...). ` +\n            `Consider using named parameters instead (e.g. /weather/:city) for better discovery metadata.`,\n        );\n      }\n\n      const paymentOptions = this.normalizePaymentOptions(config);\n\n      for (const option of paymentOptions) {\n        // Check 1: Is scheme registered?\n        if (!this.ResourceServer.hasRegisteredScheme(option.network, option.scheme)) {\n          errors.push({\n            routePattern: pattern,\n            scheme: option.scheme,\n            network: option.network,\n            reason: \"missing_scheme\",\n            message: `Route \"${pattern}\": No scheme implementation registered for \"${option.scheme}\" on network \"${option.network}\"`,\n          });\n          // Skip facilitator check if scheme isn't registered\n          continue;\n        }\n\n        // Check 2: Does facilitator support this scheme/network combination?\n        const supportedKind = this.ResourceServer.getSupportedKind(\n          x402Version,\n          option.network,\n          option.scheme,\n        );\n\n        if (!supportedKind) {\n          errors.push({\n            routePattern: pattern,\n            scheme: option.scheme,\n            network: option.network,\n            reason: \"missing_facilitator\",\n            message: `Route \"${pattern}\": Facilitator does not support scheme \"${option.scheme}\" on network \"${option.network}\"`,\n          });\n        }\n      }\n    }\n\n    return errors;\n  }\n\n  /**\n   * Get route configuration for a request\n   *\n   * @param path - Request path\n   * @param method - HTTP method\n   * @returns Route configuration and pattern, or undefined if no match\n   */\n  private getRouteConfig(\n    path: string,\n    method: string,\n  ): { config: RouteConfig; pattern: string } | undefined {\n    const normalizedPath = this.normalizePath(path);\n    const upperMethod = method.toUpperCase();\n\n    const matchingRoute = this.compiledRoutes.find(\n      route =>\n        route.regex.test(normalizedPath) && (route.verb === \"*\" || route.verb === upperMethod),\n    );\n\n    if (!matchingRoute) return undefined;\n    return { config: matchingRoute.config, pattern: matchingRoute.pattern };\n  }\n\n  /**\n   * Extract payment from HTTP headers (handles v1 and v2)\n   *\n   * @param adapter - HTTP adapter\n   * @returns Decoded payment payload or null\n   */\n  private extractPayment(adapter: HTTPAdapter): PaymentPayload | null {\n    // Check v2 header first (PAYMENT-SIGNATURE)\n    const header = adapter.getHeader(\"payment-signature\") || adapter.getHeader(\"PAYMENT-SIGNATURE\");\n\n    if (header) {\n      try {\n        return decodePaymentSignatureHeader(header);\n      } catch (error) {\n        console.warn(\"Failed to decode PAYMENT-SIGNATURE header:\", error);\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Check if request is from a web browser\n   *\n   * @param adapter - HTTP adapter\n   * @returns True if request appears to be from a browser\n   */\n  private isWebBrowser(adapter: HTTPAdapter): boolean {\n    const accept = adapter.getAcceptHeader();\n    const userAgent = adapter.getUserAgent();\n    return accept.includes(\"text/html\") && userAgent.includes(\"Mozilla\");\n  }\n\n  /**\n   * Create HTTP response instructions from payment required\n   *\n   * @param paymentRequired - Payment requirements\n   * @param isWebBrowser - Whether request is from browser\n   * @param paywallConfig - Paywall configuration\n   * @param customHtml - Custom HTML template\n   * @param unpaidResponse - Optional custom response (content type and body) for unpaid API requests\n   * @returns Response instructions\n   */\n  private createHTTPResponse(\n    paymentRequired: PaymentRequired,\n    isWebBrowser: boolean,\n    paywallConfig?: PaywallConfig,\n    customHtml?: string,\n    unpaidResponse?: HTTPResponseBody,\n  ): HTTPResponseInstructions {\n    // Use 412 Precondition Failed for permit2_allowance_required error\n    // This signals client needs to approve Permit2 before retrying\n    const status = paymentRequired.error === \"permit2_allowance_required\" ? 412 : 402;\n\n    if (isWebBrowser) {\n      const html = this.generatePaywallHTML(paymentRequired, paywallConfig, customHtml);\n      return {\n        status,\n        headers: { \"Content-Type\": \"text/html\" },\n        body: html,\n        isHtml: true,\n      };\n    }\n\n    const response = this.createHTTPPaymentRequiredResponse(paymentRequired);\n\n    // Use callback result if provided, otherwise default to JSON with empty object\n    const contentType = unpaidResponse ? unpaidResponse.contentType : \"application/json\";\n    const body = unpaidResponse ? unpaidResponse.body : {};\n\n    return {\n      status,\n      headers: {\n        \"Content-Type\": contentType,\n        ...response.headers,\n      },\n      body,\n    };\n  }\n\n  /**\n   * Create HTTP payment required response (v1 puts in body, v2 puts in header)\n   *\n   * @param paymentRequired - Payment required object\n   * @returns Headers and body for the HTTP response\n   */\n  private createHTTPPaymentRequiredResponse(paymentRequired: PaymentRequired): {\n    headers: Record<string, string>;\n  } {\n    return {\n      headers: {\n        \"PAYMENT-REQUIRED\": encodePaymentRequiredHeader(paymentRequired),\n      },\n    };\n  }\n\n  /**\n   * Create settlement response headers\n   *\n   * @param settleResponse - Settlement response\n   * @returns Headers to add to response\n   */\n  private createSettlementHeaders(settleResponse: SettleResponse): Record<string, string> {\n    const encoded = encodePaymentResponseHeader(settleResponse);\n    return { \"PAYMENT-RESPONSE\": encoded };\n  }\n\n  /**\n   * Parse route pattern into verb and regex\n   *\n   * @param pattern - Route pattern like \"GET /api/*\", \"/api/[id]\", or \"/api/:id\"\n   * @returns Parsed pattern with verb and regex\n   */\n  private parseRoutePattern(pattern: string): { verb: string; regex: RegExp; path: string } {\n    const [verb, path] = pattern.includes(\" \") ? pattern.split(/\\s+/) : [\"*\", pattern];\n\n    const regex = new RegExp(\n      `^${\n        path\n          .replace(/\\\\/g, \"\\\\\\\\\") // Escape backslashes first\n          .replace(/[$()+.?^{|}]/g, \"\\\\$&\") // Escape regex special chars\n          .replace(/\\*/g, \".*?\") // Wildcards\n          .replace(/\\[([^\\]]+)\\]/g, \"[^/]+\") // Parameters (Next.js style [param])\n          .replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, \"[^/]+\") // Parameters (Express style :param)\n          .replace(/\\//g, \"\\\\/\") // Escape slashes\n      }$`,\n      \"i\",\n    );\n\n    return { verb: verb.toUpperCase(), regex, path };\n  }\n\n  /**\n   * Normalize path for matching\n   *\n   * @param path - Raw path from request\n   * @returns Normalized path\n   */\n  private normalizePath(path: string): string {\n    const pathWithoutQuery = path.split(/[?#]/)[0];\n\n    let decodedOrRawPath: string;\n    try {\n      decodedOrRawPath = decodeURIComponent(pathWithoutQuery);\n    } catch {\n      decodedOrRawPath = pathWithoutQuery;\n    }\n\n    return decodedOrRawPath\n      .replace(/\\\\/g, \"/\")\n      .replace(/\\/+/g, \"/\")\n      .replace(/(.+?)\\/+$/, \"$1\");\n  }\n\n  /**\n   * Generate paywall HTML for browser requests\n   *\n   * @param paymentRequired - Payment required response\n   * @param paywallConfig - Optional paywall configuration\n   * @param customHtml - Optional custom HTML template\n   * @returns HTML string\n   */\n  private generatePaywallHTML(\n    paymentRequired: PaymentRequired,\n    paywallConfig?: PaywallConfig,\n    customHtml?: string,\n  ): string {\n    if (customHtml) {\n      return customHtml;\n    }\n\n    // Use custom paywall provider if set\n    if (this.paywallProvider) {\n      return this.paywallProvider.generateHtml(paymentRequired, paywallConfig);\n    }\n\n    // Try to use @x402/paywall if available (optional dependency)\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-require-imports\n      const paywall = require(\"@x402/paywall\");\n      const displayAmount = this.getDisplayAmount(paymentRequired);\n      const resource = paymentRequired.resource;\n\n      return paywall.getPaywallHtml({\n        amount: displayAmount,\n        paymentRequired,\n        currentUrl: resource?.url || paywallConfig?.currentUrl || \"\",\n        testnet: paywallConfig?.testnet ?? true,\n        appName: paywallConfig?.appName,\n        appLogo: paywallConfig?.appLogo,\n        sessionTokenEndpoint: paywallConfig?.sessionTokenEndpoint,\n      });\n    } catch {\n      // @x402/paywall not installed, fall back to basic HTML\n    }\n\n    // Fallback: Basic HTML paywall\n    const resource = paymentRequired.resource;\n    const displayAmount = this.getDisplayAmount(paymentRequired);\n\n    return `\n      <!DOCTYPE html>\n      <html>\n        <head>\n          <title>Payment Required</title>\n          <meta charset=\"UTF-8\">\n          <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n        </head>\n        <body>\n          <div style=\"max-width: 600px; margin: 50px auto; padding: 20px; font-family: system-ui, -apple-system, sans-serif;\">\n            ${paywallConfig?.appLogo ? `<img src=\"${paywallConfig.appLogo}\" alt=\"${paywallConfig.appName || \"App\"}\" style=\"max-width: 200px; margin-bottom: 20px;\">` : \"\"}\n            <h1>Payment Required</h1>\n            ${resource ? `<p><strong>Resource:</strong> ${resource.description || resource.url}</p>` : \"\"}\n            <p><strong>Amount:</strong> $${displayAmount.toFixed(2)} USDC</p>\n            <div id=\"payment-widget\" \n                 data-requirements='${JSON.stringify(paymentRequired)}'\n                 data-app-name=\"${paywallConfig?.appName || \"\"}\"\n                 data-testnet=\"${paywallConfig?.testnet || false}\">\n              <!-- Install @x402/paywall for full wallet integration -->\n              <p style=\"margin-top: 2rem; padding: 1rem; background: #fef3c7; border-radius: 0.5rem;\">\n                <strong>Note:</strong> Install <code>@x402/paywall</code> for full wallet connection and payment UI.\n              </p>\n            </div>\n          </div>\n        </body>\n      </html>\n    `;\n  }\n\n  /**\n   * Extract display amount from payment requirements.\n   *\n   * @param paymentRequired - The payment required object\n   * @returns The display amount in decimal format\n   */\n  private getDisplayAmount(paymentRequired: PaymentRequired): number {\n    const accepts = paymentRequired.accepts;\n    if (accepts && accepts.length > 0) {\n      const firstReq = accepts[0];\n      if (\"amount\" in firstReq) {\n        // V2 format\n        return parseFloat(firstReq.amount) / 1000000; // Assuming USDC with 6 decimals\n      }\n    }\n    return 0;\n  }\n}\n", "import { z } from \"zod\";\n\n// ============================================================================\n// Reusable Primitive Schemas\n// ============================================================================\n\n/**\n * Non-empty string schema - a string with at least one character.\n * Used for required string fields that cannot be empty.\n */\nexport const NonEmptyString = z.string().min(1);\nexport type NonEmptyString = z.infer<typeof NonEmptyString>;\n\n/**\n * Any record schema - an object with unknown keys and values.\n * Used for scheme-specific payloads and other extensible objects.\n */\nexport const Any = z.record(z.unknown());\nexport type Any = z.infer<typeof Any>;\n\n/**\n * Optional any record schema - an optional object with unknown keys and values.\n * Used for optional extension fields like `extra` and `extensions`.\n */\nexport const OptionalAny = z.record(z.unknown()).optional().nullable();\nexport type OptionalAny = z.infer<typeof OptionalAny>;\n\n// ============================================================================\n// Network Schemas\n// ============================================================================\n\n/**\n * Network identifier schema for V1 - loose validation.\n * V1 accepts any non-empty string for backwards compatibility.\n */\nexport const NetworkSchemaV1 = NonEmptyString;\nexport type NetworkV1 = z.infer<typeof NetworkSchemaV1>;\n\n/**\n * Network identifier schema for V2 - CAIP-2 format validation.\n * V2 requires minimum length of 3 and a colon separator (e.g., \"eip155:84532\", \"solana:devnet\").\n */\nexport const NetworkSchemaV2 = z\n  .string()\n  .min(3)\n  .refine(val => val.includes(\":\"), {\n    message: \"Network must be in CAIP-2 format (e.g., 'eip155:84532')\",\n  });\nexport type NetworkV2 = z.infer<typeof NetworkSchemaV2>;\n\n/**\n * Union network schema - accepts either V1 or V2 format.\n */\nexport const NetworkSchema = z.union([NetworkSchemaV1, NetworkSchemaV2]);\nexport type Network = z.infer<typeof NetworkSchema>;\n\n// ============================================================================\n// Shared Schemas\n// ============================================================================\n\n/**\n * ResourceInfo schema for V2 - describes the protected resource.\n */\nexport const ResourceInfoSchema = z.object({\n  url: NonEmptyString,\n  description: z.string().optional(),\n  mimeType: z.string().optional(),\n});\nexport type ResourceInfo = z.infer<typeof ResourceInfoSchema>;\n\n// ============================================================================\n// V1 Schemas\n// ============================================================================\n\n/**\n * PaymentRequirements schema for V1.\n * V1 includes resource info directly in the requirements object.\n */\nexport const PaymentRequirementsV1Schema = z.object({\n  scheme: NonEmptyString,\n  network: NetworkSchemaV1,\n  maxAmountRequired: NonEmptyString,\n  resource: NonEmptyString, // URL string in V1\n  description: z.string(),\n  mimeType: z.string().optional(),\n  outputSchema: Any.optional().nullable(),\n  payTo: NonEmptyString,\n  maxTimeoutSeconds: z.number().positive(),\n  asset: NonEmptyString,\n  extra: OptionalAny,\n});\nexport type PaymentRequirementsV1 = z.infer<typeof PaymentRequirementsV1Schema>;\n\n/**\n * PaymentRequired (402 response) schema for V1.\n * Contains payment requirements when a resource requires payment.\n */\nexport const PaymentRequiredV1Schema = z.object({\n  x402Version: z.literal(1),\n  error: z.string().optional(),\n  accepts: z.array(PaymentRequirementsV1Schema).min(1),\n});\nexport type PaymentRequiredV1 = z.infer<typeof PaymentRequiredV1Schema>;\n\n/**\n * PaymentPayload schema for V1.\n * Contains the payment data sent by the client.\n */\nexport const PaymentPayloadV1Schema = z.object({\n  x402Version: z.literal(1),\n  scheme: NonEmptyString,\n  network: NetworkSchemaV1,\n  payload: Any,\n});\nexport type PaymentPayloadV1 = z.infer<typeof PaymentPayloadV1Schema>;\n\n// ============================================================================\n// V2 Schemas\n// ============================================================================\n\n/**\n * PaymentRequirements schema for V2.\n * V2 uses \"amount\" instead of \"maxAmountRequired\" and doesn't include resource info.\n */\nexport const PaymentRequirementsV2Schema = z.object({\n  scheme: NonEmptyString,\n  network: NetworkSchemaV2,\n  amount: NonEmptyString,\n  asset: NonEmptyString,\n  payTo: NonEmptyString,\n  maxTimeoutSeconds: z.number().positive(),\n  extra: OptionalAny,\n});\nexport type PaymentRequirementsV2 = z.infer<typeof PaymentRequirementsV2Schema>;\n\n/**\n * PaymentRequired (402 response) schema for V2.\n * Contains payment requirements when a resource requires payment.\n */\nexport const PaymentRequiredV2Schema = z.object({\n  x402Version: z.literal(2),\n  error: z.string().optional(),\n  resource: ResourceInfoSchema,\n  accepts: z.array(PaymentRequirementsV2Schema).min(1),\n  extensions: OptionalAny,\n});\nexport type PaymentRequiredV2 = z.infer<typeof PaymentRequiredV2Schema>;\n\n/**\n * PaymentPayload schema for V2.\n * Contains the payment data sent by the client.\n */\nexport const PaymentPayloadV2Schema = z.object({\n  x402Version: z.literal(2),\n  resource: ResourceInfoSchema.optional(),\n  accepted: PaymentRequirementsV2Schema,\n  payload: Any,\n  extensions: OptionalAny,\n});\nexport type PaymentPayloadV2 = z.infer<typeof PaymentPayloadV2Schema>;\n\n// ============================================================================\n// Union Schemas (V1 | V2)\n// ============================================================================\n\n/**\n * PaymentRequirements union schema - accepts either V1 or V2 format.\n * Use this when you need to handle both versions.\n */\nexport const PaymentRequirementsSchema = z.union([\n  PaymentRequirementsV1Schema,\n  PaymentRequirementsV2Schema,\n]);\nexport type PaymentRequirements = z.infer<typeof PaymentRequirementsSchema>;\n\n/**\n * PaymentRequired union schema - accepts either V1 or V2 format.\n * Uses discriminated union on x402Version for efficient parsing.\n */\nexport const PaymentRequiredSchema = z.discriminatedUnion(\"x402Version\", [\n  PaymentRequiredV1Schema,\n  PaymentRequiredV2Schema,\n]);\nexport type PaymentRequired = z.infer<typeof PaymentRequiredSchema>;\n\n/**\n * PaymentPayload union schema - accepts either V1 or V2 format.\n * Uses discriminated union on x402Version for efficient parsing.\n */\nexport const PaymentPayloadSchema = z.discriminatedUnion(\"x402Version\", [\n  PaymentPayloadV1Schema,\n  PaymentPayloadV2Schema,\n]);\nexport type PaymentPayload = z.infer<typeof PaymentPayloadSchema>;\n\n// ============================================================================\n// Validation Functions\n// ============================================================================\n\n/**\n * Validates a PaymentRequired object (V1 or V2).\n *\n * @param value - The value to validate\n * @returns A result object with success status and data or error\n */\nexport function parsePaymentRequired(\n  value: unknown,\n): z.SafeParseReturnType<unknown, PaymentRequired> {\n  return PaymentRequiredSchema.safeParse(value);\n}\n\n/**\n * Validates a PaymentRequired object and throws on error.\n *\n * @param value - The value to validate\n * @returns The validated PaymentRequired\n * @throws ZodError if validation fails\n */\nexport function validatePaymentRequired(value: unknown): PaymentRequired {\n  return PaymentRequiredSchema.parse(value);\n}\n\n/**\n * Type guard for PaymentRequired (V1 or V2).\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequired\n */\nexport function isPaymentRequired(value: unknown): value is PaymentRequired {\n  return PaymentRequiredSchema.safeParse(value).success;\n}\n\n/**\n * Validates a PaymentRequirements object (V1 or V2).\n *\n * @param value - The value to validate\n * @returns A result object with success status and data or error\n */\nexport function parsePaymentRequirements(\n  value: unknown,\n): z.SafeParseReturnType<unknown, PaymentRequirements> {\n  return PaymentRequirementsSchema.safeParse(value);\n}\n\n/**\n * Validates a PaymentRequirements object and throws on error.\n *\n * @param value - The value to validate\n * @returns The validated PaymentRequirements\n * @throws ZodError if validation fails\n */\nexport function validatePaymentRequirements(value: unknown): PaymentRequirements {\n  return PaymentRequirementsSchema.parse(value);\n}\n\n/**\n * Type guard for PaymentRequirements (V1 or V2).\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequirements\n */\nexport function isPaymentRequirements(value: unknown): value is PaymentRequirements {\n  return PaymentRequirementsSchema.safeParse(value).success;\n}\n\n/**\n * Validates a PaymentPayload object (V1 or V2).\n *\n * @param value - The value to validate\n * @returns A result object with success status and data or error\n */\nexport function parsePaymentPayload(\n  value: unknown,\n): z.SafeParseReturnType<unknown, PaymentPayload> {\n  return PaymentPayloadSchema.safeParse(value);\n}\n\n/**\n * Validates a PaymentPayload object and throws on error.\n *\n * @param value - The value to validate\n * @returns The validated PaymentPayload\n * @throws ZodError if validation fails\n */\nexport function validatePaymentPayload(value: unknown): PaymentPayload {\n  return PaymentPayloadSchema.parse(value);\n}\n\n/**\n * Type guard for PaymentPayload (V1 or V2).\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentPayload\n */\nexport function isPaymentPayload(value: unknown): value is PaymentPayload {\n  return PaymentPayloadSchema.safeParse(value).success;\n}\n\n// ============================================================================\n// Version-Specific Type Guards\n// ============================================================================\n\n/**\n * Type guard for PaymentRequiredV1.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequiredV1\n */\nexport function isPaymentRequiredV1(value: unknown): value is PaymentRequiredV1 {\n  return PaymentRequiredV1Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentRequiredV2.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequiredV2\n */\nexport function isPaymentRequiredV2(value: unknown): value is PaymentRequiredV2 {\n  return PaymentRequiredV2Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentRequirementsV1.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequirementsV1\n */\nexport function isPaymentRequirementsV1(value: unknown): value is PaymentRequirementsV1 {\n  return PaymentRequirementsV1Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentRequirementsV2.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequirementsV2\n */\nexport function isPaymentRequirementsV2(value: unknown): value is PaymentRequirementsV2 {\n  return PaymentRequirementsV2Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentPayloadV1.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentPayloadV1\n */\nexport function isPaymentPayloadV1(value: unknown): value is PaymentPayloadV1 {\n  return PaymentPayloadV1Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentPayloadV2.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentPayloadV2\n */\nexport function isPaymentPayloadV2(value: unknown): value is PaymentPayloadV2 {\n  return PaymentPayloadV2Schema.safeParse(value).success;\n}\n\n// ============================================================================\n// Re-export zod for convenience\n// ============================================================================\n\nexport { z } from \"zod\";\n", "import { PaymentPayload, PaymentRequirements } from \"../types/payments\";\nimport {\n  VerifyResponse,\n  SettleResponse,\n  SupportedResponse,\n  VerifyError,\n  SettleError,\n  FacilitatorResponseError,\n} from \"../types/facilitator\";\nimport { z } from \"../schemas\";\n\nconst DEFAULT_FACILITATOR_URL = \"https://x402.org/facilitator\";\n\nexport interface FacilitatorConfig {\n  url?: string;\n  createAuthHeaders?: () => Promise<{\n    verify: Record<string, string>;\n    settle: Record<string, string>;\n    supported: Record<string, string>;\n  }>;\n}\n\n/**\n * Interface for facilitator clients\n * Can be implemented for HTTP-based or local facilitators\n */\nexport interface FacilitatorClient {\n  /**\n   * Verify a payment with the facilitator\n   *\n   * @param paymentPayload - The payment to verify\n   * @param paymentRequirements - The requirements to verify against\n   * @returns Verification response\n   */\n  verify(\n    paymentPayload: PaymentPayload,\n    paymentRequirements: PaymentRequirements,\n  ): Promise<VerifyResponse>;\n\n  /**\n   * Settle a payment with the facilitator\n   *\n   * @param paymentPayload - The payment to settle\n   * @param paymentRequirements - The requirements for settlement\n   * @returns Settlement response\n   */\n  settle(\n    paymentPayload: PaymentPayload,\n    paymentRequirements: PaymentRequirements,\n  ): Promise<SettleResponse>;\n\n  /**\n   * Get supported payment kinds and extensions from the facilitator\n   *\n   * @returns Supported payment kinds and extensions\n   */\n  getSupported(): Promise<SupportedResponse>;\n}\n\n/** Number of retries for getSupported() on 429 rate limit errors */\nconst GET_SUPPORTED_RETRIES = 3;\n/** Base delay in ms for exponential backoff on retries */\nconst GET_SUPPORTED_RETRY_DELAY_MS = 1000;\n\nconst verifyResponseSchema: z.ZodType<VerifyResponse, z.ZodTypeDef, unknown> = z.object({\n  isValid: z.boolean(),\n  invalidReason: z\n    .string()\n    .nullish()\n    .transform(v => v ?? undefined),\n  invalidMessage: z\n    .string()\n    .nullish()\n    .transform(v => v ?? undefined),\n  payer: z\n    .string()\n    .nullish()\n    .transform(v => v ?? undefined),\n  extensions: z\n    .record(z.string(), z.unknown())\n    .nullish()\n    .transform(v => v ?? undefined),\n});\n\nconst settleResponseSchema: z.ZodType<SettleResponse, z.ZodTypeDef, unknown> = z.object({\n  success: z.boolean(),\n  errorReason: z\n    .string()\n    .nullish()\n    .transform(v => v ?? undefined),\n  errorMessage: z\n    .string()\n    .nullish()\n    .transform(v => v ?? undefined),\n  payer: z\n    .string()\n    .nullish()\n    .transform(v => v ?? undefined),\n  transaction: z.string(),\n  network: z.custom<SettleResponse[\"network\"]>(value => typeof value === \"string\"),\n  extensions: z\n    .record(z.string(), z.unknown())\n    .nullish()\n    .transform(v => v ?? undefined),\n});\n\nconst supportedKindSchema: z.ZodType<SupportedResponse[\"kinds\"][number], z.ZodTypeDef, unknown> =\n  z.object({\n    x402Version: z.number(),\n    scheme: z.string(),\n    network: z.custom<SupportedResponse[\"kinds\"][number][\"network\"]>(\n      value => typeof value === \"string\",\n    ),\n    extra: z\n      .record(z.string(), z.unknown())\n      .nullish()\n      .transform(v => v ?? undefined),\n  });\n\nconst supportedResponseSchema: z.ZodType<SupportedResponse, z.ZodTypeDef, unknown> = z.object({\n  kinds: z.array(supportedKindSchema),\n  extensions: z.array(z.string()).default([]),\n  signers: z.record(z.string(), z.array(z.string())).default({}),\n});\n\n/**\n * Produces a compact excerpt of a facilitator response body for error messages.\n *\n * @param text - The raw response body text\n * @param limit - The maximum number of characters to include\n * @returns A normalized excerpt suitable for logs and thrown errors\n */\nfunction responseExcerpt(text: string, limit: number = 200): string {\n  const compact = text.trim().replace(/\\s+/g, \" \");\n  if (!compact) {\n    return \"<empty response>\";\n  }\n\n  if (compact.length <= limit) {\n    return compact;\n  }\n\n  return `${compact.slice(0, limit - 3)}...`;\n}\n\n/**\n * Parses and validates a successful facilitator response body.\n *\n * @param response - The HTTP response returned by the facilitator\n * @param schema - The schema used to validate the response payload\n * @param operation - The facilitator operation name for error reporting\n * @returns The validated facilitator payload\n */\nasync function parseSuccessResponse<T>(\n  response: Response,\n  schema: z.ZodType<T, z.ZodTypeDef, unknown>,\n  operation: string,\n): Promise<T> {\n  const text = await response.text();\n\n  let data: unknown;\n  try {\n    data = JSON.parse(text);\n  } catch {\n    throw new FacilitatorResponseError(\n      `Facilitator ${operation} returned invalid JSON: ${responseExcerpt(text)}`,\n    );\n  }\n\n  const parsed = schema.safeParse(data);\n  if (!parsed.success) {\n    throw new FacilitatorResponseError(\n      `Facilitator ${operation} returned invalid data: ${responseExcerpt(text)}`,\n    );\n  }\n\n  return parsed.data;\n}\n\n/**\n * HTTP-based client for interacting with x402 facilitator services\n * Handles HTTP communication with facilitator endpoints\n */\nexport class HTTPFacilitatorClient implements FacilitatorClient {\n  readonly url: string;\n  private readonly _createAuthHeaders?: FacilitatorConfig[\"createAuthHeaders\"];\n\n  /**\n   * Creates a new HTTPFacilitatorClient instance.\n   *\n   * @param config - Configuration options for the facilitator client\n   */\n  constructor(config?: FacilitatorConfig) {\n    // Normalize URL: strip trailing slashes to prevent redirect loops (e.g. 308)\n    // when constructing endpoint paths like `${url}/supported`\n    this.url = (config?.url || DEFAULT_FACILITATOR_URL).replace(/\\/+$/, \"\");\n    this._createAuthHeaders = config?.createAuthHeaders;\n  }\n\n  /**\n   * Verify a payment with the facilitator\n   *\n   * @param paymentPayload - The payment to verify\n   * @param paymentRequirements - The requirements to verify against\n   * @returns Verification response\n   */\n  async verify(\n    paymentPayload: PaymentPayload,\n    paymentRequirements: PaymentRequirements,\n  ): Promise<VerifyResponse> {\n    let headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n\n    if (this._createAuthHeaders) {\n      const authHeaders = await this.createAuthHeaders(\"verify\");\n      headers = { ...headers, ...authHeaders.headers };\n    }\n\n    const response = await fetch(`${this.url}/verify`, {\n      method: \"POST\",\n      headers,\n      redirect: \"follow\",\n      body: JSON.stringify({\n        x402Version: paymentPayload.x402Version,\n        paymentPayload: this.toJsonSafe(paymentPayload),\n        paymentRequirements: this.toJsonSafe(paymentRequirements),\n      }),\n    });\n\n    if (!response.ok) {\n      const text = await response.text();\n      let data: unknown;\n      try {\n        data = JSON.parse(text);\n      } catch {\n        throw new Error(`Facilitator verify failed (${response.status}): ${responseExcerpt(text)}`);\n      }\n\n      if (typeof data === \"object\" && data !== null && \"isValid\" in data) {\n        throw new VerifyError(response.status, data as VerifyResponse);\n      }\n\n      throw new Error(\n        `Facilitator verify failed (${response.status}): ${responseExcerpt(JSON.stringify(data))}`,\n      );\n    }\n\n    return parseSuccessResponse(response, verifyResponseSchema, \"verify\");\n  }\n\n  /**\n   * Settle a payment with the facilitator\n   *\n   * @param paymentPayload - The payment to settle\n   * @param paymentRequirements - The requirements for settlement\n   * @returns Settlement response\n   */\n  async settle(\n    paymentPayload: PaymentPayload,\n    paymentRequirements: PaymentRequirements,\n  ): Promise<SettleResponse> {\n    let headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n\n    if (this._createAuthHeaders) {\n      const authHeaders = await this.createAuthHeaders(\"settle\");\n      headers = { ...headers, ...authHeaders.headers };\n    }\n\n    const response = await fetch(`${this.url}/settle`, {\n      method: \"POST\",\n      headers,\n      redirect: \"follow\",\n      body: JSON.stringify({\n        x402Version: paymentPayload.x402Version,\n        paymentPayload: this.toJsonSafe(paymentPayload),\n        paymentRequirements: this.toJsonSafe(paymentRequirements),\n      }),\n    });\n\n    if (!response.ok) {\n      const text = await response.text();\n      let data: unknown;\n      try {\n        data = JSON.parse(text);\n      } catch {\n        throw new Error(`Facilitator settle failed (${response.status}): ${responseExcerpt(text)}`);\n      }\n\n      if (typeof data === \"object\" && data !== null && \"success\" in data) {\n        throw new SettleError(response.status, data as SettleResponse);\n      }\n\n      throw new Error(\n        `Facilitator settle failed (${response.status}): ${responseExcerpt(JSON.stringify(data))}`,\n      );\n    }\n\n    return parseSuccessResponse(response, settleResponseSchema, \"settle\");\n  }\n\n  /**\n   * Get supported payment kinds and extensions from the facilitator.\n   * Retries with exponential backoff on 429 rate limit errors.\n   *\n   * @returns Supported payment kinds and extensions\n   */\n  async getSupported(): Promise<SupportedResponse> {\n    let headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n\n    if (this._createAuthHeaders) {\n      const authHeaders = await this.createAuthHeaders(\"supported\");\n      headers = { ...headers, ...authHeaders.headers };\n    }\n\n    let lastError: Error | null = null;\n    for (let attempt = 0; attempt < GET_SUPPORTED_RETRIES; attempt++) {\n      const response = await fetch(`${this.url}/supported`, {\n        method: \"GET\",\n        headers,\n        redirect: \"follow\",\n      });\n\n      if (response.ok) {\n        return parseSuccessResponse(response, supportedResponseSchema, \"supported\");\n      }\n\n      const errorText = await response.text().catch(() => response.statusText);\n      lastError = new Error(\n        `Facilitator getSupported failed (${response.status}): ${responseExcerpt(errorText)}`,\n      );\n\n      // Retry on 429 rate limit errors with exponential backoff\n      if (response.status === 429 && attempt < GET_SUPPORTED_RETRIES - 1) {\n        const delay = GET_SUPPORTED_RETRY_DELAY_MS * Math.pow(2, attempt);\n        await new Promise(resolve => setTimeout(resolve, delay));\n        continue;\n      }\n\n      throw lastError;\n    }\n\n    throw lastError ?? new Error(\"Facilitator getSupported failed after retries\");\n  }\n\n  /**\n   * Creates authentication headers for a specific path.\n   *\n   * @param path - The path to create authentication headers for (e.g., \"verify\", \"settle\", \"supported\")\n   * @returns An object containing the authentication headers for the specified path\n   */\n  async createAuthHeaders(path: string): Promise<{\n    headers: Record<string, string>;\n  }> {\n    if (this._createAuthHeaders) {\n      const authHeaders = (await this._createAuthHeaders()) as Record<\n        string,\n        Record<string, string>\n      >;\n      return {\n        headers: authHeaders[path] ?? {},\n      };\n    }\n    return {\n      headers: {},\n    };\n  }\n\n  /**\n   * Helper to convert objects to JSON-safe format.\n   * Handles BigInt and other non-JSON types.\n   *\n   * @param obj - The object to convert\n   * @returns The JSON-safe representation of the object\n   */\n  private toJsonSafe(obj: unknown): unknown {\n    return JSON.parse(\n      JSON.stringify(obj, (_, value) => (typeof value === \"bigint\" ? value.toString() : value)),\n    );\n  }\n}\n", "import {\n  decodePaymentRequiredHeader,\n  decodePaymentResponseHeader,\n  encodePaymentSignatureHeader,\n} from \".\";\nimport { SettleResponse } from \"../types\";\nimport { PaymentPayload, PaymentRequired } from \"../types/payments\";\nimport { x402Client } from \"../client/x402Client\";\n\n/**\n * Context provided to onPaymentRequired hooks.\n */\nexport interface PaymentRequiredContext {\n  paymentRequired: PaymentRequired;\n}\n\n/**\n * Hook called when a 402 response is received, before payment processing.\n * Return headers to try before payment, or void to proceed directly to payment.\n */\nexport type PaymentRequiredHook = (\n  context: PaymentRequiredContext,\n) => Promise<{ headers: Record<string, string> } | void>;\n\n/**\n * HTTP-specific client for handling x402 payment protocol over HTTP.\n *\n * Wraps a x402Client to provide HTTP-specific encoding/decoding functionality\n * for payment headers and responses while maintaining the builder pattern.\n */\nexport class x402HTTPClient {\n  private paymentRequiredHooks: PaymentRequiredHook[] = [];\n\n  /**\n   * Creates a new x402HTTPClient instance.\n   *\n   * @param client - The underlying x402Client for payment logic\n   */\n  constructor(private readonly client: x402Client) {}\n\n  /**\n   * Register a hook to handle 402 responses before payment.\n   * Hooks run in order; first to return headers wins.\n   *\n   * @param hook - The hook function to register\n   * @returns This instance for chaining\n   */\n  onPaymentRequired(hook: PaymentRequiredHook): this {\n    this.paymentRequiredHooks.push(hook);\n    return this;\n  }\n\n  /**\n   * Run hooks and return headers if any hook provides them.\n   *\n   * @param paymentRequired - The payment required response from the server\n   * @returns Headers to use for retry, or null to proceed to payment\n   */\n  async handlePaymentRequired(\n    paymentRequired: PaymentRequired,\n  ): Promise<Record<string, string> | null> {\n    for (const hook of this.paymentRequiredHooks) {\n      const result = await hook({ paymentRequired });\n      if (result?.headers) {\n        return result.headers;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Encodes a payment payload into appropriate HTTP headers based on version.\n   *\n   * @param paymentPayload - The payment payload to encode\n   * @returns HTTP headers containing the encoded payment signature\n   */\n  encodePaymentSignatureHeader(paymentPayload: PaymentPayload): Record<string, string> {\n    switch (paymentPayload.x402Version) {\n      case 2:\n        return {\n          \"PAYMENT-SIGNATURE\": encodePaymentSignatureHeader(paymentPayload),\n        };\n      case 1:\n        return {\n          \"X-PAYMENT\": encodePaymentSignatureHeader(paymentPayload),\n        };\n      default:\n        throw new Error(\n          `Unsupported x402 version: ${(paymentPayload as PaymentPayload).x402Version}`,\n        );\n    }\n  }\n\n  /**\n   * Extracts payment required information from HTTP response.\n   *\n   * @param getHeader - Function to retrieve header value by name (case-insensitive)\n   * @param body - Optional response body for v1 compatibility\n   * @returns The payment required object\n   */\n  getPaymentRequiredResponse(\n    getHeader: (name: string) => string | null | undefined,\n    body?: unknown,\n  ): PaymentRequired {\n    // v2\n    const paymentRequired = getHeader(\"PAYMENT-REQUIRED\");\n    if (paymentRequired) {\n      return decodePaymentRequiredHeader(paymentRequired);\n    }\n\n    // v1\n    if (\n      body &&\n      body instanceof Object &&\n      \"x402Version\" in body &&\n      (body as PaymentRequired).x402Version === 1\n    ) {\n      return body as PaymentRequired;\n    }\n\n    throw new Error(\"Invalid payment required response\");\n  }\n\n  /**\n   * Extracts payment settlement response from HTTP headers.\n   *\n   * @param getHeader - Function to retrieve header value by name (case-insensitive)\n   * @returns The settlement response object\n   */\n  getPaymentSettleResponse(getHeader: (name: string) => string | null | undefined): SettleResponse {\n    // v2\n    const paymentResponse = getHeader(\"PAYMENT-RESPONSE\");\n    if (paymentResponse) {\n      return decodePaymentResponseHeader(paymentResponse);\n    }\n\n    // v1\n    const xPaymentResponse = getHeader(\"X-PAYMENT-RESPONSE\");\n    if (xPaymentResponse) {\n      return decodePaymentResponseHeader(xPaymentResponse);\n    }\n\n    throw new Error(\"Payment response header not found\");\n  }\n\n  /**\n   * Creates a payment payload for the given payment requirements.\n   * Delegates to the underlying x402Client.\n   *\n   * @param paymentRequired - The payment required response from the server\n   * @returns Promise resolving to the payment payload\n   */\n  async createPaymentPayload(paymentRequired: PaymentRequired): Promise<PaymentPayload> {\n    return this.client.createPaymentPayload(paymentRequired);\n  }\n}\n", "import { z } from \"zod\";\n\n// ============================================================================\n// Reusable Primitive Schemas\n// ============================================================================\n\n/**\n * Non-empty string schema - a string with at least one character.\n * Used for required string fields that cannot be empty.\n */\nexport const NonEmptyString = z.string().min(1);\nexport type NonEmptyString = z.infer<typeof NonEmptyString>;\n\n/**\n * Any record schema - an object with unknown keys and values.\n * Used for scheme-specific payloads and other extensible objects.\n */\nexport const Any = z.record(z.unknown());\nexport type Any = z.infer<typeof Any>;\n\n/**\n * Optional any record schema - an optional object with unknown keys and values.\n * Used for optional extension fields like `extra` and `extensions`.\n */\nexport const OptionalAny = z.record(z.unknown()).optional().nullable();\nexport type OptionalAny = z.infer<typeof OptionalAny>;\n\n// ============================================================================\n// Network Schemas\n// ============================================================================\n\n/**\n * Network identifier schema for V1 - loose validation.\n * V1 accepts any non-empty string for backwards compatibility.\n */\nexport const NetworkSchemaV1 = NonEmptyString;\nexport type NetworkV1 = z.infer<typeof NetworkSchemaV1>;\n\n/**\n * Network identifier schema for V2 - CAIP-2 format validation.\n * V2 requires minimum length of 3 and a colon separator (e.g., \"eip155:84532\", \"solana:devnet\").\n */\nexport const NetworkSchemaV2 = z\n  .string()\n  .min(3)\n  .refine(val => val.includes(\":\"), {\n    message: \"Network must be in CAIP-2 format (e.g., 'eip155:84532')\",\n  });\nexport type NetworkV2 = z.infer<typeof NetworkSchemaV2>;\n\n/**\n * Union network schema - accepts either V1 or V2 format.\n */\nexport const NetworkSchema = z.union([NetworkSchemaV1, NetworkSchemaV2]);\nexport type Network = z.infer<typeof NetworkSchema>;\n\n// ============================================================================\n// Shared Schemas\n// ============================================================================\n\n/**\n * ResourceInfo schema for V2 - describes the protected resource.\n */\nexport const ResourceInfoSchema = z.object({\n  url: NonEmptyString,\n  description: z.string().optional(),\n  mimeType: z.string().optional(),\n});\nexport type ResourceInfo = z.infer<typeof ResourceInfoSchema>;\n\n// ============================================================================\n// V1 Schemas\n// ============================================================================\n\n/**\n * PaymentRequirements schema for V1.\n * V1 includes resource info directly in the requirements object.\n */\nexport const PaymentRequirementsV1Schema = z.object({\n  scheme: NonEmptyString,\n  network: NetworkSchemaV1,\n  maxAmountRequired: NonEmptyString,\n  resource: NonEmptyString, // URL string in V1\n  description: z.string(),\n  mimeType: z.string().optional(),\n  outputSchema: Any.optional().nullable(),\n  payTo: NonEmptyString,\n  maxTimeoutSeconds: z.number().positive(),\n  asset: NonEmptyString,\n  extra: OptionalAny,\n});\nexport type PaymentRequirementsV1 = z.infer<typeof PaymentRequirementsV1Schema>;\n\n/**\n * PaymentRequired (402 response) schema for V1.\n * Contains payment requirements when a resource requires payment.\n */\nexport const PaymentRequiredV1Schema = z.object({\n  x402Version: z.literal(1),\n  error: z.string().optional(),\n  accepts: z.array(PaymentRequirementsV1Schema).min(1),\n});\nexport type PaymentRequiredV1 = z.infer<typeof PaymentRequiredV1Schema>;\n\n/**\n * PaymentPayload schema for V1.\n * Contains the payment data sent by the client.\n */\nexport const PaymentPayloadV1Schema = z.object({\n  x402Version: z.literal(1),\n  scheme: NonEmptyString,\n  network: NetworkSchemaV1,\n  payload: Any,\n});\nexport type PaymentPayloadV1 = z.infer<typeof PaymentPayloadV1Schema>;\n\n// ============================================================================\n// V2 Schemas\n// ============================================================================\n\n/**\n * PaymentRequirements schema for V2.\n * V2 uses \"amount\" instead of \"maxAmountRequired\" and doesn't include resource info.\n */\nexport const PaymentRequirementsV2Schema = z.object({\n  scheme: NonEmptyString,\n  network: NetworkSchemaV2,\n  amount: NonEmptyString,\n  asset: NonEmptyString,\n  payTo: NonEmptyString,\n  maxTimeoutSeconds: z.number().positive(),\n  extra: OptionalAny,\n});\nexport type PaymentRequirementsV2 = z.infer<typeof PaymentRequirementsV2Schema>;\n\n/**\n * PaymentRequired (402 response) schema for V2.\n * Contains payment requirements when a resource requires payment.\n */\nexport const PaymentRequiredV2Schema = z.object({\n  x402Version: z.literal(2),\n  error: z.string().optional(),\n  resource: ResourceInfoSchema,\n  accepts: z.array(PaymentRequirementsV2Schema).min(1),\n  extensions: OptionalAny,\n});\nexport type PaymentRequiredV2 = z.infer<typeof PaymentRequiredV2Schema>;\n\n/**\n * PaymentPayload schema for V2.\n * Contains the payment data sent by the client.\n */\nexport const PaymentPayloadV2Schema = z.object({\n  x402Version: z.literal(2),\n  resource: ResourceInfoSchema.optional(),\n  accepted: PaymentRequirementsV2Schema,\n  payload: Any,\n  extensions: OptionalAny,\n});\nexport type PaymentPayloadV2 = z.infer<typeof PaymentPayloadV2Schema>;\n\n// ============================================================================\n// Union Schemas (V1 | V2)\n// ============================================================================\n\n/**\n * PaymentRequirements union schema - accepts either V1 or V2 format.\n * Use this when you need to handle both versions.\n */\nexport const PaymentRequirementsSchema = z.union([\n  PaymentRequirementsV1Schema,\n  PaymentRequirementsV2Schema,\n]);\nexport type PaymentRequirements = z.infer<typeof PaymentRequirementsSchema>;\n\n/**\n * PaymentRequired union schema - accepts either V1 or V2 format.\n * Uses discriminated union on x402Version for efficient parsing.\n */\nexport const PaymentRequiredSchema = z.discriminatedUnion(\"x402Version\", [\n  PaymentRequiredV1Schema,\n  PaymentRequiredV2Schema,\n]);\nexport type PaymentRequired = z.infer<typeof PaymentRequiredSchema>;\n\n/**\n * PaymentPayload union schema - accepts either V1 or V2 format.\n * Uses discriminated union on x402Version for efficient parsing.\n */\nexport const PaymentPayloadSchema = z.discriminatedUnion(\"x402Version\", [\n  PaymentPayloadV1Schema,\n  PaymentPayloadV2Schema,\n]);\nexport type PaymentPayload = z.infer<typeof PaymentPayloadSchema>;\n\n// ============================================================================\n// Validation Functions\n// ============================================================================\n\n/**\n * Validates a PaymentRequired object (V1 or V2).\n *\n * @param value - The value to validate\n * @returns A result object with success status and data or error\n */\nexport function parsePaymentRequired(\n  value: unknown,\n): z.SafeParseReturnType<unknown, PaymentRequired> {\n  return PaymentRequiredSchema.safeParse(value);\n}\n\n/**\n * Validates a PaymentRequired object and throws on error.\n *\n * @param value - The value to validate\n * @returns The validated PaymentRequired\n * @throws ZodError if validation fails\n */\nexport function validatePaymentRequired(value: unknown): PaymentRequired {\n  return PaymentRequiredSchema.parse(value);\n}\n\n/**\n * Type guard for PaymentRequired (V1 or V2).\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequired\n */\nexport function isPaymentRequired(value: unknown): value is PaymentRequired {\n  return PaymentRequiredSchema.safeParse(value).success;\n}\n\n/**\n * Validates a PaymentRequirements object (V1 or V2).\n *\n * @param value - The value to validate\n * @returns A result object with success status and data or error\n */\nexport function parsePaymentRequirements(\n  value: unknown,\n): z.SafeParseReturnType<unknown, PaymentRequirements> {\n  return PaymentRequirementsSchema.safeParse(value);\n}\n\n/**\n * Validates a PaymentRequirements object and throws on error.\n *\n * @param value - The value to validate\n * @returns The validated PaymentRequirements\n * @throws ZodError if validation fails\n */\nexport function validatePaymentRequirements(value: unknown): PaymentRequirements {\n  return PaymentRequirementsSchema.parse(value);\n}\n\n/**\n * Type guard for PaymentRequirements (V1 or V2).\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequirements\n */\nexport function isPaymentRequirements(value: unknown): value is PaymentRequirements {\n  return PaymentRequirementsSchema.safeParse(value).success;\n}\n\n/**\n * Validates a PaymentPayload object (V1 or V2).\n *\n * @param value - The value to validate\n * @returns A result object with success status and data or error\n */\nexport function parsePaymentPayload(\n  value: unknown,\n): z.SafeParseReturnType<unknown, PaymentPayload> {\n  return PaymentPayloadSchema.safeParse(value);\n}\n\n/**\n * Validates a PaymentPayload object and throws on error.\n *\n * @param value - The value to validate\n * @returns The validated PaymentPayload\n * @throws ZodError if validation fails\n */\nexport function validatePaymentPayload(value: unknown): PaymentPayload {\n  return PaymentPayloadSchema.parse(value);\n}\n\n/**\n * Type guard for PaymentPayload (V1 or V2).\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentPayload\n */\nexport function isPaymentPayload(value: unknown): value is PaymentPayload {\n  return PaymentPayloadSchema.safeParse(value).success;\n}\n\n// ============================================================================\n// Version-Specific Type Guards\n// ============================================================================\n\n/**\n * Type guard for PaymentRequiredV1.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequiredV1\n */\nexport function isPaymentRequiredV1(value: unknown): value is PaymentRequiredV1 {\n  return PaymentRequiredV1Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentRequiredV2.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequiredV2\n */\nexport function isPaymentRequiredV2(value: unknown): value is PaymentRequiredV2 {\n  return PaymentRequiredV2Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentRequirementsV1.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequirementsV1\n */\nexport function isPaymentRequirementsV1(value: unknown): value is PaymentRequirementsV1 {\n  return PaymentRequirementsV1Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentRequirementsV2.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequirementsV2\n */\nexport function isPaymentRequirementsV2(value: unknown): value is PaymentRequirementsV2 {\n  return PaymentRequirementsV2Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentPayloadV1.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentPayloadV1\n */\nexport function isPaymentPayloadV1(value: unknown): value is PaymentPayloadV1 {\n  return PaymentPayloadV1Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentPayloadV2.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentPayloadV2\n */\nexport function isPaymentPayloadV2(value: unknown): value is PaymentPayloadV2 {\n  return PaymentPayloadV2Schema.safeParse(value).success;\n}\n\n// ============================================================================\n// Re-export zod for convenience\n// ============================================================================\n\nexport { z } from \"zod\";\n", null, null, "/**\n * SECG secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf).\n *\n * Belongs to Koblitz curves: it has efficiently-computable GLV endomorphism \u03C8,\n * check out {@link EndomorphismOpts}. Seems to be rigid (not backdoored).\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha2.js';\nimport { randomBytes } from '@noble/hashes/utils.js';\nimport { createKeygen, type CurveLengths } from './abstract/curve.ts';\nimport {\n  createFROST,\n  type FROST,\n  type FrostPublic,\n  type FrostSecret,\n  type Nonces,\n} from './abstract/frost.ts';\nimport { createHasher, type H2CHasher, isogenyMap } from './abstract/hash-to-curve.ts';\nimport { Field, mapHashToField, pow2 } from './abstract/modular.ts';\nimport {\n  type ECDSA,\n  ecdsa,\n  type EndomorphismOpts,\n  mapToCurveSimpleSWU,\n  type WeierstrassPoint as PointType,\n  weierstrass,\n  type WeierstrassOpts,\n  type WeierstrassPointCons,\n} from './abstract/weierstrass.ts';\nimport {\n  abytes,\n  asciiToBytes,\n  bytesToNumberBE,\n  concatBytes,\n  type TArg,\n  type TRet,\n} from './utils.ts';\n\n// Seems like generator was produced from some seed:\n// `Pointk1.BASE.multiply(Pointk1.Fn.inv(2n, N)).toAffine().x`\n// // gives short x 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63n\nconst secp256k1_CURVE: WeierstrassOpts<bigint> = {\n  p: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'),\n  n: BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141'),\n  h: BigInt(1),\n  a: BigInt(0),\n  b: BigInt(7),\n  Gx: BigInt('0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'),\n  Gy: BigInt('0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8'),\n};\n\nconst secp256k1_ENDO: EndomorphismOpts = {\n  beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n  basises: [\n    [BigInt('0x3086d221a7d46bcde86c90e49284eb15'), -BigInt('0xe4437ed6010e88286f547fa90abfe4c3')],\n    [BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8'), BigInt('0x3086d221a7d46bcde86c90e49284eb15')],\n  ],\n};\n\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _2n = /* @__PURE__ */ BigInt(2);\n\n/**\n * \u221An = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y: bigint): bigint {\n  const P = secp256k1_CURVE.p;\n  // prettier-ignore\n  const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n  // prettier-ignore\n  const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n  const b2 = (y * y * y) % P; // x^3, 11\n  const b3 = (b2 * b2 * y) % P; // x^7\n  const b6 = (pow2(b3, _3n, P) * b3) % P;\n  const b9 = (pow2(b6, _3n, P) * b3) % P;\n  const b11 = (pow2(b9, _2n, P) * b2) % P;\n  const b22 = (pow2(b11, _11n, P) * b11) % P;\n  const b44 = (pow2(b22, _22n, P) * b22) % P;\n  const b88 = (pow2(b44, _44n, P) * b44) % P;\n  const b176 = (pow2(b88, _88n, P) * b88) % P;\n  const b220 = (pow2(b176, _44n, P) * b44) % P;\n  const b223 = (pow2(b220, _3n, P) * b3) % P;\n  const t1 = (pow2(b223, _23n, P) * b22) % P;\n  const t2 = (pow2(t1, _6n, P) * b2) % P;\n  const root = pow2(t2, _2n, P);\n  if (!Fpk1.eql(Fpk1.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fpk1 = Field(secp256k1_CURVE.p, { sqrt: sqrtMod });\nconst Pointk1 = /* @__PURE__ */ weierstrass(secp256k1_CURVE, {\n  Fp: Fpk1,\n  endo: secp256k1_ENDO,\n});\n\n/**\n * secp256k1 curve: ECDSA and ECDH methods.\n *\n * Uses sha256 to hash messages. To use a different hash,\n * pass `{ prehash: false }` to sign / verify.\n *\n * @example\n * Generate one secp256k1 keypair, sign a message, and verify it.\n *\n * ```js\n * import { secp256k1 } from '@noble/curves/secp256k1.js';\n * const { secretKey, publicKey } = secp256k1.keygen();\n * // const publicKey = secp256k1.getPublicKey(secretKey);\n * const msg = new TextEncoder().encode('hello noble');\n * const sig = secp256k1.sign(msg, secretKey);\n * const isValid = secp256k1.verify(sig, msg, publicKey);\n * // const sigKeccak = secp256k1.sign(keccak256(msg), secretKey, { prehash: false });\n * ```\n */\nexport const secp256k1: ECDSA = /* @__PURE__ */ ecdsa(Pointk1, sha256);\n\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\n// BIP-340 phrases tags as UTF-8, but all current standardized names here are 7-bit ASCII.\nfunction taggedHash(tag: string, ...messages: TArg<Uint8Array[]>): TRet<Uint8Array> {\n  let tagP = TAGGED_HASH_PREFIXES[tag];\n  if (tagP === undefined) {\n    const tagH = sha256(asciiToBytes(tag));\n    tagP = concatBytes(tagH, tagH);\n    TAGGED_HASH_PREFIXES[tag] = tagP;\n  }\n  return sha256(concatBytes(tagP, ...messages)) as TRet<Uint8Array>;\n}\n\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: TArg<PointType<bigint>>): TRet<Uint8Array> =>\n  point.toBytes(true).slice(1) as TRet<Uint8Array>;\nconst hasEven = (y: bigint) => y % _2n === _0n;\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: TArg<Uint8Array>) {\n  const { Fn, BASE } = Pointk1;\n  const d_ = Fn.fromBytes(priv);\n  const p = BASE.multiply(d_); // P = d'\u22C5G; 0 < d' < n check is done inside\n  const scalar = hasEven(p.y) ? d_ : Fn.neg(d_);\n  return { scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x: bigint): PointType<bigint> {\n  const Fp = Fpk1;\n  if (!Fp.isValidNot0(x)) throw new Error('invalid x: Fail if x \u2265 p');\n  const xx = Fp.create(x * x);\n  const c = Fp.create(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = Fp.sqrt(c); // Let y = c^(p+1)/4 mod p. Same as sqrt().\n  // Return the unique point P such that x(P) = x and\n  // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n  if (!hasEven(y)) y = Fp.neg(y);\n  const p = Pointk1.fromAffine({ x, y });\n  p.assertValidity();\n  return p;\n}\n// BIP-340 callers still need to supply canonical 32-byte inputs where required; this alias only\n// parses big-endian bytes and does not enforce the fixed-width contract itself.\nconst num = bytesToNumberBE;\n/** Create tagged hash, convert it to bigint, reduce modulo-n. */\nfunction challenge(...args: TArg<Uint8Array[]>): bigint {\n  return Pointk1.Fn.create(num(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/** Schnorr public key is just `x` coordinate of Point as per BIP340. */\nfunction schnorrGetPublicKey(secretKey: TArg<Uint8Array>): TRet<Uint8Array> {\n  return schnorrGetExtPubKey(secretKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\n\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * `auxRand` is optional and is not the sole source of `k` generation: bad CSPRNG output will not\n * be catastrophic, but BIP-340 still recommends fresh auxiliary randomness when available to harden\n * deterministic signing against side-channel and fault-injection attacks.\n */\nfunction schnorrSign(\n  message: TArg<Uint8Array>,\n  secretKey: TArg<Uint8Array>,\n  auxRand: TArg<Uint8Array> = randomBytes(32)\n): TRet<Uint8Array> {\n  const { Fn, BASE } = Pointk1;\n  const m = abytes(message, undefined, 'message');\n  const { bytes: px, scalar: d } = schnorrGetExtPubKey(secretKey); // checks for isWithinCurveOrder\n  const a = abytes(auxRand, 32, 'auxRand'); // Auxiliary random data a: a 32-byte array\n  // Let t be the byte-wise xor of bytes(d) and hash/aux(a).\n  const t = Fn.toBytes(d ^ num(taggedHash('BIP0340/aux', a)));\n  const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n  // BIP340 defines k' = int(rand) mod n. We can't reuse schnorrGetExtPubKey(rand)\n  // here: that helper parses canonical secret keys and rejects rand >= n instead\n  // of reducing the nonce hash modulo the group order.\n  const k_ = Fn.create(num(rand));\n  // BIP-340: \"Let k' = int(rand) mod n. Fail if k' = 0. Let R = k'\u22C5G.\"\n  if (k_ === 0n) throw new Error('sign failed: k is zero');\n  const p = BASE.multiply(k_); // Rejects zero; only the raw nonce hash needs reduction.\n  const k = hasEven(p.y) ? k_ : Fn.neg(k_);\n  const rx = pointToBytes(p);\n  const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n  const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n  sig.set(rx, 0);\n  sig.set(Fn.toBytes(Fn.create(k + e * d)), 32);\n  // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n  if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');\n  return sig as TRet<Uint8Array>;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(\n  signature: TArg<Uint8Array>,\n  message: TArg<Uint8Array>,\n  publicKey: TArg<Uint8Array>\n): boolean {\n  const { Fp, Fn, BASE } = Pointk1;\n  const sig = abytes(signature, 64, 'signature');\n  const m = abytes(message, undefined, 'message');\n  const pub = abytes(publicKey, 32, 'publicKey');\n  try {\n    const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!Fp.isValidNot0(r)) return false;\n    const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    // Stricter than BIP-340/libsecp256k1, which only reject s >= n. Honest signing reaches\n    // s = 0 only with negligible probability (k + e*d \u2261 0 mod n), so treat zero-s inputs as\n    // crafted edge cases and fail closed instead of carrying that extra verification surface.\n    if (!Fn.isValidNot0(s)) return false;\n\n    // int(challenge(bytes(r) || bytes(P) || m)) % n\n    const e = challenge(Fn.toBytes(r), pointToBytes(P), m);\n    // R = s\u22C5G - e\u22C5P, where -eP == (n-e)P\n    const R = BASE.multiplyUnsafe(s).add(P.multiplyUnsafe(Fn.neg(e)));\n    const { x, y } = R.toAffine();\n    // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n    if (R.is0() || !hasEven(y) || x !== r) return false;\n    return true;\n  } catch (error) {\n    return false;\n  }\n}\n\nexport const __TEST: { lift_x: typeof lift_x } = /* @__PURE__ */ Object.freeze({ lift_x });\n\n/** Schnorr-specific secp256k1 API from BIP340. */\nexport type SecpSchnorr = {\n  /**\n   * Generate one Schnorr secret/public keypair.\n   * @param seed - Optional seed for deterministic testing or custom randomness.\n   * @returns Fresh secret/public keypair.\n   */\n  keygen: (seed?: TArg<Uint8Array>) => { secretKey: TRet<Uint8Array>; publicKey: TRet<Uint8Array> };\n  /**\n   * Derive the x-only public key from a secret key.\n   * @param secretKey - Secret key bytes.\n   * @returns X-only public key bytes.\n   */\n  getPublicKey: typeof schnorrGetPublicKey;\n  /**\n   * Create one BIP340 Schnorr signature.\n   * @param message - Message bytes to sign.\n   * @param secretKey - Secret key bytes.\n   * @param auxRand - Optional auxiliary randomness.\n   * @returns Compact Schnorr signature bytes.\n   */\n  sign: typeof schnorrSign;\n  /**\n   * Verify one BIP340 Schnorr signature.\n   * @param signature - Compact signature bytes.\n   * @param message - Signed message bytes.\n   * @param publicKey - X-only public key bytes.\n   * @returns `true` when the signature is valid.\n   */\n  verify: typeof schnorrVerify;\n  /** Underlying secp256k1 point constructor. */\n  Point: WeierstrassPointCons<bigint>;\n  /** Helper utilities for Schnorr-specific key handling and tagged hashing. */\n  utils: {\n    /** Generate one Schnorr secret key. */\n    randomSecretKey: (seed?: TArg<Uint8Array>) => TRet<Uint8Array>;\n    /** Convert one point into its x-only BIP340 byte encoding. */\n    pointToBytes: (point: TArg<PointType<bigint>>) => TRet<Uint8Array>;\n    /** Lift one x coordinate into the unique even-Y point. */\n    lift_x: typeof lift_x;\n    /** Compute a BIP340 tagged hash. */\n    taggedHash: typeof taggedHash;\n  };\n  /** Public byte lengths for keys, signatures, and seeds. */\n  lengths: CurveLengths;\n};\n/**\n * Schnorr signatures over secp256k1.\n * See {@link https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki | BIP 340}.\n * @example\n * Generate one BIP340 Schnorr keypair, sign a message, and verify it.\n *\n * ```js\n * import { schnorr } from '@noble/curves/secp256k1.js';\n * const { secretKey, publicKey } = schnorr.keygen();\n * // const publicKey = schnorr.getPublicKey(secretKey);\n * const msg = new TextEncoder().encode('hello');\n * const sig = schnorr.sign(msg, secretKey);\n * const isValid = schnorr.verify(sig, msg, publicKey);\n * ```\n */\nexport const schnorr: SecpSchnorr = /* @__PURE__ */ (() => {\n  const size = 32;\n  const seedLength = 48;\n  const randomSecretKey = (seed?: TArg<Uint8Array>): TRet<Uint8Array> => {\n    seed = seed === undefined ? randomBytes(seedLength) : seed;\n    return mapHashToField(seed, secp256k1_CURVE.n);\n  };\n  return Object.freeze({\n    keygen: createKeygen(randomSecretKey, schnorrGetPublicKey),\n    getPublicKey: schnorrGetPublicKey,\n    sign: schnorrSign,\n    verify: schnorrVerify,\n    Point: Pointk1,\n    utils: Object.freeze({\n      randomSecretKey,\n      taggedHash,\n      lift_x,\n      pointToBytes,\n    }),\n    lengths: Object.freeze({\n      secretKey: size,\n      publicKey: size,\n      publicKeyHasPrefix: false,\n      signature: size * 2,\n      seed: seedLength,\n    }),\n  });\n})();\n\n// RFC 9380 Appendix E.1 3-isogeny coefficients for secp256k1, stored in ascending degree order.\n// The final `1` in each denominator array is the explicit monic leading term.\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fpk1,\n    [\n      // xNum\n      [\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n        '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n        '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n      ],\n      // xDen\n      [\n        '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n        '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n      // yNum\n      [\n        '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n        '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n        '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n        '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n      ],\n      // yDen\n      [\n        '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n        '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n        '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n    ].map((i) => i.map((j) => BigInt(j))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\n// RFC 9380 \u00A78.7 secp256k1 E' parameters for the SWU-to-isogeny pipeline below.\nlet mapSWU: ((u: bigint) => { x: bigint; y: bigint }) | undefined;\nconst getMapSWU = () =>\n  mapSWU ||\n  (mapSWU = mapToCurveSimpleSWU(Fpk1, {\n    // Building the SWU sqrt-ratio helper eagerly adds noticeable `secp256k1.js` import cost, so\n    // defer it to first use; after that the cached mapper is reused directly.\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fpk1.create(BigInt('-11')),\n  }));\n\n/**\n * Hashing / encoding to secp256k1 points / field. RFC 9380 methods.\n * @example\n * Hash one message onto secp256k1.\n *\n * ```ts\n * const point = secp256k1_hasher.hashToCurve(new TextEncoder().encode('hello noble'));\n * ```\n */\nexport const secp256k1_hasher: H2CHasher<WeierstrassPointCons<bigint>> = /* @__PURE__ */ (() =>\n  createHasher(\n    Pointk1,\n    (scalars: bigint[]) => {\n      const { x, y } = getMapSWU()(Fpk1.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fpk1.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  ))();\n/**\n * FROST threshold signatures over secp256k1. RFC 9591.\n * @example\n * Create one trusted-dealer package for 2-of-3 secp256k1 signing.\n *\n * ```ts\n * const alice = secp256k1_FROST.Identifier.derive('alice@example.com');\n * const bob = secp256k1_FROST.Identifier.derive('bob@example.com');\n * const carol = secp256k1_FROST.Identifier.derive('carol@example.com');\n * const deal = secp256k1_FROST.trustedDealer({ min: 2, max: 3 }, [alice, bob, carol]);\n * ```\n */\nexport const secp256k1_FROST: TRet<FROST> = /* @__PURE__ */ (() =>\n  createFROST({\n    name: 'FROST-secp256k1-SHA256-v1',\n    Point: Pointk1,\n    hashToScalar: secp256k1_hasher.hashToScalar,\n    hash: sha256,\n  }))();\n\n// Taproot utils\n// `undefined` means \"disable TapTweak entirely\"; callers that want the BIP-341/BIP-386 empty\n// merkle root must pass `new Uint8Array(0)` explicitly.\nfunction tweak(point: PointType<bigint>, merkleRoot?: TArg<Uint8Array>): bigint {\n  if (merkleRoot === undefined) return _0n;\n  const x = pointToBytes(point);\n  const t = bytesToNumberBE(taggedHash('TapTweak', x, merkleRoot));\n  // BIP-341 taproot_tweak_pubkey/taproot_tweak_seckey: \"if t >= SECP256K1_ORDER:\n  // raise ValueError\". TapTweak must reject overflow instead of reducing modulo n.\n  if (!Pointk1.Fn.isValid(t)) throw new Error('invalid TapTweak hash');\n  return t;\n}\nfunction frostPubToEvenY(pub: TArg<FrostPublic>): TRet<FrostPublic> {\n  const VK = Pointk1.fromBytes(pub.commitments[0]);\n  // Keep aliasing on the already-even path so wrapper callers can skip unnecessary cloning.\n  if (hasEven(VK.y)) return pub as TRet<FrostPublic>;\n  return {\n    signers: { min: pub.signers.min, max: pub.signers.max },\n    commitments: pub.commitments.map((i) => Pointk1.fromBytes(i).negate().toBytes()),\n    verifyingShares: Object.fromEntries(\n      Object.entries(pub.verifyingShares).map(([k, v]) => [\n        k,\n        Pointk1.fromBytes(v).negate().toBytes(),\n      ])\n    ),\n  } as TRet<FrostPublic>;\n}\nfunction frostSecretToEvenY(s: TArg<FrostSecret>, pub: TArg<FrostPublic>): TRet<FrostSecret> {\n  const VK = Pointk1.fromBytes(pub.commitments[0]);\n  // Keep aliasing on the already-even path so wrapper callers can preserve package identity.\n  if (hasEven(VK.y)) return s as TRet<FrostSecret>;\n  const Fn = Pointk1.Fn;\n  return {\n    ...s,\n    signingShare: Fn.toBytes(Fn.neg(Fn.fromBytes(s.signingShare))),\n  } as TRet<FrostSecret>;\n}\nfunction frostNoncesToEvenY(PK: PointType<bigint>, nonces: TArg<Nonces>): TRet<Nonces> {\n  if (hasEven(PK.y)) return nonces as TRet<Nonces>;\n  const Fn = Pointk1.Fn;\n  return {\n    binding: Fn.toBytes(Fn.neg(Fn.fromBytes(nonces.binding))),\n    hiding: Fn.toBytes(Fn.neg(Fn.fromBytes(nonces.hiding))),\n  } as TRet<Nonces>;\n}\n\nfunction frostTweakSecret(\n  s: TArg<FrostSecret>,\n  pub: TArg<FrostPublic>,\n  merkleRoot?: TArg<Uint8Array>\n): TRet<FrostSecret> {\n  const Fn = Pointk1.Fn;\n  const keyPackage = frostSecretToEvenY(s, pub);\n  const evenPub = frostPubToEvenY(pub);\n  const t = tweak(Pointk1.fromBytes(evenPub.commitments[0]), merkleRoot);\n  const signingShare = Fn.toBytes(Fn.add(Fn.fromBytes(keyPackage.signingShare), t));\n  return {\n    identifier: keyPackage.identifier,\n    signingShare,\n  } as TRet<FrostSecret>;\n}\n\nfunction frostTweakPublic(\n  pub: TArg<FrostPublic>,\n  merkleRoot?: TArg<Uint8Array>\n): TRet<FrostPublic> {\n  const PKPackage = frostPubToEvenY(pub);\n  const t = tweak(Pointk1.fromBytes(PKPackage.commitments[0]), merkleRoot);\n  const tp = Pointk1.BASE.multiply(t);\n  const commitments = PKPackage.commitments.map((c, i) =>\n    (i === 0 ? Pointk1.fromBytes(c).add(tp) : Pointk1.fromBytes(c)).toBytes()\n  );\n  const verifyingShares: Record<string, Uint8Array> = {};\n  for (const k in PKPackage.verifyingShares) {\n    verifyingShares[k] = Pointk1.fromBytes(PKPackage.verifyingShares[k]).add(tp).toBytes();\n  }\n  return {\n    signers: { min: PKPackage.signers.min, max: PKPackage.signers.max },\n    commitments,\n    verifyingShares,\n  } as TRet<FrostPublic>;\n}\n\n/**\n * FROST threshold signatures over secp256k1-schnorr-taproot. RFC 9591.\n * DKG outputs are auto-tweaked with the empty Taproot merkle root for compatibility, while\n * `trustedDealer()` outputs stay untweaked unless callers apply the Taproot tweak themselves.\n * @example\n * Create one trusted-dealer package for Taproot-compatible FROST signing.\n *\n * ```ts\n * const alice = schnorr_FROST.Identifier.derive('alice@example.com');\n * const bob = schnorr_FROST.Identifier.derive('bob@example.com');\n * const carol = schnorr_FROST.Identifier.derive('carol@example.com');\n * const deal = schnorr_FROST.trustedDealer({ min: 2, max: 3 }, [alice, bob, carol]);\n * ```\n */\nexport const schnorr_FROST: TRet<FROST> = /* @__PURE__ */ (() =>\n  createFROST({\n    name: 'FROST-secp256k1-SHA256-TR-v1',\n    Point: Pointk1,\n    hashToScalar: secp256k1_hasher.hashToScalar,\n    hash: sha256,\n    // Taproot related hacks\n    parsePublicKey(publicKey) {\n      // External Taproot keys are x-only, but local key packages still use compressed points.\n      if (publicKey.length === 32) return lift_x(bytesToNumberBE(publicKey));\n      if (publicKey.length === 33) return Pointk1.fromBytes(publicKey);\n      throw new Error(`expected x-only or compressed public key, got length=${publicKey.length}`);\n    },\n    adjustScalar(n: bigint) {\n      const PK = Pointk1.BASE.multiply(n);\n      return hasEven(PK.y) ? n : Pointk1.Fn.neg(n);\n    },\n    adjustPoint: (p) => (hasEven(p.y) ? p : p.negate()),\n    challenge(R, PK, msg) {\n      return challenge(pointToBytes(R), pointToBytes(PK), msg);\n    },\n    adjustNonces: frostNoncesToEvenY,\n    adjustGroupCommitmentShare: (GC, GCShare) => (!hasEven(GC.y) ? GCShare.negate() : GCShare),\n    adjustPublic: frostPubToEvenY,\n    adjustSecret: frostSecretToEvenY,\n    adjustTx: {\n      // Compat with official implementation\n      encode: (tx) => tx.subarray(1) as TRet<Uint8Array>,\n      decode: (tx) => concatBytes(Uint8Array.of(0x02), tx) as TRet<Uint8Array>,\n    },\n    adjustDKG: (k) => {\n      // Compatibility with frost-secp256k1-tr: DKG output is auto-tweaked with the\n      // empty Taproot merkle root, while dealer-generated keys stay untweaked.\n      const merkleRoot = new Uint8Array(0);\n      return {\n        public: frostTweakPublic(k.public, merkleRoot),\n        secret: frostTweakSecret(k.secret, k.public, merkleRoot),\n      };\n    },\n  }))();\n", null, null, "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.globalConfig = exports.$ZodEncodeError = exports.$ZodAsyncError = exports.$brand = exports.NEVER = void 0;\nexports.$constructor = $constructor;\nexports.config = config;\n/** A special constant with type `never` */\nexports.NEVER = Object.freeze({\n    status: \"aborted\",\n});\nfunction $constructor(name, initializer, params) {\n    function init(inst, def) {\n        if (!inst._zod) {\n            Object.defineProperty(inst, \"_zod\", {\n                value: {\n                    def,\n                    constr: _,\n                    traits: new Set(),\n                },\n                enumerable: false,\n            });\n        }\n        if (inst._zod.traits.has(name)) {\n            return;\n        }\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        const proto = _.prototype;\n        const keys = Object.keys(proto);\n        for (let i = 0; i < keys.length; i++) {\n            const k = keys[i];\n            if (!(k in inst)) {\n                inst[k] = proto[k].bind(inst);\n            }\n        }\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexports.$brand = Symbol(\"zod_brand\");\nclass $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexports.$ZodAsyncError = $ZodAsyncError;\nclass $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\nexports.$ZodEncodeError = $ZodEncodeError;\nexports.globalConfig = {};\nfunction config(newConfig) {\n    if (newConfig)\n        Object.assign(exports.globalConfig, newConfig);\n    return exports.globalConfig;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Class = exports.BIGINT_FORMAT_RANGES = exports.NUMBER_FORMAT_RANGES = exports.primitiveTypes = exports.propertyKeyTypes = exports.getParsedType = exports.allowsEval = exports.captureStackTrace = void 0;\nexports.assertEqual = assertEqual;\nexports.assertNotEqual = assertNotEqual;\nexports.assertIs = assertIs;\nexports.assertNever = assertNever;\nexports.assert = assert;\nexports.getEnumValues = getEnumValues;\nexports.joinValues = joinValues;\nexports.jsonStringifyReplacer = jsonStringifyReplacer;\nexports.cached = cached;\nexports.nullish = nullish;\nexports.cleanRegex = cleanRegex;\nexports.floatSafeRemainder = floatSafeRemainder;\nexports.defineLazy = defineLazy;\nexports.objectClone = objectClone;\nexports.assignProp = assignProp;\nexports.mergeDefs = mergeDefs;\nexports.cloneDef = cloneDef;\nexports.getElementAtPath = getElementAtPath;\nexports.promiseAllObject = promiseAllObject;\nexports.randomString = randomString;\nexports.esc = esc;\nexports.slugify = slugify;\nexports.isObject = isObject;\nexports.isPlainObject = isPlainObject;\nexports.shallowClone = shallowClone;\nexports.numKeys = numKeys;\nexports.escapeRegex = escapeRegex;\nexports.clone = clone;\nexports.normalizeParams = normalizeParams;\nexports.createTransparentProxy = createTransparentProxy;\nexports.stringifyPrimitive = stringifyPrimitive;\nexports.optionalKeys = optionalKeys;\nexports.pick = pick;\nexports.omit = omit;\nexports.extend = extend;\nexports.safeExtend = safeExtend;\nexports.merge = merge;\nexports.partial = partial;\nexports.required = required;\nexports.aborted = aborted;\nexports.prefixIssues = prefixIssues;\nexports.unwrapMessage = unwrapMessage;\nexports.finalizeIssue = finalizeIssue;\nexports.getSizableOrigin = getSizableOrigin;\nexports.getLengthableOrigin = getLengthableOrigin;\nexports.parsedType = parsedType;\nexports.issue = issue;\nexports.cleanEnum = cleanEnum;\nexports.base64ToUint8Array = base64ToUint8Array;\nexports.uint8ArrayToBase64 = uint8ArrayToBase64;\nexports.base64urlToUint8Array = base64urlToUint8Array;\nexports.uint8ArrayToBase64url = uint8ArrayToBase64url;\nexports.hexToUint8Array = hexToUint8Array;\nexports.uint8ArrayToHex = uint8ArrayToHex;\n// functions\nfunction assertEqual(val) {\n    return val;\n}\nfunction assertNotEqual(val) {\n    return val;\n}\nfunction assertIs(_arg) { }\nfunction assertNever(_x) {\n    throw new Error(\"Unexpected value in exhaustive check\");\n}\nfunction assert(_) { }\nfunction getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nfunction joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nfunction jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nfunction cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nfunction nullish(input) {\n    return input === null || input === undefined;\n}\nfunction cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepString = step.toString();\n    let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n    if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n        const match = stepString.match(/\\d?e-(\\d?)/);\n        if (match?.[1]) {\n            stepDecCount = Number.parseInt(match[1]);\n        }\n    }\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nfunction defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nfunction objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nfunction assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nfunction mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nfunction cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nfunction getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nfunction promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nfunction randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nfunction esc(str) {\n    return JSON.stringify(str);\n}\nfunction slugify(input) {\n    return input\n        .toLowerCase()\n        .trim()\n        .replace(/[^\\w\\s-]/g, \"\")\n        .replace(/[\\s_-]+/g, \"-\")\n        .replace(/^-+|-+$/g, \"\");\n}\nexports.captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nfunction isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexports.allowsEval = cached(() => {\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nfunction isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    if (typeof ctor !== \"function\")\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nfunction shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    return o;\n}\nfunction numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nconst getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexports.getParsedType = getParsedType;\nexports.propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexports.primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nfunction escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nfunction clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nfunction normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nfunction createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nfunction stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nfunction optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexports.NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexports.BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nfunction pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = {};\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                newShape[key] = currDef.shape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nfunction omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = { ...schema._zod.def.shape };\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                delete newShape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nfunction extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        // Only throw if new shape overlaps with existing shape\n        // Use getOwnPropertyDescriptor to check key existence without accessing values\n        const existingShape = schema._zod.def.shape;\n        for (const key in shape) {\n            if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n                throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n            }\n        }\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n    });\n    return clone(schema, def);\n}\nfunction safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n    });\n    return clone(schema, def);\n}\nfunction merge(a, b) {\n    const def = mergeDefs(a._zod.def, {\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: [], // delete existing checks\n    });\n    return clone(a, def);\n}\nfunction partial(Class, schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in oldShape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nfunction required(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in shape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n    });\n    return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nfunction aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nfunction unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nfunction finalizeIssue(iss, ctx, config) {\n    const full = { ...iss, path: iss.path ?? [] };\n    // for backwards compatibility\n    if (!iss.message) {\n        const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\";\n        full.message = message;\n    }\n    // delete (full as any).def;\n    delete full.inst;\n    delete full.continue;\n    if (!ctx?.reportInput) {\n        delete full.input;\n    }\n    return full;\n}\nfunction getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nfunction getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nfunction parsedType(data) {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        }\n        case \"object\": {\n            if (data === null) {\n                return \"null\";\n            }\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            const obj = data;\n            if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n                return obj.constructor.name;\n            }\n        }\n    }\n    return t;\n}\nfunction issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nfunction cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nfunction base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nfunction uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nfunction base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nfunction uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nfunction hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nfunction uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nclass Class {\n    constructor(..._args) { }\n}\nexports.Class = Class;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$ZodRealError = exports.$ZodError = void 0;\nexports.flattenError = flattenError;\nexports.formatError = formatError;\nexports.treeifyError = treeifyError;\nexports.toDotPath = toDotPath;\nexports.prettifyError = prettifyError;\nconst core_js_1 = require(\"./core.cjs\");\nconst util = __importStar(require(\"./util.cjs\"));\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexports.$ZodError = (0, core_js_1.$constructor)(\"$ZodError\", initializer);\nexports.$ZodRealError = (0, core_js_1.$constructor)(\"$ZodError\", initializer, { Parent: Error });\nfunction flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nfunction formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.path.length === 0) {\n                fieldErrors._errors.push(mapper(issue));\n            }\n            else {\n                let curr = fieldErrors;\n                let i = 0;\n                while (i < issue.path.length) {\n                    const el = issue.path[i];\n                    const terminal = i === issue.path.length - 1;\n                    if (!terminal) {\n                        curr[el] = curr[el] || { _errors: [] };\n                    }\n                    else {\n                        curr[el] = curr[el] || { _errors: [] };\n                        curr[el]._errors.push(mapper(issue));\n                    }\n                    curr = curr[el];\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nfunction treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, issue.path));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   \u2716 Expected number, received string at \"username\n * favoriteNumbers[0]\n *   \u2716 Invalid input: expected number\n * ```\n */\nfunction toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nfunction prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`\u2716 ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  \u2192 at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.safeDecodeAsync = exports._safeDecodeAsync = exports.safeEncodeAsync = exports._safeEncodeAsync = exports.safeDecode = exports._safeDecode = exports.safeEncode = exports._safeEncode = exports.decodeAsync = exports._decodeAsync = exports.encodeAsync = exports._encodeAsync = exports.decode = exports._decode = exports.encode = exports._encode = exports.safeParseAsync = exports._safeParseAsync = exports.safeParse = exports._safeParse = exports.parseAsync = exports._parseAsync = exports.parse = exports._parse = void 0;\nconst core = __importStar(require(\"./core.cjs\"));\nconst errors = __importStar(require(\"./errors.cjs\"));\nconst util = __importStar(require(\"./util.cjs\"));\nconst _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexports._parse = _parse;\nexports.parse = (0, exports._parse)(errors.$ZodRealError);\nconst _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexports._parseAsync = _parseAsync;\nexports.parseAsync = (0, exports._parseAsync)(errors.$ZodRealError);\nconst _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexports._safeParse = _safeParse;\nexports.safeParse = (0, exports._safeParse)(errors.$ZodRealError);\nconst _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexports._safeParseAsync = _safeParseAsync;\nexports.safeParseAsync = (0, exports._safeParseAsync)(errors.$ZodRealError);\nconst _encode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return (0, exports._parse)(_Err)(schema, value, ctx);\n};\nexports._encode = _encode;\nexports.encode = (0, exports._encode)(errors.$ZodRealError);\nconst _decode = (_Err) => (schema, value, _ctx) => {\n    return (0, exports._parse)(_Err)(schema, value, _ctx);\n};\nexports._decode = _decode;\nexports.decode = (0, exports._decode)(errors.$ZodRealError);\nconst _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return (0, exports._parseAsync)(_Err)(schema, value, ctx);\n};\nexports._encodeAsync = _encodeAsync;\nexports.encodeAsync = (0, exports._encodeAsync)(errors.$ZodRealError);\nconst _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return (0, exports._parseAsync)(_Err)(schema, value, _ctx);\n};\nexports._decodeAsync = _decodeAsync;\nexports.decodeAsync = (0, exports._decodeAsync)(errors.$ZodRealError);\nconst _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return (0, exports._safeParse)(_Err)(schema, value, ctx);\n};\nexports._safeEncode = _safeEncode;\nexports.safeEncode = (0, exports._safeEncode)(errors.$ZodRealError);\nconst _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return (0, exports._safeParse)(_Err)(schema, value, _ctx);\n};\nexports._safeDecode = _safeDecode;\nexports.safeDecode = (0, exports._safeDecode)(errors.$ZodRealError);\nconst _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return (0, exports._safeParseAsync)(_Err)(schema, value, ctx);\n};\nexports._safeEncodeAsync = _safeEncodeAsync;\nexports.safeEncodeAsync = (0, exports._safeEncodeAsync)(errors.$ZodRealError);\nconst _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return (0, exports._safeParseAsync)(_Err)(schema, value, _ctx);\n};\nexports._safeDecodeAsync = _safeDecodeAsync;\nexports.safeDecodeAsync = (0, exports._safeDecodeAsync)(errors.$ZodRealError);\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha384_hex = exports.sha256_base64url = exports.sha256_base64 = exports.sha256_hex = exports.sha1_base64url = exports.sha1_base64 = exports.sha1_hex = exports.md5_base64url = exports.md5_base64 = exports.md5_hex = exports.hex = exports.uppercase = exports.lowercase = exports.undefined = exports.null = exports.boolean = exports.number = exports.integer = exports.bigint = exports.string = exports.date = exports.e164 = exports.domain = exports.hostname = exports.base64url = exports.base64 = exports.cidrv6 = exports.cidrv4 = exports.mac = exports.ipv6 = exports.ipv4 = exports.browserEmail = exports.idnEmail = exports.unicodeEmail = exports.rfc5322Email = exports.html5Email = exports.email = exports.uuid7 = exports.uuid6 = exports.uuid4 = exports.uuid = exports.guid = exports.extendedDuration = exports.duration = exports.nanoid = exports.ksuid = exports.xid = exports.ulid = exports.cuid2 = exports.cuid = void 0;\nexports.sha512_base64url = exports.sha512_base64 = exports.sha512_hex = exports.sha384_base64url = exports.sha384_base64 = void 0;\nexports.emoji = emoji;\nexports.time = time;\nexports.datetime = datetime;\nconst util = __importStar(require(\"./util.cjs\"));\nexports.cuid = /^[cC][^\\s-]{8,}$/;\nexports.cuid2 = /^[0-9a-z]+$/;\nexports.ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexports.xid = /^[0-9a-vA-V]{20}$/;\nexports.ksuid = /^[A-Za-z0-9]{27}$/;\nexports.nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexports.duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexports.extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexports.guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nconst uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexports.uuid = uuid;\nexports.uuid4 = (0, exports.uuid)(4);\nexports.uuid6 = (0, exports.uuid)(6);\nexports.uuid7 = (0, exports.uuid)(7);\n/** Practical email validation */\nexports.email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexports.html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexports.rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexports.unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexports.idnEmail = exports.unicodeEmail;\nexports.browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nfunction emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexports.ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexports.ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nconst mac = (delimiter) => {\n    const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n    return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexports.mac = mac;\nexports.cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexports.cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexports.base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexports.base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexports.hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexports.domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexports.e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexports.date = new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nfunction time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nconst string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexports.string = string;\nexports.bigint = /^-?\\d+n?$/;\nexports.integer = /^-?\\d+$/;\nexports.number = /^-?\\d+(?:\\.\\d+)?$/;\nexports.boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexports.null = _null;\nconst _undefined = /^undefined$/i;\nexports.undefined = _undefined;\n// regex for string with no uppercase letters\nexports.lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexports.uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexports.hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexports.md5_hex = /^[0-9a-fA-F]{32}$/;\nexports.md5_base64 = fixedBase64(22, \"==\");\nexports.md5_base64url = fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexports.sha1_hex = /^[0-9a-fA-F]{40}$/;\nexports.sha1_base64 = fixedBase64(27, \"=\");\nexports.sha1_base64url = fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexports.sha256_hex = /^[0-9a-fA-F]{64}$/;\nexports.sha256_base64 = fixedBase64(43, \"=\");\nexports.sha256_base64url = fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexports.sha384_hex = /^[0-9a-fA-F]{96}$/;\nexports.sha384_base64 = fixedBase64(64, \"\");\nexports.sha384_base64url = fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexports.sha512_hex = /^[0-9a-fA-F]{128}$/;\nexports.sha512_base64 = fixedBase64(86, \"==\");\nexports.sha512_base64url = fixedBase64url(86);\n", "\"use strict\";\n// import { $ZodType } from \"./schemas.js\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$ZodCheckOverwrite = exports.$ZodCheckMimeType = exports.$ZodCheckProperty = exports.$ZodCheckEndsWith = exports.$ZodCheckStartsWith = exports.$ZodCheckIncludes = exports.$ZodCheckUpperCase = exports.$ZodCheckLowerCase = exports.$ZodCheckRegex = exports.$ZodCheckStringFormat = exports.$ZodCheckLengthEquals = exports.$ZodCheckMinLength = exports.$ZodCheckMaxLength = exports.$ZodCheckSizeEquals = exports.$ZodCheckMinSize = exports.$ZodCheckMaxSize = exports.$ZodCheckBigIntFormat = exports.$ZodCheckNumberFormat = exports.$ZodCheckMultipleOf = exports.$ZodCheckGreaterThan = exports.$ZodCheckLessThan = exports.$ZodCheck = void 0;\nconst core = __importStar(require(\"./core.cjs\"));\nconst regexes = __importStar(require(\"./regexes.cjs\"));\nconst util = __importStar(require(\"./util.cjs\"));\nexports.$ZodCheck = core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexports.$ZodCheckLessThan = core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    exports.$ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckGreaterThan = core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    exports.$ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    exports.$ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckNumberFormat = core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    exports.$ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexports.$ZodCheckBigIntFormat = core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    exports.$ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexports.$ZodCheckMaxSize = core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    exports.$ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckMinSize = core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    exports.$ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckSizeEquals = core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    exports.$ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckMaxLength = core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    exports.$ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckMinLength = core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    exports.$ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckLengthEquals = core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    exports.$ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckStringFormat = core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    exports.$ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexports.$ZodCheckRegex = core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    exports.$ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckLowerCase = core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    exports.$ZodCheckStringFormat.init(inst, def);\n});\nexports.$ZodCheckUpperCase = core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    exports.$ZodCheckStringFormat.init(inst, def);\n});\nexports.$ZodCheckIncludes = core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    exports.$ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckStartsWith = core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    exports.$ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckEndsWith = core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    exports.$ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexports.$ZodCheckProperty = core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    exports.$ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexports.$ZodCheckMimeType = core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    exports.$ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCheckOverwrite = core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    exports.$ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Doc = void 0;\nclass Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\nexports.Doc = Doc;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = void 0;\nexports.version = {\n    major: 4,\n    minor: 3,\n    patch: 6,\n};\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$ZodTuple = exports.$ZodIntersection = exports.$ZodDiscriminatedUnion = exports.$ZodXor = exports.$ZodUnion = exports.$ZodObjectJIT = exports.$ZodObject = exports.$ZodArray = exports.$ZodDate = exports.$ZodVoid = exports.$ZodNever = exports.$ZodUnknown = exports.$ZodAny = exports.$ZodNull = exports.$ZodUndefined = exports.$ZodSymbol = exports.$ZodBigIntFormat = exports.$ZodBigInt = exports.$ZodBoolean = exports.$ZodNumberFormat = exports.$ZodNumber = exports.$ZodCustomStringFormat = exports.$ZodJWT = exports.$ZodE164 = exports.$ZodBase64URL = exports.$ZodBase64 = exports.$ZodCIDRv6 = exports.$ZodCIDRv4 = exports.$ZodMAC = exports.$ZodIPv6 = exports.$ZodIPv4 = exports.$ZodISODuration = exports.$ZodISOTime = exports.$ZodISODate = exports.$ZodISODateTime = exports.$ZodKSUID = exports.$ZodXID = exports.$ZodULID = exports.$ZodCUID2 = exports.$ZodCUID = exports.$ZodNanoID = exports.$ZodEmoji = exports.$ZodURL = exports.$ZodEmail = exports.$ZodUUID = exports.$ZodGUID = exports.$ZodStringFormat = exports.$ZodString = exports.clone = exports.$ZodType = void 0;\nexports.$ZodCustom = exports.$ZodLazy = exports.$ZodPromise = exports.$ZodFunction = exports.$ZodTemplateLiteral = exports.$ZodReadonly = exports.$ZodCodec = exports.$ZodPipe = exports.$ZodNaN = exports.$ZodCatch = exports.$ZodSuccess = exports.$ZodNonOptional = exports.$ZodPrefault = exports.$ZodDefault = exports.$ZodNullable = exports.$ZodExactOptional = exports.$ZodOptional = exports.$ZodTransform = exports.$ZodFile = exports.$ZodLiteral = exports.$ZodEnum = exports.$ZodSet = exports.$ZodMap = exports.$ZodRecord = void 0;\nexports.isValidBase64 = isValidBase64;\nexports.isValidBase64URL = isValidBase64URL;\nexports.isValidJWT = isValidJWT;\nconst checks = __importStar(require(\"./checks.cjs\"));\nconst core = __importStar(require(\"./core.cjs\"));\nconst doc_js_1 = require(\"./doc.cjs\");\nconst parse_js_1 = require(\"./parse.cjs\");\nconst regexes = __importStar(require(\"./regexes.cjs\"));\nconst util = __importStar(require(\"./util.cjs\"));\nconst versions_js_1 = require(\"./versions.cjs\");\nexports.$ZodType = core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = versions_js_1.version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary\n                // initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    // Lazy initialize ~standard to avoid creating objects for every schema\n    util.defineLazy(inst, \"~standard\", () => ({\n        validate: (value) => {\n            try {\n                const r = (0, parse_js_1.safeParse)(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return (0, parse_js_1.safeParseAsync)(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    }));\n});\nvar util_js_1 = require(\"./util.cjs\");\nObject.defineProperty(exports, \"clone\", { enumerable: true, get: function () { return util_js_1.clone; } });\nexports.$ZodString = core.$constructor(\"$ZodString\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexports.$ZodStringFormat = core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    exports.$ZodString.init(inst, def);\n});\nexports.$ZodGUID = core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodUUID = core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodEmail = core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodURL = core.$constructor(\"$ZodURL\", (inst, def) => {\n    exports.$ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            // @ts-ignore\n            const url = new URL(trimmed);\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: def.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // Set the output value based on normalize flag\n            if (def.normalize) {\n                // Use normalized URL\n                payload.value = url.href;\n            }\n            else {\n                // Preserve the original input (trimmed)\n                payload.value = trimmed;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexports.$ZodEmoji = core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodNanoID = core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodCUID = core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodCUID2 = core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodULID = core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodXID = core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodKSUID = core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodISODateTime = core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodISODate = core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodISOTime = core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodISODuration = core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodIPv4 = core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    exports.$ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `ipv4`;\n});\nexports.$ZodIPv6 = core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    exports.$ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `ipv6`;\n    inst._zod.check = (payload) => {\n        try {\n            // @ts-ignore\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexports.$ZodMAC = core.$constructor(\"$ZodMAC\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n    exports.$ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `mac`;\n});\nexports.$ZodCIDRv4 = core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    exports.$ZodStringFormat.init(inst, def);\n});\nexports.$ZodCIDRv6 = core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    exports.$ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const parts = payload.value.split(\"/\");\n        try {\n            if (parts.length !== 2)\n                throw new Error();\n            const [address, prefix] = parts;\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            // @ts-ignore\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nfunction isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexports.$ZodBase64 = core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    exports.$ZodStringFormat.init(inst, def);\n    inst._zod.bag.contentEncoding = \"base64\";\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nfunction isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexports.$ZodBase64URL = core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    exports.$ZodStringFormat.init(inst, def);\n    inst._zod.bag.contentEncoding = \"base64url\";\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodE164 = core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    exports.$ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nfunction isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexports.$ZodJWT = core.$constructor(\"$ZodJWT\", (inst, def) => {\n    exports.$ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodCustomStringFormat = core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    exports.$ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexports.$ZodNumber = core.$constructor(\"$ZodNumber\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexports.$ZodNumberFormat = core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    exports.$ZodNumber.init(inst, def); // no format checks\n});\nexports.$ZodBoolean = core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexports.$ZodBigInt = core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexports.$ZodBigIntFormat = core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    exports.$ZodBigInt.init(inst, def); // no format checks\n});\nexports.$ZodSymbol = core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexports.$ZodUndefined = core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexports.$ZodNull = core.$constructor(\"$ZodNull\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexports.$ZodAny = core.$constructor(\"$ZodAny\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexports.$ZodUnknown = core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexports.$ZodNever = core.$constructor(\"$ZodNever\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexports.$ZodVoid = core.$constructor(\"$ZodVoid\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexports.$ZodDate = core.$constructor(\"$ZodDate\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexports.$ZodArray = core.$constructor(\"$ZodArray\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n    if (result.issues.length) {\n        // For optional-out schemas, ignore errors on absent keys\n        if (isOptionalOut && !(key in input)) {\n            return;\n        }\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (result.value === undefined) {\n        if (key in input) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    for (const k of keys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        keys,\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n    const unrecognized = [];\n    // iterate over input keys\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    const isOptionalOut = _catchall.optout === \"optional\";\n    for (const key in input) {\n        if (keySet.has(key))\n            continue;\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input, isOptionalOut);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexports.$ZodObject = core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    exports.$ZodType.init(inst, def);\n    // const sh = def.shape;\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    if (!desc?.get) {\n        const sh = def.shape;\n        Object.defineProperty(def, \"shape\", {\n            get: () => {\n                const newSh = { ...sh };\n                Object.defineProperty(def, \"shape\", {\n                    value: newSh,\n                });\n                return newSh;\n            },\n        });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = {};\n        const proms = [];\n        const shape = value.shape;\n        for (const key of value.keys) {\n            const el = shape[key];\n            const isOptionalOut = el._zod.optout === \"optional\";\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input, isOptionalOut);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n    };\n});\nexports.$ZodObjectJIT = core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    exports.$ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const generateFastpass = (shape) => {\n        const doc = new doc_js_1.Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {};`);\n        for (const key of normalized.keys) {\n            const id = ids[key];\n            const k = util.esc(key);\n            const schema = shape[key];\n            const isOptionalOut = schema?._zod?.optout === \"optional\";\n            doc.write(`const ${id} = ${parseStr(key)};`);\n            if (isOptionalOut) {\n                // For optional-out schemas, ignore errors on absent keys\n                doc.write(`\n        if (${id}.issues.length) {\n          if (${k} in input) {\n            payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n              ...iss,\n              path: iss.path ? [${k}, ...iss.path] : [${k}]\n            })));\n          }\n        }\n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n            }\n            else {\n                doc.write(`\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexports.$ZodUnion = core.$constructor(\"$ZodUnion\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const single = def.options.length === 1;\n    const first = def.options[0]._zod.run;\n    inst._zod.parse = (payload, ctx) => {\n        if (single) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n    const successes = results.filter((r) => r.issues.length === 0);\n    if (successes.length === 1) {\n        final.value = successes[0].value;\n        return final;\n    }\n    if (successes.length === 0) {\n        // No matches - same as regular union\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        });\n    }\n    else {\n        // Multiple matches - exclusive union failure\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: [],\n            inclusive: false,\n        });\n    }\n    return final;\n}\nexports.$ZodXor = core.$constructor(\"$ZodXor\", (inst, def) => {\n    exports.$ZodUnion.init(inst, def);\n    def.inclusive = false;\n    const single = def.options.length === 1;\n    const first = def.options[0]._zod.run;\n    inst._zod.parse = (payload, ctx) => {\n        if (single) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexports.$ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    def.inclusive = false;\n    exports.$ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues?.[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        if (def.unionFallback) {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexports.$ZodIntersection = core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    // Track which side(s) report each key as unrecognized\n    const unrecKeys = new Map();\n    let unrecIssue;\n    for (const iss of left.issues) {\n        if (iss.code === \"unrecognized_keys\") {\n            unrecIssue ?? (unrecIssue = iss);\n            for (const k of iss.keys) {\n                if (!unrecKeys.has(k))\n                    unrecKeys.set(k, {});\n                unrecKeys.get(k).l = true;\n            }\n        }\n        else {\n            result.issues.push(iss);\n        }\n    }\n    for (const iss of right.issues) {\n        if (iss.code === \"unrecognized_keys\") {\n            for (const k of iss.keys) {\n                if (!unrecKeys.has(k))\n                    unrecKeys.set(k, {});\n                unrecKeys.get(k).r = true;\n            }\n        }\n        else {\n            result.issues.push(iss);\n        }\n    }\n    // Report only keys unrecognized by BOTH sides\n    const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n    if (bothKeys.length && unrecIssue) {\n        result.issues.push({ ...unrecIssue, keys: bothKeys });\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexports.$ZodTuple = core.$constructor(\"$ZodTuple\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    const items = def.items;\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n        const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n        if (!def.rest) {\n            const tooBig = input.length > items.length;\n            const tooSmall = input.length < optStart - 1;\n            if (tooBig || tooSmall) {\n                payload.issues.push({\n                    ...(tooBig\n                        ? { code: \"too_big\", maximum: items.length, inclusive: true }\n                        : { code: \"too_small\", minimum: items.length }),\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n        }\n        let i = -1;\n        for (const item of items) {\n            i++;\n            if (i >= input.length)\n                if (i >= optStart)\n                    continue;\n            const result = item._zod.run({\n                value: input[i],\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n            }\n            else {\n                handleTupleResult(result, payload, i);\n            }\n        }\n        if (def.rest) {\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({\n                    value: el,\n                    issues: [],\n                }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexports.$ZodRecord = core.$constructor(\"$ZodRecord\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        const values = def.keyType._zod.values;\n        if (values) {\n            payload.value = {};\n            const recordKeys = new Set();\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[key] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[key] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!recordKeys.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n                // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n                const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n                if (checkNumericKey) {\n                    const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n                    if (retryResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (retryResult.issues.length === 0) {\n                        keyResult = retryResult;\n                    }\n                }\n                if (keyResult.issues.length) {\n                    if (def.mode === \"loose\") {\n                        // Pass through unchanged\n                        payload.value[key] = input[key];\n                    }\n                    else {\n                        // Default \"strict\" behavior: error on invalid key\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                    }\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexports.$ZodMap = core.$constructor(\"$ZodMap\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexports.$ZodSet = core.$constructor(\"$ZodSet\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexports.$ZodEnum = core.$constructor(\"$ZodEnum\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexports.$ZodLiteral = core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    if (def.values.length === 0) {\n        throw new Error(\"Cannot create literal schema with no valid values\");\n    }\n    const values = new Set(def.values);\n    inst._zod.values = values;\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexports.$ZodFile = core.$constructor(\"$ZodFile\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexports.$ZodTransform = core.$constructor(\"$ZodTransform\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nfunction handleOptionalResult(result, input) {\n    if (result.issues.length && input === undefined) {\n        return { issues: [], value: undefined };\n    }\n    return result;\n}\nexports.$ZodOptional = core.$constructor(\"$ZodOptional\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            const result = def.innerType._zod.run(payload, ctx);\n            if (result instanceof Promise)\n                return result.then((r) => handleOptionalResult(r, payload.value));\n            return handleOptionalResult(result, payload.value);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexports.$ZodExactOptional = core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n    // Call parent init - inherits optin/optout = \"optional\"\n    exports.$ZodOptional.init(inst, def);\n    // Override values/pattern to NOT add undefined\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n    // Override parse to just delegate (no undefined handling)\n    inst._zod.parse = (payload, ctx) => {\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexports.$ZodNullable = core.$constructor(\"$ZodNullable\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexports.$ZodDefault = core.$constructor(\"$ZodDefault\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexports.$ZodPrefault = core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexports.$ZodNonOptional = core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexports.$ZodSuccess = core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexports.$ZodCatch = core.$constructor(\"$ZodCatch\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n        }\n        return payload;\n    };\n});\nexports.$ZodNaN = core.$constructor(\"$ZodNaN\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexports.$ZodPipe = core.$constructor(\"$ZodPipe\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    if (left.issues.length) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexports.$ZodCodec = core.$constructor(\"$ZodCodec\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexports.$ZodReadonly = core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexports.$ZodTemplateLiteral = core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"string\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexports.$ZodFunction = core.$constructor(\"$ZodFunction\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._def = def;\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        return function (...args) {\n            const parsedArgs = inst._def.input ? (0, parse_js_1.parse)(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return (0, parse_js_1.parse)(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return async function (...args) {\n            const parsedArgs = inst._def.input ? await (0, parse_js_1.parseAsync)(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await (0, parse_js_1.parseAsync)(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new exports.$ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexports.$ZodPromise = core.$constructor(\"$ZodPromise\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexports.$ZodLazy = core.$constructor(\"$ZodLazy\", (inst, def) => {\n    exports.$ZodType.init(inst, def);\n    // let _innerType!: any;\n    // util.defineLazy(def, \"getter\", () => {\n    //   if (!_innerType) {\n    //     _innerType = def.getter();\n    //   }\n    //   return () => _innerType;\n    // });\n    util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexports.$ZodCustom = core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    exports.$ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u062D\u0631\u0641\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n        file: { unit: \"\u0628\u0627\u064A\u062A\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n        array: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n        set: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0645\u062F\u062E\u0644\",\n        email: \"\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A\",\n        url: \"\u0631\u0627\u0628\u0637\",\n        emoji: \"\u0625\u064A\u0645\u0648\u062C\u064A\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        date: \"\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        time: \"\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        duration: \"\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        ipv4: \"\u0639\u0646\u0648\u0627\u0646 IPv4\",\n        ipv6: \"\u0639\u0646\u0648\u0627\u0646 IPv6\",\n        cidrv4: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4\",\n        cidrv6: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6\",\n        base64: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded\",\n        base64url: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded\",\n        json_string: \"\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON\",\n        e164: \"\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0645\u062F\u062E\u0644\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 instanceof ${issue.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;\n                }\n                return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"}`;\n                return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 \"${issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`;\n            }\n            case \"not_multiple_of\":\n                return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u0645\u0639\u0631\u0641${issue.keys.length > 1 ? \"\u0627\u062A\" : \"\"} \u063A\u0631\u064A\u0628${issue.keys.length > 1 ? \"\u0629\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n            case \"invalid_key\":\n                return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n            case \"invalid_element\":\n                return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n            default:\n                return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"simvol\", verb: \"olmal\u0131d\u0131r\" },\n        file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n        array: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n        set: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n instanceof ${issue.expected}, daxil olan ${received}`;\n                }\n                return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${expected}, daxil olan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Yanl\u0131\u015F se\u00E7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Yanl\u0131\u015F m\u0259tn: \"${_issue.prefix}\" il\u0259 ba\u015Flamal\u0131d\u0131r`;\n                if (_issue.format === \"ends_with\")\n                    return `Yanl\u0131\u015F m\u0259tn: \"${_issue.suffix}\" il\u0259 bitm\u0259lidir`;\n                if (_issue.format === \"includes\")\n                    return `Yanl\u0131\u015F m\u0259tn: \"${_issue.includes}\" daxil olmal\u0131d\u0131r`;\n                if (_issue.format === \"regex\")\n                    return `Yanl\u0131\u015F m\u0259tn: ${_issue.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`;\n                return `Yanl\u0131\u015F ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Yanl\u0131\u015F \u0259d\u0259d: ${issue.divisor} il\u0259 b\u00F6l\u00FCn\u0259 bil\u0259n olmal\u0131d\u0131r`;\n            case \"unrecognized_keys\":\n                return `Tan\u0131nmayan a\u00E7ar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} daxilind\u0259 yanl\u0131\u015F a\u00E7ar`;\n            case \"invalid_union\":\n                return \"Yanl\u0131\u015F d\u0259y\u0259r\";\n            case \"invalid_element\":\n                return `${issue.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`;\n            default:\n                return `Yanl\u0131\u015F d\u0259y\u0259r`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nfunction getBelarusianPlural(count, one, few, many) {\n    const absCount = Math.abs(count);\n    const lastDigit = absCount % 10;\n    const lastTwoDigits = absCount % 100;\n    if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n        return many;\n    }\n    if (lastDigit === 1) {\n        return one;\n    }\n    if (lastDigit >= 2 && lastDigit <= 4) {\n        return few;\n    }\n    return many;\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"\u0441\u0456\u043C\u0432\u0430\u043B\",\n                few: \"\u0441\u0456\u043C\u0432\u0430\u043B\u044B\",\n                many: \"\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n        array: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n        set: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n        file: {\n            unit: {\n                one: \"\u0431\u0430\u0439\u0442\",\n                few: \"\u0431\u0430\u0439\u0442\u044B\",\n                many: \"\u0431\u0430\u0439\u0442\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0443\u0432\u043E\u0434\",\n        email: \"email \u0430\u0434\u0440\u0430\u0441\",\n        url: \"URL\",\n        emoji: \"\u044D\u043C\u043E\u0434\u0437\u0456\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441\",\n        date: \"ISO \u0434\u0430\u0442\u0430\",\n        time: \"ISO \u0447\u0430\u0441\",\n        duration: \"ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0430\u0441\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0430\u0441\",\n        cidrv4: \"IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n        cidrv6: \"IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n        base64: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64\",\n        base64url: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url\",\n        json_string: \"JSON \u0440\u0430\u0434\u043E\u043A\",\n        e164: \"\u043D\u0443\u043C\u0430\u0440 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0443\u0432\u043E\u0434\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u043B\u0456\u043A\",\n        array: \"\u043C\u0430\u0441\u0456\u045E\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F instanceof ${issue.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;\n                }\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${issue.keys.length > 1 ? \"\u043A\u043B\u044E\u0447\u044B\" : \"\u043A\u043B\u044E\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434\";\n            case \"invalid_element\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${issue.origin}`;\n            default:\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n        file: { unit: \"\u0431\u0430\u0439\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n        array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n        set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0432\u0445\u043E\u0434\",\n        email: \"\u0438\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441\",\n        url: \"URL\",\n        emoji: \"\u0435\u043C\u043E\u0434\u0436\u0438\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n        date: \"ISO \u0434\u0430\u0442\u0430\",\n        time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n        duration: \"ISO \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n        cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        base64: \"base64-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437\",\n        base64url: \"base64url-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437\",\n        json_string: \"JSON \u043D\u0438\u0437\",\n        e164: \"E.164 \u043D\u043E\u043C\u0435\u0440\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u0445\u043E\u0434\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0447\u0438\u0441\u043B\u043E\",\n        array: \"\u043C\u0430\u0441\u0438\u0432\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;\n                }\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043E\u043F\u0446\u0438\u044F: \u043E\u0447\u0430\u043A\u0432\u0430\u043D\u043E \u0435\u0434\u043D\u043E \u043E\u0442 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin ?? \"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\"}`;\n                return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin ?? \"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u0432\u0430 \u0441 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u0432\u044A\u0440\u0448\u0432\u0430 \u0441 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0432\u0430 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0441\u044A\u0432\u043F\u0430\u0434\u0430 \u0441 ${_issue.pattern}`;\n                let invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D\";\n                if (_issue.format === \"emoji\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n                if (_issue.format === \"datetime\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n                if (_issue.format === \"date\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430\";\n                if (_issue.format === \"time\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n                if (_issue.format === \"duration\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430\";\n                return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0447\u0438\u0441\u043B\u043E: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043A\u0440\u0430\u0442\u043D\u043E \u043D\u0430 ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${issue.keys.length > 1 ? \"\u0438\" : \"\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u043E\u0432\u0435\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434\";\n            case \"invalid_element\":\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u0432 ${issue.origin}`;\n            default:\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"car\u00E0cters\", verb: \"contenir\" },\n        file: { unit: \"bytes\", verb: \"contenir\" },\n        array: { unit: \"elements\", verb: \"contenir\" },\n        set: { unit: \"elements\", verb: \"contenir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrada\",\n        email: \"adre\u00E7a electr\u00F2nica\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data i hora ISO\",\n        date: \"data ISO\",\n        time: \"hora ISO\",\n        duration: \"durada ISO\",\n        ipv4: \"adre\u00E7a IPv4\",\n        ipv6: \"adre\u00E7a IPv6\",\n        cidrv4: \"rang IPv4\",\n        cidrv6: \"rang IPv6\",\n        base64: \"cadena codificada en base64\",\n        base64url: \"cadena codificada en base64url\",\n        json_string: \"cadena JSON\",\n        e164: \"n\u00FAmero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Tipus inv\u00E0lid: s'esperava instanceof ${issue.expected}, s'ha rebut ${received}`;\n                }\n                return `Tipus inv\u00E0lid: s'esperava ${expected}, s'ha rebut ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Valor inv\u00E0lid: s'esperava ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opci\u00F3 inv\u00E0lida: s'esperava una de ${util.joinValues(issue.values, \" o \")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"com a m\u00E0xim\" : \"menys de\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} contingu\u00E9s ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} fos ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"com a m\u00EDnim\" : \"m\u00E9s de\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Massa petit: s'esperava que ${issue.origin} contingu\u00E9s ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Massa petit: s'esperava que ${issue.origin} fos ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Format inv\u00E0lid: ha de comen\u00E7ar amb \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Format inv\u00E0lid: ha d'acabar amb \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Format inv\u00E0lid: ha d'incloure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Format inv\u00E0lid: ha de coincidir amb el patr\u00F3 ${_issue.pattern}`;\n                return `Format inv\u00E0lid per a ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `N\u00FAmero inv\u00E0lid: ha de ser m\u00FAltiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Clau${issue.keys.length > 1 ? \"s\" : \"\"} no reconeguda${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Clau inv\u00E0lida a ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inv\u00E0lida\"; // Could also be \"Tipus d'uni\u00F3 inv\u00E0lid\" but \"Entrada inv\u00E0lida\" is more general\n            case \"invalid_element\":\n                return `Element inv\u00E0lid a ${issue.origin}`;\n            default:\n                return `Entrada inv\u00E0lida`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znak\u016F\", verb: \"m\u00EDt\" },\n        file: { unit: \"bajt\u016F\", verb: \"m\u00EDt\" },\n        array: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n        set: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"regul\u00E1rn\u00ED v\u00FDraz\",\n        email: \"e-mailov\u00E1 adresa\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"datum a \u010Das ve form\u00E1tu ISO\",\n        date: \"datum ve form\u00E1tu ISO\",\n        time: \"\u010Das ve form\u00E1tu ISO\",\n        duration: \"doba trv\u00E1n\u00ED ISO\",\n        ipv4: \"IPv4 adresa\",\n        ipv6: \"IPv6 adresa\",\n        cidrv4: \"rozsah IPv4\",\n        cidrv6: \"rozsah IPv6\",\n        base64: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64\",\n        base64url: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64url\",\n        json_string: \"\u0159et\u011Bzec ve form\u00E1tu JSON\",\n        e164: \"\u010D\u00EDslo E.164\",\n        jwt: \"JWT\",\n        template_literal: \"vstup\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u010D\u00EDslo\",\n        string: \"\u0159et\u011Bzec\",\n        function: \"funkce\",\n        array: \"pole\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no instanceof ${issue.expected}, obdr\u017Eeno ${received}`;\n                }\n                return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${expected}, obdr\u017Eeno ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neplatn\u00E1 mo\u017Enost: o\u010Dek\u00E1v\u00E1na jedna z hodnot ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n                }\n                return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n                }\n                return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED za\u010D\u00EDnat na \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED kon\u010Dit na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED obsahovat \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED odpov\u00EDdat vzoru ${_issue.pattern}`;\n                return `Neplatn\u00FD form\u00E1t ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neplatn\u00E9 \u010D\u00EDslo: mus\u00ED b\u00FDt n\u00E1sobkem ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nezn\u00E1m\u00E9 kl\u00ED\u010De: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neplatn\u00FD kl\u00ED\u010D v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neplatn\u00FD vstup\";\n            case \"invalid_element\":\n                return `Neplatn\u00E1 hodnota v ${issue.origin}`;\n            default:\n                return `Neplatn\u00FD vstup`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tegn\", verb: \"havde\" },\n        file: { unit: \"bytes\", verb: \"havde\" },\n        array: { unit: \"elementer\", verb: \"indeholdt\" },\n        set: { unit: \"elementer\", verb: \"indeholdt\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"e-mailadresse\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dato- og klokkesl\u00E6t\",\n        date: \"ISO-dato\",\n        time: \"ISO-klokkesl\u00E6t\",\n        duration: \"ISO-varighed\",\n        ipv4: \"IPv4-omr\u00E5de\",\n        ipv6: \"IPv6-omr\u00E5de\",\n        cidrv4: \"IPv4-spektrum\",\n        cidrv6: \"IPv6-spektrum\",\n        base64: \"base64-kodet streng\",\n        base64url: \"base64url-kodet streng\",\n        json_string: \"JSON-streng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"streng\",\n        number: \"tal\",\n        boolean: \"boolean\",\n        array: \"liste\",\n        object: \"objekt\",\n        set: \"s\u00E6t\",\n        file: \"fil\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ugyldigt input: forventede instanceof ${issue.expected}, fik ${received}`;\n                }\n                return `Ugyldigt input: forventede ${expected}, fik ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ugyldig v\u00E6rdi: forventede ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ugyldigt valg: forventede en af f\u00F8lgende ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `For stor: forventede ${origin ?? \"value\"} ${sizing.verb} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n                return `For stor: forventede ${origin ?? \"value\"} havde ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `For lille: forventede ${origin} havde ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ugyldig streng: skal starte med \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ugyldig streng: skal ende med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ugyldig streng: skal indeholde \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ugyldig streng: skal matche m\u00F8nsteret ${_issue.pattern}`;\n                return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ugyldigt tal: skal v\u00E6re deleligt med ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ukendte n\u00F8gler\" : \"Ukendt n\u00F8gle\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ugyldig n\u00F8gle i ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ugyldigt input: matcher ingen af de tilladte typer\";\n            case \"invalid_element\":\n                return `Ugyldig v\u00E6rdi i ${issue.origin}`;\n            default:\n                return `Ugyldigt input`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"Zeichen\", verb: \"zu haben\" },\n        file: { unit: \"Bytes\", verb: \"zu haben\" },\n        array: { unit: \"Elemente\", verb: \"zu haben\" },\n        set: { unit: \"Elemente\", verb: \"zu haben\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"Eingabe\",\n        email: \"E-Mail-Adresse\",\n        url: \"URL\",\n        emoji: \"Emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-Datum und -Uhrzeit\",\n        date: \"ISO-Datum\",\n        time: \"ISO-Uhrzeit\",\n        duration: \"ISO-Dauer\",\n        ipv4: \"IPv4-Adresse\",\n        ipv6: \"IPv6-Adresse\",\n        cidrv4: \"IPv4-Bereich\",\n        cidrv6: \"IPv6-Bereich\",\n        base64: \"Base64-codierter String\",\n        base64url: \"Base64-URL-codierter String\",\n        json_string: \"JSON-String\",\n        e164: \"E.164-Nummer\",\n        jwt: \"JWT\",\n        template_literal: \"Eingabe\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"Zahl\",\n        array: \"Array\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ung\u00FCltige Eingabe: erwartet instanceof ${issue.expected}, erhalten ${received}`;\n                }\n                return `Ung\u00FCltige Eingabe: erwartet ${expected}, erhalten ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ung\u00FCltige Eingabe: erwartet ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ung\u00FCltige Option: erwartet eine von ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"Elemente\"} hat`;\n                return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ist`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} hat`;\n                }\n                return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ist`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ung\u00FCltiger String: muss mit \"${_issue.prefix}\" beginnen`;\n                if (_issue.format === \"ends_with\")\n                    return `Ung\u00FCltiger String: muss mit \"${_issue.suffix}\" enden`;\n                if (_issue.format === \"includes\")\n                    return `Ung\u00FCltiger String: muss \"${_issue.includes}\" enthalten`;\n                if (_issue.format === \"regex\")\n                    return `Ung\u00FCltiger String: muss dem Muster ${_issue.pattern} entsprechen`;\n                return `Ung\u00FCltig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ung\u00FCltige Zahl: muss ein Vielfaches von ${issue.divisor} sein`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Unbekannte Schl\u00FCssel\" : \"Unbekannter Schl\u00FCssel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ung\u00FCltiger Schl\u00FCssel in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ung\u00FCltige Eingabe\";\n            case \"invalid_element\":\n                return `Ung\u00FCltiger Wert in ${issue.origin}`;\n            default:\n                return `Ung\u00FCltige Eingabe`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n        map: { unit: \"entries\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        mac: \"MAC address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    // type names: missing keys = do not translate (use raw value via ?? fallback)\n    const TypeDictionary = {\n        // Compatibility: \"nan\" -> \"NaN\" for display\n        nan: \"NaN\",\n        // All other type names omitted - they fall back to raw values via ?? operator\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `Invalid input: expected ${expected}, received ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karaktrojn\", verb: \"havi\" },\n        file: { unit: \"bajtojn\", verb: \"havi\" },\n        array: { unit: \"elementojn\", verb: \"havi\" },\n        set: { unit: \"elementojn\", verb: \"havi\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"enigo\",\n        email: \"retadreso\",\n        url: \"URL\",\n        emoji: \"emo\u011Dio\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-datotempo\",\n        date: \"ISO-dato\",\n        time: \"ISO-tempo\",\n        duration: \"ISO-da\u016Dro\",\n        ipv4: \"IPv4-adreso\",\n        ipv6: \"IPv6-adreso\",\n        cidrv4: \"IPv4-rango\",\n        cidrv6: \"IPv6-rango\",\n        base64: \"64-ume kodita karaktraro\",\n        base64url: \"URL-64-ume kodita karaktraro\",\n        json_string: \"JSON-karaktraro\",\n        e164: \"E.164-nombro\",\n        jwt: \"JWT\",\n        template_literal: \"enigo\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nombro\",\n        array: \"tabelo\",\n        null: \"senvalora\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Nevalida enigo: atendi\u011Dis instanceof ${issue.expected}, ricevi\u011Dis ${received}`;\n                }\n                return `Nevalida enigo: atendi\u011Dis ${expected}, ricevi\u011Dis ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nevalida enigo: atendi\u011Dis ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Nevalida opcio: atendi\u011Dis unu el ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementojn\"}`;\n                return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Tro malgranda: atendi\u011Dis ke ${issue.origin} havu ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Tro malgranda: atendi\u011Dis ke ${issue.origin} estu ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nevalida karaktraro: devas komenci\u011Di per \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Nevalida karaktraro: devas fini\u011Di per \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Nevalida karaktraro: devas inkluzivi \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;\n                return `Nevalida ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nevalida nombro: devas esti oblo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nekonata${issue.keys.length > 1 ? \"j\" : \"\"} \u015Dlosilo${issue.keys.length > 1 ? \"j\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Nevalida \u015Dlosilo en ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Nevalida enigo\";\n            case \"invalid_element\":\n                return `Nevalida valoro en ${issue.origin}`;\n            default:\n                return `Nevalida enigo`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\", verb: \"tener\" },\n        file: { unit: \"bytes\", verb: \"tener\" },\n        array: { unit: \"elementos\", verb: \"tener\" },\n        set: { unit: \"elementos\", verb: \"tener\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrada\",\n        email: \"direcci\u00F3n de correo electr\u00F3nico\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"fecha y hora ISO\",\n        date: \"fecha ISO\",\n        time: \"hora ISO\",\n        duration: \"duraci\u00F3n ISO\",\n        ipv4: \"direcci\u00F3n IPv4\",\n        ipv6: \"direcci\u00F3n IPv6\",\n        cidrv4: \"rango IPv4\",\n        cidrv6: \"rango IPv6\",\n        base64: \"cadena codificada en base64\",\n        base64url: \"URL codificada en base64\",\n        json_string: \"cadena JSON\",\n        e164: \"n\u00FAmero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"texto\",\n        number: \"n\u00FAmero\",\n        boolean: \"booleano\",\n        array: \"arreglo\",\n        object: \"objeto\",\n        set: \"conjunto\",\n        file: \"archivo\",\n        date: \"fecha\",\n        bigint: \"n\u00FAmero grande\",\n        symbol: \"s\u00EDmbolo\",\n        undefined: \"indefinido\",\n        null: \"nulo\",\n        function: \"funci\u00F3n\",\n        map: \"mapa\",\n        record: \"registro\",\n        tuple: \"tupla\",\n        enum: \"enumeraci\u00F3n\",\n        union: \"uni\u00F3n\",\n        literal: \"literal\",\n        promise: \"promesa\",\n        void: \"vac\u00EDo\",\n        never: \"nunca\",\n        unknown: \"desconocido\",\n        any: \"cualquiera\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entrada inv\u00E1lida: se esperaba instanceof ${issue.expected}, recibido ${received}`;\n                }\n                return `Entrada inv\u00E1lida: se esperaba ${expected}, recibido ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inv\u00E1lida: se esperaba ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opci\u00F3n inv\u00E1lida: se esperaba una de ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} tuviera ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} fuera ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `Demasiado peque\u00F1o: se esperaba que ${origin} tuviera ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Demasiado peque\u00F1o: se esperaba que ${origin} fuera ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Cadena inv\u00E1lida: debe comenzar con \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Cadena inv\u00E1lida: debe terminar en \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cadena inv\u00E1lida: debe incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cadena inv\u00E1lida: debe coincidir con el patr\u00F3n ${_issue.pattern}`;\n                return `Inv\u00E1lido ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `N\u00FAmero inv\u00E1lido: debe ser m\u00FAltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Llave${issue.keys.length > 1 ? \"s\" : \"\"} desconocida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Llave inv\u00E1lida en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inv\u00E1lida\";\n            case \"invalid_element\":\n                return `Valor inv\u00E1lido en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            default:\n                return `Entrada inv\u00E1lida`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n        file: { unit: \"\u0628\u0627\u06CC\u062A\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n        array: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n        set: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0648\u0631\u0648\u062F\u06CC\",\n        email: \"\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644\",\n        url: \"URL\",\n        emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n        date: \"\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648\",\n        time: \"\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n        duration: \"\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n        ipv4: \"IPv4 \u0622\u062F\u0631\u0633\",\n        ipv6: \"IPv6 \u0622\u062F\u0631\u0633\",\n        cidrv4: \"IPv4 \u062F\u0627\u0645\u0646\u0647\",\n        cidrv6: \"IPv6 \u062F\u0627\u0645\u0646\u0647\",\n        base64: \"base64-encoded \u0631\u0634\u062A\u0647\",\n        base64url: \"base64url-encoded \u0631\u0634\u062A\u0647\",\n        json_string: \"JSON \u0631\u0634\u062A\u0647\",\n        e164: \"E.164 \u0639\u062F\u062F\",\n        jwt: \"JWT\",\n        template_literal: \"\u0648\u0631\u0648\u062F\u06CC\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0639\u062F\u062F\",\n        array: \"\u0622\u0631\u0627\u06CC\u0647\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${issue.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n                }\n                return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1) {\n                    return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${util.stringifyPrimitive(issue.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n                }\n                return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"} \u0628\u0627\u0634\u062F`;\n                }\n                return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0628\u0627\u0634\u062F`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0628\u0627\u0634\u062F`;\n                }\n                return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0628\u0627\u0634\u062F`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.prefix}\" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`;\n                }\n                if (_issue.format === \"ends_with\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.suffix}\" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`;\n                }\n                if (_issue.format === \"includes\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 \"${_issue.includes}\" \u0628\u0627\u0634\u062F`;\n                }\n                if (_issue.format === \"regex\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${_issue.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`;\n                }\n                return `${FormatDictionary[_issue.format] ?? issue.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n            }\n            case \"not_multiple_of\":\n                return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${issue.divisor} \u0628\u0627\u0634\u062F`;\n            case \"unrecognized_keys\":\n                return `\u06A9\u0644\u06CC\u062F${issue.keys.length > 1 ? \"\u0647\u0627\u06CC\" : \"\"} \u0646\u0627\u0634\u0646\u0627\u0633: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${issue.origin}`;\n            case \"invalid_union\":\n                return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n            case \"invalid_element\":\n                return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${issue.origin}`;\n            default:\n                return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"merkki\u00E4\", subject: \"merkkijonon\" },\n        file: { unit: \"tavua\", subject: \"tiedoston\" },\n        array: { unit: \"alkiota\", subject: \"listan\" },\n        set: { unit: \"alkiota\", subject: \"joukon\" },\n        number: { unit: \"\", subject: \"luvun\" },\n        bigint: { unit: \"\", subject: \"suuren kokonaisluvun\" },\n        int: { unit: \"\", subject: \"kokonaisluvun\" },\n        date: { unit: \"\", subject: \"p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4n\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"s\u00E4\u00E4nn\u00F6llinen lauseke\",\n        email: \"s\u00E4hk\u00F6postiosoite\",\n        url: \"URL-osoite\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-aikaleima\",\n        date: \"ISO-p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4\",\n        time: \"ISO-aika\",\n        duration: \"ISO-kesto\",\n        ipv4: \"IPv4-osoite\",\n        ipv6: \"IPv6-osoite\",\n        cidrv4: \"IPv4-alue\",\n        cidrv6: \"IPv6-alue\",\n        base64: \"base64-koodattu merkkijono\",\n        base64url: \"base64url-koodattu merkkijono\",\n        json_string: \"JSON-merkkijono\",\n        e164: \"E.164-luku\",\n        jwt: \"JWT\",\n        template_literal: \"templaattimerkkijono\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Virheellinen tyyppi: odotettiin instanceof ${issue.expected}, oli ${received}`;\n                }\n                return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy olla ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Virheellinen valinta: t\u00E4ytyy olla yksi seuraavista: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Liian suuri: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.maximum.toString()} ${sizing.unit}`.trim();\n                }\n                return `Liian suuri: arvon t\u00E4ytyy olla ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Liian pieni: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.minimum.toString()} ${sizing.unit}`.trim();\n                }\n                return `Liian pieni: arvon t\u00E4ytyy olla ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy alkaa \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy loppua \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy sis\u00E4lt\u00E4\u00E4 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\") {\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy vastata s\u00E4\u00E4nn\u00F6llist\u00E4 lauseketta ${_issue.pattern}`;\n                }\n                return `Virheellinen ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Virheellinen luku: t\u00E4ytyy olla luvun ${issue.divisor} monikerta`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Tuntemattomat avaimet\" : \"Tuntematon avain\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return \"Virheellinen avain tietueessa\";\n            case \"invalid_union\":\n                return \"Virheellinen unioni\";\n            case \"invalid_element\":\n                return \"Virheellinen arvo joukossa\";\n            default:\n                return `Virheellinen sy\u00F6te`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n        file: { unit: \"octets\", verb: \"avoir\" },\n        array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n        set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entr\u00E9e\",\n        email: \"adresse e-mail\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"date et heure ISO\",\n        date: \"date ISO\",\n        time: \"heure ISO\",\n        duration: \"dur\u00E9e ISO\",\n        ipv4: \"adresse IPv4\",\n        ipv6: \"adresse IPv6\",\n        cidrv4: \"plage IPv4\",\n        cidrv6: \"plage IPv6\",\n        base64: \"cha\u00EEne encod\u00E9e en base64\",\n        base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n        json_string: \"cha\u00EEne JSON\",\n        e164: \"num\u00E9ro E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entr\u00E9e\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nombre\",\n        array: \"tableau\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entr\u00E9e invalide : instanceof ${issue.expected} attendu, ${received} re\u00E7u`;\n                }\n                return `Entr\u00E9e invalide : ${expected} attendu, ${received} re\u00E7u`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entr\u00E9e invalide : ${util.stringifyPrimitive(issue.values[0])} attendu`;\n                return `Option invalide : une valeur parmi ${util.joinValues(issue.values, \"|\")} attendue`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop grand : ${issue.origin ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00E9l\u00E9ment(s)\"}`;\n                return `Trop grand : ${issue.origin ?? \"valeur\"} doit \u00EAtre ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Trop petit : ${issue.origin} doit ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Trop petit : ${issue.origin} doit \u00EAtre ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cha\u00EEne invalide : doit correspondre au mod\u00E8le ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n            }\n            case \"not_multiple_of\":\n                return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Cl\u00E9 invalide dans ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entr\u00E9e invalide\";\n            case \"invalid_element\":\n                return `Valeur invalide dans ${issue.origin}`;\n            default:\n                return `Entr\u00E9e invalide`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n        file: { unit: \"octets\", verb: \"avoir\" },\n        array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n        set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entr\u00E9e\",\n        email: \"adresse courriel\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"date-heure ISO\",\n        date: \"date ISO\",\n        time: \"heure ISO\",\n        duration: \"dur\u00E9e ISO\",\n        ipv4: \"adresse IPv4\",\n        ipv6: \"adresse IPv6\",\n        cidrv4: \"plage IPv4\",\n        cidrv6: \"plage IPv6\",\n        base64: \"cha\u00EEne encod\u00E9e en base64\",\n        base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n        json_string: \"cha\u00EEne JSON\",\n        e164: \"num\u00E9ro E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entr\u00E9e\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entr\u00E9e invalide : attendu instanceof ${issue.expected}, re\u00E7u ${received}`;\n                }\n                return `Entr\u00E9e invalide : attendu ${expected}, re\u00E7u ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entr\u00E9e invalide : attendu ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Option invalide : attendu l'une des valeurs suivantes ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\u2264\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} ait ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} soit ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\u2265\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Trop petit : attendu que ${issue.origin} ait ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Trop petit : attendu que ${issue.origin} soit ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cha\u00EEne invalide : doit correspondre au motif ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n            }\n            case \"not_multiple_of\":\n                return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Cl\u00E9 invalide dans ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entr\u00E9e invalide\";\n            case \"invalid_element\":\n                return `Valeur invalide dans ${issue.origin}`;\n            default:\n                return `Entr\u00E9e invalide`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    // Hebrew labels + grammatical gender\n    const TypeNames = {\n        string: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA\", gender: \"f\" },\n        number: { label: \"\u05DE\u05E1\u05E4\u05E8\", gender: \"m\" },\n        boolean: { label: \"\u05E2\u05E8\u05DA \u05D1\u05D5\u05DC\u05D9\u05D0\u05E0\u05D9\", gender: \"m\" },\n        bigint: { label: \"BigInt\", gender: \"m\" },\n        date: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA\", gender: \"m\" },\n        array: { label: \"\u05DE\u05E2\u05E8\u05DA\", gender: \"m\" },\n        object: { label: \"\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8\", gender: \"m\" },\n        null: { label: \"\u05E2\u05E8\u05DA \u05E8\u05D9\u05E7 (null)\", gender: \"m\" },\n        undefined: { label: \"\u05E2\u05E8\u05DA \u05DC\u05D0 \u05DE\u05D5\u05D2\u05D3\u05E8 (undefined)\", gender: \"m\" },\n        symbol: { label: \"\u05E1\u05D9\u05DE\u05D1\u05D5\u05DC (Symbol)\", gender: \"m\" },\n        function: { label: \"\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4\", gender: \"f\" },\n        map: { label: \"\u05DE\u05E4\u05D4 (Map)\", gender: \"f\" },\n        set: { label: \"\u05E7\u05D1\u05D5\u05E6\u05D4 (Set)\", gender: \"f\" },\n        file: { label: \"\u05E7\u05D5\u05D1\u05E5\", gender: \"m\" },\n        promise: { label: \"Promise\", gender: \"m\" },\n        NaN: { label: \"NaN\", gender: \"m\" },\n        unknown: { label: \"\u05E2\u05E8\u05DA \u05DC\u05D0 \u05D9\u05D3\u05D5\u05E2\", gender: \"m\" },\n        value: { label: \"\u05E2\u05E8\u05DA\", gender: \"m\" },\n    };\n    // Sizing units for size-related messages + localized origin labels\n    const Sizable = {\n        string: { unit: \"\u05EA\u05D5\u05D5\u05D9\u05DD\", shortLabel: \"\u05E7\u05E6\u05E8\", longLabel: \"\u05D0\u05E8\u05D5\u05DA\" },\n        file: { unit: \"\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n        array: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n        set: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n        number: { unit: \"\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" }, // no unit\n    };\n    // Helpers \u2014 labels, articles, and verbs\n    const typeEntry = (t) => (t ? TypeNames[t] : undefined);\n    const typeLabel = (t) => {\n        const e = typeEntry(t);\n        if (e)\n            return e.label;\n        // fallback: show raw string if unknown\n        return t ?? TypeNames.unknown.label;\n    };\n    const withDefinite = (t) => `\u05D4${typeLabel(t)}`;\n    const verbFor = (t) => {\n        const e = typeEntry(t);\n        const gender = e?.gender ?? \"m\";\n        return gender === \"f\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA\" : \"\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA\";\n    };\n    const getSizing = (origin) => {\n        if (!origin)\n            return null;\n        return Sizable[origin] ?? null;\n    };\n    const FormatDictionary = {\n        regex: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        email: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC\", gender: \"f\" },\n        url: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA\", gender: \"f\" },\n        emoji: { label: \"\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9\", gender: \"m\" },\n        uuid: { label: \"UUID\", gender: \"m\" },\n        nanoid: { label: \"nanoid\", gender: \"m\" },\n        guid: { label: \"GUID\", gender: \"m\" },\n        cuid: { label: \"cuid\", gender: \"m\" },\n        cuid2: { label: \"cuid2\", gender: \"m\" },\n        ulid: { label: \"ULID\", gender: \"m\" },\n        xid: { label: \"XID\", gender: \"m\" },\n        ksuid: { label: \"KSUID\", gender: \"m\" },\n        datetime: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n        date: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA ISO\", gender: \"m\" },\n        time: { label: \"\u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n        duration: { label: \"\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n        ipv4: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv4\", gender: \"f\" },\n        ipv6: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv6\", gender: \"f\" },\n        cidrv4: { label: \"\u05D8\u05D5\u05D5\u05D7 IPv4\", gender: \"m\" },\n        cidrv6: { label: \"\u05D8\u05D5\u05D5\u05D7 IPv6\", gender: \"m\" },\n        base64: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64\", gender: \"f\" },\n        base64url: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA\", gender: \"f\" },\n        json_string: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON\", gender: \"f\" },\n        e164: { label: \"\u05DE\u05E1\u05E4\u05E8 E.164\", gender: \"m\" },\n        jwt: { label: \"JWT\", gender: \"m\" },\n        ends_with: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        includes: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        lowercase: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        starts_with: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        uppercase: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                // Expected type: show without definite article for clearer Hebrew\n                const expectedKey = issue.expected;\n                const expected = TypeDictionary[expectedKey ?? \"\"] ?? typeLabel(expectedKey);\n                // Received: show localized label if known, otherwise constructor/raw\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${issue.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;\n                }\n                return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;\n            }\n            case \"invalid_value\": {\n                if (issue.values.length === 1) {\n                    return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05E2\u05E8\u05DA \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA ${util.stringifyPrimitive(issue.values[0])}`;\n                }\n                // Join values with proper Hebrew formatting\n                const stringified = issue.values.map((v) => util.stringifyPrimitive(v));\n                if (issue.values.length === 2) {\n                    return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${stringified[0]} \u05D0\u05D5 ${stringified[1]}`;\n                }\n                // For 3+ values: \"a\", \"b\" \u05D0\u05D5 \"c\"\n                const lastValue = stringified[stringified.length - 1];\n                const restValues = stringified.slice(0, -1).join(\", \");\n                return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${restValues} \u05D0\u05D5 ${lastValue}`;\n            }\n            case \"too_big\": {\n                const sizing = getSizing(issue.origin);\n                const subject = withDefinite(issue.origin ?? \"value\");\n                if (issue.origin === \"string\") {\n                    // Special handling for strings - more natural Hebrew\n                    return `${sizing?.longLabel ?? \"\u05D0\u05E8\u05D5\u05DA\"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue.maximum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA\" : \"\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8\"}`.trim();\n                }\n                if (issue.origin === \"number\") {\n                    // Natural Hebrew for numbers\n                    const comparison = issue.inclusive ? `\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue.maximum}` : `\u05E7\u05D8\u05DF \u05DE-${issue.maximum}`;\n                    return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;\n                }\n                if (issue.origin === \"array\" || issue.origin === \"set\") {\n                    // Natural Hebrew for arrays and sets\n                    const verb = issue.origin === \"set\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4\" : \"\u05E6\u05E8\u05D9\u05DA\";\n                    const comparison = issue.inclusive\n                        ? `${issue.maximum} ${sizing?.unit ?? \"\"} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA`\n                        : `\u05E4\u05D7\u05D5\u05EA \u05DE-${issue.maximum} ${sizing?.unit ?? \"\"}`;\n                    return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();\n                }\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const be = verbFor(issue.origin ?? \"value\");\n                if (sizing?.unit) {\n                    return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                }\n                return `${sizing?.longLabel ?? \"\u05D2\u05D3\u05D5\u05DC\"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const sizing = getSizing(issue.origin);\n                const subject = withDefinite(issue.origin ?? \"value\");\n                if (issue.origin === \"string\") {\n                    // Special handling for strings - more natural Hebrew\n                    return `${sizing?.shortLabel ?? \"\u05E7\u05E6\u05E8\"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue.minimum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8\" : \"\u05DC\u05E4\u05D7\u05D5\u05EA\"}`.trim();\n                }\n                if (issue.origin === \"number\") {\n                    // Natural Hebrew for numbers\n                    const comparison = issue.inclusive ? `\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue.minimum}` : `\u05D2\u05D3\u05D5\u05DC \u05DE-${issue.minimum}`;\n                    return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;\n                }\n                if (issue.origin === \"array\" || issue.origin === \"set\") {\n                    // Natural Hebrew for arrays and sets\n                    const verb = issue.origin === \"set\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4\" : \"\u05E6\u05E8\u05D9\u05DA\";\n                    // Special case for singular (minimum === 1)\n                    if (issue.minimum === 1 && issue.inclusive) {\n                        const singularPhrase = issue.origin === \"set\" ? \"\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3\" : \"\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3\";\n                        return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${singularPhrase}`;\n                    }\n                    const comparison = issue.inclusive\n                        ? `${issue.minimum} ${sizing?.unit ?? \"\"} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8`\n                        : `\u05D9\u05D5\u05EA\u05E8 \u05DE-${issue.minimum} ${sizing?.unit ?? \"\"}`;\n                    return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();\n                }\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const be = verbFor(issue.origin ?? \"value\");\n                if (sizing?.unit) {\n                    return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `${sizing?.shortLabel ?? \"\u05E7\u05D8\u05DF\"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                // These apply to strings \u2014 use feminine grammar + \u05D4\u05F3 \u05D4\u05D9\u05D3\u05D9\u05E2\u05D4\n                if (_issue.format === \"starts_with\")\n                    return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${_issue.pattern}`;\n                // Handle gender agreement for formats\n                const nounEntry = FormatDictionary[_issue.format];\n                const noun = nounEntry?.label ?? _issue.format;\n                const gender = nounEntry?.gender ?? \"m\";\n                const adjective = gender === \"f\" ? \"\u05EA\u05E7\u05D9\u05E0\u05D4\" : \"\u05EA\u05E7\u05D9\u05DF\";\n                return `${noun} \u05DC\u05D0 ${adjective}`;\n            }\n            case \"not_multiple_of\":\n                return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u05DE\u05E4\u05EA\u05D7${issue.keys.length > 1 ? \"\u05D5\u05EA\" : \"\"} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${issue.keys.length > 1 ? \"\u05D9\u05DD\" : \"\u05D4\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\": {\n                return `\u05E9\u05D3\u05D4 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8`;\n            }\n            case \"invalid_union\":\n                return \"\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF\";\n            case \"invalid_element\": {\n                const place = withDefinite(issue.origin ?? \"array\");\n                return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${place}`;\n            }\n            default:\n                return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"legyen\" },\n        file: { unit: \"byte\", verb: \"legyen\" },\n        array: { unit: \"elem\", verb: \"legyen\" },\n        set: { unit: \"elem\", verb: \"legyen\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"bemenet\",\n        email: \"email c\u00EDm\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO id\u0151b\u00E9lyeg\",\n        date: \"ISO d\u00E1tum\",\n        time: \"ISO id\u0151\",\n        duration: \"ISO id\u0151intervallum\",\n        ipv4: \"IPv4 c\u00EDm\",\n        ipv6: \"IPv6 c\u00EDm\",\n        cidrv4: \"IPv4 tartom\u00E1ny\",\n        cidrv6: \"IPv6 tartom\u00E1ny\",\n        base64: \"base64-k\u00F3dolt string\",\n        base64url: \"base64url-k\u00F3dolt string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 sz\u00E1m\",\n        jwt: \"JWT\",\n        template_literal: \"bemenet\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"sz\u00E1m\",\n        array: \"t\u00F6mb\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k instanceof ${issue.expected}, a kapott \u00E9rt\u00E9k ${received}`;\n                }\n                return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${expected}, a kapott \u00E9rt\u00E9k ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u00C9rv\u00E9nytelen opci\u00F3: valamelyik \u00E9rt\u00E9k v\u00E1rt ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `T\u00FAl nagy: ${issue.origin ?? \"\u00E9rt\u00E9k\"} m\u00E9rete t\u00FAl nagy ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elem\"}`;\n                return `T\u00FAl nagy: a bemeneti \u00E9rt\u00E9k ${issue.origin ?? \"\u00E9rt\u00E9k\"} t\u00FAl nagy: ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} m\u00E9rete t\u00FAl kicsi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} t\u00FAl kicsi ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u00C9rv\u00E9nytelen string: \"${_issue.prefix}\" \u00E9rt\u00E9kkel kell kezd\u0151dnie`;\n                if (_issue.format === \"ends_with\")\n                    return `\u00C9rv\u00E9nytelen string: \"${_issue.suffix}\" \u00E9rt\u00E9kkel kell v\u00E9gz\u0151dnie`;\n                if (_issue.format === \"includes\")\n                    return `\u00C9rv\u00E9nytelen string: \"${_issue.includes}\" \u00E9rt\u00E9ket kell tartalmaznia`;\n                if (_issue.format === \"regex\")\n                    return `\u00C9rv\u00E9nytelen string: ${_issue.pattern} mint\u00E1nak kell megfelelnie`;\n                return `\u00C9rv\u00E9nytelen ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u00C9rv\u00E9nytelen sz\u00E1m: ${issue.divisor} t\u00F6bbsz\u00F6r\u00F6s\u00E9nek kell lennie`;\n            case \"unrecognized_keys\":\n                return `Ismeretlen kulcs${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u00C9rv\u00E9nytelen kulcs ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u00C9rv\u00E9nytelen bemenet\";\n            case \"invalid_element\":\n                return `\u00C9rv\u00E9nytelen \u00E9rt\u00E9k: ${issue.origin}`;\n            default:\n                return `\u00C9rv\u00E9nytelen bemenet`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nfunction getArmenianPlural(count, one, many) {\n    return Math.abs(count) === 1 ? one : many;\n}\nfunction withDefiniteArticle(word) {\n    if (!word)\n        return \"\";\n    const vowels = [\"\u0561\", \"\u0565\", \"\u0568\", \"\u056B\", \"\u0578\", \"\u0578\u0582\", \"\u0585\"];\n    const lastChar = word[word.length - 1];\n    return word + (vowels.includes(lastChar) ? \"\u0576\" : \"\u0568\");\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"\u0576\u0577\u0561\u0576\",\n                many: \"\u0576\u0577\u0561\u0576\u0576\u0565\u0580\",\n            },\n            verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n        },\n        file: {\n            unit: {\n                one: \"\u0562\u0561\u0575\u0569\",\n                many: \"\u0562\u0561\u0575\u0569\u0565\u0580\",\n            },\n            verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n        },\n        array: {\n            unit: {\n                one: \"\u057F\u0561\u0580\u0580\",\n                many: \"\u057F\u0561\u0580\u0580\u0565\u0580\",\n            },\n            verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n        },\n        set: {\n            unit: {\n                one: \"\u057F\u0561\u0580\u0580\",\n                many: \"\u057F\u0561\u0580\u0580\u0565\u0580\",\n            },\n            verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0574\u0578\u0582\u057F\u0584\",\n        email: \"\u0567\u056C. \u0570\u0561\u057D\u0581\u0565\",\n        url: \"URL\",\n        emoji: \"\u0567\u0574\u0578\u057B\u056B\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E \u0587 \u056A\u0561\u0574\",\n        date: \"ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E\",\n        time: \"ISO \u056A\u0561\u0574\",\n        duration: \"ISO \u057F\u0587\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576\",\n        ipv4: \"IPv4 \u0570\u0561\u057D\u0581\u0565\",\n        ipv6: \"IPv6 \u0570\u0561\u057D\u0581\u0565\",\n        cidrv4: \"IPv4 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584\",\n        cidrv6: \"IPv6 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584\",\n        base64: \"base64 \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572\",\n        base64url: \"base64url \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572\",\n        json_string: \"JSON \u057F\u0578\u0572\",\n        e164: \"E.164 \u0570\u0561\u0574\u0561\u0580\",\n        jwt: \"JWT\",\n        template_literal: \"\u0574\u0578\u0582\u057F\u0584\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0569\u056B\u057E\",\n        array: \"\u0566\u0561\u0576\u0563\u057E\u0561\u056E\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 instanceof ${issue.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;\n                }\n                return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${util.stringifyPrimitive(issue.values[1])}`;\n                return `\u054D\u056D\u0561\u056C \u057F\u0561\u0580\u0562\u0565\u0580\u0561\u056F\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 \u0570\u0565\u057F\u0587\u0575\u0561\u056C\u0576\u0565\u0580\u056B\u0581 \u0574\u0565\u056F\u0568\u055D ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many);\n                    return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin ?? \"\u0561\u0580\u056A\u0565\u0584\")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin ?? \"\u0561\u0580\u056A\u0565\u0584\")} \u056C\u056B\u0576\u056B ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many);\n                    return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin)} \u056C\u056B\u0576\u056B ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B \"${_issue.prefix}\"-\u0578\u057E`;\n                if (_issue.format === \"ends_with\")\n                    return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B \"${_issue.suffix}\"-\u0578\u057E`;\n                if (_issue.format === \"includes\")\n                    return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057A\u0561\u0580\u0578\u0582\u0576\u0561\u056F\u056B \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0570\u0561\u0574\u0561\u057A\u0561\u057F\u0561\u057D\u056D\u0561\u0576\u056B ${_issue.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`;\n                return `\u054D\u056D\u0561\u056C ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u054D\u056D\u0561\u056C \u0569\u056B\u057E\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0562\u0561\u0566\u0574\u0561\u057A\u0561\u057F\u056B\u056F \u056C\u056B\u0576\u056B ${issue.divisor}-\u056B`;\n            case \"unrecognized_keys\":\n                return `\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${issue.keys.length > 1 ? \"\u0576\u0565\u0580\" : \"\"}. ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${withDefiniteArticle(issue.origin)}-\u0578\u0582\u0574`;\n            case \"invalid_union\":\n                return \"\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\";\n            case \"invalid_element\":\n                return `\u054D\u056D\u0561\u056C \u0561\u0580\u056A\u0565\u0584 ${withDefiniteArticle(issue.origin)}-\u0578\u0582\u0574`;\n            default:\n                return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"memiliki\" },\n        file: { unit: \"byte\", verb: \"memiliki\" },\n        array: { unit: \"item\", verb: \"memiliki\" },\n        set: { unit: \"item\", verb: \"memiliki\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"alamat email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"tanggal dan waktu format ISO\",\n        date: \"tanggal format ISO\",\n        time: \"jam format ISO\",\n        duration: \"durasi format ISO\",\n        ipv4: \"alamat IPv4\",\n        ipv6: \"alamat IPv6\",\n        cidrv4: \"rentang alamat IPv4\",\n        cidrv6: \"rentang alamat IPv6\",\n        base64: \"string dengan enkode base64\",\n        base64url: \"string dengan enkode base64url\",\n        json_string: \"string JSON\",\n        e164: \"angka E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input tidak valid: diharapkan instanceof ${issue.expected}, diterima ${received}`;\n                }\n                return `Input tidak valid: diharapkan ${expected}, diterima ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input tidak valid: diharapkan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Pilihan tidak valid: diharapkan salah satu dari ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} memiliki ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n                return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} menjadi ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Terlalu kecil: diharapkan ${issue.origin} memiliki ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Terlalu kecil: diharapkan ${issue.origin} menjadi ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `String tidak valid: harus dimulai dengan \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `String tidak valid: harus berakhir dengan \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `String tidak valid: harus menyertakan \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `String tidak valid: harus sesuai pola ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} tidak valid`;\n            }\n            case \"not_multiple_of\":\n                return `Angka tidak valid: harus kelipatan dari ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kunci tidak dikenali ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kunci tidak valid di ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input tidak valid\";\n            case \"invalid_element\":\n                return `Nilai tidak valid di ${issue.origin}`;\n            default:\n                return `Input tidak valid`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"stafi\", verb: \"a\u00F0 hafa\" },\n        file: { unit: \"b\u00E6ti\", verb: \"a\u00F0 hafa\" },\n        array: { unit: \"hluti\", verb: \"a\u00F0 hafa\" },\n        set: { unit: \"hluti\", verb: \"a\u00F0 hafa\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"gildi\",\n        email: \"netfang\",\n        url: \"vefsl\u00F3\u00F0\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dagsetning og t\u00EDmi\",\n        date: \"ISO dagsetning\",\n        time: \"ISO t\u00EDmi\",\n        duration: \"ISO t\u00EDmalengd\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded strengur\",\n        base64url: \"base64url-encoded strengur\",\n        json_string: \"JSON strengur\",\n        e164: \"E.164 t\u00F6lugildi\",\n        jwt: \"JWT\",\n        template_literal: \"gildi\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"n\u00FAmer\",\n        array: \"fylki\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Rangt gildi: \u00DE\u00FA sl\u00F3st inn ${received} \u00FEar sem \u00E1 a\u00F0 vera instanceof ${issue.expected}`;\n                }\n                return `Rangt gildi: \u00DE\u00FA sl\u00F3st inn ${received} \u00FEar sem \u00E1 a\u00F0 vera ${expected}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Rangt gildi: gert r\u00E1\u00F0 fyrir ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u00D3gilt val: m\u00E1 vera eitt af eftirfarandi ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Of st\u00F3rt: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin ?? \"gildi\"} hafi ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"hluti\"}`;\n                return `Of st\u00F3rt: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin ?? \"gildi\"} s\u00E9 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Of l\u00EDti\u00F0: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin} hafi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Of l\u00EDti\u00F0: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin} s\u00E9 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 byrja \u00E1 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 enda \u00E1 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 innihalda \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 fylgja mynstri ${_issue.pattern}`;\n                return `Rangt ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `R\u00F6ng tala: ver\u00F0ur a\u00F0 vera margfeldi af ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u00D3\u00FEekkt ${issue.keys.length > 1 ? \"ir lyklar\" : \"ur lykill\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Rangur lykill \u00ED ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Rangt gildi\";\n            case \"invalid_element\":\n                return `Rangt gildi \u00ED ${issue.origin}`;\n            default:\n                return `Rangt gildi`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caratteri\", verb: \"avere\" },\n        file: { unit: \"byte\", verb: \"avere\" },\n        array: { unit: \"elementi\", verb: \"avere\" },\n        set: { unit: \"elementi\", verb: \"avere\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"indirizzo email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data e ora ISO\",\n        date: \"data ISO\",\n        time: \"ora ISO\",\n        duration: \"durata ISO\",\n        ipv4: \"indirizzo IPv4\",\n        ipv6: \"indirizzo IPv6\",\n        cidrv4: \"intervallo IPv4\",\n        cidrv6: \"intervallo IPv6\",\n        base64: \"stringa codificata in base64\",\n        base64url: \"URL codificata in base64\",\n        json_string: \"stringa JSON\",\n        e164: \"numero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"numero\",\n        array: \"vettore\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input non valido: atteso instanceof ${issue.expected}, ricevuto ${received}`;\n                }\n                return `Input non valido: atteso ${expected}, ricevuto ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input non valido: atteso ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opzione non valida: atteso uno tra ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Troppo grande: ${issue.origin ?? \"valore\"} deve avere ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementi\"}`;\n                return `Troppo grande: ${issue.origin ?? \"valore\"} deve essere ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Troppo piccolo: ${issue.origin} deve avere ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Troppo piccolo: ${issue.origin} deve essere ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Stringa non valida: deve iniziare con \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Stringa non valida: deve terminare con \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Stringa non valida: deve includere \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Numero non valido: deve essere un multiplo di ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chiav${issue.keys.length > 1 ? \"i\" : \"e\"} non riconosciut${issue.keys.length > 1 ? \"e\" : \"a\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Chiave non valida in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input non valido\";\n            case \"invalid_element\":\n                return `Valore non valido in ${issue.origin}`;\n            default:\n                return `Input non valido`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u6587\u5B57\", verb: \"\u3067\u3042\u308B\" },\n        file: { unit: \"\u30D0\u30A4\u30C8\", verb: \"\u3067\u3042\u308B\" },\n        array: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n        set: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u5165\u529B\u5024\",\n        email: \"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\",\n        url: \"URL\",\n        emoji: \"\u7D75\u6587\u5B57\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO\u65E5\u6642\",\n        date: \"ISO\u65E5\u4ED8\",\n        time: \"ISO\u6642\u523B\",\n        duration: \"ISO\u671F\u9593\",\n        ipv4: \"IPv4\u30A2\u30C9\u30EC\u30B9\",\n        ipv6: \"IPv6\u30A2\u30C9\u30EC\u30B9\",\n        cidrv4: \"IPv4\u7BC4\u56F2\",\n        cidrv6: \"IPv6\u7BC4\u56F2\",\n        base64: \"base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n        base64url: \"base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n        json_string: \"JSON\u6587\u5B57\u5217\",\n        e164: \"E.164\u756A\u53F7\",\n        jwt: \"JWT\",\n        template_literal: \"\u5165\u529B\u5024\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u6570\u5024\",\n        array: \"\u914D\u5217\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u7121\u52B9\u306A\u5165\u529B: instanceof ${issue.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n                }\n                return `\u7121\u52B9\u306A\u5165\u529B: ${expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u7121\u52B9\u306A\u5165\u529B: ${util.stringifyPrimitive(issue.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`;\n                return `\u7121\u52B9\u306A\u9078\u629E: ${util.joinValues(issue.values, \"\u3001\")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\u4EE5\u4E0B\u3067\u3042\u308B\" : \"\u3088\u308A\u5C0F\u3055\u3044\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${sizing.unit ?? \"\u8981\u7D20\"}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\u4EE5\u4E0A\u3067\u3042\u308B\" : \"\u3088\u308A\u5927\u304D\u3044\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.prefix}\"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                if (_issue.format === \"ends_with\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.suffix}\"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                if (_issue.format === \"includes\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.includes}\"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                if (_issue.format === \"regex\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                return `\u7121\u52B9\u306A${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u7121\u52B9\u306A\u6570\u5024: ${issue.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            case \"unrecognized_keys\":\n                return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue.keys.length > 1 ? \"\u7FA4\" : \"\"}: ${util.joinValues(issue.keys, \"\u3001\")}`;\n            case \"invalid_key\":\n                return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`;\n            case \"invalid_union\":\n                return \"\u7121\u52B9\u306A\u5165\u529B\";\n            case \"invalid_element\":\n                return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`;\n            default:\n                return `\u7121\u52B9\u306A\u5165\u529B`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n        file: { unit: \"\u10D1\u10D0\u10D8\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n        array: { unit: \"\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n        set: { unit: \"\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\",\n        email: \"\u10D4\u10DA-\u10E4\u10DD\u10E1\u10E2\u10D8\u10E1 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n        url: \"URL\",\n        emoji: \"\u10D4\u10DB\u10DD\u10EF\u10D8\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8-\u10D3\u10E0\u10DD\",\n        date: \"\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8\",\n        time: \"\u10D3\u10E0\u10DD\",\n        duration: \"\u10EE\u10D0\u10DC\u10D2\u10E0\u10EB\u10DA\u10D8\u10D5\u10DD\u10D1\u10D0\",\n        ipv4: \"IPv4 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n        ipv6: \"IPv6 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n        cidrv4: \"IPv4 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8\",\n        cidrv6: \"IPv6 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8\",\n        base64: \"base64-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n        base64url: \"base64url-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n        json_string: \"JSON \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n        e164: \"E.164 \u10DC\u10DD\u10DB\u10D4\u10E0\u10D8\",\n        jwt: \"JWT\",\n        template_literal: \"\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u10E0\u10D8\u10EA\u10EE\u10D5\u10D8\",\n        string: \"\u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n        boolean: \"\u10D1\u10E3\u10DA\u10D4\u10D0\u10DC\u10D8\",\n        function: \"\u10E4\u10E3\u10DC\u10E5\u10EA\u10D8\u10D0\",\n        array: \"\u10DB\u10D0\u10E1\u10D8\u10D5\u10D8\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 instanceof ${issue.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;\n                }\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D0\u10E0\u10D8\u10D0\u10DC\u10E2\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8\u10D0 \u10D4\u10E0\u10D7-\u10D4\u10E0\u10D7\u10D8 ${util.joinValues(issue.values, \"|\")}-\u10D3\u10D0\u10DC`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin ?? \"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin ?? \"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0\"} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10EC\u10E7\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \"${_issue.prefix}\"-\u10D8\u10D7`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10DB\u10D7\u10D0\u10D5\u10E0\u10D3\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \"${_issue.suffix}\"-\u10D8\u10D7`;\n                if (_issue.format === \"includes\")\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1 \"${_issue.includes}\"-\u10E1`;\n                if (_issue.format === \"regex\")\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D4\u10E1\u10D0\u10D1\u10D0\u10DB\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \u10E8\u10D0\u10D1\u10DA\u10DD\u10DC\u10E1 ${_issue.pattern}`;\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E0\u10D8\u10EA\u10EE\u10D5\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10E7\u10DD\u10E1 ${issue.divisor}-\u10D8\u10E1 \u10EF\u10D4\u10E0\u10D0\u10D3\u10D8`;\n            case \"unrecognized_keys\":\n                return `\u10E3\u10EA\u10DC\u10DD\u10D1\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1${issue.keys.length > 1 ? \"\u10D4\u10D1\u10D8\" : \"\u10D8\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${issue.origin}-\u10E8\u10D8`;\n            case \"invalid_union\":\n                return \"\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\";\n            case \"invalid_element\":\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0 ${issue.origin}-\u10E8\u10D8`;\n            default:\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n        file: { unit: \"\u1794\u17C3\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n        array: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n        set: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n        email: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B\",\n        url: \"URL\",\n        emoji: \"\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO\",\n        date: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO\",\n        time: \"\u1798\u17C9\u17C4\u1784 ISO\",\n        duration: \"\u179A\u1799\u17C8\u1796\u17C1\u179B ISO\",\n        ipv4: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n        ipv6: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n        cidrv4: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n        cidrv6: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n        base64: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64\",\n        base64url: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url\",\n        json_string: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON\",\n        e164: \"\u179B\u17C1\u1781 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u179B\u17C1\u1781\",\n        array: \"\u17A2\u17B6\u179A\u17C1 (Array)\",\n        null: \"\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A instanceof ${issue.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;\n                }\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u1792\u17B6\u178F\u17BB\"}`;\n                return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${_issue.pattern}`;\n                return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n            case \"invalid_union\":\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n            case \"invalid_element\":\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n            default:\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst km_js_1 = __importDefault(require(\"./km.cjs\"));\n/** @deprecated Use `km` instead. */\nfunction default_1() {\n    return (0, km_js_1.default)();\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\uBB38\uC790\", verb: \"to have\" },\n        file: { unit: \"\uBC14\uC774\uD2B8\", verb: \"to have\" },\n        array: { unit: \"\uAC1C\", verb: \"to have\" },\n        set: { unit: \"\uAC1C\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\uC785\uB825\",\n        email: \"\uC774\uBA54\uC77C \uC8FC\uC18C\",\n        url: \"URL\",\n        emoji: \"\uC774\uBAA8\uC9C0\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \uB0A0\uC9DC\uC2DC\uAC04\",\n        date: \"ISO \uB0A0\uC9DC\",\n        time: \"ISO \uC2DC\uAC04\",\n        duration: \"ISO \uAE30\uAC04\",\n        ipv4: \"IPv4 \uC8FC\uC18C\",\n        ipv6: \"IPv6 \uC8FC\uC18C\",\n        cidrv4: \"IPv4 \uBC94\uC704\",\n        cidrv6: \"IPv6 \uBC94\uC704\",\n        base64: \"base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n        base64url: \"base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n        json_string: \"JSON \uBB38\uC790\uC5F4\",\n        e164: \"E.164 \uBC88\uD638\",\n        jwt: \"JWT\",\n        template_literal: \"\uC785\uB825\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${issue.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;\n                }\n                return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${util.stringifyPrimitive(issue.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`;\n                return `\uC798\uBABB\uB41C \uC635\uC158: ${util.joinValues(issue.values, \"\uB610\uB294 \")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\uC774\uD558\" : \"\uBBF8\uB9CC\";\n                const suffix = adj === \"\uBBF8\uB9CC\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n                const sizing = getSizing(issue.origin);\n                const unit = sizing?.unit ?? \"\uC694\uC18C\";\n                if (sizing)\n                    return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()}${unit} ${adj}${suffix}`;\n                return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()} ${adj}${suffix}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\uC774\uC0C1\" : \"\uCD08\uACFC\";\n                const suffix = adj === \"\uC774\uC0C1\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n                const sizing = getSizing(issue.origin);\n                const unit = sizing?.unit ?? \"\uC694\uC18C\";\n                if (sizing) {\n                    return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()}${unit} ${adj}${suffix}`;\n                }\n                return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()} ${adj}${suffix}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.prefix}\"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.suffix}\"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`;\n                if (_issue.format === \"includes\")\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.includes}\"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`;\n                if (_issue.format === \"regex\")\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${_issue.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`;\n                return `\uC798\uBABB\uB41C ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\uC798\uBABB\uB41C \uC22B\uC790: ${issue.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n            case \"unrecognized_keys\":\n                return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\uC798\uBABB\uB41C \uD0A4: ${issue.origin}`;\n            case \"invalid_union\":\n                return `\uC798\uBABB\uB41C \uC785\uB825`;\n            case \"invalid_element\":\n                return `\uC798\uBABB\uB41C \uAC12: ${issue.origin}`;\n            default:\n                return `\uC798\uBABB\uB41C \uC785\uB825`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst capitalizeFirstCharacter = (text) => {\n    return text.charAt(0).toUpperCase() + text.slice(1);\n};\nfunction getUnitTypeFromNumber(number) {\n    const abs = Math.abs(number);\n    const last = abs % 10;\n    const last2 = abs % 100;\n    if ((last2 >= 11 && last2 <= 19) || last === 0)\n        return \"many\";\n    if (last === 1)\n        return \"one\";\n    return \"few\";\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"simbolis\",\n                few: \"simboliai\",\n                many: \"simboli\u0173\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi b\u016Bti ne ilgesn\u0117 kaip\",\n                    notInclusive: \"turi b\u016Bti trumpesn\u0117 kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi b\u016Bti ne trumpesn\u0117 kaip\",\n                    notInclusive: \"turi b\u016Bti ilgesn\u0117 kaip\",\n                },\n            },\n        },\n        file: {\n            unit: {\n                one: \"baitas\",\n                few: \"baitai\",\n                many: \"bait\u0173\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi b\u016Bti ne didesnis kaip\",\n                    notInclusive: \"turi b\u016Bti ma\u017Eesnis kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi b\u016Bti ne ma\u017Eesnis kaip\",\n                    notInclusive: \"turi b\u016Bti didesnis kaip\",\n                },\n            },\n        },\n        array: {\n            unit: {\n                one: \"element\u0105\",\n                few: \"elementus\",\n                many: \"element\u0173\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi tur\u0117ti ne daugiau kaip\",\n                    notInclusive: \"turi tur\u0117ti ma\u017Eiau kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi tur\u0117ti ne ma\u017Eiau kaip\",\n                    notInclusive: \"turi tur\u0117ti daugiau kaip\",\n                },\n            },\n        },\n        set: {\n            unit: {\n                one: \"element\u0105\",\n                few: \"elementus\",\n                many: \"element\u0173\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi tur\u0117ti ne daugiau kaip\",\n                    notInclusive: \"turi tur\u0117ti ma\u017Eiau kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi tur\u0117ti ne ma\u017Eiau kaip\",\n                    notInclusive: \"turi tur\u0117ti daugiau kaip\",\n                },\n            },\n        },\n    };\n    function getSizing(origin, unitType, inclusive, targetShouldBe) {\n        const result = Sizable[origin] ?? null;\n        if (result === null)\n            return result;\n        return {\n            unit: result.unit[unitType],\n            verb: result.verb[targetShouldBe][inclusive ? \"inclusive\" : \"notInclusive\"],\n        };\n    }\n    const FormatDictionary = {\n        regex: \"\u012Fvestis\",\n        email: \"el. pa\u0161to adresas\",\n        url: \"URL\",\n        emoji: \"jaustukas\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO data ir laikas\",\n        date: \"ISO data\",\n        time: \"ISO laikas\",\n        duration: \"ISO trukm\u0117\",\n        ipv4: \"IPv4 adresas\",\n        ipv6: \"IPv6 adresas\",\n        cidrv4: \"IPv4 tinklo prefiksas (CIDR)\",\n        cidrv6: \"IPv6 tinklo prefiksas (CIDR)\",\n        base64: \"base64 u\u017Ekoduota eilut\u0117\",\n        base64url: \"base64url u\u017Ekoduota eilut\u0117\",\n        json_string: \"JSON eilut\u0117\",\n        e164: \"E.164 numeris\",\n        jwt: \"JWT\",\n        template_literal: \"\u012Fvestis\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"skai\u010Dius\",\n        bigint: \"sveikasis skai\u010Dius\",\n        string: \"eilut\u0117\",\n        boolean: \"login\u0117 reik\u0161m\u0117\",\n        undefined: \"neapibr\u0117\u017Eta reik\u0161m\u0117\",\n        function: \"funkcija\",\n        symbol: \"simbolis\",\n        array: \"masyvas\",\n        object: \"objektas\",\n        null: \"nulin\u0117 reik\u0161m\u0117\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Gautas tipas ${received}, o tik\u0117tasi - instanceof ${issue.expected}`;\n                }\n                return `Gautas tipas ${received}, o tik\u0117tasi - ${expected}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Privalo b\u016Bti ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Privalo b\u016Bti vienas i\u0161 ${util.joinValues(issue.values, \"|\")} pasirinkim\u0173`;\n            case \"too_big\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.maximum)), issue.inclusive ?? false, \"smaller\");\n                if (sizing?.verb)\n                    return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} ${sizing.verb} ${issue.maximum.toString()} ${sizing.unit ?? \"element\u0173\"}`;\n                const adj = issue.inclusive ? \"ne didesnis kaip\" : \"ma\u017Eesnis kaip\";\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi b\u016Bti ${adj} ${issue.maximum.toString()} ${sizing?.unit}`;\n            }\n            case \"too_small\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.minimum)), issue.inclusive ?? false, \"bigger\");\n                if (sizing?.verb)\n                    return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} ${sizing.verb} ${issue.minimum.toString()} ${sizing.unit ?? \"element\u0173\"}`;\n                const adj = issue.inclusive ? \"ne ma\u017Eesnis kaip\" : \"didesnis kaip\";\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi b\u016Bti ${adj} ${issue.minimum.toString()} ${sizing?.unit}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Eilut\u0117 privalo prasid\u0117ti \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Eilut\u0117 privalo pasibaigti \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Eilut\u0117 privalo \u012Ftraukti \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Eilut\u0117 privalo atitikti ${_issue.pattern}`;\n                return `Neteisingas ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Skai\u010Dius privalo b\u016Bti ${issue.divisor} kartotinis.`;\n            case \"unrecognized_keys\":\n                return `Neatpa\u017Eint${issue.keys.length > 1 ? \"i\" : \"as\"} rakt${issue.keys.length > 1 ? \"ai\" : \"as\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return \"Rastas klaidingas raktas\";\n            case \"invalid_union\":\n                return \"Klaidinga \u012Fvestis\";\n            case \"invalid_element\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi klaiding\u0105 \u012Fvest\u012F`;\n            }\n            default:\n                return \"Klaidinga \u012Fvestis\";\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0437\u043D\u0430\u0446\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n        file: { unit: \"\u0431\u0430\u0458\u0442\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n        array: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n        set: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0432\u043D\u0435\u0441\",\n        email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430\",\n        url: \"URL\",\n        emoji: \"\u0435\u043C\u043E\u045F\u0438\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435\",\n        date: \"ISO \u0434\u0430\u0442\u0443\u043C\",\n        time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n        duration: \"ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\u0430\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\u0430\",\n        cidrv4: \"IPv4 \u043E\u043F\u0441\u0435\u0433\",\n        cidrv6: \"IPv6 \u043E\u043F\u0441\u0435\u0433\",\n        base64: \"base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n        base64url: \"base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n        json_string: \"JSON \u043D\u0438\u0437\u0430\",\n        e164: \"E.164 \u0431\u0440\u043E\u0458\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u043D\u0435\u0441\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0431\u0440\u043E\u0458\",\n        array: \"\u043D\u0438\u0437\u0430\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${issue.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;\n                }\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438\"}`;\n                return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438\" : \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441\";\n            case \"invalid_element\":\n                return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${issue.origin}`;\n            default:\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"aksara\", verb: \"mempunyai\" },\n        file: { unit: \"bait\", verb: \"mempunyai\" },\n        array: { unit: \"elemen\", verb: \"mempunyai\" },\n        set: { unit: \"elemen\", verb: \"mempunyai\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"alamat e-mel\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"tarikh masa ISO\",\n        date: \"tarikh ISO\",\n        time: \"masa ISO\",\n        duration: \"tempoh ISO\",\n        ipv4: \"alamat IPv4\",\n        ipv6: \"alamat IPv6\",\n        cidrv4: \"julat IPv4\",\n        cidrv6: \"julat IPv6\",\n        base64: \"string dikodkan base64\",\n        base64url: \"string dikodkan base64url\",\n        json_string: \"string JSON\",\n        e164: \"nombor E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nombor\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input tidak sah: dijangka instanceof ${issue.expected}, diterima ${received}`;\n                }\n                return `Input tidak sah: dijangka ${expected}, diterima ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input tidak sah: dijangka ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Pilihan tidak sah: dijangka salah satu daripada ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n                return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} adalah ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Terlalu kecil: dijangka ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Terlalu kecil: dijangka ${issue.origin} adalah ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `String tidak sah: mesti bermula dengan \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `String tidak sah: mesti berakhir dengan \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `String tidak sah: mesti mengandungi \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} tidak sah`;\n            }\n            case \"not_multiple_of\":\n                return `Nombor tidak sah: perlu gandaan ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kunci tidak dikenali: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kunci tidak sah dalam ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input tidak sah\";\n            case \"invalid_element\":\n                return `Nilai tidak sah dalam ${issue.origin}`;\n            default:\n                return `Input tidak sah`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tekens\", verb: \"heeft\" },\n        file: { unit: \"bytes\", verb: \"heeft\" },\n        array: { unit: \"elementen\", verb: \"heeft\" },\n        set: { unit: \"elementen\", verb: \"heeft\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"invoer\",\n        email: \"emailadres\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum en tijd\",\n        date: \"ISO datum\",\n        time: \"ISO tijd\",\n        duration: \"ISO duur\",\n        ipv4: \"IPv4-adres\",\n        ipv6: \"IPv6-adres\",\n        cidrv4: \"IPv4-bereik\",\n        cidrv6: \"IPv6-bereik\",\n        base64: \"base64-gecodeerde tekst\",\n        base64url: \"base64 URL-gecodeerde tekst\",\n        json_string: \"JSON string\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"invoer\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"getal\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ongeldige invoer: verwacht instanceof ${issue.expected}, ontving ${received}`;\n                }\n                return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ongeldige invoer: verwacht ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ongeldige optie: verwacht \u00E9\u00E9n van ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const longName = issue.origin === \"date\" ? \"laat\" : issue.origin === \"string\" ? \"lang\" : \"groot\";\n                if (sizing)\n                    return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementen\"} ${sizing.verb}`;\n                return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} is`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const shortName = issue.origin === \"date\" ? \"vroeg\" : issue.origin === \"string\" ? \"kort\" : \"klein\";\n                if (sizing) {\n                    return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                }\n                return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} is`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ongeldige tekst: moet met \"${_issue.prefix}\" beginnen`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ongeldige tekst: moet op \"${_issue.suffix}\" eindigen`;\n                if (_issue.format === \"includes\")\n                    return `Ongeldige tekst: moet \"${_issue.includes}\" bevatten`;\n                if (_issue.format === \"regex\")\n                    return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;\n                return `Ongeldig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ongeldig getal: moet een veelvoud van ${issue.divisor} zijn`;\n            case \"unrecognized_keys\":\n                return `Onbekende key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ongeldige key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ongeldige invoer\";\n            case \"invalid_element\":\n                return `Ongeldige waarde in ${issue.origin}`;\n            default:\n                return `Ongeldige invoer`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tegn\", verb: \"\u00E5 ha\" },\n        file: { unit: \"bytes\", verb: \"\u00E5 ha\" },\n        array: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n        set: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"e-postadresse\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dato- og klokkeslett\",\n        date: \"ISO-dato\",\n        time: \"ISO-klokkeslett\",\n        duration: \"ISO-varighet\",\n        ipv4: \"IPv4-omr\u00E5de\",\n        ipv6: \"IPv6-omr\u00E5de\",\n        cidrv4: \"IPv4-spekter\",\n        cidrv6: \"IPv6-spekter\",\n        base64: \"base64-enkodet streng\",\n        base64url: \"base64url-enkodet streng\",\n        json_string: \"JSON-streng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"tall\",\n        array: \"liste\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ugyldig input: forventet instanceof ${issue.expected}, fikk ${received}`;\n                }\n                return `Ugyldig input: forventet ${expected}, fikk ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ugyldig verdi: forventet ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ugyldig valg: forventet en av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n                return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ugyldig streng: m\u00E5 starte med \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ugyldig streng: m\u00E5 ende med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ugyldig streng: m\u00E5 inneholde \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ugyldig streng: m\u00E5 matche m\u00F8nsteret ${_issue.pattern}`;\n                return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ugyldig tall: m\u00E5 v\u00E6re et multiplum av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ukjente n\u00F8kler\" : \"Ukjent n\u00F8kkel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ugyldig n\u00F8kkel i ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ugyldig input\";\n            case \"invalid_element\":\n                return `Ugyldig verdi i ${issue.origin}`;\n            default:\n                return `Ugyldig input`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"harf\", verb: \"olmal\u0131d\u0131r\" },\n        file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n        array: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n        set: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"giren\",\n        email: \"epostag\u00E2h\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO heng\u00E2m\u0131\",\n        date: \"ISO tarihi\",\n        time: \"ISO zaman\u0131\",\n        duration: \"ISO m\u00FCddeti\",\n        ipv4: \"IPv4 ni\u015F\u00E2n\u0131\",\n        ipv6: \"IPv6 ni\u015F\u00E2n\u0131\",\n        cidrv4: \"IPv4 menzili\",\n        cidrv6: \"IPv6 menzili\",\n        base64: \"base64-\u015Fifreli metin\",\n        base64url: \"base64url-\u015Fifreli metin\",\n        json_string: \"JSON metin\",\n        e164: \"E.164 say\u0131s\u0131\",\n        jwt: \"JWT\",\n        template_literal: \"giren\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"numara\",\n        array: \"saf\",\n        null: \"gayb\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `F\u00E2sit giren: umulan instanceof ${issue.expected}, al\u0131nan ${received}`;\n                }\n                return `F\u00E2sit giren: umulan ${expected}, al\u0131nan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `F\u00E2sit giren: umulan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `F\u00E2sit tercih: m\u00FBteberler ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"} sahip olmal\u0131yd\u0131.`;\n                return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} olmal\u0131yd\u0131.`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} ${sizing.unit} sahip olmal\u0131yd\u0131.`;\n                }\n                return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} olmal\u0131yd\u0131.`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `F\u00E2sit metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131.`;\n                if (_issue.format === \"ends_with\")\n                    return `F\u00E2sit metin: \"${_issue.suffix}\" ile bitmeli.`;\n                if (_issue.format === \"includes\")\n                    return `F\u00E2sit metin: \"${_issue.includes}\" ihtiv\u00E2 etmeli.`;\n                if (_issue.format === \"regex\")\n                    return `F\u00E2sit metin: ${_issue.pattern} nak\u015F\u0131na uymal\u0131.`;\n                return `F\u00E2sit ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `F\u00E2sit say\u0131: ${issue.divisor} kat\u0131 olmal\u0131yd\u0131.`;\n            case \"unrecognized_keys\":\n                return `Tan\u0131nmayan anahtar ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} i\u00E7in tan\u0131nmayan anahtar var.`;\n            case \"invalid_union\":\n                return \"Giren tan\u0131namad\u0131.\";\n            case \"invalid_element\":\n                return `${issue.origin} i\u00E7in tan\u0131nmayan k\u0131ymet var.`;\n            default:\n                return `K\u0131ymet tan\u0131namad\u0131.`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n        file: { unit: \"\u0628\u0627\u06CC\u067C\u0633\", verb: \"\u0648\u0644\u0631\u064A\" },\n        array: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n        set: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0648\u0631\u0648\u062F\u064A\",\n        email: \"\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9\",\n        url: \"\u06CC\u0648 \u0622\u0631 \u0627\u0644\",\n        emoji: \"\u0627\u06CC\u0645\u0648\u062C\u064A\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A\",\n        date: \"\u0646\u06D0\u067C\u0647\",\n        time: \"\u0648\u062E\u062A\",\n        duration: \"\u0645\u0648\u062F\u0647\",\n        ipv4: \"\u062F IPv4 \u067E\u062A\u0647\",\n        ipv6: \"\u062F IPv6 \u067E\u062A\u0647\",\n        cidrv4: \"\u062F IPv4 \u0633\u0627\u062D\u0647\",\n        cidrv6: \"\u062F IPv6 \u0633\u0627\u062D\u0647\",\n        base64: \"base64-encoded \u0645\u062A\u0646\",\n        base64url: \"base64url-encoded \u0645\u062A\u0646\",\n        json_string: \"JSON \u0645\u062A\u0646\",\n        e164: \"\u062F E.164 \u0634\u0645\u06D0\u0631\u0647\",\n        jwt: \"JWT\",\n        template_literal: \"\u0648\u0631\u0648\u062F\u064A\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0639\u062F\u062F\",\n        array: \"\u0627\u0631\u06D0\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${issue.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n                }\n                return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1) {\n                    return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${util.stringifyPrimitive(issue.values[0])} \u0648\u0627\u06CC`;\n                }\n                return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${util.joinValues(issue.values, \"|\")} \u0685\u062E\u0647 \u0648\u0627\u06CC`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\u0648\u0646\u0647\"} \u0648\u0644\u0631\u064A`;\n                }\n                return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0648\u064A`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0648\u0644\u0631\u064A`;\n                }\n                return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0648\u064A`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.prefix}\" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`;\n                }\n                if (_issue.format === \"ends_with\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.suffix}\" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`;\n                }\n                if (_issue.format === \"includes\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \"${_issue.includes}\" \u0648\u0644\u0631\u064A`;\n                }\n                if (_issue.format === \"regex\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${_issue.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`;\n                }\n                return `${FormatDictionary[_issue.format] ?? issue.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`;\n            }\n            case \"not_multiple_of\":\n                return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${issue.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`;\n            case \"unrecognized_keys\":\n                return `\u0646\u0627\u0633\u0645 ${issue.keys.length > 1 ? \"\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647\" : \"\u06A9\u0644\u06CC\u0689\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n            case \"invalid_union\":\n                return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n            case \"invalid_element\":\n                return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n            default:\n                return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znak\u00F3w\", verb: \"mie\u0107\" },\n        file: { unit: \"bajt\u00F3w\", verb: \"mie\u0107\" },\n        array: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n        set: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"wyra\u017Cenie\",\n        email: \"adres email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data i godzina w formacie ISO\",\n        date: \"data w formacie ISO\",\n        time: \"godzina w formacie ISO\",\n        duration: \"czas trwania ISO\",\n        ipv4: \"adres IPv4\",\n        ipv6: \"adres IPv6\",\n        cidrv4: \"zakres IPv4\",\n        cidrv6: \"zakres IPv6\",\n        base64: \"ci\u0105g znak\u00F3w zakodowany w formacie base64\",\n        base64url: \"ci\u0105g znak\u00F3w zakodowany w formacie base64url\",\n        json_string: \"ci\u0105g znak\u00F3w w formacie JSON\",\n        e164: \"liczba E.164\",\n        jwt: \"JWT\",\n        template_literal: \"wej\u015Bcie\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"liczba\",\n        array: \"tablica\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${issue.expected}, otrzymano ${received}`;\n                }\n                return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${expected}, otrzymano ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n                }\n                return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n                }\n                return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zaczyna\u0107 si\u0119 od \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi ko\u0144czy\u0107 si\u0119 na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zawiera\u0107 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi odpowiada\u0107 wzorcowi ${_issue.pattern}`;\n                return `Nieprawid\u0142ow(y/a/e) ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nierozpoznane klucze${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Nieprawid\u0142owy klucz w ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Nieprawid\u0142owe dane wej\u015Bciowe\";\n            case \"invalid_element\":\n                return `Nieprawid\u0142owa warto\u015B\u0107 w ${issue.origin}`;\n            default:\n                return `Nieprawid\u0142owe dane wej\u015Bciowe`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\", verb: \"ter\" },\n        file: { unit: \"bytes\", verb: \"ter\" },\n        array: { unit: \"itens\", verb: \"ter\" },\n        set: { unit: \"itens\", verb: \"ter\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"padr\u00E3o\",\n        email: \"endere\u00E7o de e-mail\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data e hora ISO\",\n        date: \"data ISO\",\n        time: \"hora ISO\",\n        duration: \"dura\u00E7\u00E3o ISO\",\n        ipv4: \"endere\u00E7o IPv4\",\n        ipv6: \"endere\u00E7o IPv6\",\n        cidrv4: \"faixa de IPv4\",\n        cidrv6: \"faixa de IPv6\",\n        base64: \"texto codificado em base64\",\n        base64url: \"URL codificada em base64\",\n        json_string: \"texto JSON\",\n        e164: \"n\u00FAmero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"n\u00FAmero\",\n        null: \"nulo\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Tipo inv\u00E1lido: esperado instanceof ${issue.expected}, recebido ${received}`;\n                }\n                return `Tipo inv\u00E1lido: esperado ${expected}, recebido ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inv\u00E1lida: esperado ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Op\u00E7\u00E3o inv\u00E1lida: esperada uma das ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Muito grande: esperado que ${issue.origin ?? \"valor\"} tivesse ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Muito grande: esperado que ${issue.origin ?? \"valor\"} fosse ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Muito pequeno: esperado que ${issue.origin} tivesse ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Muito pequeno: esperado que ${issue.origin} fosse ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Texto inv\u00E1lido: deve come\u00E7ar com \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Texto inv\u00E1lido: deve terminar com \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Texto inv\u00E1lido: deve incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Texto inv\u00E1lido: deve corresponder ao padr\u00E3o ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} inv\u00E1lido`;\n            }\n            case \"not_multiple_of\":\n                return `N\u00FAmero inv\u00E1lido: deve ser m\u00FAltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chave${issue.keys.length > 1 ? \"s\" : \"\"} desconhecida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Chave inv\u00E1lida em ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inv\u00E1lida\";\n            case \"invalid_element\":\n                return `Valor inv\u00E1lido em ${issue.origin}`;\n            default:\n                return `Campo inv\u00E1lido`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nfunction getRussianPlural(count, one, few, many) {\n    const absCount = Math.abs(count);\n    const lastDigit = absCount % 10;\n    const lastTwoDigits = absCount % 100;\n    if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n        return many;\n    }\n    if (lastDigit === 1) {\n        return one;\n    }\n    if (lastDigit >= 2 && lastDigit <= 4) {\n        return few;\n    }\n    return many;\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"\u0441\u0438\u043C\u0432\u043E\u043B\",\n                few: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\",\n                many: \"\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n        file: {\n            unit: {\n                one: \"\u0431\u0430\u0439\u0442\",\n                few: \"\u0431\u0430\u0439\u0442\u0430\",\n                many: \"\u0431\u0430\u0439\u0442\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n        array: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n        set: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0432\u0432\u043E\u0434\",\n        email: \"email \u0430\u0434\u0440\u0435\u0441\",\n        url: \"URL\",\n        emoji: \"\u044D\u043C\u043E\u0434\u0437\u0438\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F\",\n        date: \"ISO \u0434\u0430\u0442\u0430\",\n        time: \"ISO \u0432\u0440\u0435\u043C\u044F\",\n        duration: \"ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n        cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        base64: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64\",\n        base64url: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url\",\n        json_string: \"JSON \u0441\u0442\u0440\u043E\u043A\u0430\",\n        e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u0432\u043E\u0434\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0447\u0438\u0441\u043B\u043E\",\n        array: \"\u043C\u0430\u0441\u0441\u0438\u0432\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;\n                }\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${issue.keys.length > 1 ? \"\u044B\u0435\" : \"\u044B\u0439\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0438\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435\";\n            case \"invalid_element\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${issue.origin}`;\n            default:\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znakov\", verb: \"imeti\" },\n        file: { unit: \"bajtov\", verb: \"imeti\" },\n        array: { unit: \"elementov\", verb: \"imeti\" },\n        set: { unit: \"elementov\", verb: \"imeti\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"vnos\",\n        email: \"e-po\u0161tni naslov\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum in \u010Das\",\n        date: \"ISO datum\",\n        time: \"ISO \u010Das\",\n        duration: \"ISO trajanje\",\n        ipv4: \"IPv4 naslov\",\n        ipv6: \"IPv6 naslov\",\n        cidrv4: \"obseg IPv4\",\n        cidrv6: \"obseg IPv6\",\n        base64: \"base64 kodiran niz\",\n        base64url: \"base64url kodiran niz\",\n        json_string: \"JSON niz\",\n        e164: \"E.164 \u0161tevilka\",\n        jwt: \"JWT\",\n        template_literal: \"vnos\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0161tevilo\",\n        array: \"tabela\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neveljaven vnos: pri\u010Dakovano instanceof ${issue.expected}, prejeto ${received}`;\n                }\n                return `Neveljaven vnos: pri\u010Dakovano ${expected}, prejeto ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neveljaven vnos: pri\u010Dakovano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} imelo ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementov\"}`;\n                return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} imelo ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Neveljaven niz: mora se za\u010Deti z \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Neveljaven niz: mora se kon\u010Dati z \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neveljaven niz: mora vsebovati \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;\n                return `Neveljaven ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Neprepoznan${issue.keys.length > 1 ? \"i klju\u010Di\" : \" klju\u010D\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neveljaven klju\u010D v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neveljaven vnos\";\n            case \"invalid_element\":\n                return `Neveljavna vrednost v ${issue.origin}`;\n            default:\n                return \"Neveljaven vnos\";\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tecken\", verb: \"att ha\" },\n        file: { unit: \"bytes\", verb: \"att ha\" },\n        array: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n        set: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"regulj\u00E4rt uttryck\",\n        email: \"e-postadress\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-datum och tid\",\n        date: \"ISO-datum\",\n        time: \"ISO-tid\",\n        duration: \"ISO-varaktighet\",\n        ipv4: \"IPv4-intervall\",\n        ipv6: \"IPv6-intervall\",\n        cidrv4: \"IPv4-spektrum\",\n        cidrv6: \"IPv6-spektrum\",\n        base64: \"base64-kodad str\u00E4ng\",\n        base64url: \"base64url-kodad str\u00E4ng\",\n        json_string: \"JSON-str\u00E4ng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"mall-literal\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"antal\",\n        array: \"lista\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ogiltig inmatning: f\u00F6rv\u00E4ntat instanceof ${issue.expected}, fick ${received}`;\n                }\n                return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${expected}, fick ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ogiltigt val: f\u00F6rv\u00E4ntade en av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `F\u00F6r stor(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                }\n                return `F\u00F6r stor(t): f\u00F6rv\u00E4ntat ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ogiltig str\u00E4ng: m\u00E5ste b\u00F6rja med \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ogiltig str\u00E4ng: m\u00E5ste sluta med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ogiltig str\u00E4ng: m\u00E5ste inneh\u00E5lla \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ogiltig str\u00E4ng: m\u00E5ste matcha m\u00F6nstret \"${_issue.pattern}\"`;\n                return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ogiltigt tal: m\u00E5ste vara en multipel av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ok\u00E4nda nycklar\" : \"Ok\u00E4nd nyckel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ogiltig nyckel i ${issue.origin ?? \"v\u00E4rdet\"}`;\n            case \"invalid_union\":\n                return \"Ogiltig input\";\n            case \"invalid_element\":\n                return `Ogiltigt v\u00E4rde i ${issue.origin ?? \"v\u00E4rdet\"}`;\n            default:\n                return `Ogiltig input`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n        file: { unit: \"\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n        array: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n        set: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\",\n        email: \"\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n        date: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF\",\n        time: \"ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n        duration: \"ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1\",\n        ipv4: \"IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n        ipv6: \"IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n        cidrv4: \"IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n        cidrv6: \"IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n        base64: \"base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n        base64url: \"base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n        json_string: \"JSON \u0B9A\u0BB0\u0BAE\u0BCD\",\n        e164: \"E.164 \u0B8E\u0BA3\u0BCD\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0B8E\u0BA3\u0BCD\",\n        array: \"\u0B85\u0BA3\u0BBF\",\n        null: \"\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 instanceof ${issue.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;\n                }\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.joinValues(issue.values, \"|\")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                }\n                return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; //\n                }\n                return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.prefix}\" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                if (_issue.format === \"ends_with\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.suffix}\" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                if (_issue.format === \"includes\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.includes}\" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                if (_issue.format === \"regex\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${_issue.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${issue.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n            case \"unrecognized_keys\":\n                return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${issue.keys.length > 1 ? \"\u0B95\u0BB3\u0BCD\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`;\n            case \"invalid_union\":\n                return \"\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\";\n            case \"invalid_element\":\n                return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`;\n            default:\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n        file: { unit: \"\u0E44\u0E1A\u0E15\u0E4C\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n        array: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n        set: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n        email: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25\",\n        url: \"URL\",\n        emoji: \"\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n        date: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO\",\n        time: \"\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n        duration: \"\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n        ipv4: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4\",\n        ipv6: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6\",\n        cidrv4: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4\",\n        cidrv6: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6\",\n        base64: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64\",\n        base64url: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL\",\n        json_string: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON\",\n        e164: \"\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)\",\n        jwt: \"\u0E42\u0E17\u0E40\u0E04\u0E19 JWT\",\n        template_literal: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\",\n        array: \"\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)\",\n        null: \"\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 instanceof ${issue.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;\n                }\n                return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19\" : \"\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\"}`;\n                return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22\" : \"\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 \"${_issue.includes}\" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`;\n                if (_issue.format === \"regex\")\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${_issue.pattern}`;\n                return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${issue.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`;\n            case \"unrecognized_keys\":\n                return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49\";\n            case \"invalid_element\":\n                return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n            default:\n                return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"olmal\u0131\" },\n        file: { unit: \"bayt\", verb: \"olmal\u0131\" },\n        array: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n        set: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"girdi\",\n        email: \"e-posta adresi\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO tarih ve saat\",\n        date: \"ISO tarih\",\n        time: \"ISO saat\",\n        duration: \"ISO s\u00FCre\",\n        ipv4: \"IPv4 adresi\",\n        ipv6: \"IPv6 adresi\",\n        cidrv4: \"IPv4 aral\u0131\u011F\u0131\",\n        cidrv6: \"IPv6 aral\u0131\u011F\u0131\",\n        base64: \"base64 ile \u015Fifrelenmi\u015F metin\",\n        base64url: \"base64url ile \u015Fifrelenmi\u015F metin\",\n        json_string: \"JSON dizesi\",\n        e164: \"E.164 say\u0131s\u0131\",\n        jwt: \"JWT\",\n        template_literal: \"\u015Eablon dizesi\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ge\u00E7ersiz de\u011Fer: beklenen instanceof ${issue.expected}, al\u0131nan ${received}`;\n                }\n                return `Ge\u00E7ersiz de\u011Fer: beklenen ${expected}, al\u0131nan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ge\u00E7ersiz de\u011Fer: beklenen ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ge\u00E7ersiz se\u00E7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00F6\u011Fe\"}`;\n                return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ge\u00E7ersiz metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131`;\n                if (_issue.format === \"ends_with\")\n                    return `Ge\u00E7ersiz metin: \"${_issue.suffix}\" ile bitmeli`;\n                if (_issue.format === \"includes\")\n                    return `Ge\u00E7ersiz metin: \"${_issue.includes}\" i\u00E7ermeli`;\n                if (_issue.format === \"regex\")\n                    return `Ge\u00E7ersiz metin: ${_issue.pattern} desenine uymal\u0131`;\n                return `Ge\u00E7ersiz ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ge\u00E7ersiz say\u0131: ${issue.divisor} ile tam b\u00F6l\u00FCnebilmeli`;\n            case \"unrecognized_keys\":\n                return `Tan\u0131nmayan anahtar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} i\u00E7inde ge\u00E7ersiz anahtar`;\n            case \"invalid_union\":\n                return \"Ge\u00E7ersiz de\u011Fer\";\n            case \"invalid_element\":\n                return `${issue.origin} i\u00E7inde ge\u00E7ersiz de\u011Fer`;\n            default:\n                return `Ge\u00E7ersiz de\u011Fer`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n        file: { unit: \"\u0431\u0430\u0439\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n        array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n        set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n        email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438\",\n        url: \"URL\",\n        emoji: \"\u0435\u043C\u043E\u0434\u0437\u0456\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO\",\n        date: \"\u0434\u0430\u0442\u0430 ISO\",\n        time: \"\u0447\u0430\u0441 ISO\",\n        duration: \"\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO\",\n        ipv4: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv4\",\n        ipv6: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv6\",\n        cidrv4: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4\",\n        cidrv6: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6\",\n        base64: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64\",\n        base64url: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url\",\n        json_string: \"\u0440\u044F\u0434\u043E\u043A JSON\",\n        e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0447\u0438\u0441\u043B\u043E\",\n        array: \"\u043C\u0430\u0441\u0438\u0432\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F instanceof ${issue.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;\n                }\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\"}`;\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} \u0431\u0443\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} \u0431\u0443\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0456\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\";\n            case \"invalid_element\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${issue.origin}`;\n            default:\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst uk_js_1 = __importDefault(require(\"./uk.cjs\"));\n/** @deprecated Use `uk` instead. */\nfunction default_1() {\n    return (0, uk_js_1.default)();\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u062D\u0631\u0648\u0641\", verb: \"\u06C1\u0648\u0646\u0627\" },\n        file: { unit: \"\u0628\u0627\u0626\u0679\u0633\", verb: \"\u06C1\u0648\u0646\u0627\" },\n        array: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n        set: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0627\u0646 \u067E\u0679\",\n        email: \"\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n        url: \"\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644\",\n        emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n        uuid: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        uuidv4: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4\",\n        uuidv6: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6\",\n        nanoid: \"\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        guid: \"\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        cuid: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        cuid2: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2\",\n        ulid: \"\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC\",\n        xid: \"\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC\",\n        ksuid: \"\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        datetime: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645\",\n        date: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E\",\n        time: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A\",\n        duration: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A\",\n        ipv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n        ipv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n        cidrv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C\",\n        cidrv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C\",\n        base64: \"\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n        base64url: \"\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n        json_string: \"\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF\",\n        e164: \"\u0627\u06CC 164 \u0646\u0645\u0628\u0631\",\n        jwt: \"\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC\",\n        template_literal: \"\u0627\u0646 \u067E\u0679\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0646\u0645\u0628\u0631\",\n        array: \"\u0622\u0631\u06D2\",\n        null: \"\u0646\u0644\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${issue.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n                }\n                return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${util.stringifyPrimitive(issue.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n                return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u06D2 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0627\u0635\u0631\"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n                return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u0627 ${adj}${issue.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u06D2 ${adj}${issue.minimum.toString()} ${sizing.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n                }\n                return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u0627 ${adj}${issue.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.prefix}\" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.suffix}\" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                if (_issue.format === \"includes\")\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.includes}\" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                if (_issue.format === \"regex\")\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${_issue.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                return `\u063A\u0644\u0637 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${issue.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n            case \"unrecognized_keys\":\n                return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${issue.keys.length > 1 ? \"\u0632\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`;\n            case \"invalid_union\":\n                return \"\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679\";\n            case \"invalid_element\":\n                return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`;\n            default:\n                return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"belgi\", verb: \"bo\u2018lishi kerak\" },\n        file: { unit: \"bayt\", verb: \"bo\u2018lishi kerak\" },\n        array: { unit: \"element\", verb: \"bo\u2018lishi kerak\" },\n        set: { unit: \"element\", verb: \"bo\u2018lishi kerak\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"kirish\",\n        email: \"elektron pochta manzili\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO sana va vaqti\",\n        date: \"ISO sana\",\n        time: \"ISO vaqt\",\n        duration: \"ISO davomiylik\",\n        ipv4: \"IPv4 manzil\",\n        ipv6: \"IPv6 manzil\",\n        mac: \"MAC manzil\",\n        cidrv4: \"IPv4 diapazon\",\n        cidrv6: \"IPv6 diapazon\",\n        base64: \"base64 kodlangan satr\",\n        base64url: \"base64url kodlangan satr\",\n        json_string: \"JSON satr\",\n        e164: \"E.164 raqam\",\n        jwt: \"JWT\",\n        template_literal: \"kirish\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"raqam\",\n        array: \"massiv\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Noto\u2018g\u2018ri kirish: kutilgan instanceof ${issue.expected}, qabul qilingan ${received}`;\n                }\n                return `Noto\u2018g\u2018ri kirish: kutilgan ${expected}, qabul qilingan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Noto\u2018g\u2018ri kirish: kutilgan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Noto\u2018g\u2018ri variant: quyidagilardan biri kutilgan ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()} ${sizing.unit} ${sizing.verb}`;\n                return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                }\n                return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Noto\u2018g\u2018ri satr: \"${_issue.prefix}\" bilan boshlanishi kerak`;\n                if (_issue.format === \"ends_with\")\n                    return `Noto\u2018g\u2018ri satr: \"${_issue.suffix}\" bilan tugashi kerak`;\n                if (_issue.format === \"includes\")\n                    return `Noto\u2018g\u2018ri satr: \"${_issue.includes}\" ni o\u2018z ichiga olishi kerak`;\n                if (_issue.format === \"regex\")\n                    return `Noto\u2018g\u2018ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`;\n                return `Noto\u2018g\u2018ri ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Noto\u2018g\u2018ri raqam: ${issue.divisor} ning karralisi bo\u2018lishi kerak`;\n            case \"unrecognized_keys\":\n                return `Noma\u2019lum kalit${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} dagi kalit noto\u2018g\u2018ri`;\n            case \"invalid_union\":\n                return \"Noto\u2018g\u2018ri kirish\";\n            case \"invalid_element\":\n                return `${issue.origin} da noto\u2018g\u2018ri qiymat`;\n            default:\n                return `Noto\u2018g\u2018ri kirish`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"k\u00FD t\u1EF1\", verb: \"c\u00F3\" },\n        file: { unit: \"byte\", verb: \"c\u00F3\" },\n        array: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n        set: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0111\u1EA7u v\u00E0o\",\n        email: \"\u0111\u1ECBa ch\u1EC9 email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ng\u00E0y gi\u1EDD ISO\",\n        date: \"ng\u00E0y ISO\",\n        time: \"gi\u1EDD ISO\",\n        duration: \"kho\u1EA3ng th\u1EDDi gian ISO\",\n        ipv4: \"\u0111\u1ECBa ch\u1EC9 IPv4\",\n        ipv6: \"\u0111\u1ECBa ch\u1EC9 IPv6\",\n        cidrv4: \"d\u1EA3i IPv4\",\n        cidrv6: \"d\u1EA3i IPv6\",\n        base64: \"chu\u1ED7i m\u00E3 h\u00F3a base64\",\n        base64url: \"chu\u1ED7i m\u00E3 h\u00F3a base64url\",\n        json_string: \"chu\u1ED7i JSON\",\n        e164: \"s\u1ED1 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0111\u1EA7u v\u00E0o\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"s\u1ED1\",\n        array: \"m\u1EA3ng\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${issue.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;\n                }\n                return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${util.stringifyPrimitive(issue.values[0])}`;\n                return `T\u00F9y ch\u1ECDn kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\u00E1c gi\u00E1 tr\u1ECB ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"ph\u1EA7n t\u1EED\"}`;\n                return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\u00FAc b\u1EB1ng \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} kh\u00F4ng h\u1EE3p l\u1EC7`;\n            }\n            case \"not_multiple_of\":\n                return `S\u1ED1 kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\u00E0 b\u1ED9i s\u1ED1 c\u1EE7a ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kh\u00F3a kh\u00F4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kh\u00F3a kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7\";\n            case \"invalid_element\":\n                return `Gi\u00E1 tr\u1ECB kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n            default:\n                return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u5B57\u7B26\", verb: \"\u5305\u542B\" },\n        file: { unit: \"\u5B57\u8282\", verb: \"\u5305\u542B\" },\n        array: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n        set: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u8F93\u5165\",\n        email: \"\u7535\u5B50\u90AE\u4EF6\",\n        url: \"URL\",\n        emoji: \"\u8868\u60C5\u7B26\u53F7\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO\u65E5\u671F\u65F6\u95F4\",\n        date: \"ISO\u65E5\u671F\",\n        time: \"ISO\u65F6\u95F4\",\n        duration: \"ISO\u65F6\u957F\",\n        ipv4: \"IPv4\u5730\u5740\",\n        ipv6: \"IPv6\u5730\u5740\",\n        cidrv4: \"IPv4\u7F51\u6BB5\",\n        cidrv6: \"IPv6\u7F51\u6BB5\",\n        base64: \"base64\u7F16\u7801\u5B57\u7B26\u4E32\",\n        base64url: \"base64url\u7F16\u7801\u5B57\u7B26\u4E32\",\n        json_string: \"JSON\u5B57\u7B26\u4E32\",\n        e164: \"E.164\u53F7\u7801\",\n        jwt: \"JWT\",\n        template_literal: \"\u8F93\u5165\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u6570\u5B57\",\n        array: \"\u6570\u7EC4\",\n        null: \"\u7A7A\u503C(null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${issue.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;\n                }\n                return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u4E2A\u5143\u7D20\"}`;\n                return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.prefix}\" \u5F00\u5934`;\n                if (_issue.format === \"ends_with\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.suffix}\" \u7ED3\u5C3E`;\n                if (_issue.format === \"includes\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${_issue.pattern}`;\n                return `\u65E0\u6548${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${issue.divisor} \u7684\u500D\u6570`;\n            case \"unrecognized_keys\":\n                return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`;\n            case \"invalid_union\":\n                return \"\u65E0\u6548\u8F93\u5165\";\n            case \"invalid_element\":\n                return `${issue.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`;\n            default:\n                return `\u65E0\u6548\u8F93\u5165`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u5B57\u5143\", verb: \"\u64C1\u6709\" },\n        file: { unit: \"\u4F4D\u5143\u7D44\", verb: \"\u64C1\u6709\" },\n        array: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n        set: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u8F38\u5165\",\n        email: \"\u90F5\u4EF6\u5730\u5740\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u65E5\u671F\u6642\u9593\",\n        date: \"ISO \u65E5\u671F\",\n        time: \"ISO \u6642\u9593\",\n        duration: \"ISO \u671F\u9593\",\n        ipv4: \"IPv4 \u4F4D\u5740\",\n        ipv6: \"IPv6 \u4F4D\u5740\",\n        cidrv4: \"IPv4 \u7BC4\u570D\",\n        cidrv6: \"IPv6 \u7BC4\u570D\",\n        base64: \"base64 \u7DE8\u78BC\u5B57\u4E32\",\n        base64url: \"base64url \u7DE8\u78BC\u5B57\u4E32\",\n        json_string: \"JSON \u5B57\u4E32\",\n        e164: \"E.164 \u6578\u503C\",\n        jwt: \"JWT\",\n        template_literal: \"\u8F38\u5165\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${issue.expected}\uFF0C\u4F46\u6536\u5230 ${received}`;\n                }\n                return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${expected}\uFF0C\u4F46\u6536\u5230 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u500B\u5143\u7D20\"}`;\n                return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.prefix}\" \u958B\u982D`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.suffix}\" \u7D50\u5C3E`;\n                if (_issue.format === \"includes\")\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${_issue.pattern}`;\n                return `\u7121\u6548\u7684 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${issue.divisor} \u7684\u500D\u6578`;\n            case \"unrecognized_keys\":\n                return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${issue.keys.length > 1 ? \"\u5011\" : \"\"}\uFF1A${util.joinValues(issue.keys, \"\u3001\")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`;\n            case \"invalid_union\":\n                return \"\u7121\u6548\u7684\u8F38\u5165\u503C\";\n            case \"invalid_element\":\n                return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`;\n            default:\n                return `\u7121\u6548\u7684\u8F38\u5165\u503C`;\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = default_1;\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u00E0mi\", verb: \"n\u00ED\" },\n        file: { unit: \"bytes\", verb: \"n\u00ED\" },\n        array: { unit: \"nkan\", verb: \"n\u00ED\" },\n        set: { unit: \"nkan\", verb: \"n\u00ED\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u1EB9\u0300r\u1ECD \u00ECb\u00E1w\u1ECDl\u00E9\",\n        email: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC \u00ECm\u1EB9\u0301l\u00EC\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u00E0k\u00F3k\u00F2 ISO\",\n        date: \"\u1ECDj\u1ECD\u0301 ISO\",\n        time: \"\u00E0k\u00F3k\u00F2 ISO\",\n        duration: \"\u00E0k\u00F3k\u00F2 t\u00F3 p\u00E9 ISO\",\n        ipv4: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC IPv4\",\n        ipv6: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC IPv6\",\n        cidrv4: \"\u00E0gb\u00E8gb\u00E8 IPv4\",\n        cidrv6: \"\u00E0gb\u00E8gb\u00E8 IPv6\",\n        base64: \"\u1ECD\u0300r\u1ECD\u0300 t\u00ED a k\u1ECD\u0301 n\u00ED base64\",\n        base64url: \"\u1ECD\u0300r\u1ECD\u0300 base64url\",\n        json_string: \"\u1ECD\u0300r\u1ECD\u0300 JSON\",\n        e164: \"n\u1ECD\u0301mb\u00E0 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u1EB9\u0300r\u1ECD \u00ECb\u00E1w\u1ECDl\u00E9\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"n\u1ECD\u0301mb\u00E0\",\n        array: \"akop\u1ECD\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi instanceof ${issue.expected}, \u00E0m\u1ECD\u0300 a r\u00ED ${received}`;\n                }\n                return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi ${expected}, \u00E0m\u1ECD\u0300 a r\u00ED ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u00C0\u1E63\u00E0y\u00E0n a\u1E63\u00EC\u1E63e: yan \u1ECD\u0300kan l\u00E1ra ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `T\u00F3 p\u1ECD\u0300 j\u00F9: a n\u00ED l\u00E1ti j\u1EB9\u0301 p\u00E9 ${issue.origin ?? \"iye\"} ${sizing.verb} ${adj}${issue.maximum} ${sizing.unit}`;\n                return `T\u00F3 p\u1ECD\u0300 j\u00F9: a n\u00ED l\u00E1ti j\u1EB9\u0301 ${adj}${issue.maximum}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `K\u00E9r\u00E9 ju: a n\u00ED l\u00E1ti j\u1EB9\u0301 p\u00E9 ${issue.origin} ${sizing.verb} ${adj}${issue.minimum} ${sizing.unit}`;\n                return `K\u00E9r\u00E9 ju: a n\u00ED l\u00E1ti j\u1EB9\u0301 ${adj}${issue.minimum}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u1EB9\u0300r\u1EB9\u0300 p\u1EB9\u0300l\u00FA \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\u00ED p\u1EB9\u0300l\u00FA \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\u00ED \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u00E1 \u00E0p\u1EB9\u1EB9r\u1EB9 mu ${_issue.pattern}`;\n                return `A\u1E63\u00EC\u1E63e: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `N\u1ECD\u0301mb\u00E0 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 j\u1EB9\u0301 \u00E8y\u00E0 p\u00EDp\u00EDn ti ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `B\u1ECDt\u00ECn\u00EC \u00E0\u00ECm\u1ECD\u0300: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `B\u1ECDt\u00ECn\u00EC a\u1E63\u00EC\u1E63e n\u00EDn\u00FA ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e\";\n            case \"invalid_element\":\n                return `Iye a\u1E63\u00EC\u1E63e n\u00EDn\u00FA ${issue.origin}`;\n            default:\n                return \"\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e\";\n        }\n    };\n};\nfunction default_1() {\n    return {\n        localeError: error(),\n    };\n}\nmodule.exports = exports.default;\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.yo = exports.zhTW = exports.zhCN = exports.vi = exports.uz = exports.ur = exports.uk = exports.ua = exports.tr = exports.th = exports.ta = exports.sv = exports.sl = exports.ru = exports.pt = exports.pl = exports.ps = exports.ota = exports.no = exports.nl = exports.ms = exports.mk = exports.lt = exports.ko = exports.km = exports.kh = exports.ka = exports.ja = exports.it = exports.is = exports.id = exports.hy = exports.hu = exports.he = exports.frCA = exports.fr = exports.fi = exports.fa = exports.es = exports.eo = exports.en = exports.de = exports.da = exports.cs = exports.ca = exports.bg = exports.be = exports.az = exports.ar = void 0;\nvar ar_js_1 = require(\"./ar.cjs\");\nObject.defineProperty(exports, \"ar\", { enumerable: true, get: function () { return __importDefault(ar_js_1).default; } });\nvar az_js_1 = require(\"./az.cjs\");\nObject.defineProperty(exports, \"az\", { enumerable: true, get: function () { return __importDefault(az_js_1).default; } });\nvar be_js_1 = require(\"./be.cjs\");\nObject.defineProperty(exports, \"be\", { enumerable: true, get: function () { return __importDefault(be_js_1).default; } });\nvar bg_js_1 = require(\"./bg.cjs\");\nObject.defineProperty(exports, \"bg\", { enumerable: true, get: function () { return __importDefault(bg_js_1).default; } });\nvar ca_js_1 = require(\"./ca.cjs\");\nObject.defineProperty(exports, \"ca\", { enumerable: true, get: function () { return __importDefault(ca_js_1).default; } });\nvar cs_js_1 = require(\"./cs.cjs\");\nObject.defineProperty(exports, \"cs\", { enumerable: true, get: function () { return __importDefault(cs_js_1).default; } });\nvar da_js_1 = require(\"./da.cjs\");\nObject.defineProperty(exports, \"da\", { enumerable: true, get: function () { return __importDefault(da_js_1).default; } });\nvar de_js_1 = require(\"./de.cjs\");\nObject.defineProperty(exports, \"de\", { enumerable: true, get: function () { return __importDefault(de_js_1).default; } });\nvar en_js_1 = require(\"./en.cjs\");\nObject.defineProperty(exports, \"en\", { enumerable: true, get: function () { return __importDefault(en_js_1).default; } });\nvar eo_js_1 = require(\"./eo.cjs\");\nObject.defineProperty(exports, \"eo\", { enumerable: true, get: function () { return __importDefault(eo_js_1).default; } });\nvar es_js_1 = require(\"./es.cjs\");\nObject.defineProperty(exports, \"es\", { enumerable: true, get: function () { return __importDefault(es_js_1).default; } });\nvar fa_js_1 = require(\"./fa.cjs\");\nObject.defineProperty(exports, \"fa\", { enumerable: true, get: function () { return __importDefault(fa_js_1).default; } });\nvar fi_js_1 = require(\"./fi.cjs\");\nObject.defineProperty(exports, \"fi\", { enumerable: true, get: function () { return __importDefault(fi_js_1).default; } });\nvar fr_js_1 = require(\"./fr.cjs\");\nObject.defineProperty(exports, \"fr\", { enumerable: true, get: function () { return __importDefault(fr_js_1).default; } });\nvar fr_CA_js_1 = require(\"./fr-CA.cjs\");\nObject.defineProperty(exports, \"frCA\", { enumerable: true, get: function () { return __importDefault(fr_CA_js_1).default; } });\nvar he_js_1 = require(\"./he.cjs\");\nObject.defineProperty(exports, \"he\", { enumerable: true, get: function () { return __importDefault(he_js_1).default; } });\nvar hu_js_1 = require(\"./hu.cjs\");\nObject.defineProperty(exports, \"hu\", { enumerable: true, get: function () { return __importDefault(hu_js_1).default; } });\nvar hy_js_1 = require(\"./hy.cjs\");\nObject.defineProperty(exports, \"hy\", { enumerable: true, get: function () { return __importDefault(hy_js_1).default; } });\nvar id_js_1 = require(\"./id.cjs\");\nObject.defineProperty(exports, \"id\", { enumerable: true, get: function () { return __importDefault(id_js_1).default; } });\nvar is_js_1 = require(\"./is.cjs\");\nObject.defineProperty(exports, \"is\", { enumerable: true, get: function () { return __importDefault(is_js_1).default; } });\nvar it_js_1 = require(\"./it.cjs\");\nObject.defineProperty(exports, \"it\", { enumerable: true, get: function () { return __importDefault(it_js_1).default; } });\nvar ja_js_1 = require(\"./ja.cjs\");\nObject.defineProperty(exports, \"ja\", { enumerable: true, get: function () { return __importDefault(ja_js_1).default; } });\nvar ka_js_1 = require(\"./ka.cjs\");\nObject.defineProperty(exports, \"ka\", { enumerable: true, get: function () { return __importDefault(ka_js_1).default; } });\nvar kh_js_1 = require(\"./kh.cjs\");\nObject.defineProperty(exports, \"kh\", { enumerable: true, get: function () { return __importDefault(kh_js_1).default; } });\nvar km_js_1 = require(\"./km.cjs\");\nObject.defineProperty(exports, \"km\", { enumerable: true, get: function () { return __importDefault(km_js_1).default; } });\nvar ko_js_1 = require(\"./ko.cjs\");\nObject.defineProperty(exports, \"ko\", { enumerable: true, get: function () { return __importDefault(ko_js_1).default; } });\nvar lt_js_1 = require(\"./lt.cjs\");\nObject.defineProperty(exports, \"lt\", { enumerable: true, get: function () { return __importDefault(lt_js_1).default; } });\nvar mk_js_1 = require(\"./mk.cjs\");\nObject.defineProperty(exports, \"mk\", { enumerable: true, get: function () { return __importDefault(mk_js_1).default; } });\nvar ms_js_1 = require(\"./ms.cjs\");\nObject.defineProperty(exports, \"ms\", { enumerable: true, get: function () { return __importDefault(ms_js_1).default; } });\nvar nl_js_1 = require(\"./nl.cjs\");\nObject.defineProperty(exports, \"nl\", { enumerable: true, get: function () { return __importDefault(nl_js_1).default; } });\nvar no_js_1 = require(\"./no.cjs\");\nObject.defineProperty(exports, \"no\", { enumerable: true, get: function () { return __importDefault(no_js_1).default; } });\nvar ota_js_1 = require(\"./ota.cjs\");\nObject.defineProperty(exports, \"ota\", { enumerable: true, get: function () { return __importDefault(ota_js_1).default; } });\nvar ps_js_1 = require(\"./ps.cjs\");\nObject.defineProperty(exports, \"ps\", { enumerable: true, get: function () { return __importDefault(ps_js_1).default; } });\nvar pl_js_1 = require(\"./pl.cjs\");\nObject.defineProperty(exports, \"pl\", { enumerable: true, get: function () { return __importDefault(pl_js_1).default; } });\nvar pt_js_1 = require(\"./pt.cjs\");\nObject.defineProperty(exports, \"pt\", { enumerable: true, get: function () { return __importDefault(pt_js_1).default; } });\nvar ru_js_1 = require(\"./ru.cjs\");\nObject.defineProperty(exports, \"ru\", { enumerable: true, get: function () { return __importDefault(ru_js_1).default; } });\nvar sl_js_1 = require(\"./sl.cjs\");\nObject.defineProperty(exports, \"sl\", { enumerable: true, get: function () { return __importDefault(sl_js_1).default; } });\nvar sv_js_1 = require(\"./sv.cjs\");\nObject.defineProperty(exports, \"sv\", { enumerable: true, get: function () { return __importDefault(sv_js_1).default; } });\nvar ta_js_1 = require(\"./ta.cjs\");\nObject.defineProperty(exports, \"ta\", { enumerable: true, get: function () { return __importDefault(ta_js_1).default; } });\nvar th_js_1 = require(\"./th.cjs\");\nObject.defineProperty(exports, \"th\", { enumerable: true, get: function () { return __importDefault(th_js_1).default; } });\nvar tr_js_1 = require(\"./tr.cjs\");\nObject.defineProperty(exports, \"tr\", { enumerable: true, get: function () { return __importDefault(tr_js_1).default; } });\nvar ua_js_1 = require(\"./ua.cjs\");\nObject.defineProperty(exports, \"ua\", { enumerable: true, get: function () { return __importDefault(ua_js_1).default; } });\nvar uk_js_1 = require(\"./uk.cjs\");\nObject.defineProperty(exports, \"uk\", { enumerable: true, get: function () { return __importDefault(uk_js_1).default; } });\nvar ur_js_1 = require(\"./ur.cjs\");\nObject.defineProperty(exports, \"ur\", { enumerable: true, get: function () { return __importDefault(ur_js_1).default; } });\nvar uz_js_1 = require(\"./uz.cjs\");\nObject.defineProperty(exports, \"uz\", { enumerable: true, get: function () { return __importDefault(uz_js_1).default; } });\nvar vi_js_1 = require(\"./vi.cjs\");\nObject.defineProperty(exports, \"vi\", { enumerable: true, get: function () { return __importDefault(vi_js_1).default; } });\nvar zh_CN_js_1 = require(\"./zh-CN.cjs\");\nObject.defineProperty(exports, \"zhCN\", { enumerable: true, get: function () { return __importDefault(zh_CN_js_1).default; } });\nvar zh_TW_js_1 = require(\"./zh-TW.cjs\");\nObject.defineProperty(exports, \"zhTW\", { enumerable: true, get: function () { return __importDefault(zh_TW_js_1).default; } });\nvar yo_js_1 = require(\"./yo.cjs\");\nObject.defineProperty(exports, \"yo\", { enumerable: true, get: function () { return __importDefault(yo_js_1).default; } });\n", "\"use strict\";\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.globalRegistry = exports.$ZodRegistry = exports.$input = exports.$output = void 0;\nexports.registry = registry;\nexports.$output = Symbol(\"ZodOutput\");\nexports.$input = Symbol(\"ZodInput\");\nclass $ZodRegistry {\n    constructor() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            const f = { ...pm, ...this._map.get(schema) };\n            return Object.keys(f).length ? f : undefined;\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\nexports.$ZodRegistry = $ZodRegistry;\n// registries\nfunction registry() {\n    return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexports.globalRegistry = globalThis.__zod_globalRegistry;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TimePrecision = void 0;\nexports._string = _string;\nexports._coercedString = _coercedString;\nexports._email = _email;\nexports._guid = _guid;\nexports._uuid = _uuid;\nexports._uuidv4 = _uuidv4;\nexports._uuidv6 = _uuidv6;\nexports._uuidv7 = _uuidv7;\nexports._url = _url;\nexports._emoji = _emoji;\nexports._nanoid = _nanoid;\nexports._cuid = _cuid;\nexports._cuid2 = _cuid2;\nexports._ulid = _ulid;\nexports._xid = _xid;\nexports._ksuid = _ksuid;\nexports._ipv4 = _ipv4;\nexports._ipv6 = _ipv6;\nexports._mac = _mac;\nexports._cidrv4 = _cidrv4;\nexports._cidrv6 = _cidrv6;\nexports._base64 = _base64;\nexports._base64url = _base64url;\nexports._e164 = _e164;\nexports._jwt = _jwt;\nexports._isoDateTime = _isoDateTime;\nexports._isoDate = _isoDate;\nexports._isoTime = _isoTime;\nexports._isoDuration = _isoDuration;\nexports._number = _number;\nexports._coercedNumber = _coercedNumber;\nexports._int = _int;\nexports._float32 = _float32;\nexports._float64 = _float64;\nexports._int32 = _int32;\nexports._uint32 = _uint32;\nexports._boolean = _boolean;\nexports._coercedBoolean = _coercedBoolean;\nexports._bigint = _bigint;\nexports._coercedBigint = _coercedBigint;\nexports._int64 = _int64;\nexports._uint64 = _uint64;\nexports._symbol = _symbol;\nexports._undefined = _undefined;\nexports._null = _null;\nexports._any = _any;\nexports._unknown = _unknown;\nexports._never = _never;\nexports._void = _void;\nexports._date = _date;\nexports._coercedDate = _coercedDate;\nexports._nan = _nan;\nexports._lt = _lt;\nexports._lte = _lte;\nexports._max = _lte;\nexports._lte = _lte;\nexports._max = _lte;\nexports._gt = _gt;\nexports._gte = _gte;\nexports._min = _gte;\nexports._gte = _gte;\nexports._min = _gte;\nexports._positive = _positive;\nexports._negative = _negative;\nexports._nonpositive = _nonpositive;\nexports._nonnegative = _nonnegative;\nexports._multipleOf = _multipleOf;\nexports._maxSize = _maxSize;\nexports._minSize = _minSize;\nexports._size = _size;\nexports._maxLength = _maxLength;\nexports._minLength = _minLength;\nexports._length = _length;\nexports._regex = _regex;\nexports._lowercase = _lowercase;\nexports._uppercase = _uppercase;\nexports._includes = _includes;\nexports._startsWith = _startsWith;\nexports._endsWith = _endsWith;\nexports._property = _property;\nexports._mime = _mime;\nexports._overwrite = _overwrite;\nexports._normalize = _normalize;\nexports._trim = _trim;\nexports._toLowerCase = _toLowerCase;\nexports._toUpperCase = _toUpperCase;\nexports._slugify = _slugify;\nexports._array = _array;\nexports._union = _union;\nexports._xor = _xor;\nexports._discriminatedUnion = _discriminatedUnion;\nexports._intersection = _intersection;\nexports._tuple = _tuple;\nexports._record = _record;\nexports._map = _map;\nexports._set = _set;\nexports._enum = _enum;\nexports._nativeEnum = _nativeEnum;\nexports._literal = _literal;\nexports._file = _file;\nexports._transform = _transform;\nexports._optional = _optional;\nexports._nullable = _nullable;\nexports._default = _default;\nexports._nonoptional = _nonoptional;\nexports._success = _success;\nexports._catch = _catch;\nexports._pipe = _pipe;\nexports._readonly = _readonly;\nexports._templateLiteral = _templateLiteral;\nexports._lazy = _lazy;\nexports._promise = _promise;\nexports._custom = _custom;\nexports._refine = _refine;\nexports._superRefine = _superRefine;\nexports._check = _check;\nexports.describe = describe;\nexports.meta = meta;\nexports._stringbool = _stringbool;\nexports._stringFormat = _stringFormat;\nconst checks = __importStar(require(\"./checks.cjs\"));\nconst registries = __importStar(require(\"./registries.cjs\"));\nconst schemas = __importStar(require(\"./schemas.cjs\"));\nconst util = __importStar(require(\"./util.cjs\"));\n// @__NO_SIDE_EFFECTS__\nfunction _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _mac(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"mac\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexports.TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nfunction _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _positive(params) {\n    return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nfunction _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nfunction _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nfunction _nonnegative(params) {\n    return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nfunction _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nfunction _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nfunction _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nfunction _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nfunction _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nfunction _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nfunction _slugify() {\n    return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nfunction _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nfunction _xor(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nfunction _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nfunction _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nfunction _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\n// @__NO_SIDE_EFFECTS__\nfunction _superRefine(fn) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    });\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nfunction _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nfunction describe(description) {\n    const ch = new checks.$ZodCheck({ check: \"describe\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, description });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nfunction meta(metadata) {\n    const ch = new checks.$ZodCheck({ check: \"meta\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, ...metadata });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nfunction _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    return codec;\n}\n// @__NO_SIDE_EFFECTS__\nfunction _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createStandardJSONSchemaMethod = exports.createToJSONSchemaMethod = void 0;\nexports.initializeContext = initializeContext;\nexports.process = process;\nexports.extractDefs = extractDefs;\nexports.finalize = finalize;\nconst registries_js_1 = require(\"./registries.cjs\");\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n//   return {\n//     processor: inputs.processor,\n//     metadataRegistry: inputs.metadata ?? globalRegistry,\n//     target: inputs.target ?? \"draft-2020-12\",\n//     unrepresentable: inputs.unrepresentable ?? \"throw\",\n//   };\n// }\nfunction initializeContext(params) {\n    // Normalize target: convert old non-hyphenated versions to hyphenated versions\n    let target = params?.target ?? \"draft-2020-12\";\n    if (target === \"draft-4\")\n        target = \"draft-04\";\n    if (target === \"draft-7\")\n        target = \"draft-07\";\n    return {\n        processors: params.processors ?? {},\n        metadataRegistry: params?.metadata ?? registries_js_1.globalRegistry,\n        target,\n        unrepresentable: params?.unrepresentable ?? \"throw\",\n        override: params?.override ?? (() => { }),\n        io: params?.io ?? \"output\",\n        counter: 0,\n        seen: new Map(),\n        cycles: params?.cycles ?? \"ref\",\n        reused: params?.reused ?? \"inline\",\n        external: params?.external ?? undefined,\n    };\n}\nfunction process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n    var _a;\n    const def = schema._zod.def;\n    // check for schema in seens\n    const seen = ctx.seen.get(schema);\n    if (seen) {\n        seen.count++;\n        // check if cycle\n        const isCycle = _params.schemaPath.includes(schema);\n        if (isCycle) {\n            seen.cycle = _params.path;\n        }\n        return seen.schema;\n    }\n    // initialize\n    const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n    ctx.seen.set(schema, result);\n    // custom method overrides default behavior\n    const overrideSchema = schema._zod.toJSONSchema?.();\n    if (overrideSchema) {\n        result.schema = overrideSchema;\n    }\n    else {\n        const params = {\n            ..._params,\n            schemaPath: [..._params.schemaPath, schema],\n            path: _params.path,\n        };\n        if (schema._zod.processJSONSchema) {\n            schema._zod.processJSONSchema(ctx, result.schema, params);\n        }\n        else {\n            const _json = result.schema;\n            const processor = ctx.processors[def.type];\n            if (!processor) {\n                throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n            }\n            processor(schema, ctx, _json, params);\n        }\n        const parent = schema._zod.parent;\n        if (parent) {\n            // Also set ref if processor didn't (for inheritance)\n            if (!result.ref)\n                result.ref = parent;\n            process(parent, ctx, params);\n            ctx.seen.get(parent).isParent = true;\n        }\n    }\n    // metadata\n    const meta = ctx.metadataRegistry.get(schema);\n    if (meta)\n        Object.assign(result.schema, meta);\n    if (ctx.io === \"input\" && isTransforming(schema)) {\n        // examples/defaults only apply to output type of pipe\n        delete result.schema.examples;\n        delete result.schema.default;\n    }\n    // set prefault as default\n    if (ctx.io === \"input\" && result.schema._prefault)\n        (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n    delete result.schema._prefault;\n    // pulling fresh from ctx.seen in case it was overwritten\n    const _result = ctx.seen.get(schema);\n    return _result.schema;\n}\nfunction extractDefs(ctx, schema\n// params: EmitParams\n) {\n    // iterate over seen map;\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // Track ids to detect duplicates across different schemas\n    const idToSchema = new Map();\n    for (const entry of ctx.seen.entries()) {\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            const existing = idToSchema.get(id);\n            if (existing && existing !== entry[0]) {\n                throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n            }\n            idToSchema.set(id, entry[0]);\n        }\n    }\n    // returns a ref to the schema\n    // defId will be empty if the ref points to an external schema (or #)\n    const makeURI = (entry) => {\n        // comparing the seen objects because sometimes\n        // multiple schemas map to the same seen object.\n        // e.g. lazy\n        // external is configured\n        const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n        if (ctx.external) {\n            const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n            // check if schema is in the external registry\n            const uriGenerator = ctx.external.uri ?? ((id) => id);\n            if (externalId) {\n                return { ref: uriGenerator(externalId) };\n            }\n            // otherwise, add to __shared\n            const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n            entry[1].defId = id; // set defId so it will be reused if needed\n            return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n        }\n        if (entry[1] === root) {\n            return { ref: \"#\" };\n        }\n        // self-contained schema\n        const uriPrefix = `#`;\n        const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n        const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n        return { defId, ref: defUriPrefix + defId };\n    };\n    // stored cached version in `def` property\n    // remove all properties, set $ref\n    const extractToDef = (entry) => {\n        // if the schema is already a reference, do not extract it\n        if (entry[1].schema.$ref) {\n            return;\n        }\n        const seen = entry[1];\n        const { ref, defId } = makeURI(entry);\n        seen.def = { ...seen.schema };\n        // defId won't be set if the schema is a reference to an external schema\n        // or if the schema is the root schema\n        if (defId)\n            seen.defId = defId;\n        // wipe away all properties except $ref\n        const schema = seen.schema;\n        for (const key in schema) {\n            delete schema[key];\n        }\n        schema.$ref = ref;\n    };\n    // throw on cycles\n    // break cycles\n    if (ctx.cycles === \"throw\") {\n        for (const entry of ctx.seen.entries()) {\n            const seen = entry[1];\n            if (seen.cycle) {\n                throw new Error(\"Cycle detected: \" +\n                    `#/${seen.cycle?.join(\"/\")}/<root>` +\n                    '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n            }\n        }\n    }\n    // extract schemas into $defs\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        // convert root schema to # $ref\n        if (schema === entry[0]) {\n            extractToDef(entry); // this has special handling for the root schema\n            continue;\n        }\n        // extract schemas that are in the external registry\n        if (ctx.external) {\n            const ext = ctx.external.registry.get(entry[0])?.id;\n            if (schema !== entry[0] && ext) {\n                extractToDef(entry);\n                continue;\n            }\n        }\n        // extract schemas with `id` meta\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            extractToDef(entry);\n            continue;\n        }\n        // break cycles\n        if (seen.cycle) {\n            // any\n            extractToDef(entry);\n            continue;\n        }\n        // extract reused schemas\n        if (seen.count > 1) {\n            if (ctx.reused === \"ref\") {\n                extractToDef(entry);\n                // biome-ignore lint:\n                continue;\n            }\n        }\n    }\n}\nfunction finalize(ctx, schema) {\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // flatten refs - inherit properties from parent schemas\n    const flattenRef = (zodSchema) => {\n        const seen = ctx.seen.get(zodSchema);\n        // already processed\n        if (seen.ref === null)\n            return;\n        const schema = seen.def ?? seen.schema;\n        const _cached = { ...schema };\n        const ref = seen.ref;\n        seen.ref = null; // prevent infinite recursion\n        if (ref) {\n            flattenRef(ref);\n            const refSeen = ctx.seen.get(ref);\n            const refSchema = refSeen.schema;\n            // merge referenced schema into current\n            if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n                // older drafts can't combine $ref with other properties\n                schema.allOf = schema.allOf ?? [];\n                schema.allOf.push(refSchema);\n            }\n            else {\n                Object.assign(schema, refSchema);\n            }\n            // restore child's own properties (child wins)\n            Object.assign(schema, _cached);\n            const isParentRef = zodSchema._zod.parent === ref;\n            // For parent chain, child is a refinement - remove parent-only properties\n            if (isParentRef) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (!(key in _cached)) {\n                        delete schema[key];\n                    }\n                }\n            }\n            // When ref was extracted to $defs, remove properties that match the definition\n            if (refSchema.$ref && refSeen.def) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n                        delete schema[key];\n                    }\n                }\n            }\n        }\n        // If parent was extracted (has $ref), propagate $ref to this schema\n        // This handles cases like: readonly().meta({id}).describe()\n        // where processor sets ref to innerType but parent should be referenced\n        const parent = zodSchema._zod.parent;\n        if (parent && parent !== ref) {\n            // Ensure parent is processed first so its def has inherited properties\n            flattenRef(parent);\n            const parentSeen = ctx.seen.get(parent);\n            if (parentSeen?.schema.$ref) {\n                schema.$ref = parentSeen.schema.$ref;\n                // De-duplicate with parent's definition\n                if (parentSeen.def) {\n                    for (const key in schema) {\n                        if (key === \"$ref\" || key === \"allOf\")\n                            continue;\n                        if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n                            delete schema[key];\n                        }\n                    }\n                }\n            }\n        }\n        // execute overrides\n        ctx.override({\n            zodSchema: zodSchema,\n            jsonSchema: schema,\n            path: seen.path ?? [],\n        });\n    };\n    for (const entry of [...ctx.seen.entries()].reverse()) {\n        flattenRef(entry[0]);\n    }\n    const result = {};\n    if (ctx.target === \"draft-2020-12\") {\n        result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n    }\n    else if (ctx.target === \"draft-07\") {\n        result.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (ctx.target === \"draft-04\") {\n        result.$schema = \"http://json-schema.org/draft-04/schema#\";\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        // OpenAPI 3.0 schema objects should not include a $schema property\n    }\n    else {\n        // Arbitrary string values are allowed but won't have a $schema property set\n    }\n    if (ctx.external?.uri) {\n        const id = ctx.external.registry.get(schema)?.id;\n        if (!id)\n            throw new Error(\"Schema is missing an `id` property\");\n        result.$id = ctx.external.uri(id);\n    }\n    Object.assign(result, root.def ?? root.schema);\n    // build defs object\n    const defs = ctx.external?.defs ?? {};\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        if (seen.def && seen.defId) {\n            defs[seen.defId] = seen.def;\n        }\n    }\n    // set definitions in result\n    if (ctx.external) {\n    }\n    else {\n        if (Object.keys(defs).length > 0) {\n            if (ctx.target === \"draft-2020-12\") {\n                result.$defs = defs;\n            }\n            else {\n                result.definitions = defs;\n            }\n        }\n    }\n    try {\n        // this \"finalizes\" this schema and ensures all cycles are removed\n        // each call to finalize() is functionally independent\n        // though the seen map is shared\n        const finalized = JSON.parse(JSON.stringify(result));\n        Object.defineProperty(finalized, \"~standard\", {\n            value: {\n                ...schema[\"~standard\"],\n                jsonSchema: {\n                    input: (0, exports.createStandardJSONSchemaMethod)(schema, \"input\", ctx.processors),\n                    output: (0, exports.createStandardJSONSchemaMethod)(schema, \"output\", ctx.processors),\n                },\n            },\n            enumerable: false,\n            writable: false,\n        });\n        return finalized;\n    }\n    catch (_err) {\n        throw new Error(\"Error converting schema to JSON.\");\n    }\n}\nfunction isTransforming(_schema, _ctx) {\n    const ctx = _ctx ?? { seen: new Set() };\n    if (ctx.seen.has(_schema))\n        return false;\n    ctx.seen.add(_schema);\n    const def = _schema._zod.def;\n    if (def.type === \"transform\")\n        return true;\n    if (def.type === \"array\")\n        return isTransforming(def.element, ctx);\n    if (def.type === \"set\")\n        return isTransforming(def.valueType, ctx);\n    if (def.type === \"lazy\")\n        return isTransforming(def.getter(), ctx);\n    if (def.type === \"promise\" ||\n        def.type === \"optional\" ||\n        def.type === \"nonoptional\" ||\n        def.type === \"nullable\" ||\n        def.type === \"readonly\" ||\n        def.type === \"default\" ||\n        def.type === \"prefault\") {\n        return isTransforming(def.innerType, ctx);\n    }\n    if (def.type === \"intersection\") {\n        return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n    }\n    if (def.type === \"record\" || def.type === \"map\") {\n        return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n    }\n    if (def.type === \"pipe\") {\n        return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n    }\n    if (def.type === \"object\") {\n        for (const key in def.shape) {\n            if (isTransforming(def.shape[key], ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"union\") {\n        for (const option of def.options) {\n            if (isTransforming(option, ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"tuple\") {\n        for (const item of def.items) {\n            if (isTransforming(item, ctx))\n                return true;\n        }\n        if (def.rest && isTransforming(def.rest, ctx))\n            return true;\n        return false;\n    }\n    return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nconst createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n    const ctx = initializeContext({ ...params, processors });\n    process(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\nexports.createToJSONSchemaMethod = createToJSONSchemaMethod;\nconst createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n    const { libraryOptions, target } = params ?? {};\n    const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n    process(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\nexports.createStandardJSONSchemaMethod = createStandardJSONSchemaMethod;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.allProcessors = exports.lazyProcessor = exports.optionalProcessor = exports.promiseProcessor = exports.readonlyProcessor = exports.pipeProcessor = exports.catchProcessor = exports.prefaultProcessor = exports.defaultProcessor = exports.nonoptionalProcessor = exports.nullableProcessor = exports.recordProcessor = exports.tupleProcessor = exports.intersectionProcessor = exports.unionProcessor = exports.objectProcessor = exports.arrayProcessor = exports.setProcessor = exports.mapProcessor = exports.transformProcessor = exports.functionProcessor = exports.customProcessor = exports.successProcessor = exports.fileProcessor = exports.templateLiteralProcessor = exports.nanProcessor = exports.literalProcessor = exports.enumProcessor = exports.dateProcessor = exports.unknownProcessor = exports.anyProcessor = exports.neverProcessor = exports.voidProcessor = exports.undefinedProcessor = exports.nullProcessor = exports.symbolProcessor = exports.bigintProcessor = exports.booleanProcessor = exports.numberProcessor = exports.stringProcessor = void 0;\nexports.toJSONSchema = toJSONSchema;\nconst to_json_schema_js_1 = require(\"./to-json-schema.cjs\");\nconst util_js_1 = require(\"./util.cjs\");\nconst formatMap = {\n    guid: \"uuid\",\n    url: \"uri\",\n    datetime: \"date-time\",\n    json_string: \"json-string\",\n    regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nconst stringProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    json.type = \"string\";\n    const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n        .bag;\n    if (typeof minimum === \"number\")\n        json.minLength = minimum;\n    if (typeof maximum === \"number\")\n        json.maxLength = maximum;\n    // custom pattern overrides format\n    if (format) {\n        json.format = formatMap[format] ?? format;\n        if (json.format === \"\")\n            delete json.format; // empty format is not valid\n        // JSON Schema format: \"time\" requires a full time with offset or Z\n        // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n        if (format === \"time\") {\n            delete json.format;\n        }\n    }\n    if (contentEncoding)\n        json.contentEncoding = contentEncoding;\n    if (patterns && patterns.size > 0) {\n        const regexes = [...patterns];\n        if (regexes.length === 1)\n            json.pattern = regexes[0].source;\n        else if (regexes.length > 1) {\n            json.allOf = [\n                ...regexes.map((regex) => ({\n                    ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n                        ? { type: \"string\" }\n                        : {}),\n                    pattern: regex.source,\n                })),\n            ];\n        }\n    }\n};\nexports.stringProcessor = stringProcessor;\nconst numberProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n    if (typeof format === \"string\" && format.includes(\"int\"))\n        json.type = \"integer\";\n    else\n        json.type = \"number\";\n    if (typeof exclusiveMinimum === \"number\") {\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.minimum = exclusiveMinimum;\n            json.exclusiveMinimum = true;\n        }\n        else {\n            json.exclusiveMinimum = exclusiveMinimum;\n        }\n    }\n    if (typeof minimum === \"number\") {\n        json.minimum = minimum;\n        if (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") {\n            if (exclusiveMinimum >= minimum)\n                delete json.minimum;\n            else\n                delete json.exclusiveMinimum;\n        }\n    }\n    if (typeof exclusiveMaximum === \"number\") {\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.maximum = exclusiveMaximum;\n            json.exclusiveMaximum = true;\n        }\n        else {\n            json.exclusiveMaximum = exclusiveMaximum;\n        }\n    }\n    if (typeof maximum === \"number\") {\n        json.maximum = maximum;\n        if (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") {\n            if (exclusiveMaximum <= maximum)\n                delete json.maximum;\n            else\n                delete json.exclusiveMaximum;\n        }\n    }\n    if (typeof multipleOf === \"number\")\n        json.multipleOf = multipleOf;\n};\nexports.numberProcessor = numberProcessor;\nconst booleanProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexports.booleanProcessor = booleanProcessor;\nconst bigintProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"BigInt cannot be represented in JSON Schema\");\n    }\n};\nexports.bigintProcessor = bigintProcessor;\nconst symbolProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Symbols cannot be represented in JSON Schema\");\n    }\n};\nexports.symbolProcessor = symbolProcessor;\nconst nullProcessor = (_schema, ctx, json, _params) => {\n    if (ctx.target === \"openapi-3.0\") {\n        json.type = \"string\";\n        json.nullable = true;\n        json.enum = [null];\n    }\n    else {\n        json.type = \"null\";\n    }\n};\nexports.nullProcessor = nullProcessor;\nconst undefinedProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Undefined cannot be represented in JSON Schema\");\n    }\n};\nexports.undefinedProcessor = undefinedProcessor;\nconst voidProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Void cannot be represented in JSON Schema\");\n    }\n};\nexports.voidProcessor = voidProcessor;\nconst neverProcessor = (_schema, _ctx, json, _params) => {\n    json.not = {};\n};\nexports.neverProcessor = neverProcessor;\nconst anyProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexports.anyProcessor = anyProcessor;\nconst unknownProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexports.unknownProcessor = unknownProcessor;\nconst dateProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Date cannot be represented in JSON Schema\");\n    }\n};\nexports.dateProcessor = dateProcessor;\nconst enumProcessor = (schema, _ctx, json, _params) => {\n    const def = schema._zod.def;\n    const values = (0, util_js_1.getEnumValues)(def.entries);\n    // Number enums can have both string and number values\n    if (values.every((v) => typeof v === \"number\"))\n        json.type = \"number\";\n    if (values.every((v) => typeof v === \"string\"))\n        json.type = \"string\";\n    json.enum = values;\n};\nexports.enumProcessor = enumProcessor;\nconst literalProcessor = (schema, ctx, json, _params) => {\n    const def = schema._zod.def;\n    const vals = [];\n    for (const val of def.values) {\n        if (val === undefined) {\n            if (ctx.unrepresentable === \"throw\") {\n                throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n            }\n            else {\n                // do not add to vals\n            }\n        }\n        else if (typeof val === \"bigint\") {\n            if (ctx.unrepresentable === \"throw\") {\n                throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n            }\n            else {\n                vals.push(Number(val));\n            }\n        }\n        else {\n            vals.push(val);\n        }\n    }\n    if (vals.length === 0) {\n        // do nothing (an undefined literal was stripped)\n    }\n    else if (vals.length === 1) {\n        const val = vals[0];\n        json.type = val === null ? \"null\" : typeof val;\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.enum = [val];\n        }\n        else {\n            json.const = val;\n        }\n    }\n    else {\n        if (vals.every((v) => typeof v === \"number\"))\n            json.type = \"number\";\n        if (vals.every((v) => typeof v === \"string\"))\n            json.type = \"string\";\n        if (vals.every((v) => typeof v === \"boolean\"))\n            json.type = \"boolean\";\n        if (vals.every((v) => v === null))\n            json.type = \"null\";\n        json.enum = vals;\n    }\n};\nexports.literalProcessor = literalProcessor;\nconst nanProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"NaN cannot be represented in JSON Schema\");\n    }\n};\nexports.nanProcessor = nanProcessor;\nconst templateLiteralProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const pattern = schema._zod.pattern;\n    if (!pattern)\n        throw new Error(\"Pattern not found in template literal\");\n    _json.type = \"string\";\n    _json.pattern = pattern.source;\n};\nexports.templateLiteralProcessor = templateLiteralProcessor;\nconst fileProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const file = {\n        type: \"string\",\n        format: \"binary\",\n        contentEncoding: \"binary\",\n    };\n    const { minimum, maximum, mime } = schema._zod.bag;\n    if (minimum !== undefined)\n        file.minLength = minimum;\n    if (maximum !== undefined)\n        file.maxLength = maximum;\n    if (mime) {\n        if (mime.length === 1) {\n            file.contentMediaType = mime[0];\n            Object.assign(_json, file);\n        }\n        else {\n            Object.assign(_json, file); // shared props at root\n            _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n        }\n    }\n    else {\n        Object.assign(_json, file);\n    }\n};\nexports.fileProcessor = fileProcessor;\nconst successProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexports.successProcessor = successProcessor;\nconst customProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Custom types cannot be represented in JSON Schema\");\n    }\n};\nexports.customProcessor = customProcessor;\nconst functionProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Function types cannot be represented in JSON Schema\");\n    }\n};\nexports.functionProcessor = functionProcessor;\nconst transformProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Transforms cannot be represented in JSON Schema\");\n    }\n};\nexports.transformProcessor = transformProcessor;\nconst mapProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Map cannot be represented in JSON Schema\");\n    }\n};\nexports.mapProcessor = mapProcessor;\nconst setProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Set cannot be represented in JSON Schema\");\n    }\n};\nexports.setProcessor = setProcessor;\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nconst arrayProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    const { minimum, maximum } = schema._zod.bag;\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n    json.type = \"array\";\n    json.items = (0, to_json_schema_js_1.process)(def.element, ctx, { ...params, path: [...params.path, \"items\"] });\n};\nexports.arrayProcessor = arrayProcessor;\nconst objectProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    json.properties = {};\n    const shape = def.shape;\n    for (const key in shape) {\n        json.properties[key] = (0, to_json_schema_js_1.process)(shape[key], ctx, {\n            ...params,\n            path: [...params.path, \"properties\", key],\n        });\n    }\n    // required keys\n    const allKeys = new Set(Object.keys(shape));\n    const requiredKeys = new Set([...allKeys].filter((key) => {\n        const v = def.shape[key]._zod;\n        if (ctx.io === \"input\") {\n            return v.optin === undefined;\n        }\n        else {\n            return v.optout === undefined;\n        }\n    }));\n    if (requiredKeys.size > 0) {\n        json.required = Array.from(requiredKeys);\n    }\n    // catchall\n    if (def.catchall?._zod.def.type === \"never\") {\n        // strict\n        json.additionalProperties = false;\n    }\n    else if (!def.catchall) {\n        // regular\n        if (ctx.io === \"output\")\n            json.additionalProperties = false;\n    }\n    else if (def.catchall) {\n        json.additionalProperties = (0, to_json_schema_js_1.process)(def.catchall, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n};\nexports.objectProcessor = objectProcessor;\nconst unionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n    // This includes both z.xor() and discriminated unions\n    const isExclusive = def.inclusive === false;\n    const options = def.options.map((x, i) => (0, to_json_schema_js_1.process)(x, ctx, {\n        ...params,\n        path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n    }));\n    if (isExclusive) {\n        json.oneOf = options;\n    }\n    else {\n        json.anyOf = options;\n    }\n};\nexports.unionProcessor = unionProcessor;\nconst intersectionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const a = (0, to_json_schema_js_1.process)(def.left, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 0],\n    });\n    const b = (0, to_json_schema_js_1.process)(def.right, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 1],\n    });\n    const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n    const allOf = [\n        ...(isSimpleIntersection(a) ? a.allOf : [a]),\n        ...(isSimpleIntersection(b) ? b.allOf : [b]),\n    ];\n    json.allOf = allOf;\n};\nexports.intersectionProcessor = intersectionProcessor;\nconst tupleProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"array\";\n    const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n    const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n    const prefixItems = def.items.map((x, i) => (0, to_json_schema_js_1.process)(x, ctx, {\n        ...params,\n        path: [...params.path, prefixPath, i],\n    }));\n    const rest = def.rest\n        ? (0, to_json_schema_js_1.process)(def.rest, ctx, {\n            ...params,\n            path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n        })\n        : null;\n    if (ctx.target === \"draft-2020-12\") {\n        json.prefixItems = prefixItems;\n        if (rest) {\n            json.items = rest;\n        }\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        json.items = {\n            anyOf: prefixItems,\n        };\n        if (rest) {\n            json.items.anyOf.push(rest);\n        }\n        json.minItems = prefixItems.length;\n        if (!rest) {\n            json.maxItems = prefixItems.length;\n        }\n    }\n    else {\n        json.items = prefixItems;\n        if (rest) {\n            json.additionalItems = rest;\n        }\n    }\n    // length\n    const { minimum, maximum } = schema._zod.bag;\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n};\nexports.tupleProcessor = tupleProcessor;\nconst recordProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    // For looseRecord with regex patterns, use patternProperties\n    // This correctly represents \"only validate keys matching the pattern\" semantics\n    // and composes well with allOf (intersections)\n    const keyType = def.keyType;\n    const keyBag = keyType._zod.bag;\n    const patterns = keyBag?.patterns;\n    if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n        // Use patternProperties for looseRecord with regex patterns\n        const valueSchema = (0, to_json_schema_js_1.process)(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"patternProperties\", \"*\"],\n        });\n        json.patternProperties = {};\n        for (const pattern of patterns) {\n            json.patternProperties[pattern.source] = valueSchema;\n        }\n    }\n    else {\n        // Default behavior: use propertyNames + additionalProperties\n        if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n            json.propertyNames = (0, to_json_schema_js_1.process)(def.keyType, ctx, {\n                ...params,\n                path: [...params.path, \"propertyNames\"],\n            });\n        }\n        json.additionalProperties = (0, to_json_schema_js_1.process)(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n    // Add required for keys with discrete values (enum, literal, etc.)\n    const keyValues = keyType._zod.values;\n    if (keyValues) {\n        const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n        if (validKeyValues.length > 0) {\n            json.required = validKeyValues;\n        }\n    }\n};\nexports.recordProcessor = recordProcessor;\nconst nullableProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const inner = (0, to_json_schema_js_1.process)(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    if (ctx.target === \"openapi-3.0\") {\n        seen.ref = def.innerType;\n        json.nullable = true;\n    }\n    else {\n        json.anyOf = [inner, { type: \"null\" }];\n    }\n};\nexports.nullableProcessor = nullableProcessor;\nconst nonoptionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    (0, to_json_schema_js_1.process)(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexports.nonoptionalProcessor = nonoptionalProcessor;\nconst defaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    (0, to_json_schema_js_1.process)(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexports.defaultProcessor = defaultProcessor;\nconst prefaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    (0, to_json_schema_js_1.process)(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    if (ctx.io === \"input\")\n        json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexports.prefaultProcessor = prefaultProcessor;\nconst catchProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    (0, to_json_schema_js_1.process)(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    let catchValue;\n    try {\n        catchValue = def.catchValue(undefined);\n    }\n    catch {\n        throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n    }\n    json.default = catchValue;\n};\nexports.catchProcessor = catchProcessor;\nconst pipeProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    const innerType = ctx.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n    (0, to_json_schema_js_1.process)(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\nexports.pipeProcessor = pipeProcessor;\nconst readonlyProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    (0, to_json_schema_js_1.process)(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.readOnly = true;\n};\nexports.readonlyProcessor = readonlyProcessor;\nconst promiseProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    (0, to_json_schema_js_1.process)(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexports.promiseProcessor = promiseProcessor;\nconst optionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    (0, to_json_schema_js_1.process)(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexports.optionalProcessor = optionalProcessor;\nconst lazyProcessor = (schema, ctx, _json, params) => {\n    const innerType = schema._zod.innerType;\n    (0, to_json_schema_js_1.process)(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\nexports.lazyProcessor = lazyProcessor;\n// ==================== ALL PROCESSORS ====================\nexports.allProcessors = {\n    string: exports.stringProcessor,\n    number: exports.numberProcessor,\n    boolean: exports.booleanProcessor,\n    bigint: exports.bigintProcessor,\n    symbol: exports.symbolProcessor,\n    null: exports.nullProcessor,\n    undefined: exports.undefinedProcessor,\n    void: exports.voidProcessor,\n    never: exports.neverProcessor,\n    any: exports.anyProcessor,\n    unknown: exports.unknownProcessor,\n    date: exports.dateProcessor,\n    enum: exports.enumProcessor,\n    literal: exports.literalProcessor,\n    nan: exports.nanProcessor,\n    template_literal: exports.templateLiteralProcessor,\n    file: exports.fileProcessor,\n    success: exports.successProcessor,\n    custom: exports.customProcessor,\n    function: exports.functionProcessor,\n    transform: exports.transformProcessor,\n    map: exports.mapProcessor,\n    set: exports.setProcessor,\n    array: exports.arrayProcessor,\n    object: exports.objectProcessor,\n    union: exports.unionProcessor,\n    intersection: exports.intersectionProcessor,\n    tuple: exports.tupleProcessor,\n    record: exports.recordProcessor,\n    nullable: exports.nullableProcessor,\n    nonoptional: exports.nonoptionalProcessor,\n    default: exports.defaultProcessor,\n    prefault: exports.prefaultProcessor,\n    catch: exports.catchProcessor,\n    pipe: exports.pipeProcessor,\n    readonly: exports.readonlyProcessor,\n    promise: exports.promiseProcessor,\n    optional: exports.optionalProcessor,\n    lazy: exports.lazyProcessor,\n};\nfunction toJSONSchema(input, params) {\n    if (\"_idmap\" in input) {\n        // Registry case\n        const registry = input;\n        const ctx = (0, to_json_schema_js_1.initializeContext)({ ...params, processors: exports.allProcessors });\n        const defs = {};\n        // First pass: process all schemas to build the seen map\n        for (const entry of registry._idmap.entries()) {\n            const [_, schema] = entry;\n            (0, to_json_schema_js_1.process)(schema, ctx);\n        }\n        const schemas = {};\n        const external = {\n            registry,\n            uri: params?.uri,\n            defs,\n        };\n        // Update the context with external configuration\n        ctx.external = external;\n        // Second pass: emit each schema\n        for (const entry of registry._idmap.entries()) {\n            const [key, schema] = entry;\n            (0, to_json_schema_js_1.extractDefs)(ctx, schema);\n            schemas[key] = (0, to_json_schema_js_1.finalize)(ctx, schema);\n        }\n        if (Object.keys(defs).length > 0) {\n            const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            schemas.__shared = {\n                [defsSegment]: defs,\n            };\n        }\n        return { schemas };\n    }\n    // Single schema case\n    const ctx = (0, to_json_schema_js_1.initializeContext)({ ...params, processors: exports.allProcessors });\n    (0, to_json_schema_js_1.process)(input, ctx);\n    (0, to_json_schema_js_1.extractDefs)(ctx, input);\n    return (0, to_json_schema_js_1.finalize)(ctx, input);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JSONSchemaGenerator = void 0;\nconst json_schema_processors_js_1 = require(\"./json-schema-processors.cjs\");\nconst to_json_schema_js_1 = require(\"./to-json-schema.cjs\");\n/**\n * Legacy class-based interface for JSON Schema generation.\n * This class wraps the new functional implementation to provide backward compatibility.\n *\n * @deprecated Use the `toJSONSchema` function instead for new code.\n *\n * @example\n * ```typescript\n * // Legacy usage (still supported)\n * const gen = new JSONSchemaGenerator({ target: \"draft-07\" });\n * gen.process(schema);\n * const result = gen.emit(schema);\n *\n * // Preferred modern usage\n * const result = toJSONSchema(schema, { target: \"draft-07\" });\n * ```\n */\nclass JSONSchemaGenerator {\n    /** @deprecated Access via ctx instead */\n    get metadataRegistry() {\n        return this.ctx.metadataRegistry;\n    }\n    /** @deprecated Access via ctx instead */\n    get target() {\n        return this.ctx.target;\n    }\n    /** @deprecated Access via ctx instead */\n    get unrepresentable() {\n        return this.ctx.unrepresentable;\n    }\n    /** @deprecated Access via ctx instead */\n    get override() {\n        return this.ctx.override;\n    }\n    /** @deprecated Access via ctx instead */\n    get io() {\n        return this.ctx.io;\n    }\n    /** @deprecated Access via ctx instead */\n    get counter() {\n        return this.ctx.counter;\n    }\n    set counter(value) {\n        this.ctx.counter = value;\n    }\n    /** @deprecated Access via ctx instead */\n    get seen() {\n        return this.ctx.seen;\n    }\n    constructor(params) {\n        // Normalize target for internal context\n        let normalizedTarget = params?.target ?? \"draft-2020-12\";\n        if (normalizedTarget === \"draft-4\")\n            normalizedTarget = \"draft-04\";\n        if (normalizedTarget === \"draft-7\")\n            normalizedTarget = \"draft-07\";\n        this.ctx = (0, to_json_schema_js_1.initializeContext)({\n            processors: json_schema_processors_js_1.allProcessors,\n            target: normalizedTarget,\n            ...(params?.metadata && { metadata: params.metadata }),\n            ...(params?.unrepresentable && { unrepresentable: params.unrepresentable }),\n            ...(params?.override && { override: params.override }),\n            ...(params?.io && { io: params.io }),\n        });\n    }\n    /**\n     * Process a schema to prepare it for JSON Schema generation.\n     * This must be called before emit().\n     */\n    process(schema, _params = { path: [], schemaPath: [] }) {\n        return (0, to_json_schema_js_1.process)(schema, this.ctx, _params);\n    }\n    /**\n     * Emit the final JSON Schema after processing.\n     * Must call process() first.\n     */\n    emit(schema, _params) {\n        // Apply emit params to the context\n        if (_params) {\n            if (_params.cycles)\n                this.ctx.cycles = _params.cycles;\n            if (_params.reused)\n                this.ctx.reused = _params.reused;\n            if (_params.external)\n                this.ctx.external = _params.external;\n        }\n        (0, to_json_schema_js_1.extractDefs)(this.ctx, schema);\n        const result = (0, to_json_schema_js_1.finalize)(this.ctx, schema);\n        // Strip ~standard property to match old implementation's return type\n        const { \"~standard\": _, ...plainResult } = result;\n        return plainResult;\n    }\n}\nexports.JSONSchemaGenerator = JSONSchemaGenerator;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JSONSchema = exports.JSONSchemaGenerator = exports.toJSONSchema = exports.locales = exports.regexes = exports.util = void 0;\n__exportStar(require(\"./core.cjs\"), exports);\n__exportStar(require(\"./parse.cjs\"), exports);\n__exportStar(require(\"./errors.cjs\"), exports);\n__exportStar(require(\"./schemas.cjs\"), exports);\n__exportStar(require(\"./checks.cjs\"), exports);\n__exportStar(require(\"./versions.cjs\"), exports);\nexports.util = __importStar(require(\"./util.cjs\"));\nexports.regexes = __importStar(require(\"./regexes.cjs\"));\nexports.locales = __importStar(require(\"../locales/index.cjs\"));\n__exportStar(require(\"./registries.cjs\"), exports);\n__exportStar(require(\"./doc.cjs\"), exports);\n__exportStar(require(\"./api.cjs\"), exports);\n__exportStar(require(\"./to-json-schema.cjs\"), exports);\nvar json_schema_processors_js_1 = require(\"./json-schema-processors.cjs\");\nObject.defineProperty(exports, \"toJSONSchema\", { enumerable: true, get: function () { return json_schema_processors_js_1.toJSONSchema; } });\nvar json_schema_generator_js_1 = require(\"./json-schema-generator.cjs\");\nObject.defineProperty(exports, \"JSONSchemaGenerator\", { enumerable: true, get: function () { return json_schema_generator_js_1.JSONSchemaGenerator; } });\nexports.JSONSchema = __importStar(require(\"./json-schema.cjs\"));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.slugify = exports.toUpperCase = exports.toLowerCase = exports.trim = exports.normalize = exports.overwrite = exports.mime = exports.property = exports.endsWith = exports.startsWith = exports.includes = exports.uppercase = exports.lowercase = exports.regex = exports.length = exports.minLength = exports.maxLength = exports.size = exports.minSize = exports.maxSize = exports.multipleOf = exports.nonnegative = exports.nonpositive = exports.negative = exports.positive = exports.gte = exports.gt = exports.lte = exports.lt = void 0;\nvar index_js_1 = require(\"../core/index.cjs\");\nObject.defineProperty(exports, \"lt\", { enumerable: true, get: function () { return index_js_1._lt; } });\nObject.defineProperty(exports, \"lte\", { enumerable: true, get: function () { return index_js_1._lte; } });\nObject.defineProperty(exports, \"gt\", { enumerable: true, get: function () { return index_js_1._gt; } });\nObject.defineProperty(exports, \"gte\", { enumerable: true, get: function () { return index_js_1._gte; } });\nObject.defineProperty(exports, \"positive\", { enumerable: true, get: function () { return index_js_1._positive; } });\nObject.defineProperty(exports, \"negative\", { enumerable: true, get: function () { return index_js_1._negative; } });\nObject.defineProperty(exports, \"nonpositive\", { enumerable: true, get: function () { return index_js_1._nonpositive; } });\nObject.defineProperty(exports, \"nonnegative\", { enumerable: true, get: function () { return index_js_1._nonnegative; } });\nObject.defineProperty(exports, \"multipleOf\", { enumerable: true, get: function () { return index_js_1._multipleOf; } });\nObject.defineProperty(exports, \"maxSize\", { enumerable: true, get: function () { return index_js_1._maxSize; } });\nObject.defineProperty(exports, \"minSize\", { enumerable: true, get: function () { return index_js_1._minSize; } });\nObject.defineProperty(exports, \"size\", { enumerable: true, get: function () { return index_js_1._size; } });\nObject.defineProperty(exports, \"maxLength\", { enumerable: true, get: function () { return index_js_1._maxLength; } });\nObject.defineProperty(exports, \"minLength\", { enumerable: true, get: function () { return index_js_1._minLength; } });\nObject.defineProperty(exports, \"length\", { enumerable: true, get: function () { return index_js_1._length; } });\nObject.defineProperty(exports, \"regex\", { enumerable: true, get: function () { return index_js_1._regex; } });\nObject.defineProperty(exports, \"lowercase\", { enumerable: true, get: function () { return index_js_1._lowercase; } });\nObject.defineProperty(exports, \"uppercase\", { enumerable: true, get: function () { return index_js_1._uppercase; } });\nObject.defineProperty(exports, \"includes\", { enumerable: true, get: function () { return index_js_1._includes; } });\nObject.defineProperty(exports, \"startsWith\", { enumerable: true, get: function () { return index_js_1._startsWith; } });\nObject.defineProperty(exports, \"endsWith\", { enumerable: true, get: function () { return index_js_1._endsWith; } });\nObject.defineProperty(exports, \"property\", { enumerable: true, get: function () { return index_js_1._property; } });\nObject.defineProperty(exports, \"mime\", { enumerable: true, get: function () { return index_js_1._mime; } });\nObject.defineProperty(exports, \"overwrite\", { enumerable: true, get: function () { return index_js_1._overwrite; } });\nObject.defineProperty(exports, \"normalize\", { enumerable: true, get: function () { return index_js_1._normalize; } });\nObject.defineProperty(exports, \"trim\", { enumerable: true, get: function () { return index_js_1._trim; } });\nObject.defineProperty(exports, \"toLowerCase\", { enumerable: true, get: function () { return index_js_1._toLowerCase; } });\nObject.defineProperty(exports, \"toUpperCase\", { enumerable: true, get: function () { return index_js_1._toUpperCase; } });\nObject.defineProperty(exports, \"slugify\", { enumerable: true, get: function () { return index_js_1._slugify; } });\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ZodISODuration = exports.ZodISOTime = exports.ZodISODate = exports.ZodISODateTime = void 0;\nexports.datetime = datetime;\nexports.date = date;\nexports.time = time;\nexports.duration = duration;\nconst core = __importStar(require(\"../core/index.cjs\"));\nconst schemas = __importStar(require(\"./schemas.cjs\"));\nexports.ZodISODateTime = core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nfunction datetime(params) {\n    return core._isoDateTime(exports.ZodISODateTime, params);\n}\nexports.ZodISODate = core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nfunction date(params) {\n    return core._isoDate(exports.ZodISODate, params);\n}\nexports.ZodISOTime = core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nfunction time(params) {\n    return core._isoTime(exports.ZodISOTime, params);\n}\nexports.ZodISODuration = core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nfunction duration(params) {\n    return core._isoDuration(exports.ZodISODuration, params);\n}\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ZodRealError = exports.ZodError = void 0;\nconst core = __importStar(require(\"../core/index.cjs\"));\nconst index_js_1 = require(\"../core/index.cjs\");\nconst util = __importStar(require(\"../core/util.cjs\"));\nconst initializer = (inst, issues) => {\n    index_js_1.$ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => {\n                inst.issues.push(issue);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => {\n                inst.issues.push(...issues);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexports.ZodError = core.$constructor(\"ZodError\", initializer);\nexports.ZodRealError = core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.safeDecodeAsync = exports.safeEncodeAsync = exports.safeDecode = exports.safeEncode = exports.decodeAsync = exports.encodeAsync = exports.decode = exports.encode = exports.safeParseAsync = exports.safeParse = exports.parseAsync = exports.parse = void 0;\nconst core = __importStar(require(\"../core/index.cjs\"));\nconst errors_js_1 = require(\"./errors.cjs\");\nexports.parse = core._parse(errors_js_1.ZodRealError);\nexports.parseAsync = core._parseAsync(errors_js_1.ZodRealError);\nexports.safeParse = core._safeParse(errors_js_1.ZodRealError);\nexports.safeParseAsync = core._safeParseAsync(errors_js_1.ZodRealError);\n// Codec functions\nexports.encode = core._encode(errors_js_1.ZodRealError);\nexports.decode = core._decode(errors_js_1.ZodRealError);\nexports.encodeAsync = core._encodeAsync(errors_js_1.ZodRealError);\nexports.decodeAsync = core._decodeAsync(errors_js_1.ZodRealError);\nexports.safeEncode = core._safeEncode(errors_js_1.ZodRealError);\nexports.safeDecode = core._safeDecode(errors_js_1.ZodRealError);\nexports.safeEncodeAsync = core._safeEncodeAsync(errors_js_1.ZodRealError);\nexports.safeDecodeAsync = core._safeDecodeAsync(errors_js_1.ZodRealError);\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ZodLiteral = exports.ZodEnum = exports.ZodSet = exports.ZodMap = exports.ZodRecord = exports.ZodTuple = exports.ZodIntersection = exports.ZodDiscriminatedUnion = exports.ZodXor = exports.ZodUnion = exports.ZodObject = exports.ZodArray = exports.ZodDate = exports.ZodVoid = exports.ZodNever = exports.ZodUnknown = exports.ZodAny = exports.ZodNull = exports.ZodUndefined = exports.ZodSymbol = exports.ZodBigIntFormat = exports.ZodBigInt = exports.ZodBoolean = exports.ZodNumberFormat = exports.ZodNumber = exports.ZodCustomStringFormat = exports.ZodJWT = exports.ZodE164 = exports.ZodBase64URL = exports.ZodBase64 = exports.ZodCIDRv6 = exports.ZodCIDRv4 = exports.ZodIPv6 = exports.ZodMAC = exports.ZodIPv4 = exports.ZodKSUID = exports.ZodXID = exports.ZodULID = exports.ZodCUID2 = exports.ZodCUID = exports.ZodNanoID = exports.ZodEmoji = exports.ZodURL = exports.ZodUUID = exports.ZodGUID = exports.ZodEmail = exports.ZodStringFormat = exports.ZodString = exports._ZodString = exports.ZodType = void 0;\nexports.stringbool = exports.meta = exports.describe = exports.ZodCustom = exports.ZodFunction = exports.ZodPromise = exports.ZodLazy = exports.ZodTemplateLiteral = exports.ZodReadonly = exports.ZodCodec = exports.ZodPipe = exports.ZodNaN = exports.ZodCatch = exports.ZodSuccess = exports.ZodNonOptional = exports.ZodPrefault = exports.ZodDefault = exports.ZodNullable = exports.ZodExactOptional = exports.ZodOptional = exports.ZodTransform = exports.ZodFile = void 0;\nexports.string = string;\nexports.email = email;\nexports.guid = guid;\nexports.uuid = uuid;\nexports.uuidv4 = uuidv4;\nexports.uuidv6 = uuidv6;\nexports.uuidv7 = uuidv7;\nexports.url = url;\nexports.httpUrl = httpUrl;\nexports.emoji = emoji;\nexports.nanoid = nanoid;\nexports.cuid = cuid;\nexports.cuid2 = cuid2;\nexports.ulid = ulid;\nexports.xid = xid;\nexports.ksuid = ksuid;\nexports.ipv4 = ipv4;\nexports.mac = mac;\nexports.ipv6 = ipv6;\nexports.cidrv4 = cidrv4;\nexports.cidrv6 = cidrv6;\nexports.base64 = base64;\nexports.base64url = base64url;\nexports.e164 = e164;\nexports.jwt = jwt;\nexports.stringFormat = stringFormat;\nexports.hostname = hostname;\nexports.hex = hex;\nexports.hash = hash;\nexports.number = number;\nexports.int = int;\nexports.float32 = float32;\nexports.float64 = float64;\nexports.int32 = int32;\nexports.uint32 = uint32;\nexports.boolean = boolean;\nexports.bigint = bigint;\nexports.int64 = int64;\nexports.uint64 = uint64;\nexports.symbol = symbol;\nexports.undefined = _undefined;\nexports.null = _null;\nexports.any = any;\nexports.unknown = unknown;\nexports.never = never;\nexports.void = _void;\nexports.date = date;\nexports.array = array;\nexports.keyof = keyof;\nexports.object = object;\nexports.strictObject = strictObject;\nexports.looseObject = looseObject;\nexports.union = union;\nexports.xor = xor;\nexports.discriminatedUnion = discriminatedUnion;\nexports.intersection = intersection;\nexports.tuple = tuple;\nexports.record = record;\nexports.partialRecord = partialRecord;\nexports.looseRecord = looseRecord;\nexports.map = map;\nexports.set = set;\nexports.enum = _enum;\nexports.nativeEnum = nativeEnum;\nexports.literal = literal;\nexports.file = file;\nexports.transform = transform;\nexports.optional = optional;\nexports.exactOptional = exactOptional;\nexports.nullable = nullable;\nexports.nullish = nullish;\nexports._default = _default;\nexports.prefault = prefault;\nexports.nonoptional = nonoptional;\nexports.success = success;\nexports.catch = _catch;\nexports.nan = nan;\nexports.pipe = pipe;\nexports.codec = codec;\nexports.readonly = readonly;\nexports.templateLiteral = templateLiteral;\nexports.lazy = lazy;\nexports.promise = promise;\nexports._function = _function;\nexports.function = _function;\nexports._function = _function;\nexports.function = _function;\nexports.check = check;\nexports.custom = custom;\nexports.refine = refine;\nexports.superRefine = superRefine;\nexports.instanceof = _instanceof;\nexports.json = json;\nexports.preprocess = preprocess;\nconst core = __importStar(require(\"../core/index.cjs\"));\nconst index_js_1 = require(\"../core/index.cjs\");\nconst processors = __importStar(require(\"../core/json-schema-processors.cjs\"));\nconst to_json_schema_js_1 = require(\"../core/to-json-schema.cjs\");\nconst checks = __importStar(require(\"./checks.cjs\"));\nconst iso = __importStar(require(\"./iso.cjs\"));\nconst parse = __importStar(require(\"./parse.cjs\"));\nexports.ZodType = core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    Object.assign(inst[\"~standard\"], {\n        jsonSchema: {\n            input: (0, to_json_schema_js_1.createStandardJSONSchemaMethod)(inst, \"input\"),\n            output: (0, to_json_schema_js_1.createStandardJSONSchemaMethod)(inst, \"output\"),\n        },\n    });\n    inst.toJSONSchema = (0, to_json_schema_js_1.createToJSONSchemaMethod)(inst, {});\n    inst.def = def;\n    inst.type = def.type;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // base methods\n    inst.check = (...checks) => {\n        return inst.clone(index_js_1.util.mergeDefs(def, {\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }), {\n            parent: true,\n        });\n    };\n    inst.with = inst.check;\n    inst.clone = (def, params) => core.clone(inst, def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n    // parsing\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    // encoding/decoding\n    inst.encode = (data, params) => parse.encode(inst, data, params);\n    inst.decode = (data, params) => parse.decode(inst, data, params);\n    inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n    inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n    inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n    inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n    inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n    inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n    // refinements\n    inst.refine = (check, params) => inst.check(refine(check, params));\n    inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n    inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n    // wrappers\n    inst.optional = () => optional(inst);\n    inst.exactOptional = () => exactOptional(inst);\n    inst.nullable = () => nullable(inst);\n    inst.nullish = () => optional(nullable(inst));\n    inst.nonoptional = (params) => nonoptional(inst, params);\n    inst.array = () => array(inst);\n    inst.or = (arg) => union([inst, arg]);\n    inst.and = (arg) => intersection(inst, arg);\n    inst.transform = (tx) => pipe(inst, transform(tx));\n    inst.default = (def) => _default(inst, def);\n    inst.prefault = (def) => prefault(inst, def);\n    // inst.coalesce = (def, params) => coalesce(inst, def, params);\n    inst.catch = (params) => _catch(inst, params);\n    inst.pipe = (target) => pipe(inst, target);\n    inst.readonly = () => readonly(inst);\n    // meta\n    inst.describe = (description) => {\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    };\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    inst.meta = (...args) => {\n        if (args.length === 0) {\n            return core.globalRegistry.get(inst);\n        }\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    };\n    // helpers\n    inst.isOptional = () => inst.safeParse(undefined).success;\n    inst.isNullable = () => inst.safeParse(null).success;\n    inst.apply = (fn) => fn(inst);\n    return inst;\n});\n/** @internal */\nexports._ZodString = core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    // validations\n    inst.regex = (...args) => inst.check(checks.regex(...args));\n    inst.includes = (...args) => inst.check(checks.includes(...args));\n    inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n    inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n    inst.min = (...args) => inst.check(checks.minLength(...args));\n    inst.max = (...args) => inst.check(checks.maxLength(...args));\n    inst.length = (...args) => inst.check(checks.length(...args));\n    inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n    inst.lowercase = (params) => inst.check(checks.lowercase(params));\n    inst.uppercase = (params) => inst.check(checks.uppercase(params));\n    // transforms\n    inst.trim = () => inst.check(checks.trim());\n    inst.normalize = (...args) => inst.check(checks.normalize(...args));\n    inst.toLowerCase = () => inst.check(checks.toLowerCase());\n    inst.toUpperCase = () => inst.check(checks.toUpperCase());\n    inst.slugify = () => inst.check(checks.slugify());\n});\nexports.ZodString = core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    exports._ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(exports.ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(exports.ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(exports.ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(exports.ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(exports.ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(exports.ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(exports.ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(exports.ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(exports.ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(exports.ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(exports.ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(exports.ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(exports.ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(exports.ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(exports.ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(exports.ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(exports.ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(exports.ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(exports.ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(exports.ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(exports.ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(exports.ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(exports.ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nfunction string(params) {\n    return core._string(exports.ZodString, params);\n}\nexports.ZodStringFormat = core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    exports._ZodString.init(inst, def);\n});\nexports.ZodEmail = core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction email(params) {\n    return core._email(exports.ZodEmail, params);\n}\nexports.ZodGUID = core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction guid(params) {\n    return core._guid(exports.ZodGUID, params);\n}\nexports.ZodUUID = core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction uuid(params) {\n    return core._uuid(exports.ZodUUID, params);\n}\nfunction uuidv4(params) {\n    return core._uuidv4(exports.ZodUUID, params);\n}\n// ZodUUIDv6\nfunction uuidv6(params) {\n    return core._uuidv6(exports.ZodUUID, params);\n}\n// ZodUUIDv7\nfunction uuidv7(params) {\n    return core._uuidv7(exports.ZodUUID, params);\n}\nexports.ZodURL = core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction url(params) {\n    return core._url(exports.ZodURL, params);\n}\nfunction httpUrl(params) {\n    return core._url(exports.ZodURL, {\n        protocol: /^https?$/,\n        hostname: core.regexes.domain,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodEmoji = core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction emoji(params) {\n    return core._emoji(exports.ZodEmoji, params);\n}\nexports.ZodNanoID = core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction nanoid(params) {\n    return core._nanoid(exports.ZodNanoID, params);\n}\nexports.ZodCUID = core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction cuid(params) {\n    return core._cuid(exports.ZodCUID, params);\n}\nexports.ZodCUID2 = core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction cuid2(params) {\n    return core._cuid2(exports.ZodCUID2, params);\n}\nexports.ZodULID = core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction ulid(params) {\n    return core._ulid(exports.ZodULID, params);\n}\nexports.ZodXID = core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction xid(params) {\n    return core._xid(exports.ZodXID, params);\n}\nexports.ZodKSUID = core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction ksuid(params) {\n    return core._ksuid(exports.ZodKSUID, params);\n}\nexports.ZodIPv4 = core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction ipv4(params) {\n    return core._ipv4(exports.ZodIPv4, params);\n}\nexports.ZodMAC = core.$constructor(\"ZodMAC\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodMAC.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction mac(params) {\n    return core._mac(exports.ZodMAC, params);\n}\nexports.ZodIPv6 = core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction ipv6(params) {\n    return core._ipv6(exports.ZodIPv6, params);\n}\nexports.ZodCIDRv4 = core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction cidrv4(params) {\n    return core._cidrv4(exports.ZodCIDRv4, params);\n}\nexports.ZodCIDRv6 = core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction cidrv6(params) {\n    return core._cidrv6(exports.ZodCIDRv6, params);\n}\nexports.ZodBase64 = core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction base64(params) {\n    return core._base64(exports.ZodBase64, params);\n}\nexports.ZodBase64URL = core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction base64url(params) {\n    return core._base64url(exports.ZodBase64URL, params);\n}\nexports.ZodE164 = core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction e164(params) {\n    return core._e164(exports.ZodE164, params);\n}\nexports.ZodJWT = core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction jwt(params) {\n    return core._jwt(exports.ZodJWT, params);\n}\nexports.ZodCustomStringFormat = core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    exports.ZodStringFormat.init(inst, def);\n});\nfunction stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(exports.ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nfunction hostname(_params) {\n    return core._stringFormat(exports.ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nfunction hex(_params) {\n    return core._stringFormat(exports.ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nfunction hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(exports.ZodCustomStringFormat, format, regex, params);\n}\nexports.ZodNumber = core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.int = (params) => inst.check(int(params));\n    inst.safe = (params) => inst.check(int(params));\n    inst.positive = (params) => inst.check(checks.gt(0, params));\n    inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n    inst.negative = (params) => inst.check(checks.lt(0, params));\n    inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n    // inst.finite = (params) => inst.check(core.finite(params));\n    inst.finite = () => inst;\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nfunction number(params) {\n    return core._number(exports.ZodNumber, params);\n}\nexports.ZodNumberFormat = core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    exports.ZodNumber.init(inst, def);\n});\nfunction int(params) {\n    return core._int(exports.ZodNumberFormat, params);\n}\nfunction float32(params) {\n    return core._float32(exports.ZodNumberFormat, params);\n}\nfunction float64(params) {\n    return core._float64(exports.ZodNumberFormat, params);\n}\nfunction int32(params) {\n    return core._int32(exports.ZodNumberFormat, params);\n}\nfunction uint32(params) {\n    return core._uint32(exports.ZodNumberFormat, params);\n}\nexports.ZodBoolean = core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nfunction boolean(params) {\n    return core._boolean(exports.ZodBoolean, params);\n}\nexports.ZodBigInt = core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nfunction bigint(params) {\n    return core._bigint(exports.ZodBigInt, params);\n}\nexports.ZodBigIntFormat = core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    exports.ZodBigInt.init(inst, def);\n});\n// int64\nfunction int64(params) {\n    return core._int64(exports.ZodBigIntFormat, params);\n}\n// uint64\nfunction uint64(params) {\n    return core._uint64(exports.ZodBigIntFormat, params);\n}\nexports.ZodSymbol = core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nfunction symbol(params) {\n    return core._symbol(exports.ZodSymbol, params);\n}\nexports.ZodUndefined = core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n    return core._undefined(exports.ZodUndefined, params);\n}\nexports.ZodNull = core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n    return core._null(exports.ZodNull, params);\n}\nexports.ZodAny = core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nfunction any() {\n    return core._any(exports.ZodAny);\n}\nexports.ZodUnknown = core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nfunction unknown() {\n    return core._unknown(exports.ZodUnknown);\n}\nexports.ZodNever = core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nfunction never(params) {\n    return core._never(exports.ZodNever, params);\n}\nexports.ZodVoid = core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n    return core._void(exports.ZodVoid, params);\n}\nexports.ZodDate = core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nfunction date(params) {\n    return core._date(exports.ZodDate, params);\n}\nexports.ZodArray = core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n    inst.element = def.element;\n    inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n    inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n    inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n    inst.length = (len, params) => inst.check(checks.length(len, params));\n    inst.unwrap = () => inst.element;\n});\nfunction array(element, params) {\n    return core._array(exports.ZodArray, element, params);\n}\n// .keyof\nfunction keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexports.ZodObject = core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObjectJIT.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n    index_js_1.util.defineLazy(inst, \"shape\", () => {\n        return def.shape;\n    });\n    inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n    inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n    inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n    inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n    inst.extend = (incoming) => {\n        return index_js_1.util.extend(inst, incoming);\n    };\n    inst.safeExtend = (incoming) => {\n        return index_js_1.util.safeExtend(inst, incoming);\n    };\n    inst.merge = (other) => index_js_1.util.merge(inst, other);\n    inst.pick = (mask) => index_js_1.util.pick(inst, mask);\n    inst.omit = (mask) => index_js_1.util.omit(inst, mask);\n    inst.partial = (...args) => index_js_1.util.partial(exports.ZodOptional, inst, args[0]);\n    inst.required = (...args) => index_js_1.util.required(exports.ZodNonOptional, inst, args[0]);\n});\nfunction object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...index_js_1.util.normalizeParams(params),\n    };\n    return new exports.ZodObject(def);\n}\n// strictObject\nfunction strictObject(shape, params) {\n    return new exports.ZodObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\n// looseObject\nfunction looseObject(shape, params) {\n    return new exports.ZodObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodUnion = core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\nfunction union(options, params) {\n    return new exports.ZodUnion({\n        type: \"union\",\n        options: options,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodXor = core.$constructor(\"ZodXor\", (inst, def) => {\n    exports.ZodUnion.init(inst, def);\n    core.$ZodXor.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nfunction xor(options, params) {\n    return new exports.ZodXor({\n        type: \"union\",\n        options: options,\n        inclusive: false,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodDiscriminatedUnion = core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    exports.ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nfunction discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new exports.ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodIntersection = core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nfunction intersection(left, right) {\n    return new exports.ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexports.ZodTuple = core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nfunction tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new exports.ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodRecord = core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nfunction record(keyType, valueType, params) {\n    return new exports.ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nfunction partialRecord(keyType, valueType, params) {\n    const k = core.clone(keyType);\n    k._zod.values = undefined;\n    return new exports.ZodRecord({\n        type: \"record\",\n        keyType: k,\n        valueType: valueType,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nfunction looseRecord(keyType, valueType, params) {\n    return new exports.ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        mode: \"loose\",\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodMap = core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nfunction map(keyType, valueType, params) {\n    return new exports.ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodSet = core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nfunction set(valueType, params) {\n    return new exports.ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodEnum = core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new exports.ZodEnum({\n            ...def,\n            checks: [],\n            ...index_js_1.util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new exports.ZodEnum({\n            ...def,\n            checks: [],\n            ...index_js_1.util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new exports.ZodEnum({\n        type: \"enum\",\n        entries,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nfunction nativeEnum(entries, params) {\n    return new exports.ZodEnum({\n        type: \"enum\",\n        entries,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodLiteral = core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nfunction literal(value, params) {\n    return new exports.ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodFile = core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nfunction file(params) {\n    return core._file(exports.ZodFile, params);\n}\nexports.ZodTransform = core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n    inst._zod.parse = (payload, _ctx) => {\n        if (_ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(index_js_1.util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                // _issue.continue ??= true;\n                payload.issues.push(index_js_1.util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nfunction transform(fn) {\n    return new exports.ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexports.ZodOptional = core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction optional(innerType) {\n    return new exports.ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexports.ZodExactOptional = core.$constructor(\"ZodExactOptional\", (inst, def) => {\n    core.$ZodExactOptional.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction exactOptional(innerType) {\n    return new exports.ZodExactOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexports.ZodNullable = core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction nullable(innerType) {\n    return new exports.ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nfunction nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexports.ZodDefault = core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nfunction _default(innerType, defaultValue) {\n    return new exports.ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : index_js_1.util.shallowClone(defaultValue);\n        },\n    });\n}\nexports.ZodPrefault = core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction prefault(innerType, defaultValue) {\n    return new exports.ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : index_js_1.util.shallowClone(defaultValue);\n        },\n    });\n}\nexports.ZodNonOptional = core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction nonoptional(innerType, params) {\n    return new exports.ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodSuccess = core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction success(innerType) {\n    return new exports.ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexports.ZodCatch = core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new exports.ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexports.ZodNaN = core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nfunction nan(params) {\n    return core._nan(exports.ZodNaN, params);\n}\nexports.ZodPipe = core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nfunction pipe(in_, out) {\n    return new exports.ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexports.ZodCodec = core.$constructor(\"ZodCodec\", (inst, def) => {\n    exports.ZodPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nfunction codec(in_, out, params) {\n    return new exports.ZodCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexports.ZodReadonly = core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction readonly(innerType) {\n    return new exports.ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexports.ZodTemplateLiteral = core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nfunction templateLiteral(parts, params) {\n    return new exports.ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...index_js_1.util.normalizeParams(params),\n    });\n}\nexports.ZodLazy = core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nfunction lazy(getter) {\n    return new exports.ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexports.ZodPromise = core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction promise(innerType) {\n    return new exports.ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexports.ZodFunction = core.$constructor(\"ZodFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nfunction _function(params) {\n    return new exports.ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexports.ZodCustom = core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    exports.ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nfunction check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nfunction custom(fn, _params) {\n    return core._custom(exports.ZodCustom, fn ?? (() => true), _params);\n}\nfunction refine(fn, _params = {}) {\n    return core._refine(exports.ZodCustom, fn, _params);\n}\n// superRefine\nfunction superRefine(fn) {\n    return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexports.describe = core.describe;\nexports.meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n    const inst = new exports.ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...index_js_1.util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    // Override check to emit invalid_type instead of custom\n    inst._zod.check = (payload) => {\n        if (!(payload.value instanceof cls)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: cls.name,\n                input: payload.value,\n                inst,\n                path: [...(inst._zod.def.path ?? [])],\n            });\n        }\n    };\n    return inst;\n}\n// stringbool\nconst stringbool = (...args) => core._stringbool({\n    Codec: exports.ZodCodec,\n    Boolean: exports.ZodBoolean,\n    String: exports.ZodString,\n}, ...args);\nexports.stringbool = stringbool;\nfunction json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nfunction preprocess(fn, schema) {\n    return pipe(transform(fn), schema);\n}\n", "\"use strict\";\n// Zod 3 compat layer\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ZodFirstPartyTypeKind = exports.config = exports.$brand = exports.ZodIssueCode = void 0;\nexports.setErrorMap = setErrorMap;\nexports.getErrorMap = getErrorMap;\nconst core = __importStar(require(\"../core/index.cjs\"));\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexports.ZodIssueCode = {\n    invalid_type: \"invalid_type\",\n    too_big: \"too_big\",\n    too_small: \"too_small\",\n    invalid_format: \"invalid_format\",\n    not_multiple_of: \"not_multiple_of\",\n    unrecognized_keys: \"unrecognized_keys\",\n    invalid_union: \"invalid_union\",\n    invalid_key: \"invalid_key\",\n    invalid_element: \"invalid_element\",\n    invalid_value: \"invalid_value\",\n    custom: \"custom\",\n};\nvar index_js_1 = require(\"../core/index.cjs\");\nObject.defineProperty(exports, \"$brand\", { enumerable: true, get: function () { return index_js_1.$brand; } });\nObject.defineProperty(exports, \"config\", { enumerable: true, get: function () { return index_js_1.config; } });\n/** @deprecated Use `z.config(params)` instead. */\nfunction setErrorMap(map) {\n    core.config({\n        customError: map,\n    });\n}\n/** @deprecated Use `z.config()` instead. */\nfunction getErrorMap() {\n    return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (exports.ZodFirstPartyTypeKind = ZodFirstPartyTypeKind = {}));\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromJSONSchema = fromJSONSchema;\nconst registries_js_1 = require(\"../core/registries.cjs\");\nconst _checks = __importStar(require(\"./checks.cjs\"));\nconst _iso = __importStar(require(\"./iso.cjs\"));\nconst _schemas = __importStar(require(\"./schemas.cjs\"));\n// Local z object to avoid circular dependency with ../index.js\nconst z = {\n    ..._schemas,\n    ..._checks,\n    iso: _iso,\n};\n// Keys that are recognized and handled by the conversion logic\nconst RECOGNIZED_KEYS = new Set([\n    // Schema identification\n    \"$schema\",\n    \"$ref\",\n    \"$defs\",\n    \"definitions\",\n    // Core schema keywords\n    \"$id\",\n    \"id\",\n    \"$comment\",\n    \"$anchor\",\n    \"$vocabulary\",\n    \"$dynamicRef\",\n    \"$dynamicAnchor\",\n    // Type\n    \"type\",\n    \"enum\",\n    \"const\",\n    // Composition\n    \"anyOf\",\n    \"oneOf\",\n    \"allOf\",\n    \"not\",\n    // Object\n    \"properties\",\n    \"required\",\n    \"additionalProperties\",\n    \"patternProperties\",\n    \"propertyNames\",\n    \"minProperties\",\n    \"maxProperties\",\n    // Array\n    \"items\",\n    \"prefixItems\",\n    \"additionalItems\",\n    \"minItems\",\n    \"maxItems\",\n    \"uniqueItems\",\n    \"contains\",\n    \"minContains\",\n    \"maxContains\",\n    // String\n    \"minLength\",\n    \"maxLength\",\n    \"pattern\",\n    \"format\",\n    // Number\n    \"minimum\",\n    \"maximum\",\n    \"exclusiveMinimum\",\n    \"exclusiveMaximum\",\n    \"multipleOf\",\n    // Already handled metadata\n    \"description\",\n    \"default\",\n    // Content\n    \"contentEncoding\",\n    \"contentMediaType\",\n    \"contentSchema\",\n    // Unsupported (error-throwing)\n    \"unevaluatedItems\",\n    \"unevaluatedProperties\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"dependentSchemas\",\n    \"dependentRequired\",\n    // OpenAPI\n    \"nullable\",\n    \"readOnly\",\n]);\nfunction detectVersion(schema, defaultTarget) {\n    const $schema = schema.$schema;\n    if ($schema === \"https://json-schema.org/draft/2020-12/schema\") {\n        return \"draft-2020-12\";\n    }\n    if ($schema === \"http://json-schema.org/draft-07/schema#\") {\n        return \"draft-7\";\n    }\n    if ($schema === \"http://json-schema.org/draft-04/schema#\") {\n        return \"draft-4\";\n    }\n    // Use defaultTarget if provided, otherwise default to draft-2020-12\n    return defaultTarget ?? \"draft-2020-12\";\n}\nfunction resolveRef(ref, ctx) {\n    if (!ref.startsWith(\"#\")) {\n        throw new Error(\"External $ref is not supported, only local refs (#/...) are allowed\");\n    }\n    const path = ref.slice(1).split(\"/\").filter(Boolean);\n    // Handle root reference \"#\"\n    if (path.length === 0) {\n        return ctx.rootSchema;\n    }\n    const defsKey = ctx.version === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n    if (path[0] === defsKey) {\n        const key = path[1];\n        if (!key || !ctx.defs[key]) {\n            throw new Error(`Reference not found: ${ref}`);\n        }\n        return ctx.defs[key];\n    }\n    throw new Error(`Reference not found: ${ref}`);\n}\nfunction convertBaseSchema(schema, ctx) {\n    // Handle unsupported features\n    if (schema.not !== undefined) {\n        // Special case: { not: {} } represents never\n        if (typeof schema.not === \"object\" && Object.keys(schema.not).length === 0) {\n            return z.never();\n        }\n        throw new Error(\"not is not supported in Zod (except { not: {} } for never)\");\n    }\n    if (schema.unevaluatedItems !== undefined) {\n        throw new Error(\"unevaluatedItems is not supported\");\n    }\n    if (schema.unevaluatedProperties !== undefined) {\n        throw new Error(\"unevaluatedProperties is not supported\");\n    }\n    if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {\n        throw new Error(\"Conditional schemas (if/then/else) are not supported\");\n    }\n    if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {\n        throw new Error(\"dependentSchemas and dependentRequired are not supported\");\n    }\n    // Handle $ref\n    if (schema.$ref) {\n        const refPath = schema.$ref;\n        if (ctx.refs.has(refPath)) {\n            return ctx.refs.get(refPath);\n        }\n        if (ctx.processing.has(refPath)) {\n            // Circular reference - use lazy\n            return z.lazy(() => {\n                if (!ctx.refs.has(refPath)) {\n                    throw new Error(`Circular reference not resolved: ${refPath}`);\n                }\n                return ctx.refs.get(refPath);\n            });\n        }\n        ctx.processing.add(refPath);\n        const resolved = resolveRef(refPath, ctx);\n        const zodSchema = convertSchema(resolved, ctx);\n        ctx.refs.set(refPath, zodSchema);\n        ctx.processing.delete(refPath);\n        return zodSchema;\n    }\n    // Handle enum\n    if (schema.enum !== undefined) {\n        const enumValues = schema.enum;\n        // Special case: OpenAPI 3.0 null representation { type: \"string\", nullable: true, enum: [null] }\n        if (ctx.version === \"openapi-3.0\" &&\n            schema.nullable === true &&\n            enumValues.length === 1 &&\n            enumValues[0] === null) {\n            return z.null();\n        }\n        if (enumValues.length === 0) {\n            return z.never();\n        }\n        if (enumValues.length === 1) {\n            return z.literal(enumValues[0]);\n        }\n        // Check if all values are strings\n        if (enumValues.every((v) => typeof v === \"string\")) {\n            return z.enum(enumValues);\n        }\n        // Mixed types - use union of literals\n        const literalSchemas = enumValues.map((v) => z.literal(v));\n        if (literalSchemas.length < 2) {\n            return literalSchemas[0];\n        }\n        return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);\n    }\n    // Handle const\n    if (schema.const !== undefined) {\n        return z.literal(schema.const);\n    }\n    // Handle type\n    const type = schema.type;\n    if (Array.isArray(type)) {\n        // Expand type array into anyOf union\n        const typeSchemas = type.map((t) => {\n            const typeSchema = { ...schema, type: t };\n            return convertBaseSchema(typeSchema, ctx);\n        });\n        if (typeSchemas.length === 0) {\n            return z.never();\n        }\n        if (typeSchemas.length === 1) {\n            return typeSchemas[0];\n        }\n        return z.union(typeSchemas);\n    }\n    if (!type) {\n        // No type specified - empty schema (any)\n        return z.any();\n    }\n    let zodSchema;\n    switch (type) {\n        case \"string\": {\n            let stringSchema = z.string();\n            // Apply format using .check() with Zod format functions\n            if (schema.format) {\n                const format = schema.format;\n                // Map common formats to Zod check functions\n                if (format === \"email\") {\n                    stringSchema = stringSchema.check(z.email());\n                }\n                else if (format === \"uri\" || format === \"uri-reference\") {\n                    stringSchema = stringSchema.check(z.url());\n                }\n                else if (format === \"uuid\" || format === \"guid\") {\n                    stringSchema = stringSchema.check(z.uuid());\n                }\n                else if (format === \"date-time\") {\n                    stringSchema = stringSchema.check(z.iso.datetime());\n                }\n                else if (format === \"date\") {\n                    stringSchema = stringSchema.check(z.iso.date());\n                }\n                else if (format === \"time\") {\n                    stringSchema = stringSchema.check(z.iso.time());\n                }\n                else if (format === \"duration\") {\n                    stringSchema = stringSchema.check(z.iso.duration());\n                }\n                else if (format === \"ipv4\") {\n                    stringSchema = stringSchema.check(z.ipv4());\n                }\n                else if (format === \"ipv6\") {\n                    stringSchema = stringSchema.check(z.ipv6());\n                }\n                else if (format === \"mac\") {\n                    stringSchema = stringSchema.check(z.mac());\n                }\n                else if (format === \"cidr\") {\n                    stringSchema = stringSchema.check(z.cidrv4());\n                }\n                else if (format === \"cidr-v6\") {\n                    stringSchema = stringSchema.check(z.cidrv6());\n                }\n                else if (format === \"base64\") {\n                    stringSchema = stringSchema.check(z.base64());\n                }\n                else if (format === \"base64url\") {\n                    stringSchema = stringSchema.check(z.base64url());\n                }\n                else if (format === \"e164\") {\n                    stringSchema = stringSchema.check(z.e164());\n                }\n                else if (format === \"jwt\") {\n                    stringSchema = stringSchema.check(z.jwt());\n                }\n                else if (format === \"emoji\") {\n                    stringSchema = stringSchema.check(z.emoji());\n                }\n                else if (format === \"nanoid\") {\n                    stringSchema = stringSchema.check(z.nanoid());\n                }\n                else if (format === \"cuid\") {\n                    stringSchema = stringSchema.check(z.cuid());\n                }\n                else if (format === \"cuid2\") {\n                    stringSchema = stringSchema.check(z.cuid2());\n                }\n                else if (format === \"ulid\") {\n                    stringSchema = stringSchema.check(z.ulid());\n                }\n                else if (format === \"xid\") {\n                    stringSchema = stringSchema.check(z.xid());\n                }\n                else if (format === \"ksuid\") {\n                    stringSchema = stringSchema.check(z.ksuid());\n                }\n                // Note: json-string format is not currently supported by Zod\n                // Custom formats are ignored - keep as plain string\n            }\n            // Apply constraints\n            if (typeof schema.minLength === \"number\") {\n                stringSchema = stringSchema.min(schema.minLength);\n            }\n            if (typeof schema.maxLength === \"number\") {\n                stringSchema = stringSchema.max(schema.maxLength);\n            }\n            if (schema.pattern) {\n                // JSON Schema patterns are not implicitly anchored (match anywhere in string)\n                stringSchema = stringSchema.regex(new RegExp(schema.pattern));\n            }\n            zodSchema = stringSchema;\n            break;\n        }\n        case \"number\":\n        case \"integer\": {\n            let numberSchema = type === \"integer\" ? z.number().int() : z.number();\n            // Apply constraints\n            if (typeof schema.minimum === \"number\") {\n                numberSchema = numberSchema.min(schema.minimum);\n            }\n            if (typeof schema.maximum === \"number\") {\n                numberSchema = numberSchema.max(schema.maximum);\n            }\n            if (typeof schema.exclusiveMinimum === \"number\") {\n                numberSchema = numberSchema.gt(schema.exclusiveMinimum);\n            }\n            else if (schema.exclusiveMinimum === true && typeof schema.minimum === \"number\") {\n                numberSchema = numberSchema.gt(schema.minimum);\n            }\n            if (typeof schema.exclusiveMaximum === \"number\") {\n                numberSchema = numberSchema.lt(schema.exclusiveMaximum);\n            }\n            else if (schema.exclusiveMaximum === true && typeof schema.maximum === \"number\") {\n                numberSchema = numberSchema.lt(schema.maximum);\n            }\n            if (typeof schema.multipleOf === \"number\") {\n                numberSchema = numberSchema.multipleOf(schema.multipleOf);\n            }\n            zodSchema = numberSchema;\n            break;\n        }\n        case \"boolean\": {\n            zodSchema = z.boolean();\n            break;\n        }\n        case \"null\": {\n            zodSchema = z.null();\n            break;\n        }\n        case \"object\": {\n            const shape = {};\n            const properties = schema.properties || {};\n            const requiredSet = new Set(schema.required || []);\n            // Convert properties - mark optional ones\n            for (const [key, propSchema] of Object.entries(properties)) {\n                const propZodSchema = convertSchema(propSchema, ctx);\n                // If not in required array, make it optional\n                shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();\n            }\n            // Handle propertyNames\n            if (schema.propertyNames) {\n                const keySchema = convertSchema(schema.propertyNames, ctx);\n                const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === \"object\"\n                    ? convertSchema(schema.additionalProperties, ctx)\n                    : z.any();\n                // Case A: No properties (pure record)\n                if (Object.keys(shape).length === 0) {\n                    zodSchema = z.record(keySchema, valueSchema);\n                    break;\n                }\n                // Case B: With properties (intersection of object and looseRecord)\n                const objectSchema = z.object(shape).passthrough();\n                const recordSchema = z.looseRecord(keySchema, valueSchema);\n                zodSchema = z.intersection(objectSchema, recordSchema);\n                break;\n            }\n            // Handle patternProperties\n            if (schema.patternProperties) {\n                // patternProperties: keys matching pattern must satisfy corresponding schema\n                // Use loose records so non-matching keys pass through\n                const patternProps = schema.patternProperties;\n                const patternKeys = Object.keys(patternProps);\n                const looseRecords = [];\n                for (const pattern of patternKeys) {\n                    const patternValue = convertSchema(patternProps[pattern], ctx);\n                    const keySchema = z.string().regex(new RegExp(pattern));\n                    looseRecords.push(z.looseRecord(keySchema, patternValue));\n                }\n                // Build intersection: object schema + all pattern property records\n                const schemasToIntersect = [];\n                if (Object.keys(shape).length > 0) {\n                    // Use passthrough so patternProperties can validate additional keys\n                    schemasToIntersect.push(z.object(shape).passthrough());\n                }\n                schemasToIntersect.push(...looseRecords);\n                if (schemasToIntersect.length === 0) {\n                    zodSchema = z.object({}).passthrough();\n                }\n                else if (schemasToIntersect.length === 1) {\n                    zodSchema = schemasToIntersect[0];\n                }\n                else {\n                    // Chain intersections: (A & B) & C & D ...\n                    let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);\n                    for (let i = 2; i < schemasToIntersect.length; i++) {\n                        result = z.intersection(result, schemasToIntersect[i]);\n                    }\n                    zodSchema = result;\n                }\n                break;\n            }\n            // Handle additionalProperties\n            // In JSON Schema, additionalProperties defaults to true (allow any extra properties)\n            // In Zod, objects strip unknown keys by default, so we need to handle this explicitly\n            const objectSchema = z.object(shape);\n            if (schema.additionalProperties === false) {\n                // Strict mode - no extra properties allowed\n                zodSchema = objectSchema.strict();\n            }\n            else if (typeof schema.additionalProperties === \"object\") {\n                // Extra properties must match the specified schema\n                zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));\n            }\n            else {\n                // additionalProperties is true or undefined - allow any extra properties (passthrough)\n                zodSchema = objectSchema.passthrough();\n            }\n            break;\n        }\n        case \"array\": {\n            // TODO: uniqueItems is not supported\n            // TODO: contains/minContains/maxContains are not supported\n            // Check if this is a tuple (prefixItems or items as array)\n            const prefixItems = schema.prefixItems;\n            const items = schema.items;\n            if (prefixItems && Array.isArray(prefixItems)) {\n                // Tuple with prefixItems (draft-2020-12)\n                const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));\n                const rest = items && typeof items === \"object\" && !Array.isArray(items)\n                    ? convertSchema(items, ctx)\n                    : undefined;\n                if (rest) {\n                    zodSchema = z.tuple(tupleItems).rest(rest);\n                }\n                else {\n                    zodSchema = z.tuple(tupleItems);\n                }\n                // Apply minItems/maxItems constraints to tuples\n                if (typeof schema.minItems === \"number\") {\n                    zodSchema = zodSchema.check(z.minLength(schema.minItems));\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n                }\n            }\n            else if (Array.isArray(items)) {\n                // Tuple with items array (draft-7)\n                const tupleItems = items.map((item) => convertSchema(item, ctx));\n                const rest = schema.additionalItems && typeof schema.additionalItems === \"object\"\n                    ? convertSchema(schema.additionalItems, ctx)\n                    : undefined; // additionalItems: false means no rest, handled by default tuple behavior\n                if (rest) {\n                    zodSchema = z.tuple(tupleItems).rest(rest);\n                }\n                else {\n                    zodSchema = z.tuple(tupleItems);\n                }\n                // Apply minItems/maxItems constraints to tuples\n                if (typeof schema.minItems === \"number\") {\n                    zodSchema = zodSchema.check(z.minLength(schema.minItems));\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n                }\n            }\n            else if (items !== undefined) {\n                // Regular array\n                const element = convertSchema(items, ctx);\n                let arraySchema = z.array(element);\n                // Apply constraints\n                if (typeof schema.minItems === \"number\") {\n                    arraySchema = arraySchema.min(schema.minItems);\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    arraySchema = arraySchema.max(schema.maxItems);\n                }\n                zodSchema = arraySchema;\n            }\n            else {\n                // No items specified - array of any\n                zodSchema = z.array(z.any());\n            }\n            break;\n        }\n        default:\n            throw new Error(`Unsupported type: ${type}`);\n    }\n    // Apply metadata\n    if (schema.description) {\n        zodSchema = zodSchema.describe(schema.description);\n    }\n    if (schema.default !== undefined) {\n        zodSchema = zodSchema.default(schema.default);\n    }\n    return zodSchema;\n}\nfunction convertSchema(schema, ctx) {\n    if (typeof schema === \"boolean\") {\n        return schema ? z.any() : z.never();\n    }\n    // Convert base schema first (ignoring composition keywords)\n    let baseSchema = convertBaseSchema(schema, ctx);\n    const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;\n    // Process composition keywords LAST (they can appear together)\n    // Handle anyOf - wrap base schema with union\n    if (schema.anyOf && Array.isArray(schema.anyOf)) {\n        const options = schema.anyOf.map((s) => convertSchema(s, ctx));\n        const anyOfUnion = z.union(options);\n        baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;\n    }\n    // Handle oneOf - exclusive union (exactly one must match)\n    if (schema.oneOf && Array.isArray(schema.oneOf)) {\n        const options = schema.oneOf.map((s) => convertSchema(s, ctx));\n        const oneOfUnion = z.xor(options);\n        baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;\n    }\n    // Handle allOf - wrap base schema with intersection\n    if (schema.allOf && Array.isArray(schema.allOf)) {\n        if (schema.allOf.length === 0) {\n            baseSchema = hasExplicitType ? baseSchema : z.any();\n        }\n        else {\n            let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);\n            const startIdx = hasExplicitType ? 0 : 1;\n            for (let i = startIdx; i < schema.allOf.length; i++) {\n                result = z.intersection(result, convertSchema(schema.allOf[i], ctx));\n            }\n            baseSchema = result;\n        }\n    }\n    // Handle nullable (OpenAPI 3.0)\n    if (schema.nullable === true && ctx.version === \"openapi-3.0\") {\n        baseSchema = z.nullable(baseSchema);\n    }\n    // Handle readOnly\n    if (schema.readOnly === true) {\n        baseSchema = z.readonly(baseSchema);\n    }\n    // Collect metadata: core schema keywords and unrecognized keys\n    const extraMeta = {};\n    // Core schema keywords that should be captured as metadata\n    const coreMetadataKeys = [\"$id\", \"id\", \"$comment\", \"$anchor\", \"$vocabulary\", \"$dynamicRef\", \"$dynamicAnchor\"];\n    for (const key of coreMetadataKeys) {\n        if (key in schema) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    // Content keywords - store as metadata\n    const contentMetadataKeys = [\"contentEncoding\", \"contentMediaType\", \"contentSchema\"];\n    for (const key of contentMetadataKeys) {\n        if (key in schema) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    // Unrecognized keys (custom metadata)\n    for (const key of Object.keys(schema)) {\n        if (!RECOGNIZED_KEYS.has(key)) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    if (Object.keys(extraMeta).length > 0) {\n        ctx.registry.add(baseSchema, extraMeta);\n    }\n    return baseSchema;\n}\n/**\n * Converts a JSON Schema to a Zod schema. This function should be considered semi-experimental. It's behavior is liable to change. */\nfunction fromJSONSchema(schema, params) {\n    // Handle boolean schemas\n    if (typeof schema === \"boolean\") {\n        return schema ? z.any() : z.never();\n    }\n    const version = detectVersion(schema, params?.defaultTarget);\n    const defs = (schema.$defs || schema.definitions || {});\n    const ctx = {\n        version,\n        defs,\n        refs: new Map(),\n        processing: new Set(),\n        rootSchema: schema,\n        registry: params?.registry ?? registries_js_1.globalRegistry,\n    };\n    return convertSchema(schema, ctx);\n}\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.string = string;\nexports.number = number;\nexports.boolean = boolean;\nexports.bigint = bigint;\nexports.date = date;\nconst core = __importStar(require(\"../core/index.cjs\"));\nconst schemas = __importStar(require(\"./schemas.cjs\"));\nfunction string(params) {\n    return core._coercedString(schemas.ZodString, params);\n}\nfunction number(params) {\n    return core._coercedNumber(schemas.ZodNumber, params);\n}\nfunction boolean(params) {\n    return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nfunction bigint(params) {\n    return core._coercedBigint(schemas.ZodBigInt, params);\n}\nfunction date(params) {\n    return core._coercedDate(schemas.ZodDate, params);\n}\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.coerce = exports.iso = exports.ZodISODuration = exports.ZodISOTime = exports.ZodISODate = exports.ZodISODateTime = exports.locales = exports.fromJSONSchema = exports.toJSONSchema = exports.NEVER = exports.util = exports.TimePrecision = exports.flattenError = exports.formatError = exports.prettifyError = exports.treeifyError = exports.regexes = exports.clone = exports.$brand = exports.$input = exports.$output = exports.config = exports.registry = exports.globalRegistry = exports.core = void 0;\nexports.core = __importStar(require(\"../core/index.cjs\"));\n__exportStar(require(\"./schemas.cjs\"), exports);\n__exportStar(require(\"./checks.cjs\"), exports);\n__exportStar(require(\"./errors.cjs\"), exports);\n__exportStar(require(\"./parse.cjs\"), exports);\n__exportStar(require(\"./compat.cjs\"), exports);\n// zod-specified\nconst index_js_1 = require(\"../core/index.cjs\");\nconst en_js_1 = __importDefault(require(\"../locales/en.cjs\"));\n(0, index_js_1.config)((0, en_js_1.default)());\nvar index_js_2 = require(\"../core/index.cjs\");\nObject.defineProperty(exports, \"globalRegistry\", { enumerable: true, get: function () { return index_js_2.globalRegistry; } });\nObject.defineProperty(exports, \"registry\", { enumerable: true, get: function () { return index_js_2.registry; } });\nObject.defineProperty(exports, \"config\", { enumerable: true, get: function () { return index_js_2.config; } });\nObject.defineProperty(exports, \"$output\", { enumerable: true, get: function () { return index_js_2.$output; } });\nObject.defineProperty(exports, \"$input\", { enumerable: true, get: function () { return index_js_2.$input; } });\nObject.defineProperty(exports, \"$brand\", { enumerable: true, get: function () { return index_js_2.$brand; } });\nObject.defineProperty(exports, \"clone\", { enumerable: true, get: function () { return index_js_2.clone; } });\nObject.defineProperty(exports, \"regexes\", { enumerable: true, get: function () { return index_js_2.regexes; } });\nObject.defineProperty(exports, \"treeifyError\", { enumerable: true, get: function () { return index_js_2.treeifyError; } });\nObject.defineProperty(exports, \"prettifyError\", { enumerable: true, get: function () { return index_js_2.prettifyError; } });\nObject.defineProperty(exports, \"formatError\", { enumerable: true, get: function () { return index_js_2.formatError; } });\nObject.defineProperty(exports, \"flattenError\", { enumerable: true, get: function () { return index_js_2.flattenError; } });\nObject.defineProperty(exports, \"TimePrecision\", { enumerable: true, get: function () { return index_js_2.TimePrecision; } });\nObject.defineProperty(exports, \"util\", { enumerable: true, get: function () { return index_js_2.util; } });\nObject.defineProperty(exports, \"NEVER\", { enumerable: true, get: function () { return index_js_2.NEVER; } });\nvar json_schema_processors_js_1 = require(\"../core/json-schema-processors.cjs\");\nObject.defineProperty(exports, \"toJSONSchema\", { enumerable: true, get: function () { return json_schema_processors_js_1.toJSONSchema; } });\nvar from_json_schema_js_1 = require(\"./from-json-schema.cjs\");\nObject.defineProperty(exports, \"fromJSONSchema\", { enumerable: true, get: function () { return from_json_schema_js_1.fromJSONSchema; } });\nexports.locales = __importStar(require(\"../locales/index.cjs\"));\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nvar iso_js_1 = require(\"./iso.cjs\");\nObject.defineProperty(exports, \"ZodISODateTime\", { enumerable: true, get: function () { return iso_js_1.ZodISODateTime; } });\nObject.defineProperty(exports, \"ZodISODate\", { enumerable: true, get: function () { return iso_js_1.ZodISODate; } });\nObject.defineProperty(exports, \"ZodISOTime\", { enumerable: true, get: function () { return iso_js_1.ZodISOTime; } });\nObject.defineProperty(exports, \"ZodISODuration\", { enumerable: true, get: function () { return iso_js_1.ZodISODuration; } });\nexports.iso = __importStar(require(\"./iso.cjs\"));\nexports.coerce = __importStar(require(\"./coerce.cjs\"));\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.z = void 0;\nconst z = __importStar(require(\"./v4/classic/external.cjs\"));\nexports.z = z;\n__exportStar(require(\"./v4/classic/external.cjs\"), exports);\nexports.default = z;\n", null, null, "export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n", "export var util;\n(function (util) {\n    util.assertEqual = (_) => { };\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n", "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n    get errors() {\n        return this.issues;\n    }\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                const firstEl = sub.path[0];\n                fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n                fieldErrors[firstEl].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n", "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodIssueCode.invalid_type:\n            if (issue.received === ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n            break;\n        case ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n            break;\n        case ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"bigint\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util.assertNever(issue);\n    }\n    return { message };\n};\nexport default errorMap;\n", "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n    overrideErrorMap = map;\n}\nexport function getErrorMap() {\n    return overrideErrorMap;\n}\n", "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    if (issueData.message !== undefined) {\n        return {\n            ...issueData,\n            path: fullPath,\n            message: issueData.message,\n        };\n    }\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: errorMessage,\n    };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n    const overrideMap = getErrorMap();\n    const issue = makeIssue({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap, // contextual error map is first priority\n            ctx.schemaErrorMap, // then schema-bound map if available\n            overrideMap, // then global override map\n            overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            const key = await pair.key;\n            const value = await pair.value;\n            syncPairs.push({\n                key,\n                value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return INVALID;\n            if (value.status === \"aborted\")\n                return INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nexport const INVALID = Object.freeze({\n    status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n", "export var errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    // biome-ignore lint:\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n", "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (Array.isArray(this._key)) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message ?? ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: message ?? required_error ?? ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: message ?? invalid_type_error ?? ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nexport class ZodType {\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: params?.async ?? false,\n                contextualErrorMap: params?.errorMap,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    \"~validate\"(data) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: !!this[\"~standard\"].async,\n            },\n            path: [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        if (!this[\"~standard\"].async) {\n            try {\n                const result = this._parseSync({ data, path: [], parent: ctx });\n                return isValid(result)\n                    ? {\n                        value: result.value,\n                    }\n                    : {\n                        issues: ctx.common.issues,\n                    };\n            }\n            catch (err) {\n                if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n                    this[\"~standard\"].async = true;\n                }\n                ctx.common = {\n                    issues: [],\n                    async: true,\n                };\n            }\n        }\n        return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n            ? {\n                value: result.value,\n            }\n            : {\n                issues: ctx.common.issues,\n            });\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params?.errorMap,\n                async: true,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n        this[\"~standard\"] = {\n            version: 1,\n            vendor: \"zod\",\n            validate: (data) => this[\"~validate\"](data),\n        };\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    let secondsRegexSource = `[0-5]\\\\d`;\n    if (args.precision) {\n        secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n    }\n    const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n    return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nfunction isValidJWT(jwt, alg) {\n    if (!jwtRegex.test(jwt))\n        return false;\n    try {\n        const [header] = jwt.split(\".\");\n        if (!header)\n            return false;\n        // Convert base64url to base64\n        const base64 = header\n            .replace(/-/g, \"+\")\n            .replace(/_/g, \"/\")\n            .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n        const decoded = JSON.parse(atob(base64));\n        if (typeof decoded !== \"object\" || decoded === null)\n            return false;\n        if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n            return false;\n        if (!decoded.alg)\n            return false;\n        if (alg && decoded.alg !== alg)\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isValidCidr(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nexport class ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"duration\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"jwt\") {\n                if (!isValidJWT(input.data, check.alg)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"jwt\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cidr\") {\n                if (!isValidCidr(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cidr\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64url\") {\n                if (!base64urlRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n    }\n    base64url(message) {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return this._addCheck({\n            kind: \"base64url\",\n            ...errorUtil.errToObj(message),\n        });\n    }\n    jwt(options) {\n        return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    cidr(options) {\n        return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            offset: options?.offset ?? false,\n            local: options?.local ?? false,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options?.position,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * Equivalent to `.min(1)`\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isCIDR() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get isBase64url() {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null;\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            try {\n                input.data = BigInt(input.data);\n            }\n            catch {\n                return this._getInvalidInput(input);\n            }\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            return this._getInvalidInput(input);\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _getInvalidInput(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.bigint,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (Number.isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: params?.coerce || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nexport class ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        this._cached = { shape, keys };\n        return this._cached;\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") {\n            }\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: errorUtil.errToObj(message).message ?? defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(mask)) {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nexport class ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nexport class ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nexport class ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nexport class ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(this._def.values);\n        }\n        if (!this._cache.has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(util.getValidEnumValues(this._def.values));\n        }\n        if (!this._cache.has(input.data)) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return INVALID;\n                    if (result.status === \"dirty\")\n                        return DIRTY(result.value);\n                    if (status.value === \"dirty\")\n                        return DIRTY(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return INVALID;\n                if (result.status === \"dirty\")\n                    return DIRTY(result.value);\n                if (status.value === \"dirty\")\n                    return DIRTY(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return INVALID;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n                    if (!isValid(base))\n                        return INVALID;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n                        status: status.value,\n                        value: result,\n                    }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nexport class ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nexport class ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if (isValid(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n//////////                    //////////\n//////////      z.custom      //////////\n//////////                    //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n    const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n    const p2 = typeof p === \"string\" ? { message: p } : p;\n    return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            const r = check(data);\n            if (r instanceof Promise) {\n                return r.then((r) => {\n                    if (!r) {\n                        const params = cleanParams(_params, data);\n                        const _fatal = params.fatal ?? fatal ?? true;\n                        ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n                    }\n                });\n            }\n            if (!r) {\n                const params = cleanParams(_params, data);\n                const _fatal = params.fatal ?? fatal ?? true;\n                ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n            }\n            return;\n        });\n    return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n    object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n    constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n", "/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        var _a;\n        Object.defineProperty(inst, \"_zod\", {\n            value: inst._zod ?? {},\n            enumerable: false,\n        });\n        (_a = inst._zod).traits ?? (_a.traits = new Set());\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        for (const k in _.prototype) {\n            if (!(k in inst))\n                Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n        }\n        inst._zod.constr = _;\n        inst._zod.def = def;\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n", "// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error();\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport function defineLazy(object, key, getter) {\n    const set = false;\n    Object.defineProperty(object, key, {\n        get() {\n            if (!set) {\n                const value = getter();\n                object[key] = value;\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport const captureStackTrace = Error.captureStackTrace\n    ? Error.captureStackTrace\n    : (..._args) => { };\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const newShape = {};\n    const currDef = schema._zod.def; //.shape;\n    for (const key in mask) {\n        if (!(key in currDef.shape)) {\n            throw new Error(`Unrecognized key: \"${key}\"`);\n        }\n        if (!mask[key])\n            continue;\n        // pick key\n        newShape[key] = currDef.shape[key];\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape: newShape,\n        checks: [],\n    });\n}\nexport function omit(schema, mask) {\n    const newShape = { ...schema._zod.def.shape };\n    const currDef = schema._zod.def; //.shape;\n    for (const key in mask) {\n        if (!(key in currDef.shape)) {\n            throw new Error(`Unrecognized key: \"${key}\"`);\n        }\n        if (!mask[key])\n            continue;\n        delete newShape[key];\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape: newShape,\n        checks: [],\n    });\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const def = {\n        ...schema._zod.def,\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        checks: [], // delete existing checks\n    };\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    return clone(a, {\n        ...a._zod.def,\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        catchall: b._zod.def.catchall,\n        checks: [], // delete existing checks\n    });\n}\nexport function partial(Class, schema, mask) {\n    const oldShape = schema._zod.def.shape;\n    const shape = { ...oldShape };\n    if (mask) {\n        for (const key in mask) {\n            if (!(key in oldShape)) {\n                throw new Error(`Unrecognized key: \"${key}\"`);\n            }\n            if (!mask[key])\n                continue;\n            // if (oldShape[key]!._zod.optin === \"optional\") continue;\n            shape[key] = Class\n                ? new Class({\n                    type: \"optional\",\n                    innerType: oldShape[key],\n                })\n                : oldShape[key];\n        }\n    }\n    else {\n        for (const key in oldShape) {\n            // if (oldShape[key]!._zod.optin === \"optional\") continue;\n            shape[key] = Class\n                ? new Class({\n                    type: \"optional\",\n                    innerType: oldShape[key],\n                })\n                : oldShape[key];\n        }\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape,\n        checks: [],\n    });\n}\nexport function required(Class, schema, mask) {\n    const oldShape = schema._zod.def.shape;\n    const shape = { ...oldShape };\n    if (mask) {\n        for (const key in mask) {\n            if (!(key in shape)) {\n                throw new Error(`Unrecognized key: \"${key}\"`);\n            }\n            if (!mask[key])\n                continue;\n            // overwrite with non-optional\n            shape[key] = new Class({\n                type: \"nonoptional\",\n                innerType: oldShape[key],\n            });\n        }\n    }\n    else {\n        for (const key in oldShape) {\n            // overwrite with non-optional\n            shape[key] = new Class({\n                type: \"nonoptional\",\n                innerType: oldShape[key],\n            });\n        }\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape,\n        // optional: [],\n        checks: [],\n    });\n}\nexport function aborted(x, startIndex = 0) {\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true)\n            return true;\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const full = { ...iss, path: iss.path ?? [] };\n    // for backwards compatibility\n    if (!iss.message) {\n        const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\";\n        full.message = message;\n    }\n    // delete (full as any).def;\n    delete full.inst;\n    delete full.continue;\n    if (!ctx?.reportInput) {\n        delete full.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n", "import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"message\", {\n        get() {\n            return JSON.stringify(def, util.jsonStringifyReplacer, 2);\n        },\n        enumerable: true,\n        // configurable: false,\n    });\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, _mapper) {\n    const mapper = _mapper ||\n        function (issue) {\n            return issue.message;\n        };\n    const fieldErrors = { _errors: [] };\n    const processError = (error) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.path.length === 0) {\n                fieldErrors._errors.push(mapper(issue));\n            }\n            else {\n                let curr = fieldErrors;\n                let i = 0;\n                while (i < issue.path.length) {\n                    const el = issue.path[i];\n                    const terminal = i === issue.path.length - 1;\n                    if (!terminal) {\n                        curr[el] = curr[el] || { _errors: [] };\n                    }\n                    else {\n                        curr[el] = curr[el] || { _errors: [] };\n                        curr[el]._errors.push(mapper(issue));\n                    }\n                    curr = curr[el];\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, _mapper) {\n    const mapper = _mapper ||\n        function (issue) {\n            return issue.message;\n        };\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, issue.path));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   \u2716 Expected number, received string at \"username\n * favoriteNumbers[0]\n *   \u2716 Invalid input: expected number\n * ```\n */\nexport function toDotPath(path) {\n    const segs = [];\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => a.path.length - b.path.length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`\u2716 ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  \u2192 at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n", "import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n", "export const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nexport const _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/;\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp =\n//   /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$/;\nexport const hostname = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\nexport const e164 = /^\\+(?:[0-9]){6,14}[0-9]$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^\\d+n?$/;\nexport const integer = /^\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?/i;\nexport const boolean = /true|false/i;\nconst _null = /null/i;\nexport { _null as null };\nconst _undefined = /undefined/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n", "// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n", "export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n", "export const version = {\n    major: 4,\n    minor: 0,\n    patch: 0,\n};\n", "import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    //\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        inst._zod.run = (payload, ctx) => {\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    inst[\"~standard\"] = {\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    };\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            const orig = payload.value;\n            const url = new URL(orig);\n            const href = url.href;\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: regexes.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // payload.value = url.href;\n            if (!orig.endsWith(\"/\") && href.endsWith(\"/\")) {\n                payload.value = href.slice(0, -1);\n            }\n            else {\n                payload.value = href;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv4`;\n    });\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv6`;\n    });\n    inst._zod.check = (payload) => {\n        try {\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const [address, prefix] = payload.value.split(\"/\");\n        try {\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64url\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checksp\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handleObjectResult(result, final, key) {\n    // if(isOptional)\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    final.value[key] = result.value;\n}\nfunction handleOptionalObjectResult(result, final, key, input) {\n    if (result.issues.length) {\n        // validation failed against value schema\n        if (input[key] === undefined) {\n            // if input was undefined, ignore the error\n            if (key in input) {\n                final.value[key] = undefined;\n            }\n            else {\n                final.value[key] = result.value;\n            }\n        }\n        else {\n            final.issues.push(...util.prefixIssues(key, result.issues));\n        }\n    }\n    else if (result.value === undefined) {\n        // validation returned `undefined`\n        if (key in input)\n            final.value[key] = undefined;\n    }\n    else {\n        // non-undefined value\n        final.value[key] = result.value;\n    }\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    const _normalized = util.cached(() => {\n        const keys = Object.keys(def.shape);\n        for (const k of keys) {\n            if (!(def.shape[k] instanceof $ZodType)) {\n                throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n            }\n        }\n        const okeys = util.optionalKeys(def.shape);\n        return {\n            shape: def.shape,\n            keys,\n            keySet: new Set(keys),\n            numKeys: keys.length,\n            optionalKeys: new Set(okeys),\n        };\n    });\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {}`);\n        for (const key of normalized.keys) {\n            if (normalized.optionalKeys.has(key)) {\n                const id = ids[key];\n                doc.write(`const ${id} = ${parseStr(key)};`);\n                const k = util.esc(key);\n                doc.write(`\n        if (${id}.issues.length) {\n          if (input[${k}] === undefined) {\n            if (${k} in input) {\n              newResult[${k}] = undefined;\n            }\n          } else {\n            payload.issues = payload.issues.concat(\n              ${id}.issues.map((iss) => ({\n                ...iss,\n                path: iss.path ? [${k}, ...iss.path] : [${k}],\n              }))\n            );\n          }\n        } else if (${id}.value === undefined) {\n          if (${k} in input) newResult[${k}] = undefined;\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        `);\n            }\n            else {\n                const id = ids[key];\n                //  const id = ids[key];\n                doc.write(`const ${id} = ${parseStr(key)};`);\n                doc.write(`\n          if (${id}.issues.length) payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${util.esc(key)}, ...iss.path] : [${util.esc(key)}]\n          })));`);\n                doc.write(`newResult[${util.esc(key)}] = ${id}.value`);\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n        }\n        else {\n            payload.value = {};\n            const shape = value.shape;\n            for (const key of value.keys) {\n                const el = shape[key];\n                // do not add omitted optional keys\n                // if (!(key in input)) {\n                //   if (optionalKeys.has(key)) continue;\n                //   payload.issues.push({\n                //     code: \"invalid_type\",\n                //     path: [key],\n                //     expected: \"nonoptional\",\n                //     note: `Missing required key: \"${key}\"`,\n                //     input,\n                //     inst,\n                //   });\n                // }\n                const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n                const isOptional = el._zod.optin === \"optional\" && el._zod.optout === \"optional\";\n                if (r instanceof Promise) {\n                    proms.push(r.then((r) => isOptional ? handleOptionalObjectResult(r, payload, key, input) : handleObjectResult(r, payload, key)));\n                }\n                else if (isOptional) {\n                    handleOptionalObjectResult(r, payload, key, input);\n                }\n                else {\n                    handleObjectResult(r, payload, key);\n                }\n            }\n        }\n        if (!catchall) {\n            // return payload;\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        const unrecognized = [];\n        // iterate over input keys\n        const keySet = value.keySet;\n        const _catchall = catchall._zod;\n        const t = _catchall.def.type;\n        for (const key of Object.keys(input)) {\n            if (keySet.has(key))\n                continue;\n            if (t === \"never\") {\n                unrecognized.push(key);\n                continue;\n            }\n            const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handleObjectResult(r, payload, key)));\n            }\n            else {\n                handleObjectResult(r, payload, key);\n            }\n        }\n        if (unrecognized.length) {\n            payload.issues.push({\n                code: \"unrecognized_keys\",\n                keys: unrecognized,\n                input,\n                inst,\n            });\n        }\n        if (!proms.length)\n            return payload;\n        return Promise.all(proms).then(() => {\n            return payload;\n        });\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        if (def.unionFallback) {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    if (left.issues.length) {\n        result.issues.push(...left.issues);\n    }\n    if (right.issues.length) {\n        result.issues.push(...right.issues);\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    const optStart = items.length - [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        if (!def.rest) {\n            const tooBig = input.length > items.length;\n            const tooSmall = input.length < optStart - 1;\n            if (tooBig || tooSmall) {\n                payload.issues.push({\n                    input,\n                    inst,\n                    origin: \"array\",\n                    ...(tooBig ? { code: \"too_big\", maximum: items.length } : { code: \"too_small\", minimum: items.length }),\n                });\n                return payload;\n            }\n        }\n        let i = -1;\n        for (const item of items) {\n            i++;\n            if (i >= input.length)\n                if (i >= optStart)\n                    continue;\n            const result = item._zod.run({\n                value: input[i],\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n            }\n            else {\n                handleTupleResult(result, payload, i);\n            }\n        }\n        if (def.rest) {\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({\n                    value: el,\n                    issues: [],\n                }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        if (def.keyType._zod.values) {\n            const values = def.keyType._zod.values;\n            payload.value = {};\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[key] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[key] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!values.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                if (keyResult.issues.length) {\n                    payload.issues.push({\n                        origin: \"record\",\n                        code: \"invalid_key\",\n                        issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        input: key,\n                        path: [key],\n                        inst,\n                    });\n                    payload.value[keyResult.value] = keyResult.value;\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_key\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    inst._zod.values = new Set(values);\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (inst._zod.values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.values = new Set(def.values);\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? o.toString() : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (inst._zod.values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const _out = def.transform(payload.value, payload);\n        if (_ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault always returns the default value immediately.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def, ctx));\n        }\n        return handlePipeResult(left, def, ctx);\n    };\n});\nfunction handlePipeResult(left, def, ctx) {\n    if (util.aborted(left)) {\n        return left;\n    }\n    return def.out._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (part instanceof $ZodType) {\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"template_literal\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType._zod.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n", "import * as util from \"../core/util.js\";\nexport const parsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"NaN\" : \"number\";\n        }\n        case \"object\": {\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                return data.constructor.name;\n            }\n        }\n    }\n    return t;\n};\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const Nouns = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Invalid input: expected ${issue.expected}, received ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "export const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new Map();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            if (this._idmap.has(meta.id)) {\n                throw new Error(`ID ${meta.id} already exists in the registry`);\n            }\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new Map();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            return { ...pm, ...this._map.get(schema) };\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\nexport const globalRegistry = /*@__PURE__*/ registry();\n", "import * as checks from \"./checks.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// export function _refine<T>(\n//   Class: util.SchemaClass<schemas.$ZodCustom>,\n//   fn: (arg: NoInfer<T>) => util.MaybeAsync<unknown>,\n//   _params: string | $ZodCustomParams = {}\n// ): checks.$ZodCheck<T> {\n//   return _custom(Class, fn, _params);\n// }\n// same as _custom but defaults to abort:false\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Pipe = Classes.Pipe ?? schemas.$ZodPipe;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const _Transform = Classes.Transform ?? schemas.$ZodTransform;\n    const tx = new _Transform({\n        type: \"transform\",\n        transform: (input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: tx,\n                });\n                return {};\n            }\n        },\n        error: params.error,\n    });\n    // params.error;\n    const innerPipe = new _Pipe({\n        type: \"pipe\",\n        in: new _String({ type: \"string\", error: params.error }),\n        out: tx,\n        error: params.error,\n    });\n    const outerPipe = new _Pipe({\n        type: \"pipe\",\n        in: innerPipe,\n        out: new _Boolean({\n            type: \"boolean\",\n            error: params.error,\n        }),\n        error: params.error,\n    });\n    return outerPipe;\n}\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n", "import { $ZodRegistry, globalRegistry } from \"./registries.js\";\nimport { getEnumValues } from \"./util.js\";\nexport class JSONSchemaGenerator {\n    constructor(params) {\n        this.counter = 0;\n        this.metadataRegistry = params?.metadata ?? globalRegistry;\n        this.target = params?.target ?? \"draft-2020-12\";\n        this.unrepresentable = params?.unrepresentable ?? \"throw\";\n        this.override = params?.override ?? (() => { });\n        this.io = params?.io ?? \"output\";\n        this.seen = new Map();\n    }\n    process(schema, _params = { path: [], schemaPath: [] }) {\n        var _a;\n        const def = schema._zod.def;\n        const formatMap = {\n            guid: \"uuid\",\n            url: \"uri\",\n            datetime: \"date-time\",\n            json_string: \"json-string\",\n            regex: \"\", // do not set\n        };\n        // check for schema in seens\n        const seen = this.seen.get(schema);\n        if (seen) {\n            seen.count++;\n            // check if cycle\n            const isCycle = _params.schemaPath.includes(schema);\n            if (isCycle) {\n                seen.cycle = _params.path;\n            }\n            return seen.schema;\n        }\n        // initialize\n        const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n        this.seen.set(schema, result);\n        // custom method overrides default behavior\n        const overrideSchema = schema._zod.toJSONSchema?.();\n        if (overrideSchema) {\n            result.schema = overrideSchema;\n        }\n        else {\n            const params = {\n                ..._params,\n                schemaPath: [..._params.schemaPath, schema],\n                path: _params.path,\n            };\n            const parent = schema._zod.parent;\n            if (parent) {\n                // schema was cloned from another schema\n                result.ref = parent;\n                this.process(parent, params);\n                this.seen.get(parent).isParent = true;\n            }\n            else {\n                const _json = result.schema;\n                switch (def.type) {\n                    case \"string\": {\n                        const json = _json;\n                        json.type = \"string\";\n                        const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n                            .bag;\n                        if (typeof minimum === \"number\")\n                            json.minLength = minimum;\n                        if (typeof maximum === \"number\")\n                            json.maxLength = maximum;\n                        // custom pattern overrides format\n                        if (format) {\n                            json.format = formatMap[format] ?? format;\n                            if (json.format === \"\")\n                                delete json.format; // empty format is not valid\n                        }\n                        if (contentEncoding)\n                            json.contentEncoding = contentEncoding;\n                        if (patterns && patterns.size > 0) {\n                            const regexes = [...patterns];\n                            if (regexes.length === 1)\n                                json.pattern = regexes[0].source;\n                            else if (regexes.length > 1) {\n                                result.schema.allOf = [\n                                    ...regexes.map((regex) => ({\n                                        ...(this.target === \"draft-7\" ? { type: \"string\" } : {}),\n                                        pattern: regex.source,\n                                    })),\n                                ];\n                            }\n                        }\n                        break;\n                    }\n                    case \"number\": {\n                        const json = _json;\n                        const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n                        if (typeof format === \"string\" && format.includes(\"int\"))\n                            json.type = \"integer\";\n                        else\n                            json.type = \"number\";\n                        if (typeof exclusiveMinimum === \"number\")\n                            json.exclusiveMinimum = exclusiveMinimum;\n                        if (typeof minimum === \"number\") {\n                            json.minimum = minimum;\n                            if (typeof exclusiveMinimum === \"number\") {\n                                if (exclusiveMinimum >= minimum)\n                                    delete json.minimum;\n                                else\n                                    delete json.exclusiveMinimum;\n                            }\n                        }\n                        if (typeof exclusiveMaximum === \"number\")\n                            json.exclusiveMaximum = exclusiveMaximum;\n                        if (typeof maximum === \"number\") {\n                            json.maximum = maximum;\n                            if (typeof exclusiveMaximum === \"number\") {\n                                if (exclusiveMaximum <= maximum)\n                                    delete json.maximum;\n                                else\n                                    delete json.exclusiveMaximum;\n                            }\n                        }\n                        if (typeof multipleOf === \"number\")\n                            json.multipleOf = multipleOf;\n                        break;\n                    }\n                    case \"boolean\": {\n                        const json = _json;\n                        json.type = \"boolean\";\n                        break;\n                    }\n                    case \"bigint\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"BigInt cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"symbol\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Symbols cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"null\": {\n                        _json.type = \"null\";\n                        break;\n                    }\n                    case \"any\": {\n                        break;\n                    }\n                    case \"unknown\": {\n                        break;\n                    }\n                    case \"undefined\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Undefined cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"void\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Void cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"never\": {\n                        _json.not = {};\n                        break;\n                    }\n                    case \"date\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Date cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"array\": {\n                        const json = _json;\n                        const { minimum, maximum } = schema._zod.bag;\n                        if (typeof minimum === \"number\")\n                            json.minItems = minimum;\n                        if (typeof maximum === \"number\")\n                            json.maxItems = maximum;\n                        json.type = \"array\";\n                        json.items = this.process(def.element, { ...params, path: [...params.path, \"items\"] });\n                        break;\n                    }\n                    case \"object\": {\n                        const json = _json;\n                        json.type = \"object\";\n                        json.properties = {};\n                        const shape = def.shape; // params.shapeCache.get(schema)!;\n                        for (const key in shape) {\n                            json.properties[key] = this.process(shape[key], {\n                                ...params,\n                                path: [...params.path, \"properties\", key],\n                            });\n                        }\n                        // required keys\n                        const allKeys = new Set(Object.keys(shape));\n                        // const optionalKeys = new Set(def.optional);\n                        const requiredKeys = new Set([...allKeys].filter((key) => {\n                            const v = def.shape[key]._zod;\n                            if (this.io === \"input\") {\n                                return v.optin === undefined;\n                            }\n                            else {\n                                return v.optout === undefined;\n                            }\n                        }));\n                        if (requiredKeys.size > 0) {\n                            json.required = Array.from(requiredKeys);\n                        }\n                        // catchall\n                        if (def.catchall?._zod.def.type === \"never\") {\n                            // strict\n                            json.additionalProperties = false;\n                        }\n                        else if (!def.catchall) {\n                            // regular\n                            if (this.io === \"output\")\n                                json.additionalProperties = false;\n                        }\n                        else if (def.catchall) {\n                            json.additionalProperties = this.process(def.catchall, {\n                                ...params,\n                                path: [...params.path, \"additionalProperties\"],\n                            });\n                        }\n                        break;\n                    }\n                    case \"union\": {\n                        const json = _json;\n                        json.anyOf = def.options.map((x, i) => this.process(x, {\n                            ...params,\n                            path: [...params.path, \"anyOf\", i],\n                        }));\n                        break;\n                    }\n                    case \"intersection\": {\n                        const json = _json;\n                        const a = this.process(def.left, {\n                            ...params,\n                            path: [...params.path, \"allOf\", 0],\n                        });\n                        const b = this.process(def.right, {\n                            ...params,\n                            path: [...params.path, \"allOf\", 1],\n                        });\n                        const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n                        const allOf = [\n                            ...(isSimpleIntersection(a) ? a.allOf : [a]),\n                            ...(isSimpleIntersection(b) ? b.allOf : [b]),\n                        ];\n                        json.allOf = allOf;\n                        break;\n                    }\n                    case \"tuple\": {\n                        const json = _json;\n                        json.type = \"array\";\n                        const prefixItems = def.items.map((x, i) => this.process(x, { ...params, path: [...params.path, \"prefixItems\", i] }));\n                        if (this.target === \"draft-2020-12\") {\n                            json.prefixItems = prefixItems;\n                        }\n                        else {\n                            json.items = prefixItems;\n                        }\n                        if (def.rest) {\n                            const rest = this.process(def.rest, {\n                                ...params,\n                                path: [...params.path, \"items\"],\n                            });\n                            if (this.target === \"draft-2020-12\") {\n                                json.items = rest;\n                            }\n                            else {\n                                json.additionalItems = rest;\n                            }\n                        }\n                        // additionalItems\n                        if (def.rest) {\n                            json.items = this.process(def.rest, {\n                                ...params,\n                                path: [...params.path, \"items\"],\n                            });\n                        }\n                        // length\n                        const { minimum, maximum } = schema._zod.bag;\n                        if (typeof minimum === \"number\")\n                            json.minItems = minimum;\n                        if (typeof maximum === \"number\")\n                            json.maxItems = maximum;\n                        break;\n                    }\n                    case \"record\": {\n                        const json = _json;\n                        json.type = \"object\";\n                        json.propertyNames = this.process(def.keyType, { ...params, path: [...params.path, \"propertyNames\"] });\n                        json.additionalProperties = this.process(def.valueType, {\n                            ...params,\n                            path: [...params.path, \"additionalProperties\"],\n                        });\n                        break;\n                    }\n                    case \"map\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Map cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"set\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Set cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"enum\": {\n                        const json = _json;\n                        const values = getEnumValues(def.entries);\n                        // Number enums can have both string and number values\n                        if (values.every((v) => typeof v === \"number\"))\n                            json.type = \"number\";\n                        if (values.every((v) => typeof v === \"string\"))\n                            json.type = \"string\";\n                        json.enum = values;\n                        break;\n                    }\n                    case \"literal\": {\n                        const json = _json;\n                        const vals = [];\n                        for (const val of def.values) {\n                            if (val === undefined) {\n                                if (this.unrepresentable === \"throw\") {\n                                    throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n                                }\n                                else {\n                                    // do not add to vals\n                                }\n                            }\n                            else if (typeof val === \"bigint\") {\n                                if (this.unrepresentable === \"throw\") {\n                                    throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n                                }\n                                else {\n                                    vals.push(Number(val));\n                                }\n                            }\n                            else {\n                                vals.push(val);\n                            }\n                        }\n                        if (vals.length === 0) {\n                            // do nothing (an undefined literal was stripped)\n                        }\n                        else if (vals.length === 1) {\n                            const val = vals[0];\n                            json.type = val === null ? \"null\" : typeof val;\n                            json.const = val;\n                        }\n                        else {\n                            if (vals.every((v) => typeof v === \"number\"))\n                                json.type = \"number\";\n                            if (vals.every((v) => typeof v === \"string\"))\n                                json.type = \"string\";\n                            if (vals.every((v) => typeof v === \"boolean\"))\n                                json.type = \"string\";\n                            if (vals.every((v) => v === null))\n                                json.type = \"null\";\n                            json.enum = vals;\n                        }\n                        break;\n                    }\n                    case \"file\": {\n                        const json = _json;\n                        const file = {\n                            type: \"string\",\n                            format: \"binary\",\n                            contentEncoding: \"binary\",\n                        };\n                        const { minimum, maximum, mime } = schema._zod.bag;\n                        if (minimum !== undefined)\n                            file.minLength = minimum;\n                        if (maximum !== undefined)\n                            file.maxLength = maximum;\n                        if (mime) {\n                            if (mime.length === 1) {\n                                file.contentMediaType = mime[0];\n                                Object.assign(json, file);\n                            }\n                            else {\n                                json.anyOf = mime.map((m) => {\n                                    const mFile = { ...file, contentMediaType: m };\n                                    return mFile;\n                                });\n                            }\n                        }\n                        else {\n                            Object.assign(json, file);\n                        }\n                        // if (this.unrepresentable === \"throw\") {\n                        //   throw new Error(\"File cannot be represented in JSON Schema\");\n                        // }\n                        break;\n                    }\n                    case \"transform\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Transforms cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"nullable\": {\n                        const inner = this.process(def.innerType, params);\n                        _json.anyOf = [inner, { type: \"null\" }];\n                        break;\n                    }\n                    case \"nonoptional\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        break;\n                    }\n                    case \"success\": {\n                        const json = _json;\n                        json.type = \"boolean\";\n                        break;\n                    }\n                    case \"default\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        _json.default = JSON.parse(JSON.stringify(def.defaultValue));\n                        break;\n                    }\n                    case \"prefault\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        if (this.io === \"input\")\n                            _json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n                        break;\n                    }\n                    case \"catch\": {\n                        // use conditionals\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        let catchValue;\n                        try {\n                            catchValue = def.catchValue(undefined);\n                        }\n                        catch {\n                            throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n                        }\n                        _json.default = catchValue;\n                        break;\n                    }\n                    case \"nan\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"NaN cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"template_literal\": {\n                        const json = _json;\n                        const pattern = schema._zod.pattern;\n                        if (!pattern)\n                            throw new Error(\"Pattern not found in template literal\");\n                        json.type = \"string\";\n                        json.pattern = pattern.source;\n                        break;\n                    }\n                    case \"pipe\": {\n                        const innerType = this.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n                        this.process(innerType, params);\n                        result.ref = innerType;\n                        break;\n                    }\n                    case \"readonly\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        _json.readOnly = true;\n                        break;\n                    }\n                    // passthrough types\n                    case \"promise\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        break;\n                    }\n                    case \"optional\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        break;\n                    }\n                    case \"lazy\": {\n                        const innerType = schema._zod.innerType;\n                        this.process(innerType, params);\n                        result.ref = innerType;\n                        break;\n                    }\n                    case \"custom\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Custom types cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    default: {\n                        def;\n                    }\n                }\n            }\n        }\n        // metadata\n        const meta = this.metadataRegistry.get(schema);\n        if (meta)\n            Object.assign(result.schema, meta);\n        if (this.io === \"input\" && isTransforming(schema)) {\n            // examples/defaults only apply to output type of pipe\n            delete result.schema.examples;\n            delete result.schema.default;\n        }\n        // set prefault as default\n        if (this.io === \"input\" && result.schema._prefault)\n            (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n        delete result.schema._prefault;\n        // pulling fresh from this.seen in case it was overwritten\n        const _result = this.seen.get(schema);\n        return _result.schema;\n    }\n    emit(schema, _params) {\n        const params = {\n            cycles: _params?.cycles ?? \"ref\",\n            reused: _params?.reused ?? \"inline\",\n            // unrepresentable: _params?.unrepresentable ?? \"throw\",\n            // uri: _params?.uri ?? ((id) => `${id}`),\n            external: _params?.external ?? undefined,\n        };\n        // iterate over seen map;\n        const root = this.seen.get(schema);\n        if (!root)\n            throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n        // initialize result with root schema fields\n        // Object.assign(result, seen.cached);\n        // returns a ref to the schema\n        // defId will be empty if the ref points to an external schema (or #)\n        const makeURI = (entry) => {\n            // comparing the seen objects because sometimes\n            // multiple schemas map to the same seen object.\n            // e.g. lazy\n            // external is configured\n            const defsSegment = this.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            if (params.external) {\n                const externalId = params.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${this.counter++}`;\n                // check if schema is in the external registry\n                const uriGenerator = params.external.uri ?? ((id) => id);\n                if (externalId) {\n                    return { ref: uriGenerator(externalId) };\n                }\n                // otherwise, add to __shared\n                const id = entry[1].defId ?? entry[1].schema.id ?? `schema${this.counter++}`;\n                entry[1].defId = id; // set defId so it will be reused if needed\n                return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n            }\n            if (entry[1] === root) {\n                return { ref: \"#\" };\n            }\n            // self-contained schema\n            const uriPrefix = `#`;\n            const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n            const defId = entry[1].schema.id ?? `__schema${this.counter++}`;\n            return { defId, ref: defUriPrefix + defId };\n        };\n        // stored cached version in `def` property\n        // remove all properties, set $ref\n        const extractToDef = (entry) => {\n            // if the schema is already a reference, do not extract it\n            if (entry[1].schema.$ref) {\n                return;\n            }\n            const seen = entry[1];\n            const { ref, defId } = makeURI(entry);\n            seen.def = { ...seen.schema };\n            // defId won't be set if the schema is a reference to an external schema\n            if (defId)\n                seen.defId = defId;\n            // wipe away all properties except $ref\n            const schema = seen.schema;\n            for (const key in schema) {\n                delete schema[key];\n            }\n            schema.$ref = ref;\n        };\n        // throw on cycles\n        // break cycles\n        if (params.cycles === \"throw\") {\n            for (const entry of this.seen.entries()) {\n                const seen = entry[1];\n                if (seen.cycle) {\n                    throw new Error(\"Cycle detected: \" +\n                        `#/${seen.cycle?.join(\"/\")}/<root>` +\n                        '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n                }\n            }\n        }\n        // extract schemas into $defs\n        for (const entry of this.seen.entries()) {\n            const seen = entry[1];\n            // convert root schema to # $ref\n            if (schema === entry[0]) {\n                extractToDef(entry); // this has special handling for the root schema\n                continue;\n            }\n            // extract schemas that are in the external registry\n            if (params.external) {\n                const ext = params.external.registry.get(entry[0])?.id;\n                if (schema !== entry[0] && ext) {\n                    extractToDef(entry);\n                    continue;\n                }\n            }\n            // extract schemas with `id` meta\n            const id = this.metadataRegistry.get(entry[0])?.id;\n            if (id) {\n                extractToDef(entry);\n                continue;\n            }\n            // break cycles\n            if (seen.cycle) {\n                // any\n                extractToDef(entry);\n                continue;\n            }\n            // extract reused schemas\n            if (seen.count > 1) {\n                if (params.reused === \"ref\") {\n                    extractToDef(entry);\n                    // biome-ignore lint:\n                    continue;\n                }\n            }\n        }\n        // flatten _refs\n        const flattenRef = (zodSchema, params) => {\n            const seen = this.seen.get(zodSchema);\n            const schema = seen.def ?? seen.schema;\n            const _cached = { ...schema };\n            // already seen\n            if (seen.ref === null) {\n                return;\n            }\n            // flatten ref if defined\n            const ref = seen.ref;\n            seen.ref = null; // prevent recursion\n            if (ref) {\n                flattenRef(ref, params);\n                // merge referenced schema into current\n                const refSchema = this.seen.get(ref).schema;\n                if (refSchema.$ref && params.target === \"draft-7\") {\n                    schema.allOf = schema.allOf ?? [];\n                    schema.allOf.push(refSchema);\n                }\n                else {\n                    Object.assign(schema, refSchema);\n                    Object.assign(schema, _cached); // prevent overwriting any fields in the original schema\n                }\n            }\n            // execute overrides\n            if (!seen.isParent)\n                this.override({\n                    zodSchema: zodSchema,\n                    jsonSchema: schema,\n                    path: seen.path ?? [],\n                });\n        };\n        for (const entry of [...this.seen.entries()].reverse()) {\n            flattenRef(entry[0], { target: this.target });\n        }\n        const result = {};\n        if (this.target === \"draft-2020-12\") {\n            result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n        }\n        else if (this.target === \"draft-7\") {\n            result.$schema = \"http://json-schema.org/draft-07/schema#\";\n        }\n        else {\n            console.warn(`Invalid target: ${this.target}`);\n        }\n        if (params.external?.uri) {\n            const id = params.external.registry.get(schema)?.id;\n            if (!id)\n                throw new Error(\"Schema is missing an `id` property\");\n            result.$id = params.external.uri(id);\n        }\n        Object.assign(result, root.def);\n        // build defs object\n        const defs = params.external?.defs ?? {};\n        for (const entry of this.seen.entries()) {\n            const seen = entry[1];\n            if (seen.def && seen.defId) {\n                defs[seen.defId] = seen.def;\n            }\n        }\n        // set definitions in result\n        if (params.external) {\n        }\n        else {\n            if (Object.keys(defs).length > 0) {\n                if (this.target === \"draft-2020-12\") {\n                    result.$defs = defs;\n                }\n                else {\n                    result.definitions = defs;\n                }\n            }\n        }\n        try {\n            // this \"finalizes\" this schema and ensures all cycles are removed\n            // each call to .emit() is functionally independent\n            // though the seen map is shared\n            return JSON.parse(JSON.stringify(result));\n        }\n        catch (_err) {\n            throw new Error(\"Error converting schema to JSON.\");\n        }\n    }\n}\nexport function toJSONSchema(input, _params) {\n    if (input instanceof $ZodRegistry) {\n        const gen = new JSONSchemaGenerator(_params);\n        const defs = {};\n        for (const entry of input._idmap.entries()) {\n            const [_, schema] = entry;\n            gen.process(schema);\n        }\n        const schemas = {};\n        const external = {\n            registry: input,\n            uri: _params?.uri,\n            defs,\n        };\n        for (const entry of input._idmap.entries()) {\n            const [key, schema] = entry;\n            schemas[key] = gen.emit(schema, {\n                ..._params,\n                external,\n            });\n        }\n        if (Object.keys(defs).length > 0) {\n            const defsSegment = gen.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            schemas.__shared = {\n                [defsSegment]: defs,\n            };\n        }\n        return { schemas };\n    }\n    const gen = new JSONSchemaGenerator(_params);\n    gen.process(input);\n    return gen.emit(input, _params);\n}\nfunction isTransforming(_schema, _ctx) {\n    const ctx = _ctx ?? { seen: new Set() };\n    if (ctx.seen.has(_schema))\n        return false;\n    ctx.seen.add(_schema);\n    const schema = _schema;\n    const def = schema._zod.def;\n    switch (def.type) {\n        case \"string\":\n        case \"number\":\n        case \"bigint\":\n        case \"boolean\":\n        case \"date\":\n        case \"symbol\":\n        case \"undefined\":\n        case \"null\":\n        case \"any\":\n        case \"unknown\":\n        case \"never\":\n        case \"void\":\n        case \"literal\":\n        case \"enum\":\n        case \"nan\":\n        case \"file\":\n        case \"template_literal\":\n            return false;\n        case \"array\": {\n            return isTransforming(def.element, ctx);\n        }\n        case \"object\": {\n            for (const key in def.shape) {\n                if (isTransforming(def.shape[key], ctx))\n                    return true;\n            }\n            return false;\n        }\n        case \"union\": {\n            for (const option of def.options) {\n                if (isTransforming(option, ctx))\n                    return true;\n            }\n            return false;\n        }\n        case \"intersection\": {\n            return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n        }\n        case \"tuple\": {\n            for (const item of def.items) {\n                if (isTransforming(item, ctx))\n                    return true;\n            }\n            if (def.rest && isTransforming(def.rest, ctx))\n                return true;\n            return false;\n        }\n        case \"record\": {\n            return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n        }\n        case \"map\": {\n            return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n        }\n        case \"set\": {\n            return isTransforming(def.valueType, ctx);\n        }\n        // inner types\n        case \"promise\":\n        case \"optional\":\n        case \"nonoptional\":\n        case \"nullable\":\n        case \"readonly\":\n            return isTransforming(def.innerType, ctx);\n        case \"lazy\":\n            return isTransforming(def.getter(), ctx);\n        case \"default\": {\n            return isTransforming(def.innerType, ctx);\n        }\n        case \"prefault\": {\n            return isTransforming(def.innerType, ctx);\n        }\n        case \"custom\": {\n            return false;\n        }\n        case \"transform\": {\n            return true;\n        }\n        case \"pipe\": {\n            return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n        }\n        case \"success\": {\n            return false;\n        }\n        case \"catch\": {\n            return false;\n        }\n        default:\n            def;\n    }\n    throw new Error(`Unknown schema type: ${def.type}`);\n}\n", "import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodMiniType = /*@__PURE__*/ core.$constructor(\"ZodMiniType\", (inst, def) => {\n    if (!inst._zod)\n        throw new Error(\"Uninitialized schema in ZodMiniType.\");\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.check = (...checks) => {\n        return inst.clone({\n            ...def,\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }\n        // { parent: true }\n        );\n    };\n    inst.clone = (_def, params) => core.clone(inst, _def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n});\nexport const ZodMiniString = /*@__PURE__*/ core.$constructor(\"ZodMiniString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function string(params) {\n    return core._string(ZodMiniString, params);\n}\nexport const ZodMiniStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    ZodMiniString.init(inst, def);\n});\nexport const ZodMiniEmail = /*@__PURE__*/ core.$constructor(\"ZodMiniEmail\", (inst, def) => {\n    core.$ZodEmail.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodMiniEmail, params);\n}\nexport const ZodMiniGUID = /*@__PURE__*/ core.$constructor(\"ZodMiniGUID\", (inst, def) => {\n    core.$ZodGUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodMiniGUID, params);\n}\nexport const ZodMiniUUID = /*@__PURE__*/ core.$constructor(\"ZodMiniUUID\", (inst, def) => {\n    core.$ZodUUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodMiniUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodMiniUUID, params);\n}\nexport const ZodMiniURL = /*@__PURE__*/ core.$constructor(\"ZodMiniURL\", (inst, def) => {\n    core.$ZodURL.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodMiniURL, params);\n}\nexport const ZodMiniEmoji = /*@__PURE__*/ core.$constructor(\"ZodMiniEmoji\", (inst, def) => {\n    core.$ZodEmoji.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodMiniEmoji, params);\n}\nexport const ZodMiniNanoID = /*@__PURE__*/ core.$constructor(\"ZodMiniNanoID\", (inst, def) => {\n    core.$ZodNanoID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodMiniNanoID, params);\n}\nexport const ZodMiniCUID = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID\", (inst, def) => {\n    core.$ZodCUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodMiniCUID, params);\n}\nexport const ZodMiniCUID2 = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID2\", (inst, def) => {\n    core.$ZodCUID2.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodMiniCUID2, params);\n}\nexport const ZodMiniULID = /*@__PURE__*/ core.$constructor(\"ZodMiniULID\", (inst, def) => {\n    core.$ZodULID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodMiniULID, params);\n}\nexport const ZodMiniXID = /*@__PURE__*/ core.$constructor(\"ZodMiniXID\", (inst, def) => {\n    core.$ZodXID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodMiniXID, params);\n}\nexport const ZodMiniKSUID = /*@__PURE__*/ core.$constructor(\"ZodMiniKSUID\", (inst, def) => {\n    core.$ZodKSUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodMiniKSUID, params);\n}\nexport const ZodMiniIPv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv4\", (inst, def) => {\n    core.$ZodIPv4.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodMiniIPv4, params);\n}\nexport const ZodMiniIPv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv6\", (inst, def) => {\n    core.$ZodIPv6.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodMiniIPv6, params);\n}\nexport const ZodMiniCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodMiniCIDRv4, params);\n}\nexport const ZodMiniCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodMiniCIDRv6, params);\n}\nexport const ZodMiniBase64 = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64\", (inst, def) => {\n    core.$ZodBase64.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodMiniBase64, params);\n}\nexport const ZodMiniBase64URL = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64URL\", (inst, def) => {\n    core.$ZodBase64URL.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodMiniBase64URL, params);\n}\nexport const ZodMiniE164 = /*@__PURE__*/ core.$constructor(\"ZodMiniE164\", (inst, def) => {\n    core.$ZodE164.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodMiniE164, params);\n}\nexport const ZodMiniJWT = /*@__PURE__*/ core.$constructor(\"ZodMiniJWT\", (inst, def) => {\n    core.$ZodJWT.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodMiniJWT, params);\n}\nexport const ZodMiniCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniCustomStringFormat\", (inst, def) => {\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodMiniCustomStringFormat, format, fnOrRegex, _params);\n}\nexport const ZodMiniNumber = /*@__PURE__*/ core.$constructor(\"ZodMiniNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function number(params) {\n    return core._number(ZodMiniNumber, params);\n}\nexport const ZodMiniNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodMiniNumber.init(inst, def);\n});\n// int\nexport function int(params) {\n    return core._int(ZodMiniNumberFormat, params);\n}\n// float32\nexport function float32(params) {\n    return core._float32(ZodMiniNumberFormat, params);\n}\n// float64\nexport function float64(params) {\n    return core._float64(ZodMiniNumberFormat, params);\n}\n// int32\nexport function int32(params) {\n    return core._int32(ZodMiniNumberFormat, params);\n}\n// uint32\nexport function uint32(params) {\n    return core._uint32(ZodMiniNumberFormat, params);\n}\nexport const ZodMiniBoolean = /*@__PURE__*/ core.$constructor(\"ZodMiniBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function boolean(params) {\n    return core._boolean(ZodMiniBoolean, params);\n}\nexport const ZodMiniBigInt = /*@__PURE__*/ core.$constructor(\"ZodMiniBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function bigint(params) {\n    return core._bigint(ZodMiniBigInt, params);\n}\nexport const ZodMiniBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodMiniBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodMiniBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodMiniBigIntFormat, params);\n}\nexport const ZodMiniSymbol = /*@__PURE__*/ core.$constructor(\"ZodMiniSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function symbol(params) {\n    return core._symbol(ZodMiniSymbol, params);\n}\nexport const ZodMiniUndefined = /*@__PURE__*/ core.$constructor(\"ZodMiniUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodMiniUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodMiniNull = /*@__PURE__*/ core.$constructor(\"ZodMiniNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _null(params) {\n    return core._null(ZodMiniNull, params);\n}\nexport { _null as null };\nexport const ZodMiniAny = /*@__PURE__*/ core.$constructor(\"ZodMiniAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function any() {\n    return core._any(ZodMiniAny);\n}\nexport const ZodMiniUnknown = /*@__PURE__*/ core.$constructor(\"ZodMiniUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function unknown() {\n    return core._unknown(ZodMiniUnknown);\n}\nexport const ZodMiniNever = /*@__PURE__*/ core.$constructor(\"ZodMiniNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function never(params) {\n    return core._never(ZodMiniNever, params);\n}\nexport const ZodMiniVoid = /*@__PURE__*/ core.$constructor(\"ZodMiniVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _void(params) {\n    return core._void(ZodMiniVoid, params);\n}\nexport { _void as void };\nexport const ZodMiniDate = /*@__PURE__*/ core.$constructor(\"ZodMiniDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function date(params) {\n    return core._date(ZodMiniDate, params);\n}\nexport const ZodMiniArray = /*@__PURE__*/ core.$constructor(\"ZodMiniArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function array(element, params) {\n    return new ZodMiniArray({\n        type: \"array\",\n        element: element,\n        ...util.normalizeParams(params),\n    });\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return literal(Object.keys(shape));\n}\nexport const ZodMiniObject = /*@__PURE__*/ core.$constructor(\"ZodMiniObject\", (inst, def) => {\n    core.$ZodObject.init(inst, def);\n    ZodMiniType.init(inst, def);\n    util.defineLazy(inst, \"shape\", () => def.shape);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        ...util.normalizeParams(params),\n    };\n    return new ZodMiniObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodMiniObject({\n        type: \"object\",\n        // shape: shape as core.$ZodLooseShape,\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodMiniObject({\n        type: \"object\",\n        // shape: shape as core.$ZodLooseShape,\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        // get optional() {\n        //   return util.optionalKeys(shape);\n        // },\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\n// object methods\nexport function extend(schema, shape) {\n    return util.extend(schema, shape);\n}\nexport function merge(schema, shape) {\n    return util.extend(schema, shape);\n}\nexport function pick(schema, mask) {\n    return util.pick(schema, mask);\n}\n// .omit\nexport function omit(schema, mask) {\n    return util.omit(schema, mask);\n}\nexport function partial(schema, mask) {\n    return util.partial(ZodMiniOptional, schema, mask);\n}\nexport function required(schema, mask) {\n    return util.required(ZodMiniNonOptional, schema, mask);\n}\nexport function catchall(inst, catchall) {\n    return inst.clone({ ...inst._zod.def, catchall: catchall });\n}\nexport const ZodMiniUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function union(options, params) {\n    return new ZodMiniUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniDiscriminatedUnion\", (inst, def) => {\n    core.$ZodDiscriminatedUnion.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    return new ZodMiniDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniIntersection = /*@__PURE__*/ core.$constructor(\"ZodMiniIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function intersection(left, right) {\n    return new ZodMiniIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodMiniTuple = /*@__PURE__*/ core.$constructor(\"ZodMiniTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodMiniTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniRecord = /*@__PURE__*/ core.$constructor(\"ZodMiniRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function record(keyType, valueType, params) {\n    return new ZodMiniRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function partialRecord(keyType, valueType, params) {\n    return new ZodMiniRecord({\n        type: \"record\",\n        keyType: union([keyType, never()]),\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniMap = /*@__PURE__*/ core.$constructor(\"ZodMiniMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMiniMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniSet = /*@__PURE__*/ core.$constructor(\"ZodMiniSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function set(valueType, params) {\n    return new ZodMiniSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniEnum = /*@__PURE__*/ core.$constructor(\"ZodMiniEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodMiniEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodMiniEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function literal(value, params) {\n    return new ZodMiniLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniFile = /*@__PURE__*/ core.$constructor(\"ZodMiniFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function file(params) {\n    return core._file(ZodMiniFile, params);\n}\nexport const ZodMiniTransform = /*@__PURE__*/ core.$constructor(\"ZodMiniTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function transform(fn) {\n    return new ZodMiniTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodMiniOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function optional(innerType) {\n    return new ZodMiniOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniNullable = /*@__PURE__*/ core.$constructor(\"ZodMiniNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function nullable(innerType) {\n    return new ZodMiniNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodMiniDefault = /*@__PURE__*/ core.$constructor(\"ZodMiniDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodMiniDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport const ZodMiniPrefault = /*@__PURE__*/ core.$constructor(\"ZodMiniPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodMiniPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport const ZodMiniNonOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function nonoptional(innerType, params) {\n    return new ZodMiniNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniSuccess = /*@__PURE__*/ core.$constructor(\"ZodMiniSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function success(innerType) {\n    return new ZodMiniSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniCatch = /*@__PURE__*/ core.$constructor(\"ZodMiniCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodMiniCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodMiniNaN = /*@__PURE__*/ core.$constructor(\"ZodMiniNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function nan(params) {\n    return core._nan(ZodMiniNaN, params);\n}\nexport const ZodMiniPipe = /*@__PURE__*/ core.$constructor(\"ZodMiniPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function pipe(in_, out) {\n    return new ZodMiniPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n    });\n}\nexport const ZodMiniReadonly = /*@__PURE__*/ core.$constructor(\"ZodMiniReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function readonly(innerType) {\n    return new ZodMiniReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodMiniTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniLazy = /*@__PURE__*/ core.$constructor(\"ZodMiniLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// export function lazy<T extends object>(getter: () => T): T {\n//   return util.createTransparentProxy<T>(getter);\n// }\nfunction _lazy(getter) {\n    return new ZodMiniLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport { _lazy as lazy };\nexport const ZodMiniPromise = /*@__PURE__*/ core.$constructor(\"ZodMiniPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function promise(innerType) {\n    return new ZodMiniPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniCustom = /*@__PURE__*/ core.$constructor(\"ZodMiniCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// custom checks\nexport function check(fn, params) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// ZodCustom\n// custom schema\nexport function custom(fn, _params) {\n    return core._custom(ZodMiniCustom, fn ?? (() => true), _params);\n}\n// refine\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodMiniCustom, fn, _params);\n}\n// instanceof\nclass Class {\n    constructor(..._args) { }\n}\nfunction _instanceof(cls, params = {\n    error: `Input not instance of ${cls.name}`,\n}) {\n    const inst = custom((data) => data instanceof cls, params);\n    inst._zod.bag.Class = cls;\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Pipe: ZodMiniPipe,\n    Boolean: ZodMiniBoolean,\n    String: ZodMiniString,\n    Transform: ZodMiniTransform,\n}, ...args);\nexport function json() {\n    const jsonSchema = _lazy(() => {\n        return union([string(), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n", null, "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n", "import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => inst.issues.push(issue),\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => inst.issues.push(...issues),\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n", "import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n", "import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // base methods\n    inst.check = (...checks) => {\n        return inst.clone({\n            ...def,\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }\n        // { parent: true }\n        );\n    };\n    inst.clone = (def, params) => core.clone(inst, def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n    // parsing\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    // refinements\n    inst.refine = (check, params) => inst.check(refine(check, params));\n    inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n    inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n    // wrappers\n    inst.optional = () => optional(inst);\n    inst.nullable = () => nullable(inst);\n    inst.nullish = () => optional(nullable(inst));\n    inst.nonoptional = (params) => nonoptional(inst, params);\n    inst.array = () => array(inst);\n    inst.or = (arg) => union([inst, arg]);\n    inst.and = (arg) => intersection(inst, arg);\n    inst.transform = (tx) => pipe(inst, transform(tx));\n    inst.default = (def) => _default(inst, def);\n    inst.prefault = (def) => prefault(inst, def);\n    // inst.coalesce = (def, params) => coalesce(inst, def, params);\n    inst.catch = (params) => _catch(inst, params);\n    inst.pipe = (target) => pipe(inst, target);\n    inst.readonly = () => readonly(inst);\n    // meta\n    inst.describe = (description) => {\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    };\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    inst.meta = (...args) => {\n        if (args.length === 0) {\n            return core.globalRegistry.get(inst);\n        }\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    };\n    // helpers\n    inst.isOptional = () => inst.safeParse(undefined).success;\n    inst.isNullable = () => inst.safeParse(null).success;\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    // validations\n    inst.regex = (...args) => inst.check(checks.regex(...args));\n    inst.includes = (...args) => inst.check(checks.includes(...args));\n    inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n    inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n    inst.min = (...args) => inst.check(checks.minLength(...args));\n    inst.max = (...args) => inst.check(checks.maxLength(...args));\n    inst.length = (...args) => inst.check(checks.length(...args));\n    inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n    inst.lowercase = (params) => inst.check(checks.lowercase(params));\n    inst.uppercase = (params) => inst.check(checks.uppercase(params));\n    // transforms\n    inst.trim = () => inst.check(checks.trim());\n    inst.normalize = (...args) => inst.check(checks.normalize(...args));\n    inst.toLowerCase = () => inst.check(checks.toLowerCase());\n    inst.toUpperCase = () => inst.check(checks.toUpperCase());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.int = (params) => inst.check(int(params));\n    inst.safe = (params) => inst.check(int(params));\n    inst.positive = (params) => inst.check(checks.gt(0, params));\n    inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n    inst.negative = (params) => inst.check(checks.lt(0, params));\n    inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n    // inst.finite = (params) => inst.check(core.finite(params));\n    inst.finite = () => inst;\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst.element = def.element;\n    inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n    inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n    inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n    inst.length = (len, params) => inst.check(checks.length(len, params));\n    inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return literal(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObject.init(inst, def);\n    ZodType.init(inst, def);\n    util.defineLazy(inst, \"shape\", () => def.shape);\n    inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n    inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n    inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    // inst.nonstrict = () => inst.clone({ ...inst._zod.def, catchall: api.unknown() });\n    inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n    inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n    inst.extend = (incoming) => {\n        return util.extend(inst, incoming);\n    };\n    inst.merge = (other) => util.merge(inst, other);\n    inst.pick = (mask) => util.pick(inst, mask);\n    inst.omit = (mask) => util.omit(inst, mask);\n    inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n    inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType: union([keyType, never()]),\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                _issue.continue ?? (_issue.continue = true);\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n    const ch = check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort);\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    });\n    return ch;\n}\nfunction _instanceof(cls, params = {\n    error: `Input not instance of ${cls.name}`,\n}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Pipe: ZodPipe,\n    Boolean: ZodBoolean,\n    String: ZodString,\n    Transform: ZodTransform,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n    return pipe(transform(fn), schema);\n}\n", "export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, function, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, toJSONSchema, TimePrecision, NEVER, } from \"../core/index.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n", null, null, "export const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const jsonDescription = (jsonSchema, def) => {\n    if (def.description) {\n        try {\n            return {\n                ...jsonSchema,\n                ...JSON.parse(def.description),\n            };\n        }\n        catch { }\n    }\n    return jsonSchema;\n};\nexport const defaultOptions = {\n    name: undefined,\n    $refStrategy: \"root\",\n    basePath: [\"#\"],\n    effectStrategy: \"input\",\n    pipeStrategy: \"all\",\n    dateStrategy: \"format:date-time\",\n    mapStrategy: \"entries\",\n    removeAdditionalStrategy: \"passthrough\",\n    allowedAdditionalProperties: true,\n    rejectedAdditionalProperties: false,\n    definitionPath: \"definitions\",\n    target: \"jsonSchema7\",\n    strictUnions: false,\n    definitions: {},\n    errorMessages: false,\n    markdownDescription: false,\n    patternStrategy: \"escape\",\n    applyRegexFlags: false,\n    emailStrategy: \"format:email\",\n    base64Strategy: \"contentEncoding:base64\",\n    nameStrategy: \"ref\",\n    openAiAnyTypeName: \"OpenAiAnyType\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n    ? {\n        ...defaultOptions,\n        name: options,\n    }\n    : {\n        ...defaultOptions,\n        ...options,\n    });\n", "import { getDefaultOptions } from \"./Options.js\";\nexport const getRefs = (options) => {\n    const _options = getDefaultOptions(options);\n    const currentPath = _options.name !== undefined\n        ? [..._options.basePath, _options.definitionPath, _options.name]\n        : _options.basePath;\n    return {\n        ..._options,\n        flags: { hasReferencedOpenAiAnyType: false },\n        currentPath: currentPath,\n        propertyPath: undefined,\n        seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [\n            def._def,\n            {\n                def: def._def,\n                path: [..._options.basePath, _options.definitionPath, name],\n                // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n                jsonSchema: undefined,\n            },\n        ])),\n    };\n};\n", "export function addErrorMessage(res, key, errorMessage, refs) {\n    if (!refs?.errorMessages)\n        return;\n    if (errorMessage) {\n        res.errorMessage = {\n            ...res.errorMessage,\n            [key]: errorMessage,\n        };\n    }\n}\nexport function setResponseValueAndErrors(res, key, value, errorMessage, refs) {\n    res[key] = value;\n    addErrorMessage(res, key, errorMessage, refs);\n}\n", "export const getRelativePath = (pathA, pathB) => {\n    let i = 0;\n    for (; i < pathA.length && i < pathB.length; i++) {\n        if (pathA[i] !== pathB[i])\n            break;\n    }\n    return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n", "import { getRelativePath } from \"../getRelativePath.js\";\nexport function parseAnyDef(refs) {\n    if (refs.target !== \"openAi\") {\n        return {};\n    }\n    const anyDefinitionPath = [\n        ...refs.basePath,\n        refs.definitionPath,\n        refs.openAiAnyTypeName,\n    ];\n    refs.flags.hasReferencedOpenAiAnyType = true;\n    return {\n        $ref: refs.$refStrategy === \"relative\"\n            ? getRelativePath(anyDefinitionPath, refs.currentPath)\n            : anyDefinitionPath.join(\"/\"),\n    };\n}\n", "import { ZodFirstPartyTypeKind } from \"zod/v3\";\nimport { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseArrayDef(def, refs) {\n    const res = {\n        type: \"array\",\n    };\n    if (def.type?._def &&\n        def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {\n        res.items = parseDef(def.type._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"items\"],\n        });\n    }\n    if (def.minLength) {\n        setResponseValueAndErrors(res, \"minItems\", def.minLength.value, def.minLength.message, refs);\n    }\n    if (def.maxLength) {\n        setResponseValueAndErrors(res, \"maxItems\", def.maxLength.value, def.maxLength.message, refs);\n    }\n    if (def.exactLength) {\n        setResponseValueAndErrors(res, \"minItems\", def.exactLength.value, def.exactLength.message, refs);\n        setResponseValueAndErrors(res, \"maxItems\", def.exactLength.value, def.exactLength.message, refs);\n    }\n    return res;\n}\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseBigintDef(def, refs) {\n    const res = {\n        type: \"integer\",\n        format: \"int64\",\n    };\n    if (!def.checks)\n        return res;\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"min\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMinimum = true;\n                    }\n                    setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                }\n                break;\n            case \"max\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMaximum = true;\n                    }\n                    setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                }\n                break;\n            case \"multipleOf\":\n                setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n                break;\n        }\n    }\n    return res;\n}\n", "export function parseBooleanDef() {\n    return {\n        type: \"boolean\",\n    };\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n    return parseDef(_def.type._def, refs);\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n    return parseDef(def.innerType._def, refs);\n};\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseDateDef(def, refs, overrideDateStrategy) {\n    const strategy = overrideDateStrategy ?? refs.dateStrategy;\n    if (Array.isArray(strategy)) {\n        return {\n            anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n        };\n    }\n    switch (strategy) {\n        case \"string\":\n        case \"format:date-time\":\n            return {\n                type: \"string\",\n                format: \"date-time\",\n            };\n        case \"format:date\":\n            return {\n                type: \"string\",\n                format: \"date\",\n            };\n        case \"integer\":\n            return integerDateParser(def, refs);\n    }\n}\nconst integerDateParser = (def, refs) => {\n    const res = {\n        type: \"integer\",\n        format: \"unix-time\",\n    };\n    if (refs.target === \"openApi3\") {\n        return res;\n    }\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"min\":\n                setResponseValueAndErrors(res, \"minimum\", check.value, // This is in milliseconds\n                check.message, refs);\n                break;\n            case \"max\":\n                setResponseValueAndErrors(res, \"maximum\", check.value, // This is in milliseconds\n                check.message, refs);\n                break;\n        }\n    }\n    return res;\n};\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseDefaultDef(_def, refs) {\n    return {\n        ...parseDef(_def.innerType._def, refs),\n        default: _def.defaultValue(),\n    };\n}\n", "import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseEffectsDef(_def, refs) {\n    return refs.effectStrategy === \"input\"\n        ? parseDef(_def.schema._def, refs)\n        : parseAnyDef(refs);\n}\n", "export function parseEnumDef(def) {\n    return {\n        type: \"string\",\n        enum: Array.from(def.values),\n    };\n}\n", "import { parseDef } from \"../parseDef.js\";\nconst isJsonSchema7AllOfType = (type) => {\n    if (\"type\" in type && type.type === \"string\")\n        return false;\n    return \"allOf\" in type;\n};\nexport function parseIntersectionDef(def, refs) {\n    const allOf = [\n        parseDef(def.left._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n        }),\n        parseDef(def.right._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"allOf\", \"1\"],\n        }),\n    ].filter((x) => !!x);\n    let unevaluatedProperties = refs.target === \"jsonSchema2019-09\"\n        ? { unevaluatedProperties: false }\n        : undefined;\n    const mergedAllOf = [];\n    // If either of the schemas is an allOf, merge them into a single allOf\n    allOf.forEach((schema) => {\n        if (isJsonSchema7AllOfType(schema)) {\n            mergedAllOf.push(...schema.allOf);\n            if (schema.unevaluatedProperties === undefined) {\n                // If one of the schemas has no unevaluatedProperties set,\n                // the merged schema should also have no unevaluatedProperties set\n                unevaluatedProperties = undefined;\n            }\n        }\n        else {\n            let nestedSchema = schema;\n            if (\"additionalProperties\" in schema &&\n                schema.additionalProperties === false) {\n                const { additionalProperties, ...rest } = schema;\n                nestedSchema = rest;\n            }\n            else {\n                // As soon as one of the schemas has additionalProperties set not to false, we allow unevaluatedProperties\n                unevaluatedProperties = undefined;\n            }\n            mergedAllOf.push(nestedSchema);\n        }\n    });\n    return mergedAllOf.length\n        ? {\n            allOf: mergedAllOf,\n            ...unevaluatedProperties,\n        }\n        : undefined;\n}\n", "export function parseLiteralDef(def, refs) {\n    const parsedType = typeof def.value;\n    if (parsedType !== \"bigint\" &&\n        parsedType !== \"number\" &&\n        parsedType !== \"boolean\" &&\n        parsedType !== \"string\") {\n        return {\n            type: Array.isArray(def.value) ? \"array\" : \"object\",\n        };\n    }\n    if (refs.target === \"openApi3\") {\n        return {\n            type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n            enum: [def.value],\n        };\n    }\n    return {\n        type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n        const: def.value,\n    };\n}\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n    /**\n     * `c` was changed to `[cC]` to replicate /i flag\n     */\n    cuid: /^[cC][^\\s-]{8,}$/,\n    cuid2: /^[0-9a-z]+$/,\n    ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n    /**\n     * `a-z` was added to replicate /i flag\n     */\n    email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n    /**\n     * Constructed a valid Unicode RegExp\n     *\n     * Lazily instantiate since this type of regex isn't supported\n     * in all envs (e.g. React Native).\n     *\n     * See:\n     * https://github.com/colinhacks/zod/issues/2433\n     * Fix in Zod:\n     * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n     */\n    emoji: () => {\n        if (emojiRegex === undefined) {\n            emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n        }\n        return emojiRegex;\n    },\n    /**\n     * Unused\n     */\n    uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n    /**\n     * Unused\n     */\n    ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n    ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n    /**\n     * Unused\n     */\n    ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n    ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n    base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n    base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n    nanoid: /^[a-zA-Z0-9_-]{21}$/,\n    jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n    const res = {\n        type: \"string\",\n    };\n    if (def.checks) {\n        for (const check of def.checks) {\n            switch (check.kind) {\n                case \"min\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"max\":\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"email\":\n                    switch (refs.emailStrategy) {\n                        case \"format:email\":\n                            addFormat(res, \"email\", check.message, refs);\n                            break;\n                        case \"format:idn-email\":\n                            addFormat(res, \"idn-email\", check.message, refs);\n                            break;\n                        case \"pattern:zod\":\n                            addPattern(res, zodPatterns.email, check.message, refs);\n                            break;\n                    }\n                    break;\n                case \"url\":\n                    addFormat(res, \"uri\", check.message, refs);\n                    break;\n                case \"uuid\":\n                    addFormat(res, \"uuid\", check.message, refs);\n                    break;\n                case \"regex\":\n                    addPattern(res, check.regex, check.message, refs);\n                    break;\n                case \"cuid\":\n                    addPattern(res, zodPatterns.cuid, check.message, refs);\n                    break;\n                case \"cuid2\":\n                    addPattern(res, zodPatterns.cuid2, check.message, refs);\n                    break;\n                case \"startsWith\":\n                    addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n                    break;\n                case \"endsWith\":\n                    addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n                    break;\n                case \"datetime\":\n                    addFormat(res, \"date-time\", check.message, refs);\n                    break;\n                case \"date\":\n                    addFormat(res, \"date\", check.message, refs);\n                    break;\n                case \"time\":\n                    addFormat(res, \"time\", check.message, refs);\n                    break;\n                case \"duration\":\n                    addFormat(res, \"duration\", check.message, refs);\n                    break;\n                case \"length\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"includes\": {\n                    addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n                    break;\n                }\n                case \"ip\": {\n                    if (check.version !== \"v6\") {\n                        addFormat(res, \"ipv4\", check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addFormat(res, \"ipv6\", check.message, refs);\n                    }\n                    break;\n                }\n                case \"base64url\":\n                    addPattern(res, zodPatterns.base64url, check.message, refs);\n                    break;\n                case \"jwt\":\n                    addPattern(res, zodPatterns.jwt, check.message, refs);\n                    break;\n                case \"cidr\": {\n                    if (check.version !== \"v6\") {\n                        addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n                    }\n                    break;\n                }\n                case \"emoji\":\n                    addPattern(res, zodPatterns.emoji(), check.message, refs);\n                    break;\n                case \"ulid\": {\n                    addPattern(res, zodPatterns.ulid, check.message, refs);\n                    break;\n                }\n                case \"base64\": {\n                    switch (refs.base64Strategy) {\n                        case \"format:binary\": {\n                            addFormat(res, \"binary\", check.message, refs);\n                            break;\n                        }\n                        case \"contentEncoding:base64\": {\n                            setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n                            break;\n                        }\n                        case \"pattern:zod\": {\n                            addPattern(res, zodPatterns.base64, check.message, refs);\n                            break;\n                        }\n                    }\n                    break;\n                }\n                case \"nanoid\": {\n                    addPattern(res, zodPatterns.nanoid, check.message, refs);\n                }\n                case \"toLowerCase\":\n                case \"toUpperCase\":\n                case \"trim\":\n                    break;\n                default:\n                    ((_) => { })(check);\n            }\n        }\n    }\n    return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n    return refs.patternStrategy === \"escape\"\n        ? escapeNonAlphaNumeric(literal)\n        : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n    let result = \"\";\n    for (let i = 0; i < source.length; i++) {\n        if (!ALPHA_NUMERIC.has(source[i])) {\n            result += \"\\\\\";\n        }\n        result += source[i];\n    }\n    return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n    if (schema.format || schema.anyOf?.some((x) => x.format)) {\n        if (!schema.anyOf) {\n            schema.anyOf = [];\n        }\n        if (schema.format) {\n            schema.anyOf.push({\n                format: schema.format,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { format: schema.errorMessage.format },\n                }),\n            });\n            delete schema.format;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.format;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.anyOf.push({\n            format: value,\n            ...(message &&\n                refs.errorMessages && { errorMessage: { format: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"format\", value, message, refs);\n    }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n    if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n        if (!schema.allOf) {\n            schema.allOf = [];\n        }\n        if (schema.pattern) {\n            schema.allOf.push({\n                pattern: schema.pattern,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { pattern: schema.errorMessage.pattern },\n                }),\n            });\n            delete schema.pattern;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.pattern;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.allOf.push({\n            pattern: stringifyRegExpWithFlags(regex, refs),\n            ...(message &&\n                refs.errorMessages && { errorMessage: { pattern: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n    }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n    if (!refs.applyRegexFlags || !regex.flags) {\n        return regex.source;\n    }\n    // Currently handled flags\n    const flags = {\n        i: regex.flags.includes(\"i\"),\n        m: regex.flags.includes(\"m\"),\n        s: regex.flags.includes(\"s\"), // `.` matches newlines\n    };\n    // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n    const source = flags.i ? regex.source.toLowerCase() : regex.source;\n    let pattern = \"\";\n    let isEscaped = false;\n    let inCharGroup = false;\n    let inCharRange = false;\n    for (let i = 0; i < source.length; i++) {\n        if (isEscaped) {\n            pattern += source[i];\n            isEscaped = false;\n            continue;\n        }\n        if (flags.i) {\n            if (inCharGroup) {\n                if (source[i].match(/[a-z]/)) {\n                    if (inCharRange) {\n                        pattern += source[i];\n                        pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n                        inCharRange = false;\n                    }\n                    else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n                        pattern += source[i];\n                        inCharRange = true;\n                    }\n                    else {\n                        pattern += `${source[i]}${source[i].toUpperCase()}`;\n                    }\n                    continue;\n                }\n            }\n            else if (source[i].match(/[a-z]/)) {\n                pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n                continue;\n            }\n        }\n        if (flags.m) {\n            if (source[i] === \"^\") {\n                pattern += `(^|(?<=[\\r\\n]))`;\n                continue;\n            }\n            else if (source[i] === \"$\") {\n                pattern += `($|(?=[\\r\\n]))`;\n                continue;\n            }\n        }\n        if (flags.s && source[i] === \".\") {\n            pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n            continue;\n        }\n        pattern += source[i];\n        if (source[i] === \"\\\\\") {\n            isEscaped = true;\n        }\n        else if (inCharGroup && source[i] === \"]\") {\n            inCharGroup = false;\n        }\n        else if (!inCharGroup && source[i] === \"[\") {\n            inCharGroup = true;\n        }\n    }\n    try {\n        new RegExp(pattern);\n    }\n    catch {\n        console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n        return regex.source;\n    }\n    return pattern;\n}\n", "import { ZodFirstPartyTypeKind, } from \"zod/v3\";\nimport { parseDef } from \"../parseDef.js\";\nimport { parseStringDef } from \"./string.js\";\nimport { parseBrandedDef } from \"./branded.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseRecordDef(def, refs) {\n    if (refs.target === \"openAi\") {\n        console.warn(\"Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.\");\n    }\n    if (refs.target === \"openApi3\" &&\n        def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n        return {\n            type: \"object\",\n            required: def.keyType._def.values,\n            properties: def.keyType._def.values.reduce((acc, key) => ({\n                ...acc,\n                [key]: parseDef(def.valueType._def, {\n                    ...refs,\n                    currentPath: [...refs.currentPath, \"properties\", key],\n                }) ?? parseAnyDef(refs),\n            }), {}),\n            additionalProperties: refs.rejectedAdditionalProperties,\n        };\n    }\n    const schema = {\n        type: \"object\",\n        additionalProperties: parseDef(def.valueType._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"additionalProperties\"],\n        }) ?? refs.allowedAdditionalProperties,\n    };\n    if (refs.target === \"openApi3\") {\n        return schema;\n    }\n    if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n        def.keyType._def.checks?.length) {\n        const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n        return {\n            ...schema,\n            propertyNames: keyType,\n        };\n    }\n    else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n        return {\n            ...schema,\n            propertyNames: {\n                enum: def.keyType._def.values,\n            },\n        };\n    }\n    else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n        def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n        def.keyType._def.type._def.checks?.length) {\n        const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);\n        return {\n            ...schema,\n            propertyNames: keyType,\n        };\n    }\n    return schema;\n}\n", "import { parseDef } from \"../parseDef.js\";\nimport { parseRecordDef } from \"./record.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseMapDef(def, refs) {\n    if (refs.mapStrategy === \"record\") {\n        return parseRecordDef(def, refs);\n    }\n    const keys = parseDef(def.keyType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"],\n    }) || parseAnyDef(refs);\n    const values = parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n    }) || parseAnyDef(refs);\n    return {\n        type: \"array\",\n        maxItems: 125,\n        items: {\n            type: \"array\",\n            items: [keys, values],\n            minItems: 2,\n            maxItems: 2,\n        },\n    };\n}\n", "export function parseNativeEnumDef(def) {\n    const object = def.values;\n    const actualKeys = Object.keys(def.values).filter((key) => {\n        return typeof object[object[key]] !== \"number\";\n    });\n    const actualValues = actualKeys.map((key) => object[key]);\n    const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));\n    return {\n        type: parsedTypes.length === 1\n            ? parsedTypes[0] === \"string\"\n                ? \"string\"\n                : \"number\"\n            : [\"string\", \"number\"],\n        enum: actualValues,\n    };\n}\n", "import { parseAnyDef } from \"./any.js\";\nexport function parseNeverDef(refs) {\n    return refs.target === \"openAi\"\n        ? undefined\n        : {\n            not: parseAnyDef({\n                ...refs,\n                currentPath: [...refs.currentPath, \"not\"],\n            }),\n        };\n}\n", "export function parseNullDef(refs) {\n    return refs.target === \"openApi3\"\n        ? {\n            enum: [\"null\"],\n            nullable: true,\n        }\n        : {\n            type: \"null\",\n        };\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport const primitiveMappings = {\n    ZodString: \"string\",\n    ZodNumber: \"number\",\n    ZodBigInt: \"integer\",\n    ZodBoolean: \"boolean\",\n    ZodNull: \"null\",\n};\nexport function parseUnionDef(def, refs) {\n    if (refs.target === \"openApi3\")\n        return asAnyOf(def, refs);\n    const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n    // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n    if (options.every((x) => x._def.typeName in primitiveMappings &&\n        (!x._def.checks || !x._def.checks.length))) {\n        // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n        const types = options.reduce((types, x) => {\n            const type = primitiveMappings[x._def.typeName]; //Can be safely casted due to row 43\n            return type && !types.includes(type) ? [...types, type] : types;\n        }, []);\n        return {\n            type: types.length > 1 ? types : types[0],\n        };\n    }\n    else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n        // all options literals\n        const types = options.reduce((acc, x) => {\n            const type = typeof x._def.value;\n            switch (type) {\n                case \"string\":\n                case \"number\":\n                case \"boolean\":\n                    return [...acc, type];\n                case \"bigint\":\n                    return [...acc, \"integer\"];\n                case \"object\":\n                    if (x._def.value === null)\n                        return [...acc, \"null\"];\n                case \"symbol\":\n                case \"undefined\":\n                case \"function\":\n                default:\n                    return acc;\n            }\n        }, []);\n        if (types.length === options.length) {\n            // all the literals are primitive, as far as null can be considered primitive\n            const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n            return {\n                type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n                enum: options.reduce((acc, x) => {\n                    return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n                }, []),\n            };\n        }\n    }\n    else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n        return {\n            type: \"string\",\n            enum: options.reduce((acc, x) => [\n                ...acc,\n                ...x._def.values.filter((x) => !acc.includes(x)),\n            ], []),\n        };\n    }\n    return asAnyOf(def, refs);\n}\nconst asAnyOf = (def, refs) => {\n    const anyOf = (def.options instanceof Map\n        ? Array.from(def.options.values())\n        : def.options)\n        .map((x, i) => parseDef(x._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n    }))\n        .filter((x) => !!x &&\n        (!refs.strictUnions ||\n            (typeof x === \"object\" && Object.keys(x).length > 0)));\n    return anyOf.length ? { anyOf } : undefined;\n};\n", "import { parseDef } from \"../parseDef.js\";\nimport { primitiveMappings } from \"./union.js\";\nexport function parseNullableDef(def, refs) {\n    if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(def.innerType._def.typeName) &&\n        (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n        if (refs.target === \"openApi3\") {\n            return {\n                type: primitiveMappings[def.innerType._def.typeName],\n                nullable: true,\n            };\n        }\n        return {\n            type: [\n                primitiveMappings[def.innerType._def.typeName],\n                \"null\",\n            ],\n        };\n    }\n    if (refs.target === \"openApi3\") {\n        const base = parseDef(def.innerType._def, {\n            ...refs,\n            currentPath: [...refs.currentPath],\n        });\n        if (base && \"$ref\" in base)\n            return { allOf: [base], nullable: true };\n        return base && { ...base, nullable: true };\n    }\n    const base = parseDef(def.innerType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", \"0\"],\n    });\n    return base && { anyOf: [base, { type: \"null\" }] };\n}\n", "import { addErrorMessage, setResponseValueAndErrors, } from \"../errorMessages.js\";\nexport function parseNumberDef(def, refs) {\n    const res = {\n        type: \"number\",\n    };\n    if (!def.checks)\n        return res;\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"int\":\n                res.type = \"integer\";\n                addErrorMessage(res, \"type\", check.message, refs);\n                break;\n            case \"min\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMinimum = true;\n                    }\n                    setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                }\n                break;\n            case \"max\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMaximum = true;\n                    }\n                    setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                }\n                break;\n            case \"multipleOf\":\n                setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n                break;\n        }\n    }\n    return res;\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseObjectDef(def, refs) {\n    const forceOptionalIntoNullable = refs.target === \"openAi\";\n    const result = {\n        type: \"object\",\n        properties: {},\n    };\n    const required = [];\n    const shape = def.shape();\n    for (const propName in shape) {\n        let propDef = shape[propName];\n        if (propDef === undefined || propDef._def === undefined) {\n            continue;\n        }\n        let propOptional = safeIsOptional(propDef);\n        if (propOptional && forceOptionalIntoNullable) {\n            if (propDef._def.typeName === \"ZodOptional\") {\n                propDef = propDef._def.innerType;\n            }\n            if (!propDef.isNullable()) {\n                propDef = propDef.nullable();\n            }\n            propOptional = false;\n        }\n        const parsedDef = parseDef(propDef._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"properties\", propName],\n            propertyPath: [...refs.currentPath, \"properties\", propName],\n        });\n        if (parsedDef === undefined) {\n            continue;\n        }\n        result.properties[propName] = parsedDef;\n        if (!propOptional) {\n            required.push(propName);\n        }\n    }\n    if (required.length) {\n        result.required = required;\n    }\n    const additionalProperties = decideAdditionalProperties(def, refs);\n    if (additionalProperties !== undefined) {\n        result.additionalProperties = additionalProperties;\n    }\n    return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n    if (def.catchall._def.typeName !== \"ZodNever\") {\n        return parseDef(def.catchall._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"additionalProperties\"],\n        });\n    }\n    switch (def.unknownKeys) {\n        case \"passthrough\":\n            return refs.allowedAdditionalProperties;\n        case \"strict\":\n            return refs.rejectedAdditionalProperties;\n        case \"strip\":\n            return refs.removeAdditionalStrategy === \"strict\"\n                ? refs.allowedAdditionalProperties\n                : refs.rejectedAdditionalProperties;\n    }\n}\nfunction safeIsOptional(schema) {\n    try {\n        return schema.isOptional();\n    }\n    catch {\n        return true;\n    }\n}\n", "import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport const parseOptionalDef = (def, refs) => {\n    if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n        return parseDef(def.innerType._def, refs);\n    }\n    const innerSchema = parseDef(def.innerType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", \"1\"],\n    });\n    return innerSchema\n        ? {\n            anyOf: [\n                {\n                    not: parseAnyDef(refs),\n                },\n                innerSchema,\n            ],\n        }\n        : parseAnyDef(refs);\n};\n", "import { parseDef } from \"../parseDef.js\";\nexport const parsePipelineDef = (def, refs) => {\n    if (refs.pipeStrategy === \"input\") {\n        return parseDef(def.in._def, refs);\n    }\n    else if (refs.pipeStrategy === \"output\") {\n        return parseDef(def.out._def, refs);\n    }\n    const a = parseDef(def.in._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n    });\n    const b = parseDef(def.out._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"],\n    });\n    return {\n        allOf: [a, b].filter((x) => x !== undefined),\n    };\n};\n", "import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n    return parseDef(def.type._def, refs);\n}\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseSetDef(def, refs) {\n    const items = parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\"],\n    });\n    const schema = {\n        type: \"array\",\n        uniqueItems: true,\n        items,\n    };\n    if (def.minSize) {\n        setResponseValueAndErrors(schema, \"minItems\", def.minSize.value, def.minSize.message, refs);\n    }\n    if (def.maxSize) {\n        setResponseValueAndErrors(schema, \"maxItems\", def.maxSize.value, def.maxSize.message, refs);\n    }\n    return schema;\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseTupleDef(def, refs) {\n    if (def.rest) {\n        return {\n            type: \"array\",\n            minItems: def.items.length,\n            items: def.items\n                .map((x, i) => parseDef(x._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"items\", `${i}`],\n            }))\n                .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n            additionalItems: parseDef(def.rest._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"additionalItems\"],\n            }),\n        };\n    }\n    else {\n        return {\n            type: \"array\",\n            minItems: def.items.length,\n            maxItems: def.items.length,\n            items: def.items\n                .map((x, i) => parseDef(x._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"items\", `${i}`],\n            }))\n                .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n        };\n    }\n}\n", "import { parseAnyDef } from \"./any.js\";\nexport function parseUndefinedDef(refs) {\n    return {\n        not: parseAnyDef(refs),\n    };\n}\n", "import { parseAnyDef } from \"./any.js\";\nexport function parseUnknownDef(refs) {\n    return parseAnyDef(refs);\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n    return parseDef(def.innerType._def, refs);\n};\n", "import { ZodFirstPartyTypeKind } from \"zod/v3\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nexport const selectParser = (def, typeName, refs) => {\n    switch (typeName) {\n        case ZodFirstPartyTypeKind.ZodString:\n            return parseStringDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodNumber:\n            return parseNumberDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodObject:\n            return parseObjectDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBigInt:\n            return parseBigintDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBoolean:\n            return parseBooleanDef();\n        case ZodFirstPartyTypeKind.ZodDate:\n            return parseDateDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodUndefined:\n            return parseUndefinedDef(refs);\n        case ZodFirstPartyTypeKind.ZodNull:\n            return parseNullDef(refs);\n        case ZodFirstPartyTypeKind.ZodArray:\n            return parseArrayDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodUnion:\n        case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n            return parseUnionDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodIntersection:\n            return parseIntersectionDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodTuple:\n            return parseTupleDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodRecord:\n            return parseRecordDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodLiteral:\n            return parseLiteralDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodEnum:\n            return parseEnumDef(def);\n        case ZodFirstPartyTypeKind.ZodNativeEnum:\n            return parseNativeEnumDef(def);\n        case ZodFirstPartyTypeKind.ZodNullable:\n            return parseNullableDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodOptional:\n            return parseOptionalDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodMap:\n            return parseMapDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodSet:\n            return parseSetDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodLazy:\n            return () => def.getter()._def;\n        case ZodFirstPartyTypeKind.ZodPromise:\n            return parsePromiseDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodNaN:\n        case ZodFirstPartyTypeKind.ZodNever:\n            return parseNeverDef(refs);\n        case ZodFirstPartyTypeKind.ZodEffects:\n            return parseEffectsDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodAny:\n            return parseAnyDef(refs);\n        case ZodFirstPartyTypeKind.ZodUnknown:\n            return parseUnknownDef(refs);\n        case ZodFirstPartyTypeKind.ZodDefault:\n            return parseDefaultDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBranded:\n            return parseBrandedDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodReadonly:\n            return parseReadonlyDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodCatch:\n            return parseCatchDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodPipeline:\n            return parsePipelineDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodFunction:\n        case ZodFirstPartyTypeKind.ZodVoid:\n        case ZodFirstPartyTypeKind.ZodSymbol:\n            return undefined;\n        default:\n            return ((_) => undefined)(typeName);\n    }\n};\n", "import { ignoreOverride } from \"./Options.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nexport function parseDef(def, refs, forceResolution = false) {\n    const seenItem = refs.seen.get(def);\n    if (refs.override) {\n        const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);\n        if (overrideResult !== ignoreOverride) {\n            return overrideResult;\n        }\n    }\n    if (seenItem && !forceResolution) {\n        const seenSchema = get$ref(seenItem, refs);\n        if (seenSchema !== undefined) {\n            return seenSchema;\n        }\n    }\n    const newItem = { def, path: refs.currentPath, jsonSchema: undefined };\n    refs.seen.set(def, newItem);\n    const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n    // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n    const jsonSchema = typeof jsonSchemaOrGetter === \"function\"\n        ? parseDef(jsonSchemaOrGetter(), refs)\n        : jsonSchemaOrGetter;\n    if (jsonSchema) {\n        addMeta(def, refs, jsonSchema);\n    }\n    if (refs.postProcess) {\n        const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n        newItem.jsonSchema = jsonSchema;\n        return postProcessResult;\n    }\n    newItem.jsonSchema = jsonSchema;\n    return jsonSchema;\n}\nconst get$ref = (item, refs) => {\n    switch (refs.$refStrategy) {\n        case \"root\":\n            return { $ref: item.path.join(\"/\") };\n        case \"relative\":\n            return { $ref: getRelativePath(refs.currentPath, item.path) };\n        case \"none\":\n        case \"seen\": {\n            if (item.path.length < refs.currentPath.length &&\n                item.path.every((value, index) => refs.currentPath[index] === value)) {\n                console.warn(`Recursive reference detected at ${refs.currentPath.join(\"/\")}! Defaulting to any`);\n                return parseAnyDef(refs);\n            }\n            return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n        }\n    }\n};\nconst addMeta = (def, refs, jsonSchema) => {\n    if (def.description) {\n        jsonSchema.description = def.description;\n        if (refs.markdownDescription) {\n            jsonSchema.markdownDescription = def.description;\n        }\n    }\n    return jsonSchema;\n};\n", "import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nconst zodToJsonSchema = (schema, options) => {\n    const refs = getRefs(options);\n    let definitions = typeof options === \"object\" && options.definitions\n        ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n            ...acc,\n            [name]: parseDef(schema._def, {\n                ...refs,\n                currentPath: [...refs.basePath, refs.definitionPath, name],\n            }, true) ?? parseAnyDef(refs),\n        }), {})\n        : undefined;\n    const name = typeof options === \"string\"\n        ? options\n        : options?.nameStrategy === \"title\"\n            ? undefined\n            : options?.name;\n    const main = parseDef(schema._def, name === undefined\n        ? refs\n        : {\n            ...refs,\n            currentPath: [...refs.basePath, refs.definitionPath, name],\n        }, false) ?? parseAnyDef(refs);\n    const title = typeof options === \"object\" &&\n        options.name !== undefined &&\n        options.nameStrategy === \"title\"\n        ? options.name\n        : undefined;\n    if (title !== undefined) {\n        main.title = title;\n    }\n    if (refs.flags.hasReferencedOpenAiAnyType) {\n        if (!definitions) {\n            definitions = {};\n        }\n        if (!definitions[refs.openAiAnyTypeName]) {\n            definitions[refs.openAiAnyTypeName] = {\n                // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n                type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n                items: {\n                    $ref: refs.$refStrategy === \"relative\"\n                        ? \"1\"\n                        : [\n                            ...refs.basePath,\n                            refs.definitionPath,\n                            refs.openAiAnyTypeName,\n                        ].join(\"/\"),\n                },\n            };\n        }\n    }\n    const combined = name === undefined\n        ? definitions\n            ? {\n                ...main,\n                [refs.definitionPath]: definitions,\n            }\n            : main\n        : {\n            $ref: [\n                ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n                refs.definitionPath,\n                name,\n            ].join(\"/\"),\n            [refs.definitionPath]: {\n                ...definitions,\n                [name]: main,\n            },\n        };\n    if (refs.target === \"jsonSchema7\") {\n        combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n        combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n    }\n    if (refs.target === \"openAi\" &&\n        (\"anyOf\" in combined ||\n            \"oneOf\" in combined ||\n            \"allOf\" in combined ||\n            (\"type\" in combined && Array.isArray(combined.type)))) {\n        console.warn(\"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\");\n    }\n    return combined;\n};\nexport { zodToJsonSchema };\n", null, null, null, null, null, null, null, null, null, null, null, null, "export const ENV_URLS: Record<string, string> = {\n  dev: 'https://api.keyban.localtest.me',\n  testing: 'https://api.testing.keyban.io',\n  staging: 'https://api.staging.keyban.io',\n  prod: 'https://api.prod.keyban.io',\n  sandbox: 'https://api.sandbox.keyban.io',\n};\n\nexport function resolveURL(value: string): string {\n  return ENV_URLS[value] ?? value;\n}\n", "/**\n * Logger for MCP Blockchain server.\n * Uses stderr only to avoid interfering with stdio transport.\n * If MCP_LOG_FILE is set, also appends logs to that file.\n */\n\nimport { appendFileSync } from 'node:fs';\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n  debug: 0,\n  info: 1,\n  warn: 2,\n  error: 3,\n};\n\nclass Logger {\n  private context: string;\n  private minLevel: LogLevel;\n\n  constructor(context: string, minLevel: LogLevel = 'info') {\n    this.context = context;\n    this.minLevel = minLevel;\n  }\n\n  private shouldLog(level: LogLevel): boolean {\n    return LOG_LEVELS[level] >= LOG_LEVELS[this.minLevel];\n  }\n\n  private logFile: string | undefined = process.env.MCP_LOG_FILE;\n\n  private formatMessage(message: string, level: LogLevel): string {\n    const timestamp = new Date().toISOString();\n    return `[${timestamp}] [${level.toUpperCase()}] [${this.context}] ${message}`;\n  }\n\n  private emit(line: string): void {\n    console.error(line);\n    if (this.logFile) {\n      try {\n        appendFileSync(this.logFile, line + '\\n');\n      } catch {\n        // best-effort\n      }\n    }\n  }\n\n  debug(message: string): void {\n    if (this.shouldLog('debug')) {\n      this.emit(this.formatMessage(message, 'debug'));\n    }\n  }\n\n  info(message: string): void {\n    if (this.shouldLog('info')) {\n      this.emit(this.formatMessage(message, 'info'));\n    }\n  }\n\n  warn(message: string): void {\n    if (this.shouldLog('warn')) {\n      this.emit(this.formatMessage(message, 'warn'));\n    }\n  }\n\n  error(message: string, error?: unknown): void {\n    if (this.shouldLog('error')) {\n      let errorDetails = '';\n      if (error instanceof Error) {\n        errorDetails = `: ${error.message}`;\n        if (error.cause != null) {\n          errorDetails += `\\n  Caused by: ${error.cause instanceof Error ? error.cause.message : String(error.cause)}`;\n        }\n      } else if (error !== undefined) {\n        try {\n          errorDetails = `: ${JSON.stringify(error, null, 2)}`;\n        } catch {\n          errorDetails = `: ${String(error)}`;\n        }\n      }\n      this.emit(this.formatMessage(`${message}${errorDetails}`, 'error'));\n      if (error instanceof Error && error.stack) {\n        this.emit(error.stack);\n      }\n    }\n  }\n}\n\nexport function createLogger(context: string, minLevel?: LogLevel): Logger {\n  const level =\n    minLevel ?? (process.env.MCP_LOG_LEVEL as LogLevel | undefined) ?? 'info';\n  return new Logger(context, level);\n}\n\nexport const logger = createLogger('agent-wallet-mcp');\n", "import type { X402Authorization } from '@keyban/agent-wallet-protocol';\n\nimport { ENV_URLS } from './env-urls.js';\nimport type { AccountContext, NodeApi, SignerApi } from './types.js';\n\nexport const VALID_NETWORKS = [\n  'EthereumAnvil',\n  'BaseSepolia',\n  'BaseMainnet',\n  'XdcApothem',\n  'XdcMainnet',\n  'StellarQuickstart',\n  'StellarTestnet',\n  'StellarMainnet',\n] as const;\n\nexport interface Session {\n  baseURL: string;\n  apiKey: string;\n  appId: string;\n  network: string;\n\n  /**\n   * Agent-wallet ECDSA invite private key (KEYBAN_INVITE_KEY). Required at\n   * boot \u2014 this MCP only operates in agent-wallet mode (admin-provisioned\n   * SchnorrAccount). Used once during `initialize` to sign the registration\n   * message that proves the FROST signer belongs to this agent.\n   */\n  inviteKey: string;\n  /**\n   * Agent-wallet contract address (KEYBAN_WALLET_ADDRESS). Required at boot.\n   * `initialize` overrides `account.address` to this value so subsequent\n   * tools target the wallet contract.\n   */\n  walletAddress: string;\n\n  /**\n   * Optional pre-generated FROST client share (KEYBAN_DKG_BLOB), produced by\n   * the admin \"Initialize signer\" action and decoded from base64 at boot. When\n   * set, `initialize` uses it directly instead of running its own DKG (and\n   * skips the OS keyring entirely). Null when the agent should self-generate.\n   */\n  seededDkgBlob: string | null;\n\n  /** Set on first account-bearing call (ensureAccount). */\n  nodeApi: NodeApi | null;\n  /** Set on first account-bearing call (ensureAccount). */\n  signer: SignerApi | null;\n  /** Set on first account-bearing call (ensureAccount). */\n  account: AccountContext | null;\n  /** FrostVerifier contract address, fetched from metadata on first account-bearing call (ensureAccount). */\n  frostVerifierAddress: string | null;\n  /** In-flight memoized lazy-init promise. */\n  initPromise: Promise<void> | null;\n  /**\n   * Signed-ready x402 envelopes, keyed by **intent id**.\n   *\n   * The backend builds the EIP-3009 envelope and keys the intent by its\n   * canonical hash. When it returns `allow` or `require_human`, it hands back\n   * that envelope along with the intent id; we stash it here so a follow-up\n   * `x402_pay` (a retry after a human approves, or after a transient sign\n   * failure) signs the SAME hash instead of asking the backend to resolve\n   * afresh \u2014 a fresh resolve would mint a new nonce/window, a different hash,\n   * and collide with the in-flight intent.\n   *\n   * Keying by intent id (not by URL) is what lets concurrent payments to the\n   * *same* resource stay independent: each has its own envelope and is settled\n   * by its own id. Cleared once its payment is signed, or dropped when its\n   * `validBefore` lapses.\n   */\n  pendingX402: Map<string, X402Authorization>;\n}\n\nexport function createSession(): Session {\n  return {\n    baseURL: ENV_URLS.prod,\n    apiKey: '',\n    appId: '',\n    network: '',\n    inviteKey: '',\n    walletAddress: '',\n    seededDkgBlob: null,\n    nodeApi: null,\n    signer: null,\n    account: null,\n    frostVerifierAddress: null,\n    initPromise: null,\n    pendingX402: new Map(),\n  };\n}\n\nexport function validateNetwork(network: string): void {\n  if (!network || !VALID_NETWORKS.includes(network as (typeof VALID_NETWORKS)[number])) {\n    throw new Error(`Invalid or missing network \"${network}\". Must be one of: ${VALID_NETWORKS.join(', ')}. Set it via the KEYBAN_NETWORK env var.`);\n  }\n}\n\nexport function requireCredentials(session: Session): void {\n  if (!session.apiKey) {\n    throw new Error('No API key configured. Set the KEYBAN_API_KEY environment variable.');\n  }\n  if (!session.appId) {\n    throw new Error('No application ID configured. Set the KEYBAN_APP_ID environment variable.');\n  }\n  if (!session.inviteKey) {\n    throw new Error(\n      'No invite key configured. Set the KEYBAN_INVITE_KEY environment variable (admin-provisioned wallets only).',\n    );\n  }\n  if (!session.walletAddress) {\n    throw new Error(\n      'No wallet address configured. Set the KEYBAN_WALLET_ADDRESS environment variable (admin-provisioned wallets only).',\n    );\n  }\n}\n\n/**\n * `Session` narrowed to the state after `initialize` succeeded: all the\n * fields the `account`-bearing flows depend on are non-null. Used to\n * type the signer factory so it doesn't have to scatter `!` non-null\n * assertions across its body.\n */\nexport type InitializedSession = Session & {\n  nodeApi: NonNullable<Session['nodeApi']>;\n  signer: NonNullable<Session['signer']>;\n  account: NonNullable<Session['account']>;\n  frostVerifierAddress: NonNullable<Session['frostVerifierAddress']>;\n};\n\nexport function requireAccount(\n  session: Session,\n): asserts session is InitializedSession {\n  requireCredentials(session);\n  if (\n    !session.account ||\n    !session.signer ||\n    !session.nodeApi ||\n    !session.frostVerifierAddress\n  ) {\n    throw new Error('Account not initialized. Call the initialize tool first.');\n  }\n}\n\nexport function buildApiKeyHeaders(session: Session): Record<string, string> {\n  return {\n    'X-Api-Key': session.apiKey,\n  };\n}\n", "import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\n\nimport { logger } from './logger.js';\n\nexport interface Tool {\n  name: string;\n  /**\n   * Human-readable display name. Required: the Claude directory rejects any\n   * connector whose tools lack a title or the applicable behaviour hint.\n   */\n  title: string;\n  description: string;\n  /**\n   * Behaviour hints. `readOnlyHint` on every tool that only observes;\n   * `destructiveHint` on the ones that move value irreversibly.\n   */\n  annotations: ToolAnnotations;\n  inputSchema: z.ZodObject<z.ZodRawShape>;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- type-erased for heterogeneous tool array\n  handler: (input: any) => Promise<string>;\n}\n\n/**\n * Adapt our (input) tool handler shape to the MCP SDK's request-handler\n * callback. This is the only place in the codebase that knows about the\n * SDK's per-request handler arguments.\n */\nexport function registerTool(server: McpServer, tool: Tool): void {\n  server.registerTool(\n    tool.name,\n    {\n      title: tool.title,\n      description: tool.description,\n      inputSchema: tool.inputSchema.shape,\n      // For a tool, the spec ranks the display name `title` >\n      // `annotations.title` > `name`. Mirroring it means a client that reads\n      // only the annotations shows \"Transfer USDC\" rather than falling all the\n      // way back to `transfer_usdc`.\n      annotations: { title: tool.title, ...tool.annotations },\n    },\n    async (args) => {\n      try {\n        const input = tool.inputSchema.parse(args);\n        const result = await tool.handler(input);\n        return {\n          content: [{ type: 'text' as const, text: result }],\n        };\n      } catch (error) {\n        const message =\n          error instanceof Error\n            ? `${error.message}${error.cause ? `\\nCaused by: ${error.cause}` : ''}`\n            : (() => {\n              try {\n                return JSON.stringify(error, null, 2);\n              } catch {\n                return String(error);\n              }\n            })();\n        logger.error(`Tool ${tool.name} failed`, error);\n        return {\n          content: [{ type: 'text' as const, text: `Error: ${message}` }],\n          isError: true,\n        };\n      }\n    },\n  );\n}\n", "import { createHash } from 'node:crypto';\nimport { createPublicClient, getAddress, type Hex } from 'viem';\nimport { CHAIN_MAP, fetchRpcUrl, http } from './evm.js';\nimport { buildFrostSignerBytes, signRegistration } from './invite-sign.js';\nimport { logger } from './logger.js';\nimport { assertKeyringFunctional, createNodeApi } from './node-api.js';\nimport { schnorrAccountAbi } from '../generated/abis.js';\nimport {\n  buildApiKeyHeaders,\n  type InitializedSession,\n  type Session,\n  requireAccount,\n  requireCredentials,\n  validateNetwork,\n} from './session.js';\n\nconst REGISTER_POLL_INTERVAL_MS = 1500;\nconst REGISTER_POLL_TIMEOUT_MS = 60_000;\n\nasync function runInit(session: Session): Promise<void> {\n  requireCredentials(session);\n  validateNetwork(session.network);\n  // A seeded client share is supplied via env and never persisted, so the OS\n  // keyring is not involved \u2014 only assert it when we self-generate.\n  if (!session.seededDkgBlob) assertKeyringFunctional();\n\n  const chain = CHAIN_MAP[session.network];\n  if (!chain) {\n    throw new Error(\n      `Network \"${session.network}\" is not supported for initialization. Supported: ${Object.keys(CHAIN_MAP).join(', ')}`,\n    );\n  }\n\n  const nodeApi = createNodeApi(session);\n  session.nodeApi = nodeApi;\n  session.signer = nodeApi.ecdsaSchnorr;\n\n  const rpcUrl = await fetchRpcUrl(session);\n  const publicClient = createPublicClient({ chain, transport: http(rpcUrl) });\n\n  const metaUrl = `${session.baseURL}/v1/metadata?network=${encodeURIComponent(session.network)}`;\n  const metaRes = await fetch(metaUrl, { headers: { 'X-Api-Key': session.apiKey } });\n  if (metaRes.ok) {\n    const meta = await metaRes.json();\n    if (meta?.network?.frostVerifierAddress) {\n      session.frostVerifierAddress = meta.network.frostVerifierAddress;\n    }\n  }\n\n  let dkgBlob: string;\n  if (session.seededDkgBlob) {\n    // Admin pre-generated the client share (KEYBAN_DKG_BLOB) \u2014 use it directly,\n    // no DKG and no keyring.\n    dkgBlob = session.seededDkgBlob;\n  } else {\n    const keyHash = createHash('sha256').update(session.apiKey).digest('hex').slice(0, 16);\n    const storageKey = `ecdsaSchnorr:${session.network}:${keyHash}`;\n    try {\n      dkgBlob = await nodeApi.dkgStorage.get(storageKey);\n    } catch {\n      dkgBlob = await nodeApi.ecdsaSchnorr.dkg();\n      await nodeApi.dkgStorage.set(storageKey, dkgBlob);\n    }\n  }\n\n  const publicKey = await nodeApi.ecdsaSchnorr.publicKey(dkgBlob);\n\n  if (!session.frostVerifierAddress) {\n    throw new Error(\n      'frostVerifierAddress missing from /v1/metadata response \u2014 required for agent-wallet registration.',\n    );\n  }\n  const walletAddress = getAddress(session.walletAddress) as `0x${string}`;\n  const frostSignerBytes = buildFrostSignerBytes(\n    getAddress(session.frostVerifierAddress) as `0x${string}`,\n    publicKey as Hex,\n  );\n\n  session.account = {\n    address: walletAddress,\n    publicKey,\n    dkgBlob,\n    publicClient,\n  };\n\n  const alreadyRegistered = await publicClient.readContract({\n    address: walletAddress,\n    abi: schnorrAccountAbi,\n    functionName: 'isSigner',\n    args: [frostSignerBytes],\n  });\n\n  if (alreadyRegistered) {\n    logger.info('FROST signer already registered on chain (skipped).');\n  } else {\n    const signature = signRegistration({\n      chainId: BigInt(chain.id),\n      walletAddress,\n      frostSignerBytes,\n      inviteKey: session.inviteKey as Hex,\n    });\n    const txHash = await postRegisterAndPoll(session, frostSignerBytes, signature);\n    logger.info(`Registered FROST signer on chain (tx ${txHash}).`);\n  }\n}\n\nexport async function ensureAccount(session: Session): Promise<InitializedSession> {\n  // idempotent: already initialized\n  if (session.account && session.signer && session.nodeApi && session.frostVerifierAddress) {\n    requireAccount(session);\n    return session;\n  }\n  // memoized: concurrent first-calls share one init (no double DKG / double register)\n  if (!session.initPromise) {\n    session.initPromise = runInit(session).catch((err) => {\n      session.initPromise = null; // allow retry after a failed init\n      throw err;\n    });\n  }\n  await session.initPromise;\n  requireAccount(session); // sync assertion narrows + throws if still incomplete\n  return session;\n}\n\nasync function postRegisterAndPoll(\n  session: Session,\n  frostBytes: Hex,\n  signature: Hex,\n): Promise<string> {\n  const postRes = await fetch(`${session.baseURL}/v1/agent-wallets/register-signer`, {\n    method: 'POST',\n    headers: { ...buildApiKeyHeaders(session), 'Content-Type': 'application/json' },\n    body: JSON.stringify({ frostBytes, signature }),\n  });\n  if (!postRes.ok) {\n    const body = await postRes.text().catch(() => '');\n    throw new Error(`register-signer POST failed (${postRes.status}): ${body}`);\n  }\n  const { jobId } = (await postRes.json()) as { jobId: string };\n  if (!jobId) {\n    throw new Error('register-signer POST returned no jobId');\n  }\n  logger.info(`register-signer job enqueued: ${jobId}`);\n\n  const deadline = Date.now() + REGISTER_POLL_TIMEOUT_MS;\n  while (Date.now() < deadline) {\n    const pollRes = await fetch(\n      `${session.baseURL}/v1/agent-wallets/register-signer/${encodeURIComponent(jobId)}`,\n      { headers: buildApiKeyHeaders(session) },\n    );\n    if (!pollRes.ok) {\n      throw new Error(`register-signer poll failed (${pollRes.status})`);\n    }\n    const body = (await pollRes.json()) as {\n      state: 'pending' | 'broadcasting' | 'confirmed' | 'failed' | 'unknown';\n      txHash?: string;\n      error?: string;\n    };\n    if (body.state === 'confirmed') {\n      if (!body.txHash) throw new Error('register-signer confirmed without a txHash');\n      return body.txHash;\n    }\n    if (body.state === 'failed') {\n      throw new Error(`register-signer failed: ${body.error ?? 'unknown error'}`);\n    }\n    await new Promise((r) => setTimeout(r, REGISTER_POLL_INTERVAL_MS));\n  }\n  throw new Error(\n    `register-signer timed out after ${REGISTER_POLL_TIMEOUT_MS}ms (jobId=${jobId})`,\n  );\n}\n", "import type { Client } from '../clients/createClient.js'\nimport type { PublicActions } from '../clients/decorators/public.js'\nimport type { WalletActions } from '../clients/decorators/wallet.js'\nimport type { Transport } from '../clients/transports/createTransport.js'\nimport type { Account } from '../types/account.js'\nimport type { Chain } from '../types/chain.js'\nimport type { RpcSchema } from '../types/eip1193.js'\n\n/**\n * Retrieves and returns an action from the client (if exists), and falls\n * back to the tree-shakable action.\n *\n * Useful for extracting overridden actions from a client (ie. if a consumer\n * wants to override the `sendTransaction` implementation).\n */\nexport function getAction<\n  transport extends Transport,\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  rpcSchema extends RpcSchema | undefined,\n  extended extends { [key: string]: unknown },\n  client extends Client<transport, chain, account, rpcSchema, extended>,\n  parameters,\n  returnType,\n>(\n  client: client,\n  actionFn: (_: any, parameters: parameters) => returnType,\n  // Some minifiers drop `Function.prototype.name`, or replace it with short letters,\n  // meaning that `actionFn.name` will not always work. For that case, the consumer\n  // needs to pass the name explicitly.\n  name: keyof PublicActions | keyof WalletActions | (string & {}),\n): (parameters: parameters) => returnType {\n  const action_implicit = client[actionFn.name]\n  if (typeof action_implicit === 'function')\n    return action_implicit as (params: parameters) => returnType\n\n  const action_explicit = client[name]\n  if (typeof action_explicit === 'function')\n    return action_explicit as (params: parameters) => returnType\n\n  return (params) => actionFn(client, params)\n}\n", "import type {\n  Abi,\n  AbiParameter,\n  AbiParameterToPrimitiveType,\n  ExtractAbiEvents,\n} from 'abitype'\n\nimport {\n  AbiEventNotFoundError,\n  type AbiEventNotFoundErrorType,\n} from '../../errors/abi.js'\nimport {\n  FilterTypeNotSupportedError,\n  type FilterTypeNotSupportedErrorType,\n} from '../../errors/log.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractEventArgs,\n  ContractEventName,\n  EventDefinition,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n  type ToEventSelectorErrorType,\n  toEventSelector,\n} from '../hash/toEventSelector.js'\nimport {\n  type EncodeAbiParametersErrorType,\n  encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeEventTopics'\n\nexport type EncodeEventTopicsParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined = ContractEventName<abi>,\n  ///\n  hasEvents = abi extends Abi\n    ? Abi extends abi\n      ? true\n      : [ExtractAbiEvents<abi>] extends [never]\n        ? false\n        : true\n    : true,\n  allArgs = ContractEventArgs<\n    abi,\n    eventName extends ContractEventName<abi>\n      ? eventName\n      : ContractEventName<abi>\n  >,\n  allErrorNames = ContractEventName<abi>,\n> = {\n  abi: abi\n  args?: allArgs | undefined\n} & UnionEvaluate<\n  IsNarrowable<abi, Abi> extends true\n    ? abi['length'] extends 1\n      ? { eventName?: eventName | allErrorNames | undefined }\n      : { eventName: eventName | allErrorNames }\n    : { eventName?: eventName | allErrorNames | undefined }\n> &\n  (hasEvents extends true ? unknown : never)\n\nexport type EncodeEventTopicsReturnType = [Hex, ...(Hex | Hex[] | null)[]]\n\nexport type EncodeEventTopicsErrorType =\n  | AbiEventNotFoundErrorType\n  | EncodeArgErrorType\n  | FormatAbiItemErrorType\n  | GetAbiItemErrorType\n  | ToEventSelectorErrorType\n  | ErrorType\n\nexport function encodeEventTopics<\n  const abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi> | undefined = undefined,\n>(\n  parameters: EncodeEventTopicsParameters<abi, eventName>,\n): EncodeEventTopicsReturnType {\n  const { abi, eventName, args } = parameters as EncodeEventTopicsParameters\n\n  let abiItem = abi[0]\n  if (eventName) {\n    const item = getAbiItem({ abi, name: eventName })\n    if (!item) throw new AbiEventNotFoundError(eventName, { docsPath })\n    abiItem = item\n  }\n\n  if (abiItem.type !== 'event')\n    throw new AbiEventNotFoundError(undefined, { docsPath })\n\n  const definition = formatAbiItem(abiItem)\n  const signature = toEventSelector(definition as EventDefinition)\n\n  let topics: (Hex | Hex[] | null)[] = []\n  if (args && 'inputs' in abiItem) {\n    const indexedInputs = abiItem.inputs?.filter(\n      (param) => 'indexed' in param && param.indexed,\n    )\n    const args_ = Array.isArray(args)\n      ? args\n      : Object.values(args).length > 0\n        ? (indexedInputs?.map((x: any) => (args as any)[x.name]) ?? [])\n        : []\n\n    if (args_.length > 0) {\n      topics =\n        indexedInputs?.map((param, i) => {\n          if (Array.isArray(args_[i]))\n            return args_[i].map((_: any, j: number) =>\n              encodeArg({ param, value: args_[i][j] }),\n            )\n          return typeof args_[i] !== 'undefined' && args_[i] !== null\n            ? encodeArg({ param, value: args_[i] })\n            : null\n        }) ?? []\n    }\n  }\n  return [signature, ...topics]\n}\n\nexport type EncodeArgErrorType =\n  | Keccak256ErrorType\n  | ToBytesErrorType\n  | EncodeAbiParametersErrorType\n  | FilterTypeNotSupportedErrorType\n  | ErrorType\n\nfunction encodeArg({\n  param,\n  value,\n}: {\n  param: AbiParameter\n  value: AbiParameterToPrimitiveType<AbiParameter>\n}) {\n  if (param.type === 'string' || param.type === 'bytes')\n    return keccak256(toBytes(value as string))\n  if (param.type === 'tuple' || param.type.match(/^(.*)\\[(\\d+)?\\]$/))\n    throw new FilterTypeNotSupportedError(param.type)\n  return encodeAbiParameters([param], [value])\n}\n", "import { BaseError } from './base.js'\n\nexport type FilterTypeNotSupportedErrorType = FilterTypeNotSupportedError & {\n  name: 'FilterTypeNotSupportedError'\n}\nexport class FilterTypeNotSupportedError extends BaseError {\n  constructor(type: string) {\n    super(`Filter type \"${type}\" is not supported.`, {\n      name: 'FilterTypeNotSupportedError',\n    })\n  }\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractEventName,\n  MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Hex } from '../../types/misc.js'\nimport {\n  type EncodeEventTopicsErrorType,\n  type EncodeEventTopicsParameters,\n  encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreateContractEventFilterParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined = undefined,\n  args extends\n    | MaybeExtractEventArgsFromAbi<abi, eventName>\n    | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n  address?: Address | Address[] | undefined\n  abi: abi\n  eventName?: eventName | ContractEventName<abi> | undefined\n  fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n  /**\n   * Whether or not the logs must match the indexed/non-indexed arguments in the event ABI item.\n   * @default false\n   */\n  strict?: strict | boolean | undefined\n  toBlock?: toBlock | BlockNumber | BlockTag | undefined\n} & (undefined extends eventName\n  ? {\n      args?: undefined\n    }\n  : MaybeExtractEventArgsFromAbi<abi, eventName> extends infer eventFilterArgs\n    ? {\n        args?:\n          | eventFilterArgs\n          | (args extends eventFilterArgs ? args : never)\n          | undefined\n      }\n    : {\n        args?: undefined\n      })\n\nexport type CreateContractEventFilterReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined = undefined,\n  args extends\n    | MaybeExtractEventArgsFromAbi<abi, eventName>\n    | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = Filter<'event', abi, eventName, args, strict, fromBlock, toBlock>\n\nexport type CreateContractEventFilterErrorType =\n  | EncodeEventTopicsErrorType\n  | RequestErrorType\n  | NumberToHexErrorType\n  | ErrorType\n\n/**\n * Creates a Filter to retrieve event logs that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges) or [`getFilterLogs`](https://viem.sh/docs/actions/public/getFilterLogs).\n *\n * - Docs: https://viem.sh/docs/contract/createContractEventFilter\n *\n * @param client - Client to use\n * @param parameters - {@link CreateContractEventFilterParameters}\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateContractEventFilterReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createContractEventFilter } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createContractEventFilter(client, {\n *   abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n * })\n */\nexport async function createContractEventFilter<\n  chain extends Chain | undefined,\n  const abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi> | undefined,\n  args extends MaybeExtractEventArgsFromAbi<abi, eventName> | undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n  client: Client<Transport, chain>,\n  parameters: CreateContractEventFilterParameters<\n    abi,\n    eventName,\n    args,\n    strict,\n    fromBlock,\n    toBlock\n  >,\n): Promise<\n  CreateContractEventFilterReturnType<\n    abi,\n    eventName,\n    args,\n    strict,\n    fromBlock,\n    toBlock\n  >\n> {\n  const { address, abi, args, eventName, fromBlock, strict, toBlock } =\n    parameters as CreateContractEventFilterParameters\n\n  const getRequest = createFilterRequestScope(client, {\n    method: 'eth_newFilter',\n  })\n\n  const topics = eventName\n    ? encodeEventTopics({\n        abi,\n        args,\n        eventName,\n      } as unknown as EncodeEventTopicsParameters)\n    : undefined\n  const id: Hex = await client.request({\n    method: 'eth_newFilter',\n    params: [\n      {\n        address,\n        fromBlock:\n          typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n        toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n        topics,\n      },\n    ],\n  })\n\n  return {\n    abi,\n    args,\n    eventName,\n    id,\n    request: getRequest(id),\n    strict: Boolean(strict),\n    type: 'event',\n  } as unknown as CreateContractEventFilterReturnType<\n    abi,\n    eventName,\n    args,\n    strict,\n    fromBlock,\n    toBlock\n  >\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { OnResponseFn } from '../../clients/transports/fallback.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { EIP1193RequestFn, PublicRpcSchema } from '../../types/eip1193.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { Filter } from '../../types/utils.js'\n\ntype CreateFilterRequestScopeParameters = {\n  method:\n    | 'eth_newFilter'\n    | 'eth_newPendingTransactionFilter'\n    | 'eth_newBlockFilter'\n}\n\ntype FilterRpcSchema = Filter<\n  PublicRpcSchema,\n  { Method: 'eth_getFilterLogs' | 'eth_getFilterChanges' }\n>\n\ntype CreateFilterRequestScopeReturnType = (\n  id: Hex,\n) => EIP1193RequestFn<FilterRpcSchema>\n\n/**\n * Scopes `request` to the filter ID. If the client is a fallback, it will\n * listen for responses and scope the child transport `request` function\n * to the successful filter ID.\n */\nexport function createFilterRequestScope<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { method }: CreateFilterRequestScopeParameters,\n): CreateFilterRequestScopeReturnType {\n  const requestMap: Record<Hex, EIP1193RequestFn> = {}\n\n  if (client.transport.type === 'fallback')\n    client.transport.onResponse?.(\n      ({\n        method: method_,\n        response: id,\n        status,\n        transport,\n      }: Parameters<OnResponseFn>[0]) => {\n        if (status === 'success' && method === method_)\n          requestMap[id as Hex] = transport.request\n      },\n    )\n\n  return ((id) =>\n    requestMap[id] || client.request) as CreateFilterRequestScopeReturnType\n}\n", "import type { Abi } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n  ContractFunctionParameters,\n  GetValue,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  type EncodeFunctionDataParameters,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type EstimateGasErrorType,\n  type EstimateGasParameters,\n  estimateGas,\n} from './estimateGas.js'\n\nexport type EstimateContractGasParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends ContractFunctionName<\n    abi,\n    'nonpayable' | 'payable'\n  > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n  chain extends Chain | undefined = Chain | undefined,\n> = ContractFunctionParameters<\n  abi,\n  'nonpayable' | 'payable',\n  functionName,\n  args\n> &\n  UnionOmit<EstimateGasParameters<chain>, 'data' | 'to' | 'value'> &\n  GetValue<\n    abi,\n    functionName,\n    EstimateGasParameters<chain> extends EstimateGasParameters\n      ? EstimateGasParameters<chain>['value']\n      : EstimateGasParameters['value']\n  > & {\n    /** Data to append to the end of the calldata. Useful for adding a [\"domain\" tag](https://opensea.notion.site/opensea/Seaport-Order-Attributions-ec2d69bf455041a5baa490941aad307f). */\n    dataSuffix?: Hex | undefined\n  }\n\nexport type EstimateContractGasReturnType = bigint\n\nexport type EstimateContractGasErrorType = GetContractErrorReturnType<\n  EncodeFunctionDataErrorType | EstimateGasErrorType | ParseAccountErrorType\n>\n\n/**\n * Estimates the gas required to successfully execute a contract write function call.\n *\n * - Docs: https://viem.sh/docs/contract/estimateContractGas\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`estimateGas` action](https://viem.sh/docs/actions/public/estimateGas) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateContractGasParameters}\n * @returns The gas estimate (in wei). {@link EstimateContractGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateContractGas } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const gas = await estimateContractGas(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   abi: parseAbi(['function mint() public']),\n *   functionName: 'mint',\n *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * })\n */\nexport async function estimateContractGas<\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: EstimateContractGasParameters<abi, functionName, args, chain>,\n): Promise<EstimateContractGasReturnType> {\n  const {\n    abi,\n    address,\n    args,\n    functionName,\n    dataSuffix = typeof client.dataSuffix === 'string'\n      ? client.dataSuffix\n      : client.dataSuffix?.value,\n    ...request\n  } = parameters as EstimateContractGasParameters\n  const data = encodeFunctionData({\n    abi,\n    args,\n    functionName,\n  } as EncodeFunctionDataParameters)\n\n  try {\n    const gas = await getAction(\n      client,\n      estimateGas,\n      'estimateGas',\n    )({\n      data: `${data}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n      to: address,\n      ...request,\n    } as unknown as EstimateGasParameters)\n    return gas\n  } catch (error) {\n    const account = request.account ? parseAccount(request.account) : undefined\n    throw getContractError(error as BaseError, {\n      abi,\n      address,\n      args,\n      docsPath: '/docs/contract/estimateContractGas',\n      functionName,\n      sender: account?.address,\n    })\n  }\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n  ContractFunctionExecutionError,\n  type ContractFunctionExecutionErrorType,\n  ContractFunctionRevertedError,\n  type ContractFunctionRevertedErrorType,\n  ContractFunctionZeroDataError,\n  type ContractFunctionZeroDataErrorType,\n  RawContractError,\n} from '../../errors/contract.js'\nimport { RpcRequestError } from '../../errors/request.js'\nimport { InternalRpcError, InvalidInputRpcError } from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nconst EXECUTION_REVERTED_ERROR_CODE = 3\n\nexport type GetContractErrorReturnType<cause = ErrorType> = Omit<\n  ContractFunctionExecutionErrorType,\n  'cause'\n> & {\n  cause:\n    | cause\n    | ContractFunctionZeroDataErrorType\n    | ContractFunctionRevertedErrorType\n}\n\nexport function getContractError<err extends ErrorType<string>>(\n  err: err,\n  {\n    abi,\n    address,\n    args,\n    docsPath,\n    functionName,\n    sender,\n  }: {\n    abi: Abi\n    args: any\n    address?: Address | undefined\n    docsPath?: string | undefined\n    functionName: string\n    sender?: Address | undefined\n  },\n): GetContractErrorReturnType {\n  const error = (\n    err instanceof RawContractError\n      ? err\n      : err instanceof BaseError\n        ? err.walk((err) => 'data' in (err as Error)) || err.walk()\n        : {}\n  ) as BaseError\n  const { code, data, details, message, shortMessage } =\n    error as RawContractError\n\n  const cause = (() => {\n    if (err instanceof AbiDecodingZeroDataError)\n      return new ContractFunctionZeroDataError({ functionName, cause: err })\n    if (\n      ([EXECUTION_REVERTED_ERROR_CODE, InternalRpcError.code].includes(code) &&\n        (data || details || message || shortMessage)) ||\n      (code === InvalidInputRpcError.code &&\n        details === 'execution reverted' &&\n        data)\n    ) {\n      return new ContractFunctionRevertedError({\n        abi,\n        data: typeof data === 'object' ? data.data : data,\n        functionName,\n        message:\n          error instanceof RpcRequestError\n            ? details\n            : (shortMessage ?? message),\n        cause: err,\n      })\n    }\n    return err\n  })()\n\n  return new ContractFunctionExecutionError(cause as BaseError, {\n    abi,\n    args,\n    contractAddress: address,\n    docsPath,\n    functionName,\n    sender,\n  }) as GetContractErrorReturnType\n}\n", "import type { Address } from 'abitype'\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { BaseError } from '../../errors/base.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n  type RecoverAuthorizationAddressErrorType,\n  recoverAuthorizationAddress,\n} from '../../utils/authorization/recoverAuthorizationAddress.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type GetEstimateGasErrorReturnType,\n  getEstimateGasError,\n} from '../../utils/errors/getEstimateGasError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport { serializeStateOverride } from '../../utils/stateOverride.js'\nimport {\n  type AssertRequestErrorType,\n  type AssertRequestParameters,\n  assertRequest,\n} from '../../utils/transaction/assertRequest.js'\nimport {\n  type PrepareTransactionRequestParameters,\n  type PrepareTransactionRequestParameterType,\n  prepareTransactionRequest,\n} from '../wallet/prepareTransactionRequest.js'\n\nexport type EstimateGasParameters<\n  chain extends Chain | undefined = Chain | undefined,\n> = UnionOmit<FormattedEstimateGas<chain>, 'from'> & {\n  account?: Account | Address | undefined\n  prepare?:\n    | boolean\n    | readonly PrepareTransactionRequestParameterType[]\n    | undefined\n  stateOverride?: StateOverride | undefined\n} & (\n    | {\n        /** The balance of the account at a block number. */\n        blockNumber?: bigint | undefined\n        blockTag?: undefined\n      }\n    | {\n        blockNumber?: undefined\n        /**\n         * The balance of the account at a block tag.\n         * @default 'latest'\n         */\n        blockTag?: BlockTag | undefined\n      }\n  )\ntype FormattedEstimateGas<chain extends Chain | undefined = Chain | undefined> =\n  FormattedTransactionRequest<chain>\n\nexport type EstimateGasReturnType = bigint\n\nexport type EstimateGasErrorType = GetEstimateGasErrorReturnType<\n  | ParseAccountErrorType\n  | NumberToHexErrorType\n  | RequestErrorType\n  | RecoverAuthorizationAddressErrorType\n  | AssertRequestErrorType\n>\n\n/**\n * Estimates the gas necessary to complete a transaction without submitting it to the network.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateGas\n * - JSON-RPC Methods: [`eth_estimateGas`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_estimategas)\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateGasParameters}\n * @returns The gas estimate (in gas units). {@link EstimateGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseEther } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateGas } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const gasEstimate = await estimateGas(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *   value: parseEther('1'),\n * })\n */\nexport async function estimateGas<\n  chain extends Chain | undefined,\n  account extends Account | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  args: EstimateGasParameters<chain>,\n): Promise<EstimateGasReturnType> {\n  const { account: account_ = client.account, prepare = true } = args\n  const account = account_ ? parseAccount(account_) : undefined\n\n  const parameters = (() => {\n    if (Array.isArray(prepare)) return prepare\n    // Some RPC Providers do not compute versioned hashes from blobs. We will need\n    // to compute them.\n    if (account?.type !== 'local') return ['blobVersionedHashes']\n    return undefined\n  })()\n\n  try {\n    const to = await (async () => {\n      // If `to` exists on the parameters, use that.\n      if (args.to) return args.to\n\n      // If no `to` exists, and we are sending a EIP-7702 transaction, use the\n      // address of the first authorization in the list.\n      if (args.authorizationList && args.authorizationList.length > 0)\n        return await recoverAuthorizationAddress({\n          authorization: args.authorizationList[0],\n        }).catch(() => {\n          throw new BaseError(\n            '`to` is required. Could not infer from `authorizationList`',\n          )\n        })\n\n      // Otherwise, we are sending a deployment transaction.\n      return undefined\n    })()\n\n    const {\n      accessList,\n      authorizationList,\n      blobs,\n      blobVersionedHashes,\n      blockNumber,\n      blockTag,\n      data,\n      gas,\n      gasPrice,\n      maxFeePerBlobGas,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      nonce,\n      value,\n      stateOverride,\n      ...rest\n    } = prepare\n      ? ((await prepareTransactionRequest(client, {\n          ...args,\n          parameters,\n          to,\n        } as PrepareTransactionRequestParameters)) as EstimateGasParameters)\n      : args\n\n    // If we get `gas` back from the prepared transaction request, which is\n    // different from the `gas` we provided, it was likely filled by other means\n    // during request preparation (e.g. `eth_fillTransaction` or `chain.transactionRequest.prepare`).\n    // (e.g. `eth_fillTransaction` or `chain.transactionRequest.prepare`).\n    if (gas && args.gas !== gas) return gas\n\n    const blockNumberHex =\n      typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n    const block = blockNumberHex || blockTag\n\n    const rpcStateOverride = serializeStateOverride(stateOverride)\n\n    assertRequest(args as AssertRequestParameters)\n\n    const chainFormat = client.chain?.formatters?.transactionRequest?.format\n    const format = chainFormat || formatTransactionRequest\n\n    const request = format(\n      {\n        // Pick out extra data that might exist on the chain's transaction request type.\n        ...extract(rest, { format: chainFormat }),\n        account,\n        accessList,\n        authorizationList,\n        blobs,\n        blobVersionedHashes,\n        data,\n        gasPrice,\n        maxFeePerBlobGas,\n        maxFeePerGas,\n        maxPriorityFeePerGas,\n        nonce,\n        to,\n        value,\n      } as TransactionRequest,\n      'estimateGas',\n    )\n\n    return BigInt(\n      await client.request({\n        method: 'eth_estimateGas',\n        params: rpcStateOverride\n          ? [\n              request,\n              block ?? client.experimental_blockTag ?? 'latest',\n              rpcStateOverride,\n            ]\n          : block\n            ? [request, block]\n            : [request],\n      }),\n    )\n  } catch (err) {\n    throw getEstimateGasError(err as BaseError, {\n      ...args,\n      account,\n      chain: client.chain,\n    })\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport {\n  type ChecksumAddressErrorType,\n  checksumAddress,\n} from '../../utils/address/getAddress.js'\nimport {\n  type Keccak256ErrorType,\n  keccak256,\n} from '../../utils/hash/keccak256.js'\n\nexport type PublicKeyToAddressErrorType =\n  | ChecksumAddressErrorType\n  | Keccak256ErrorType\n  | ErrorType\n\n/**\n * @description Converts an ECDSA public key to an address.\n *\n * @param publicKey The public key to convert.\n *\n * @returns The address.\n */\nexport function publicKeyToAddress(publicKey: Hex): Address {\n  const address = keccak256(`0x${publicKey.substring(4)}`).substring(26)\n  return checksumAddress(`0x${address}`) as Address\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { size } from '../data/size.js'\nimport {\n  type HexToNumberErrorType,\n  hexToBigInt,\n  hexToNumber,\n} from '../encoding/fromHex.js'\nimport { toHex } from '../encoding/toHex.js'\n\nexport type RecoverPublicKeyParameters = {\n  hash: Hex | ByteArray\n  signature: Hex | ByteArray | Signature\n}\n\nexport type RecoverPublicKeyReturnType = Hex\n\nexport type RecoverPublicKeyErrorType =\n  | HexToNumberErrorType\n  | IsHexErrorType\n  | ErrorType\n\nexport async function recoverPublicKey({\n  hash,\n  signature,\n}: RecoverPublicKeyParameters): Promise<RecoverPublicKeyReturnType> {\n  const hashHex = isHex(hash) ? hash : toHex(hash)\n\n  const { secp256k1 } = await import('@noble/curves/secp256k1')\n  const signature_ = (() => {\n    // typeof signature: `Signature`\n    if (typeof signature === 'object' && 'r' in signature && 's' in signature) {\n      const { r, s, v, yParity } = signature\n      const yParityOrV = Number(yParity ?? v)!\n      const recoveryBit = toRecoveryBit(yParityOrV)\n      return new secp256k1.Signature(\n        hexToBigInt(r),\n        hexToBigInt(s),\n      ).addRecoveryBit(recoveryBit)\n    }\n\n    // typeof signature: `Hex | ByteArray`\n    const signatureHex = isHex(signature) ? signature : toHex(signature)\n    if (size(signatureHex) !== 65) throw new Error('invalid signature length')\n    const yParityOrV = hexToNumber(`0x${signatureHex.slice(130)}`)\n    const recoveryBit = toRecoveryBit(yParityOrV)\n    return secp256k1.Signature.fromCompact(\n      signatureHex.substring(2, 130),\n    ).addRecoveryBit(recoveryBit)\n  })()\n\n  const publicKey = signature_\n    .recoverPublicKey(hashHex.substring(2))\n    .toHex(false)\n  return `0x${publicKey}`\n}\n\nfunction toRecoveryBit(yParityOrV: number) {\n  if (yParityOrV === 0 || yParityOrV === 1) return yParityOrV\n  if (yParityOrV === 27) return 0\n  if (yParityOrV === 28) return 1\n  throw new Error('Invalid yParityOrV value')\n}\n", "import type { Address } from 'abitype'\n\nimport { publicKeyToAddress } from '../../accounts/utils/publicKeyToAddress.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport { recoverPublicKey } from './recoverPublicKey.js'\n\nexport type RecoverAddressParameters = {\n  hash: Hex | ByteArray\n  signature: Hex | ByteArray | Signature\n}\n\nexport type RecoverAddressReturnType = Address\n\nexport type RecoverAddressErrorType = ErrorType\n\nexport async function recoverAddress({\n  hash,\n  signature,\n}: RecoverAddressParameters): Promise<RecoverAddressReturnType> {\n  return publicKeyToAddress(await recoverPublicKey({ hash, signature }))\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { AuthorizationRequest } from '../../types/authorization.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type NumberToHexErrorType, numberToHex } from '../encoding/toHex.js'\nimport { type ToRlpErrorType, toRlp } from '../encoding/toRlp.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type HashAuthorizationParameters<to extends To> =\n  AuthorizationRequest & {\n    /** Output format. @default \"hex\" */\n    to?: to | To | undefined\n  }\n\nexport type HashAuthorizationReturnType<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type HashAuthorizationErrorType =\n  | Keccak256ErrorType\n  | ConcatHexErrorType\n  | ToRlpErrorType\n  | NumberToHexErrorType\n  | HexToBytesErrorType\n  | ErrorType\n\n/**\n * Computes an Authorization hash in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n */\nexport function hashAuthorization<to extends To = 'hex'>(\n  parameters: HashAuthorizationParameters<to>,\n): HashAuthorizationReturnType<to> {\n  const { chainId, nonce, to } = parameters\n  const address = parameters.contractAddress ?? parameters.address\n  const hash = keccak256(\n    concatHex([\n      '0x05',\n      toRlp([\n        chainId ? numberToHex(chainId) : '0x',\n        address,\n        nonce ? numberToHex(nonce) : '0x',\n      ]),\n    ]),\n  )\n  if (to === 'bytes') return hexToBytes(hash) as HashAuthorizationReturnType<to>\n  return hash as HashAuthorizationReturnType<to>\n}\n", "import { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n  type CreateCursorErrorType,\n  type Cursor,\n  createCursor,\n} from '../cursor.js'\n\nimport { type HexToBytesErrorType, hexToBytes } from './toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from './toHex.js'\n\nexport type RecursiveArray<T> = T | readonly RecursiveArray<T>[]\n\ntype To = 'hex' | 'bytes'\n\ntype Encodable = {\n  length: number\n  encode(cursor: Cursor): void\n}\n\nexport type ToRlpReturnType<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type ToRlpErrorType =\n  | CreateCursorErrorType\n  | BytesToHexErrorType\n  | HexToBytesErrorType\n  | ErrorType\n\nexport function toRlp<to extends To = 'hex'>(\n  bytes: RecursiveArray<ByteArray> | RecursiveArray<Hex>,\n  to: to | To | undefined = 'hex',\n): ToRlpReturnType<to> {\n  const encodable = getEncodable(bytes)\n  const cursor = createCursor(new Uint8Array(encodable.length))\n  encodable.encode(cursor)\n\n  if (to === 'hex') return bytesToHex(cursor.bytes) as ToRlpReturnType<to>\n  return cursor.bytes as ToRlpReturnType<to>\n}\n\nexport type BytesToRlpErrorType = ToRlpErrorType | ErrorType\n\nexport function bytesToRlp<to extends To = 'bytes'>(\n  bytes: RecursiveArray<ByteArray>,\n  to: to | To | undefined = 'bytes',\n): ToRlpReturnType<to> {\n  return toRlp(bytes, to)\n}\n\nexport type HexToRlpErrorType = ToRlpErrorType | ErrorType\n\nexport function hexToRlp<to extends To = 'hex'>(\n  hex: RecursiveArray<Hex>,\n  to: to | To | undefined = 'hex',\n): ToRlpReturnType<to> {\n  return toRlp(hex, to)\n}\n\nfunction getEncodable(\n  bytes: RecursiveArray<ByteArray> | RecursiveArray<Hex>,\n): Encodable {\n  if (Array.isArray(bytes))\n    return getEncodableList(bytes.map((x) => getEncodable(x)))\n  return getEncodableBytes(bytes as any)\n}\n\nfunction getEncodableList(list: Encodable[]): Encodable {\n  const bodyLength = list.reduce((acc, x) => acc + x.length, 0)\n\n  const sizeOfBodyLength = getSizeOfLength(bodyLength)\n  const length = (() => {\n    if (bodyLength <= 55) return 1 + bodyLength\n    return 1 + sizeOfBodyLength + bodyLength\n  })()\n\n  return {\n    length,\n    encode(cursor: Cursor) {\n      if (bodyLength <= 55) {\n        cursor.pushByte(0xc0 + bodyLength)\n      } else {\n        cursor.pushByte(0xc0 + 55 + sizeOfBodyLength)\n        if (sizeOfBodyLength === 1) cursor.pushUint8(bodyLength)\n        else if (sizeOfBodyLength === 2) cursor.pushUint16(bodyLength)\n        else if (sizeOfBodyLength === 3) cursor.pushUint24(bodyLength)\n        else cursor.pushUint32(bodyLength)\n      }\n      for (const { encode } of list) {\n        encode(cursor)\n      }\n    },\n  }\n}\n\nfunction getEncodableBytes(bytesOrHex: ByteArray | Hex): Encodable {\n  const bytes =\n    typeof bytesOrHex === 'string' ? hexToBytes(bytesOrHex) : bytesOrHex\n\n  const sizeOfBytesLength = getSizeOfLength(bytes.length)\n  const length = (() => {\n    if (bytes.length === 1 && bytes[0] < 0x80) return 1\n    if (bytes.length <= 55) return 1 + bytes.length\n    return 1 + sizeOfBytesLength + bytes.length\n  })()\n\n  return {\n    length,\n    encode(cursor: Cursor) {\n      if (bytes.length === 1 && bytes[0] < 0x80) {\n        cursor.pushBytes(bytes)\n      } else if (bytes.length <= 55) {\n        cursor.pushByte(0x80 + bytes.length)\n        cursor.pushBytes(bytes)\n      } else {\n        cursor.pushByte(0x80 + 55 + sizeOfBytesLength)\n        if (sizeOfBytesLength === 1) cursor.pushUint8(bytes.length)\n        else if (sizeOfBytesLength === 2) cursor.pushUint16(bytes.length)\n        else if (sizeOfBytesLength === 3) cursor.pushUint24(bytes.length)\n        else cursor.pushUint32(bytes.length)\n        cursor.pushBytes(bytes)\n      }\n    },\n  }\n}\n\nfunction getSizeOfLength(length: number) {\n  if (length < 2 ** 8) return 1\n  if (length < 2 ** 16) return 2\n  if (length < 2 ** 24) return 3\n  if (length < 2 ** 32) return 4\n  throw new BaseError('Length is too large.')\n}\n", "import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  Authorization,\n  AuthorizationRequest,\n  SignedAuthorization,\n} from '../../types/authorization.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { OneOf } from '../../types/utils.js'\nimport {\n  type RecoverAddressErrorType,\n  recoverAddress,\n} from '../signature/recoverAddress.js'\nimport {\n  type HashAuthorizationErrorType,\n  hashAuthorization,\n} from './hashAuthorization.js'\n\nexport type RecoverAuthorizationAddressParameters<\n  authorization extends OneOf<\n    Authorization | AuthorizationRequest | SignedAuthorization\n  > = OneOf<Authorization | AuthorizationRequest | SignedAuthorization>,\n  //\n  _signature = Hex | ByteArray | OneOf<Signature | SignedAuthorization>,\n> = {\n  /**\n   * The Authorization object.\n   *\n   * - If an unsigned `authorization` is provided, the `signature` property is required.\n   * - If a signed `authorization` is provided, the `signature` property does not need to be provided.\n   */\n  authorization:\n    | authorization\n    | OneOf<Authorization | AuthorizationRequest | SignedAuthorization>\n} & (authorization extends SignedAuthorization\n  ? {\n      /** Signature of the Authorization. Not required if the `authorization` is signed. */\n      signature?: _signature | undefined\n    }\n  : {\n      /** Signature of the Authorization. Not required if the `authorization` is signed. */\n      signature: _signature\n    })\n\nexport type RecoverAuthorizationAddressReturnType = Address\n\nexport type RecoverAuthorizationAddressErrorType =\n  | HashAuthorizationErrorType\n  | RecoverAddressErrorType\n  | ErrorType\n\nexport async function recoverAuthorizationAddress<\n  const authorization extends OneOf<\n    Authorization | AuthorizationRequest | SignedAuthorization\n  >,\n>(\n  parameters: RecoverAuthorizationAddressParameters<authorization>,\n): Promise<RecoverAuthorizationAddressReturnType> {\n  const { authorization, signature } = parameters\n\n  return recoverAddress({\n    hash: hashAuthorization(authorization as AuthorizationRequest),\n    signature: (signature ?? authorization) as Signature,\n  })\n}\n", "import type { Account } from '../accounts/types.js'\nimport type { EstimateGasParameters } from '../actions/public/estimateGas.js'\nimport type { Chain } from '../types/chain.js'\nimport { formatEther } from '../utils/unit/formatEther.js'\nimport { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { BaseError } from './base.js'\nimport { prettyPrint } from './transaction.js'\n\nexport type EstimateGasExecutionErrorType = EstimateGasExecutionError & {\n  name: 'EstimateGasExecutionError'\n}\nexport class EstimateGasExecutionError extends BaseError {\n  override cause: BaseError\n\n  constructor(\n    cause: BaseError,\n    {\n      account,\n      docsPath,\n      chain,\n      data,\n      gas,\n      gasPrice,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      nonce,\n      to,\n      value,\n    }: Omit<EstimateGasParameters<any>, 'account'> & {\n      account?: Account | undefined\n      chain?: Chain | undefined\n      docsPath?: string | undefined\n    },\n  ) {\n    const prettyArgs = prettyPrint({\n      from: account?.address,\n      to,\n      value:\n        typeof value !== 'undefined' &&\n        `${formatEther(value)} ${chain?.nativeCurrency?.symbol || 'ETH'}`,\n      data,\n      gas,\n      gasPrice:\n        typeof gasPrice !== 'undefined' && `${formatGwei(gasPrice)} gwei`,\n      maxFeePerGas:\n        typeof maxFeePerGas !== 'undefined' &&\n        `${formatGwei(maxFeePerGas)} gwei`,\n      maxPriorityFeePerGas:\n        typeof maxPriorityFeePerGas !== 'undefined' &&\n        `${formatGwei(maxPriorityFeePerGas)} gwei`,\n      nonce,\n    })\n\n    super(cause.shortMessage, {\n      cause,\n      docsPath,\n      metaMessages: [\n        ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n        'Estimate Gas Arguments:',\n        prettyArgs,\n      ].filter(Boolean) as string[],\n      name: 'EstimateGasExecutionError',\n    })\n    this.cause = cause\n  }\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { EstimateGasParameters } from '../../actions/public/estimateGas.js'\nimport type { BaseError } from '../../errors/base.js'\nimport {\n  EstimateGasExecutionError,\n  type EstimateGasExecutionErrorType,\n} from '../../errors/estimateGas.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\n\nimport {\n  type GetNodeErrorParameters,\n  type GetNodeErrorReturnType,\n  getNodeError,\n} from './getNodeError.js'\n\nexport type GetEstimateGasErrorReturnType<cause = ErrorType> = Omit<\n  EstimateGasExecutionErrorType,\n  'cause'\n> & { cause: cause | GetNodeErrorReturnType }\n\nexport function getEstimateGasError<err extends ErrorType<string>>(\n  err: err,\n  {\n    docsPath,\n    ...args\n  }: Omit<EstimateGasParameters, 'account'> & {\n    account?: Account | undefined\n    chain?: Chain | undefined\n    docsPath?: string | undefined\n  },\n): GetEstimateGasErrorReturnType<err> {\n  const cause = (() => {\n    const cause = getNodeError(\n      err as {} as BaseError,\n      args as GetNodeErrorParameters,\n    )\n    if (cause instanceof UnknownNodeError) return err as {} as BaseError\n    return cause\n  })()\n  return new EstimateGasExecutionError(cause, {\n    docsPath,\n    ...args,\n  }) as GetEstimateGasErrorReturnType<err>\n}\n", "import type { Address } from 'abitype'\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport {\n  type EstimateFeesPerGasErrorType,\n  internal_estimateFeesPerGas,\n} from '../../actions/public/estimateFeesPerGas.js'\nimport {\n  type EstimateGasErrorType,\n  type EstimateGasParameters,\n  estimateGas,\n} from '../../actions/public/estimateGas.js'\nimport {\n  type GetBlockErrorType,\n  getBlock as getBlock_,\n} from '../../actions/public/getBlock.js'\nimport {\n  type GetTransactionCountErrorType,\n  getTransactionCount,\n} from '../../actions/public/getTransactionCount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { AccountNotFoundErrorType } from '../../errors/account.js'\nimport type { BaseError } from '../../errors/base.js'\nimport {\n  Eip1559FeesNotSupportedError,\n  MaxFeePerGasTooLowError,\n} from '../../errors/fee.js'\nimport type { DeriveAccount, GetAccountParameter } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type { ExtractCapabilities } from '../../types/capabilities.js'\nimport type {\n  Chain,\n  DeriveChain,\n  GetChainParameter,\n} from '../../types/chain.js'\nimport type { GetTransactionRequestKzgParameter } from '../../types/kzg.js'\nimport type {\n  TransactionRequest,\n  TransactionRequestEIP1559,\n  TransactionRequestEIP2930,\n  TransactionRequestEIP4844,\n  TransactionRequestEIP7702,\n  TransactionRequestLegacy,\n  TransactionSerializable,\n} from '../../types/transaction.js'\nimport type {\n  ExactPartial,\n  IsNever,\n  Prettify,\n  UnionOmit,\n  UnionRequiredBy,\n} from '../../types/utils.js'\nimport { blobsToCommitments } from '../../utils/blob/blobsToCommitments.js'\nimport { blobsToProofs } from '../../utils/blob/blobsToProofs.js'\nimport { commitmentsToVersionedHashes } from '../../utils/blob/commitmentsToVersionedHashes.js'\nimport { toBlobSidecars } from '../../utils/blob/toBlobSidecars.js'\nimport type { FormattedTransactionRequest } from '../../utils/formatters/transactionRequest.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { LruMap } from '../../utils/lru.js'\nimport type { NonceManager } from '../../utils/nonceManager.js'\nimport {\n  type AssertRequestErrorType,\n  type AssertRequestParameters,\n  assertRequest,\n} from '../../utils/transaction/assertRequest.js'\nimport {\n  type GetTransactionType,\n  getTransactionType,\n} from '../../utils/transaction/getTransactionType.js'\nimport {\n  type FillTransactionErrorType,\n  type FillTransactionParameters,\n  fillTransaction,\n} from '../public/fillTransaction.js'\nimport { getChainId as getChainId_ } from '../public/getChainId.js'\n\nexport const defaultParameters = [\n  'blobVersionedHashes',\n  'chainId',\n  'fees',\n  'gas',\n  'nonce',\n  'type',\n] as const\n\n/** @internal */\nexport const eip1559NetworkCache = /*#__PURE__*/ new Map<string, boolean>()\n\n/** @internal */\nexport const supportsFillTransaction = /*#__PURE__*/ new LruMap<boolean>(128)\n\nexport type PrepareTransactionRequestParameterType =\n  | 'blobVersionedHashes'\n  | 'chainId'\n  | 'fees'\n  | 'gas'\n  | 'nonce'\n  | 'sidecars'\n  | 'type'\ntype ParameterTypeToParameters<\n  parameterType extends PrepareTransactionRequestParameterType,\n> = parameterType extends 'fees'\n  ? 'maxFeePerGas' | 'maxPriorityFeePerGas' | 'gasPrice'\n  : parameterType\n\nexport type PrepareTransactionRequestRequest<\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  ///\n  _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = UnionOmit<FormattedTransactionRequest<_derivedChain>, 'from'> &\n  GetTransactionRequestKzgParameter & {\n    /**\n     * Nonce manager to use for the transaction request.\n     */\n    nonceManager?: NonceManager | undefined\n    /**\n     * Parameters to prepare for the transaction request.\n     *\n     * @default ['blobVersionedHashes', 'chainId', 'fees', 'gas', 'nonce', 'type']\n     */\n    parameters?: readonly PrepareTransactionRequestParameterType[] | undefined\n  }\n\nexport type PrepareTransactionRequestParameters<\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  accountOverride extends Account | Address | undefined =\n    | Account\n    | Address\n    | undefined,\n  request extends PrepareTransactionRequestRequest<\n    chain,\n    chainOverride\n  > = PrepareTransactionRequestRequest<chain, chainOverride>,\n> = request &\n  GetAccountParameter<account, accountOverride, false, true> &\n  GetChainParameter<chain, chainOverride> &\n  GetTransactionRequestKzgParameter<request> & { chainId?: number | undefined }\n\nexport type PrepareTransactionRequestReturnType<\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  accountOverride extends Account | Address | undefined =\n    | Account\n    | Address\n    | undefined,\n  request extends PrepareTransactionRequestRequest<\n    chain,\n    chainOverride\n  > = PrepareTransactionRequestRequest<chain, chainOverride>,\n  ///\n  _derivedAccount extends Account | Address | undefined = DeriveAccount<\n    account,\n    accountOverride\n  >,\n  _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n  _transactionType = request['type'] extends string | undefined\n    ? request['type']\n    : GetTransactionType<request> extends 'legacy'\n      ? unknown\n      : GetTransactionType<request>,\n  _transactionRequest extends TransactionRequest =\n    | (_transactionType extends 'legacy' ? TransactionRequestLegacy : never)\n    | (_transactionType extends 'eip1559' ? TransactionRequestEIP1559 : never)\n    | (_transactionType extends 'eip2930' ? TransactionRequestEIP2930 : never)\n    | (_transactionType extends 'eip4844' ? TransactionRequestEIP4844 : never)\n    | (_transactionType extends 'eip7702' ? TransactionRequestEIP7702 : never),\n> = Prettify<\n  UnionRequiredBy<\n    Extract<\n      UnionOmit<FormattedTransactionRequest<_derivedChain>, 'from'> &\n        (_derivedChain extends Chain\n          ? { chain: _derivedChain }\n          : { chain?: undefined }) &\n        (_derivedAccount extends Account\n          ? { account: _derivedAccount; from: Address }\n          : { account?: undefined; from?: undefined }),\n      IsNever<_transactionRequest> extends true\n        ? unknown\n        : ExactPartial<_transactionRequest>\n    > & { chainId?: number | undefined },\n    ParameterTypeToParameters<\n      request['parameters'] extends readonly PrepareTransactionRequestParameterType[]\n        ? request['parameters'][number]\n        : (typeof defaultParameters)[number]\n    >\n  > &\n    (unknown extends request['kzg'] ? {} : Pick<request, 'kzg'>) & {\n      // TODO(v3): Extract `prepareTransactionRequest` response into a named object of `{ capabilities, request }.\n      _capabilities?:\n        | ExtractCapabilities<'fillTransaction', 'ReturnType'>\n        | undefined\n    }\n>\n\nexport type PrepareTransactionRequestErrorType =\n  | AccountNotFoundErrorType\n  | AssertRequestErrorType\n  | ParseAccountErrorType\n  | GetBlockErrorType\n  | GetTransactionCountErrorType\n  | EstimateGasErrorType\n  | EstimateFeesPerGasErrorType\n\n/**\n * Prepares a transaction request for signing.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/prepareTransactionRequest\n *\n * @param args - {@link PrepareTransactionRequestParameters}\n * @returns The transaction request. {@link PrepareTransactionRequestReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { prepareTransactionRequest } from 'viem/actions'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const request = await prepareTransactionRequest(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   to: '0x0000000000000000000000000000000000000000',\n *   value: 1n,\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { prepareTransactionRequest } from 'viem/actions'\n *\n * const client = createWalletClient({\n *   account: privateKeyToAccount('0x\u2026'),\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n * const request = await prepareTransactionRequest(client, {\n *   to: '0x0000000000000000000000000000000000000000',\n *   value: 1n,\n * })\n */\nexport async function prepareTransactionRequest<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  const request extends PrepareTransactionRequestRequest<chain, chainOverride>,\n  accountOverride extends Account | Address | undefined = undefined,\n  chainOverride extends Chain | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  args: PrepareTransactionRequestParameters<\n    chain,\n    account,\n    chainOverride,\n    accountOverride,\n    request\n  >,\n): Promise<\n  PrepareTransactionRequestReturnType<\n    chain,\n    account,\n    chainOverride,\n    accountOverride,\n    request\n  >\n> {\n  let request = args as PrepareTransactionRequestParameters\n\n  request.account ??= client.account\n  request.parameters ??= defaultParameters\n\n  const {\n    account: account_,\n    chain = client.chain,\n    nonceManager,\n    parameters,\n  } = request\n\n  const prepareTransactionRequest = (() => {\n    if (typeof chain?.prepareTransactionRequest === 'function')\n      return {\n        fn: chain.prepareTransactionRequest,\n        runAt: ['beforeFillTransaction'],\n      }\n    if (Array.isArray(chain?.prepareTransactionRequest))\n      return {\n        fn: chain.prepareTransactionRequest[0],\n        runAt: chain.prepareTransactionRequest[1].runAt,\n      }\n    return undefined\n  })()\n\n  let chainId: number | undefined\n  async function getChainId(): Promise<number> {\n    if (chainId) return chainId\n    if (typeof request.chainId !== 'undefined') return request.chainId\n    if (chain) return chain.id\n    const chainId_ = await getAction(client, getChainId_, 'getChainId')({})\n    chainId = chainId_\n    return chainId\n  }\n\n  const account = account_ ? parseAccount(account_) : account_\n\n  let nonce = request.nonce\n  if (\n    parameters.includes('nonce') &&\n    typeof nonce === 'undefined' &&\n    account &&\n    nonceManager\n  ) {\n    const chainId = await getChainId()\n    nonce = await nonceManager.consume({\n      address: account.address,\n      chainId,\n      client,\n    })\n  }\n\n  if (\n    prepareTransactionRequest?.fn &&\n    prepareTransactionRequest.runAt?.includes('beforeFillTransaction')\n  ) {\n    request = await prepareTransactionRequest.fn(\n      { ...request, chain },\n      {\n        phase: 'beforeFillTransaction',\n      },\n    )\n    nonce ??= request.nonce\n  }\n\n  const attemptFill = (() => {\n    // Do not attempt if blobs are provided.\n    if (\n      (parameters.includes('blobVersionedHashes') ||\n        parameters.includes('sidecars')) &&\n      request.kzg &&\n      request.blobs\n    )\n      return false\n\n    // Do not attempt if `eth_fillTransaction` is not supported.\n    if (supportsFillTransaction.get(client.uid) === false) return false\n\n    // Should attempt `eth_fillTransaction` if \"fees\" or \"gas\" are required to be populated,\n    // otherwise, can just use the other individual calls.\n    const shouldAttempt = ['fees', 'gas'].some((parameter) =>\n      parameters.includes(parameter as PrepareTransactionRequestParameterType),\n    )\n    if (!shouldAttempt) return false\n\n    // Check if `eth_fillTransaction` needs to be called.\n    if (parameters.includes('chainId') && typeof request.chainId !== 'number')\n      return true\n    if (parameters.includes('nonce') && typeof nonce !== 'number') return true\n    if (\n      parameters.includes('fees') &&\n      typeof request.gasPrice !== 'bigint' &&\n      (typeof request.maxFeePerGas !== 'bigint' ||\n        typeof (request as any).maxPriorityFeePerGas !== 'bigint')\n    )\n      return true\n    if (parameters.includes('gas') && typeof request.gas !== 'bigint')\n      return true\n    return false\n  })()\n\n  const fillResult = attemptFill\n    ? await getAction(\n        client,\n        fillTransaction,\n        'fillTransaction',\n      )({ ...request, nonce } as FillTransactionParameters)\n        .then((result) => {\n          const {\n            chainId,\n            from,\n            gas,\n            gasPrice,\n            nonce,\n            maxFeePerBlobGas,\n            maxFeePerGas,\n            maxPriorityFeePerGas,\n            type,\n            ...rest\n          } = result.transaction\n          supportsFillTransaction.set(client.uid, true)\n          return {\n            ...request,\n            ...(from ? { from } : {}),\n            ...(type && !request.type ? { type } : {}),\n            ...(typeof chainId !== 'undefined' ? { chainId } : {}),\n            ...(typeof gas !== 'undefined' ? { gas } : {}),\n            ...(typeof gasPrice !== 'undefined' ? { gasPrice } : {}),\n            ...(typeof nonce !== 'undefined' ? { nonce } : {}),\n            ...(typeof maxFeePerBlobGas !== 'undefined' &&\n            request.type !== 'legacy' &&\n            request.type !== 'eip2930'\n              ? { maxFeePerBlobGas }\n              : {}),\n            ...(typeof maxFeePerGas !== 'undefined' &&\n            request.type !== 'legacy' &&\n            request.type !== 'eip2930'\n              ? { maxFeePerGas }\n              : {}),\n            ...(typeof maxPriorityFeePerGas !== 'undefined' &&\n            request.type !== 'legacy' &&\n            request.type !== 'eip2930'\n              ? { maxPriorityFeePerGas }\n              : {}),\n            ...('nonceKey' in rest && typeof rest.nonceKey !== 'undefined'\n              ? { nonceKey: rest.nonceKey }\n              : {}),\n            ...('keyAuthorization' in rest &&\n            typeof rest.keyAuthorization !== 'undefined' &&\n            rest.keyAuthorization !== null &&\n            !('keyAuthorization' in request)\n              ? { keyAuthorization: rest.keyAuthorization }\n              : {}),\n            ...('feePayerSignature' in rest &&\n            typeof rest.feePayerSignature !== 'undefined' &&\n            rest.feePayerSignature !== null\n              ? { feePayerSignature: rest.feePayerSignature }\n              : {}),\n            ...(result.capabilities\n              ? { _capabilities: result.capabilities }\n              : {}),\n          }\n        })\n        .catch((e) => {\n          const error = e as FillTransactionErrorType\n\n          if (error.name !== 'TransactionExecutionError') return request\n\n          const executionReverted = error.walk?.((e) => {\n            const error = e as BaseError\n            return error.name === 'ExecutionRevertedError'\n          })\n          if (executionReverted) throw e\n\n          const unsupported = error.walk?.((e) => {\n            const error = e as BaseError\n            return (\n              error.name === 'MethodNotFoundRpcError' ||\n              error.name === 'MethodNotSupportedRpcError' ||\n              error.message?.includes('eth_fillTransaction is not available')\n            )\n          })\n          if (unsupported) supportsFillTransaction.set(client.uid, false)\n\n          return request\n        })\n    : request\n\n  nonce ??= fillResult.nonce\n\n  request = {\n    ...(fillResult as any),\n    ...(account ? { from: account?.address } : {}),\n    ...(nonce ? { nonce } : {}),\n  }\n  const { blobs, gas, kzg, type } = request\n\n  if (\n    prepareTransactionRequest?.fn &&\n    prepareTransactionRequest.runAt?.includes('beforeFillParameters')\n  ) {\n    request = await prepareTransactionRequest.fn(\n      { ...request, chain },\n      {\n        phase: 'beforeFillParameters',\n      },\n    )\n  }\n\n  let block: Block | undefined\n  async function getBlock(): Promise<Block> {\n    if (block) return block\n    block = await getAction(\n      client,\n      getBlock_,\n      'getBlock',\n    )({ blockTag: 'latest' })\n    return block\n  }\n\n  if (\n    parameters.includes('nonce') &&\n    typeof nonce === 'undefined' &&\n    account &&\n    !nonceManager\n  )\n    request.nonce = await getAction(\n      client,\n      getTransactionCount,\n      'getTransactionCount',\n    )({\n      address: account.address,\n      blockTag: 'pending',\n    })\n\n  if (\n    (parameters.includes('blobVersionedHashes') ||\n      parameters.includes('sidecars')) &&\n    blobs &&\n    kzg\n  ) {\n    const commitments = blobsToCommitments({ blobs, kzg })\n\n    if (parameters.includes('blobVersionedHashes')) {\n      const versionedHashes = commitmentsToVersionedHashes({\n        commitments,\n        to: 'hex',\n      })\n      request.blobVersionedHashes = versionedHashes\n    }\n    if (parameters.includes('sidecars')) {\n      const proofs = blobsToProofs({ blobs, commitments, kzg })\n      const sidecars = toBlobSidecars({\n        blobs,\n        commitments,\n        proofs,\n        to: 'hex',\n      })\n      request.sidecars = sidecars\n    }\n  }\n\n  if (parameters.includes('chainId')) request.chainId = await getChainId()\n\n  if (\n    (parameters.includes('fees') || parameters.includes('type')) &&\n    typeof type === 'undefined'\n  ) {\n    try {\n      request.type = getTransactionType(\n        request as TransactionSerializable,\n      ) as any\n    } catch {\n      let isEip1559Network = eip1559NetworkCache.get(client.uid)\n      if (typeof isEip1559Network === 'undefined') {\n        const block = await getBlock()\n        isEip1559Network = typeof block?.baseFeePerGas === 'bigint'\n        eip1559NetworkCache.set(client.uid, isEip1559Network)\n      }\n      request.type = isEip1559Network ? 'eip1559' : 'legacy'\n    }\n  }\n\n  if (parameters.includes('fees')) {\n    // TODO(4844): derive blob base fees once https://github.com/ethereum/execution-apis/pull/486 is merged.\n\n    if (request.type !== 'legacy' && request.type !== 'eip2930') {\n      // EIP-1559 fees\n      if (\n        typeof request.maxFeePerGas === 'undefined' ||\n        typeof request.maxPriorityFeePerGas === 'undefined'\n      ) {\n        const block = await getBlock()\n        const { maxFeePerGas, maxPriorityFeePerGas } =\n          await internal_estimateFeesPerGas(client, {\n            block: block as Block,\n            chain,\n            request: request as PrepareTransactionRequestParameters,\n          })\n\n        if (\n          typeof request.maxPriorityFeePerGas === 'undefined' &&\n          request.maxFeePerGas &&\n          request.maxFeePerGas < maxPriorityFeePerGas\n        )\n          throw new MaxFeePerGasTooLowError({\n            maxPriorityFeePerGas,\n          })\n\n        request.maxPriorityFeePerGas = maxPriorityFeePerGas\n        request.maxFeePerGas = maxFeePerGas\n      }\n    } else {\n      // Legacy fees\n      if (\n        typeof request.maxFeePerGas !== 'undefined' ||\n        typeof request.maxPriorityFeePerGas !== 'undefined'\n      )\n        throw new Eip1559FeesNotSupportedError()\n\n      if (typeof request.gasPrice === 'undefined') {\n        const block = await getBlock()\n        const { gasPrice: gasPrice_ } = await internal_estimateFeesPerGas(\n          client,\n          {\n            block: block as Block,\n            chain,\n            request: request as PrepareTransactionRequestParameters,\n            type: 'legacy',\n          },\n        )\n        request.gasPrice = gasPrice_\n      }\n    }\n  }\n\n  if (parameters.includes('gas') && typeof gas === 'undefined')\n    request.gas = await getAction(\n      client,\n      estimateGas,\n      'estimateGas',\n    )({\n      ...request,\n      account,\n      prepare: account?.type === 'local' ? [] : ['blobVersionedHashes'],\n    } as EstimateGasParameters)\n\n  if (\n    prepareTransactionRequest?.fn &&\n    prepareTransactionRequest.runAt?.includes('afterFillParameters')\n  )\n    request = await prepareTransactionRequest.fn(\n      { ...request, chain },\n      {\n        phase: 'afterFillParameters',\n      },\n    )\n\n  assertRequest(request as AssertRequestParameters)\n\n  delete request.parameters\n\n  return request as any\n}\n", "import { formatGwei } from '../utils/unit/formatGwei.js'\nimport { BaseError } from './base.js'\n\nexport type BaseFeeScalarErrorType = BaseFeeScalarError & {\n  name: 'BaseFeeScalarError'\n}\nexport class BaseFeeScalarError extends BaseError {\n  constructor() {\n    super('`baseFeeMultiplier` must be greater than 1.', {\n      name: 'BaseFeeScalarError',\n    })\n  }\n}\n\nexport type Eip1559FeesNotSupportedErrorType = Eip1559FeesNotSupportedError & {\n  name: 'Eip1559FeesNotSupportedError'\n}\nexport class Eip1559FeesNotSupportedError extends BaseError {\n  constructor() {\n    super('Chain does not support EIP-1559 fees.', {\n      name: 'Eip1559FeesNotSupportedError',\n    })\n  }\n}\n\nexport type MaxFeePerGasTooLowErrorType = MaxFeePerGasTooLowError & {\n  name: 'MaxFeePerGasTooLowError'\n}\nexport class MaxFeePerGasTooLowError extends BaseError {\n  constructor({ maxPriorityFeePerGas }: { maxPriorityFeePerGas: bigint }) {\n    super(\n      `\\`maxFeePerGas\\` cannot be less than the \\`maxPriorityFeePerGas\\` (${formatGwei(\n        maxPriorityFeePerGas,\n      )} gwei).`,\n      { name: 'MaxFeePerGasTooLowError' },\n    )\n  }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  Eip1559FeesNotSupportedError,\n  type Eip1559FeesNotSupportedErrorType,\n} from '../../errors/fee.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type {\n  Chain,\n  ChainFeesFnParameters,\n  GetChainParameter,\n} from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type HexToBigIntErrorType,\n  hexToBigInt,\n} from '../../utils/encoding/fromHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { PrepareTransactionRequestParameters } from '../wallet/prepareTransactionRequest.js'\nimport { type GetBlockErrorType, getBlock } from './getBlock.js'\nimport { type GetGasPriceErrorType, getGasPrice } from './getGasPrice.js'\n\nexport type EstimateMaxPriorityFeePerGasParameters<\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n> = GetChainParameter<chain, chainOverride>\n\nexport type EstimateMaxPriorityFeePerGasReturnType = bigint\n\nexport type EstimateMaxPriorityFeePerGasErrorType =\n  | GetBlockErrorType\n  | HexToBigIntErrorType\n  | RequestErrorType\n  | GetBlockErrorType\n  | GetGasPriceErrorType\n  | Eip1559FeesNotSupportedErrorType\n  | ErrorType\n\n/**\n * Returns an estimate for the max priority fee per gas (in wei) for a\n * transaction to be likely included in the next block.\n * Defaults to [`chain.fees.defaultPriorityFee`](/docs/clients/chains#fees-defaultpriorityfee) if set.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateMaxPriorityFeePerGas\n *\n * @param client - Client to use\n * @returns An estimate (in wei) for the max priority fee per gas. {@link EstimateMaxPriorityFeePerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateMaxPriorityFeePerGas } from 'viem/actions'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const maxPriorityFeePerGas = await estimateMaxPriorityFeePerGas(client)\n * // 10000000n\n */\nexport async function estimateMaxPriorityFeePerGas<\n  chain extends Chain | undefined,\n  chainOverride extends Chain | undefined,\n>(\n  client: Client<Transport, chain>,\n  args?:\n    | EstimateMaxPriorityFeePerGasParameters<chain, chainOverride>\n    | undefined,\n): Promise<EstimateMaxPriorityFeePerGasReturnType> {\n  return internal_estimateMaxPriorityFeePerGas(client, args as any)\n}\n\nexport async function internal_estimateMaxPriorityFeePerGas<\n  chain extends Chain | undefined,\n  chainOverride extends Chain | undefined,\n>(\n  client: Client<Transport, chain>,\n  args: EstimateMaxPriorityFeePerGasParameters<chain, chainOverride> & {\n    block?: Block | undefined\n    request?:\n      | PrepareTransactionRequestParameters<\n          chain,\n          Account | undefined,\n          chainOverride\n        >\n      | undefined\n  },\n): Promise<EstimateMaxPriorityFeePerGasReturnType> {\n  const { block: block_, chain = client.chain, request } = args || {}\n\n  try {\n    const maxPriorityFeePerGas =\n      chain?.fees?.maxPriorityFeePerGas ?? chain?.fees?.defaultPriorityFee\n\n    if (typeof maxPriorityFeePerGas === 'function') {\n      const block =\n        block_ || (await getAction(client, getBlock, 'getBlock')({}))\n      const maxPriorityFeePerGas_ = await maxPriorityFeePerGas({\n        block,\n        client,\n        request,\n      } as ChainFeesFnParameters)\n      if (maxPriorityFeePerGas_ === null) throw new Error()\n      return maxPriorityFeePerGas_\n    }\n\n    if (typeof maxPriorityFeePerGas !== 'undefined') return maxPriorityFeePerGas\n\n    const maxPriorityFeePerGasHex = await client.request({\n      method: 'eth_maxPriorityFeePerGas',\n    })\n    return hexToBigInt(maxPriorityFeePerGasHex)\n  } catch {\n    // If the RPC Provider does not support `eth_maxPriorityFeePerGas`\n    // fall back to calculating it manually via `gasPrice - baseFeePerGas`.\n    // See: https://github.com/ethereum/pm/issues/328#:~:text=eth_maxPriorityFeePerGas%20after%20London%20will%20effectively%20return%20eth_gasPrice%20%2D%20baseFee\n    const [block, gasPrice] = await Promise.all([\n      block_\n        ? Promise.resolve(block_)\n        : getAction(client, getBlock, 'getBlock')({}),\n      getAction(client, getGasPrice, 'getGasPrice')({}),\n    ])\n\n    if (typeof block.baseFeePerGas !== 'bigint')\n      throw new Eip1559FeesNotSupportedError()\n\n    const maxPriorityFeePerGas = gasPrice - block.baseFeePerGas\n\n    if (maxPriorityFeePerGas < 0n) return 0n\n    return maxPriorityFeePerGas\n  }\n}\n", "import type { Hash } from '../types/misc.js'\n\nimport { BaseError } from './base.js'\n\nexport type BlockNotFoundErrorType = BlockNotFoundError & {\n  name: 'BlockNotFoundError'\n}\nexport class BlockNotFoundError extends BaseError {\n  constructor({\n    blockHash,\n    blockNumber,\n  }: {\n    blockHash?: Hash | undefined\n    blockNumber?: bigint | undefined\n  }) {\n    let identifier = 'Block'\n    if (blockHash) identifier = `Block at hash \"${blockHash}\"`\n    if (blockNumber) identifier = `Block at number \"${blockNumber}\"`\n    super(`${identifier} could not be found.`, { name: 'BlockNotFoundError' })\n  }\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  BlockNotFoundError,\n  type BlockNotFoundErrorType,\n} from '../../errors/block.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RpcBlock } from '../../types/rpc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type FormattedBlock,\n  formatBlock,\n} from '../../utils/formatters/block.js'\n\nexport type GetBlockParameters<\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n> = {\n  /** Whether or not to include transaction data in the response. */\n  includeTransactions?: includeTransactions | undefined\n} & (\n  | {\n      /** Hash of the block. */\n      blockHash?: Hash | undefined\n      blockNumber?: undefined\n      blockTag?: undefined\n    }\n  | {\n      blockHash?: undefined\n      /** The block number. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n  | {\n      blockHash?: undefined\n      blockNumber?: undefined\n      /**\n       * The block tag.\n       * @default 'latest'\n       */\n      blockTag?: blockTag | BlockTag | undefined\n    }\n)\n\nexport type GetBlockReturnType<\n  chain extends Chain | undefined = undefined,\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n> = Prettify<FormattedBlock<chain, includeTransactions, blockTag>>\n\nexport type GetBlockErrorType =\n  | BlockNotFoundErrorType\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns information about a block at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlock\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods:\n *   - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) for `blockNumber` & `blockTag`.\n *   - Calls [`eth_getBlockByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbyhash) for `blockHash`.\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockParameters}\n * @returns Information about the block. {@link GetBlockReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlock } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const block = await getBlock(client)\n */\nexport async function getBlock<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n>(\n  client: Client<Transport, chain, account>,\n  {\n    blockHash,\n    blockNumber,\n    blockTag = client.experimental_blockTag ?? 'latest',\n    includeTransactions: includeTransactions_,\n  }: GetBlockParameters<includeTransactions, blockTag> = {},\n): Promise<GetBlockReturnType<chain, includeTransactions, blockTag>> {\n  const includeTransactions = includeTransactions_ ?? false\n\n  const blockNumberHex =\n    blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n  let block: RpcBlock | null = null\n  if (blockHash) {\n    block = await client.request(\n      {\n        method: 'eth_getBlockByHash',\n        params: [blockHash, includeTransactions],\n      },\n      { dedupe: true },\n    )\n  } else {\n    block = await client.request(\n      {\n        method: 'eth_getBlockByNumber',\n        params: [blockNumberHex || blockTag, includeTransactions],\n      },\n      { dedupe: Boolean(blockNumberHex) },\n    )\n  }\n\n  if (!block) throw new BlockNotFoundError({ blockHash, blockNumber })\n\n  const format = client.chain?.formatters?.block?.format || formatBlock\n  return format(block, 'getBlock')\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Block, BlockTag } from '../../types/block.js'\nimport type {\n  Chain,\n  ExtractChainFormatterExclude,\n  ExtractChainFormatterReturnType,\n} from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RpcBlock } from '../../types/rpc.js'\nimport type { ExactPartial, Prettify } from '../../types/utils.js'\n\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\nimport { type FormattedTransaction, formatTransaction } from './transaction.js'\n\ntype BlockPendingDependencies = 'hash' | 'logsBloom' | 'nonce' | 'number'\n\nexport type FormattedBlock<\n  chain extends Chain | undefined = undefined,\n  includeTransactions extends boolean = boolean,\n  blockTag extends BlockTag = BlockTag,\n  _FormatterReturnType = ExtractChainFormatterReturnType<\n    chain,\n    'block',\n    Block<bigint, includeTransactions>\n  >,\n  _ExcludedPendingDependencies extends string = BlockPendingDependencies &\n    ExtractChainFormatterExclude<chain, 'block'>,\n  _Formatted = Omit<_FormatterReturnType, BlockPendingDependencies> & {\n    [_key in _ExcludedPendingDependencies]: never\n  } & Pick<\n      Block<bigint, includeTransactions, blockTag>,\n      BlockPendingDependencies\n    >,\n  _Transactions = includeTransactions extends true\n    ? Prettify<FormattedTransaction<chain, blockTag>>[]\n    : Hash[],\n> = Omit<_Formatted, 'transactions'> & {\n  transactions: _Transactions\n}\n\nexport type FormatBlockErrorType = ErrorType\n\nexport function formatBlock(\n  block: ExactPartial<RpcBlock>,\n  _?: string | undefined,\n) {\n  const transactions = (block.transactions ?? []).map((transaction) => {\n    if (typeof transaction === 'string') return transaction\n    return formatTransaction(transaction)\n  })\n  return {\n    ...block,\n    baseFeePerGas: block.baseFeePerGas ? BigInt(block.baseFeePerGas) : null,\n    blobGasUsed: block.blobGasUsed ? BigInt(block.blobGasUsed) : undefined,\n    difficulty: block.difficulty ? BigInt(block.difficulty) : undefined,\n    excessBlobGas: block.excessBlobGas\n      ? BigInt(block.excessBlobGas)\n      : undefined,\n    gasLimit: block.gasLimit ? BigInt(block.gasLimit) : undefined,\n    gasUsed: block.gasUsed ? BigInt(block.gasUsed) : undefined,\n    hash: block.hash ? block.hash : null,\n    logsBloom: block.logsBloom ? block.logsBloom : null,\n    nonce: block.nonce ? block.nonce : null,\n    number: block.number ? BigInt(block.number) : null,\n    size: block.size ? BigInt(block.size) : undefined,\n    timestamp: block.timestamp ? BigInt(block.timestamp) : undefined,\n    transactions,\n    totalDifficulty: block.totalDifficulty\n      ? BigInt(block.totalDifficulty)\n      : null,\n  } as Block\n}\n\nexport type DefineBlockErrorType = DefineFormatterErrorType | ErrorType\n\nexport const defineBlock = /*#__PURE__*/ defineFormatter('block', formatBlock)\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { SignedAuthorizationList } from '../../types/authorization.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type {\n  Chain,\n  ExtractChainFormatterExclude,\n  ExtractChainFormatterReturnType,\n} from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RpcAuthorizationList, RpcTransaction } from '../../types/rpc.js'\nimport type { Transaction, TransactionType } from '../../types/transaction.js'\nimport type { ExactPartial, UnionLooseOmit } from '../../types/utils.js'\nimport { hexToNumber } from '../encoding/fromHex.js'\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\n\ntype TransactionPendingDependencies =\n  | 'blockHash'\n  | 'blockNumber'\n  | 'transactionIndex'\n\nexport type FormattedTransaction<\n  chain extends Chain | undefined = undefined,\n  blockTag extends BlockTag = BlockTag,\n  _FormatterReturnType = ExtractChainFormatterReturnType<\n    chain,\n    'transaction',\n    Transaction\n  >,\n  _ExcludedPendingDependencies extends string = TransactionPendingDependencies &\n    ExtractChainFormatterExclude<chain, 'transaction'>,\n> = UnionLooseOmit<_FormatterReturnType, TransactionPendingDependencies> & {\n  [_K in _ExcludedPendingDependencies]: never\n} & Pick<\n    Transaction<bigint, number, blockTag extends 'pending' ? true : false>,\n    TransactionPendingDependencies\n  >\n\nexport const transactionType = {\n  '0x0': 'legacy',\n  '0x1': 'eip2930',\n  '0x2': 'eip1559',\n  '0x3': 'eip4844',\n  '0x4': 'eip7702',\n} as const satisfies Record<Hex, TransactionType>\n\nexport type FormatTransactionErrorType = ErrorType\n\nexport function formatTransaction(\n  transaction: ExactPartial<RpcTransaction>,\n  _?: string | undefined,\n) {\n  const transaction_ = {\n    ...transaction,\n    blockHash: transaction.blockHash ? transaction.blockHash : null,\n    blockNumber: transaction.blockNumber\n      ? BigInt(transaction.blockNumber)\n      : null,\n    chainId: transaction.chainId ? hexToNumber(transaction.chainId) : undefined,\n    gas: transaction.gas ? BigInt(transaction.gas) : undefined,\n    gasPrice: transaction.gasPrice ? BigInt(transaction.gasPrice) : undefined,\n    maxFeePerBlobGas: transaction.maxFeePerBlobGas\n      ? BigInt(transaction.maxFeePerBlobGas)\n      : undefined,\n    maxFeePerGas: transaction.maxFeePerGas\n      ? BigInt(transaction.maxFeePerGas)\n      : undefined,\n    maxPriorityFeePerGas: transaction.maxPriorityFeePerGas\n      ? BigInt(transaction.maxPriorityFeePerGas)\n      : undefined,\n    nonce: transaction.nonce ? hexToNumber(transaction.nonce) : undefined,\n    to: transaction.to ? transaction.to : null,\n    transactionIndex: transaction.transactionIndex\n      ? Number(transaction.transactionIndex)\n      : null,\n    type: transaction.type\n      ? (transactionType as any)[transaction.type]\n      : undefined,\n    typeHex: transaction.type ? transaction.type : undefined,\n    value: transaction.value ? BigInt(transaction.value) : undefined,\n    v: transaction.v ? BigInt(transaction.v) : undefined,\n  } as Transaction\n\n  if (transaction.authorizationList)\n    transaction_.authorizationList = formatAuthorizationList(\n      transaction.authorizationList,\n    )\n\n  transaction_.yParity = (() => {\n    // If `yParity` is provided, we will use it.\n    if (transaction.yParity) return Number(transaction.yParity)\n\n    // If no `yParity` provided, try derive from `v`.\n    if (typeof transaction_.v === 'bigint') {\n      if (transaction_.v === 0n || transaction_.v === 27n) return 0\n      if (transaction_.v === 1n || transaction_.v === 28n) return 1\n      if (transaction_.v >= 35n) return transaction_.v % 2n === 0n ? 1 : 0\n    }\n\n    return undefined\n  })()\n\n  if (transaction_.type === 'legacy') {\n    delete transaction_.accessList\n    delete transaction_.maxFeePerBlobGas\n    delete transaction_.maxFeePerGas\n    delete transaction_.maxPriorityFeePerGas\n    delete transaction_.yParity\n  }\n  if (transaction_.type === 'eip2930') {\n    delete transaction_.maxFeePerBlobGas\n    delete transaction_.maxFeePerGas\n    delete transaction_.maxPriorityFeePerGas\n  }\n  if (transaction_.type === 'eip1559') delete transaction_.maxFeePerBlobGas\n\n  return transaction_\n}\n\nexport type DefineTransactionErrorType = DefineFormatterErrorType | ErrorType\n\nexport const defineTransaction = /*#__PURE__*/ defineFormatter(\n  'transaction',\n  formatTransaction,\n)\n\n//////////////////////////////////////////////////////////////////////////////\n\nfunction formatAuthorizationList(\n  authorizationList: RpcAuthorizationList,\n): SignedAuthorizationList {\n  return authorizationList.map((authorization) => ({\n    address: (authorization as any).address,\n    chainId: Number(authorization.chainId),\n    nonce: Number(authorization.nonce),\n    r: authorization.r,\n    s: authorization.s,\n    yParity: Number(authorization.yParity),\n  })) as SignedAuthorizationList\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type GetGasPriceReturnType = bigint\n\nexport type GetGasPriceErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns the current price of gas (in wei).\n *\n * - Docs: https://viem.sh/docs/actions/public/getGasPrice\n * - JSON-RPC Methods: [`eth_gasPrice`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gasprice)\n *\n * @param client - Client to use\n * @returns The gas price (in wei). {@link GetGasPriceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getGasPrice } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const gasPrice = await getGasPrice(client)\n */\nexport async function getGasPrice<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(client: Client<Transport, chain, account>): Promise<GetGasPriceReturnType> {\n  const gasPrice = await client.request({\n    method: 'eth_gasPrice',\n  })\n  return BigInt(gasPrice)\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  BaseFeeScalarError,\n  type BaseFeeScalarErrorType,\n  Eip1559FeesNotSupportedError,\n  type Eip1559FeesNotSupportedErrorType,\n} from '../../errors/fee.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type {\n  Chain,\n  ChainEstimateFeesPerGasFnParameters,\n  ChainFeesFnParameters,\n  GetChainParameter,\n} from '../../types/chain.js'\nimport type {\n  FeeValuesEIP1559,\n  FeeValuesLegacy,\n  FeeValuesType,\n} from '../../types/fee.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { PrepareTransactionRequestParameters } from '../wallet/prepareTransactionRequest.js'\nimport {\n  type EstimateMaxPriorityFeePerGasErrorType,\n  internal_estimateMaxPriorityFeePerGas,\n} from './estimateMaxPriorityFeePerGas.js'\nimport { getBlock } from './getBlock.js'\nimport { type GetGasPriceErrorType, getGasPrice } from './getGasPrice.js'\n\nexport type EstimateFeesPerGasParameters<\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  type extends FeeValuesType = FeeValuesType,\n> = {\n  /**\n   * The type of fee values to return.\n   *\n   * - `legacy`: Returns the legacy gas price.\n   * - `eip1559`: Returns the max fee per gas and max priority fee per gas.\n   *\n   * @default 'eip1559'\n   */\n  type?: type | FeeValuesType | undefined\n} & GetChainParameter<chain, chainOverride>\n\nexport type EstimateFeesPerGasReturnType<\n  type extends FeeValuesType = FeeValuesType,\n> =\n  | (type extends 'legacy' ? FeeValuesLegacy : never)\n  | (type extends 'eip1559' ? FeeValuesEIP1559 : never)\n\nexport type EstimateFeesPerGasErrorType =\n  | BaseFeeScalarErrorType\n  | EstimateMaxPriorityFeePerGasErrorType\n  | GetGasPriceErrorType\n  | Eip1559FeesNotSupportedErrorType\n  | ErrorType\n\n/**\n * Returns an estimate for the fees per gas (in wei) for a\n * transaction to be likely included in the next block.\n * Defaults to [`chain.fees.estimateFeesPerGas`](/docs/clients/chains#fees-estimatefeespergas) if set.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateFeesPerGas\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateFeesPerGasParameters}\n * @returns An estimate (in wei) for the fees per gas. {@link EstimateFeesPerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateFeesPerGas } from 'viem/actions'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const maxPriorityFeePerGas = await estimateFeesPerGas(client)\n * // { maxFeePerGas: ..., maxPriorityFeePerGas: ... }\n */\nexport async function estimateFeesPerGas<\n  chain extends Chain | undefined,\n  chainOverride extends Chain | undefined,\n  type extends FeeValuesType = 'eip1559',\n>(\n  client: Client<Transport, chain>,\n  args?: EstimateFeesPerGasParameters<chain, chainOverride, type> | undefined,\n): Promise<EstimateFeesPerGasReturnType<type>> {\n  return internal_estimateFeesPerGas(client, args as any)\n}\n\nexport async function internal_estimateFeesPerGas<\n  chain extends Chain | undefined,\n  chainOverride extends Chain | undefined,\n  type extends FeeValuesType = 'eip1559',\n>(\n  client: Client<Transport, chain>,\n  args: EstimateFeesPerGasParameters<chain, chainOverride, type> & {\n    block?: Block | undefined\n    request?: PrepareTransactionRequestParameters<Chain, Account> | undefined\n  },\n): Promise<EstimateFeesPerGasReturnType<type>> {\n  const {\n    block: block_,\n    chain = client.chain,\n    request,\n    type = 'eip1559',\n  } = args || {}\n\n  const baseFeeMultiplier = await (async () => {\n    if (typeof chain?.fees?.baseFeeMultiplier === 'function')\n      return chain.fees.baseFeeMultiplier({\n        block: block_ as Block,\n        client,\n        request,\n      } as ChainFeesFnParameters)\n    return chain?.fees?.baseFeeMultiplier ?? 1.2\n  })()\n  if (baseFeeMultiplier < 1) throw new BaseFeeScalarError()\n\n  const decimals = baseFeeMultiplier.toString().split('.')[1]?.length ?? 0\n  const denominator = 10 ** decimals\n  const multiply = (base: bigint) =>\n    (base * BigInt(Math.ceil(baseFeeMultiplier * denominator))) /\n    BigInt(denominator)\n\n  const block = block_\n    ? block_\n    : await getAction(client, getBlock, 'getBlock')({})\n\n  if (typeof chain?.fees?.estimateFeesPerGas === 'function') {\n    const fees = (await chain.fees.estimateFeesPerGas({\n      block: block_ as Block,\n      client,\n      multiply,\n      request,\n      type,\n    } as ChainEstimateFeesPerGasFnParameters)) as unknown as EstimateFeesPerGasReturnType<type>\n\n    if (fees !== null) return fees\n  }\n\n  if (type === 'eip1559') {\n    if (typeof block.baseFeePerGas !== 'bigint')\n      throw new Eip1559FeesNotSupportedError()\n\n    const maxPriorityFeePerGas =\n      typeof request?.maxPriorityFeePerGas === 'bigint'\n        ? request.maxPriorityFeePerGas\n        : await internal_estimateMaxPriorityFeePerGas(\n            client as Client<Transport, Chain>,\n            {\n              block: block as Block,\n              chain,\n              request,\n            },\n          )\n\n    const baseFeePerGas = multiply(block.baseFeePerGas)\n    const maxFeePerGas =\n      request?.maxFeePerGas ?? baseFeePerGas + maxPriorityFeePerGas\n\n    return {\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n    } as EstimateFeesPerGasReturnType<type>\n  }\n\n  const gasPrice =\n    request?.gasPrice ??\n    multiply(await getAction(client, getGasPrice, 'getGasPrice')({}))\n  return {\n    gasPrice,\n  } as EstimateFeesPerGasReturnType<type>\n}\n", "import type { Address } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type HexToNumberErrorType,\n  hexToNumber,\n} from '../../utils/encoding/fromHex.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetTransactionCountParameters = {\n  /** The account address. */\n  address: Address\n} & (\n  | {\n      /** The block number. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n  | {\n      blockNumber?: undefined\n      /** The block tag. Defaults to 'latest'. */\n      blockTag?: BlockTag | undefined\n    }\n)\nexport type GetTransactionCountReturnType = number\n\nexport type GetTransactionCountErrorType =\n  | RequestErrorType\n  | NumberToHexErrorType\n  | HexToNumberErrorType\n  | ErrorType\n\n/**\n * Returns the number of [Transactions](https://viem.sh/docs/glossary/terms#transaction) an Account has sent.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionCount\n * - JSON-RPC Methods: [`eth_getTransactionCount`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactioncount)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionCountParameters}\n * @returns The number of transactions an account has sent. {@link GetTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionCount } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const transactionCount = await getTransactionCount(client, {\n *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function getTransactionCount<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: Client<Transport, chain, account>,\n  { address, blockTag = 'latest', blockNumber }: GetTransactionCountParameters,\n): Promise<GetTransactionCountReturnType> {\n  const count = await client.request(\n    {\n      method: 'eth_getTransactionCount',\n      params: [\n        address,\n        typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : blockTag,\n      ],\n    },\n    {\n      dedupe: Boolean(blockNumber),\n    },\n  )\n  return hexToNumber(count)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Kzg } from '../../types/kzg.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type BlobsToCommitmentsParameters<\n  blobs extends readonly ByteArray[] | readonly Hex[] =\n    | readonly ByteArray[]\n    | readonly Hex[],\n  to extends To | undefined = undefined,\n> = {\n  /** Blobs to transform into commitments. */\n  blobs: blobs | readonly ByteArray[] | readonly Hex[]\n  /** KZG implementation. */\n  kzg: Pick<Kzg, 'blobToKzgCommitment'>\n  /** Return type. */\n  to?: to | To | undefined\n}\n\nexport type BlobsToCommitmentsReturnType<to extends To> =\n  | (to extends 'bytes' ? readonly ByteArray[] : never)\n  | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type BlobsToCommitmentsErrorType =\n  | HexToBytesErrorType\n  | BytesToHexErrorType\n  | ErrorType\n\n/**\n * Compute commitments from a list of blobs.\n *\n * @example\n * ```ts\n * import { blobsToCommitments, toBlobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * ```\n */\nexport function blobsToCommitments<\n  const blobs extends readonly ByteArray[] | readonly Hex[],\n  to extends To =\n    | (blobs extends readonly Hex[] ? 'hex' : never)\n    | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(\n  parameters: BlobsToCommitmentsParameters<blobs, to>,\n): BlobsToCommitmentsReturnType<to> {\n  const { kzg } = parameters\n\n  const to =\n    parameters.to ?? (typeof parameters.blobs[0] === 'string' ? 'hex' : 'bytes')\n  const blobs = (\n    typeof parameters.blobs[0] === 'string'\n      ? parameters.blobs.map((x) => hexToBytes(x as any))\n      : parameters.blobs\n  ) as ByteArray[]\n\n  const commitments: ByteArray[] = []\n  for (const blob of blobs)\n    commitments.push(Uint8Array.from(kzg.blobToKzgCommitment(blob)))\n\n  return (to === 'bytes'\n    ? commitments\n    : commitments.map((x) =>\n        bytesToHex(x),\n      )) as {} as BlobsToCommitmentsReturnType<to>\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Kzg } from '../../types/kzg.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type blobsToProofsParameters<\n  blobs extends readonly ByteArray[] | readonly Hex[],\n  commitments extends readonly ByteArray[] | readonly Hex[],\n  to extends To =\n    | (blobs extends readonly Hex[] ? 'hex' : never)\n    | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n  ///\n  _blobsType =\n    | (blobs extends readonly Hex[] ? readonly Hex[] : never)\n    | (blobs extends readonly ByteArray[] ? readonly ByteArray[] : never),\n> = {\n  /** Blobs to transform into proofs. */\n  blobs: blobs\n  /** Commitments for the blobs. */\n  commitments: commitments &\n    (commitments extends _blobsType\n      ? {}\n      : `commitments must be the same type as blobs`)\n  /** KZG implementation. */\n  kzg: Pick<Kzg, 'computeBlobKzgProof'>\n  /** Return type. */\n  to?: to | To | undefined\n}\n\nexport type blobsToProofsReturnType<to extends To> =\n  | (to extends 'bytes' ? ByteArray[] : never)\n  | (to extends 'hex' ? Hex[] : never)\n\nexport type blobsToProofsErrorType =\n  | BytesToHexErrorType\n  | HexToBytesErrorType\n  | ErrorType\n\n/**\n * Compute the proofs for a list of blobs and their commitments.\n *\n * @example\n * ```ts\n * import {\n *   blobsToCommitments,\n *   toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const proofs = blobsToProofs({ blobs, commitments, kzg })\n * ```\n */\nexport function blobsToProofs<\n  const blobs extends readonly ByteArray[] | readonly Hex[],\n  const commitments extends readonly ByteArray[] | readonly Hex[],\n  to extends To =\n    | (blobs extends readonly Hex[] ? 'hex' : never)\n    | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(\n  parameters: blobsToProofsParameters<blobs, commitments, to>,\n): blobsToProofsReturnType<to> {\n  const { kzg } = parameters\n\n  const to =\n    parameters.to ?? (typeof parameters.blobs[0] === 'string' ? 'hex' : 'bytes')\n\n  const blobs = (\n    typeof parameters.blobs[0] === 'string'\n      ? parameters.blobs.map((x) => hexToBytes(x as any))\n      : parameters.blobs\n  ) as ByteArray[]\n  const commitments = (\n    typeof parameters.commitments[0] === 'string'\n      ? parameters.commitments.map((x) => hexToBytes(x as any))\n      : parameters.commitments\n  ) as ByteArray[]\n\n  const proofs: ByteArray[] = []\n  for (let i = 0; i < blobs.length; i++) {\n    const blob = blobs[i]\n    const commitment = commitments[i]\n    proofs.push(Uint8Array.from(kzg.computeBlobKzgProof(blob, commitment)))\n  }\n\n  return (to === 'bytes'\n    ? proofs\n    : proofs.map((x) => bytesToHex(x))) as {} as blobsToProofsReturnType<to>\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { type Sha256ErrorType, sha256 } from '../hash/sha256.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type CommitmentToVersionedHashParameters<\n  commitment extends Uint8Array | Hex = Uint8Array | Hex,\n  to extends To | undefined = undefined,\n> = {\n  /** Commitment from blob. */\n  commitment: commitment | Uint8Array | Hex\n  /** Return type. */\n  to?: to | To | undefined\n  /** Version to tag onto the hash. */\n  version?: number | undefined\n}\n\nexport type CommitmentToVersionedHashReturnType<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type CommitmentToVersionedHashErrorType =\n  | Sha256ErrorType\n  | BytesToHexErrorType\n  | ErrorType\n\n/**\n * Transform a commitment to it's versioned hash.\n *\n * @example\n * ```ts\n * import {\n *   blobsToCommitments,\n *   commitmentToVersionedHash,\n *   toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const [commitment] = blobsToCommitments({ blobs, kzg })\n * const versionedHash = commitmentToVersionedHash({ commitment })\n * ```\n */\nexport function commitmentToVersionedHash<\n  const commitment extends Hex | ByteArray,\n  to extends To =\n    | (commitment extends Hex ? 'hex' : never)\n    | (commitment extends ByteArray ? 'bytes' : never),\n>(\n  parameters: CommitmentToVersionedHashParameters<commitment, to>,\n): CommitmentToVersionedHashReturnType<to> {\n  const { commitment, version = 1 } = parameters\n  const to = parameters.to ?? (typeof commitment === 'string' ? 'hex' : 'bytes')\n\n  const versionedHash = sha256(commitment, 'bytes')\n  versionedHash.set([version], 0)\n  return (\n    to === 'bytes' ? versionedHash : bytesToHex(versionedHash)\n  ) as CommitmentToVersionedHashReturnType<to>\n}\n", "/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nimport {\n  SHA224 as SHA224n,\n  sha224 as sha224n,\n  SHA256 as SHA256n,\n  sha256 as sha256n,\n} from './sha2.ts';\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA256: typeof SHA256n = SHA256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha256: typeof sha256n = sha256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA224: typeof SHA224n = SHA224n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha224: typeof sha224n = sha224n;\n", "import { sha256 as noble_sha256 } from '@noble/hashes/sha256'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type ToHexErrorType, toHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type Sha256Hash<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type Sha256ErrorType =\n  | IsHexErrorType\n  | ToBytesErrorType\n  | ToHexErrorType\n  | ErrorType\n\nexport function sha256<to extends To = 'hex'>(\n  value: Hex | ByteArray,\n  to_?: to | undefined,\n): Sha256Hash<to> {\n  const to = to_ || 'hex'\n  const bytes = noble_sha256(\n    isHex(value, { strict: false }) ? toBytes(value) : value,\n  )\n  if (to === 'bytes') return bytes as Sha256Hash<to>\n  return toHex(bytes) as Sha256Hash<to>\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n  type CommitmentToVersionedHashErrorType,\n  commitmentToVersionedHash,\n} from './commitmentToVersionedHash.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type CommitmentsToVersionedHashesParameters<\n  commitments extends readonly Uint8Array[] | readonly Hex[] =\n    | readonly Uint8Array[]\n    | readonly Hex[],\n  to extends To | undefined = undefined,\n> = {\n  /** Commitments from blobs. */\n  commitments: commitments | readonly Uint8Array[] | readonly Hex[]\n  /** Return type. */\n  to?: to | To | undefined\n  /** Version to tag onto the hashes. */\n  version?: number | undefined\n}\n\nexport type CommitmentsToVersionedHashesReturnType<to extends To> =\n  | (to extends 'bytes' ? readonly ByteArray[] : never)\n  | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type CommitmentsToVersionedHashesErrorType =\n  | CommitmentToVersionedHashErrorType\n  | ErrorType\n\n/**\n * Transform a list of commitments to their versioned hashes.\n *\n * @example\n * ```ts\n * import {\n *   blobsToCommitments,\n *   commitmentsToVersionedHashes,\n *   toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const versionedHashes = commitmentsToVersionedHashes({ commitments })\n * ```\n */\nexport function commitmentsToVersionedHashes<\n  const commitments extends readonly Uint8Array[] | readonly Hex[],\n  to extends To =\n    | (commitments extends readonly Hex[] ? 'hex' : never)\n    | (commitments extends readonly ByteArray[] ? 'bytes' : never),\n>(\n  parameters: CommitmentsToVersionedHashesParameters<commitments, to>,\n): CommitmentsToVersionedHashesReturnType<to> {\n  const { commitments, version } = parameters\n\n  const to =\n    parameters.to ?? (typeof commitments[0] === 'string' ? 'hex' : 'bytes')\n\n  const hashes: Uint8Array[] | Hex[] = []\n  for (const commitment of commitments) {\n    hashes.push(\n      commitmentToVersionedHash({\n        commitment,\n        to,\n        version,\n      }) as any,\n    )\n  }\n  return hashes as any\n}\n", "// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md#parameters\n\n/** Blob limit per transaction. */\nconst blobsPerTransaction = 6\n\n/** The number of bytes in a BLS scalar field element. */\nexport const bytesPerFieldElement = 32\n\n/** The number of field elements in a blob. */\nexport const fieldElementsPerBlob = 4096\n\n/** The number of bytes in a blob. */\nexport const bytesPerBlob = bytesPerFieldElement * fieldElementsPerBlob\n\n/** Blob bytes limit per transaction. */\nexport const maxBytesPerTransaction =\n  bytesPerBlob * blobsPerTransaction -\n  // terminator byte (0x80).\n  1 -\n  // zero byte (0x00) appended to each field element.\n  1 * fieldElementsPerBlob * blobsPerTransaction\n", "// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md#parameters\n\nexport const versionedHashVersionKzg = 1\n", "import { versionedHashVersionKzg } from '../constants/kzg.js'\nimport type { Hash } from '../types/misc.js'\n\nimport { BaseError } from './base.js'\n\nexport type BlobSizeTooLargeErrorType = BlobSizeTooLargeError & {\n  name: 'BlobSizeTooLargeError'\n}\nexport class BlobSizeTooLargeError extends BaseError {\n  constructor({ maxSize, size }: { maxSize: number; size: number }) {\n    super('Blob size is too large.', {\n      metaMessages: [`Max: ${maxSize} bytes`, `Given: ${size} bytes`],\n      name: 'BlobSizeTooLargeError',\n    })\n  }\n}\n\nexport type EmptyBlobErrorType = EmptyBlobError & {\n  name: 'EmptyBlobError'\n}\nexport class EmptyBlobError extends BaseError {\n  constructor() {\n    super('Blob data must not be empty.', { name: 'EmptyBlobError' })\n  }\n}\n\nexport type InvalidVersionedHashSizeErrorType =\n  InvalidVersionedHashSizeError & {\n    name: 'InvalidVersionedHashSizeError'\n  }\nexport class InvalidVersionedHashSizeError extends BaseError {\n  constructor({\n    hash,\n    size,\n  }: {\n    hash: Hash\n    size: number\n  }) {\n    super(`Versioned hash \"${hash}\" size is invalid.`, {\n      metaMessages: ['Expected: 32', `Received: ${size}`],\n      name: 'InvalidVersionedHashSizeError',\n    })\n  }\n}\n\nexport type InvalidVersionedHashVersionErrorType =\n  InvalidVersionedHashVersionError & {\n    name: 'InvalidVersionedHashVersionError'\n  }\nexport class InvalidVersionedHashVersionError extends BaseError {\n  constructor({\n    hash,\n    version,\n  }: {\n    hash: Hash\n    version: number\n  }) {\n    super(`Versioned hash \"${hash}\" version is invalid.`, {\n      metaMessages: [\n        `Expected: ${versionedHashVersionKzg}`,\n        `Received: ${version}`,\n      ],\n      name: 'InvalidVersionedHashVersionError',\n    })\n  }\n}\n", "import {\n  bytesPerBlob,\n  bytesPerFieldElement,\n  fieldElementsPerBlob,\n  maxBytesPerTransaction,\n} from '../../constants/blob.js'\nimport {\n  BlobSizeTooLargeError,\n  type BlobSizeTooLargeErrorType,\n  EmptyBlobError,\n  type EmptyBlobErrorType,\n} from '../../errors/blob.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type CreateCursorErrorType, createCursor } from '../cursor.js'\nimport { type SizeErrorType, size } from '../data/size.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type ToBlobsParameters<\n  data extends Hex | ByteArray = Hex | ByteArray,\n  to extends To | undefined = undefined,\n> = {\n  /** Data to transform to a blob. */\n  data: data | Hex | ByteArray\n  /** Return type. */\n  to?: to | To | undefined\n}\n\nexport type ToBlobsReturnType<to extends To> =\n  | (to extends 'bytes' ? readonly ByteArray[] : never)\n  | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type ToBlobsErrorType =\n  | BlobSizeTooLargeErrorType\n  | BytesToHexErrorType\n  | CreateCursorErrorType\n  | EmptyBlobErrorType\n  | HexToBytesErrorType\n  | SizeErrorType\n  | ErrorType\n\n/**\n * Transforms arbitrary data to blobs.\n *\n * @example\n * ```ts\n * import { toBlobs, stringToHex } from 'viem'\n *\n * const blobs = toBlobs({ data: stringToHex('hello world') })\n * ```\n */\nexport function toBlobs<\n  const data extends Hex | ByteArray,\n  to extends To =\n    | (data extends Hex ? 'hex' : never)\n    | (data extends ByteArray ? 'bytes' : never),\n>(parameters: ToBlobsParameters<data, to>): ToBlobsReturnType<to> {\n  const to =\n    parameters.to ?? (typeof parameters.data === 'string' ? 'hex' : 'bytes')\n  const data = (\n    typeof parameters.data === 'string'\n      ? hexToBytes(parameters.data)\n      : parameters.data\n  ) as ByteArray\n\n  const size_ = size(data)\n  if (!size_) throw new EmptyBlobError()\n  if (size_ > maxBytesPerTransaction)\n    throw new BlobSizeTooLargeError({\n      maxSize: maxBytesPerTransaction,\n      size: size_,\n    })\n\n  const blobs = []\n\n  let active = true\n  let position = 0\n  while (active) {\n    const blob = createCursor(new Uint8Array(bytesPerBlob))\n\n    let size = 0\n    while (size < fieldElementsPerBlob) {\n      const bytes = data.slice(position, position + (bytesPerFieldElement - 1))\n\n      // Push a zero byte so the field element doesn't overflow the BLS modulus.\n      blob.pushByte(0x00)\n\n      // Push the current segment of data bytes.\n      blob.pushBytes(bytes)\n\n      // If we detect that the current segment of data bytes is less than 31 bytes,\n      // we can stop processing and push a terminator byte to indicate the end of the blob.\n      if (bytes.length < 31) {\n        blob.pushByte(0x80)\n        active = false\n        break\n      }\n\n      size++\n      position += 31\n    }\n\n    blobs.push(blob)\n  }\n\n  return (\n    to === 'bytes'\n      ? blobs.map((x) => x.bytes)\n      : blobs.map((x) => bytesToHex(x.bytes))\n  ) as any\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { BlobSidecars } from '../../types/eip4844.js'\nimport type { Kzg } from '../../types/kzg.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport type { OneOf } from '../../types/utils.js'\nimport {\n  type BlobsToCommitmentsErrorType,\n  blobsToCommitments,\n} from './blobsToCommitments.js'\nimport { blobsToProofs, type blobsToProofsErrorType } from './blobsToProofs.js'\nimport { type ToBlobsErrorType, toBlobs } from './toBlobs.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type ToBlobSidecarsParameters<\n  data extends Hex | ByteArray | undefined = undefined,\n  blobs extends readonly Hex[] | readonly ByteArray[] | undefined = undefined,\n  to extends To =\n    | (blobs extends readonly Hex[] ? 'hex' : never)\n    | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n  ///\n  _blobsType =\n    | (blobs extends readonly Hex[] ? readonly Hex[] : never)\n    | (blobs extends readonly ByteArray[] ? readonly ByteArray[] : never),\n> = {\n  /** Return type. */\n  to?: to | To | undefined\n} & OneOf<\n  | {\n      /** Data to transform into blobs. */\n      data: data | Hex | ByteArray\n      /** KZG implementation. */\n      kzg: Kzg\n    }\n  | {\n      /** Blobs. */\n      blobs: blobs | readonly Hex[] | readonly ByteArray[]\n      /** Commitment for each blob. */\n      commitments: _blobsType | readonly Hex[] | readonly ByteArray[]\n      /** Proof for each blob. */\n      proofs: _blobsType | readonly Hex[] | readonly ByteArray[]\n    }\n>\n\nexport type ToBlobSidecarsReturnType<to extends To> =\n  | (to extends 'bytes' ? BlobSidecars<ByteArray> : never)\n  | (to extends 'hex' ? BlobSidecars<Hex> : never)\n\nexport type ToBlobSidecarsErrorType =\n  | BlobsToCommitmentsErrorType\n  | ToBlobsErrorType\n  | blobsToProofsErrorType\n  | ErrorType\n\n/**\n * Transforms arbitrary data (or blobs, commitments, & proofs) into a sidecar array.\n *\n * @example\n * ```ts\n * import { toBlobSidecars, stringToHex } from 'viem'\n *\n * const sidecars = toBlobSidecars({ data: stringToHex('hello world') })\n * ```\n *\n * @example\n * ```ts\n * import {\n *   blobsToCommitments,\n *   toBlobs,\n *   blobsToProofs,\n *   toBlobSidecars,\n *   stringToHex\n * } from 'viem'\n *\n * const blobs = toBlobs({ data: stringToHex('hello world') })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const proofs = blobsToProofs({ blobs, commitments, kzg })\n *\n * const sidecars = toBlobSidecars({ blobs, commitments, proofs })\n * ```\n */\nexport function toBlobSidecars<\n  const data extends Hex | ByteArray | undefined = undefined,\n  const blobs extends\n    | readonly Hex[]\n    | readonly ByteArray[]\n    | undefined = undefined,\n  to extends To =\n    | (data extends Hex ? 'hex' : never)\n    | (data extends ByteArray ? 'bytes' : never)\n    | (blobs extends readonly Hex[] ? 'hex' : never)\n    | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(\n  parameters: ToBlobSidecarsParameters<data, blobs, to>,\n): ToBlobSidecarsReturnType<to> {\n  const { data, kzg, to } = parameters\n  const blobs = parameters.blobs ?? toBlobs({ data: data!, to })\n  const commitments =\n    parameters.commitments ?? blobsToCommitments({ blobs, kzg: kzg!, to })\n  const proofs =\n    parameters.proofs ?? blobsToProofs({ blobs, commitments, kzg: kzg!, to })\n\n  const sidecars: BlobSidecars = []\n  for (let i = 0; i < blobs.length; i++)\n    sidecars.push({\n      blob: blobs[i],\n      commitment: commitments[i],\n      proof: proofs[i],\n    })\n\n  return sidecars as ToBlobSidecarsReturnType<to>\n}\n", "import {\n  InvalidSerializableTransactionError,\n  type InvalidSerializableTransactionErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  FeeValuesEIP1559,\n  FeeValuesEIP4844,\n  FeeValuesLegacy,\n} from '../../index.js'\nimport type {\n  TransactionRequestGeneric,\n  TransactionSerializableEIP2930,\n  TransactionSerializableEIP4844,\n  TransactionSerializableEIP7702,\n  TransactionSerializableGeneric,\n} from '../../types/transaction.js'\nimport type { Assign, ExactPartial, IsNever, OneOf } from '../../types/utils.js'\n\nexport type GetTransactionType<\n  transaction extends OneOf<\n    TransactionSerializableGeneric | TransactionRequestGeneric\n  > = TransactionSerializableGeneric,\n  result =\n    | (transaction extends LegacyProperties ? 'legacy' : never)\n    | (transaction extends EIP1559Properties ? 'eip1559' : never)\n    | (transaction extends EIP2930Properties ? 'eip2930' : never)\n    | (transaction extends EIP4844Properties ? 'eip4844' : never)\n    | (transaction extends EIP7702Properties ? 'eip7702' : never)\n    | (transaction['type'] extends TransactionSerializableGeneric['type']\n        ? Extract<transaction['type'], string>\n        : never),\n> = IsNever<keyof transaction> extends true\n  ? string\n  : IsNever<result> extends false\n    ? result\n    : string\n\nexport type GetTransactionTypeErrorType =\n  | InvalidSerializableTransactionErrorType\n  | ErrorType\n\nexport function getTransactionType<\n  const transaction extends OneOf<\n    TransactionSerializableGeneric | TransactionRequestGeneric\n  >,\n>(transaction: transaction): GetTransactionType<transaction> {\n  if (transaction.type)\n    return transaction.type as GetTransactionType<transaction>\n\n  if (typeof transaction.authorizationList !== 'undefined')\n    return 'eip7702' as any\n\n  if (\n    typeof transaction.blobs !== 'undefined' ||\n    typeof transaction.blobVersionedHashes !== 'undefined' ||\n    typeof transaction.maxFeePerBlobGas !== 'undefined' ||\n    typeof transaction.sidecars !== 'undefined'\n  )\n    return 'eip4844' as any\n\n  if (\n    typeof transaction.maxFeePerGas !== 'undefined' ||\n    typeof transaction.maxPriorityFeePerGas !== 'undefined'\n  ) {\n    return 'eip1559' as any\n  }\n\n  if (typeof transaction.gasPrice !== 'undefined') {\n    if (typeof transaction.accessList !== 'undefined') return 'eip2930' as any\n    return 'legacy' as any\n  }\n\n  throw new InvalidSerializableTransactionError({ transaction })\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////\n// Types\n\ntype BaseProperties = {\n  accessList?: undefined\n  authorizationList?: undefined\n  blobs?: undefined\n  blobVersionedHashes?: undefined\n  gasPrice?: undefined\n  maxFeePerBlobGas?: undefined\n  maxFeePerGas?: undefined\n  maxPriorityFeePerGas?: undefined\n  sidecars?: undefined\n}\n\ntype LegacyProperties = Assign<BaseProperties, FeeValuesLegacy>\ntype EIP1559Properties = Assign<\n  BaseProperties,\n  OneOf<\n    | {\n        maxFeePerGas: FeeValuesEIP1559['maxFeePerGas']\n      }\n    | {\n        maxPriorityFeePerGas: FeeValuesEIP1559['maxPriorityFeePerGas']\n      },\n    FeeValuesEIP1559\n  > & {\n    accessList?: TransactionSerializableEIP2930['accessList'] | undefined\n  }\n>\ntype EIP2930Properties = Assign<\n  ExactPartial<LegacyProperties>,\n  {\n    accessList: TransactionSerializableEIP2930['accessList']\n  }\n>\ntype EIP4844Properties = Assign<\n  ExactPartial<EIP1559Properties>,\n  ExactPartial<FeeValuesEIP4844> &\n    OneOf<\n      | {\n          blobs: TransactionSerializableEIP4844['blobs']\n        }\n      | {\n          blobVersionedHashes: TransactionSerializableEIP4844['blobVersionedHashes']\n        }\n      | {\n          sidecars: TransactionSerializableEIP4844['sidecars']\n        },\n      TransactionSerializableEIP4844\n    >\n>\ntype EIP7702Properties = Assign<\n  ExactPartial<EIP1559Properties>,\n  {\n    authorizationList: TransactionSerializableEIP7702['authorizationList']\n  }\n>\n", "import type { Address } from 'abitype'\nimport { parseAccount } from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport { BaseFeeScalarError } from '../../errors/fee.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account, GetAccountParameter } from '../../types/account.js'\nimport type { ExtractCapabilities } from '../../types/capabilities.js'\nimport type {\n  Chain,\n  ChainFeesFnParameters,\n  DeriveChain,\n  GetChainParameter,\n} from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n  type GetTransactionErrorReturnType,\n  getTransactionError,\n} from '../../utils/errors/getTransactionError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n  type FormattedTransaction,\n  formatTransaction,\n} from '../../utils/formatters/transaction.js'\nimport {\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { NonceManager } from '../../utils/nonceManager.js'\nimport { assertRequest } from '../../utils/transaction/assertRequest.js'\nimport { getBlock } from './getBlock.js'\nimport { getChainId as getChainId_ } from './getChainId.js'\n\nexport type FillTransactionParameters<\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  accountOverride extends Account | Address | undefined =\n    | Account\n    | Address\n    | undefined,\n  ///\n  _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = UnionOmit<FormattedTransactionRequest<_derivedChain>, 'from'> &\n  GetAccountParameter<account, accountOverride, false, true> &\n  GetChainParameter<chain, chainOverride> & {\n    /**\n     * Nonce manager to use for the transaction request.\n     */\n    nonceManager?: NonceManager | undefined\n  }\n\nexport type FillTransactionReturnType<\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  ///\n  _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = {\n  capabilities?:\n    | ExtractCapabilities<'fillTransaction', 'ReturnType'>\n    | undefined\n  raw: Hex\n  transaction: FormattedTransaction<_derivedChain>\n}\n\nexport type FillTransactionErrorType =\n  | GetTransactionErrorReturnType<ErrorType>\n  | ErrorType\n\n/**\n * Fills a transaction request with the necessary fields to be signed over.\n *\n * - Docs: https://viem.sh/docs/actions/public/fillTransaction\n *\n * @param client - Client to use\n * @param parameters - {@link FillTransactionParameters}\n * @returns The filled transaction. {@link FillTransactionReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { fillTransaction } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const result = await fillTransaction(client, {\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *   value: parseEther('1'),\n * })\n */\nexport async function fillTransaction<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  chainOverride extends Chain | undefined = undefined,\n  accountOverride extends Account | Address | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: FillTransactionParameters<\n    chain,\n    account,\n    chainOverride,\n    accountOverride\n  >,\n): Promise<FillTransactionReturnType<chain, chainOverride>> {\n  const {\n    account = client.account,\n    accessList,\n    authorizationList,\n    chain = client.chain,\n    blobVersionedHashes,\n    blobs,\n    data,\n    gas,\n    gasPrice,\n    maxFeePerBlobGas,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    nonce: nonce_,\n    nonceManager,\n    to,\n    type,\n    value,\n    ...rest\n  } = parameters\n\n  const nonce = await (async () => {\n    if (!account) return nonce_\n    if (!nonceManager) return nonce_\n    if (typeof nonce_ !== 'undefined') return nonce_\n    const account_ = parseAccount(account)\n    const chainId = chain\n      ? chain.id\n      : await getAction(client, getChainId_, 'getChainId')({})\n    return await nonceManager.consume({\n      address: account_.address,\n      chainId,\n      client,\n    })\n  })()\n\n  assertRequest(parameters)\n\n  const chainFormat = chain?.formatters?.transactionRequest?.format\n  const format = chainFormat || formatTransactionRequest\n\n  const request = format(\n    {\n      // Pick out extra data that might exist on the chain's transaction request type.\n      ...extract(rest, { format: chainFormat }),\n      account: account ? parseAccount(account) : undefined,\n      accessList,\n      authorizationList,\n      blobs,\n      blobVersionedHashes,\n      data,\n      gas,\n      gasPrice,\n      maxFeePerBlobGas,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      nonce,\n      to,\n      type,\n      value,\n    } as TransactionRequest,\n    'fillTransaction',\n  )\n\n  try {\n    const response = await client.request({\n      method: 'eth_fillTransaction',\n      params: [request],\n    })\n    const format = chain?.formatters?.transaction?.format || formatTransaction\n\n    const transaction = format(response.tx)\n\n    // Remove unnecessary fields.\n    delete transaction.blockHash\n    delete transaction.blockNumber\n    delete transaction.r\n    delete transaction.s\n    delete transaction.transactionIndex\n    delete transaction.v\n    delete transaction.yParity\n\n    // Rewrite fields.\n    transaction.data = transaction.input\n\n    // Preference supplied fees (some nodes do not take these preferences).\n    if (transaction.gas) transaction.gas = parameters.gas ?? transaction.gas\n    if (transaction.gasPrice)\n      transaction.gasPrice = parameters.gasPrice ?? transaction.gasPrice\n    if (transaction.maxFeePerBlobGas)\n      transaction.maxFeePerBlobGas =\n        parameters.maxFeePerBlobGas ?? transaction.maxFeePerBlobGas\n    if (transaction.maxFeePerGas)\n      transaction.maxFeePerGas =\n        parameters.maxFeePerGas ?? transaction.maxFeePerGas\n    if (transaction.maxPriorityFeePerGas)\n      transaction.maxPriorityFeePerGas =\n        parameters.maxPriorityFeePerGas ?? transaction.maxPriorityFeePerGas\n    if (transaction.nonce)\n      transaction.nonce = parameters.nonce ?? transaction.nonce\n\n    // Build fee multiplier function.\n    const feeMultiplier = await (async () => {\n      if (typeof chain?.fees?.baseFeeMultiplier === 'function') {\n        const block = await getAction(client, getBlock, 'getBlock')({})\n        return chain.fees.baseFeeMultiplier({\n          block,\n          client,\n          request: parameters,\n        } as ChainFeesFnParameters)\n      }\n      return chain?.fees?.baseFeeMultiplier ?? 1.2\n    })()\n    if (feeMultiplier < 1) throw new BaseFeeScalarError()\n\n    const decimals = feeMultiplier.toString().split('.')[1]?.length ?? 0\n    const denominator = 10 ** decimals\n    const multiplyFee = (base: bigint) =>\n      (base * BigInt(Math.ceil(feeMultiplier * denominator))) /\n      BigInt(denominator)\n\n    // Apply fee multiplier.\n    if (!transaction.feePayerSignature) {\n      if (transaction.maxFeePerGas && !parameters.maxFeePerGas)\n        transaction.maxFeePerGas = multiplyFee(transaction.maxFeePerGas)\n      if (transaction.gasPrice && !parameters.gasPrice)\n        transaction.gasPrice = multiplyFee(transaction.gasPrice)\n    }\n\n    return {\n      raw: response.raw,\n      transaction: {\n        from: request.from,\n        ...transaction,\n      },\n      ...(response.capabilities ? { capabilities: response.capabilities } : {}),\n    }\n  } catch (err) {\n    throw getTransactionError(\n      err as BaseError,\n      {\n        ...parameters,\n        chain: client.chain,\n      } as never,\n    )\n  }\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { SendTransactionParameters } from '../../actions/wallet/sendTransaction.js'\nimport type { BaseError } from '../../errors/base.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport {\n  TransactionExecutionError,\n  type TransactionExecutionErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\n\nimport {\n  type GetNodeErrorParameters,\n  type GetNodeErrorReturnType,\n  getNodeError,\n} from './getNodeError.js'\n\nexport type GetTransactionErrorParameters = Omit<\n  SendTransactionParameters,\n  'account' | 'chain'\n> & {\n  account: Account | null\n  chain?: Chain | undefined\n  docsPath?: string | undefined\n}\n\nexport type GetTransactionErrorReturnType<cause = ErrorType> = Omit<\n  TransactionExecutionErrorType,\n  'cause'\n> & { cause: cause | GetNodeErrorReturnType }\n\nexport function getTransactionError<err extends ErrorType<string>>(\n  err: err,\n  { docsPath, ...args }: GetTransactionErrorParameters,\n): GetTransactionErrorReturnType<err> {\n  const cause = (() => {\n    const cause = getNodeError(\n      err as {} as BaseError,\n      args as GetNodeErrorParameters,\n    )\n    if (cause instanceof UnknownNodeError) return err as {} as BaseError\n    return cause\n  })()\n  return new TransactionExecutionError(cause, {\n    docsPath,\n    ...args,\n  }) as GetTransactionErrorReturnType<err>\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type HexToNumberErrorType,\n  hexToNumber,\n} from '../../utils/encoding/fromHex.js'\n\nexport type GetChainIdReturnType = number\n\nexport type GetChainIdErrorType =\n  | HexToNumberErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns the chain ID associated with the current network.\n *\n * - Docs: https://viem.sh/docs/actions/public/getChainId\n * - JSON-RPC Methods: [`eth_chainId`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_chainid)\n *\n * @param client - Client to use\n * @returns The current chain ID. {@link GetChainIdReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getChainId } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const chainId = await getChainId(client)\n * // 1\n */\nexport async function getChainId<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(client: Client<Transport, chain, account>): Promise<GetChainIdReturnType> {\n  const chainIdHex = await client.request(\n    {\n      method: 'eth_chainId',\n    },\n    { dedupe: true },\n  )\n  return hexToNumber(chainIdHex)\n}\n", "import type { Abi, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractEventArgs,\n  ContractEventName,\n} from '../../types/contract.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hash } from '../../types/misc.js'\nimport {\n  type GetAbiItemErrorType,\n  type GetAbiItemParameters,\n  getAbiItem,\n} from '../../utils/abi/getAbiItem.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type GetLogsErrorType,\n  type GetLogsParameters,\n  getLogs,\n} from './getLogs.js'\n\nexport type GetContractEventsParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined =\n    | ContractEventName<abi>\n    | undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n  /** The address of the contract. */\n  address?: Address | Address[] | undefined\n  /** Contract ABI. */\n  abi: abi\n  args?:\n    | ContractEventArgs<\n        abi,\n        eventName extends ContractEventName<abi>\n          ? eventName\n          : ContractEventName<abi>\n      >\n    | undefined\n  /** Contract event. */\n  eventName?: eventName | ContractEventName<abi> | undefined\n  /**\n   * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n   * @default false\n   */\n  strict?: strict | boolean | undefined\n} & (\n  | {\n      /** Block number or tag after which to include logs */\n      fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n      /** Block number or tag before which to include logs */\n      toBlock?: toBlock | BlockNumber | BlockTag | undefined\n      blockHash?: undefined\n    }\n  | {\n      fromBlock?: undefined\n      toBlock?: undefined\n      /** Hash of block to include logs from */\n      blockHash?: Hash | undefined\n    }\n)\n\nexport type GetContractEventsReturnType<\n  abi extends Abi | readonly unknown[] = readonly unknown[],\n  eventName extends ContractEventName<abi> | undefined =\n    | ContractEventName<abi>\n    | undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  ///\n  isPending extends boolean =\n    | (fromBlock extends 'pending' ? true : false)\n    | (toBlock extends 'pending' ? true : false),\n> = Log<bigint, number, isPending, undefined, strict, abi, eventName>[]\n\nexport type GetContractEventsErrorType =\n  | GetAbiItemErrorType\n  | GetLogsErrorType\n  | ErrorType\n\n/**\n * Returns a list of event logs emitted by a contract.\n *\n * - Docs: https://viem.sh/docs/contract/getContractEvents#getcontractevents\n * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n *\n * @param client - Client to use\n * @param parameters - {@link GetContractEventsParameters}\n * @returns A list of event logs. {@link GetContractEventsReturnType}\n *\n * @example\n * import { createClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getContractEvents } from 'viem/public'\n * import { wagmiAbi } from './abi'\n *\n * const client = createClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const logs = await getContractEvents(client, {\n *  address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *  abi: wagmiAbi,\n *  eventName: 'Transfer'\n * })\n */\nexport async function getContractEvents<\n  chain extends Chain | undefined,\n  const abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi> | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n  client: Client<Transport, chain>,\n  parameters: GetContractEventsParameters<\n    abi,\n    eventName,\n    strict,\n    fromBlock,\n    toBlock\n  >,\n): Promise<\n  GetContractEventsReturnType<abi, eventName, strict, fromBlock, toBlock>\n> {\n  const {\n    abi,\n    address,\n    args,\n    blockHash,\n    eventName,\n    fromBlock,\n    toBlock,\n    strict,\n  } = parameters\n  const event = eventName\n    ? getAbiItem({ abi, name: eventName } as GetAbiItemParameters)\n    : undefined\n  const events = !event\n    ? (abi as Abi).filter((x) => x.type === 'event')\n    : undefined\n  return getAction(\n    client,\n    getLogs,\n    'getLogs',\n  )({\n    address,\n    args,\n    blockHash,\n    event,\n    events,\n    fromBlock,\n    toBlock,\n    strict,\n  } as {} as GetLogsParameters) as unknown as GetContractEventsReturnType<\n    abi,\n    eventName,\n    strict,\n    fromBlock,\n    toBlock\n  >\n}\n", "// TODO(v3): checksum address.\n\nimport type { Abi, AbiEvent, AbiEventParameter, Address } from 'abitype'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ContractEventName, GetEventArgs } from '../../types/contract.js'\nimport type { Log } from '../../types/log.js'\nimport type { RpcLog } from '../../types/rpc.js'\nimport { isAddressEqual } from '../address/isAddressEqual.js'\nimport { toBytes } from '../encoding/toBytes.js'\nimport { formatLog } from '../formatters/log.js'\nimport { keccak256 } from '../hash/keccak256.js'\nimport { toEventSelector } from '../hash/toEventSelector.js'\nimport {\n  type DecodeEventLogErrorType,\n  decodeEventLog,\n} from './decodeEventLog.js'\n\nexport type ParseEventLogsParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends\n    | ContractEventName<abi>\n    | ContractEventName<abi>[]\n    | undefined = ContractEventName<abi>,\n  strict extends boolean | undefined = boolean | undefined,\n  ///\n  allArgs = GetEventArgs<\n    abi,\n    eventName extends ContractEventName<abi>\n      ? eventName\n      : ContractEventName<abi>,\n    {\n      EnableUnion: true\n      IndexedOnly: false\n      Required: false\n    }\n  >,\n> = {\n  /** Contract ABI. */\n  abi: abi\n  /** Arguments for the event. */\n  args?: allArgs | undefined\n  /** Contract event. */\n  eventName?:\n    | eventName\n    | ContractEventName<abi>\n    | ContractEventName<abi>[]\n    | undefined\n  /** List of logs. */\n  logs: (Log | RpcLog)[]\n  strict?: strict | boolean | undefined\n}\n\nexport type ParseEventLogsReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends\n    | ContractEventName<abi>\n    | ContractEventName<abi>[]\n    | undefined = ContractEventName<abi>,\n  strict extends boolean | undefined = boolean | undefined,\n  ///\n  derivedEventName extends\n    | ContractEventName<abi>\n    | undefined = eventName extends ContractEventName<abi>[]\n    ? eventName[number]\n    : eventName,\n> = Log<bigint, number, false, undefined, strict, abi, derivedEventName>[]\n\nexport type ParseEventLogsErrorType = DecodeEventLogErrorType | ErrorType\n\n/**\n * Extracts & decodes logs matching the provided signature(s) (`abi` + optional `eventName`)\n * from a set of opaque logs.\n *\n * @param parameters - {@link ParseEventLogsParameters}\n * @returns The logs. {@link ParseEventLogsReturnType}\n *\n * @example\n * import { createClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { parseEventLogs } from 'viem/op-stack'\n *\n * const client = createClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n *\n * const receipt = await getTransactionReceipt(client, {\n *   hash: '0xec23b2ba4bc59ba61554507c1b1bc91649e6586eb2dd00c728e8ed0db8bb37ea',\n * })\n *\n * const logs = parseEventLogs({ logs: receipt.logs })\n * // [{ args: { ... }, eventName: 'TransactionDeposited', ... }, ...]\n */\nexport function parseEventLogs<\n  abi extends Abi | readonly unknown[],\n  strict extends boolean | undefined = true,\n  eventName extends\n    | ContractEventName<abi>\n    | ContractEventName<abi>[]\n    | undefined = undefined,\n>(\n  parameters: ParseEventLogsParameters<abi, eventName, strict>,\n): ParseEventLogsReturnType<abi, eventName, strict> {\n  const { abi, args, logs, strict = true } = parameters\n\n  const eventName = (() => {\n    if (!parameters.eventName) return undefined\n    if (Array.isArray(parameters.eventName)) return parameters.eventName\n    return [parameters.eventName as string]\n  })()\n\n  const abiTopics = (abi as Abi)\n    .filter((abiItem) => abiItem.type === 'event')\n    .map((abiItem) => ({\n      abi: abiItem,\n      selector: toEventSelector(abiItem),\n    }))\n\n  return logs\n    .map((log) => {\n      // Normalize RpcLog (hex-encoded quantities) to Log (bigint/number).\n      // When logs come directly from an RPC response (e.g. eth_getLogs),\n      // fields like blockNumber are hex strings instead of bigints.\n      const formattedLog =\n        typeof log.blockNumber === 'string' ? formatLog(log as RpcLog) : log\n\n      // Find all matching ABI items with the same selector.\n      // Multiple events can share the same selector but differ in indexed parameters\n      // (e.g., ERC20 vs ERC721 Transfer events).\n      const abiItems = abiTopics.filter(\n        (abiTopic) => formattedLog.topics[0] === abiTopic.selector,\n      )\n      if (abiItems.length === 0) return null\n\n      // Try each matching ABI item until one successfully decodes.\n      let event: { eventName: string; args: unknown } | undefined\n      let abiItem: { abi: AbiEvent; selector: Address } | undefined\n\n      for (const item of abiItems) {\n        try {\n          event = decodeEventLog({\n            ...formattedLog,\n            abi: [item.abi],\n            strict: true,\n          })\n          abiItem = item\n          break\n        } catch {\n          // Try next ABI item\n        }\n      }\n\n      // If strict decoding failed for all, and we're in non-strict mode,\n      // fall back to the first matching ABI item.\n      if (!event && !strict) {\n        abiItem = abiItems[0]\n        try {\n          event = decodeEventLog({\n            data: formattedLog.data,\n            topics: formattedLog.topics,\n            abi: [abiItem.abi],\n            strict: false,\n          })\n        } catch {\n          // If decoding still fails, return partial log in non-strict mode.\n          const isUnnamed = abiItem.abi.inputs?.some(\n            (x) => !('name' in x && x.name),\n          )\n          return {\n            ...formattedLog,\n            args: isUnnamed ? [] : {},\n            eventName: abiItem.abi.name,\n          }\n        }\n      }\n\n      // If no event was found, return null.\n      if (!event || !abiItem) return null\n\n      // Check that the decoded event name matches the provided event name.\n      if (eventName && !eventName.includes(event.eventName)) return null\n\n      // Check that the decoded event args match the provided args.\n      if (\n        !includesArgs({\n          args: event.args,\n          inputs: abiItem.abi.inputs,\n          matchArgs: args,\n        })\n      )\n        return null\n\n      return { ...event, ...formattedLog }\n    })\n    .filter(Boolean) as unknown as ParseEventLogsReturnType<\n    abi,\n    eventName,\n    strict\n  >\n}\n\nfunction includesArgs(parameters: {\n  args: unknown\n  inputs: AbiEvent['inputs']\n  matchArgs: unknown\n}) {\n  const { args, inputs, matchArgs } = parameters\n\n  if (!matchArgs) return true\n  if (!args) return false\n\n  function isEqual(input: AbiEventParameter, value: unknown, arg: unknown) {\n    try {\n      if (input.type === 'address')\n        return isAddressEqual(value as Address, arg as Address)\n      if (input.type === 'string' || input.type === 'bytes')\n        return keccak256(toBytes(value as string)) === arg\n      return value === arg\n    } catch {\n      return false\n    }\n  }\n\n  if (Array.isArray(args) && Array.isArray(matchArgs)) {\n    return matchArgs.every((value, index) => {\n      if (value === null || value === undefined) return true\n      const input = inputs[index]\n      if (!input) return false\n      const value_ = Array.isArray(value) ? value : [value]\n      return value_.some((value) => isEqual(input, value, args[index]))\n    })\n  }\n\n  if (\n    typeof args === 'object' &&\n    !Array.isArray(args) &&\n    typeof matchArgs === 'object' &&\n    !Array.isArray(matchArgs)\n  )\n    return Object.entries(matchArgs).every(([key, value]) => {\n      if (value === null || value === undefined) return true\n      const input = inputs.find((input) => input.name === key)\n      if (!input) return false\n      const value_ = Array.isArray(value) ? value : [value]\n      return value_.some((value) =>\n        isEqual(input, value, (args as Record<string, unknown>)[key]),\n      )\n    })\n\n  return false\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Log } from '../../types/log.js'\nimport type { RpcLog } from '../../types/rpc.js'\nimport type { ExactPartial } from '../../types/utils.js'\n\nexport type FormatLogErrorType = ErrorType\n\nexport function formatLog(\n  log: ExactPartial<RpcLog>,\n  {\n    args,\n    eventName,\n  }: { args?: unknown | undefined; eventName?: string | undefined } = {},\n) {\n  return {\n    ...log,\n    blockHash: log.blockHash ? log.blockHash : null,\n    blockNumber: log.blockNumber ? BigInt(log.blockNumber) : null,\n    blockTimestamp: log.blockTimestamp\n      ? BigInt(log.blockTimestamp)\n      : log.blockTimestamp === null\n        ? null\n        : undefined,\n    logIndex: log.logIndex ? Number(log.logIndex) : null,\n    transactionHash: log.transactionHash ? log.transactionHash : null,\n    transactionIndex: log.transactionIndex\n      ? Number(log.transactionIndex)\n      : null,\n    ...(eventName ? { args, eventName } : {}),\n  } as Log\n}\n", "import type { Abi, AbiParameter } from 'abitype'\n\nimport {\n  AbiDecodingDataSizeTooSmallError,\n  type AbiDecodingDataSizeTooSmallErrorType,\n  AbiEventSignatureEmptyTopicsError,\n  type AbiEventSignatureEmptyTopicsErrorType,\n  AbiEventSignatureNotFoundError,\n  type AbiEventSignatureNotFoundErrorType,\n  DecodeLogDataMismatch,\n  type DecodeLogDataMismatchErrorType,\n  DecodeLogTopicsMismatch,\n  type DecodeLogTopicsMismatchErrorType,\n} from '../../errors/abi.js'\nimport { PositionOutOfBoundsError } from '../../errors/cursor.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ContractEventArgsFromTopics,\n  ContractEventName,\n  EventDefinition,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n  IsNarrowable,\n  Prettify,\n  UnionEvaluate,\n} from '../../types/utils.js'\nimport { size } from '../data/size.js'\nimport {\n  type ToEventSelectorErrorType,\n  toEventSelector,\n} from '../hash/toEventSelector.js'\nimport {\n  type DecodeAbiParametersErrorType,\n  decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\n\nexport type DecodeEventLogParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined = ContractEventName<abi>,\n  topics extends Hex[] = Hex[],\n  data extends Hex | undefined = undefined,\n  strict extends boolean = true,\n> = {\n  abi: abi\n  data?: data | undefined\n  eventName?: eventName | ContractEventName<abi> | undefined\n  strict?: strict | boolean | undefined\n  topics: [signature: Hex, ...args: topics] | []\n}\n\nexport type DecodeEventLogReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined = ContractEventName<abi>,\n  topics extends Hex[] = Hex[],\n  data extends Hex | undefined = undefined,\n  strict extends boolean = true,\n  ///\n  allEventNames extends\n    ContractEventName<abi> = eventName extends ContractEventName<abi>\n    ? eventName\n    : ContractEventName<abi>,\n> = IsNarrowable<abi, Abi> extends true\n  ? {\n      [name in allEventNames]: Prettify<\n        {\n          eventName: name\n        } & UnionEvaluate<\n          ContractEventArgsFromTopics<abi, name, strict> extends infer allArgs\n            ? topics extends readonly []\n              ? data extends undefined\n                ? { args?: undefined }\n                : { args?: allArgs | undefined }\n              : { args: allArgs }\n            : never\n        >\n      >\n    }[allEventNames]\n  : {\n      eventName: eventName\n      args: readonly unknown[] | undefined\n    }\n\nexport type DecodeEventLogErrorType =\n  | AbiDecodingDataSizeTooSmallErrorType\n  | AbiEventSignatureEmptyTopicsErrorType\n  | AbiEventSignatureNotFoundErrorType\n  | DecodeAbiParametersErrorType\n  | DecodeLogTopicsMismatchErrorType\n  | DecodeLogDataMismatchErrorType\n  | FormatAbiItemErrorType\n  | ToEventSelectorErrorType\n  | ErrorType\n\nconst docsPath = '/docs/contract/decodeEventLog'\n\nexport function decodeEventLog<\n  const abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi> | undefined = undefined,\n  topics extends Hex[] = Hex[],\n  data extends Hex | undefined = undefined,\n  strict extends boolean = true,\n>(\n  parameters: DecodeEventLogParameters<abi, eventName, topics, data, strict>,\n): DecodeEventLogReturnType<abi, eventName, topics, data, strict> {\n  const {\n    abi,\n    data,\n    strict: strict_,\n    topics,\n  } = parameters as DecodeEventLogParameters\n\n  const strict = strict_ ?? true\n  const [signature, ...argTopics] = topics\n  if (!signature) throw new AbiEventSignatureEmptyTopicsError({ docsPath })\n\n  const abiItem = abi.find(\n    (x) =>\n      x.type === 'event' &&\n      signature === toEventSelector(formatAbiItem(x) as EventDefinition),\n  )\n\n  if (!(abiItem && 'name' in abiItem) || abiItem.type !== 'event')\n    throw new AbiEventSignatureNotFoundError(signature, { docsPath })\n\n  const { name, inputs } = abiItem\n  const isUnnamed = inputs?.some((x) => !('name' in x && x.name))\n\n  const args: any = isUnnamed ? [] : {}\n\n  // Decode topics (indexed args).\n  const indexedInputs = inputs\n    .map((x, i) => [x, i] as const)\n    .filter(([x]) => 'indexed' in x && x.indexed)\n\n  const missingIndexedInputs: [AbiParameter, number][] = []\n\n  for (let i = 0; i < indexedInputs.length; i++) {\n    const [param, argIndex] = indexedInputs[i]\n    const topic = argTopics[i]\n    if (!topic) {\n      if (strict)\n        throw new DecodeLogTopicsMismatch({\n          abiItem,\n          param: param as AbiParameter & { indexed: boolean },\n        })\n      // Track missing indexed inputs to decode from data when strict is false\n      missingIndexedInputs.push([param, argIndex])\n      continue\n    }\n    args[isUnnamed ? argIndex : param.name || argIndex] = decodeTopic({\n      param,\n      value: topic,\n    })\n  }\n\n  // Decode data (non-indexed args + missing indexed args when strict is false).\n  const nonIndexedInputs = inputs.filter((x) => !('indexed' in x && x.indexed))\n\n  // When strict is false, missing indexed inputs should be decoded from data\n  const inputsToDecode = strict\n    ? nonIndexedInputs\n    : [...missingIndexedInputs.map(([param]) => param), ...nonIndexedInputs]\n\n  if (inputsToDecode.length > 0) {\n    if (data && data !== '0x') {\n      try {\n        const decodedData = decodeAbiParameters(\n          inputsToDecode,\n          data,\n        ) as unknown[]\n        if (decodedData) {\n          let dataIndex = 0\n          // First, assign missing indexed parameters (when strict is false)\n          if (!strict) {\n            for (const [param, argIndex] of missingIndexedInputs) {\n              args[isUnnamed ? argIndex : param.name || argIndex] =\n                decodedData[dataIndex++]\n            }\n          }\n          // Then, assign non-indexed parameters\n          if (isUnnamed) {\n            for (let i = 0; i < inputs.length; i++)\n              if (args[i] === undefined && dataIndex < decodedData.length)\n                args[i] = decodedData[dataIndex++]\n          } else\n            for (let i = 0; i < nonIndexedInputs.length; i++)\n              args[nonIndexedInputs[i].name!] = decodedData[dataIndex++]\n        }\n      } catch (err) {\n        if (strict) {\n          if (\n            err instanceof AbiDecodingDataSizeTooSmallError ||\n            err instanceof PositionOutOfBoundsError\n          )\n            throw new DecodeLogDataMismatch({\n              abiItem,\n              data: data,\n              params: inputsToDecode,\n              size: size(data),\n            })\n          throw err\n        }\n      }\n    } else if (strict) {\n      throw new DecodeLogDataMismatch({\n        abiItem,\n        data: '0x',\n        params: inputsToDecode,\n        size: 0,\n      })\n    }\n  }\n\n  return {\n    eventName: name,\n    args: Object.values(args).length > 0 ? args : undefined,\n  } as unknown as DecodeEventLogReturnType<abi, eventName, topics, data, strict>\n}\n\nfunction decodeTopic({ param, value }: { param: AbiParameter; value: Hex }) {\n  if (\n    param.type === 'string' ||\n    param.type === 'bytes' ||\n    param.type === 'tuple' ||\n    param.type.match(/^(.*)\\[(\\d+)?\\]$/)\n  )\n    return value\n  const decodedArg = decodeAbiParameters([param], value) || []\n  return decodedArg[0]\n}\n", "import type { AbiEvent, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  MaybeAbiEventName,\n  MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hash, LogTopic } from '../../types/misc.js'\nimport type { RpcLog } from '../../types/rpc.js'\nimport type { DecodeEventLogErrorType } from '../../utils/abi/decodeEventLog.js'\nimport {\n  type EncodeEventTopicsErrorType,\n  type EncodeEventTopicsParameters,\n  encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type FormatLogErrorType,\n  formatLog,\n} from '../../utils/formatters/log.js'\n\nexport type GetLogsParameters<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  //\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n> = {\n  /** Address or list of addresses from which logs originated */\n  address?: Address | Address[] | undefined\n} & (\n  | {\n      event: abiEvent\n      events?: undefined\n      args?: MaybeExtractEventArgsFromAbi<abiEvents, _eventName> | undefined\n      /**\n       * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n       * @default false\n       */\n      strict?: strict | undefined\n    }\n  | {\n      event?: undefined\n      events: abiEvents\n      args?: undefined\n      /**\n       * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n       * @default false\n       */\n      strict?: strict | undefined\n    }\n  | {\n      event?: undefined\n      events?: undefined\n      args?: undefined\n      strict?: undefined\n    }\n) &\n  (\n    | {\n        /** Block number or tag after which to include logs */\n        fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n        /** Block number or tag before which to include logs */\n        toBlock?: toBlock | BlockNumber | BlockTag | undefined\n        blockHash?: undefined\n      }\n    | {\n        fromBlock?: undefined\n        toBlock?: undefined\n        /** Hash of block to include logs from */\n        blockHash?: Hash | undefined\n      }\n  )\n\nexport type GetLogsReturnType<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  //\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n  _pending extends boolean =\n    | (fromBlock extends 'pending' ? true : false)\n    | (toBlock extends 'pending' ? true : false),\n> = Log<bigint, number, _pending, abiEvent, strict, abiEvents, _eventName>[]\n\nexport type GetLogsErrorType =\n  | DecodeEventLogErrorType\n  | EncodeEventTopicsErrorType\n  | FormatLogErrorType\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns a list of event logs matching the provided parameters.\n *\n * - Docs: https://viem.sh/docs/actions/public/getLogs\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/logs_event-logs\n * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n *\n * @param client - Client to use\n * @param parameters - {@link GetLogsParameters}\n * @returns A list of event logs. {@link GetLogsReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getLogs } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const logs = await getLogs(client)\n */\nexport async function getLogs<\n  chain extends Chain | undefined,\n  const abiEvent extends AbiEvent | undefined = undefined,\n  const abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n  client: Client<Transport, chain>,\n  {\n    address,\n    blockHash,\n    fromBlock,\n    toBlock,\n    event,\n    events: events_,\n    args,\n    strict: strict_,\n  }: GetLogsParameters<abiEvent, abiEvents, strict, fromBlock, toBlock> = {},\n): Promise<GetLogsReturnType<abiEvent, abiEvents, strict, fromBlock, toBlock>> {\n  const strict = strict_ ?? false\n  const events = events_ ?? (event ? [event] : undefined)\n\n  let topics: LogTopic[] = []\n  if (events) {\n    const encoded = (events as AbiEvent[]).flatMap((event) =>\n      encodeEventTopics({\n        abi: [event],\n        eventName: (event as AbiEvent).name,\n        args: events_ ? undefined : args,\n      } as EncodeEventTopicsParameters),\n    )\n    // TODO: Clean up type casting\n    topics = [encoded as LogTopic]\n    if (event) topics = topics[0] as LogTopic[]\n  }\n\n  let logs: RpcLog[]\n  if (blockHash) {\n    logs = await client.request({\n      method: 'eth_getLogs',\n      params: [{ address, topics, blockHash }],\n    })\n  } else {\n    logs = await client.request({\n      method: 'eth_getLogs',\n      params: [\n        {\n          address,\n          topics,\n          fromBlock:\n            typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n          toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n        },\n      ],\n    })\n  }\n\n  const formattedLogs = logs.map((log) => formatLog(log))\n  if (!events)\n    return formattedLogs as GetLogsReturnType<\n      abiEvent,\n      abiEvents,\n      strict,\n      fromBlock,\n      toBlock\n    >\n  return parseEventLogs({\n    abi: events,\n    args: args as any,\n    logs: formattedLogs,\n    strict,\n  }) as unknown as GetLogsReturnType<\n    abiEvent,\n    abiEvents,\n    strict,\n    fromBlock,\n    toBlock\n  >\n}\n", "import type { Abi } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n  ContractFunctionParameters,\n  ContractFunctionReturnType,\n} from '../../types/contract.js'\nimport type { UnionEvaluate } from '../../types/utils.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  type EncodeFunctionDataParameters,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\n\nimport { type CallErrorType, type CallParameters, call } from './call.js'\n\nexport type ReadContractParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends ContractFunctionName<\n    abi,\n    'pure' | 'view'\n  > = ContractFunctionName<abi, 'pure' | 'view'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'pure' | 'view',\n    functionName\n  > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n> = UnionEvaluate<\n  Pick<\n    CallParameters,\n    | 'account'\n    | 'authorizationList'\n    | 'blockNumber'\n    | 'blockOverrides'\n    | 'blockTag'\n    | 'factory'\n    | 'factoryData'\n    | 'stateOverride'\n  >\n> &\n  ContractFunctionParameters<abi, 'pure' | 'view', functionName, args, boolean>\n\nexport type ReadContractReturnType<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends ContractFunctionName<\n    abi,\n    'pure' | 'view'\n  > = ContractFunctionName<abi, 'pure' | 'view'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'pure' | 'view',\n    functionName\n  > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n> = ContractFunctionReturnType<abi, 'pure' | 'view', functionName, args>\n\nexport type ReadContractErrorType = GetContractErrorReturnType<\n  CallErrorType | EncodeFunctionDataErrorType | DecodeFunctionResultErrorType\n>\n\n/**\n * Calls a read-only function on a contract, and returns the response.\n *\n * - Docs: https://viem.sh/docs/contract/readContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_reading-contracts\n *\n * A \"read-only\" function (constant function) on a Solidity contract is denoted by a `view` or `pure` keyword. They can only read the state of the contract, and cannot make any changes to it. Since read-only methods do not change the state of the contract, they do not require any gas to be executed, and can be called by any user without the need to pay for gas.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link ReadContractParameters}\n * @returns The response from the contract. Type is inferred. {@link ReadContractReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { readContract } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const result = await readContract(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   abi: parseAbi(['function balanceOf(address) view returns (uint256)']),\n *   functionName: 'balanceOf',\n *   args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // 424122n\n */\nexport async function readContract<\n  chain extends Chain | undefined,\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi, 'pure' | 'view'>,\n  const args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n>(\n  client: Client<Transport, chain>,\n  parameters: ReadContractParameters<abi, functionName, args>,\n): Promise<ReadContractReturnType<abi, functionName, args>> {\n  const { abi, address, args, functionName, ...rest } =\n    parameters as ReadContractParameters\n  const calldata = encodeFunctionData({\n    abi,\n    args,\n    functionName,\n  } as EncodeFunctionDataParameters)\n  try {\n    const { data } = await getAction(\n      client,\n      call,\n      'call',\n    )({\n      ...(rest as CallParameters),\n      data: calldata,\n      to: address!,\n    })\n    return decodeFunctionResult({\n      abi,\n      args,\n      functionName,\n      data: data || '0x',\n    }) as ReadContractReturnType<abi, functionName>\n  } catch (error) {\n    throw getContractError(error as BaseError, {\n      abi,\n      address,\n      args,\n      docsPath: '/docs/contract/readContract',\n      functionName,\n    })\n  }\n}\n", "import type { Abi, AbiFunction, AbiStateMutability, Address } from 'abitype'\n\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account, ParseAccount } from '../../types/account.js'\nimport type { Chain, DeriveChain } from '../../types/chain.js'\nimport type {\n  ContractFunctionArgs,\n  ContractFunctionName,\n  ContractFunctionParameters,\n  ContractFunctionReturnType,\n  ExtractAbiFunctionForArgs,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type {\n  IsNarrowable,\n  NoInfer,\n  Prettify,\n  UnionEvaluate,\n  UnionOmit,\n} from '../../types/utils.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { WriteContractParameters } from '../wallet/writeContract.js'\nimport { type CallErrorType, type CallParameters, call } from './call.js'\n\nexport type GetMutabilityAwareValue<\n  abi extends Abi | readonly unknown[],\n  mutability extends AbiStateMutability = AbiStateMutability,\n  functionName extends ContractFunctionName<\n    abi,\n    mutability\n  > = ContractFunctionName<abi, mutability>,\n  valueType = TransactionRequest['value'],\n  args extends ContractFunctionArgs<\n    abi,\n    mutability,\n    functionName\n  > = ContractFunctionArgs<abi, mutability, functionName>,\n  abiFunction extends AbiFunction = abi extends Abi\n    ? ExtractAbiFunctionForArgs<abi, mutability, functionName, args>\n    : AbiFunction,\n  _Narrowable extends boolean = IsNarrowable<abi, Abi>,\n> = _Narrowable extends true\n  ? abiFunction['stateMutability'] extends 'payable'\n    ? { value?: NoInfer<valueType> | undefined }\n    : abiFunction['payable'] extends true\n      ? { value?: NoInfer<valueType> | undefined }\n      : { value?: undefined }\n  : { value?: NoInfer<valueType> | undefined }\n\nexport type SimulateContractParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  functionName extends ContractFunctionName<\n    abi,\n    'nonpayable' | 'payable'\n  > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n  chain extends Chain | undefined = Chain | undefined,\n  chainOverride extends Chain | undefined = Chain | undefined,\n  accountOverride extends Account | Address | null | undefined = undefined,\n  ///\n  derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n  callParameters extends\n    CallParameters<derivedChain> = CallParameters<derivedChain>,\n> = {\n  account?: accountOverride | null | undefined\n  chain?: chainOverride | undefined\n  /** Data to append to the end of the calldata. Useful for adding a [\"domain\" tag](https://opensea.notion.site/opensea/Seaport-Order-Attributions-ec2d69bf455041a5baa490941aad307f). */\n  dataSuffix?: Hex | undefined\n} & ContractFunctionParameters<\n  abi,\n  'nonpayable' | 'payable',\n  functionName,\n  args\n> &\n  UnionOmit<\n    callParameters,\n    | 'account'\n    | 'batch'\n    | 'code'\n    | 'to'\n    | 'data'\n    | 'factory'\n    | 'factoryData'\n    | 'value'\n  > &\n  GetMutabilityAwareValue<\n    abi,\n    'nonpayable' | 'payable',\n    functionName,\n    callParameters['value'],\n    args\n  >\n\nexport type SimulateContractReturnType<\n  out abi extends Abi | readonly unknown[] = Abi,\n  in out functionName extends ContractFunctionName<\n    abi,\n    'nonpayable' | 'payable'\n  > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  in out args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n  /** @ts-expect-error cast variance */\n  out chain extends Chain | undefined = Chain | undefined,\n  out account extends Account | undefined = Account | undefined,\n  out chainOverride extends Chain | undefined = Chain | undefined,\n  out accountOverride extends Account | Address | null | undefined =\n    | Account\n    | Address\n    | null\n    | undefined,\n  ///\n  in out minimizedAbi extends Abi = readonly [\n    ExtractAbiFunctionForArgs<\n      abi extends Abi ? abi : Abi,\n      'nonpayable' | 'payable',\n      functionName,\n      args\n    >,\n  ],\n  out resolvedAccount extends\n    | Account\n    | null\n    | undefined = accountOverride extends Account | Address | null\n    ? ParseAccount<accountOverride>\n    : account,\n> = {\n  result: ContractFunctionReturnType<\n    minimizedAbi,\n    'nonpayable' | 'payable',\n    functionName,\n    args\n  >\n  request: Prettify<\n    UnionEvaluate<\n      UnionOmit<\n        WriteContractParameters<\n          minimizedAbi,\n          functionName,\n          args,\n          chain,\n          undefined,\n          chainOverride\n        >,\n        'account' | 'abi' | 'args' | 'chain' | 'functionName'\n      >\n    > &\n      ContractFunctionParameters<\n        minimizedAbi,\n        'nonpayable' | 'payable',\n        functionName,\n        args\n      > & {\n        chain: DeriveChain<chain, chainOverride>\n      } & (resolvedAccount extends Account | null\n        ? { account: resolvedAccount }\n        : { account?: undefined })\n  >\n}\n\nexport type SimulateContractErrorType =\n  | ParseAccountErrorType\n  | EncodeFunctionDataErrorType\n  | GetContractErrorReturnType<CallErrorType | DecodeFunctionResultErrorType>\n  | ErrorType\n\n/**\n * Simulates/validates a contract interaction. This is useful for retrieving **return data** and **revert reasons** of contract write functions.\n *\n * - Docs: https://viem.sh/docs/contract/simulateContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts\n *\n * This function does not require gas to execute and _**does not**_ change the state of the blockchain. It is almost identical to [`readContract`](https://viem.sh/docs/contract/readContract), but also supports contract write functions.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link SimulateContractParameters}\n * @returns The simulation result and write request. {@link SimulateContractReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { simulateContract } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const result = await simulateContract(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   abi: parseAbi(['function mint(uint32) view returns (uint32)']),\n *   functionName: 'mint',\n *   args: ['69420'],\n *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function simulateContract<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n  const abi extends Abi | readonly unknown[],\n  functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n  const args extends ContractFunctionArgs<\n    abi,\n    'nonpayable' | 'payable',\n    functionName\n  >,\n  chainOverride extends Chain | undefined = undefined,\n  accountOverride extends Account | Address | null | undefined = undefined,\n>(\n  client: Client<Transport, chain, account>,\n  parameters: SimulateContractParameters<\n    abi,\n    functionName,\n    args,\n    chain,\n    chainOverride,\n    accountOverride\n  >,\n): Promise<\n  SimulateContractReturnType<\n    abi,\n    functionName,\n    args,\n    chain,\n    account,\n    chainOverride,\n    accountOverride\n  >\n> {\n  const {\n    abi,\n    address,\n    args,\n    functionName,\n    dataSuffix = typeof client.dataSuffix === 'string'\n      ? client.dataSuffix\n      : client.dataSuffix?.value,\n    ...callRequest\n  } = parameters as SimulateContractParameters\n\n  const account = callRequest.account\n    ? parseAccount(callRequest.account)\n    : client.account\n  const calldata = encodeFunctionData({ abi, args, functionName })\n\n  try {\n    const { data } = await getAction(\n      client,\n      call,\n      'call',\n    )({\n      batch: false,\n      data: `${calldata}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n      to: address,\n      ...callRequest,\n      account,\n    })\n    const result = decodeFunctionResult({\n      abi,\n      args,\n      functionName,\n      data: data || '0x',\n    })\n    const minimizedAbi = abi.filter(\n      (abiItem) =>\n        'name' in abiItem && abiItem.name === parameters.functionName,\n    )\n    return {\n      result,\n      request: {\n        abi: minimizedAbi,\n        address,\n        args,\n        dataSuffix,\n        functionName,\n        ...callRequest,\n        account,\n      },\n    } as unknown as SimulateContractReturnType<\n      abi,\n      functionName,\n      args,\n      chain,\n      account,\n      chainOverride,\n      accountOverride\n    >\n  } catch (error) {\n    throw getContractError(error as BaseError, {\n      abi,\n      address,\n      args,\n      docsPath: '/docs/contract/simulateContract',\n      functionName,\n      sender: account?.address,\n    })\n  }\n}\n", "import type { Abi, Address, ExtractAbiEvent } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  DecodeLogDataMismatch,\n  DecodeLogTopicsMismatch,\n} from '../../errors/abi.js'\nimport { InvalidInputRpcError } from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractEventArgs,\n  ContractEventName,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { LogTopic } from '../../types/misc.js'\nimport type { GetPollOptions } from '../../types/transport.js'\nimport { decodeEventLog } from '../../utils/abi/decodeEventLog.js'\nimport {\n  type EncodeEventTopicsParameters,\n  encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport { formatLog } from '../../utils/formatters/log.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\nimport { createContractEventFilter } from './createContractEventFilter.js'\nimport { getBlockNumber } from './getBlockNumber.js'\nimport {\n  type GetContractEventsParameters,\n  getContractEvents,\n} from './getContractEvents.js'\nimport { getFilterChanges } from './getFilterChanges.js'\nimport { uninstallFilter } from './uninstallFilter.js'\n\nexport type WatchContractEventOnLogsParameter<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> = ContractEventName<abi>,\n  strict extends boolean | undefined = undefined,\n> = abi extends Abi\n  ? Abi extends abi\n    ? Log[]\n    : Log<bigint, number, false, ExtractAbiEvent<abi, eventName>, strict>[]\n  : Log[]\n\nexport type WatchContractEventOnLogsFn<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> = ContractEventName<abi>,\n  strict extends boolean | undefined = undefined,\n> = (logs: WatchContractEventOnLogsParameter<abi, eventName, strict>) => void\n\nexport type WatchContractEventParameters<\n  abi extends Abi | readonly unknown[] = Abi,\n  eventName extends ContractEventName<abi> | undefined = ContractEventName<abi>,\n  strict extends boolean | undefined = undefined,\n  transport extends Transport = Transport,\n> = {\n  /** The address of the contract. */\n  address?: Address | Address[] | undefined\n  /** Contract ABI. */\n  abi: abi\n  args?:\n    | ContractEventArgs<\n        abi,\n        eventName extends ContractEventName<abi>\n          ? eventName\n          : ContractEventName<abi>\n      >\n    | undefined\n  /** Contract event. */\n  eventName?: eventName | ContractEventName<abi> | undefined\n  /** Block to start listening from. */\n  fromBlock?: BlockNumber<bigint> | undefined\n  /** The callback to call when an error occurred when trying to get for a new block. */\n  onError?: ((error: Error) => void) | undefined\n  /** The callback to call when new event logs are received. */\n  onLogs: WatchContractEventOnLogsFn<\n    abi,\n    eventName extends ContractEventName<abi>\n      ? eventName\n      : ContractEventName<abi>,\n    strict\n  >\n  /**\n   * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n   * @default false\n   */\n  strict?: strict | boolean | undefined\n} & GetPollOptions<transport>\n\nexport type WatchContractEventReturnType = () => void\n\nexport type WatchContractEventErrorType =\n  | StringifyErrorType\n  | ObserveErrorType\n  | ErrorType\n\n/**\n * Watches and returns emitted contract event logs.\n *\n * - Docs: https://viem.sh/docs/contract/watchContractEvent\n *\n * This Action will batch up all the event logs found within the [`pollingInterval`](https://viem.sh/docs/contract/watchContractEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/contract/watchContractEvent#onLogs).\n *\n * `watchContractEvent` will attempt to create an [Event Filter](https://viem.sh/docs/contract/createContractEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchContractEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchContractEventParameters}\n * @returns A function that can be invoked to stop watching for new event logs. {@link WatchContractEventReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchContractEvent } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const unwatch = watchContractEvent(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   abi: parseAbi(['event Transfer(address indexed from, address indexed to, uint256 value)']),\n *   eventName: 'Transfer',\n *   args: { from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b' },\n *   onLogs: (logs) => console.log(logs),\n * })\n */\nexport function watchContractEvent<\n  chain extends Chain | undefined,\n  const abi extends Abi | readonly unknown[],\n  eventName extends ContractEventName<abi> | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  transport extends Transport = Transport,\n>(\n  client: Client<transport, chain>,\n  parameters: WatchContractEventParameters<abi, eventName, strict, transport>,\n): WatchContractEventReturnType {\n  const {\n    abi,\n    address,\n    args,\n    batch = true,\n    eventName,\n    fromBlock,\n    onError,\n    onLogs,\n    poll: poll_,\n    pollingInterval = client.pollingInterval,\n    strict: strict_,\n  } = parameters\n\n  const enablePolling = (() => {\n    if (typeof poll_ !== 'undefined') return poll_\n    if (typeof fromBlock === 'bigint') return true\n    if (\n      client.transport.type === 'webSocket' ||\n      client.transport.type === 'ipc'\n    )\n      return false\n    if (\n      client.transport.type === 'fallback' &&\n      (client.transport.transports[0].config.type === 'webSocket' ||\n        client.transport.transports[0].config.type === 'ipc')\n    )\n      return false\n    return true\n  })()\n\n  const pollContractEvent = () => {\n    const strict = strict_ ?? false\n    const observerId = stringify([\n      'watchContractEvent',\n      address,\n      args,\n      batch,\n      client.uid,\n      eventName,\n      pollingInterval,\n      strict,\n      fromBlock,\n    ])\n\n    return observe(observerId, { onLogs, onError }, (emit) => {\n      let previousBlockNumber: bigint\n      if (fromBlock !== undefined) previousBlockNumber = fromBlock - 1n\n      let filter: Filter<'event', abi, eventName> | undefined\n      let initialized = false\n\n      const unwatch = poll(\n        async () => {\n          if (!initialized) {\n            try {\n              filter = (await getAction(\n                client,\n                createContractEventFilter,\n                'createContractEventFilter',\n              )({\n                abi,\n                address,\n                args: args as any,\n                eventName: eventName as any,\n                strict: strict as any,\n                fromBlock,\n              })) as Filter<'event', abi, eventName>\n            } catch {}\n            initialized = true\n            return\n          }\n\n          try {\n            let logs: Log[]\n            if (filter) {\n              logs = await getAction(\n                client,\n                getFilterChanges,\n                'getFilterChanges',\n              )({ filter })\n            } else {\n              // If the filter doesn't exist, we will fall back to use `getLogs`.\n              // The fall back exists because some RPC Providers do not support filters.\n\n              // Fetch the block number to use for `getLogs`.\n              const blockNumber = await getAction(\n                client,\n                getBlockNumber,\n                'getBlockNumber',\n              )({})\n\n              // If the block number has changed, we will need to fetch the logs.\n              // If the block number doesn't exist, we are yet to reach the first poll interval,\n              // so do not emit any logs.\n              if (previousBlockNumber && previousBlockNumber < blockNumber) {\n                logs = await getAction(\n                  client,\n                  getContractEvents,\n                  'getContractEvents',\n                )({\n                  abi,\n                  address,\n                  args,\n                  eventName,\n                  fromBlock: previousBlockNumber + 1n,\n                  toBlock: blockNumber,\n                  strict,\n                } as {} as GetContractEventsParameters)\n              } else {\n                logs = []\n              }\n              previousBlockNumber = blockNumber\n            }\n\n            if (logs.length === 0) return\n            if (batch) emit.onLogs(logs as any)\n            else for (const log of logs) emit.onLogs([log] as any)\n          } catch (err) {\n            // If a filter has been set and gets uninstalled, providers will throw an InvalidInput error.\n            // Reinitialize the filter when this occurs\n            if (filter && err instanceof InvalidInputRpcError)\n              initialized = false\n            emit.onError?.(err as Error)\n          }\n        },\n        {\n          emitOnBegin: true,\n          interval: pollingInterval,\n        },\n      )\n\n      return async () => {\n        if (filter)\n          await getAction(\n            client,\n            uninstallFilter,\n            'uninstallFilter',\n          )({ filter })\n        unwatch()\n      }\n    })\n  }\n\n  const subscribeContractEvent = () => {\n    const strict = strict_ ?? false\n    const observerId = stringify([\n      'watchContractEvent',\n      address,\n      args,\n      batch,\n      client.uid,\n      eventName,\n      pollingInterval,\n      strict,\n    ])\n\n    let active = true\n    let unsubscribe = () => (active = false)\n    return observe(observerId, { onLogs, onError }, (emit) => {\n      ;(async () => {\n        try {\n          const transport = (() => {\n            if (client.transport.type === 'fallback') {\n              const transport = client.transport.transports.find(\n                (transport: ReturnType<Transport>) =>\n                  transport.config.type === 'webSocket' ||\n                  transport.config.type === 'ipc',\n              )\n              if (!transport) return client.transport\n              return transport.value\n            }\n            return client.transport\n          })()\n\n          const topics: LogTopic[] = eventName\n            ? encodeEventTopics({\n                abi: abi,\n                eventName: eventName,\n                args,\n              } as EncodeEventTopicsParameters)\n            : []\n\n          const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n            params: ['logs', { address, topics }],\n            onData(data: any) {\n              if (!active) return\n              const log = data.result\n              try {\n                const { eventName, args } = decodeEventLog({\n                  abi: abi,\n                  data: log.data,\n                  topics: log.topics as any,\n                  strict: strict_,\n                })\n                const formatted = formatLog(log, {\n                  args,\n                  eventName: eventName as string,\n                })\n                emit.onLogs([formatted] as any)\n              } catch (err) {\n                let eventName: string | undefined\n                let isUnnamed: boolean | undefined\n                if (\n                  err instanceof DecodeLogDataMismatch ||\n                  err instanceof DecodeLogTopicsMismatch\n                ) {\n                  // If strict mode is on, and log data/topics do not match event definition, skip.\n                  if (strict_) return\n                  eventName = err.abiItem.name\n                  isUnnamed = err.abiItem.inputs?.some(\n                    (x) => !('name' in x && x.name),\n                  )\n                }\n\n                // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).\n                const formatted = formatLog(log, {\n                  args: isUnnamed ? [] : {},\n                  eventName,\n                })\n                emit.onLogs([formatted] as any)\n              }\n            },\n            onError(error: Error) {\n              emit.onError?.(error)\n            },\n          })\n          unsubscribe = unsubscribe_\n          if (!active) unsubscribe()\n        } catch (err) {\n          onError?.(err as Error)\n        }\n      })()\n      return () => unsubscribe()\n    })\n  }\n\n  return enablePolling ? pollContractEvent() : subscribeContractEvent()\n}\n", "import type { ErrorType } from '../errors/utils.js'\nimport type { MaybePromise } from '../types/utils.js'\n\ntype Callback = ((...args: any[]) => any) | undefined\ntype Callbacks = Record<string, Callback>\n\nexport type ObserveErrorType = ErrorType\n\n/** @internal */\nexport const listenersCache = /*#__PURE__*/ new Map<\n  string,\n  { id: number; fns: Callbacks }[]\n>()\n/** @internal */\nexport const cleanupCache = /*#__PURE__*/ new Map<\n  string,\n  () => void | Promise<void>\n>()\n\ntype EmitFunction<callbacks extends Callbacks> = (\n  emit: callbacks,\n) => MaybePromise<void | (() => void) | (() => Promise<void>)>\n\nlet callbackCount = 0\n\n/**\n * @description Sets up an observer for a given function. If another function\n * is set up under the same observer id, the function will only be called once\n * for both instances of the observer.\n */\nexport function observe<callbacks extends Callbacks>(\n  observerId: string,\n  callbacks: callbacks,\n  fn: EmitFunction<callbacks>,\n) {\n  const callbackId = ++callbackCount\n\n  const getListeners = () => listenersCache.get(observerId) || []\n\n  const unsubscribe = () => {\n    const listeners = getListeners()\n    listenersCache.set(\n      observerId,\n      listeners.filter((cb: any) => cb.id !== callbackId),\n    )\n  }\n\n  const unwatch = () => {\n    const listeners = getListeners()\n    if (!listeners.some((cb: any) => cb.id === callbackId)) return\n    const cleanup = cleanupCache.get(observerId)\n    if (listeners.length === 1 && cleanup) {\n      const p = cleanup()\n      if (p instanceof Promise) p.catch(() => {})\n    }\n    unsubscribe()\n  }\n\n  const listeners = getListeners()\n  listenersCache.set(observerId, [\n    ...listeners,\n    { id: callbackId, fns: callbacks },\n  ])\n\n  if (listeners && listeners.length > 0) return unwatch\n\n  const emit: callbacks = {} as callbacks\n  for (const key in callbacks) {\n    emit[key] = ((\n      ...args: Parameters<NonNullable<callbacks[keyof callbacks]>>\n    ) => {\n      const listeners = getListeners()\n      if (listeners.length === 0) return\n      for (const listener of listeners) listener.fns[key]?.(...args)\n    }) as callbacks[Extract<keyof callbacks, string>]\n  }\n\n  const cleanup = fn(emit)\n  if (typeof cleanup === 'function') cleanupCache.set(observerId, cleanup)\n\n  return unwatch\n}\n", "export async function wait(time: number) {\n  return new Promise((res) => setTimeout(res, time))\n}\n", "import type { ErrorType } from '../errors/utils.js'\nimport { wait } from './wait.js'\n\ntype PollOptions<data> = {\n  // Whether or not to emit when the polling starts.\n  emitOnBegin?: boolean | undefined\n  // The initial wait time (in ms) before polling.\n  initialWaitTime?: ((data: data | void) => Promise<number>) | undefined\n  // The interval (in ms).\n  interval: number\n}\n\nexport type PollErrorType = ErrorType\n\n/**\n * @description Polls a function at a specified interval.\n */\nexport function poll<data>(\n  fn: ({ unpoll }: { unpoll: () => void }) => Promise<data | void>,\n  { emitOnBegin, initialWaitTime, interval }: PollOptions<data>,\n) {\n  let active = true\n\n  const unwatch = () => (active = false)\n\n  const watch = async () => {\n    let data: data | undefined | void\n    if (emitOnBegin) data = await fn({ unpoll: unwatch })\n\n    const initialWait = (await initialWaitTime?.(data)) ?? interval\n    await wait(initialWait)\n\n    const poll = async () => {\n      if (!active) return\n      await fn({ unpoll: unwatch })\n      await wait(interval)\n      poll()\n    }\n\n    poll()\n  }\n  watch()\n\n  return unwatch\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\n/** @internal */\nexport const promiseCache = /*#__PURE__*/ new Map()\n/** @internal */\nexport const responseCache = /*#__PURE__*/ new Map()\n\nexport type GetCacheErrorType = ErrorType\n\nexport function getCache<data>(cacheKey: string) {\n  const buildCache = <data>(cacheKey: string, cache: Map<string, data>) => ({\n    clear: () => cache.delete(cacheKey),\n    get: () => cache.get(cacheKey),\n    set: (data: data) => cache.set(cacheKey, data),\n  })\n\n  const promise = buildCache<Promise<data>>(cacheKey, promiseCache)\n  const response = buildCache<{ created: Date; data: data }>(\n    cacheKey,\n    responseCache,\n  )\n\n  return {\n    clear: () => {\n      promise.clear()\n      response.clear()\n    },\n    promise,\n    response,\n  }\n}\n\ntype WithCacheParameters = {\n  /** The key to cache the data against. */\n  cacheKey: string\n  /** The time that cached data will remain in memory. Default: Infinity (no expiry) */\n  cacheTime?: number | undefined\n}\n\n/**\n * @description Returns the result of a given promise, and caches the result for\n * subsequent invocations against a provided cache key.\n */\nexport async function withCache<data>(\n  fn: () => Promise<data>,\n  { cacheKey, cacheTime = Number.POSITIVE_INFINITY }: WithCacheParameters,\n) {\n  const cache = getCache<data>(cacheKey)\n\n  // If a response exists in the cache, and it's not expired, return it\n  // and do not invoke the promise.\n  // If the max age is 0, the cache is disabled.\n  const response = cache.response.get()\n  if (response && cacheTime > 0) {\n    const age = Date.now() - response.created.getTime()\n    if (age < cacheTime) return response.data\n  }\n\n  let promise = cache.promise.get()\n  if (!promise) {\n    promise = fn()\n\n    // Store the promise in the cache so that subsequent invocations\n    // will wait for the same promise to resolve (deduping).\n    cache.promise.set(promise)\n  }\n\n  try {\n    const data = await promise\n\n    // Store the response in the cache so that subsequent invocations\n    // will return the same response.\n    cache.response.set({ created: new Date(), data })\n\n    return data\n  } finally {\n    // Clear the promise cache so that subsequent invocations will\n    // invoke the promise again.\n    cache.promise.clear()\n  }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type GetCacheErrorType,\n  getCache,\n  withCache,\n} from '../../utils/promise/withCache.js'\n\nexport type GetBlockNumberParameters = {\n  /** Time (in ms) that cached block number will remain in memory. */\n  cacheTime?: number | undefined\n}\n\nexport type GetBlockNumberReturnType = bigint\n\nexport type GetBlockNumberErrorType = RequestErrorType | ErrorType\n\nconst cacheKey = (id: string) => `blockNumber.${id}`\n\n/** @internal */\nexport type GetBlockNumberCacheErrorType = GetCacheErrorType | ErrorType\n\n/** @internal */\nexport function getBlockNumberCache(id: string) {\n  return getCache(cacheKey(id))\n}\n\n/**\n * Returns the number of the most recent block seen.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlockNumber\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods: [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber)\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockNumberParameters}\n * @returns The number of the block. {@link GetBlockNumberReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlockNumber } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const blockNumber = await getBlockNumber(client)\n * // 69420n\n */\nexport async function getBlockNumber<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { cacheTime = client.cacheTime }: GetBlockNumberParameters = {},\n): Promise<GetBlockNumberReturnType> {\n  const blockNumberHex = await withCache(\n    () =>\n      client.request({\n        method: 'eth_blockNumber',\n      }),\n    { cacheKey: cacheKey(client.uid), cacheTime },\n  )\n  return BigInt(blockNumberHex)\n}\n", "import type { Abi, AbiEvent, ExtractAbiEvent } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { RpcLog } from '../../index.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter, FilterType } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { DecodeEventLogErrorType } from '../../utils/abi/decodeEventLog.js'\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type FormatLogErrorType,\n  formatLog,\n} from '../../utils/formatters/log.js'\n\nexport type GetFilterChangesParameters<\n  filterType extends FilterType = FilterType,\n  abi extends Abi | readonly unknown[] | undefined = undefined,\n  eventName extends string | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n  filter: Filter<filterType, abi, eventName, any, strict, fromBlock, toBlock>\n}\n\nexport type GetFilterChangesReturnType<\n  filterType extends FilterType = FilterType,\n  abi extends Abi | readonly unknown[] | undefined = undefined,\n  eventName extends string | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  _AbiEvent extends AbiEvent | undefined = abi extends Abi\n    ? eventName extends string\n      ? ExtractAbiEvent<abi, eventName>\n      : undefined\n    : undefined,\n  _Pending extends boolean =\n    | (fromBlock extends 'pending' ? true : false)\n    | (toBlock extends 'pending' ? true : false),\n> = filterType extends 'event'\n  ? Log<bigint, number, _Pending, _AbiEvent, strict, abi, eventName>[]\n  : Hash[]\n\nexport type GetFilterChangesErrorType =\n  | RequestErrorType\n  | DecodeEventLogErrorType\n  | FormatLogErrorType\n  | ErrorType\n\n/**\n * Returns a list of logs or hashes based on a [Filter](/docs/glossary/terms#filter) since the last time it was called.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFilterChanges\n * - JSON-RPC Methods: [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges)\n *\n * A Filter can be created from the following actions:\n *\n * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n * - [`createContractEventFilter`](https://viem.sh/docs/contract/createContractEventFilter)\n * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n *\n * Depending on the type of filter, the return value will be different:\n *\n * - If the filter was created with `createContractEventFilter` or `createEventFilter`, it returns a list of logs.\n * - If the filter was created with `createPendingTransactionFilter`, it returns a list of transaction hashes.\n * - If the filter was created with `createBlockFilter`, it returns a list of block hashes.\n *\n * @param client - Client to use\n * @param parameters - {@link GetFilterChangesParameters}\n * @returns Logs or hashes. {@link GetFilterChangesReturnType}\n *\n * @example\n * // Blocks\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createBlockFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createBlockFilter(client)\n * const hashes = await getFilterChanges(client, { filter })\n *\n * @example\n * // Contract Events\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createContractEventFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createContractEventFilter(client, {\n *   address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n *   abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n *   eventName: 'Transfer',\n * })\n * const logs = await getFilterChanges(client, { filter })\n *\n * @example\n * // Raw Events\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createEventFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createEventFilter(client, {\n *   address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n *   event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n * })\n * const logs = await getFilterChanges(client, { filter })\n *\n * @example\n * // Transactions\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createPendingTransactionFilter(client)\n * const hashes = await getFilterChanges(client, { filter })\n */\nexport async function getFilterChanges<\n  transport extends Transport,\n  chain extends Chain | undefined,\n  filterType extends FilterType,\n  const abi extends Abi | readonly unknown[] | undefined,\n  eventName extends string | undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n  _client: Client<transport, chain>,\n  {\n    filter,\n  }: GetFilterChangesParameters<\n    filterType,\n    abi,\n    eventName,\n    strict,\n    fromBlock,\n    toBlock\n  >,\n): Promise<\n  GetFilterChangesReturnType<\n    filterType,\n    abi,\n    eventName,\n    strict,\n    fromBlock,\n    toBlock\n  >\n> {\n  const strict = 'strict' in filter && filter.strict\n\n  const logs = await filter.request({\n    method: 'eth_getFilterChanges',\n    params: [filter.id],\n  })\n\n  if (typeof logs[0] === 'string')\n    return logs as GetFilterChangesReturnType<\n      filterType,\n      abi,\n      eventName,\n      strict,\n      fromBlock,\n      toBlock\n    >\n\n  const formattedLogs = logs.map((log) => formatLog(log as RpcLog))\n  if (!('abi' in filter) || !filter.abi)\n    return formattedLogs as GetFilterChangesReturnType<\n      filterType,\n      abi,\n      eventName,\n      strict,\n      fromBlock,\n      toBlock\n    >\n  return parseEventLogs({\n    abi: filter.abi,\n    logs: formattedLogs,\n    strict,\n  }) as unknown as GetFilterChangesReturnType<\n    filterType,\n    abi,\n    eventName,\n    strict,\n    fromBlock,\n    toBlock\n  >\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type UninstallFilterParameters = {\n  filter: Filter<any>\n}\nexport type UninstallFilterReturnType = boolean\n\nexport type UninstallFilterErrorType = RequestErrorType | ErrorType\n\n/**\n * Destroys a [`Filter`](https://viem.sh/docs/glossary/types#filter).\n *\n * - Docs: https://viem.sh/docs/actions/public/uninstallFilter\n * - JSON-RPC Methods: [`eth_uninstallFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_uninstallFilter)\n *\n * Destroys a Filter that was created from one of the following Actions:\n * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n *\n * @param client - Client to use\n * @param parameters - {@link UninstallFilterParameters}\n * @returns A boolean indicating if the Filter was successfully uninstalled. {@link UninstallFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter, uninstallFilter } from 'viem/public'\n *\n * const filter = await createPendingTransactionFilter(client)\n * const uninstalled = await uninstallFilter(client, { filter })\n * // true\n */\nexport async function uninstallFilter<\n  transport extends Transport,\n  chain extends Chain | undefined,\n>(\n  _client: Client<transport, chain>,\n  { filter }: UninstallFilterParameters,\n): Promise<UninstallFilterReturnType> {\n  return filter.request({\n    method: 'eth_uninstallFilter',\n    params: [filter.id],\n  })\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { TransactionSerializedGeneric } from '../../types/transaction.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type SendRawTransactionParameters = {\n  /** The signed serialized transaction. */\n  serializedTransaction: TransactionSerializedGeneric\n}\n\nexport type SendRawTransactionReturnType = Hash\n\nexport type SendRawTransactionErrorType = RequestErrorType | ErrorType\n\n/**\n * Sends a **signed** transaction to the network\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransaction\n * - JSON-RPC Method: [`eth_sendRawTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)\n *\n * @param client - Client to use\n * @param parameters - {@link SendRawTransactionParameters}\n * @returns The transaction hash. {@link SendRawTransactionReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendRawTransaction } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n *\n * const hash = await sendRawTransaction(client, {\n *   serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n * })\n */\nexport async function sendRawTransaction<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { serializedTransaction }: SendRawTransactionParameters,\n): Promise<SendRawTransactionReturnType> {\n  return client.request(\n    {\n      method: 'eth_sendRawTransaction',\n      params: [serializedTransaction],\n    },\n    { retryCount: 0 },\n  )\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport { wait } from '../wait.js'\n\nexport type WithRetryParameters = {\n  // The delay (in ms) between retries.\n  delay?:\n    | ((config: { count: number; error: Error }) => number)\n    | number\n    | undefined\n  // The max number of times to retry.\n  retryCount?: number | undefined\n  // Whether or not to retry when an error is thrown.\n  shouldRetry?:\n    | (({\n        count,\n        error,\n      }: {\n        count: number\n        error: Error\n      }) => Promise<boolean> | boolean)\n    | undefined\n}\n\nexport type WithRetryErrorType = ErrorType\n\nexport function withRetry<data>(\n  fn: () => Promise<data>,\n  {\n    delay: delay_ = 100,\n    retryCount = 2,\n    shouldRetry = () => true,\n  }: WithRetryParameters = {},\n) {\n  return new Promise<data>((resolve, reject) => {\n    const attemptRetry = async ({ count = 0 } = {}) => {\n      const retry = async ({ error }: { error: Error }) => {\n        const delay =\n          typeof delay_ === 'function' ? delay_({ count, error }) : delay_\n        if (delay) await wait(delay)\n        attemptRetry({ count: count + 1 })\n      }\n\n      try {\n        const data = await fn()\n        resolve(data)\n      } catch (err) {\n        if (\n          count < retryCount &&\n          (await shouldRetry({ count, error: err as Error }))\n        )\n          return retry({ error: err as Error })\n        reject(err)\n      }\n    }\n    attemptRetry()\n  })\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type {\n  Chain,\n  ExtractChainFormatterReturnType,\n} from '../../types/chain.js'\nimport type { RpcTransactionReceipt } from '../../types/rpc.js'\nimport type { TransactionReceipt } from '../../types/transaction.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { hexToNumber } from '../encoding/fromHex.js'\n\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\nimport { formatLog } from './log.js'\nimport { transactionType } from './transaction.js'\n\nexport type FormattedTransactionReceipt<\n  chain extends Chain | undefined = undefined,\n> = ExtractChainFormatterReturnType<\n  chain,\n  'transactionReceipt',\n  TransactionReceipt\n>\n\nexport const receiptStatuses = {\n  '0x0': 'reverted',\n  '0x1': 'success',\n} as const\n\nexport type FormatTransactionReceiptErrorType = ErrorType\n\nexport function formatTransactionReceipt(\n  transactionReceipt: ExactPartial<RpcTransactionReceipt>,\n  _?: string | undefined,\n) {\n  const receipt = {\n    ...transactionReceipt,\n    blockNumber: transactionReceipt.blockNumber\n      ? BigInt(transactionReceipt.blockNumber)\n      : null,\n    contractAddress: transactionReceipt.contractAddress\n      ? transactionReceipt.contractAddress\n      : null,\n    cumulativeGasUsed: transactionReceipt.cumulativeGasUsed\n      ? BigInt(transactionReceipt.cumulativeGasUsed)\n      : null,\n    effectiveGasPrice: transactionReceipt.effectiveGasPrice\n      ? BigInt(transactionReceipt.effectiveGasPrice)\n      : null,\n    gasUsed: transactionReceipt.gasUsed\n      ? BigInt(transactionReceipt.gasUsed)\n      : null,\n    logs: transactionReceipt.logs\n      ? transactionReceipt.logs.map((log) => formatLog(log))\n      : null,\n    to: transactionReceipt.to ? transactionReceipt.to : null,\n    transactionIndex: transactionReceipt.transactionIndex\n      ? hexToNumber(transactionReceipt.transactionIndex)\n      : null,\n    status: transactionReceipt.status\n      ? receiptStatuses[transactionReceipt.status]\n      : null,\n    type: transactionReceipt.type\n      ? transactionType[\n          transactionReceipt.type as keyof typeof transactionType\n        ] || transactionReceipt.type\n      : null,\n  } as TransactionReceipt\n\n  if (transactionReceipt.blobGasPrice)\n    receipt.blobGasPrice = BigInt(transactionReceipt.blobGasPrice)\n  if (transactionReceipt.blobGasUsed)\n    receipt.blobGasUsed = BigInt(transactionReceipt.blobGasUsed)\n\n  return receipt\n}\n\nexport type DefineTransactionReceiptErrorType =\n  | DefineFormatterErrorType\n  | ErrorType\n\nexport const defineTransactionReceipt = /*#__PURE__*/ defineFormatter(\n  'transactionReceipt',\n  formatTransactionReceipt,\n)\n", "import type { Address } from 'abitype'\n\nimport type { JsonRpcAccount } from '../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../accounts/utils/parseAccount.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Account } from '../types/account.js'\nimport type { BlockTag } from '../types/block.js'\nimport type { Chain } from '../types/chain.js'\nimport type { DataSuffix } from '../types/dataSuffix.js'\nimport type {\n  EIP1193RequestFn,\n  EIP1474Methods,\n  RpcSchema,\n} from '../types/eip1193.js'\nimport type { ExactPartial, Prettify } from '../types/utils.js'\nimport type {\n  CcipRequestParameters,\n  CcipRequestReturnType,\n} from '../utils/ccip.js'\nimport { uid } from '../utils/uid.js'\nimport type { PublicActions } from './decorators/public.js'\nimport type { WalletActions } from './decorators/wallet.js'\nimport type { Transport } from './transports/createTransport.js'\n\nexport type ClientConfig<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  accountOrAddress extends Account | Address | undefined =\n    | Account\n    | Address\n    | undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = {\n  /** The Account to use for the Client. This will be used for Actions that require an account as an argument. */\n  account?: accountOrAddress | Account | Address | undefined\n  /** Flags for batch settings. */\n  batch?:\n    | {\n        /** Toggle to enable `eth_call` multicall aggregation. */\n        multicall?: boolean | Prettify<MulticallBatchOptions> | undefined\n      }\n    | undefined\n  /**\n   * Default block tag to use for RPC requests.\n   *\n   * If the chain supports a pre-confirmation mechanism\n   * (set via `chain.experimental_preconfirmationTime`), defaults to `'pending'`.\n   *\n   * @default 'latest'\n   */\n  experimental_blockTag?: BlockTag | undefined\n  /**\n   * Time (in ms) that cached data will remain in memory.\n   * @default chain.blockTime / 3\n   */\n  cacheTime?: number | undefined\n  /**\n   * [CCIP Read](https://eips.ethereum.org/EIPS/eip-3668) configuration.\n   * If `false`, the client will not support offchain CCIP lookups.\n   */\n  ccipRead?:\n    | {\n        /**\n         * A function that will be called to make the offchain CCIP lookup request.\n         * @see https://eips.ethereum.org/EIPS/eip-3668#client-lookup-protocol\n         */\n        request?: (\n          parameters: CcipRequestParameters,\n        ) => Promise<CcipRequestReturnType>\n      }\n    | false\n    | undefined\n  /** Chain for the client. */\n  chain?: Chain | undefined | chain\n  /** Data suffix to append to transaction data. */\n  dataSuffix?: DataSuffix | undefined\n  /** A key for the client. */\n  key?: string | undefined\n  /** A name for the client. */\n  name?: string | undefined\n  /**\n   * Frequency (in ms) for polling enabled actions & events.\n   * @default chain.blockTime / 3\n   */\n  pollingInterval?: number | undefined\n  /**\n   * Typed JSON-RPC schema for the client.\n   */\n  rpcSchema?: rpcSchema | undefined\n  /** The RPC transport */\n  transport: transport\n  /** The type of client. */\n  type?: string | undefined\n}\n\n// Actions that are used internally by other Actions (ie. `call` is used by `readContract`).\n// They are allowed to be extended, but must conform to their parameter & return type interfaces.\n// Example: an extended `call` action must accept `CallParameters` as parameters,\n// and conform to the `CallReturnType` return type.\ntype ExtendableProtectedActions<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n> = Pick<\n  PublicActions<transport, chain, account>,\n  | 'call'\n  | 'createContractEventFilter'\n  | 'createEventFilter'\n  | 'estimateContractGas'\n  | 'estimateGas'\n  | 'getBlock'\n  | 'getBlockNumber'\n  | 'getChainId'\n  | 'getContractEvents'\n  | 'getEnsText'\n  | 'getFilterChanges'\n  | 'getGasPrice'\n  | 'getLogs'\n  | 'getTransaction'\n  | 'getTransactionCount'\n  | 'getTransactionReceipt'\n  | 'prepareTransactionRequest'\n  | 'readContract'\n  | 'sendRawTransaction'\n  | 'simulateContract'\n  | 'uninstallFilter'\n  | 'watchBlockNumber'\n  | 'watchContractEvent'\n> &\n  Pick<WalletActions<chain, account>, 'sendTransaction' | 'writeContract'>\n\n// TODO: Move `transport` to slot index 2 since `chain` and `account` used more frequently.\n// Otherwise, we end up with a lot of `Client<Transport, chain, account>` in actions.\nexport type Client<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n  extended extends Extended | undefined = Extended | undefined,\n> = Client_Base<transport, chain, account, rpcSchema> &\n  (extended extends Extended ? extended : unknown) & {\n    extend: <\n      const client extends Extended &\n        ExactPartial<ExtendableProtectedActions<transport, chain, account>>,\n    >(\n      fn: (\n        client: Client<transport, chain, account, rpcSchema, extended>,\n      ) => client,\n    ) => Client<\n      transport,\n      chain,\n      account,\n      rpcSchema,\n      Prettify<client> & (extended extends Extended ? extended : unknown)\n    >\n  }\n\ntype Client_Base<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = {\n  /** The Account of the Client. */\n  account: account\n  /** Flags for batch settings. */\n  batch?: ClientConfig['batch'] | undefined\n  /** Time (in ms) that cached data will remain in memory. */\n  cacheTime: number\n  /** [CCIP Read](https://eips.ethereum.org/EIPS/eip-3668) configuration. */\n  ccipRead?: ClientConfig['ccipRead'] | undefined\n  /** Chain for the client. */\n  chain: chain\n  /** Data suffix to append to transaction data. */\n  dataSuffix?: DataSuffix | undefined\n  /** Default block tag to use for RPC requests. */\n  experimental_blockTag?: BlockTag | undefined\n  /** A key for the client. */\n  key: string\n  /** A name for the client. */\n  name: string\n  /** Frequency (in ms) for polling enabled actions & events. Defaults to 4_000 milliseconds. */\n  pollingInterval: number\n  /** Request function wrapped with friendly error handling */\n  request: EIP1193RequestFn<\n    rpcSchema extends undefined ? EIP1474Methods : rpcSchema\n  >\n  /** The RPC transport */\n  transport: ReturnType<transport>['config'] & ReturnType<transport>['value']\n  /** The type of client. */\n  type: string\n  /** A unique ID for the client. */\n  uid: string\n}\n\ntype Extended = Prettify<\n  // disallow redefining base properties\n  { [_ in keyof Client_Base]?: undefined } & {\n    [key: string]: unknown\n  }\n>\n\nexport type MulticallBatchOptions = {\n  /** The maximum size (in bytes) for each calldata chunk. @default 1_024 */\n  batchSize?: number | undefined\n  /** Enable deployless multicall. */\n  deployless?: boolean | undefined\n  /** The maximum number of milliseconds to wait before sending a batch. @default 0 */\n  wait?: number | undefined\n}\n\nexport type CreateClientErrorType = ParseAccountErrorType | ErrorType\n\nexport function createClient<\n  transport extends Transport,\n  chain extends Chain | undefined = undefined,\n  accountOrAddress extends Account | Address | undefined = undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n>(\n  parameters: ClientConfig<transport, chain, accountOrAddress, rpcSchema>,\n): Prettify<\n  Client<\n    transport,\n    chain,\n    accountOrAddress extends Address\n      ? Prettify<JsonRpcAccount<accountOrAddress>>\n      : accountOrAddress,\n    rpcSchema\n  >\n>\n\nexport function createClient(parameters: ClientConfig): Client {\n  const {\n    batch,\n    chain,\n    ccipRead,\n    dataSuffix,\n    key = 'base',\n    name = 'Base Client',\n    type = 'base',\n  } = parameters\n\n  const experimental_blockTag =\n    parameters.experimental_blockTag ??\n    (typeof chain?.experimental_preconfirmationTime === 'number'\n      ? 'pending'\n      : undefined)\n  const blockTime = chain?.blockTime ?? 12_000\n\n  const defaultPollingInterval = Math.min(\n    Math.max(Math.floor(blockTime / 2), 500),\n    4_000,\n  )\n  const pollingInterval = parameters.pollingInterval ?? defaultPollingInterval\n  const cacheTime = parameters.cacheTime ?? pollingInterval\n\n  const account = parameters.account\n    ? parseAccount(parameters.account)\n    : undefined\n  const { config, request, value } = parameters.transport({\n    account,\n    chain,\n    pollingInterval,\n  })\n  const transport = { ...config, ...value }\n\n  const client = {\n    account,\n    batch,\n    cacheTime,\n    ccipRead,\n    chain,\n    dataSuffix,\n    key,\n    name,\n    pollingInterval,\n    request,\n    transport,\n    type,\n    uid: uid(),\n    ...(experimental_blockTag ? { experimental_blockTag } : {}),\n  }\n\n  function extend(base: typeof client) {\n    type ExtendFn = (base: typeof client) => unknown\n    return (extendFn: ExtendFn) => {\n      const extended = extendFn(base) as Extended\n      for (const key in client) delete extended[key]\n      const combined = { ...base, ...extended }\n      return Object.assign(combined, { extend: extend(combined as any) })\n    }\n  }\n\n  return Object.assign(client, { extend: extend(client) as any })\n}\n\n/**\n * Defines a typed JSON-RPC schema for the client.\n * Note: This is a runtime noop function.\n */\nexport function rpcSchema<rpcSchema extends RpcSchema>(): rpcSchema {\n  return null as any\n}\n", "const size = 256\nlet index = size\nlet buffer: string\n\nexport function uid(length = 11) {\n  if (!buffer || index + length > size * 2) {\n    buffer = ''\n    index = 0\n    for (let i = 0; i < size; i++) {\n      buffer += ((256 + Math.random() * 256) | 0).toString(16).substring(1)\n    }\n  }\n  return buffer.substring(index, index++ + length)\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  addressResolverAbi,\n  universalResolverResolveAbi,\n} from '../../constants/abis.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type TrimErrorType, trim } from '../../utils/data/trim.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport { isNullUniversalResolverError } from '../../utils/ens/errors.js'\nimport { localBatchGatewayUrl } from '../../utils/ens/localBatchGatewayRequest.js'\nimport { type NamehashErrorType, namehash } from '../../utils/ens/namehash.js'\nimport {\n  type PacketToBytesErrorType,\n  packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type ReadContractParameters,\n  readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsAddressParameters = Prettify<\n  Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {\n    /**\n     * ENSIP-9 compliant coinType (chain) to get ENS address for.\n     *\n     * To get the `coinType` for a chain id, use the `toCoinType` function:\n     * ```ts\n     * import { toCoinType } from 'viem'\n     * import { base } from 'viem/chains'\n     *\n     * const coinType = toCoinType(base.id)\n     * ```\n     *\n     * @default 60n\n     */\n    coinType?: bigint | undefined\n    /**\n     * Universal Resolver gateway URLs to use for resolving CCIP-read requests.\n     */\n    gatewayUrls?: string[] | undefined\n    /**\n     * Name to get the address for.\n     */\n    name: string\n    /**\n     * Whether or not to throw errors propagated from the ENS Universal Resolver Contract.\n     */\n    strict?: boolean | undefined\n    /**\n     * Address of ENS Universal Resolver Contract.\n     */\n    universalResolverAddress?: Address | undefined\n  }\n>\n\nexport type GetEnsAddressReturnType = Address | null\n\nexport type GetEnsAddressErrorType =\n  | GetChainContractAddressErrorType\n  | EncodeFunctionDataErrorType\n  | NamehashErrorType\n  | ToHexErrorType\n  | PacketToBytesErrorType\n  | DecodeFunctionResultErrorType\n  | TrimErrorType\n  | ErrorType\n\n/**\n * Gets address for ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsAddress\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsAddressParameters}\n * @returns Address for ENS name or `null` if not found. {@link GetEnsAddressReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsAddress, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const ensAddress = await getEnsAddress(client, {\n *   name: normalize('wevm.eth'),\n * })\n * // '0xd2135CfB216b74109775236E36d4b433F1DF507B'\n */\nexport async function getEnsAddress<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: GetEnsAddressParameters,\n): Promise<GetEnsAddressReturnType> {\n  const { blockNumber, blockTag, coinType, name, gatewayUrls, strict } =\n    parameters\n  const { chain } = client\n\n  const universalResolverAddress = (() => {\n    if (parameters.universalResolverAddress)\n      return parameters.universalResolverAddress\n    if (!chain)\n      throw new Error(\n        'client chain not configured. universalResolverAddress is required.',\n      )\n    return getChainContractAddress({\n      blockNumber,\n      chain,\n      contract: 'ensUniversalResolver',\n    })\n  })()\n\n  const tlds = chain?.ensTlds\n  if (tlds && !tlds.some((tld) => name.endsWith(tld))) return null\n\n  const args = (() => {\n    if (coinType != null) return [namehash(name), BigInt(coinType)] as const\n    return [namehash(name)] as const\n  })()\n\n  try {\n    const functionData = encodeFunctionData({\n      abi: addressResolverAbi,\n      functionName: 'addr',\n      args,\n    })\n\n    const readContractParameters = {\n      address: universalResolverAddress,\n      abi: universalResolverResolveAbi,\n      functionName: 'resolveWithGateways',\n      args: [\n        toHex(packetToBytes(name)),\n        functionData,\n        gatewayUrls ?? [localBatchGatewayUrl],\n      ],\n      blockNumber,\n      blockTag,\n    } as const\n\n    const readContractAction = getAction(client, readContract, 'readContract')\n\n    const res = await readContractAction(readContractParameters)\n\n    if (res[0] === '0x') return null\n\n    const address = decodeFunctionResult({\n      abi: addressResolverAbi,\n      args,\n      functionName: 'addr',\n      data: res[0],\n    })\n\n    if (address === '0x') return null\n    if (trim(address) === '0x00') return null\n    return address\n  } catch (err) {\n    if (strict) throw err\n    if (isNullUniversalResolverError(err)) return null\n    throw err\n  }\n}\n", "import { BaseError } from '../../errors/base.js'\nimport { ContractFunctionRevertedError } from '../../errors/contract.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\n/** @internal */\nexport type IsNullUniversalResolverErrorErrorType = ErrorType\n\n/*\n * @description Checks if error is a valid null result UniversalResolver error\n */\nexport function isNullUniversalResolverError(err: unknown): boolean {\n  if (!(err instanceof BaseError)) return false\n  const cause = err.walk((e) => e instanceof ContractFunctionRevertedError)\n  if (!(cause instanceof ContractFunctionRevertedError)) return false\n\n  if (cause.data?.errorName === 'HttpError') return true\n  if (cause.data?.errorName === 'ResolverError') return true\n  if (cause.data?.errorName === 'ResolverNotContract') return true\n  if (cause.data?.errorName === 'ResolverNotFound') return true\n  if (cause.data?.errorName === 'ReverseAddressMismatch') return true\n  if (cause.data?.errorName === 'UnsupportedResolverProfile') return true\n\n  return false\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray } from '../../types/misc.js'\nimport { type ConcatErrorType, concat } from '../data/concat.js'\nimport {\n  type StringToBytesErrorType,\n  stringToBytes,\n  type ToBytesErrorType,\n  toBytes,\n} from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n  type EncodedLabelToLabelhashErrorType,\n  encodedLabelToLabelhash,\n} from './encodedLabelToLabelhash.js'\n\nexport type NamehashErrorType =\n  | BytesToHexErrorType\n  | EncodedLabelToLabelhashErrorType\n  | ToBytesErrorType\n  | Keccak256ErrorType\n  | StringToBytesErrorType\n  | ConcatErrorType\n  | ErrorType\n\n/**\n * @description Hashes ENS name\n *\n * - Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `namehash`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @example\n * namehash('wevm.eth')\n * '0x08c85f2f4059e930c45a6aeff9dcd3bd95dc3c5c1cddef6a0626b31152248560'\n *\n * @link https://eips.ethereum.org/EIPS/eip-137\n */\nexport function namehash(name: string) {\n  let result = new Uint8Array(32).fill(0) as ByteArray\n  if (!name) return bytesToHex(result)\n\n  const labels = name.split('.')\n  // Iterate in reverse order building up hash\n  for (let i = labels.length - 1; i >= 0; i -= 1) {\n    const hashFromEncodedLabel = encodedLabelToLabelhash(labels[i])\n    const hashed = hashFromEncodedLabel\n      ? toBytes(hashFromEncodedLabel)\n      : keccak256(stringToBytes(labels[i]), 'bytes')\n    result = keccak256(concat([result, hashed]), 'bytes')\n  }\n\n  return bytesToHex(result)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\n\nexport type EncodedLabelToLabelhashErrorType = IsHexErrorType | ErrorType\n\nexport function encodedLabelToLabelhash(label: string): Hex | null {\n  if (label.length !== 66) return null\n  if (label.indexOf('[') !== 0) return null\n  if (label.indexOf(']') !== 65) return null\n  const hash = `0x${label.slice(1, 65)}`\n  if (!isHex(hash)) return null\n  return hash\n}\n", "// Adapted from https://github.com/mafintosh/dns-packet\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray } from '../../types/misc.js'\nimport {\n  type StringToBytesErrorType,\n  stringToBytes,\n} from '../encoding/toBytes.js'\nimport {\n  type EncodeLabelhashErrorType,\n  encodeLabelhash,\n} from './encodeLabelhash.js'\nimport { type LabelhashErrorType, labelhash } from './labelhash.js'\n\nexport type PacketToBytesErrorType =\n  | EncodeLabelhashErrorType\n  | LabelhashErrorType\n  | StringToBytesErrorType\n  | ErrorType\n\n/*\n * @description Encodes a DNS packet into a ByteArray containing a UDP payload.\n *\n * @example\n * packetToBytes('awkweb.eth')\n * '0x0661776b7765620365746800'\n *\n * @see https://docs.ens.domains/resolution/names#dns\n *\n */\nexport function packetToBytes(packet: string): ByteArray {\n  // strip leading and trailing `.`\n  const value = packet.replace(/^\\.|\\.$/gm, '')\n  if (value.length === 0) return new Uint8Array(1)\n\n  const bytes = new Uint8Array(stringToBytes(value).byteLength + 2)\n\n  let offset = 0\n  const list = value.split('.')\n  for (let i = 0; i < list.length; i++) {\n    let encoded = stringToBytes(list[i])\n    // if the length is > 255, make the encoded label value a labelhash\n    // this is compatible with the universal resolver\n    if (encoded.byteLength > 255)\n      encoded = stringToBytes(encodeLabelhash(labelhash(list[i])))\n    bytes[offset] = encoded.length\n    bytes.set(encoded, offset + 1)\n    offset += encoded.length + 1\n  }\n\n  if (bytes.byteLength !== offset + 1) return bytes.slice(0, offset + 1)\n\n  return bytes\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\n\nexport type EncodeLabelhashErrorType = ErrorType\n\nexport function encodeLabelhash(hash: Hex): `[${string}]` {\n  return `[${hash.slice(2)}]`\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport {\n  type StringToBytesErrorType,\n  stringToBytes,\n} from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n  type EncodedLabelToLabelhashErrorType,\n  encodedLabelToLabelhash,\n} from './encodedLabelToLabelhash.js'\n\nexport type LabelhashErrorType =\n  | BytesToHexErrorType\n  | EncodedLabelToLabelhashErrorType\n  | Keccak256ErrorType\n  | StringToBytesErrorType\n  | ErrorType\n\n/**\n * @description Hashes ENS label\n *\n * - Since ENS labels prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS labels](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `labelhash`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @example\n * labelhash('eth')\n * '0x4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0'\n */\nexport function labelhash(label: string) {\n  const result = new Uint8Array(32).fill(0)\n  if (!label) return bytesToHex(result)\n  return encodedLabelToLabelhash(label) || keccak256(stringToBytes(label))\n}\n", "import { BaseError } from './base.js'\n\nexport type EnsAvatarInvalidMetadataErrorType =\n  EnsAvatarInvalidMetadataError & {\n    name: 'EnsAvatarInvalidMetadataError'\n  }\nexport class EnsAvatarInvalidMetadataError extends BaseError {\n  constructor({ data }: { data: any }) {\n    super(\n      'Unable to extract image from metadata. The metadata may be malformed or invalid.',\n      {\n        metaMessages: [\n          '- Metadata must be a JSON object with at least an `image`, `image_url` or `image_data` property.',\n          '',\n          `Provided data: ${JSON.stringify(data)}`,\n        ],\n        name: 'EnsAvatarInvalidMetadataError',\n      },\n    )\n  }\n}\n\nexport type EnsAvatarInvalidNftUriErrorType = EnsAvatarInvalidNftUriError & {\n  name: 'EnsAvatarInvalidNftUriError'\n}\nexport class EnsAvatarInvalidNftUriError extends BaseError {\n  constructor({ reason }: { reason: string }) {\n    super(`ENS NFT avatar URI is invalid. ${reason}`, {\n      name: 'EnsAvatarInvalidNftUriError',\n    })\n  }\n}\n\nexport type EnsAvatarUriResolutionErrorType = EnsAvatarUriResolutionError & {\n  name: 'EnsAvatarUriResolutionError'\n}\nexport class EnsAvatarUriResolutionError extends BaseError {\n  constructor({ uri }: { uri: string }) {\n    super(\n      `Unable to resolve ENS avatar URI \"${uri}\". The URI may be malformed, invalid, or does not respond with a valid image.`,\n      { name: 'EnsAvatarUriResolutionError' },\n    )\n  }\n}\n\nexport type EnsAvatarUnsupportedNamespaceErrorType =\n  EnsAvatarUnsupportedNamespaceError & {\n    name: 'EnsAvatarUnsupportedNamespaceError'\n  }\nexport class EnsAvatarUnsupportedNamespaceError extends BaseError {\n  constructor({ namespace }: { namespace: string }) {\n    super(\n      `ENS NFT avatar namespace \"${namespace}\" is not supported. Must be \"erc721\" or \"erc1155\".`,\n      { name: 'EnsAvatarUnsupportedNamespaceError' },\n    )\n  }\n}\n\nexport type EnsInvalidChainIdErrorType = EnsInvalidChainIdError & {\n  name: 'EnsInvalidChainIdError'\n}\nexport class EnsInvalidChainIdError extends BaseError {\n  constructor({ chainId }: { chainId: number }) {\n    super(\n      `Invalid ENSIP-11 chainId: ${chainId}. Must be between 0 and 0x7fffffff, or 1.`,\n      {\n        name: 'EnsInvalidChainIdError',\n      },\n    )\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport {\n  type ReadContractErrorType,\n  readContract,\n} from '../../../actions/public/readContract.js'\nimport type { Client } from '../../../clients/createClient.js'\nimport type { Transport } from '../../../clients/transports/createTransport.js'\nimport {\n  EnsAvatarInvalidMetadataError,\n  type EnsAvatarInvalidMetadataErrorType,\n  EnsAvatarInvalidNftUriError,\n  type EnsAvatarInvalidNftUriErrorType,\n  EnsAvatarUnsupportedNamespaceError,\n  type EnsAvatarUnsupportedNamespaceErrorType,\n  EnsAvatarUriResolutionError,\n  type EnsAvatarUriResolutionErrorType,\n} from '../../../errors/ens.js'\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { Chain } from '../../../types/chain.js'\nimport type { AssetGatewayUrls } from '../../../types/ens.js'\n\ntype UriItem = {\n  uri: string\n  isOnChain: boolean\n  isEncoded: boolean\n}\n\nconst networkRegex =\n  /(?<protocol>https?:\\/\\/[^/]*|ipfs:\\/|ipns:\\/|ar:\\/)?(?<root>\\/)?(?<subpath>ipfs\\/|ipns\\/)?(?<target>[\\w\\-.]+)(?<subtarget>\\/.*)?/\nconst ipfsHashRegex =\n  /^(Qm[1-9A-HJ-NP-Za-km-z]{44,}|b[A-Za-z2-7]{58,}|B[A-Z2-7]{58,}|z[1-9A-HJ-NP-Za-km-z]{48,}|F[0-9A-F]{50,})(\\/(?<target>[\\w\\-.]+))?(?<subtarget>\\/.*)?$/\nconst base64Regex = /^data:([a-zA-Z\\-/+]*);base64,([^\"].*)/\nconst dataURIRegex = /^data:([a-zA-Z\\-/+]*)?(;[a-zA-Z0-9].*?)?(,)/\n\ntype IsImageUriErrorType = ErrorType\n\n/** @internal */\nexport async function isImageUri(uri: string) {\n  try {\n    const res = await fetch(uri, { method: 'HEAD' })\n    // retrieve content type header to check if content is image\n    if (res.status === 200) {\n      const contentType = res.headers.get('content-type')\n      return contentType?.startsWith('image/')\n    }\n    return false\n  } catch (error: any) {\n    // if error is not cors related then fail\n    if (typeof error === 'object' && typeof error.response !== 'undefined') {\n      return false\n    }\n    // fail in NodeJS, since the error is not cors but any other network issue\n    if (!Object.hasOwn(globalThis, 'Image')) return false\n    // in case of cors, use image api to validate if given url is an actual image\n    return new Promise((resolve) => {\n      const img = new Image()\n      img.onload = () => {\n        resolve(true)\n      }\n      img.onerror = () => {\n        resolve(false)\n      }\n      img.src = uri\n    })\n  }\n}\n\ntype GetGatewayErrorType = ErrorType\n\n/** @internal */\nexport function getGateway(custom: string | undefined, defaultGateway: string) {\n  if (!custom) return defaultGateway\n  if (custom.endsWith('/')) return custom.slice(0, -1)\n  return custom\n}\n\nexport type ResolveAvatarUriErrorType =\n  | GetGatewayErrorType\n  | EnsAvatarUriResolutionErrorType\n  | ErrorType\n\nexport function resolveAvatarUri({\n  uri,\n  gatewayUrls,\n}: {\n  uri: string\n  gatewayUrls?: AssetGatewayUrls | undefined\n}): UriItem {\n  const isEncoded = base64Regex.test(uri)\n  if (isEncoded) return { uri, isOnChain: true, isEncoded }\n\n  const ipfsGateway = getGateway(gatewayUrls?.ipfs, 'https://ipfs.io')\n  const arweaveGateway = getGateway(gatewayUrls?.arweave, 'https://arweave.net')\n\n  const networkRegexMatch = uri.match(networkRegex)\n  const {\n    protocol,\n    subpath,\n    target,\n    subtarget = '',\n  } = networkRegexMatch?.groups || {}\n\n  const isIPNS = protocol === 'ipns:/' || subpath === 'ipns/'\n  const isIPFS =\n    protocol === 'ipfs:/' || subpath === 'ipfs/' || ipfsHashRegex.test(uri)\n\n  if (uri.startsWith('http') && !isIPNS && !isIPFS) {\n    let replacedUri = uri\n    if (gatewayUrls?.arweave)\n      replacedUri = uri.replace(/https:\\/\\/arweave.net/g, gatewayUrls?.arweave)\n    return { uri: replacedUri, isOnChain: false, isEncoded: false }\n  }\n\n  if ((isIPNS || isIPFS) && target) {\n    return {\n      uri: `${ipfsGateway}/${isIPNS ? 'ipns' : 'ipfs'}/${target}${subtarget}`,\n      isOnChain: false,\n      isEncoded: false,\n    }\n  }\n\n  if (protocol === 'ar:/' && target) {\n    return {\n      uri: `${arweaveGateway}/${target}${subtarget || ''}`,\n      isOnChain: false,\n      isEncoded: false,\n    }\n  }\n\n  let parsedUri = uri.replace(dataURIRegex, '')\n  if (parsedUri.startsWith('<svg')) {\n    // if svg, base64 encode\n    parsedUri = `data:image/svg+xml;base64,${btoa(parsedUri)}`\n  }\n\n  if (parsedUri.startsWith('data:') || parsedUri.startsWith('{')) {\n    return {\n      uri: parsedUri,\n      isOnChain: true,\n      isEncoded: false,\n    }\n  }\n\n  throw new EnsAvatarUriResolutionError({ uri })\n}\n\nexport type GetJsonImageErrorType =\n  | EnsAvatarInvalidMetadataErrorType\n  | ErrorType\n\nexport function getJsonImage(data: any) {\n  // validation check for json data, must include one of theses properties\n  if (\n    typeof data !== 'object' ||\n    (!('image' in data) && !('image_url' in data) && !('image_data' in data))\n  ) {\n    throw new EnsAvatarInvalidMetadataError({ data })\n  }\n\n  return data.image || data.image_url || data.image_data\n}\n\nexport type GetMetadataAvatarUriErrorType =\n  | EnsAvatarUriResolutionErrorType\n  | ParseAvatarUriErrorType\n  | GetJsonImageErrorType\n  | ErrorType\n\nexport async function getMetadataAvatarUri({\n  gatewayUrls,\n  uri,\n}: {\n  gatewayUrls?: AssetGatewayUrls | undefined\n  uri: string\n}): Promise<string> {\n  try {\n    const res = await fetch(uri).then((res) => res.json())\n    const image = await parseAvatarUri({\n      gatewayUrls,\n      uri: getJsonImage(res),\n    })\n    return image\n  } catch {\n    throw new EnsAvatarUriResolutionError({ uri })\n  }\n}\n\nexport type ParseAvatarUriErrorType =\n  | ResolveAvatarUriErrorType\n  | IsImageUriErrorType\n  | EnsAvatarUriResolutionErrorType\n  | ErrorType\n\nexport async function parseAvatarUri({\n  gatewayUrls,\n  uri,\n}: {\n  gatewayUrls?: AssetGatewayUrls | undefined\n  uri: string\n}): Promise<string> {\n  const { uri: resolvedURI, isOnChain } = resolveAvatarUri({ uri, gatewayUrls })\n  if (isOnChain) return resolvedURI\n\n  // check if resolvedURI is an image, if it is return the url\n  const isImage = await isImageUri(resolvedURI)\n  if (isImage) return resolvedURI\n\n  throw new EnsAvatarUriResolutionError({ uri })\n}\n\ntype ParsedNft = {\n  chainID: number\n  namespace: string\n  contractAddress: Address\n  tokenID: string\n}\n\nexport type ParseNftUriErrorType = EnsAvatarInvalidNftUriErrorType | ErrorType\n\nexport function parseNftUri(uri_: string): ParsedNft {\n  let uri = uri_\n  // parse valid nft spec (CAIP-22/CAIP-29)\n  // @see: https://github.com/ChainAgnostic/CAIPs/tree/master/CAIPs\n  if (uri.startsWith('did:nft:')) {\n    // convert DID to CAIP\n    uri = uri.replace('did:nft:', '').replace(/_/g, '/')\n  }\n\n  const [reference, asset_namespace, tokenID] = uri.split('/')\n  const [eip_namespace, chainID] = reference.split(':')\n  const [erc_namespace, contractAddress] = asset_namespace.split(':')\n\n  if (!eip_namespace || eip_namespace.toLowerCase() !== 'eip155')\n    throw new EnsAvatarInvalidNftUriError({ reason: 'Only EIP-155 supported' })\n  if (!chainID)\n    throw new EnsAvatarInvalidNftUriError({ reason: 'Chain ID not found' })\n  if (!contractAddress)\n    throw new EnsAvatarInvalidNftUriError({\n      reason: 'Contract address not found',\n    })\n  if (!tokenID)\n    throw new EnsAvatarInvalidNftUriError({ reason: 'Token ID not found' })\n  if (!erc_namespace)\n    throw new EnsAvatarInvalidNftUriError({ reason: 'ERC namespace not found' })\n\n  return {\n    chainID: Number.parseInt(chainID, 10),\n    namespace: erc_namespace.toLowerCase(),\n    contractAddress: contractAddress as Address,\n    tokenID,\n  }\n}\n\nexport type GetNftTokenUriErrorType =\n  | ReadContractErrorType\n  | EnsAvatarUnsupportedNamespaceErrorType\n  | ErrorType\n\nexport async function getNftTokenUri<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { nft }: { nft: ParsedNft },\n) {\n  if (nft.namespace === 'erc721') {\n    return readContract(client, {\n      address: nft.contractAddress,\n      abi: [\n        {\n          name: 'tokenURI',\n          type: 'function',\n          stateMutability: 'view',\n          inputs: [{ name: 'tokenId', type: 'uint256' }],\n          outputs: [{ name: '', type: 'string' }],\n        },\n      ],\n      functionName: 'tokenURI',\n      args: [BigInt(nft.tokenID)],\n    })\n  }\n  if (nft.namespace === 'erc1155') {\n    return readContract(client, {\n      address: nft.contractAddress,\n      abi: [\n        {\n          name: 'uri',\n          type: 'function',\n          stateMutability: 'view',\n          inputs: [{ name: '_id', type: 'uint256' }],\n          outputs: [{ name: '', type: 'string' }],\n        },\n      ],\n      functionName: 'uri',\n      args: [BigInt(nft.tokenID)],\n    })\n  }\n  throw new EnsAvatarUnsupportedNamespaceError({ namespace: nft.namespace })\n}\n", "import type { Client } from '../../../clients/createClient.js'\nimport type { Transport } from '../../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { Chain } from '../../../types/chain.js'\nimport type { AssetGatewayUrls } from '../../../types/ens.js'\n\nimport {\n  type GetJsonImageErrorType,\n  type GetMetadataAvatarUriErrorType,\n  type GetNftTokenUriErrorType,\n  getJsonImage,\n  getMetadataAvatarUri,\n  getNftTokenUri,\n  type ParseAvatarUriErrorType,\n  type ParseNftUriErrorType,\n  parseAvatarUri,\n  parseNftUri,\n  type ResolveAvatarUriErrorType,\n  resolveAvatarUri,\n} from './utils.js'\n\nexport type ParseAvatarRecordErrorType =\n  | ParseNftAvatarUriErrorType\n  | ParseAvatarUriErrorType\n  | ErrorType\n\n/*\n * @description Parses an ENS avatar record.\n *\n * @example\n * parseAvatarRecord('eip155:1/erc1155:0xb32979486938aa9694bfc898f35dbed459f44424/10063')\n * 'https://ipfs.io/ipfs/QmSP4nq9fnN9dAiCj42ug9Wa79rqmQerZXZch82VqpiH7U/image.gif'\n *\n * @see https://docs.ens.domains/web/avatars\n *\n */\nexport async function parseAvatarRecord<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    gatewayUrls,\n    record,\n  }: {\n    gatewayUrls?: AssetGatewayUrls | undefined\n    record: string\n  },\n): Promise<string> {\n  if (/eip155:/i.test(record))\n    return parseNftAvatarUri(client, { gatewayUrls, record })\n  return parseAvatarUri({ uri: record, gatewayUrls })\n}\n\ntype ParseNftAvatarUriErrorType =\n  | ParseNftUriErrorType\n  | GetNftTokenUriErrorType\n  | ResolveAvatarUriErrorType\n  | ParseAvatarUriErrorType\n  | GetJsonImageErrorType\n  | GetMetadataAvatarUriErrorType\n  | ErrorType\n\nasync function parseNftAvatarUri<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    gatewayUrls,\n    record,\n  }: {\n    gatewayUrls?: AssetGatewayUrls | undefined\n    record: string\n  },\n): Promise<string> {\n  // parse NFT URI into properties\n  const nft = parseNftUri(record)\n  // fetch tokenURI from the NFT contract\n  const nftUri = await getNftTokenUri(client, { nft })\n  // resolve the URI from the fetched tokenURI\n  const {\n    uri: resolvedNftUri,\n    isOnChain,\n    isEncoded,\n  } = resolveAvatarUri({ uri: nftUri, gatewayUrls })\n\n  // if the resolved URI is on chain, return the data\n  if (\n    isOnChain &&\n    (resolvedNftUri.includes('data:application/json;base64,') ||\n      resolvedNftUri.startsWith('{'))\n  ) {\n    const encodedJson = isEncoded\n      ? // if it is encoded, decode it\n        atob(resolvedNftUri.replace('data:application/json;base64,', ''))\n      : // if it isn't encoded assume it is a JSON string, but it could be anything (it will error if it is)\n        resolvedNftUri\n\n    const decoded = JSON.parse(encodedJson)\n    return parseAvatarUri({ uri: getJsonImage(decoded), gatewayUrls })\n  }\n\n  let uriTokenId = nft.tokenID\n  if (nft.namespace === 'erc1155')\n    uriTokenId = uriTokenId.replace('0x', '').padStart(64, '0')\n\n  return getMetadataAvatarUri({\n    gatewayUrls,\n    uri: resolvedNftUri.replace(/(?:0x)?{id}/, uriTokenId),\n  })\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  textResolverAbi,\n  universalResolverResolveAbi,\n} from '../../constants/abis.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport { isNullUniversalResolverError } from '../../utils/ens/errors.js'\nimport { localBatchGatewayUrl } from '../../utils/ens/localBatchGatewayRequest.js'\nimport { type NamehashErrorType, namehash } from '../../utils/ens/namehash.js'\nimport {\n  type PacketToBytesErrorType,\n  packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type ReadContractErrorType,\n  type ReadContractParameters,\n  readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsTextParameters = Prettify<\n  Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {\n    /** ENS name to get Text for. */\n    name: string\n    /** Universal Resolver gateway URLs to use for resolving CCIP-read requests. */\n    gatewayUrls?: string[] | undefined\n    /** Text record to retrieve. */\n    key: string\n    /** Whether or not to throw errors propagated from the ENS Universal Resolver Contract. */\n    strict?: boolean | undefined\n    /** Address of ENS Universal Resolver Contract. */\n    universalResolverAddress?: Address | undefined\n  }\n>\n\nexport type GetEnsTextReturnType = string | null\n\nexport type GetEnsTextErrorType =\n  | GetChainContractAddressErrorType\n  | ReadContractErrorType\n  | ToHexErrorType\n  | PacketToBytesErrorType\n  | EncodeFunctionDataErrorType\n  | NamehashErrorType\n  | DecodeFunctionResultErrorType\n\n/**\n * Gets a text record for specified ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsTextParameters}\n * @returns Address for ENS resolver. {@link GetEnsTextReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsText, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const twitterRecord = await getEnsText(client, {\n *   name: normalize('wevm.eth'),\n *   key: 'com.twitter',\n * })\n * // 'wevm_dev'\n */\nexport async function getEnsText<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: GetEnsTextParameters,\n): Promise<GetEnsTextReturnType> {\n  const { blockNumber, blockTag, key, name, gatewayUrls, strict } = parameters\n  const { chain } = client\n\n  const universalResolverAddress = (() => {\n    if (parameters.universalResolverAddress)\n      return parameters.universalResolverAddress\n    if (!chain)\n      throw new Error(\n        'client chain not configured. universalResolverAddress is required.',\n      )\n    return getChainContractAddress({\n      blockNumber,\n      chain,\n      contract: 'ensUniversalResolver',\n    })\n  })()\n\n  const tlds = chain?.ensTlds\n  if (tlds && !tlds.some((tld) => name.endsWith(tld))) return null\n\n  try {\n    const readContractParameters = {\n      address: universalResolverAddress,\n      abi: universalResolverResolveAbi,\n      args: [\n        toHex(packetToBytes(name)),\n        encodeFunctionData({\n          abi: textResolverAbi,\n          functionName: 'text',\n          args: [namehash(name), key],\n        }),\n        gatewayUrls ?? [localBatchGatewayUrl],\n      ],\n      functionName: 'resolveWithGateways',\n      blockNumber,\n      blockTag,\n    } as const\n\n    const readContractAction = getAction(client, readContract, 'readContract')\n\n    const res = await readContractAction(readContractParameters)\n\n    if (res[0] === '0x') return null\n\n    const record = decodeFunctionResult({\n      abi: textResolverAbi,\n      functionName: 'text',\n      data: res[0],\n    })\n\n    return record === '' ? null : record\n  } catch (err) {\n    if (strict) throw err\n    if (isNullUniversalResolverError(err)) return null\n    throw err\n  }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { AssetGatewayUrls } from '../../types/ens.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type ParseAvatarRecordErrorType,\n  parseAvatarRecord,\n} from '../../utils/ens/avatar/parseAvatarRecord.js'\nimport { getAction } from '../../utils/getAction.js'\n\nimport {\n  type GetEnsTextErrorType,\n  type GetEnsTextParameters,\n  getEnsText,\n} from './getEnsText.js'\n\nexport type GetEnsAvatarParameters = Prettify<\n  Omit<GetEnsTextParameters, 'key'> & {\n    /** Gateway urls to resolve IPFS and/or Arweave assets. */\n    assetGatewayUrls?: AssetGatewayUrls | undefined\n  }\n>\n\nexport type GetEnsAvatarReturnType = string | null\n\nexport type GetEnsAvatarErrorType =\n  | GetEnsTextErrorType\n  | ParseAvatarRecordErrorType\n  | ErrorType\n\n/**\n * Gets the avatar of an ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsAvatar\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls [`getEnsText`](https://viem.sh/docs/ens/actions/getEnsText) with `key` set to `'avatar'`.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsAvatarParameters}\n * @returns Avatar URI or `null` if not found. {@link GetEnsAvatarReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsAvatar, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const ensAvatar = await getEnsAvatar(client, {\n *   name: normalize('wevm.eth'),\n * })\n * // 'https://ipfs.io/ipfs/Qma8mnp6xV3J2cRNf3mTth5C8nV11CAnceVinc3y8jSbio'\n */\nexport async function getEnsAvatar<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    blockNumber,\n    blockTag,\n    assetGatewayUrls,\n    name,\n    gatewayUrls,\n    strict,\n    universalResolverAddress,\n  }: GetEnsAvatarParameters,\n): Promise<GetEnsAvatarReturnType> {\n  const record = await getAction(\n    client,\n    getEnsText,\n    'getEnsText',\n  )({\n    blockNumber,\n    blockTag,\n    key: 'avatar',\n    name,\n    universalResolverAddress,\n    gatewayUrls,\n    strict,\n  })\n  if (!record) return null\n  try {\n    return await parseAvatarRecord(client, {\n      record,\n      gatewayUrls: assetGatewayUrls,\n    })\n  } catch {\n    return null\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { universalResolverReverseAbi } from '../../constants/abis.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { isNullUniversalResolverError } from '../../utils/ens/errors.js'\nimport { localBatchGatewayUrl } from '../../utils/ens/localBatchGatewayRequest.js'\nimport type { PacketToBytesErrorType } from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type ReadContractErrorType,\n  type ReadContractParameters,\n  readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsNameParameters = Prettify<\n  Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {\n    /**\n     * Address to get ENS name for.\n     */\n    address: Address\n    /**\n     * ENSIP-9 compliant coinType (chain) to get ENS name for.\n     *\n     * To get the `coinType` for a chain id, use the `toCoinType` function:\n     * ```ts\n     * import { toCoinType } from 'viem'\n     * import { base } from 'viem/chains'\n     *\n     * const coinType = toCoinType(base.id)\n     * ```\n     *\n     * @default 60n\n     */\n    coinType?: bigint | undefined\n    /**\n     * Universal Resolver gateway URLs to use for resolving CCIP-read requests.\n     */\n    gatewayUrls?: string[] | undefined\n    /**\n     * Whether or not to throw errors propagated from the ENS Universal Resolver Contract.\n     */\n    strict?: boolean | undefined\n    /**\n     * Address of ENS Universal Resolver Contract.\n     */\n    universalResolverAddress?: Address | undefined\n  }\n>\n\nexport type GetEnsNameReturnType = string | null\n\nexport type GetEnsNameErrorType =\n  | GetChainContractAddressErrorType\n  | ReadContractErrorType\n  | PacketToBytesErrorType\n  | ErrorType\n\n/**\n * Gets primary name for specified address.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsName\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `reverse(bytes)` on ENS Universal Resolver Contract to \"reverse resolve\" the address to the primary ENS name.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsNameParameters}\n * @returns Name or `null` if not found. {@link GetEnsNameReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsName } from 'viem/ens'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const ensName = await getEnsName(client, {\n *   address: '0xd2135CfB216b74109775236E36d4b433F1DF507B',\n * })\n * // 'wevm.eth'\n */\nexport async function getEnsName<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: GetEnsNameParameters,\n): Promise<GetEnsNameReturnType> {\n  const {\n    address,\n    blockNumber,\n    blockTag,\n    coinType = 60n,\n    gatewayUrls,\n    strict,\n  } = parameters\n  const { chain } = client\n\n  const universalResolverAddress = (() => {\n    if (parameters.universalResolverAddress)\n      return parameters.universalResolverAddress\n    if (!chain)\n      throw new Error(\n        'client chain not configured. universalResolverAddress is required.',\n      )\n    return getChainContractAddress({\n      blockNumber,\n      chain,\n      contract: 'ensUniversalResolver',\n    })\n  })()\n\n  try {\n    const readContractParameters = {\n      address: universalResolverAddress,\n      abi: universalResolverReverseAbi,\n      args: [address, coinType, gatewayUrls ?? [localBatchGatewayUrl]],\n      functionName: 'reverseWithGateways',\n      blockNumber,\n      blockTag,\n    } as const\n\n    const readContractAction = getAction(client, readContract, 'readContract')\n\n    const [name] = await readContractAction(readContractParameters)\n\n    return name || null\n  } catch (err) {\n    if (strict) throw err\n    if (isNullUniversalResolverError(err)) return null\n    throw err\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport {\n  type PacketToBytesErrorType,\n  packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type ReadContractParameters,\n  readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsResolverParameters = Prettify<\n  Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {\n    /** Name to get the address for. */\n    name: string\n    /** Address of ENS Universal Resolver Contract. */\n    universalResolverAddress?: Address | undefined\n  }\n>\n\nexport type GetEnsResolverReturnType = Address\n\nexport type GetEnsResolverErrorType =\n  | GetChainContractAddressErrorType\n  | ToHexErrorType\n  | PacketToBytesErrorType\n  | ErrorType\n\n/**\n * Gets resolver for ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `findResolver(bytes)` on ENS Universal Resolver Contract to retrieve the resolver of an ENS name.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsResolverParameters}\n * @returns Address for ENS resolver. {@link GetEnsResolverReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsResolver, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const resolverAddress = await getEnsResolver(client, {\n *   name: normalize('wevm.eth'),\n * })\n * // '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41'\n */\nexport async function getEnsResolver<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: GetEnsResolverParameters,\n): Promise<GetEnsResolverReturnType> {\n  const { blockNumber, blockTag, name } = parameters\n  const { chain } = client\n\n  const universalResolverAddress = (() => {\n    if (parameters.universalResolverAddress)\n      return parameters.universalResolverAddress\n    if (!chain)\n      throw new Error(\n        'client chain not configured. universalResolverAddress is required.',\n      )\n    return getChainContractAddress({\n      blockNumber,\n      chain,\n      contract: 'ensUniversalResolver',\n    })\n  })()\n\n  const tlds = chain?.ensTlds\n  if (tlds && !tlds.some((tld) => name.endsWith(tld)))\n    throw new Error(\n      `${name} is not a valid ENS TLD (${tlds?.join(', ')}) for chain \"${chain.name}\" (id: ${chain.id}).`,\n    )\n\n  const [resolverAddress] = await getAction(\n    client,\n    readContract,\n    'readContract',\n  )({\n    address: universalResolverAddress,\n    abi: [\n      {\n        inputs: [{ type: 'bytes' }],\n        name: 'findResolver',\n        outputs: [\n          { type: 'address' },\n          { type: 'bytes32' },\n          { type: 'uint256' },\n        ],\n        stateMutability: 'view',\n        type: 'function',\n      },\n    ],\n    functionName: 'findResolver',\n    args: [toHex(packetToBytes(name))],\n    blockNumber,\n    blockTag,\n  })\n  return resolverAddress\n}\n", "import type { Abi, AbiEvent, Address } from 'abitype'\n\nimport {\n  type GetEnsAddressParameters,\n  type GetEnsAddressReturnType,\n  getEnsAddress,\n} from '../../actions/ens/getEnsAddress.js'\nimport {\n  type GetEnsAvatarParameters,\n  type GetEnsAvatarReturnType,\n  getEnsAvatar,\n} from '../../actions/ens/getEnsAvatar.js'\nimport {\n  type GetEnsNameParameters,\n  type GetEnsNameReturnType,\n  getEnsName,\n} from '../../actions/ens/getEnsName.js'\nimport {\n  type GetEnsResolverParameters,\n  type GetEnsResolverReturnType,\n  getEnsResolver,\n} from '../../actions/ens/getEnsResolver.js'\nimport {\n  type GetEnsTextParameters,\n  type GetEnsTextReturnType,\n  getEnsText,\n} from '../../actions/ens/getEnsText.js'\nimport {\n  type CallParameters,\n  type CallReturnType,\n  call,\n} from '../../actions/public/call.js'\nimport {\n  type CreateAccessListParameters,\n  type CreateAccessListReturnType,\n  createAccessList,\n} from '../../actions/public/createAccessList.js'\nimport {\n  type CreateBlockFilterReturnType,\n  createBlockFilter,\n} from '../../actions/public/createBlockFilter.js'\nimport {\n  type CreateContractEventFilterParameters,\n  type CreateContractEventFilterReturnType,\n  createContractEventFilter,\n} from '../../actions/public/createContractEventFilter.js'\nimport {\n  type CreateEventFilterParameters,\n  type CreateEventFilterReturnType,\n  createEventFilter,\n} from '../../actions/public/createEventFilter.js'\nimport {\n  type CreatePendingTransactionFilterReturnType,\n  createPendingTransactionFilter,\n} from '../../actions/public/createPendingTransactionFilter.js'\nimport {\n  type EstimateContractGasParameters,\n  type EstimateContractGasReturnType,\n  estimateContractGas,\n} from '../../actions/public/estimateContractGas.js'\nimport {\n  type EstimateFeesPerGasParameters,\n  type EstimateFeesPerGasReturnType,\n  estimateFeesPerGas,\n} from '../../actions/public/estimateFeesPerGas.js'\nimport {\n  type EstimateGasParameters,\n  type EstimateGasReturnType,\n  estimateGas,\n} from '../../actions/public/estimateGas.js'\nimport {\n  type EstimateMaxPriorityFeePerGasParameters,\n  type EstimateMaxPriorityFeePerGasReturnType,\n  estimateMaxPriorityFeePerGas,\n} from '../../actions/public/estimateMaxPriorityFeePerGas.js'\nimport {\n  type FillTransactionParameters,\n  type FillTransactionReturnType,\n  fillTransaction,\n} from '../../actions/public/fillTransaction.js'\nimport {\n  type GetBalanceParameters,\n  type GetBalanceReturnType,\n  getBalance,\n} from '../../actions/public/getBalance.js'\nimport {\n  type GetBlobBaseFeeReturnType,\n  getBlobBaseFee,\n} from '../../actions/public/getBlobBaseFee.js'\nimport {\n  type GetBlockParameters,\n  type GetBlockReturnType,\n  getBlock,\n} from '../../actions/public/getBlock.js'\nimport {\n  type GetBlockNumberParameters,\n  type GetBlockNumberReturnType,\n  getBlockNumber,\n} from '../../actions/public/getBlockNumber.js'\nimport {\n  type GetBlockTransactionCountParameters,\n  type GetBlockTransactionCountReturnType,\n  getBlockTransactionCount,\n} from '../../actions/public/getBlockTransactionCount.js'\nimport {\n  type GetChainIdReturnType,\n  getChainId,\n} from '../../actions/public/getChainId.js'\nimport {\n  type GetCodeParameters,\n  type GetCodeReturnType,\n  getCode,\n} from '../../actions/public/getCode.js'\nimport {\n  type GetContractEventsParameters,\n  type GetContractEventsReturnType,\n  getContractEvents,\n} from '../../actions/public/getContractEvents.js'\nimport {\n  type GetDelegationParameters,\n  type GetDelegationReturnType,\n  getDelegation,\n} from '../../actions/public/getDelegation.js'\nimport {\n  type GetEip712DomainParameters,\n  type GetEip712DomainReturnType,\n  getEip712Domain,\n} from '../../actions/public/getEip712Domain.js'\nimport {\n  type GetFeeHistoryParameters,\n  type GetFeeHistoryReturnType,\n  getFeeHistory,\n} from '../../actions/public/getFeeHistory.js'\nimport {\n  type GetFilterChangesParameters,\n  type GetFilterChangesReturnType,\n  getFilterChanges,\n} from '../../actions/public/getFilterChanges.js'\nimport {\n  type GetFilterLogsParameters,\n  type GetFilterLogsReturnType,\n  getFilterLogs,\n} from '../../actions/public/getFilterLogs.js'\nimport {\n  type GetGasPriceReturnType,\n  getGasPrice,\n} from '../../actions/public/getGasPrice.js'\nimport {\n  type GetLogsParameters,\n  type GetLogsReturnType,\n  getLogs,\n} from '../../actions/public/getLogs.js'\nimport {\n  type GetProofParameters,\n  type GetProofReturnType,\n  getProof,\n} from '../../actions/public/getProof.js'\nimport {\n  type GetStorageAtParameters,\n  type GetStorageAtReturnType,\n  getStorageAt,\n} from '../../actions/public/getStorageAt.js'\nimport {\n  type GetTransactionParameters,\n  type GetTransactionReturnType,\n  getTransaction,\n} from '../../actions/public/getTransaction.js'\nimport {\n  type GetTransactionConfirmationsParameters,\n  type GetTransactionConfirmationsReturnType,\n  getTransactionConfirmations,\n} from '../../actions/public/getTransactionConfirmations.js'\nimport {\n  type GetTransactionCountParameters,\n  type GetTransactionCountReturnType,\n  getTransactionCount,\n} from '../../actions/public/getTransactionCount.js'\nimport {\n  type GetTransactionReceiptParameters,\n  type GetTransactionReceiptReturnType,\n  getTransactionReceipt,\n} from '../../actions/public/getTransactionReceipt.js'\nimport {\n  type MulticallParameters,\n  type MulticallReturnType,\n  multicall,\n} from '../../actions/public/multicall.js'\nimport {\n  type ReadContractParameters,\n  type ReadContractReturnType,\n  readContract,\n} from '../../actions/public/readContract.js'\nimport {\n  type SimulateBlocksParameters,\n  type SimulateBlocksReturnType,\n  simulateBlocks,\n} from '../../actions/public/simulateBlocks.js'\nimport {\n  type SimulateCallsParameters,\n  type SimulateCallsReturnType,\n  simulateCalls,\n} from '../../actions/public/simulateCalls.js'\nimport {\n  type SimulateContractParameters,\n  type SimulateContractReturnType,\n  simulateContract,\n} from '../../actions/public/simulateContract.js'\nimport {\n  type UninstallFilterParameters,\n  type UninstallFilterReturnType,\n  uninstallFilter,\n} from '../../actions/public/uninstallFilter.js'\nimport {\n  type VerifyHashParameters,\n  type VerifyHashReturnType,\n  verifyHash,\n} from '../../actions/public/verifyHash.js'\nimport {\n  type VerifyMessageParameters,\n  type VerifyMessageReturnType,\n  verifyMessage,\n} from '../../actions/public/verifyMessage.js'\nimport {\n  type VerifyTypedDataParameters,\n  type VerifyTypedDataReturnType,\n  verifyTypedData,\n} from '../../actions/public/verifyTypedData.js'\nimport {\n  type WaitForTransactionReceiptParameters,\n  type WaitForTransactionReceiptReturnType,\n  waitForTransactionReceipt,\n} from '../../actions/public/waitForTransactionReceipt.js'\nimport {\n  type WatchBlockNumberParameters,\n  type WatchBlockNumberReturnType,\n  watchBlockNumber,\n} from '../../actions/public/watchBlockNumber.js'\nimport {\n  type WatchBlocksParameters,\n  type WatchBlocksReturnType,\n  watchBlocks,\n} from '../../actions/public/watchBlocks.js'\nimport {\n  type WatchContractEventParameters,\n  type WatchContractEventReturnType,\n  watchContractEvent,\n} from '../../actions/public/watchContractEvent.js'\nimport {\n  type WatchEventParameters,\n  type WatchEventReturnType,\n  watchEvent,\n} from '../../actions/public/watchEvent.js'\nimport {\n  type WatchPendingTransactionsParameters,\n  type WatchPendingTransactionsReturnType,\n  watchPendingTransactions,\n} from '../../actions/public/watchPendingTransactions.js'\nimport {\n  type VerifySiweMessageParameters,\n  type VerifySiweMessageReturnType,\n  verifySiweMessage,\n} from '../../actions/siwe/verifySiweMessage.js'\nimport {\n  type PrepareTransactionRequestParameters,\n  type PrepareTransactionRequestRequest,\n  type PrepareTransactionRequestReturnType,\n  prepareTransactionRequest,\n} from '../../actions/wallet/prepareTransactionRequest.js'\nimport {\n  type SendRawTransactionParameters,\n  type SendRawTransactionReturnType,\n  sendRawTransaction,\n} from '../../actions/wallet/sendRawTransaction.js'\nimport {\n  type SendRawTransactionSyncParameters,\n  type SendRawTransactionSyncReturnType,\n  sendRawTransactionSync,\n} from '../../actions/wallet/sendRawTransactionSync.js'\nimport type { Account } from '../../types/account.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ContractEventName,\n  ContractFunctionArgs,\n  ContractFunctionName,\n  MaybeAbiEventName,\n  MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { FeeValuesType } from '../../types/fee.js'\nimport type { FilterType } from '../../types/filter.js'\nimport type { Client } from '../createClient.js'\nimport type { Transport } from '../transports/createTransport.js'\n\nexport type PublicActions<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n> = {\n  /**\n   * Executes a new message call immediately without submitting a transaction to the network.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/call\n   * - JSON-RPC Methods: [`eth_call`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_call)\n   *\n   * @param args - {@link CallParameters}\n   * @returns The call data. {@link CallReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const data = await client.call({\n   *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n   *   data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   * })\n   */\n  call: (parameters: CallParameters<chain>) => Promise<CallReturnType>\n  /**\n   * Creates an EIP-2930 access list that you can include in a transaction.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/createAccessList\n   * - JSON-RPC Methods: `eth_createAccessList`\n   *\n   * @param args - {@link CreateAccessListParameters}\n   * @returns The call data. {@link CreateAccessListReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   *\n   * const data = await client.createAccessList({\n   *   data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   * })\n   */\n  createAccessList: (\n    parameters: CreateAccessListParameters<chain>,\n  ) => Promise<CreateAccessListReturnType>\n  /**\n   * Creates a Filter to listen for new block hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n   *\n   * - Docs: https://viem.sh/docs/actions/public/createBlockFilter\n   * - JSON-RPC Methods: [`eth_newBlockFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newBlockFilter)\n   *\n   * @returns Filter. {@link CreateBlockFilterReturnType}\n   *\n   * @example\n   * import { createPublicClient, createBlockFilter, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await createBlockFilter(client)\n   * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'block' }\n   */\n  createBlockFilter: () => Promise<CreateBlockFilterReturnType>\n  /**\n   * Creates a Filter to retrieve event logs that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges) or [`getFilterLogs`](https://viem.sh/docs/actions/public/getFilterLogs).\n   *\n   * - Docs: https://viem.sh/docs/contract/createContractEventFilter\n   *\n   * @param args - {@link CreateContractEventFilterParameters}\n   * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateContractEventFilterReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createContractEventFilter({\n   *   abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n   * })\n   */\n  createContractEventFilter: <\n    const abi extends Abi | readonly unknown[],\n    eventName extends ContractEventName<abi> | undefined,\n    args extends MaybeExtractEventArgsFromAbi<abi, eventName> | undefined,\n    strict extends boolean | undefined = undefined,\n    fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n    toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  >(\n    args: CreateContractEventFilterParameters<\n      abi,\n      eventName,\n      args,\n      strict,\n      fromBlock,\n      toBlock\n    >,\n  ) => Promise<\n    CreateContractEventFilterReturnType<\n      abi,\n      eventName,\n      args,\n      strict,\n      fromBlock,\n      toBlock\n    >\n  >\n  /**\n   * Creates a [`Filter`](https://viem.sh/docs/glossary/types#filter) to listen for new events that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n   *\n   * - Docs: https://viem.sh/docs/actions/public/createEventFilter\n   * - JSON-RPC Methods: [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter)\n   *\n   * @param args - {@link CreateEventFilterParameters}\n   * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateEventFilterReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createEventFilter({\n   *   address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n   * })\n   */\n  createEventFilter: <\n    const abiEvent extends AbiEvent | undefined = undefined,\n    const abiEvents extends\n      | readonly AbiEvent[]\n      | readonly unknown[]\n      | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n    strict extends boolean | undefined = undefined,\n    fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n    toBlock extends BlockNumber | BlockTag | undefined = undefined,\n    _EventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n    _Args extends\n      | MaybeExtractEventArgsFromAbi<abiEvents, _EventName>\n      | undefined = undefined,\n  >(\n    args?:\n      | CreateEventFilterParameters<\n          abiEvent,\n          abiEvents,\n          strict,\n          fromBlock,\n          toBlock,\n          _EventName,\n          _Args\n        >\n      | undefined,\n  ) => Promise<\n    CreateEventFilterReturnType<\n      abiEvent,\n      abiEvents,\n      strict,\n      fromBlock,\n      toBlock,\n      _EventName,\n      _Args\n    >\n  >\n  /**\n   * Creates a Filter to listen for new pending transaction hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n   *\n   * - Docs: https://viem.sh/docs/actions/public/createPendingTransactionFilter\n   * - JSON-RPC Methods: [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter)\n   *\n   * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateBlockFilterReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createPendingTransactionFilter()\n   * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'transaction' }\n   */\n  createPendingTransactionFilter: () => Promise<CreatePendingTransactionFilterReturnType>\n  /**\n   * Estimates the gas required to successfully execute a contract write function call.\n   *\n   * - Docs: https://viem.sh/docs/contract/estimateContractGas\n   *\n   * @remarks\n   * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`estimateGas` action](https://viem.sh/docs/actions/public/estimateGas) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n   *\n   * @param args - {@link EstimateContractGasParameters}\n   * @returns The gas estimate (in wei). {@link EstimateContractGasReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const gas = await client.estimateContractGas({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   abi: parseAbi(['function mint() public']),\n   *   functionName: 'mint',\n   *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n   * })\n   */\n  estimateContractGas: <\n    chain extends Chain | undefined,\n    const abi extends Abi | readonly unknown[],\n    functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n    args extends ContractFunctionArgs<\n      abi,\n      'nonpayable' | 'payable',\n      functionName\n    >,\n  >(\n    args: EstimateContractGasParameters<abi, functionName, args, chain>,\n  ) => Promise<EstimateContractGasReturnType>\n  /**\n   * Estimates the gas necessary to complete a transaction without submitting it to the network.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/estimateGas\n   * - JSON-RPC Methods: [`eth_estimateGas`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_estimategas)\n   *\n   * @param args - {@link EstimateGasParameters}\n   * @returns The gas estimate (in wei). {@link EstimateGasReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseEther } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const gasEstimate = await client.estimateGas({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *   value: parseEther('1'),\n   * })\n   */\n  estimateGas: (\n    args: EstimateGasParameters<chain>,\n  ) => Promise<EstimateGasReturnType>\n  /**\n   * Fills a transaction request with the necessary fields to be signed over.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/fillTransaction\n   *\n   * @param client - Client to use\n   * @param parameters - {@link FillTransactionParameters}\n   * @returns The filled transaction. {@link FillTransactionReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const result = await client.fillTransaction({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *   value: parseEther('1'),\n   * })\n   */\n  fillTransaction: <\n    chainOverride extends Chain | undefined = undefined,\n    accountOverride extends Account | Address | undefined = undefined,\n  >(\n    args: FillTransactionParameters<\n      chain,\n      account,\n      chainOverride,\n      accountOverride\n    >,\n  ) => Promise<FillTransactionReturnType<chain, chainOverride>>\n  /**\n   * Returns the balance of an address in wei.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getBalance\n   * - JSON-RPC Methods: [`eth_getBalance`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance)\n   *\n   * @remarks\n   * You can convert the balance to ether units with [`formatEther`](https://viem.sh/docs/utilities/formatEther).\n   *\n   * ```ts\n   * const balance = await getBalance(client, {\n   *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   blockTag: 'safe'\n   * })\n   * const balanceAsEther = formatEther(balance)\n   * // \"6.942\"\n   * ```\n   *\n   * @param args - {@link GetBalanceParameters}\n   * @returns The balance of the address in wei. {@link GetBalanceReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const balance = await client.getBalance({\n   *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   * // 10000000000000000000000n (wei)\n   */\n  getBalance: (args: GetBalanceParameters) => Promise<GetBalanceReturnType>\n  /**\n   * Returns the base fee per blob gas in wei.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getBlobBaseFee\n   * - JSON-RPC Methods: [`eth_blobBaseFee`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blobBaseFee)\n   *\n   * @param client - Client to use\n   * @returns The blob base fee (in wei). {@link GetBlobBaseFeeReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { getBlobBaseFee } from 'viem/public'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const blobBaseFee = await client.getBlobBaseFee()\n   */\n  getBlobBaseFee: () => Promise<GetBlobBaseFeeReturnType>\n  /**\n   * Returns information about a block at a block number, hash, or tag.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getBlock\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n   * - JSON-RPC Methods:\n   *   - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) for `blockNumber` & `blockTag`.\n   *   - Calls [`eth_getBlockByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbyhash) for `blockHash`.\n   *\n   * @param args - {@link GetBlockParameters}\n   * @returns Information about the block. {@link GetBlockReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const block = await client.getBlock()\n   */\n  getBlock: <\n    includeTransactions extends boolean = false,\n    blockTag extends BlockTag = 'latest',\n  >(\n    args?: GetBlockParameters<includeTransactions, blockTag> | undefined,\n  ) => Promise<GetBlockReturnType<chain, includeTransactions, blockTag>>\n  /**\n   * Returns the number of the most recent block seen.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getBlockNumber\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n   * - JSON-RPC Methods: [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber)\n   *\n   * @param args - {@link GetBlockNumberParameters}\n   * @returns The number of the block. {@link GetBlockNumberReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const blockNumber = await client.getBlockNumber()\n   * // 69420n\n   */\n  getBlockNumber: (\n    args?: GetBlockNumberParameters | undefined,\n  ) => Promise<GetBlockNumberReturnType>\n  /**\n   * Returns the number of Transactions at a block number, hash, or tag.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getBlockTransactionCount\n   * - JSON-RPC Methods:\n   *   - Calls [`eth_getBlockTransactionCountByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbynumber) for `blockNumber` & `blockTag`.\n   *   - Calls [`eth_getBlockTransactionCountByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbyhash) for `blockHash`.\n   *\n   * @param args - {@link GetBlockTransactionCountParameters}\n   * @returns The block transaction count. {@link GetBlockTransactionCountReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const count = await client.getBlockTransactionCount()\n   */\n  getBlockTransactionCount: (\n    args?: GetBlockTransactionCountParameters | undefined,\n  ) => Promise<GetBlockTransactionCountReturnType>\n  /** @deprecated Use `getCode` instead. */\n  getBytecode: (args: GetCodeParameters) => Promise<GetCodeReturnType>\n  /**\n   * Returns the chain ID associated with the current network.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getChainId\n   * - JSON-RPC Methods: [`eth_chainId`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_chainid)\n   *\n   * @returns The current chain ID. {@link GetChainIdReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const chainId = await client.getChainId()\n   * // 1\n   */\n  getChainId: () => Promise<GetChainIdReturnType>\n  /**\n   * Retrieves the bytecode at an address.\n   *\n   * - Docs: https://viem.sh/docs/contract/getCode\n   * - JSON-RPC Methods: [`eth_getCode`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getcode)\n   *\n   * @param args - {@link GetBytecodeParameters}\n   * @returns The contract's bytecode. {@link GetBytecodeReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const code = await client.getCode({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   * })\n   */\n  getCode: (args: GetCodeParameters) => Promise<GetCodeReturnType>\n  /**\n   * Returns a list of event logs emitted by a contract.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getContractEvents\n   * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n   *\n   * @param client - Client to use\n   * @param parameters - {@link GetContractEventsParameters}\n   * @returns A list of event logs. {@link GetContractEventsReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { wagmiAbi } from './abi'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const logs = await client.getContractEvents(client, {\n   *  address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *  abi: wagmiAbi,\n   *  eventName: 'Transfer'\n   * })\n   */\n  getContractEvents: <\n    const abi extends Abi | readonly unknown[],\n    eventName extends ContractEventName<abi> | undefined = undefined,\n    strict extends boolean | undefined = undefined,\n    fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n    toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  >(\n    args: GetContractEventsParameters<\n      abi,\n      eventName,\n      strict,\n      fromBlock,\n      toBlock\n    >,\n  ) => Promise<\n    GetContractEventsReturnType<abi, eventName, strict, fromBlock, toBlock>\n  >\n  /**\n   * Returns the address that an account has delegated to via EIP-7702.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getDelegation\n   *\n   * @param args - {@link GetDelegationParameters}\n   * @returns The delegated address, or undefined if not delegated. {@link GetDelegationReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const delegation = await client.getDelegation({\n   *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   */\n  getDelegation: (\n    args: GetDelegationParameters,\n  ) => Promise<GetDelegationReturnType>\n  /**\n   * Reads the EIP-712 domain from a contract, based on the ERC-5267 specification.\n   *\n   * @param client - A {@link Client} instance.\n   * @param parameters - The parameters of the action. {@link GetEip712DomainParameters}\n   * @returns The EIP-712 domain, fields, and extensions. {@link GetEip712DomainReturnType}\n   *\n   * @example\n   * ```ts\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   *\n   * const domain = await client.getEip712Domain({\n   *   address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n   * })\n   * // {\n   * //   domain: {\n   * //     name: 'ExampleContract',\n   * //     version: '1',\n   * //     chainId: 1,\n   * //     verifyingContract: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n   * //   },\n   * //   fields: '0x0f',\n   * //   extensions: [],\n   * // }\n   * ```\n   */\n  getEip712Domain: (\n    args: GetEip712DomainParameters,\n  ) => Promise<GetEip712DomainReturnType>\n  /**\n   * Gets address for ENS name.\n   *\n   * - Docs: https://viem.sh/docs/ens/actions/getEnsAddress\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n   *\n   * @remarks\n   * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n   *\n   * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n   *\n   * @param args - {@link GetEnsAddressParameters}\n   * @returns Address for ENS name or `null` if not found. {@link GetEnsAddressReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { normalize } from 'viem/ens'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const ensAddress = await client.getEnsAddress({\n   *   name: normalize('wevm.eth'),\n   * })\n   * // '0xd2135CfB216b74109775236E36d4b433F1DF507B'\n   */\n  getEnsAddress: (\n    args: GetEnsAddressParameters,\n  ) => Promise<GetEnsAddressReturnType>\n  /**\n   * Gets the avatar of an ENS name.\n   *\n   * - Docs: https://viem.sh/docs/ens/actions/getEnsAvatar\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n   *\n   * @remarks\n   * Calls [`getEnsText`](https://viem.sh/docs/ens/actions/getEnsText) with `key` set to `'avatar'`.\n   *\n   * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n   *\n   * @param args - {@link GetEnsAvatarParameters}\n   * @returns Avatar URI or `null` if not found. {@link GetEnsAvatarReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { normalize } from 'viem/ens'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const ensAvatar = await client.getEnsAvatar({\n   *   name: normalize('wevm.eth'),\n   * })\n   * // 'https://ipfs.io/ipfs/Qma8mnp6xV3J2cRNf3mTth5C8nV11CAnceVinc3y8jSbio'\n   */\n  getEnsAvatar: (\n    args: GetEnsAvatarParameters,\n  ) => Promise<GetEnsAvatarReturnType>\n  /**\n   * Gets primary name for specified address.\n   *\n   * - Docs: https://viem.sh/docs/ens/actions/getEnsName\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n   *\n   * @remarks\n   * Calls `reverse(bytes)` on ENS Universal Resolver Contract to \"reverse resolve\" the address to the primary ENS name.\n   *\n   * @param args - {@link GetEnsNameParameters}\n   * @returns Name or `null` if not found. {@link GetEnsNameReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const ensName = await client.getEnsName({\n   *   address: '0xd2135CfB216b74109775236E36d4b433F1DF507B',\n   * })\n   * // 'wevm.eth'\n   */\n  getEnsName: (args: GetEnsNameParameters) => Promise<GetEnsNameReturnType>\n  /**\n   * Gets resolver for ENS name.\n   *\n   * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n   *\n   * @remarks\n   * Calls `findResolver(bytes)` on ENS Universal Resolver Contract to retrieve the resolver of an ENS name.\n   *\n   * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n   *\n   * @param args - {@link GetEnsResolverParameters}\n   * @returns Address for ENS resolver. {@link GetEnsResolverReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { normalize } from 'viem/ens'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const resolverAddress = await client.getEnsResolver({\n   *   name: normalize('wevm.eth'),\n   * })\n   * // '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41'\n   */\n  getEnsResolver: (\n    args: GetEnsResolverParameters,\n  ) => Promise<GetEnsResolverReturnType>\n  /**\n   * Gets a text record for specified ENS name.\n   *\n   * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n   *\n   * @remarks\n   * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n   *\n   * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n   *\n   * @param args - {@link GetEnsTextParameters}\n   * @returns Address for ENS resolver. {@link GetEnsTextReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { normalize } from 'viem/ens'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const twitterRecord = await client.getEnsText({\n   *   name: normalize('wevm.eth'),\n   *   key: 'com.twitter',\n   * })\n   * // 'wevm_dev'\n   */\n  getEnsText: (args: GetEnsTextParameters) => Promise<GetEnsTextReturnType>\n  /**\n   * Returns a collection of historical gas information.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getFeeHistory\n   * - JSON-RPC Methods: [`eth_feeHistory`](https://docs.alchemy.com/reference/eth-feehistory)\n   *\n   * @param args - {@link GetFeeHistoryParameters}\n   * @returns The gas estimate (in wei). {@link GetFeeHistoryReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const feeHistory = await client.getFeeHistory({\n   *   blockCount: 4,\n   *   rewardPercentiles: [25, 75],\n   * })\n   */\n  getFeeHistory: (\n    args: GetFeeHistoryParameters,\n  ) => Promise<GetFeeHistoryReturnType>\n  /**\n   * Returns an estimate for the fees per gas for a transaction to be included\n   * in the next block.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/estimateFeesPerGas\n   *\n   * @param client - Client to use\n   * @param parameters - {@link EstimateFeesPerGasParameters}\n   * @returns An estimate (in wei) for the fees per gas. {@link EstimateFeesPerGasReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const maxPriorityFeePerGas = await client.estimateFeesPerGas()\n   * // { maxFeePerGas: ..., maxPriorityFeePerGas: ... }\n   */\n  estimateFeesPerGas: <\n    chainOverride extends Chain | undefined = undefined,\n    type extends FeeValuesType = 'eip1559',\n  >(\n    args?: EstimateFeesPerGasParameters<chain, chainOverride, type> | undefined,\n  ) => Promise<EstimateFeesPerGasReturnType<type>>\n  /**\n   * Returns a list of logs or hashes based on a [Filter](/docs/glossary/terms#filter) since the last time it was called.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getFilterChanges\n   * - JSON-RPC Methods: [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges)\n   *\n   * @remarks\n   * A Filter can be created from the following actions:\n   *\n   * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n   * - [`createContractEventFilter`](https://viem.sh/docs/contract/createContractEventFilter)\n   * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n   * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n   *\n   * Depending on the type of filter, the return value will be different:\n   *\n   * - If the filter was created with `createContractEventFilter` or `createEventFilter`, it returns a list of logs.\n   * - If the filter was created with `createPendingTransactionFilter`, it returns a list of transaction hashes.\n   * - If the filter was created with `createBlockFilter`, it returns a list of block hashes.\n   *\n   * @param args - {@link GetFilterChangesParameters}\n   * @returns Logs or hashes. {@link GetFilterChangesReturnType}\n   *\n   * @example\n   * // Blocks\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createBlockFilter()\n   * const hashes = await client.getFilterChanges({ filter })\n   *\n   * @example\n   * // Contract Events\n   * import { createPublicClient, http, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createContractEventFilter({\n   *   address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n   *   abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n   *   eventName: 'Transfer',\n   * })\n   * const logs = await client.getFilterChanges({ filter })\n   *\n   * @example\n   * // Raw Events\n   * import { createPublicClient, http, parseAbiItem } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createEventFilter({\n   *   address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n   *   event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n   * })\n   * const logs = await client.getFilterChanges({ filter })\n   *\n   * @example\n   * // Transactions\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createPendingTransactionFilter()\n   * const hashes = await client.getFilterChanges({ filter })\n   */\n  getFilterChanges: <\n    filterType extends FilterType,\n    const abi extends Abi | readonly unknown[] | undefined,\n    eventName extends string | undefined,\n    strict extends boolean | undefined = undefined,\n    fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n    toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  >(\n    args: GetFilterChangesParameters<\n      filterType,\n      abi,\n      eventName,\n      strict,\n      fromBlock,\n      toBlock\n    >,\n  ) => Promise<\n    GetFilterChangesReturnType<\n      filterType,\n      abi,\n      eventName,\n      strict,\n      fromBlock,\n      toBlock\n    >\n  >\n  /**\n   * Returns a list of event logs since the filter was created.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getFilterLogs\n   * - JSON-RPC Methods: [`eth_getFilterLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterlogs)\n   *\n   * @remarks\n   * `getFilterLogs` is only compatible with **event filters**.\n   *\n   * @param args - {@link GetFilterLogsParameters}\n   * @returns A list of event logs. {@link GetFilterLogsReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbiItem } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const filter = await client.createEventFilter({\n   *   address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n   *   event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n   * })\n   * const logs = await client.getFilterLogs({ filter })\n   */\n  getFilterLogs: <\n    const abi extends Abi | readonly unknown[] | undefined,\n    eventName extends string | undefined,\n    strict extends boolean | undefined = undefined,\n    fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n    toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  >(\n    args: GetFilterLogsParameters<abi, eventName, strict, fromBlock, toBlock>,\n  ) => Promise<\n    GetFilterLogsReturnType<abi, eventName, strict, fromBlock, toBlock>\n  >\n  /**\n   * Returns the current price of gas (in wei).\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getGasPrice\n   * - JSON-RPC Methods: [`eth_gasPrice`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gasprice)\n   *\n   * @returns The gas price (in wei). {@link GetGasPriceReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const gasPrice = await client.getGasPrice()\n   */\n  getGasPrice: () => Promise<GetGasPriceReturnType>\n  /**\n   * Returns a list of event logs matching the provided parameters.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getLogs\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/logs_event-logs\n   * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n   *\n   * @param args - {@link GetLogsParameters}\n   * @returns A list of event logs. {@link GetLogsReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbiItem } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const logs = await client.getLogs()\n   */\n  getLogs: <\n    const abiEvent extends AbiEvent | undefined = undefined,\n    const abiEvents extends\n      | readonly AbiEvent[]\n      | readonly unknown[]\n      | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n    strict extends boolean | undefined = undefined,\n    fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n    toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  >(\n    args?:\n      | GetLogsParameters<abiEvent, abiEvents, strict, fromBlock, toBlock>\n      | undefined,\n  ) => Promise<\n    GetLogsReturnType<abiEvent, abiEvents, strict, fromBlock, toBlock>\n  >\n  /**\n   * Returns the account and storage values of the specified account including the Merkle-proof.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getProof\n   * - JSON-RPC Methods:\n   *   - Calls [`eth_getProof`](https://eips.ethereum.org/EIPS/eip-1186)\n   *\n   * @param client - Client to use\n   * @param parameters - {@link GetProofParameters}\n   * @returns Proof data. {@link GetProofReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const block = await client.getProof({\n   *  address: '0x...',\n   *  storageKeys: ['0x...'],\n   * })\n   */\n  getProof: (args: GetProofParameters) => Promise<GetProofReturnType>\n  /**\n   * Returns an estimate for the max priority fee per gas (in wei) for a transaction\n   * to be included in the next block.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/estimateMaxPriorityFeePerGas\n   *\n   * @param client - Client to use\n   * @returns An estimate (in wei) for the max priority fee per gas. {@link EstimateMaxPriorityFeePerGasReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const maxPriorityFeePerGas = await client.estimateMaxPriorityFeePerGas()\n   * // 10000000n\n   */\n  estimateMaxPriorityFeePerGas: <\n    chainOverride extends Chain | undefined = undefined,\n  >(\n    args?:\n      | EstimateMaxPriorityFeePerGasParameters<chain, chainOverride>\n      | undefined,\n  ) => Promise<EstimateMaxPriorityFeePerGasReturnType>\n  /**\n   * Returns the value from a storage slot at a given address.\n   *\n   * - Docs: https://viem.sh/docs/contract/getStorageAt\n   * - JSON-RPC Methods: [`eth_getStorageAt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getstorageat)\n   *\n   * @param args - {@link GetStorageAtParameters}\n   * @returns The value of the storage slot. {@link GetStorageAtReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { getStorageAt } from 'viem/contract'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const code = await client.getStorageAt({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   slot: toHex(0),\n   * })\n   */\n  getStorageAt: (\n    args: GetStorageAtParameters,\n  ) => Promise<GetStorageAtReturnType>\n  /**\n   * Returns information about a [Transaction](https://viem.sh/docs/glossary/terms#transaction) given a hash or block identifier.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getTransaction\n   * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n   * - JSON-RPC Methods: [`eth_getTransactionByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionByHash)\n   *\n   * @param args - {@link GetTransactionParameters}\n   * @returns The transaction information. {@link GetTransactionReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const transaction = await client.getTransaction({\n   *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n   * })\n   */\n  getTransaction: <blockTag extends BlockTag = 'latest'>(\n    args: GetTransactionParameters<blockTag>,\n  ) => Promise<GetTransactionReturnType<chain, blockTag>>\n  /**\n   * Returns the number of blocks passed (confirmations) since the transaction was processed on a block.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getTransactionConfirmations\n   * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n   * - JSON-RPC Methods: [`eth_getTransactionConfirmations`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionConfirmations)\n   *\n   * @param args - {@link GetTransactionConfirmationsParameters}\n   * @returns The number of blocks passed since the transaction was processed. If confirmations is 0, then the Transaction has not been confirmed & processed yet. {@link GetTransactionConfirmationsReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const confirmations = await client.getTransactionConfirmations({\n   *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n   * })\n   */\n  getTransactionConfirmations: (\n    args: GetTransactionConfirmationsParameters<chain>,\n  ) => Promise<GetTransactionConfirmationsReturnType>\n  /**\n   * Returns the number of [Transactions](https://viem.sh/docs/glossary/terms#transaction) an Account has broadcast / sent.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getTransactionCount\n   * - JSON-RPC Methods: [`eth_getTransactionCount`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactioncount)\n   *\n   * @param args - {@link GetTransactionCountParameters}\n   * @returns The number of transactions an account has sent. {@link GetTransactionCountReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const transactionCount = await client.getTransactionCount({\n   *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   */\n  getTransactionCount: (\n    args: GetTransactionCountParameters,\n  ) => Promise<GetTransactionCountReturnType>\n  /**\n   * Returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt) given a [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/getTransactionReceipt\n   * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n   * - JSON-RPC Methods: [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt)\n   *\n   * @param args - {@link GetTransactionReceiptParameters}\n   * @returns The transaction receipt. {@link GetTransactionReceiptReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const transactionReceipt = await client.getTransactionReceipt({\n   *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n   * })\n   */\n  getTransactionReceipt: (\n    args: GetTransactionReceiptParameters,\n  ) => Promise<GetTransactionReceiptReturnType<chain>>\n  /**\n   * Similar to [`readContract`](https://viem.sh/docs/contract/readContract), but batches up multiple functions on a contract in a single RPC call via the [`multicall3` contract](https://github.com/mds1/multicall).\n   *\n   * - Docs: https://viem.sh/docs/contract/multicall\n   *\n   * @param args - {@link MulticallParameters}\n   * @returns An array of results with accompanying status. {@link MulticallReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const abi = parseAbi([\n   *   'function balanceOf(address) view returns (uint256)',\n   *   'function totalSupply() view returns (uint256)',\n   * ])\n   * const result = await client.multicall({\n   *   contracts: [\n   *     {\n   *       address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *       abi,\n   *       functionName: 'balanceOf',\n   *       args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n   *     },\n   *     {\n   *       address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *       abi,\n   *       functionName: 'totalSupply',\n   *     },\n   *   ],\n   * })\n   * // [{ result: 424122n, status: 'success' }, { result: 1000000n, status: 'success' }]\n   */\n  multicall: <\n    const contracts extends readonly unknown[],\n    allowFailure extends boolean = true,\n  >(\n    args: MulticallParameters<contracts, allowFailure>,\n  ) => Promise<MulticallReturnType<contracts, allowFailure>>\n  /**\n   * Prepares a transaction request for signing.\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/prepareTransactionRequest\n   *\n   * @param args - {@link PrepareTransactionRequestParameters}\n   * @returns The transaction request. {@link PrepareTransactionRequestReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const request = await client.prepareTransactionRequest({\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   *   to: '0x0000000000000000000000000000000000000000',\n   *   value: 1n,\n   * })\n   *\n   * @example\n   * // Account Hoisting\n   * import { createWalletClient, http } from 'viem'\n   * import { privateKeyToAccount } from 'viem/accounts'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createWalletClient({\n   *   account: privateKeyToAccount('0x\u2026'),\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   * const request = await client.prepareTransactionRequest({\n   *   to: '0x0000000000000000000000000000000000000000',\n   *   value: 1n,\n   * })\n   */\n  prepareTransactionRequest: <\n    const request extends PrepareTransactionRequestRequest<\n      chain,\n      chainOverride\n    >,\n    chainOverride extends Chain | undefined = undefined,\n    accountOverride extends Account | Address | undefined = undefined,\n  >(\n    args: PrepareTransactionRequestParameters<\n      chain,\n      account,\n      chainOverride,\n      accountOverride,\n      request\n    >,\n  ) => Promise<\n    PrepareTransactionRequestReturnType<\n      chain,\n      account,\n      chainOverride,\n      accountOverride,\n      request\n    >\n  >\n  /**\n   * Calls a read-only function on a contract, and returns the response.\n   *\n   * - Docs: https://viem.sh/docs/contract/readContract\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_reading-contracts\n   *\n   * @remarks\n   * A \"read-only\" function (constant function) on a Solidity contract is denoted by a `view` or `pure` keyword. They can only read the state of the contract, and cannot make any changes to it. Since read-only methods do not change the state of the contract, they do not require any gas to be executed, and can be called by any user without the need to pay for gas.\n   *\n   * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n   *\n   * @param args - {@link ReadContractParameters}\n   * @returns The response from the contract. Type is inferred. {@link ReadContractReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { readContract } from 'viem/contract'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const result = await client.readContract({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   abi: parseAbi(['function balanceOf(address) view returns (uint256)']),\n   *   functionName: 'balanceOf',\n   *   args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n   * })\n   * // 424122n\n   */\n  readContract: <\n    const abi extends Abi | readonly unknown[],\n    functionName extends ContractFunctionName<abi, 'pure' | 'view'>,\n    const args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n  >(\n    args: ReadContractParameters<abi, functionName, args>,\n  ) => Promise<ReadContractReturnType<abi, functionName, args>>\n  /**\n   * Sends a **signed** transaction to the network\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransaction\n   * - JSON-RPC Method: [`eth_sendRawTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)\n   *\n   * @param client - Client to use\n   * @param parameters - {@link SendRawTransactionParameters}\n   * @returns The transaction hash. {@link SendRawTransactionReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { sendRawTransaction } from 'viem/wallet'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   *\n   * const hash = await client.sendRawTransaction({\n   *   serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n   * })\n   */\n  sendRawTransaction: (\n    args: SendRawTransactionParameters,\n  ) => Promise<SendRawTransactionReturnType>\n  /**\n   * Sends a **signed** transaction to the network\n   *\n   * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransactionSync\n   * - JSON-RPC Method: [`eth_sendRawTransactionSync`](https://eips.ethereum.org/EIPS/eip-7966)\n   *\n   * @param client - Client to use\n   * @param parameters - {@link SendRawTransactionSyncParameters}\n   * @returns The transaction receipt. {@link SendRawTransactionSyncReturnType}\n   *\n   * @example\n   * import { createWalletClient, custom } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { sendRawTransactionSync } from 'viem/wallet'\n   *\n   * const client = createWalletClient({\n   *   chain: mainnet,\n   *   transport: custom(window.ethereum),\n   * })\n   *\n   * const receipt = await client.sendRawTransactionSync({\n   *   serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n   * })\n   */\n  sendRawTransactionSync: (\n    args: SendRawTransactionSyncParameters,\n  ) => Promise<SendRawTransactionSyncReturnType<chain>>\n  /**\n   * @deprecated Use `simulateBlocks` instead.\n   */\n  simulate: <const calls extends readonly unknown[]>(\n    args: SimulateBlocksParameters<calls>,\n  ) => Promise<SimulateBlocksReturnType<calls>>\n  /**\n   * Simulates a set of calls on block(s) with optional block and state overrides.\n   *\n   * @example\n   * ```ts\n   * import { createPublicClient, http, parseEther } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   *\n   * const result = await client.simulateBlocks({\n   *   blocks: [{\n   *     blockOverrides: {\n   *       number: 69420n,\n   *     },\n   *     calls: [{\n   *       {\n   *         account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n   *         data: '0xdeadbeef',\n   *         to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *       },\n   *       {\n   *         account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n   *         to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *         value: parseEther('1'),\n   *       },\n   *     }],\n   *     stateOverrides: [{\n   *       address: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n   *       balance: parseEther('10'),\n   *     }],\n   *   }]\n   * })\n   * ```\n   *\n   * @param client - Client to use.\n   * @param parameters - {@link SimulateParameters}\n   * @returns Simulated blocks. {@link SimulateReturnType}\n   */\n  simulateBlocks: <const calls extends readonly unknown[]>(\n    args: SimulateBlocksParameters<calls>,\n  ) => Promise<SimulateBlocksReturnType<calls>>\n  /**\n   * Simulates a set of calls.\n   *\n   * @example\n   * ```ts\n   * import { createPublicClient, http, parseEther } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   *\n   * const result = await client.simulateCalls({\n   *   account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n   *   calls: [{\n   *     {\n   *       data: '0xdeadbeef',\n   *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *     },\n   *     {\n   *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n   *       value: parseEther('1'),\n   *     },\n   *   ]\n   * })\n   * ```\n   *\n   * @param client - Client to use.\n   * @param parameters - {@link SimulateCallsParameters}\n   * @returns Results. {@link SimulateCallsReturnType}\n   */\n  simulateCalls: <const calls extends readonly unknown[]>(\n    args: SimulateCallsParameters<calls>,\n  ) => Promise<SimulateCallsReturnType<calls>>\n  /**\n   * Simulates/validates a contract interaction. This is useful for retrieving **return data** and **revert reasons** of contract write functions.\n   *\n   * - Docs: https://viem.sh/docs/contract/simulateContract\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts\n   *\n   * @remarks\n   * This function does not require gas to execute and _**does not**_ change the state of the blockchain. It is almost identical to [`readContract`](https://viem.sh/docs/contract/readContract), but also supports contract write functions.\n   *\n   * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n   *\n   * @param args - {@link SimulateContractParameters}\n   * @returns The simulation result and write request. {@link SimulateContractReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const result = await client.simulateContract({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   abi: parseAbi(['function mint(uint32) view returns (uint32)']),\n   *   functionName: 'mint',\n   *   args: ['69420'],\n   *   account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n   * })\n   */\n  simulateContract: <\n    const abi extends Abi | readonly unknown[],\n    functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n    const args extends ContractFunctionArgs<\n      abi,\n      'nonpayable' | 'payable',\n      functionName\n    >,\n    chainOverride extends Chain | undefined,\n    accountOverride extends Account | Address | undefined = undefined,\n  >(\n    args: SimulateContractParameters<\n      abi,\n      functionName,\n      args,\n      chain,\n      chainOverride,\n      accountOverride\n    >,\n  ) => Promise<\n    SimulateContractReturnType<\n      abi,\n      functionName,\n      args,\n      chain,\n      account,\n      chainOverride,\n      accountOverride\n    >\n  >\n  /**\n   * Verify that a hash was signed by the provided address.\n   *\n   * - Docs {@link https://viem.sh/docs/actions/public/verifyHash}\n   *\n   * @param parameters - {@link VerifyHashParameters}\n   * @returns Whether or not the signature is valid. {@link VerifyHashReturnType}\n   */\n  verifyHash: (args: VerifyHashParameters) => Promise<VerifyHashReturnType>\n  /**\n   * Verify that a message was signed by the provided address.\n   *\n   * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n   *\n   * - Docs {@link https://viem.sh/docs/actions/public/verifyMessage}\n   *\n   * @param parameters - {@link VerifyMessageParameters}\n   * @returns Whether or not the signature is valid. {@link VerifyMessageReturnType}\n   */\n  verifyMessage: (\n    args: VerifyMessageParameters,\n  ) => Promise<VerifyMessageReturnType>\n  /**\n   * Verifies [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message was signed.\n   *\n   * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n   *\n   * - Docs {@link https://viem.sh/docs/siwe/actions/verifySiweMessage}\n   *\n   * @param parameters - {@link VerifySiweMessageParameters}\n   * @returns Whether or not the signature is valid. {@link VerifySiweMessageReturnType}\n   */\n  verifySiweMessage: (\n    args: VerifySiweMessageParameters,\n  ) => Promise<VerifySiweMessageReturnType>\n  /**\n   * Verify that typed data was signed by the provided address.\n   *\n   * - Docs {@link https://viem.sh/docs/actions/public/verifyTypedData}\n   *\n   * @param parameters - {@link VerifyTypedDataParameters}\n   * @returns Whether or not the signature is valid. {@link VerifyTypedDataReturnType}\n   */\n  verifyTypedData: (\n    args: VerifyTypedDataParameters,\n  ) => Promise<VerifyTypedDataReturnType>\n  /**\n   * Destroys a Filter that was created from one of the following Actions:\n   *\n   * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n   * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n   * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n   *\n   * - Docs: https://viem.sh/docs/actions/public/uninstallFilter\n   * - JSON-RPC Methods: [`eth_uninstallFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_uninstallFilter)\n   *\n   * @param args - {@link UninstallFilterParameters}\n   * @returns A boolean indicating if the Filter was successfully uninstalled. {@link UninstallFilterReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   * import { createPendingTransactionFilter, uninstallFilter } from 'viem/public'\n   *\n   * const filter = await client.createPendingTransactionFilter()\n   * const uninstalled = await client.uninstallFilter({ filter })\n   * // true\n   */\n  uninstallFilter: (\n    args: UninstallFilterParameters,\n  ) => Promise<UninstallFilterReturnType>\n  /**\n   * Waits for the [Transaction](https://viem.sh/docs/glossary/terms#transaction) to be included on a [Block](https://viem.sh/docs/glossary/terms#block) (one confirmation), and then returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt). If the Transaction reverts, then the action will throw an error.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/waitForTransactionReceipt\n   * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions\n   * - JSON-RPC Methods:\n   *   - Polls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt) on each block until it has been processed.\n   *   - If a Transaction has been replaced:\n   *     - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) and extracts the transactions\n   *     - Checks if one of the Transactions is a replacement\n   *     - If so, calls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt).\n   *\n   * @remarks\n   * The `waitForTransactionReceipt` action additionally supports Replacement detection (e.g. sped up Transactions).\n   *\n   * Transactions can be replaced when a user modifies their transaction in their wallet (to speed up or cancel). Transactions are replaced when they are sent from the same nonce.\n   *\n   * There are 3 types of Transaction Replacement reasons:\n   *\n   * - `repriced`: The gas price has been modified (e.g. different `maxFeePerGas`)\n   * - `cancelled`: The Transaction has been cancelled (e.g. `value === 0n`)\n   * - `replaced`: The Transaction has been replaced (e.g. different `value` or `data`)\n   *\n   * @param args - {@link WaitForTransactionReceiptParameters}\n   * @returns The transaction receipt. {@link WaitForTransactionReceiptReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const transactionReceipt = await client.waitForTransactionReceipt({\n   *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n   * })\n   */\n  waitForTransactionReceipt: (\n    args: WaitForTransactionReceiptParameters<chain>,\n  ) => Promise<WaitForTransactionReceiptReturnType<chain>>\n  /**\n   * Watches and returns incoming block numbers.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/watchBlockNumber\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n   * - JSON-RPC Methods:\n   *   - When `poll: true`, calls [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber) on a polling interval.\n   *   - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n   *\n   * @param args - {@link WatchBlockNumberParameters}\n   * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlockNumberReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const unwatch = await client.watchBlockNumber({\n   *   onBlockNumber: (blockNumber) => console.log(blockNumber),\n   * })\n   */\n  watchBlockNumber: (\n    args: WatchBlockNumberParameters,\n  ) => WatchBlockNumberReturnType\n  /**\n   * Watches and returns information for incoming blocks.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/watchBlocks\n   * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n   * - JSON-RPC Methods:\n   *   - When `poll: true`, calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getBlockByNumber) on a polling interval.\n   *   - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n   *\n   * @param args - {@link WatchBlocksParameters}\n   * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlocksReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const unwatch = await client.watchBlocks({\n   *   onBlock: (block) => console.log(block),\n   * })\n   */\n  watchBlocks: <\n    includeTransactions extends boolean = false,\n    blockTag extends BlockTag = 'latest',\n  >(\n    args: WatchBlocksParameters<\n      transport,\n      chain,\n      includeTransactions,\n      blockTag\n    >,\n  ) => WatchBlocksReturnType\n  /**\n   * Watches and returns emitted contract event logs.\n   *\n   * - Docs: https://viem.sh/docs/contract/watchContractEvent\n   *\n   * @remarks\n   * This Action will batch up all the event logs found within the [`pollingInterval`](https://viem.sh/docs/contract/watchContractEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/contract/watchContractEvent#onLogs).\n   *\n   * `watchContractEvent` will attempt to create an [Event Filter](https://viem.sh/docs/contract/createContractEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchContractEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n   *\n   * @param args - {@link WatchContractEventParameters}\n   * @returns A function that can be invoked to stop watching for new event logs. {@link WatchContractEventReturnType}\n   *\n   * @example\n   * import { createPublicClient, http, parseAbi } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const unwatch = client.watchContractEvent({\n   *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n   *   abi: parseAbi(['event Transfer(address indexed from, address indexed to, uint256 value)']),\n   *   eventName: 'Transfer',\n   *   args: { from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b' },\n   *   onLogs: (logs) => console.log(logs),\n   * })\n   */\n  watchContractEvent: <\n    const abi extends Abi | readonly unknown[],\n    eventName extends ContractEventName<abi>,\n    strict extends boolean | undefined = undefined,\n  >(\n    args: WatchContractEventParameters<abi, eventName, strict, transport>,\n  ) => WatchContractEventReturnType\n  /**\n   * Watches and returns emitted [Event Logs](https://viem.sh/docs/glossary/terms#event-log).\n   *\n   * - Docs: https://viem.sh/docs/actions/public/watchEvent\n   * - JSON-RPC Methods:\n   *   - **RPC Provider supports `eth_newFilter`:**\n   *     - Calls [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter) to create a filter (called on initialize).\n   *     - On a polling interval, it will call [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges).\n   *   - **RPC Provider does not support `eth_newFilter`:**\n   *     - Calls [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) for each block between the polling interval.\n   *\n   * @remarks\n   * This Action will batch up all the Event Logs found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/actions/public/watchEvent#onLogs).\n   *\n   * `watchEvent` will attempt to create an [Event Filter](https://viem.sh/docs/actions/public/createEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n   *\n   * @param args - {@link WatchEventParameters}\n   * @returns A function that can be invoked to stop watching for new Event Logs. {@link WatchEventReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const unwatch = client.watchEvent({\n   *   onLogs: (logs) => console.log(logs),\n   * })\n   */\n  watchEvent: <\n    const abiEvent extends AbiEvent | undefined = undefined,\n    const abiEvents extends\n      | readonly AbiEvent[]\n      | readonly unknown[]\n      | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n    strict extends boolean | undefined = undefined,\n  >(\n    args: WatchEventParameters<abiEvent, abiEvents, strict, transport>,\n  ) => WatchEventReturnType\n  /**\n   * Watches and returns pending transaction hashes.\n   *\n   * - Docs: https://viem.sh/docs/actions/public/watchPendingTransactions\n   * - JSON-RPC Methods:\n   *   - When `poll: true`\n   *     - Calls [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter) to initialize the filter.\n   *     - Calls [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getFilterChanges) on a polling interval.\n   *   - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newPendingTransactions\"` event.\n   *\n   * @remarks\n   * This Action will batch up all the pending transactions found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchPendingTransactions#pollinginterval-optional), and invoke them via [`onTransactions`](https://viem.sh/docs/actions/public/watchPendingTransactions#ontransactions).\n   *\n   * @param args - {@link WatchPendingTransactionsParameters}\n   * @returns A function that can be invoked to stop watching for new pending transaction hashes. {@link WatchPendingTransactionsReturnType}\n   *\n   * @example\n   * import { createPublicClient, http } from 'viem'\n   * import { mainnet } from 'viem/chains'\n   *\n   * const client = createPublicClient({\n   *   chain: mainnet,\n   *   transport: http(),\n   * })\n   * const unwatch = await client.watchPendingTransactions({\n   *   onTransactions: (hashes) => console.log(hashes),\n   * })\n   */\n  watchPendingTransactions: (\n    args: WatchPendingTransactionsParameters<transport>,\n  ) => WatchPendingTransactionsReturnType\n}\n\nexport function publicActions<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  account extends Account | undefined = Account | undefined,\n>(\n  client: Client<transport, chain, account>,\n): PublicActions<transport, chain, account> {\n  return {\n    call: (args) => call(client, args),\n    createAccessList: (args) => createAccessList(client, args),\n    createBlockFilter: () => createBlockFilter(client),\n    createContractEventFilter: (args) =>\n      createContractEventFilter(client, args),\n    createEventFilter: (args) => createEventFilter(client, args),\n    createPendingTransactionFilter: () =>\n      createPendingTransactionFilter(client),\n    estimateContractGas: (args) => estimateContractGas(client, args as any),\n    estimateGas: (args) => estimateGas(client, args),\n    getBalance: (args) => getBalance(client, args),\n    getBlobBaseFee: () => getBlobBaseFee(client),\n    getBlock: (args) => getBlock(client, args),\n    getBlockNumber: (args) => getBlockNumber(client, args),\n    getBlockTransactionCount: (args) => getBlockTransactionCount(client, args),\n    getBytecode: (args) => getCode(client, args),\n    getChainId: () => getChainId(client),\n    getCode: (args) => getCode(client, args),\n    getContractEvents: (args) => getContractEvents(client, args),\n    getDelegation: (args) => getDelegation(client, args),\n    getEip712Domain: (args) => getEip712Domain(client, args),\n    getEnsAddress: (args) => getEnsAddress(client, args),\n    getEnsAvatar: (args) => getEnsAvatar(client, args),\n    getEnsName: (args) => getEnsName(client, args),\n    getEnsResolver: (args) => getEnsResolver(client, args),\n    getEnsText: (args) => getEnsText(client, args),\n    getFeeHistory: (args) => getFeeHistory(client, args),\n    estimateFeesPerGas: (args) => estimateFeesPerGas(client, args),\n    getFilterChanges: (args) => getFilterChanges(client, args),\n    getFilterLogs: (args) => getFilterLogs(client, args),\n    getGasPrice: () => getGasPrice(client),\n    getLogs: (args) => getLogs(client, args as any),\n    getProof: (args) => getProof(client, args),\n    estimateMaxPriorityFeePerGas: (args) =>\n      estimateMaxPriorityFeePerGas(client, args),\n    fillTransaction: (args) => fillTransaction(client, args),\n    getStorageAt: (args) => getStorageAt(client, args),\n    getTransaction: (args) => getTransaction(client, args),\n    getTransactionConfirmations: (args) =>\n      getTransactionConfirmations(client, args),\n    getTransactionCount: (args) => getTransactionCount(client, args),\n    getTransactionReceipt: (args) => getTransactionReceipt(client, args),\n    multicall: (args) => multicall(client, args),\n    prepareTransactionRequest: (args) =>\n      prepareTransactionRequest(client as any, args as any) as any,\n    readContract: (args) => readContract(client, args),\n    sendRawTransaction: (args) => sendRawTransaction(client, args),\n    sendRawTransactionSync: (args) => sendRawTransactionSync(client, args),\n    simulate: (args) => simulateBlocks(client, args),\n    simulateBlocks: (args) => simulateBlocks(client, args),\n    simulateCalls: (args) => simulateCalls(client, args),\n    simulateContract: (args) => simulateContract(client, args),\n    verifyHash: (args) => verifyHash(client, args),\n    verifyMessage: (args) => verifyMessage(client, args),\n    verifySiweMessage: (args) => verifySiweMessage(client, args),\n    verifyTypedData: (args) => verifyTypedData(client, args),\n    uninstallFilter: (args) => uninstallFilter(client, args),\n    waitForTransactionReceipt: (args) =>\n      waitForTransactionReceipt(client, args),\n    watchBlocks: (args) => watchBlocks(client, args),\n    watchBlockNumber: (args) => watchBlockNumber(client, args),\n    watchContractEvent: (args) => watchContractEvent(client, args),\n    watchEvent: (args) => watchEvent(client, args),\n    watchPendingTransactions: (args) => watchPendingTransactions(client, args),\n  }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RpcTransactionRequest } from '../../types/rpc.js'\nimport type { AccessList, TransactionRequest } from '../../types/transaction.js'\nimport type { ExactPartial, Prettify, UnionOmit } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type GetCallErrorReturnType,\n  getCallError,\n} from '../../utils/errors/getCallError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n  type FormatTransactionRequestErrorType,\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport type {\n  AssertRequestErrorType,\n  AssertRequestParameters,\n} from '../../utils/transaction/assertRequest.js'\nimport { assertRequest } from '../../utils/transaction/assertRequest.js'\n\nexport type CreateAccessListParameters<\n  chain extends Chain | undefined = Chain | undefined,\n> = UnionOmit<\n  FormattedTransactionRequest<chain>,\n  'from' | 'nonce' | 'accessList'\n> & {\n  /** Account attached to the call (msg.sender). */\n  account?: Account | Address | undefined\n} & (\n    | {\n        /** The balance of the account at a block number. */\n        blockNumber?: bigint | undefined\n        blockTag?: undefined\n      }\n    | {\n        blockNumber?: undefined\n        /**\n         * The balance of the account at a block tag.\n         * @default 'latest'\n         */\n        blockTag?: BlockTag | undefined\n      }\n  )\n\nexport type CreateAccessListReturnType = Prettify<{\n  accessList: AccessList\n  gasUsed: bigint\n}>\n\nexport type CreateAccessListErrorType = GetCallErrorReturnType<\n  | ParseAccountErrorType\n  | AssertRequestErrorType\n  | NumberToHexErrorType\n  | FormatTransactionRequestErrorType\n  | RequestErrorType\n>\n\n/**\n * Creates an EIP-2930 access list.\n *\n * - Docs: https://viem.sh/docs/actions/public/createAccessList\n * - JSON-RPC Methods: `eth_createAccessList`\n *\n * @param client - Client to use\n * @param parameters - {@link CreateAccessListParameters}\n * @returns The access list. {@link CreateAccessListReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createAccessList } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const data = await createAccessList(client, {\n *   account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n *   data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n *   to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * })\n */\nexport async function createAccessList<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  args: CreateAccessListParameters<chain>,\n): Promise<CreateAccessListReturnType> {\n  const {\n    account: account_ = client.account,\n    blockNumber,\n    blockTag = 'latest',\n    blobs,\n    data,\n    gas,\n    gasPrice,\n    maxFeePerBlobGas,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    to,\n    value,\n    ...rest\n  } = args\n  const account = account_ ? parseAccount(account_) : undefined\n\n  try {\n    assertRequest(args as AssertRequestParameters)\n\n    const blockNumberHex =\n      typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n    const block = blockNumberHex || blockTag\n\n    const chainFormat = client.chain?.formatters?.transactionRequest?.format\n    const format = chainFormat || formatTransactionRequest\n\n    const request = format(\n      {\n        // Pick out extra data that might exist on the chain's transaction request type.\n        ...extract(rest, { format: chainFormat }),\n        account,\n        blobs,\n        data,\n        gas,\n        gasPrice,\n        maxFeePerBlobGas,\n        maxFeePerGas,\n        maxPriorityFeePerGas,\n        to,\n        value,\n      } as TransactionRequest,\n      'createAccessList',\n    ) as TransactionRequest\n\n    const response = await client.request({\n      method: 'eth_createAccessList',\n      params: [request as ExactPartial<RpcTransactionRequest>, block],\n    })\n    return {\n      accessList: response.accessList,\n      gasUsed: BigInt(response.gasUsed),\n    }\n  } catch (err) {\n    throw getCallError(err as ErrorType, {\n      ...args,\n      account,\n      chain: client.chain,\n    })\n  }\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreateBlockFilterReturnType = Filter<'block'>\n\nexport type CreateBlockFilterErrorType = RequestErrorType | ErrorType\n\n/**\n * Creates a [`Filter`](https://viem.sh/docs/glossary/types#filter) to listen for new block hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createBlockFilter\n * - JSON-RPC Methods: [`eth_newBlockFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newBlockFilter)\n *\n * @param client - Client to use\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateBlockFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createBlockFilter } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createBlockFilter(client)\n * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'block' }\n */\nexport async function createBlockFilter<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n): Promise<CreateBlockFilterReturnType> {\n  const getRequest = createFilterRequestScope(client, {\n    method: 'eth_newBlockFilter',\n  })\n  const id = await client.request({\n    method: 'eth_newBlockFilter',\n  })\n  return { id, request: getRequest(id), type: 'block' }\n}\n", "import type { AbiEvent, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  MaybeAbiEventName,\n  MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Hex, LogTopic } from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n  type EncodeEventTopicsErrorType,\n  type EncodeEventTopicsParameters,\n  encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreateEventFilterParameters<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  //\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n  _args extends\n    | MaybeExtractEventArgsFromAbi<abiEvents, _eventName>\n    | undefined = undefined,\n> = {\n  address?: Address | Address[] | undefined\n  fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n  toBlock?: toBlock | BlockNumber | BlockTag | undefined\n} & (MaybeExtractEventArgsFromAbi<\n  abiEvents,\n  _eventName\n> extends infer eventFilterArgs\n  ?\n      | {\n          args:\n            | eventFilterArgs\n            | (_args extends eventFilterArgs ? _args : never)\n          event: abiEvent\n          events?: undefined\n          /**\n           * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n           * @default false\n           */\n          strict?: strict | undefined\n        }\n      | {\n          args?: undefined\n          event?: abiEvent | undefined\n          events?: undefined\n          /**\n           * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n           * @default false\n           */\n          strict?: strict | undefined\n        }\n      | {\n          args?: undefined\n          event?: undefined\n          events: abiEvents | undefined\n          /**\n           * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n           * @default false\n           */\n          strict?: strict | undefined\n        }\n      | {\n          args?: undefined\n          event?: undefined\n          events?: undefined\n          strict?: undefined\n        }\n  : {\n      args?: undefined\n      event?: undefined\n      events?: undefined\n      strict?: undefined\n    })\n\nexport type CreateEventFilterReturnType<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n  _args extends\n    | MaybeExtractEventArgsFromAbi<abiEvents, _eventName>\n    | undefined = undefined,\n> = Prettify<\n  Filter<'event', abiEvents, _eventName, _args, strict, fromBlock, toBlock>\n>\n\nexport type CreateEventFilterErrorType =\n  | EncodeEventTopicsErrorType\n  | RequestErrorType\n  | NumberToHexErrorType\n  | ErrorType\n\n/**\n * Creates a [`Filter`](https://viem.sh/docs/glossary/types#filter) to listen for new events that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createEventFilter\n * - JSON-RPC Methods: [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter)\n *\n * @param client - Client to use\n * @param parameters - {@link CreateEventFilterParameters}\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateEventFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createEventFilter } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createEventFilter(client, {\n *   address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * })\n */\nexport async function createEventFilter<\n  chain extends Chain | undefined,\n  const abiEvent extends AbiEvent | undefined = undefined,\n  const abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber<bigint> | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber<bigint> | BlockTag | undefined = undefined,\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n  _args extends\n    | MaybeExtractEventArgsFromAbi<abiEvents, _eventName>\n    | undefined = undefined,\n>(\n  client: Client<Transport, chain>,\n  {\n    address,\n    args,\n    event,\n    events: events_,\n    fromBlock,\n    strict,\n    toBlock,\n  }: CreateEventFilterParameters<\n    abiEvent,\n    abiEvents,\n    strict,\n    fromBlock,\n    toBlock,\n    _eventName,\n    _args\n  > = {} as any,\n): Promise<\n  CreateEventFilterReturnType<\n    abiEvent,\n    abiEvents,\n    strict,\n    fromBlock,\n    toBlock,\n    _eventName,\n    _args\n  >\n> {\n  const events = events_ ?? (event ? [event] : undefined)\n\n  const getRequest = createFilterRequestScope(client, {\n    method: 'eth_newFilter',\n  })\n\n  let topics: LogTopic[] = []\n  if (events) {\n    const encoded = (events as AbiEvent[]).flatMap((event) =>\n      encodeEventTopics({\n        abi: [event],\n        eventName: (event as AbiEvent).name,\n        args,\n      } as EncodeEventTopicsParameters),\n    )\n    // TODO: Clean up type casting\n    topics = [encoded as LogTopic]\n    if (event) topics = topics[0] as LogTopic[]\n  }\n\n  const id: Hex = await client.request({\n    method: 'eth_newFilter',\n    params: [\n      {\n        address,\n        fromBlock:\n          typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n        toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n        ...(topics.length ? { topics } : {}),\n      },\n    ],\n  })\n\n  return {\n    abi: events,\n    args,\n    eventName: event ? (event as AbiEvent).name : undefined,\n    fromBlock,\n    id,\n    request: getRequest(id),\n    strict: Boolean(strict),\n    toBlock,\n    type: 'event',\n  } as unknown as CreateEventFilterReturnType<\n    abiEvent,\n    abiEvents,\n    strict,\n    fromBlock,\n    toBlock,\n    _eventName,\n    _args\n  >\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreatePendingTransactionFilterReturnType = Filter<'transaction'>\n\nexport type CreatePendingTransactionFilterErrorType =\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Creates a Filter to listen for new pending transaction hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createPendingTransactionFilter\n * - JSON-RPC Methods: [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter)\n *\n * @param client - Client to use\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateBlockFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createPendingTransactionFilter(client)\n * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'transaction' }\n */\nexport async function createPendingTransactionFilter<\n  transport extends Transport,\n  chain extends Chain | undefined,\n>(\n  client: Client<transport, chain>,\n): Promise<CreatePendingTransactionFilterReturnType> {\n  const getRequest = createFilterRequestScope(client, {\n    method: 'eth_newPendingTransactionFilter',\n  })\n  const id = await client.request({\n    method: 'eth_newPendingTransactionFilter',\n  })\n  return { id, request: getRequest(id), type: 'transaction' }\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { multicall3Abi } from '../../constants/abis.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport { decodeFunctionResult } from '../../utils/abi/decodeFunctionResult.js'\nimport { encodeFunctionData } from '../../utils/abi/encodeFunctionData.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type CallParameters, call } from './call.js'\n\nexport type GetBalanceParameters = {\n  /** The address of the account. */\n  address: Address\n} & (\n  | {\n      /** The balance of the account at a block number. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n  | {\n      blockNumber?: undefined\n      /** The balance of the account at a block tag. */\n      blockTag?: BlockTag | undefined\n    }\n)\n\nexport type GetBalanceReturnType = bigint\n\nexport type GetBalanceErrorType =\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns the balance of an address in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBalance\n * - JSON-RPC Methods: [`eth_getBalance`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance)\n *\n * You can convert the balance to ether units with [`formatEther`](https://viem.sh/docs/utilities/formatEther).\n *\n * ```ts\n * const balance = await getBalance(client, {\n *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n *   blockTag: 'safe'\n * })\n * const balanceAsEther = formatEther(balance)\n * // \"6.942\"\n * ```\n *\n * @param client - Client to use\n * @param parameters - {@link GetBalanceParameters}\n * @returns The balance of the address in wei. {@link GetBalanceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBalance } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const balance = await getBalance(client, {\n *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n * // 10000000000000000000000n (wei)\n */\nexport async function getBalance<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    address,\n    blockNumber,\n    blockTag = client.experimental_blockTag ?? 'latest',\n  }: GetBalanceParameters,\n): Promise<GetBalanceReturnType> {\n  if (client.batch?.multicall && client.chain?.contracts?.multicall3) {\n    const multicall3Address = client.chain.contracts.multicall3.address\n\n    const calldata = encodeFunctionData({\n      abi: multicall3Abi,\n      functionName: 'getEthBalance',\n      args: [address],\n    })\n\n    const { data } = await getAction(\n      client,\n      call,\n      'call',\n    )({\n      to: multicall3Address,\n      data: calldata,\n      blockNumber,\n      blockTag,\n    } as unknown as CallParameters<chain>)\n\n    return decodeFunctionResult({\n      abi: multicall3Abi,\n      functionName: 'getEthBalance',\n      args: [address],\n      data: data || '0x',\n    })\n  }\n\n  const blockNumberHex =\n    typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n\n  const balance = await client.request({\n    method: 'eth_getBalance',\n    params: [address, blockNumberHex || blockTag],\n  })\n  return BigInt(balance)\n}\n", "import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type GetBlobBaseFeeReturnType = bigint\n\nexport type GetBlobBaseFeeErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns the base fee per blob gas in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlobBaseFee\n * - JSON-RPC Methods: [`eth_blobBaseFee`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blobBaseFee)\n *\n * @param client - Client to use\n * @returns The blob base fee (in wei). {@link GetBlobBaseFeeReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlobBaseFee } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const blobBaseFee = await getBlobBaseFee(client)\n */\nexport async function getBlobBaseFee<\n  chain extends Chain | undefined,\n  account extends Account | undefined,\n>(\n  client: Client<Transport, chain, account>,\n): Promise<GetBlobBaseFeeReturnType> {\n  const baseFee = await client.request({\n    method: 'eth_blobBaseFee',\n  })\n  return BigInt(baseFee)\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { Quantity } from '../../types/rpc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type HexToNumberErrorType,\n  hexToNumber,\n} from '../../utils/encoding/fromHex.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetBlockTransactionCountParameters =\n  | {\n      /** Hash of the block. */\n      blockHash?: Hash | undefined\n      blockNumber?: undefined\n      blockTag?: undefined\n    }\n  | {\n      blockHash?: undefined\n      /** The block number. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n  | {\n      blockHash?: undefined\n      blockNumber?: undefined\n      /** The block tag. Defaults to 'latest'. */\n      blockTag?: BlockTag | undefined\n    }\n\nexport type GetBlockTransactionCountReturnType = number\n\nexport type GetBlockTransactionCountErrorType =\n  | NumberToHexErrorType\n  | HexToNumberErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns the number of Transactions at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlockTransactionCount\n * - JSON-RPC Methods:\n *   - Calls [`eth_getBlockTransactionCountByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbynumber) for `blockNumber` & `blockTag`.\n *   - Calls [`eth_getBlockTransactionCountByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbyhash) for `blockHash`.\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockTransactionCountParameters}\n * @returns The block transaction count. {@link GetBlockTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlockTransactionCount } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const count = await getBlockTransactionCount(client)\n */\nexport async function getBlockTransactionCount<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    blockHash,\n    blockNumber,\n    blockTag = 'latest',\n  }: GetBlockTransactionCountParameters = {},\n): Promise<GetBlockTransactionCountReturnType> {\n  const blockNumberHex =\n    blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n  let count: Quantity\n  if (blockHash) {\n    count = await client.request(\n      {\n        method: 'eth_getBlockTransactionCountByHash',\n        params: [blockHash],\n      },\n      { dedupe: true },\n    )\n  } else {\n    count = await client.request(\n      {\n        method: 'eth_getBlockTransactionCountByNumber',\n        params: [blockNumberHex || blockTag],\n      },\n      { dedupe: Boolean(blockNumberHex) },\n    )\n  }\n\n  return hexToNumber(count)\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetCodeParameters = {\n  address: Address\n} & (\n  | {\n      blockNumber?: undefined\n      blockTag?: BlockTag | undefined\n    }\n  | {\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n)\n\nexport type GetCodeReturnType = Hex | undefined\n\nexport type GetCodeErrorType =\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Retrieves the bytecode at an address.\n *\n * - Docs: https://viem.sh/docs/contract/getCode\n * - JSON-RPC Methods: [`eth_getCode`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getcode)\n *\n * @param client - Client to use\n * @param parameters - {@link GetCodeParameters}\n * @returns The contract's bytecode. {@link GetCodeReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getCode } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const code = await getCode(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * })\n */\nexport async function getCode<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { address, blockNumber, blockTag = 'latest' }: GetCodeParameters,\n): Promise<GetCodeReturnType> {\n  const blockNumberHex =\n    blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n  const hex = await client.request(\n    {\n      method: 'eth_getCode',\n      params: [address, blockNumberHex || blockTag],\n    },\n    { dedupe: Boolean(blockNumberHex) },\n  )\n  if (hex === '0x') return undefined\n  return hex\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport {\n  type GetAddressErrorType,\n  getAddress,\n} from '../../utils/address/getAddress.js'\nimport { type SizeErrorType, size } from '../../utils/data/size.js'\nimport { type SliceErrorType, slice } from '../../utils/data/slice.js'\nimport { type GetCodeErrorType, getCode } from './getCode.js'\n\nexport type GetDelegationParameters = {\n  /** The address to check for delegation. */\n  address: Address\n} & (\n  | {\n      blockNumber?: undefined\n      blockTag?: BlockTag | undefined\n    }\n  | {\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n)\n\nexport type GetDelegationReturnType = Address | undefined\n\nexport type GetDelegationErrorType =\n  | GetAddressErrorType\n  | GetCodeErrorType\n  | SliceErrorType\n  | SizeErrorType\n  | ErrorType\n\n/**\n * Returns the address that an account has delegated to via EIP-7702.\n *\n * - Docs: https://viem.sh/docs/actions/public/getDelegation\n *\n * @param client - Client to use\n * @param parameters - {@link GetDelegationParameters}\n * @returns The delegated address, or undefined if not delegated. {@link GetDelegationReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getDelegation } from 'viem/actions'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const delegation = await getDelegation(client, {\n *   address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function getDelegation<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { address, blockNumber, blockTag = 'latest' }: GetDelegationParameters,\n): Promise<GetDelegationReturnType> {\n  const code = await getCode(client, {\n    address,\n    ...(blockNumber !== undefined ? { blockNumber } : { blockTag }),\n  } as GetDelegationParameters)\n\n  if (!code) return undefined\n\n  // EIP-7702 delegation designator: 0xef0100 prefix (3 bytes) + address (20 bytes) = 23 bytes\n  if (size(code) !== 23) return undefined\n\n  // Check for EIP-7702 delegation designator prefix\n  if (!code.startsWith('0xef0100')) return undefined\n\n  // Extract the delegated address (bytes 3-23) and checksum it\n  return getAddress(slice(code, 3, 23))\n}\n", "import type { Address } from 'abitype'\nimport { BaseError } from './base.js'\n\nexport type Eip712DomainNotFoundErrorType = Eip712DomainNotFoundError & {\n  name: 'Eip712DomainNotFoundError'\n}\nexport class Eip712DomainNotFoundError extends BaseError {\n  constructor({ address }: { address: Address }) {\n    super(`No EIP-712 domain found on contract \"${address}\".`, {\n      metaMessages: [\n        'Ensure that:',\n        `- The contract is deployed at the address \"${address}\".`,\n        '- `eip712Domain()` function exists on the contract.',\n        '- `eip712Domain()` function matches signature to ERC-5267 specification.',\n      ],\n      name: 'Eip712DomainNotFoundError',\n    })\n  }\n}\n", "import type { Address, TypedDataDomain } from 'abitype'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  Eip712DomainNotFoundError,\n  type Eip712DomainNotFoundErrorType,\n} from '../../errors/eip712.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequiredBy } from '../../types/utils.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type ReadContractErrorType,\n  type ReadContractParameters,\n  readContract,\n} from './readContract.js'\n\nexport type GetEip712DomainParameters = {\n  address: Address\n} & Pick<ReadContractParameters, 'factory' | 'factoryData'>\n\nexport type GetEip712DomainReturnType = {\n  domain: RequiredBy<\n    TypedDataDomain,\n    'chainId' | 'name' | 'verifyingContract' | 'salt' | 'version'\n  >\n  fields: Hex\n  extensions: readonly bigint[]\n}\n\nexport type GetEip712DomainErrorType =\n  | Eip712DomainNotFoundErrorType\n  | ReadContractErrorType\n  | ErrorType\n\n/**\n * Reads the EIP-712 domain from a contract, based on the ERC-5267 specification.\n *\n * @param client - A {@link Client} instance.\n * @param parameters - The parameters of the action. {@link GetEip712DomainParameters}\n * @returns The EIP-712 domain, fields, and extensions. {@link GetEip712DomainReturnType}\n *\n * @example\n * ```ts\n * import { createPublicClient, http, getEip712Domain } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n *\n * const domain = await getEip712Domain(client, {\n *   address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n * })\n * // {\n * //   domain: {\n * //     name: 'ExampleContract',\n * //     version: '1',\n * //     chainId: 1,\n * //     verifyingContract: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n * //   },\n * //   fields: '0x0f',\n * //   extensions: [],\n * // }\n * ```\n */\nexport async function getEip712Domain(\n  client: Client<Transport>,\n  parameters: GetEip712DomainParameters,\n): Promise<GetEip712DomainReturnType> {\n  const { address, factory, factoryData } = parameters\n\n  try {\n    const [\n      fields,\n      name,\n      version,\n      chainId,\n      verifyingContract,\n      salt,\n      extensions,\n    ] = await getAction(\n      client,\n      readContract,\n      'readContract',\n    )({\n      abi,\n      address,\n      functionName: 'eip712Domain',\n      factory,\n      factoryData,\n    })\n\n    return {\n      domain: {\n        name,\n        version,\n        chainId: Number(chainId),\n        verifyingContract,\n        salt,\n      },\n      extensions,\n      fields,\n    }\n  } catch (e) {\n    const error = e as ReadContractErrorType\n    if (\n      error.name === 'ContractFunctionExecutionError' &&\n      error.cause.name === 'ContractFunctionZeroDataError'\n    ) {\n      throw new Eip712DomainNotFoundError({ address })\n    }\n    throw error\n  }\n}\n\nconst abi = [\n  {\n    inputs: [],\n    name: 'eip712Domain',\n    outputs: [\n      { name: 'fields', type: 'bytes1' },\n      { name: 'name', type: 'string' },\n      { name: 'version', type: 'string' },\n      { name: 'chainId', type: 'uint256' },\n      { name: 'verifyingContract', type: 'address' },\n      { name: 'salt', type: 'bytes32' },\n      { name: 'extensions', type: 'uint256[]' },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n] as const\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { FeeHistory } from '../../types/fee.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type FormatFeeHistoryErrorType,\n  formatFeeHistory,\n} from '../../utils/formatters/feeHistory.js'\n\nexport type GetFeeHistoryParameters = {\n  /**\n   * Number of blocks in the requested range. Between 1 and 1024 blocks can be requested in a single query. Less than requested may be returned if not all blocks are available.\n   */\n  blockCount: number\n  /**\n   * A monotonically increasing list of percentile values to sample from each block's effective priority fees per gas in ascending order, weighted by gas used.\n   */\n  rewardPercentiles: number[]\n} & (\n  | {\n      blockNumber?: undefined\n      /**\n       * Highest number block of the requested range.\n       * @default 'latest'\n       */\n      blockTag?: BlockTag | undefined\n    }\n  | {\n      /** Highest number block of the requested range. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n)\nexport type GetFeeHistoryReturnType = FeeHistory\n\nexport type GetFeeHistoryErrorType =\n  | NumberToHexErrorType\n  | RequestErrorType\n  | FormatFeeHistoryErrorType\n\n/**\n * Returns a collection of historical gas information.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFeeHistory\n * - JSON-RPC Methods: [`eth_feeHistory`](https://docs.alchemy.com/reference/eth-feehistory)\n *\n * @param client - Client to use\n * @param parameters - {@link GetFeeHistoryParameters}\n * @returns The gas estimate (in wei). {@link GetFeeHistoryReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getFeeHistory } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const feeHistory = await getFeeHistory(client, {\n *   blockCount: 4,\n *   rewardPercentiles: [25, 75],\n * })\n */\nexport async function getFeeHistory<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    blockCount,\n    blockNumber,\n    blockTag = 'latest',\n    rewardPercentiles,\n  }: GetFeeHistoryParameters,\n): Promise<GetFeeHistoryReturnType> {\n  const blockNumberHex =\n    typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n  const feeHistory = await client.request(\n    {\n      method: 'eth_feeHistory',\n      params: [\n        numberToHex(blockCount),\n        blockNumberHex || blockTag,\n        rewardPercentiles,\n      ],\n    },\n    { dedupe: Boolean(blockNumberHex) },\n  )\n  return formatFeeHistory(feeHistory)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { FeeHistory } from '../../types/fee.js'\nimport type { RpcFeeHistory } from '../../types/rpc.js'\n\nexport type FormatFeeHistoryErrorType = ErrorType\n\nexport function formatFeeHistory(feeHistory: RpcFeeHistory): FeeHistory {\n  return {\n    baseFeePerGas: feeHistory.baseFeePerGas.map((value) => BigInt(value)),\n    gasUsedRatio: feeHistory.gasUsedRatio,\n    oldestBlock: BigInt(feeHistory.oldestBlock),\n    reward: feeHistory.reward?.map((reward) =>\n      reward.map((value) => BigInt(value)),\n    ),\n  }\n}\n", "import type { Abi, AbiEvent, ExtractAbiEvent } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { DecodeEventLogErrorType } from '../../utils/abi/decodeEventLog.js'\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type FormatLogErrorType,\n  formatLog,\n} from '../../utils/formatters/log.js'\n\nexport type GetFilterLogsParameters<\n  abi extends Abi | readonly unknown[] | undefined = undefined,\n  eventName extends string | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n  filter: Filter<'event', abi, eventName, any, strict, fromBlock, toBlock>\n}\nexport type GetFilterLogsReturnType<\n  abi extends Abi | readonly unknown[] | undefined = undefined,\n  eventName extends string | undefined = undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n  _AbiEvent extends AbiEvent | undefined = abi extends Abi\n    ? eventName extends string\n      ? ExtractAbiEvent<abi, eventName>\n      : undefined\n    : undefined,\n  _Pending extends boolean =\n    | (fromBlock extends 'pending' ? true : false)\n    | (toBlock extends 'pending' ? true : false),\n> = Log<bigint, number, _Pending, _AbiEvent, strict, abi, eventName>[]\n\nexport type GetFilterLogsErrorType =\n  | RequestErrorType\n  | DecodeEventLogErrorType\n  | FormatLogErrorType\n  | ErrorType\n\n/**\n * Returns a list of event logs since the filter was created.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFilterLogs\n * - JSON-RPC Methods: [`eth_getFilterLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterlogs)\n *\n * `getFilterLogs` is only compatible with **event filters**.\n *\n * @param client - Client to use\n * @param parameters - {@link GetFilterLogsParameters}\n * @returns A list of event logs. {@link GetFilterLogsReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createEventFilter, getFilterLogs } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const filter = await createEventFilter(client, {\n *   address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n *   event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n * })\n * const logs = await getFilterLogs(client, { filter })\n */\nexport async function getFilterLogs<\n  chain extends Chain | undefined,\n  const abi extends Abi | readonly unknown[] | undefined,\n  eventName extends string | undefined,\n  strict extends boolean | undefined = undefined,\n  fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n  toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n  _client: Client<Transport, chain>,\n  {\n    filter,\n  }: GetFilterLogsParameters<abi, eventName, strict, fromBlock, toBlock>,\n): Promise<\n  GetFilterLogsReturnType<abi, eventName, strict, fromBlock, toBlock>\n> {\n  const strict = filter.strict ?? false\n\n  const logs = await filter.request({\n    method: 'eth_getFilterLogs',\n    params: [filter.id],\n  })\n\n  const formattedLogs = logs.map((log) => formatLog(log))\n  if (!filter.abi)\n    return formattedLogs as GetFilterLogsReturnType<\n      abi,\n      eventName,\n      strict,\n      fromBlock,\n      toBlock\n    >\n  return parseEventLogs({\n    abi: filter.abi,\n    logs: formattedLogs,\n    strict,\n  }) as unknown as GetFilterLogsReturnType<\n    abi,\n    eventName,\n    strict,\n    fromBlock,\n    toBlock\n  >\n}\n", "import type { Address } from 'abitype'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { Proof } from '../../types/proof.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type FormatProofErrorType,\n  formatProof,\n} from '../../utils/formatters/proof.js'\n\nexport type GetProofParameters = {\n  /** Account address. */\n  address: Address\n  /** Array of storage-keys that should be proofed and included. */\n  storageKeys: Hash[]\n} & (\n  | {\n      /** The block number. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n  | {\n      blockNumber?: undefined\n      /**\n       * The block tag.\n       * @default 'latest'\n       */\n      blockTag?: BlockTag | undefined\n    }\n)\n\nexport type GetProofReturnType = Proof\n\nexport type GetProofErrorType =\n  | NumberToHexErrorType\n  | FormatProofErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns the account and storage values of the specified account including the Merkle-proof.\n *\n * - Docs: https://viem.sh/docs/actions/public/getProof\n * - JSON-RPC Methods:\n *   - Calls [`eth_getProof`](https://eips.ethereum.org/EIPS/eip-1186)\n *\n * @param client - Client to use\n * @param parameters - {@link GetProofParameters}\n * @returns Proof data. {@link GetProofReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getProof } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const block = await getProof(client, {\n *  address: '0x...',\n *  storageKeys: ['0x...'],\n * })\n */\nexport async function getProof<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    address,\n    blockNumber,\n    blockTag: blockTag_,\n    storageKeys,\n  }: GetProofParameters,\n): Promise<GetProofReturnType> {\n  const blockTag = blockTag_ ?? 'latest'\n\n  const blockNumberHex =\n    blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n  const proof = await client.request({\n    method: 'eth_getProof',\n    params: [address, storageKeys, blockNumberHex || blockTag],\n  })\n\n  return formatProof(proof)\n}\n", "import type {\n  AbiParameterToPrimitiveType,\n  AbiType,\n  Address,\n  SolidityAddress,\n  SolidityArrayWithoutTuple,\n  SolidityBool,\n  SolidityBytes,\n  SolidityInt,\n  SolidityString,\n} from 'abitype'\n\nimport {\n  AbiEncodingLengthMismatchError,\n  type AbiEncodingLengthMismatchErrorType,\n  BytesSizeMismatchError,\n  type BytesSizeMismatchErrorType,\n  UnsupportedPackedAbiType,\n} from '../../errors/abi.js'\nimport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport { type PadErrorType, pad } from '../data/pad.js'\nimport {\n  type BoolToHexErrorType,\n  boolToHex,\n  type NumberToHexErrorType,\n  numberToHex,\n  type StringToHexErrorType,\n  stringToHex,\n} from '../encoding/toHex.js'\nimport { arrayRegex, bytesRegex, integerRegex } from '../regex.js'\n\ntype PackedAbiType =\n  | SolidityAddress\n  | SolidityBool\n  | SolidityBytes\n  | SolidityInt\n  | SolidityString\n  | SolidityArrayWithoutTuple\n\ntype EncodePackedValues<\n  packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n> = {\n  [K in keyof packedAbiTypes]: packedAbiTypes[K] extends AbiType\n    ? AbiParameterToPrimitiveType<{ type: packedAbiTypes[K] }>\n    : unknown\n}\n\nexport type EncodePackedErrorType =\n  | AbiEncodingLengthMismatchErrorType\n  | ConcatHexErrorType\n  | EncodeErrorType\n  | ErrorType\n\nexport function encodePacked<\n  const packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n>(types: packedAbiTypes, values: EncodePackedValues<packedAbiTypes>): Hex {\n  if (types.length !== values.length)\n    throw new AbiEncodingLengthMismatchError({\n      expectedLength: types.length as number,\n      givenLength: values.length as number,\n    })\n\n  const data: Hex[] = []\n  for (let i = 0; i < (types as unknown[]).length; i++) {\n    const type = types[i]\n    const value = values[i]\n    data.push(encode(type, value))\n  }\n  return concatHex(data)\n}\n\ntype EncodeErrorType =\n  | BoolToHexErrorType\n  | BytesSizeMismatchErrorType\n  | InvalidAddressErrorType\n  | IsAddressErrorType\n  | NumberToHexErrorType\n  | PadErrorType\n  | StringToHexErrorType\n  | UnsupportedPackedAbiType\n  | ErrorType\n\nfunction encode<const packedAbiType extends PackedAbiType | unknown>(\n  type: packedAbiType,\n  value: EncodePackedValues<[packedAbiType]>[0],\n  isArray = false,\n): Hex {\n  if (type === 'address') {\n    const address = value as Address\n    if (!isAddress(address)) throw new InvalidAddressError({ address })\n    return pad(address.toLowerCase() as Hex, {\n      size: isArray ? 32 : null,\n    }) as Address\n  }\n  if (type === 'string') return stringToHex(value as string)\n  if (type === 'bytes') return value as Hex\n  if (type === 'bool')\n    return pad(boolToHex(value as boolean), { size: isArray ? 32 : 1 })\n\n  const intMatch = (type as string).match(integerRegex)\n  if (intMatch) {\n    const [_type, baseType, bits = '256'] = intMatch\n    const size = Number.parseInt(bits, 10) / 8\n    return numberToHex(value as number, {\n      size: isArray ? 32 : size,\n      signed: baseType === 'int',\n    })\n  }\n\n  const bytesMatch = (type as string).match(bytesRegex)\n  if (bytesMatch) {\n    const [_type, size] = bytesMatch\n    if (Number.parseInt(size, 10) !== ((value as Hex).length - 2) / 2)\n      throw new BytesSizeMismatchError({\n        expectedSize: Number.parseInt(size, 10),\n        givenSize: ((value as Hex).length - 2) / 2,\n      })\n    return pad(value as Hex, { dir: 'right', size: isArray ? 32 : null }) as Hex\n  }\n\n  const arrayMatch = (type as string).match(arrayRegex)\n  if (arrayMatch && Array.isArray(value)) {\n    const [_type, childType] = arrayMatch\n    const data: Hex[] = []\n    for (let i = 0; i < value.length; i++) {\n      data.push(encode(childType, value[i], true))\n    }\n    if (data.length === 0) return '0x'\n    return concatHex(data)\n  }\n\n  throw new UnsupportedPackedAbiType(type)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type {\n  AuthorizationList,\n  SerializedAuthorizationList,\n} from '../../types/authorization.js'\nimport { toHex } from '../encoding/toHex.js'\nimport { toYParitySignatureArray } from '../transaction/serializeTransaction.js'\n\nexport type SerializeAuthorizationListReturnType = SerializedAuthorizationList\n\nexport type SerializeAuthorizationListErrorType = ErrorType\n\n/*\n * Serializes an EIP-7702 authorization list.\n */\nexport function serializeAuthorizationList(\n  authorizationList?: AuthorizationList<number, true> | undefined,\n): SerializeAuthorizationListReturnType {\n  if (!authorizationList || authorizationList.length === 0) return []\n\n  const serializedAuthorizationList = []\n  for (const authorization of authorizationList) {\n    const { chainId, nonce, ...signature } = authorization\n    const contractAddress = authorization.address\n    serializedAuthorizationList.push([\n      chainId ? toHex(chainId) : '0x',\n      contractAddress,\n      nonce ? toHex(nonce) : '0x',\n      ...toYParitySignatureArray({}, signature),\n    ])\n  }\n\n  return serializedAuthorizationList as {} as SerializeAuthorizationListReturnType\n}\n", "import {\n  InvalidLegacyVError,\n  type InvalidLegacyVErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  ByteArray,\n  Hex,\n  Signature,\n  SignatureLegacy,\n} from '../../types/misc.js'\nimport type {\n  TransactionSerializable,\n  TransactionSerializableEIP1559,\n  TransactionSerializableEIP2930,\n  TransactionSerializableEIP4844,\n  TransactionSerializableEIP7702,\n  TransactionSerializableGeneric,\n  TransactionSerializableLegacy,\n  TransactionSerialized,\n  TransactionSerializedEIP1559,\n  TransactionSerializedEIP2930,\n  TransactionSerializedEIP4844,\n  TransactionSerializedEIP7702,\n  TransactionSerializedLegacy,\n  TransactionType,\n} from '../../types/transaction.js'\nimport type { MaybePromise, OneOf } from '../../types/utils.js'\nimport {\n  type SerializeAuthorizationListErrorType,\n  serializeAuthorizationList,\n} from '../authorization/serializeAuthorizationList.js'\nimport {\n  type BlobsToCommitmentsErrorType,\n  blobsToCommitments,\n} from '../blob/blobsToCommitments.js'\nimport {\n  blobsToProofs,\n  type blobsToProofsErrorType,\n} from '../blob/blobsToProofs.js'\nimport {\n  type CommitmentsToVersionedHashesErrorType,\n  commitmentsToVersionedHashes,\n} from '../blob/commitmentsToVersionedHashes.js'\nimport {\n  type ToBlobSidecarsErrorType,\n  toBlobSidecars,\n} from '../blob/toBlobSidecars.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport { trim } from '../data/trim.js'\nimport {\n  bytesToHex,\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../encoding/toHex.js'\nimport { type ToRlpErrorType, toRlp } from '../encoding/toRlp.js'\n\nimport {\n  type AssertTransactionEIP1559ErrorType,\n  type AssertTransactionEIP2930ErrorType,\n  type AssertTransactionEIP4844ErrorType,\n  type AssertTransactionEIP7702ErrorType,\n  type AssertTransactionLegacyErrorType,\n  assertTransactionEIP1559,\n  assertTransactionEIP2930,\n  assertTransactionEIP4844,\n  assertTransactionEIP7702,\n  assertTransactionLegacy,\n} from './assertTransaction.js'\nimport {\n  type GetTransactionType,\n  type GetTransactionTypeErrorType,\n  getTransactionType,\n} from './getTransactionType.js'\nimport {\n  type SerializeAccessListErrorType,\n  serializeAccessList,\n} from './serializeAccessList.js'\n\nexport type SerializedTransactionReturnType<\n  transaction extends TransactionSerializable = TransactionSerializable,\n  ///\n  _transactionType extends TransactionType = GetTransactionType<transaction>,\n> = TransactionSerialized<_transactionType>\n\nexport type SerializeTransactionFn<\n  transaction extends TransactionSerializableGeneric = TransactionSerializable,\n  ///\n  _transactionType extends TransactionType = never,\n> = (\n  transaction: OneOf<TransactionSerializable | transaction>,\n  signature?: Signature | undefined,\n) => MaybePromise<\n  SerializedTransactionReturnType<\n    OneOf<TransactionSerializable | transaction>,\n    _transactionType\n  >\n>\n\nexport type SerializeTransactionErrorType =\n  | GetTransactionTypeErrorType\n  | SerializeTransactionEIP1559ErrorType\n  | SerializeTransactionEIP2930ErrorType\n  | SerializeTransactionEIP4844ErrorType\n  | SerializeTransactionEIP7702ErrorType\n  | SerializeTransactionLegacyErrorType\n  | ErrorType\n\nexport function serializeTransaction<\n  const transaction extends TransactionSerializable,\n  ///\n  _transactionType extends TransactionType = GetTransactionType<transaction>,\n>(\n  transaction: transaction,\n  signature?: Signature | undefined,\n): SerializedTransactionReturnType<transaction, _transactionType> {\n  const type = getTransactionType(transaction) as GetTransactionType\n\n  if (type === 'eip1559')\n    return serializeTransactionEIP1559(\n      transaction as TransactionSerializableEIP1559,\n      signature,\n    ) as SerializedTransactionReturnType<transaction>\n\n  if (type === 'eip2930')\n    return serializeTransactionEIP2930(\n      transaction as TransactionSerializableEIP2930,\n      signature,\n    ) as SerializedTransactionReturnType<transaction>\n\n  if (type === 'eip4844')\n    return serializeTransactionEIP4844(\n      transaction as TransactionSerializableEIP4844,\n      signature,\n    ) as SerializedTransactionReturnType<transaction>\n\n  if (type === 'eip7702')\n    return serializeTransactionEIP7702(\n      transaction as TransactionSerializableEIP7702,\n      signature,\n    ) as SerializedTransactionReturnType<transaction>\n\n  return serializeTransactionLegacy(\n    transaction as TransactionSerializableLegacy,\n    signature as SignatureLegacy,\n  ) as SerializedTransactionReturnType<transaction>\n}\n\ntype SerializeTransactionEIP7702ErrorType =\n  | AssertTransactionEIP7702ErrorType\n  | SerializeAuthorizationListErrorType\n  | ConcatHexErrorType\n  | InvalidLegacyVErrorType\n  | NumberToHexErrorType\n  | ToRlpErrorType\n  | SerializeAccessListErrorType\n  | ErrorType\n\nfunction serializeTransactionEIP7702(\n  transaction: TransactionSerializableEIP7702,\n  signature?: Signature | undefined,\n): TransactionSerializedEIP7702 {\n  const {\n    authorizationList,\n    chainId,\n    gas,\n    nonce,\n    to,\n    value,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    accessList,\n    data,\n  } = transaction\n\n  assertTransactionEIP7702(transaction)\n\n  const serializedAccessList = serializeAccessList(accessList)\n  const serializedAuthorizationList =\n    serializeAuthorizationList(authorizationList)\n\n  return concatHex([\n    '0x04',\n    toRlp([\n      numberToHex(chainId),\n      nonce ? numberToHex(nonce) : '0x',\n      maxPriorityFeePerGas ? numberToHex(maxPriorityFeePerGas) : '0x',\n      maxFeePerGas ? numberToHex(maxFeePerGas) : '0x',\n      gas ? numberToHex(gas) : '0x',\n      to ?? '0x',\n      value ? numberToHex(value) : '0x',\n      data ?? '0x',\n      serializedAccessList,\n      serializedAuthorizationList,\n      ...toYParitySignatureArray(transaction, signature),\n    ]),\n  ]) as TransactionSerializedEIP7702\n}\n\ntype SerializeTransactionEIP4844ErrorType =\n  | AssertTransactionEIP4844ErrorType\n  | BlobsToCommitmentsErrorType\n  | CommitmentsToVersionedHashesErrorType\n  | blobsToProofsErrorType\n  | ToBlobSidecarsErrorType\n  | ConcatHexErrorType\n  | InvalidLegacyVErrorType\n  | NumberToHexErrorType\n  | ToRlpErrorType\n  | SerializeAccessListErrorType\n  | ErrorType\n\nfunction serializeTransactionEIP4844(\n  transaction: TransactionSerializableEIP4844,\n  signature?: Signature | undefined,\n): TransactionSerializedEIP4844 {\n  const {\n    chainId,\n    gas,\n    nonce,\n    to,\n    value,\n    maxFeePerBlobGas,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    accessList,\n    data,\n  } = transaction\n\n  assertTransactionEIP4844(transaction)\n\n  let blobVersionedHashes = transaction.blobVersionedHashes\n  let sidecars = transaction.sidecars\n  // If `blobs` are passed, we will need to compute the KZG commitments & proofs.\n  if (\n    transaction.blobs &&\n    (typeof blobVersionedHashes === 'undefined' ||\n      typeof sidecars === 'undefined')\n  ) {\n    const blobs = (\n      typeof transaction.blobs[0] === 'string'\n        ? transaction.blobs\n        : (transaction.blobs as ByteArray[]).map((x) => bytesToHex(x))\n    ) as Hex[]\n    const kzg = transaction.kzg!\n    const commitments = blobsToCommitments({\n      blobs,\n      kzg,\n    })\n\n    if (typeof blobVersionedHashes === 'undefined')\n      blobVersionedHashes = commitmentsToVersionedHashes({\n        commitments,\n      })\n    if (typeof sidecars === 'undefined') {\n      const proofs = blobsToProofs({ blobs, commitments, kzg })\n      sidecars = toBlobSidecars({ blobs, commitments, proofs })\n    }\n  }\n\n  const serializedAccessList = serializeAccessList(accessList)\n\n  const serializedTransaction = [\n    numberToHex(chainId),\n    nonce ? numberToHex(nonce) : '0x',\n    maxPriorityFeePerGas ? numberToHex(maxPriorityFeePerGas) : '0x',\n    maxFeePerGas ? numberToHex(maxFeePerGas) : '0x',\n    gas ? numberToHex(gas) : '0x',\n    to ?? '0x',\n    value ? numberToHex(value) : '0x',\n    data ?? '0x',\n    serializedAccessList,\n    maxFeePerBlobGas ? numberToHex(maxFeePerBlobGas) : '0x',\n    blobVersionedHashes ?? [],\n    ...toYParitySignatureArray(transaction, signature),\n  ] as const\n\n  const blobs: Hex[] = []\n  const commitments: Hex[] = []\n  const proofs: Hex[] = []\n  if (sidecars)\n    for (let i = 0; i < sidecars.length; i++) {\n      const { blob, commitment, proof } = sidecars[i]\n      blobs.push(blob)\n      commitments.push(commitment)\n      proofs.push(proof)\n    }\n\n  return concatHex([\n    '0x03',\n    sidecars\n      ? // If sidecars are enabled, envelope turns into a \"wrapper\":\n        toRlp([serializedTransaction, blobs, commitments, proofs])\n      : // If sidecars are disabled, standard envelope is used:\n        toRlp(serializedTransaction),\n  ]) as TransactionSerializedEIP4844\n}\n\ntype SerializeTransactionEIP1559ErrorType =\n  | AssertTransactionEIP1559ErrorType\n  | ConcatHexErrorType\n  | InvalidLegacyVErrorType\n  | NumberToHexErrorType\n  | ToRlpErrorType\n  | SerializeAccessListErrorType\n  | ErrorType\n\nfunction serializeTransactionEIP1559(\n  transaction: TransactionSerializableEIP1559,\n  signature?: Signature | undefined,\n): TransactionSerializedEIP1559 {\n  const {\n    chainId,\n    gas,\n    nonce,\n    to,\n    value,\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    accessList,\n    data,\n  } = transaction\n\n  assertTransactionEIP1559(transaction)\n\n  const serializedAccessList = serializeAccessList(accessList)\n\n  const serializedTransaction = [\n    numberToHex(chainId),\n    nonce ? numberToHex(nonce) : '0x',\n    maxPriorityFeePerGas ? numberToHex(maxPriorityFeePerGas) : '0x',\n    maxFeePerGas ? numberToHex(maxFeePerGas) : '0x',\n    gas ? numberToHex(gas) : '0x',\n    to ?? '0x',\n    value ? numberToHex(value) : '0x',\n    data ?? '0x',\n    serializedAccessList,\n    ...toYParitySignatureArray(transaction, signature),\n  ]\n\n  return concatHex([\n    '0x02',\n    toRlp(serializedTransaction),\n  ]) as TransactionSerializedEIP1559\n}\n\ntype SerializeTransactionEIP2930ErrorType =\n  | AssertTransactionEIP2930ErrorType\n  | ConcatHexErrorType\n  | InvalidLegacyVErrorType\n  | NumberToHexErrorType\n  | ToRlpErrorType\n  | SerializeAccessListErrorType\n  | ErrorType\n\nfunction serializeTransactionEIP2930(\n  transaction: TransactionSerializableEIP2930,\n  signature?: Signature | undefined,\n): TransactionSerializedEIP2930 {\n  const { chainId, gas, data, nonce, to, value, accessList, gasPrice } =\n    transaction\n\n  assertTransactionEIP2930(transaction)\n\n  const serializedAccessList = serializeAccessList(accessList)\n\n  const serializedTransaction = [\n    numberToHex(chainId),\n    nonce ? numberToHex(nonce) : '0x',\n    gasPrice ? numberToHex(gasPrice) : '0x',\n    gas ? numberToHex(gas) : '0x',\n    to ?? '0x',\n    value ? numberToHex(value) : '0x',\n    data ?? '0x',\n    serializedAccessList,\n    ...toYParitySignatureArray(transaction, signature),\n  ]\n\n  return concatHex([\n    '0x01',\n    toRlp(serializedTransaction),\n  ]) as TransactionSerializedEIP2930\n}\n\ntype SerializeTransactionLegacyErrorType =\n  | AssertTransactionLegacyErrorType\n  | InvalidLegacyVErrorType\n  | NumberToHexErrorType\n  | ToRlpErrorType\n  | ErrorType\n\nfunction serializeTransactionLegacy(\n  transaction: TransactionSerializableLegacy,\n  signature?: SignatureLegacy | undefined,\n): TransactionSerializedLegacy {\n  const { chainId = 0, gas, data, nonce, to, value, gasPrice } = transaction\n\n  assertTransactionLegacy(transaction)\n\n  let serializedTransaction = [\n    nonce ? numberToHex(nonce) : '0x',\n    gasPrice ? numberToHex(gasPrice) : '0x',\n    gas ? numberToHex(gas) : '0x',\n    to ?? '0x',\n    value ? numberToHex(value) : '0x',\n    data ?? '0x',\n  ]\n\n  if (signature) {\n    const v = (() => {\n      // EIP-155 (inferred chainId)\n      if (signature.v >= 35n) {\n        const inferredChainId = (signature.v - 35n) / 2n\n        if (inferredChainId > 0) return signature.v\n        return 27n + (signature.v === 35n ? 0n : 1n)\n      }\n\n      // EIP-155 (explicit chainId)\n      if (chainId > 0)\n        return BigInt(chainId * 2) + BigInt(35n + signature.v - 27n)\n\n      // Pre-EIP-155 (no chainId)\n      const v = 27n + (signature.v === 27n ? 0n : 1n)\n      if (signature.v !== v) throw new InvalidLegacyVError({ v: signature.v })\n      return v\n    })()\n\n    const r = trim(signature.r)\n    const s = trim(signature.s)\n\n    serializedTransaction = [\n      ...serializedTransaction,\n      numberToHex(v),\n      r === '0x00' ? '0x' : r,\n      s === '0x00' ? '0x' : s,\n    ]\n  } else if (chainId > 0) {\n    serializedTransaction = [\n      ...serializedTransaction,\n      numberToHex(chainId),\n      '0x',\n      '0x',\n    ]\n  }\n\n  return toRlp(serializedTransaction) as TransactionSerializedLegacy\n}\n\nexport function toYParitySignatureArray(\n  transaction: TransactionSerializableGeneric,\n  signature_?: Signature | undefined,\n) {\n  const signature = signature_ ?? transaction\n  const { v, yParity } = signature\n\n  if (typeof signature.r === 'undefined') return []\n  if (typeof signature.s === 'undefined') return []\n  if (typeof v === 'undefined' && typeof yParity === 'undefined') return []\n\n  const r = trim(signature.r)\n  const s = trim(signature.s)\n\n  const yParity_ = (() => {\n    if (typeof yParity === 'number') return yParity ? numberToHex(1) : '0x'\n    if (v === 0n) return '0x'\n    if (v === 1n) return numberToHex(1)\n\n    return v === 27n ? '0x' : numberToHex(1)\n  })()\n\n  return [yParity_, r === '0x00' ? '0x' : r, s === '0x00' ? '0x' : s]\n}\n", "import { versionedHashVersionKzg } from '../../constants/kzg.js'\nimport { maxUint256 } from '../../constants/number.js'\nimport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport { BaseError, type BaseErrorType } from '../../errors/base.js'\nimport {\n  EmptyBlobError,\n  type EmptyBlobErrorType,\n  InvalidVersionedHashSizeError,\n  type InvalidVersionedHashSizeErrorType,\n  InvalidVersionedHashVersionError,\n  type InvalidVersionedHashVersionErrorType,\n} from '../../errors/blob.js'\nimport {\n  InvalidChainIdError,\n  type InvalidChainIdErrorType,\n} from '../../errors/chain.js'\nimport {\n  FeeCapTooHighError,\n  type FeeCapTooHighErrorType,\n  TipAboveFeeCapError,\n  type TipAboveFeeCapErrorType,\n} from '../../errors/node.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n  TransactionSerializableEIP1559,\n  TransactionSerializableEIP2930,\n  TransactionSerializableEIP4844,\n  TransactionSerializableEIP7702,\n  TransactionSerializableLegacy,\n} from '../../types/transaction.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport { size } from '../data/size.js'\nimport { slice } from '../data/slice.js'\nimport { hexToNumber } from '../encoding/fromHex.js'\n\nexport type AssertTransactionEIP7702ErrorType =\n  | AssertTransactionEIP1559ErrorType\n  | InvalidAddressErrorType\n  | InvalidChainIdErrorType\n  | ErrorType\n\nexport function assertTransactionEIP7702(\n  transaction: TransactionSerializableEIP7702,\n) {\n  const { authorizationList } = transaction\n  if (authorizationList) {\n    for (const authorization of authorizationList) {\n      const { chainId } = authorization\n      const address = authorization.address\n      if (!isAddress(address)) throw new InvalidAddressError({ address })\n      if (chainId < 0) throw new InvalidChainIdError({ chainId })\n    }\n  }\n  assertTransactionEIP1559(transaction as {} as TransactionSerializableEIP1559)\n}\n\nexport type AssertTransactionEIP4844ErrorType =\n  | AssertTransactionEIP1559ErrorType\n  | EmptyBlobErrorType\n  | InvalidVersionedHashSizeErrorType\n  | InvalidVersionedHashVersionErrorType\n  | ErrorType\n\nexport function assertTransactionEIP4844(\n  transaction: TransactionSerializableEIP4844,\n) {\n  const { blobVersionedHashes } = transaction\n  if (blobVersionedHashes) {\n    if (blobVersionedHashes.length === 0) throw new EmptyBlobError()\n    for (const hash of blobVersionedHashes) {\n      const size_ = size(hash)\n      const version = hexToNumber(slice(hash, 0, 1))\n      if (size_ !== 32)\n        throw new InvalidVersionedHashSizeError({ hash, size: size_ })\n      if (version !== versionedHashVersionKzg)\n        throw new InvalidVersionedHashVersionError({\n          hash,\n          version,\n        })\n    }\n  }\n  assertTransactionEIP1559(transaction as {} as TransactionSerializableEIP1559)\n}\n\nexport type AssertTransactionEIP1559ErrorType =\n  | BaseErrorType\n  | IsAddressErrorType\n  | InvalidAddressErrorType\n  | InvalidChainIdErrorType\n  | FeeCapTooHighErrorType\n  | TipAboveFeeCapErrorType\n  | ErrorType\n\nexport function assertTransactionEIP1559(\n  transaction: TransactionSerializableEIP1559,\n) {\n  const { chainId, maxPriorityFeePerGas, maxFeePerGas, to } = transaction\n  if (chainId <= 0) throw new InvalidChainIdError({ chainId })\n  if (to && !isAddress(to)) throw new InvalidAddressError({ address: to })\n  if (maxFeePerGas && maxFeePerGas > maxUint256)\n    throw new FeeCapTooHighError({ maxFeePerGas })\n  if (\n    maxPriorityFeePerGas &&\n    maxFeePerGas &&\n    maxPriorityFeePerGas > maxFeePerGas\n  )\n    throw new TipAboveFeeCapError({ maxFeePerGas, maxPriorityFeePerGas })\n}\n\nexport type AssertTransactionEIP2930ErrorType =\n  | BaseErrorType\n  | IsAddressErrorType\n  | InvalidAddressErrorType\n  | InvalidChainIdErrorType\n  | FeeCapTooHighErrorType\n  | ErrorType\n\nexport function assertTransactionEIP2930(\n  transaction: TransactionSerializableEIP2930,\n) {\n  const { chainId, maxPriorityFeePerGas, gasPrice, maxFeePerGas, to } =\n    transaction\n  if (chainId <= 0) throw new InvalidChainIdError({ chainId })\n  if (to && !isAddress(to)) throw new InvalidAddressError({ address: to })\n  if (maxPriorityFeePerGas || maxFeePerGas)\n    throw new BaseError(\n      '`maxFeePerGas`/`maxPriorityFeePerGas` is not a valid EIP-2930 Transaction attribute.',\n    )\n  if (gasPrice && gasPrice > maxUint256)\n    throw new FeeCapTooHighError({ maxFeePerGas: gasPrice })\n}\n\nexport type AssertTransactionLegacyErrorType =\n  | BaseErrorType\n  | IsAddressErrorType\n  | InvalidAddressErrorType\n  | InvalidChainIdErrorType\n  | FeeCapTooHighErrorType\n  | ErrorType\n\nexport function assertTransactionLegacy(\n  transaction: TransactionSerializableLegacy,\n) {\n  const { chainId, maxPriorityFeePerGas, gasPrice, maxFeePerGas, to } =\n    transaction\n  if (to && !isAddress(to)) throw new InvalidAddressError({ address: to })\n  if (typeof chainId !== 'undefined' && chainId <= 0)\n    throw new InvalidChainIdError({ chainId })\n  if (maxPriorityFeePerGas || maxFeePerGas)\n    throw new BaseError(\n      '`maxFeePerGas`/`maxPriorityFeePerGas` is not a valid Legacy Transaction attribute.',\n    )\n  if (gasPrice && gasPrice > maxUint256)\n    throw new FeeCapTooHighError({ maxFeePerGas: gasPrice })\n}\n", "import {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport {\n  InvalidStorageKeySizeError,\n  type InvalidStorageKeySizeErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { AccessList } from '../../types/transaction.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport type { RecursiveArray } from '../encoding/toRlp.js'\n\nexport type SerializeAccessListErrorType =\n  | InvalidStorageKeySizeErrorType\n  | InvalidAddressErrorType\n  | IsAddressErrorType\n  | ErrorType\n\n/*\n * Serialize an  EIP-2930 access list\n * @remarks\n * Use to create a transaction serializer with support for EIP-2930 access lists\n *\n * @param accessList - Array of objects of address and arrays of Storage Keys\n * @throws InvalidAddressError, InvalidStorageKeySizeError\n * @returns Array of hex strings\n */\nexport function serializeAccessList(\n  accessList?: AccessList | undefined,\n): RecursiveArray<Hex> {\n  if (!accessList || accessList.length === 0) return []\n\n  const serializedAccessList = []\n  for (let i = 0; i < accessList.length; i++) {\n    const { address, storageKeys } = accessList[i]\n\n    for (let j = 0; j < storageKeys.length; j++) {\n      if (storageKeys[j].length - 2 !== 64) {\n        throw new InvalidStorageKeySizeError({ storageKey: storageKeys[j] })\n      }\n    }\n\n    if (!isAddress(address, { strict: false })) {\n      throw new InvalidAddressError({ address })\n    }\n\n    serializedAccessList.push([address, storageKeys])\n  }\n  return serializedAccessList\n}\n", "import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport { type GetAddressErrorType, getAddress } from '../address/getAddress.js'\nimport {\n  type IsAddressEqualErrorType,\n  isAddressEqual,\n} from '../address/isAddressEqual.js'\nimport {\n  type RecoverAuthorizationAddressErrorType,\n  type RecoverAuthorizationAddressParameters,\n  recoverAuthorizationAddress,\n} from './recoverAuthorizationAddress.js'\n\nexport type VerifyAuthorizationParameters =\n  RecoverAuthorizationAddressParameters & {\n    /** The address that signed the Authorization object. */\n    address: Address\n  }\n\nexport type VerifyAuthorizationReturnType = boolean\n\nexport type VerifyAuthorizationErrorType =\n  | IsAddressEqualErrorType\n  | GetAddressErrorType\n  | RecoverAuthorizationAddressErrorType\n  | ErrorType\n\n/**\n * Verify that an Authorization object was signed by the provided address.\n *\n * - Docs {@link https://viem.sh/docs/utilities/verifyAuthorization}\n *\n * @param parameters - {@link VerifyAuthorizationParameters}\n * @returns Whether or not the signature is valid. {@link VerifyAuthorizationReturnType}\n */\nexport async function verifyAuthorization({\n  address,\n  authorization,\n  signature,\n}: VerifyAuthorizationParameters): Promise<VerifyAuthorizationReturnType> {\n  return isAddressEqual(\n    getAddress(address),\n    await recoverAuthorizationAddress({\n      authorization,\n      signature,\n    }),\n  )\n}\n", "import { BaseError } from '../errors/base.js'\nimport {\n  HttpRequestError,\n  type HttpRequestErrorType,\n  type RpcRequestErrorType,\n  type TimeoutErrorType,\n  type WebSocketRequestErrorType,\n} from '../errors/request.js'\nimport {\n  AtomicityNotSupportedError,\n  type AtomicityNotSupportedErrorType,\n  AtomicReadyWalletRejectedUpgradeError,\n  type AtomicReadyWalletRejectedUpgradeErrorType,\n  BundleTooLargeError,\n  type BundleTooLargeErrorType,\n  ChainDisconnectedError,\n  type ChainDisconnectedErrorType,\n  DuplicateIdError,\n  type DuplicateIdErrorType,\n  InternalRpcError,\n  type InternalRpcErrorType,\n  InvalidInputRpcError,\n  type InvalidInputRpcErrorType,\n  InvalidParamsRpcError,\n  type InvalidParamsRpcErrorType,\n  InvalidRequestRpcError,\n  type InvalidRequestRpcErrorType,\n  JsonRpcVersionUnsupportedError,\n  type JsonRpcVersionUnsupportedErrorType,\n  LimitExceededRpcError,\n  type LimitExceededRpcErrorType,\n  MethodNotFoundRpcError,\n  type MethodNotFoundRpcErrorType,\n  MethodNotSupportedRpcError,\n  type MethodNotSupportedRpcErrorType,\n  ParseRpcError,\n  type ParseRpcErrorType,\n  ProviderDisconnectedError,\n  type ProviderDisconnectedErrorType,\n  type ProviderRpcErrorCode,\n  ResourceNotFoundRpcError,\n  type ResourceNotFoundRpcErrorType,\n  ResourceUnavailableRpcError,\n  type ResourceUnavailableRpcErrorType,\n  type RpcError,\n  type RpcErrorCode,\n  type RpcErrorType,\n  SwitchChainError,\n  type SwitchChainErrorType,\n  TransactionRejectedRpcError,\n  type TransactionRejectedRpcErrorType,\n  UnauthorizedProviderError,\n  type UnauthorizedProviderErrorType,\n  UnknownBundleIdError,\n  type UnknownBundleIdErrorType,\n  UnknownRpcError,\n  type UnknownRpcErrorType,\n  UnsupportedChainIdError,\n  type UnsupportedChainIdErrorType,\n  UnsupportedNonOptionalCapabilityError,\n  type UnsupportedNonOptionalCapabilityErrorType,\n  UnsupportedProviderMethodError,\n  type UnsupportedProviderMethodErrorType,\n  UserRejectedRequestError,\n  type UserRejectedRequestErrorType,\n  WalletConnectSessionSettlementError,\n  type WalletConnectSessionSettlementErrorType,\n} from '../errors/rpc.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type {\n  EIP1193RequestFn,\n  EIP1193RequestOptions,\n} from '../types/eip1193.js'\nimport { stringToHex } from './encoding/toHex.js'\nimport type { CreateBatchSchedulerErrorType } from './promise/createBatchScheduler.js'\nimport { withDedupe } from './promise/withDedupe.js'\nimport { type WithRetryErrorType, withRetry } from './promise/withRetry.js'\nimport type { GetSocketRpcClientErrorType } from './rpc/socket.js'\nimport { stringify } from './stringify.js'\n\nexport type RequestErrorType =\n  | AtomicityNotSupportedErrorType\n  | AtomicReadyWalletRejectedUpgradeErrorType\n  | BundleTooLargeErrorType\n  | ChainDisconnectedErrorType\n  | CreateBatchSchedulerErrorType\n  | DuplicateIdErrorType\n  | HttpRequestErrorType\n  | InternalRpcErrorType\n  | InvalidInputRpcErrorType\n  | InvalidParamsRpcErrorType\n  | InvalidRequestRpcErrorType\n  | GetSocketRpcClientErrorType\n  | JsonRpcVersionUnsupportedErrorType\n  | LimitExceededRpcErrorType\n  | MethodNotFoundRpcErrorType\n  | MethodNotSupportedRpcErrorType\n  | ParseRpcErrorType\n  | ProviderDisconnectedErrorType\n  | ResourceNotFoundRpcErrorType\n  | ResourceUnavailableRpcErrorType\n  | RpcErrorType\n  | RpcRequestErrorType\n  | SwitchChainErrorType\n  | TimeoutErrorType\n  | TransactionRejectedRpcErrorType\n  | UnauthorizedProviderErrorType\n  | UnknownBundleIdErrorType\n  | UnknownRpcErrorType\n  | UnsupportedChainIdErrorType\n  | UnsupportedNonOptionalCapabilityErrorType\n  | UnsupportedProviderMethodErrorType\n  | UserRejectedRequestErrorType\n  | WalletConnectSessionSettlementErrorType\n  | WebSocketRequestErrorType\n  | WithRetryErrorType\n  | ErrorType\n\nexport function buildRequest<request extends (args: any) => Promise<any>>(\n  request: request,\n  options: EIP1193RequestOptions = {},\n): EIP1193RequestFn {\n  return async (args, overrideOptions = {}) => {\n    const {\n      dedupe = false,\n      methods,\n      retryDelay = 150,\n      retryCount = 3,\n      uid,\n    } = {\n      ...options,\n      ...overrideOptions,\n    }\n\n    const { method } = args\n    if (methods?.exclude?.includes(method))\n      throw new MethodNotSupportedRpcError(new Error('method not supported'), {\n        method,\n      })\n    if (methods?.include && !methods.include.includes(method))\n      throw new MethodNotSupportedRpcError(new Error('method not supported'), {\n        method,\n      })\n\n    const requestId = dedupe\n      ? stringToHex(`${uid}.${stringify(args)}`)\n      : undefined\n    return withDedupe(\n      () =>\n        withRetry(\n          async () => {\n            try {\n              return await request(args)\n            } catch (err_) {\n              const err = err_ as unknown as RpcError<\n                RpcErrorCode | ProviderRpcErrorCode\n              >\n              switch (err.code) {\n                // -32700\n                case ParseRpcError.code:\n                  throw new ParseRpcError(err)\n                // -32600\n                case InvalidRequestRpcError.code:\n                  throw new InvalidRequestRpcError(err)\n                // -32601\n                case MethodNotFoundRpcError.code:\n                  throw new MethodNotFoundRpcError(err, { method: args.method })\n                // -32602\n                case InvalidParamsRpcError.code:\n                  throw new InvalidParamsRpcError(err)\n                // -32603\n                case InternalRpcError.code:\n                  throw new InternalRpcError(err)\n                // -32000\n                case InvalidInputRpcError.code:\n                  throw new InvalidInputRpcError(err)\n                // -32001\n                case ResourceNotFoundRpcError.code:\n                  throw new ResourceNotFoundRpcError(err)\n                // -32002\n                case ResourceUnavailableRpcError.code:\n                  throw new ResourceUnavailableRpcError(err)\n                // -32003\n                case TransactionRejectedRpcError.code:\n                  throw new TransactionRejectedRpcError(err)\n                // -32004\n                case MethodNotSupportedRpcError.code:\n                  throw new MethodNotSupportedRpcError(err, {\n                    method: args.method,\n                  })\n                // -32005\n                case LimitExceededRpcError.code:\n                  throw new LimitExceededRpcError(err)\n                // -32006\n                case JsonRpcVersionUnsupportedError.code:\n                  throw new JsonRpcVersionUnsupportedError(err)\n\n                // 4001\n                case UserRejectedRequestError.code:\n                  throw new UserRejectedRequestError(err)\n                // 4100\n                case UnauthorizedProviderError.code:\n                  throw new UnauthorizedProviderError(err)\n                // 4200\n                case UnsupportedProviderMethodError.code:\n                  throw new UnsupportedProviderMethodError(err)\n                // 4900\n                case ProviderDisconnectedError.code:\n                  throw new ProviderDisconnectedError(err)\n                // 4901\n                case ChainDisconnectedError.code:\n                  throw new ChainDisconnectedError(err)\n                // 4902\n                case SwitchChainError.code:\n                  throw new SwitchChainError(err)\n\n                // 5700\n                case UnsupportedNonOptionalCapabilityError.code:\n                  throw new UnsupportedNonOptionalCapabilityError(err)\n                // 5710\n                case UnsupportedChainIdError.code:\n                  throw new UnsupportedChainIdError(err)\n                // 5720\n                case DuplicateIdError.code:\n                  throw new DuplicateIdError(err)\n                // 5730\n                case UnknownBundleIdError.code:\n                  throw new UnknownBundleIdError(err)\n                // 5740\n                case BundleTooLargeError.code:\n                  throw new BundleTooLargeError(err)\n                // 5750\n                case AtomicReadyWalletRejectedUpgradeError.code:\n                  throw new AtomicReadyWalletRejectedUpgradeError(err)\n                // 5760\n                case AtomicityNotSupportedError.code:\n                  throw new AtomicityNotSupportedError(err)\n\n                // CAIP-25: User Rejected Error\n                // https://docs.walletconnect.com/2.0/specs/clients/sign/error-codes#rejected-caip-25\n                case 5000:\n                  throw new UserRejectedRequestError(err)\n\n                // WalletConnect: Session Settlement Failed\n                // https://docs.walletconnect.com/2.0/specs/clients/sign/error-codes\n                case WalletConnectSessionSettlementError.code:\n                  throw new WalletConnectSessionSettlementError(err)\n\n                default:\n                  if (err_ instanceof BaseError) throw err_\n                  throw new UnknownRpcError(err as Error)\n              }\n            }\n          },\n          {\n            delay: ({ count, error }) => {\n              // If we find a Retry-After header, let's retry after the given time.\n              if (error && error instanceof HttpRequestError) {\n                const retryAfter = error?.headers?.get('Retry-After')\n                if (retryAfter?.match(/\\d/))\n                  return Number.parseInt(retryAfter, 10) * 1000\n              }\n\n              // Otherwise, let's retry with an exponential backoff.\n              return ~~(1 << count) * retryDelay\n            },\n            retryCount,\n            shouldRetry: ({ error }) => shouldRetry(error),\n          },\n        ),\n      { enabled: dedupe, id: requestId },\n    )\n  }\n}\n\n/** @internal */\nexport function shouldRetry(error: Error) {\n  if ('code' in error && typeof error.code === 'number') {\n    if (error.code === -1) return true // Unknown error\n    if (error.code === LimitExceededRpcError.code) return true\n    if (error.code === InternalRpcError.code) return true\n    // Too Many Requests \u2014 some providers (e.g. Alchemy in batch mode) return\n    // HTTP 200 with a JSON-RPC body of `{ code: 429 }` instead of an HTTP 429,\n    // so we need to handle this code in addition to the HTTP status check below.\n    if (error.code === 429) return true\n    return false\n  }\n  if (error instanceof HttpRequestError && error.status) {\n    // Forbidden\n    if (error.status === 403) return true\n    // Request Timeout\n    if (error.status === 408) return true\n    // Request Entity Too Large\n    if (error.status === 413) return true\n    // Too Many Requests\n    if (error.status === 429) return true\n    // Internal Server Error\n    if (error.status === 500) return true\n    // Bad Gateway\n    if (error.status === 502) return true\n    // Service Unavailable\n    if (error.status === 503) return true\n    // Gateway Timeout\n    if (error.status === 504) return true\n    return false\n  }\n  return true\n}\n", "import { LruMap } from '../lru.js'\n\n/** @internal */\nexport const promiseCache = /*#__PURE__*/ new LruMap<Promise<any>>(8192)\n\ntype WithDedupeOptions = {\n  enabled?: boolean | undefined\n  id?: string | undefined\n}\n\n/** Deduplicates in-flight promises. */\nexport function withDedupe<data>(\n  fn: () => Promise<data>,\n  { enabled = true, id }: WithDedupeOptions,\n): Promise<data> {\n  if (!enabled || !id) return fn()\n  if (promiseCache.get(id)) return promiseCache.get(id)!\n  const promise = fn().finally(() => promiseCache.delete(id))\n  promiseCache.set(id, promise)\n  return promise\n}\n", "import type { Chain, ChainFormatters } from '../../types/chain.js'\nimport type { Assign, Prettify } from '../../types/utils.js'\n\nexport type DefineChainReturnType<chain extends Chain = Chain> = Prettify<\n  chain &\n    (chain['extendSchema'] extends Record<string, unknown>\n      ? {\n          extend: <const extended extends chain['extendSchema']>(\n            extended: extended,\n          ) => Assign<chain, extended>\n        }\n      : {})\n>\n\nexport function defineChain<\n  formatters extends ChainFormatters,\n  const chain extends Chain<formatters>,\n>(chain: chain): DefineChainReturnType<Assign<Chain<undefined>, chain>> {\n  const chainInstance = {\n    formatters: undefined,\n    fees: undefined,\n    serializers: undefined,\n    ...chain,\n  } as Assign<Chain<undefined>, chain>\n\n  function extend(base: typeof chainInstance) {\n    type ExtendFn = (base: typeof chainInstance) => unknown\n    return (fnOrExtended: ExtendFn | Record<string, unknown>) => {\n      const properties = (\n        typeof fnOrExtended === 'function' ? fnOrExtended(base) : fnOrExtended\n      ) as (typeof chainInstance)['extendSchema']\n      const combined = { ...base, ...properties }\n      return Object.assign(combined, { extend: extend(combined) })\n    }\n  }\n\n  return Object.assign(chainInstance, {\n    extend: extend(chainInstance),\n  }) as never\n}\n\nexport function extendSchema<schema extends Record<string, unknown>>(): schema {\n  return {} as schema\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n  type ParseAbi,\n  type ParseAbiItem,\n  type ParseAbiParameter,\n  type ParseAbiParameters,\n  parseAbi,\n  parseAbiItem,\n  parseAbiParameter,\n  parseAbiParameters,\n} from 'abitype'\nexport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../accounts/utils/parseAccount.js'\nexport {\n  type PublicKeyToAddressErrorType,\n  publicKeyToAddress,\n} from '../accounts/utils/publicKeyToAddress.js'\nexport {\n  type DecodeAbiParametersErrorType,\n  type DecodeAbiParametersReturnType,\n  decodeAbiParameters,\n} from './abi/decodeAbiParameters.js'\nexport {\n  type DecodeErrorResultErrorType,\n  type DecodeErrorResultParameters,\n  type DecodeErrorResultReturnType,\n  decodeErrorResult,\n} from './abi/decodeErrorResult.js'\nexport {\n  type DecodeEventLogErrorType,\n  type DecodeEventLogParameters,\n  type DecodeEventLogReturnType,\n  decodeEventLog,\n} from './abi/decodeEventLog.js'\nexport {\n  type DecodeFunctionDataErrorType,\n  type DecodeFunctionDataParameters,\n  type DecodeFunctionDataReturnType,\n  decodeFunctionData,\n} from './abi/decodeFunctionData.js'\nexport {\n  type DecodeFunctionResultErrorType,\n  type DecodeFunctionResultParameters,\n  type DecodeFunctionResultReturnType,\n  decodeFunctionResult,\n} from './abi/decodeFunctionResult.js'\nexport {\n  type EncodeAbiParametersErrorType,\n  type EncodeAbiParametersReturnType,\n  encodeAbiParameters,\n} from './abi/encodeAbiParameters.js'\nexport {\n  type EncodeDeployDataErrorType,\n  type EncodeDeployDataParameters,\n  encodeDeployData,\n} from './abi/encodeDeployData.js'\nexport {\n  type EncodeErrorResultErrorType,\n  type EncodeErrorResultParameters,\n  encodeErrorResult,\n} from './abi/encodeErrorResult.js'\nexport {\n  type EncodeArgErrorType,\n  type EncodeEventTopicsParameters,\n  type EncodeEventTopicsReturnType,\n  encodeEventTopics,\n} from './abi/encodeEventTopics.js'\nexport {\n  type EncodeFunctionDataErrorType,\n  type EncodeFunctionDataParameters,\n  encodeFunctionData,\n} from './abi/encodeFunctionData.js'\nexport {\n  type EncodeFunctionResultErrorType,\n  type EncodeFunctionResultParameters,\n  encodeFunctionResult,\n} from './abi/encodeFunctionResult.js'\nexport { type EncodePackedErrorType, encodePacked } from './abi/encodePacked.js'\nexport {\n  type FormatAbiItemErrorType,\n  type FormatAbiParamErrorType,\n  type FormatAbiParamsErrorType,\n  formatAbiItem,\n  formatAbiParams,\n} from './abi/formatAbiItem.js'\nexport {\n  type FormatAbiItemWithArgsErrorType,\n  formatAbiItemWithArgs,\n} from './abi/formatAbiItemWithArgs.js'\nexport {\n  type GetAbiItemErrorType,\n  type GetAbiItemParameters,\n  getAbiItem,\n} from './abi/getAbiItem.js'\nexport {\n  type ParseEventLogsErrorType,\n  type ParseEventLogsParameters,\n  type ParseEventLogsReturnType,\n  parseEventLogs,\n} from './abi/parseEventLogs.js'\nexport {\n  type ChecksumAddressErrorType,\n  getAddress,\n} from './address/getAddress.js'\nexport {\n  type GetContractAddressOptions,\n  type GetCreate2AddressErrorType,\n  type GetCreate2AddressOptions,\n  type GetCreateAddressErrorType,\n  type GetCreateAddressOptions,\n  getContractAddress,\n  getCreate2Address,\n  getCreateAddress,\n} from './address/getContractAddress.js'\nexport { type IsAddressErrorType, isAddress } from './address/isAddress.js'\nexport {\n  type IsAddressEqualErrorType,\n  isAddressEqual,\n} from './address/isAddressEqual.js'\nexport {\n  type HashAuthorizationErrorType,\n  type HashAuthorizationParameters,\n  type HashAuthorizationReturnType,\n  hashAuthorization,\n} from './authorization/hashAuthorization.js'\nexport {\n  type RecoverAuthorizationAddressErrorType,\n  type RecoverAuthorizationAddressParameters,\n  type RecoverAuthorizationAddressReturnType,\n  recoverAuthorizationAddress,\n} from './authorization/recoverAuthorizationAddress.js'\nexport {\n  type SerializeAuthorizationListErrorType,\n  type SerializeAuthorizationListReturnType,\n  serializeAuthorizationList,\n} from './authorization/serializeAuthorizationList.js'\nexport {\n  type VerifyAuthorizationErrorType,\n  type VerifyAuthorizationParameters,\n  type VerifyAuthorizationReturnType,\n  verifyAuthorization,\n} from './authorization/verifyAuthorization.js'\nexport {\n  buildRequest,\n  type RequestErrorType,\n} from './buildRequest.js'\nexport {\n  ccipRequest,\n  /** @deprecated Use `ccipRequest`. */\n  ccipRequest as ccipFetch,\n  type OffchainLookupErrorType,\n  offchainLookup,\n  offchainLookupAbiItem,\n  offchainLookupSignature,\n} from './ccip.js'\nexport {\n  type AssertCurrentChainErrorType,\n  type AssertCurrentChainParameters,\n  assertCurrentChain,\n} from './chain/assertCurrentChain.js'\nexport { defineChain } from './chain/defineChain.js'\nexport {\n  type ExtractChainErrorType,\n  type ExtractChainParameters,\n  type ExtractChainReturnType,\n  extractChain,\n} from './chain/extractChain.js'\nexport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from './chain/getChainContractAddress.js'\nexport {\n  type ConcatBytesErrorType,\n  type ConcatErrorType,\n  type ConcatHexErrorType,\n  concat,\n  concatBytes,\n  concatHex,\n} from './data/concat.js'\nexport { type IsBytesErrorType, isBytes } from './data/isBytes.js'\nexport { type IsHexErrorType, isHex } from './data/isHex.js'\nexport {\n  type PadBytesErrorType,\n  type PadErrorType,\n  type PadHexErrorType,\n  pad,\n  padBytes,\n  padHex,\n} from './data/pad.js'\nexport { type SizeErrorType, size } from './data/size.js'\nexport {\n  type AssertEndOffsetErrorType,\n  type AssertStartOffsetErrorType,\n  type SliceBytesErrorType,\n  type SliceErrorType,\n  type SliceHexErrorType,\n  type SliceReturnType,\n  slice,\n  sliceBytes,\n  sliceHex,\n} from './data/slice.js'\nexport { type TrimErrorType, type TrimReturnType, trim } from './data/trim.js'\nexport {\n  type BytesToBigIntErrorType,\n  type BytesToBigIntOpts,\n  type BytesToBoolErrorType,\n  type BytesToBoolOpts,\n  type BytesToNumberErrorType,\n  type BytesToNumberOpts,\n  type BytesToStringErrorType,\n  type BytesToStringOpts,\n  bytesToBigInt,\n  bytesToBigInt as bytesToBigint,\n  bytesToBool,\n  bytesToNumber,\n  bytesToString,\n  type FromBytesErrorType,\n  type FromBytesParameters,\n  type FromBytesReturnType,\n  fromBytes,\n} from './encoding/fromBytes.js'\nexport {\n  type AssertSizeErrorType,\n  type FromHexErrorType,\n  type FromHexParameters,\n  type FromHexReturnType,\n  fromHex,\n  type HexToBigIntErrorType,\n  type HexToBigIntOpts,\n  type HexToBoolErrorType,\n  type HexToBoolOpts,\n  type HexToNumberErrorType,\n  type HexToNumberOpts,\n  type HexToStringErrorType,\n  type HexToStringOpts,\n  hexToBigInt,\n  hexToBool,\n  hexToNumber,\n  hexToString,\n} from './encoding/fromHex.js'\nexport {\n  type FromRlpErrorType,\n  fromRlp,\n} from './encoding/fromRlp.js'\nexport {\n  type BoolToBytesErrorType,\n  type BoolToBytesOpts,\n  boolToBytes,\n  type HexToBytesErrorType,\n  type HexToBytesOpts,\n  hexToBytes,\n  type NumberToBytesErrorType,\n  numberToBytes,\n  type StringToBytesErrorType,\n  type StringToBytesOpts,\n  stringToBytes,\n  type ToBytesErrorType,\n  type ToBytesParameters,\n  toBytes,\n} from './encoding/toBytes.js'\nexport {\n  type BoolToHexErrorType,\n  type BoolToHexOpts,\n  type BytesToHexErrorType,\n  type BytesToHexOpts,\n  boolToHex,\n  bytesToHex,\n  type NumberToHexErrorType,\n  type NumberToHexOpts,\n  numberToHex,\n  type StringToHexErrorType,\n  type StringToHexOpts,\n  stringToHex,\n  type ToHexErrorType,\n  type ToHexParameters,\n  toHex,\n} from './encoding/toHex.js'\nexport {\n  type BytesToRlpErrorType,\n  type HexToRlpErrorType,\n  type ToRlpErrorType,\n  type ToRlpReturnType,\n  toRlp,\n} from './encoding/toRlp.js'\nexport {\n  type GetCallErrorReturnType,\n  getCallError,\n} from './errors/getCallError.js'\nexport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from './errors/getContractError.js'\nexport {\n  type GetEstimateGasErrorReturnType,\n  getEstimateGasError,\n} from './errors/getEstimateGasError.js'\nexport {\n  containsNodeError,\n  type GetNodeErrorParameters,\n  type GetNodeErrorReturnType,\n  getNodeError,\n} from './errors/getNodeError.js'\nexport {\n  type GetTransactionErrorParameters,\n  type GetTransactionErrorReturnType,\n  getTransactionError,\n} from './errors/getTransactionError.js'\nexport {\n  type DefineBlockErrorType,\n  defineBlock,\n  type FormatBlockErrorType,\n  type FormattedBlock,\n  formatBlock,\n} from './formatters/block.js'\nexport { type ExtractErrorType, extract } from './formatters/extract.js'\nexport {\n  type DefineFormatterErrorType,\n  defineFormatter,\n} from './formatters/formatter.js'\nexport { type FormatLogErrorType, formatLog } from './formatters/log.js'\nexport {\n  type DefineTransactionErrorType,\n  defineTransaction,\n  type FormatTransactionErrorType,\n  type FormattedTransaction,\n  formatTransaction,\n  transactionType,\n} from './formatters/transaction.js'\nexport {\n  type DefineTransactionReceiptErrorType,\n  defineTransactionReceipt,\n  type FormatTransactionReceiptErrorType,\n  type FormattedTransactionReceipt,\n} from './formatters/transactionReceipt.js'\nexport {\n  type DefineTransactionRequestErrorType,\n  defineTransactionRequest,\n  type FormatTransactionRequestErrorType,\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n} from './formatters/transactionRequest.js'\nexport { getAction } from './getAction.js'\nexport { type IsHashErrorType, isHash } from './hash/isHash.js'\nexport { type Keccak256ErrorType, keccak256 } from './hash/keccak256.js'\nexport { type Ripemd160ErrorType, ripemd160 } from './hash/ripemd160.js'\nexport { type Sha256ErrorType, sha256 } from './hash/sha256.js'\nexport {\n  type ToEventHashErrorType,\n  toEventHash,\n} from './hash/toEventHash.js'\nexport {\n  type ToEventSelectorErrorType,\n  /** @deprecated use `ToEventSelectorErrorType`. */\n  type ToEventSelectorErrorType as GetEventSelectorErrorType,\n  toEventSelector,\n  /** @deprecated use `toEventSelector`. */\n  toEventSelector as getEventSelector,\n} from './hash/toEventSelector.js'\nexport {\n  type ToEventSignatureErrorType,\n  /** @deprecated use `ToEventSignatureErrorType`. */\n  type ToEventSignatureErrorType as GetEventSignatureErrorType,\n  toEventSignature,\n  /** @deprecated use `toEventSignature`. */\n  toEventSignature as getEventSignature,\n} from './hash/toEventSignature.js'\nexport {\n  type ToFunctionHashErrorType,\n  toFunctionHash,\n} from './hash/toFunctionHash.js'\nexport {\n  type ToFunctionSelectorErrorType,\n  /** @deprecated use `ToFunctionSelectorErrorType`. */\n  type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n  toFunctionSelector,\n  /** @deprecated use `toFunctionSelector`. */\n  toFunctionSelector as getFunctionSelector,\n} from './hash/toFunctionSelector.js'\nexport {\n  type ToFunctionSignatureErrorType,\n  /** @deprecated use `ToFunctionSignatureErrorType`. */\n  type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n  toFunctionSignature,\n  /** @deprecated use `toFunctionSignature`. */\n  toFunctionSignature as getFunctionSignature,\n} from './hash/toFunctionSignature.js'\nexport {\n  type CreateNonceManagerParameters,\n  createNonceManager,\n  type NonceManager,\n  type NonceManagerSource,\n  nonceManager,\n} from './nonceManager.js'\nexport { arrayRegex, bytesRegex, integerRegex } from './regex.js'\nexport {\n  getSocket,\n  rpc,\n  type WebSocketAsyncErrorType,\n  type WebSocketAsyncOptions,\n  type WebSocketAsyncReturnType,\n  type WebSocketErrorType,\n  type WebSocketOptions,\n  type WebSocketReturnType,\n} from './rpc/compat.js'\nexport {\n  getHttpRpcClient,\n  type HttpRequestErrorType,\n  type HttpRequestParameters,\n  type HttpRequestReturnType,\n  type HttpRpcClient,\n  type HttpRpcClientOptions,\n} from './rpc/http.js'\nexport {\n  type GetSocketParameters,\n  type GetSocketRpcClientErrorType,\n  type GetSocketRpcClientParameters,\n  getSocketRpcClient,\n  type Socket,\n  type SocketRpcClient,\n  socketClientCache,\n} from './rpc/socket.js'\nexport { getWebSocketRpcClient } from './rpc/webSocket.js'\nexport {\n  type HashMessageErrorType,\n  type HashMessageReturnType,\n  hashMessage,\n} from './signature/hashMessage.js'\nexport {\n  type HashDomainErrorType,\n  type HashStructErrorType,\n  type HashTypedDataParameters,\n  type HashTypedDataReturnType,\n  hashStruct,\n  hashTypedData,\n} from './signature/hashTypedData.js'\nexport {\n  type IsErc6492SignatureErrorType,\n  type IsErc6492SignatureParameters,\n  type IsErc6492SignatureReturnType,\n  isErc6492Signature,\n} from './signature/isErc6492Signature.js'\nexport {\n  type IsErc8010SignatureErrorType,\n  type IsErc8010SignatureParameters,\n  type IsErc8010SignatureReturnType,\n  isErc8010Signature,\n} from './signature/isErc8010Signature.js'\nexport {\n  type ParseErc6492SignatureErrorType,\n  type ParseErc6492SignatureParameters,\n  type ParseErc6492SignatureReturnType,\n  parseErc6492Signature,\n} from './signature/parseErc6492Signature.js'\nexport {\n  type ParseErc8010SignatureErrorType,\n  type ParseErc8010SignatureParameters,\n  type ParseErc8010SignatureReturnType,\n  parseErc8010Signature,\n} from './signature/parseErc8010Signature.js'\nexport {\n  type RecoverAddressErrorType,\n  type RecoverAddressParameters,\n  type RecoverAddressReturnType,\n  recoverAddress,\n} from './signature/recoverAddress.js'\nexport {\n  type RecoverMessageAddressErrorType,\n  type RecoverMessageAddressParameters,\n  type RecoverMessageAddressReturnType,\n  recoverMessageAddress,\n} from './signature/recoverMessageAddress.js'\nexport {\n  type RecoverPublicKeyErrorType,\n  type RecoverPublicKeyParameters,\n  type RecoverPublicKeyReturnType,\n  recoverPublicKey,\n} from './signature/recoverPublicKey.js'\nexport {\n  type RecoverTypedDataAddressErrorType,\n  type RecoverTypedDataAddressParameters,\n  type RecoverTypedDataAddressReturnType,\n  recoverTypedDataAddress,\n} from './signature/recoverTypedDataAddress.js'\nexport {\n  type SerializeErc6492SignatureErrorType,\n  type SerializeErc6492SignatureParameters,\n  type SerializeErc6492SignatureReturnType,\n  serializeErc6492Signature,\n} from './signature/serializeErc6492Signature.js'\nexport {\n  type SerializeErc8010SignatureErrorType,\n  type SerializeErc8010SignatureParameters,\n  type SerializeErc8010SignatureReturnType,\n  serializeErc8010Signature,\n} from './signature/serializeErc8010Signature.js'\nexport {\n  type VerifyHashErrorType,\n  type VerifyHashParameters,\n  type VerifyHashReturnType,\n  verifyHash,\n} from './signature/verifyHash.js'\nexport {\n  type VerifyMessageErrorType,\n  type VerifyMessageParameters,\n  type VerifyMessageReturnType,\n  verifyMessage,\n} from './signature/verifyMessage.js'\nexport {\n  type VerifyTypedDataErrorType,\n  type VerifyTypedDataParameters,\n  type VerifyTypedDataReturnType,\n  verifyTypedData,\n} from './signature/verifyTypedData.js'\nexport { type StringifyErrorType, stringify } from './stringify.js'\nexport {\n  type AssertRequestErrorType,\n  assertRequest,\n} from './transaction/assertRequest.js'\nexport {\n  type AssertTransactionEIP1559ErrorType,\n  type AssertTransactionEIP2930ErrorType,\n  type AssertTransactionLegacyErrorType,\n  assertTransactionEIP1559,\n  assertTransactionEIP2930,\n  assertTransactionLegacy,\n} from './transaction/assertTransaction.js'\nexport {\n  type GetSerializedTransactionType,\n  type GetSerializedTransactionTypeErrorType,\n  getSerializedTransactionType,\n} from './transaction/getSerializedTransactionType.js'\nexport {\n  type GetTransactionType,\n  type GetTransactionTypeErrorType,\n  getTransactionType,\n} from './transaction/getTransactionType.js'\nexport {\n  type ParseTransactionErrorType,\n  parseTransaction,\n} from './transaction/parseTransaction.js'\nexport {\n  type SerializeAccessListErrorType,\n  serializeAccessList,\n} from './transaction/serializeAccessList.js'\nexport {\n  type SerializeTransactionErrorType,\n  type SerializeTransactionFn,\n  serializeTransaction,\n} from './transaction/serializeTransaction.js'\nexport {\n  type DomainSeparatorErrorType,\n  type SerializeTypedDataErrorType,\n  serializeTypedData,\n  type ValidateTypedDataErrorType,\n  validateTypedData,\n} from './typedData.js'\nexport { type FormatEtherErrorType, formatEther } from './unit/formatEther.js'\nexport { type FormatGweiErrorType, formatGwei } from './unit/formatGwei.js'\nexport { type FormatUnitsErrorType, formatUnits } from './unit/formatUnits.js'\nexport { type ParseEtherErrorType, parseEther } from './unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './unit/parseGwei.js'\nexport { type ParseUnitsErrorType, parseUnits } from './unit/parseUnits.js'\n", "import {\n  HttpRequestError,\n  type HttpRequestErrorType as HttpRequestErrorType_,\n  TimeoutError,\n  type TimeoutErrorType,\n} from '../../errors/request.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { RpcRequest, RpcResponse } from '../../types/rpc.js'\nimport type { MaybePromise } from '../../types/utils.js'\nimport {\n  type WithTimeoutErrorType,\n  withTimeout,\n} from '../promise/withTimeout.js'\nimport { stringify } from '../stringify.js'\nimport { idCache } from './id.js'\n\nexport type HttpRpcClientOptions = {\n  /** Override for the fetch function used to make requests. */\n  fetchFn?:\n    | ((input: string | URL | Request, init?: RequestInit) => Promise<Response>)\n    | undefined\n  /** Request configuration to pass to `fetch`. */\n  fetchOptions?: Omit<RequestInit, 'body'> | undefined\n  /** A callback to handle the request. */\n  onRequest?:\n    | ((\n        request: Request,\n        init: RequestInit,\n      ) => MaybePromise<\n        void | undefined | (RequestInit & { url?: string | undefined })\n      >)\n    | undefined\n  /** A callback to handle the response. */\n  onResponse?: ((response: Response) => Promise<void> | void) | undefined\n  /** The timeout (in ms) for the request. */\n  timeout?: number | undefined\n}\n\nexport type HttpRequestParameters<\n  body extends RpcRequest | RpcRequest[] = RpcRequest,\n> = {\n  /** The RPC request body. */\n  body: body\n  /** Override for the fetch function used to make requests. */\n  fetchFn?: HttpRpcClientOptions['fetchFn'] | undefined\n  /** Request configuration to pass to `fetch`. */\n  fetchOptions?: HttpRpcClientOptions['fetchOptions'] | undefined\n  /** A callback to handle the response. */\n  onRequest?:\n    | ((\n        request: Request,\n        init: RequestInit,\n      ) => MaybePromise<\n        void | undefined | (RequestInit & { url?: string | undefined })\n      >)\n    | undefined\n  /** A callback to handle the response. */\n  onResponse?: ((response: Response) => Promise<void> | void) | undefined\n  /** The timeout (in ms) for the request. */\n  timeout?: HttpRpcClientOptions['timeout'] | undefined\n}\n\nexport type HttpRequestReturnType<\n  body extends RpcRequest | RpcRequest[] = RpcRequest,\n> = body extends RpcRequest[] ? RpcResponse[] : RpcResponse\n\nexport type HttpRequestErrorType =\n  | HttpRequestErrorType_\n  | TimeoutErrorType\n  | WithTimeoutErrorType\n  | ErrorType\n\nexport type HttpRpcClient = {\n  request<body extends RpcRequest | RpcRequest[]>(\n    params: HttpRequestParameters<body>,\n  ): Promise<HttpRequestReturnType<body>>\n}\n\nexport function getHttpRpcClient(\n  url_: string,\n  options: HttpRpcClientOptions = {},\n): HttpRpcClient {\n  const { url, headers: headers_url } = parseUrl(url_)\n\n  return {\n    async request(params) {\n      const {\n        body,\n        fetchFn = options.fetchFn ?? fetch,\n        onRequest = options.onRequest,\n        onResponse = options.onResponse,\n        timeout = options.timeout ?? 10_000,\n      } = params\n\n      const fetchOptions = {\n        ...(options.fetchOptions ?? {}),\n        ...(params.fetchOptions ?? {}),\n      }\n\n      const { headers, method, signal: signal_ } = fetchOptions\n\n      try {\n        const response = await withTimeout(\n          async ({ signal }) => {\n            const init: RequestInit = {\n              ...fetchOptions,\n              body: Array.isArray(body)\n                ? stringify(\n                    body.map((body) => ({\n                      jsonrpc: '2.0',\n                      id: body.id ?? idCache.take(),\n                      ...body,\n                    })),\n                  )\n                : stringify({\n                    jsonrpc: '2.0',\n                    id: body.id ?? idCache.take(),\n                    ...body,\n                  }),\n              headers: {\n                ...headers_url,\n                'Content-Type': 'application/json',\n                ...headers,\n              },\n              method: method || 'POST',\n              signal: signal_ || (timeout > 0 ? signal : null),\n            }\n            const request = new Request(url, init)\n            const args = (await onRequest?.(request, init)) ?? { ...init, url }\n            const response = await fetchFn(args.url ?? url, args)\n            return response\n          },\n          {\n            errorInstance: new TimeoutError({ body, url }),\n            timeout,\n            signal: true,\n          },\n        )\n\n        if (onResponse) await onResponse(response)\n\n        let data: any\n        if (\n          response.headers.get('Content-Type')?.startsWith('application/json')\n        )\n          data = await response.json()\n        else {\n          data = await response.text()\n          try {\n            data = JSON.parse(data || '{}')\n          } catch (err) {\n            if (response.ok) throw err\n            data = { error: data }\n          }\n        }\n\n        if (!response.ok) {\n          // If the response body contains a valid JSON-RPC error, return it\n          // so it flows through the normal RPC error handling pipeline.\n          if (\n            typeof data.error?.code === 'number' &&\n            typeof data.error?.message === 'string'\n          )\n            return data\n\n          throw new HttpRequestError({\n            body,\n            details: stringify(data.error) || response.statusText,\n            headers: response.headers,\n            status: response.status,\n            url,\n          })\n        }\n\n        return data\n      } catch (err) {\n        if (err instanceof HttpRequestError) throw err\n        if (err instanceof TimeoutError) throw err\n        throw new HttpRequestError({\n          body,\n          cause: err as Error,\n          url,\n        })\n      }\n    },\n  }\n}\n\n/** @internal */\nexport function parseUrl(url_: string) {\n  try {\n    const url = new URL(url_)\n\n    const result = (() => {\n      // Handle Basic authentication credentials\n      if (url.username) {\n        const credentials = `${decodeURIComponent(url.username)}:${decodeURIComponent(url.password)}`\n        url.username = ''\n        url.password = ''\n\n        return {\n          url: url.toString(),\n          headers: { Authorization: `Basic ${btoa(credentials)}` },\n        }\n      }\n\n      return\n    })()\n\n    return { url: url.toString(), ...result }\n  } catch {\n    return { url: url_ }\n  }\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\nexport type WithTimeoutErrorType = ErrorType\n\nexport function withTimeout<data>(\n  fn: ({\n    signal,\n  }: {\n    signal: AbortController['signal'] | null\n  }) => Promise<data>,\n  {\n    errorInstance = new Error('timed out'),\n    timeout,\n    signal,\n  }: {\n    // The error instance to throw when the timeout is reached.\n    errorInstance?: Error | undefined\n    // The timeout (in ms).\n    timeout: number\n    // Whether or not the timeout should use an abort signal.\n    signal?: boolean | undefined\n  },\n): Promise<data> {\n  return new Promise((resolve, reject) => {\n    ;(async () => {\n      let timeoutId!: NodeJS.Timeout\n      try {\n        const controller = new AbortController()\n        if (timeout > 0) {\n          timeoutId = setTimeout(() => {\n            if (signal) {\n              controller.abort()\n            } else {\n              reject(errorInstance)\n            }\n          }, timeout) as NodeJS.Timeout // need to cast because bun globals.d.ts overrides @types/node\n        }\n        resolve(await fn({ signal: controller?.signal || null }))\n      } catch (err) {\n        if ((err as Error)?.name === 'AbortError') reject(errorInstance)\n        reject(err)\n      } finally {\n        clearTimeout(timeoutId)\n      }\n    })()\n  })\n}\n", "function createIdStore() {\n  return {\n    current: 0,\n    take() {\n      return this.current++\n    },\n    reset() {\n      this.current = 0\n    },\n  }\n}\n\nexport const idCache = /*#__PURE__*/ createIdStore()\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, SignableMessage } from '../../types/misc.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport { toPrefixedMessage } from './toPrefixedMessage.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type HashMessageReturnType<to extends To> =\n  | (to extends 'bytes' ? ByteArray : never)\n  | (to extends 'hex' ? Hex : never)\n\nexport type HashMessageErrorType = Keccak256ErrorType | ErrorType\n\nexport function hashMessage<to extends To = 'hex'>(\n  message: SignableMessage,\n  to_?: to | undefined,\n): HashMessageReturnType<to> {\n  return keccak256(toPrefixedMessage(message), to_)\n}\n", "export const presignMessagePrefix = '\\x19Ethereum Signed Message:\\n'\n", "import { presignMessagePrefix } from '../../constants/strings.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex, SignableMessage } from '../../types/misc.js'\nimport { type ConcatErrorType, concat } from '../data/concat.js'\nimport { size } from '../data/size.js'\nimport {\n  type BytesToHexErrorType,\n  bytesToHex,\n  type StringToHexErrorType,\n  stringToHex,\n} from '../encoding/toHex.js'\n\nexport type ToPrefixedMessageErrorType =\n  | ConcatErrorType\n  | StringToHexErrorType\n  | BytesToHexErrorType\n  | ErrorType\n\nexport function toPrefixedMessage(message_: SignableMessage): Hex {\n  const message = (() => {\n    if (typeof message_ === 'string') return stringToHex(message_)\n    if (typeof message_.raw === 'string') return message_.raw\n    return bytesToHex(message_.raw)\n  })()\n  const prefix = stringToHex(`${presignMessagePrefix}${size(message)}`)\n  return concat([prefix, message])\n}\n", "// Implementation forked and adapted from https://github.com/MetaMask/eth-sig-util/blob/main/src/sign-typed-data.ts\n\nimport type { AbiParameter, TypedData } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n  EIP712DomainDefinition,\n  MessageDefinition,\n  TypedDataDefinition,\n} from '../../types/typedData.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n  type EncodeAbiParametersErrorType,\n  encodeAbiParameters,\n} from '../abi/encodeAbiParameters.js'\nimport { concat } from '../data/concat.js'\nimport { type ToHexErrorType, toHex } from '../encoding/toHex.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n  type GetTypesForEIP712DomainErrorType,\n  getTypesForEIP712Domain,\n  type ValidateTypedDataErrorType,\n  validateTypedData,\n} from '../typedData.js'\n\ntype MessageTypeProperty = {\n  name: string\n  type: string\n}\n\nexport type HashTypedDataParameters<\n  typedData extends TypedData | Record<string, unknown> = TypedData,\n  primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n> = TypedDataDefinition<typedData, primaryType>\n\nexport type HashTypedDataReturnType = Hex\n\nexport type HashTypedDataErrorType =\n  | GetTypesForEIP712DomainErrorType\n  | HashDomainErrorType\n  | HashStructErrorType\n  | ValidateTypedDataErrorType\n  | ErrorType\n\nexport function hashTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n>(\n  parameters: HashTypedDataParameters<typedData, primaryType>,\n): HashTypedDataReturnType {\n  const {\n    domain = {},\n    message,\n    primaryType,\n  } = parameters as HashTypedDataParameters\n  const types = {\n    EIP712Domain: getTypesForEIP712Domain({ domain }),\n    ...parameters.types,\n  }\n\n  // Need to do a runtime validation check on addresses, byte ranges, integer ranges, etc\n  // as we can't statically check this with TypeScript.\n  validateTypedData({\n    domain,\n    message,\n    primaryType,\n    types,\n  })\n\n  const parts: Hex[] = ['0x1901']\n  if (domain)\n    parts.push(\n      hashDomain({\n        domain,\n        types: types as Record<string, MessageTypeProperty[]>,\n      }),\n    )\n\n  if (primaryType !== 'EIP712Domain')\n    parts.push(\n      hashStruct({\n        data: message,\n        primaryType,\n        types: types as Record<string, MessageTypeProperty[]>,\n      }),\n    )\n\n  return keccak256(concat(parts))\n}\n\nexport type HashDomainErrorType = HashStructErrorType | ErrorType\n\nexport function hashDomain<\n  const typedData extends TypedData | Record<string, unknown> = TypedData,\n>({\n  domain,\n  types,\n}: UnionOmit<EIP712DomainDefinition<typedData>, 'primaryType'>) {\n  return hashStruct({\n    data: domain as Record<string, unknown>,\n    primaryType: 'EIP712Domain',\n    types: types as Record<string, readonly MessageTypeProperty[]>,\n  })\n}\n\nexport type HashStructErrorType =\n  | EncodeDataErrorType\n  | Keccak256ErrorType\n  | ErrorType\n\nexport function hashStruct<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n>({\n  data,\n  primaryType,\n  types,\n}: MessageDefinition<typedData, primaryType, 'data'>) {\n  const encoded = encodeData({\n    data: data as Record<string, unknown>,\n    primaryType,\n    types: types as Record<string, readonly MessageTypeProperty[]>,\n  })\n  return keccak256(encoded)\n}\n\ntype EncodeDataErrorType =\n  | EncodeAbiParametersErrorType\n  | EncodeFieldErrorType\n  | HashTypeErrorType\n  | ErrorType\n\nfunction encodeData({\n  data,\n  primaryType,\n  types,\n}: {\n  data: Record<string, unknown>\n  primaryType: string\n  types: Record<string, readonly MessageTypeProperty[]>\n}) {\n  const encodedTypes: AbiParameter[] = [{ type: 'bytes32' }]\n  const encodedValues: unknown[] = [hashType({ primaryType, types })]\n\n  for (const field of types[primaryType]) {\n    const [type, value] = encodeField({\n      types,\n      name: field.name,\n      type: field.type,\n      value: data[field.name],\n    })\n    encodedTypes.push(type)\n    encodedValues.push(value)\n  }\n\n  return encodeAbiParameters(encodedTypes, encodedValues)\n}\n\ntype HashTypeErrorType =\n  | ToHexErrorType\n  | EncodeTypeErrorType\n  | Keccak256ErrorType\n  | ErrorType\n\nfunction hashType({\n  primaryType,\n  types,\n}: {\n  primaryType: string\n  types: Record<string, readonly MessageTypeProperty[]>\n}) {\n  const encodedHashType = toHex(encodeType({ primaryType, types }))\n  return keccak256(encodedHashType)\n}\n\ntype EncodeTypeErrorType = FindTypeDependenciesErrorType\n\nexport function encodeType({\n  primaryType,\n  types,\n}: {\n  primaryType: string\n  types: Record<string, readonly MessageTypeProperty[]>\n}) {\n  let result = ''\n  const unsortedDeps = findTypeDependencies({ primaryType, types })\n  unsortedDeps.delete(primaryType)\n\n  const deps = [primaryType, ...Array.from(unsortedDeps).sort()]\n  for (const type of deps) {\n    result += `${type}(${types[type]\n      .map(({ name, type: t }) => `${t} ${name}`)\n      .join(',')})`\n  }\n\n  return result\n}\n\ntype FindTypeDependenciesErrorType = ErrorType\n\nfunction findTypeDependencies(\n  {\n    primaryType: primaryType_,\n    types,\n  }: {\n    primaryType: string\n    types: Record<string, readonly MessageTypeProperty[]>\n  },\n  results: Set<string> = new Set(),\n): Set<string> {\n  const match = primaryType_.match(/^\\w*/u)\n  const primaryType = match?.[0]!\n  if (results.has(primaryType) || types[primaryType] === undefined) {\n    return results\n  }\n\n  results.add(primaryType)\n\n  for (const field of types[primaryType]) {\n    findTypeDependencies({ primaryType: field.type, types }, results)\n  }\n  return results\n}\n\ntype EncodeFieldErrorType =\n  | Keccak256ErrorType\n  | EncodeAbiParametersErrorType\n  | ToHexErrorType\n  | ErrorType\n\nfunction encodeField({\n  types,\n  name,\n  type,\n  value,\n}: {\n  types: Record<string, readonly MessageTypeProperty[]>\n  name: string\n  type: string\n  value: any\n}): [type: AbiParameter, value: any] {\n  if (types[type] !== undefined) {\n    return [\n      { type: 'bytes32' },\n      keccak256(encodeData({ data: value, primaryType: type, types })),\n    ]\n  }\n\n  if (type === 'bytes') return [{ type: 'bytes32' }, keccak256(value)]\n\n  if (type === 'string') return [{ type: 'bytes32' }, keccak256(toHex(value))]\n\n  if (type.lastIndexOf(']') === type.length - 1) {\n    const parsedType = type.slice(0, type.lastIndexOf('['))\n    const typeValuePairs = (value as [AbiParameter, any][]).map((item) =>\n      encodeField({\n        name,\n        type: parsedType,\n        types,\n        value: item,\n      }),\n    )\n    return [\n      { type: 'bytes32' },\n      keccak256(\n        encodeAbiParameters(\n          typeValuePairs.map(([t]) => t),\n          typeValuePairs.map(([, v]) => v),\n        ),\n      ),\n    ]\n  }\n\n  return [{ type }, value]\n}\n", "import type { TypedData, TypedDataDomain, TypedDataParameter } from 'abitype'\n\nimport { BytesSizeMismatchError } from '../errors/abi.js'\nimport { InvalidAddressError } from '../errors/address.js'\nimport {\n  InvalidDomainError,\n  InvalidPrimaryTypeError,\n  InvalidStructTypeError,\n} from '../errors/typedData.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Hex } from '../types/misc.js'\nimport type { TypedDataDefinition } from '../types/typedData.js'\nimport { type IsAddressErrorType, isAddress } from './address/isAddress.js'\nimport { type SizeErrorType, size } from './data/size.js'\nimport { type NumberToHexErrorType, numberToHex } from './encoding/toHex.js'\nimport { bytesRegex, integerRegex } from './regex.js'\nimport {\n  type HashDomainErrorType,\n  hashDomain,\n} from './signature/hashTypedData.js'\nimport { stringify } from './stringify.js'\n\nexport type SerializeTypedDataErrorType =\n  | HashDomainErrorType\n  | IsAddressErrorType\n  | NumberToHexErrorType\n  | SizeErrorType\n  | ErrorType\n\nexport function serializeTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n>(parameters: TypedDataDefinition<typedData, primaryType>) {\n  const {\n    domain: domain_,\n    message: message_,\n    primaryType,\n    types,\n  } = parameters as unknown as TypedDataDefinition\n\n  const normalizeData = (\n    struct: readonly TypedDataParameter[],\n    data_: Record<string, unknown>,\n  ) => {\n    const data = { ...data_ }\n    for (const param of struct) {\n      const { name, type } = param\n      if (type === 'address') data[name] = (data[name] as string).toLowerCase()\n    }\n    return data\n  }\n\n  const domain = (() => {\n    if (!types.EIP712Domain) return {}\n    if (!domain_) return {}\n    return normalizeData(types.EIP712Domain, domain_)\n  })()\n\n  const message = (() => {\n    if (primaryType === 'EIP712Domain') return undefined\n    return normalizeData(types[primaryType], message_)\n  })()\n\n  return stringify({ domain, message, primaryType, types })\n}\n\nexport type ValidateTypedDataErrorType =\n  | HashDomainErrorType\n  | IsAddressErrorType\n  | NumberToHexErrorType\n  | SizeErrorType\n  | ErrorType\n\nexport function validateTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n>(parameters: TypedDataDefinition<typedData, primaryType>) {\n  const { domain, message, primaryType, types } =\n    parameters as unknown as TypedDataDefinition\n\n  const validateData = (\n    struct: readonly TypedDataParameter[],\n    data: Record<string, unknown>,\n  ) => {\n    for (const param of struct) {\n      const { name, type } = param\n      const value = data[name]\n\n      const integerMatch = type.match(integerRegex)\n      if (\n        integerMatch &&\n        (typeof value === 'number' || typeof value === 'bigint')\n      ) {\n        const [_type, base, size_] = integerMatch\n        // If number cannot be cast to a sized hex value, it is out of range\n        // and will throw.\n        numberToHex(value, {\n          signed: base === 'int',\n          size: Number.parseInt(size_, 10) / 8,\n        })\n      }\n\n      if (type === 'address' && typeof value === 'string' && !isAddress(value))\n        throw new InvalidAddressError({ address: value })\n\n      const bytesMatch = type.match(bytesRegex)\n      if (bytesMatch) {\n        const [_type, size_] = bytesMatch\n        if (size_ && size(value as Hex) !== Number.parseInt(size_, 10))\n          throw new BytesSizeMismatchError({\n            expectedSize: Number.parseInt(size_, 10),\n            givenSize: size(value as Hex),\n          })\n      }\n\n      const struct = types[type]\n      if (struct) {\n        validateReference(type)\n        validateData(struct, value as Record<string, unknown>)\n      }\n    }\n  }\n\n  // Validate domain types.\n  if (types.EIP712Domain && domain) {\n    if (typeof domain !== 'object') throw new InvalidDomainError({ domain })\n    validateData(types.EIP712Domain, domain)\n  }\n\n  // Validate message types.\n  if (primaryType !== 'EIP712Domain') {\n    if (types[primaryType]) validateData(types[primaryType], message)\n    else throw new InvalidPrimaryTypeError({ primaryType, types })\n  }\n}\n\nexport type GetTypesForEIP712DomainErrorType = ErrorType\n\nexport function getTypesForEIP712Domain({\n  domain,\n}: {\n  domain?: TypedDataDomain | undefined\n}): TypedDataParameter[] {\n  return [\n    typeof domain?.name === 'string' && { name: 'name', type: 'string' },\n    domain?.version && { name: 'version', type: 'string' },\n    (typeof domain?.chainId === 'number' ||\n      typeof domain?.chainId === 'bigint') && {\n      name: 'chainId',\n      type: 'uint256',\n    },\n    domain?.verifyingContract && {\n      name: 'verifyingContract',\n      type: 'address',\n    },\n    domain?.salt && { name: 'salt', type: 'bytes32' },\n  ].filter(Boolean) as TypedDataParameter[]\n}\n\nexport type DomainSeparatorErrorType =\n  | GetTypesForEIP712DomainErrorType\n  | HashDomainErrorType\n  | ErrorType\n\nexport function domainSeparator({ domain }: { domain: TypedDataDomain }): Hex {\n  return hashDomain({\n    domain: domain as never,\n    types: {\n      EIP712Domain: getTypesForEIP712Domain({ domain }),\n    },\n  })\n}\n\n/** @internal */\nfunction validateReference(type: string) {\n  // Struct type must not be a Solidity type.\n  if (\n    type === 'address' ||\n    type === 'bool' ||\n    type === 'string' ||\n    type.startsWith('bytes') ||\n    type.startsWith('uint') ||\n    type.startsWith('int')\n  )\n    throw new InvalidStructTypeError({ type })\n}\n", "import type { TypedData } from 'abitype'\n\nimport { stringify } from '../utils/stringify.js'\nimport { BaseError } from './base.js'\n\nexport type InvalidDomainErrorType = InvalidDomainError & {\n  name: 'InvalidDomainError'\n}\nexport class InvalidDomainError extends BaseError {\n  constructor({ domain }: { domain: unknown }) {\n    super(`Invalid domain \"${stringify(domain)}\".`, {\n      metaMessages: ['Must be a valid EIP-712 domain.'],\n    })\n  }\n}\n\nexport type InvalidPrimaryTypeErrorType = InvalidPrimaryTypeError & {\n  name: 'InvalidPrimaryTypeError'\n}\nexport class InvalidPrimaryTypeError extends BaseError {\n  constructor({\n    primaryType,\n    types,\n  }: { primaryType: string; types: TypedData | Record<string, unknown> }) {\n    super(\n      `Invalid primary type \\`${primaryType}\\` must be one of \\`${JSON.stringify(Object.keys(types))}\\`.`,\n      {\n        docsPath: '/api/glossary/Errors#typeddatainvalidprimarytypeerror',\n        metaMessages: ['Check that the primary type is a key in `types`.'],\n      },\n    )\n  }\n}\n\nexport type InvalidStructTypeErrorType = InvalidStructTypeError & {\n  name: 'InvalidStructTypeError'\n}\nexport class InvalidStructTypeError extends BaseError {\n  constructor({ type }: { type: string }) {\n    super(`Struct type \"${type}\" is invalid.`, {\n      metaMessages: ['Struct type must not be a Solidity type.'],\n      name: 'InvalidStructTypeError',\n    })\n  }\n}\n", "import * as AbiParameters from '../core/AbiParameters.js'\nimport type * as Address from '../core/Address.js'\nimport * as Authorization from '../core/Authorization.js'\nimport * as Errors from '../core/Errors.js'\nimport * as Hex from '../core/Hex.js'\nimport * as Secp256k1 from '../core/Secp256k1.js'\nimport * as Signature from '../core/Signature.js'\n\n/** Unwrapped ERC-8010 signature. */\nexport type Unwrapped = {\n  /** Authorization signed by the delegatee. */\n  authorization: Authorization.Authorization<true>\n  /** Data to initialize the delegation. */\n  data?: Hex.Hex | undefined\n  /** The original signature. */\n  signature: Hex.Hex\n  /** Address of the initializer. */\n  to?: Address.Address | undefined\n}\n\n/** Wrapped ERC-8010 signature. */\nexport type Wrapped = Hex.Hex\n\n/**\n * Magic bytes used to identify ERC-8010 wrapped signatures.\n */\nexport const magicBytes =\n  '0x8010801080108010801080108010801080108010801080108010801080108010' as const\n\n/** Suffix ABI parameters for the ERC-8010 wrapped signature. */\nexport const suffixParameters = AbiParameters.from(\n  '(uint256 chainId, address delegation, uint256 nonce, uint8 yParity, uint256 r, uint256 s), address to, bytes data',\n)\n\n/**\n * Asserts that the wrapped signature is valid.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc8010 } from 'ox/erc8010'\n *\n * SignatureErc8010.assert('0xdeadbeef')\n * // @error: InvalidWrappedSignatureError: Value `0xdeadbeef` is an invalid ERC-8010 wrapped signature.\n * ```\n *\n * @param value - The value to assert.\n */\nexport function assert(value: Unwrapped | Wrapped) {\n  if (typeof value === 'string') {\n    if (Hex.slice(value, -32) !== magicBytes)\n      throw new InvalidWrappedSignatureError(value)\n  } else Signature.assert(value.authorization)\n}\n\nexport declare namespace assert {\n  type ErrorType =\n    | InvalidWrappedSignatureError\n    | Hex.slice.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Parses an [ERC-8010 wrapped signature](https://github.com/jxom/ERCs/blob/16f7e3891fff2e1e9c25dea0485497739db8a816/ERCS/erc-8010.md) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1 } from 'ox'\n * import { SignatureErc8010 } from 'ox/erc8010' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n *   payload: '0x...',\n *   privateKey: '0x...',\n * })\n *\n * // Instantiate from serialized format. // [!code focus]\n * const wrapped = SignatureErc8010.from('0x...') // [!code focus]\n * // @log: { authorization: { ... }, data: '0x...', signature: { ... } } // [!code focus]\n *\n * // Instantiate from constituent parts. // [!code focus]\n * const wrapped = SignatureErc8010.from({ // [!code focus]\n *   authorization: { ... }, // [!code focus]\n *   data: '0x...', // [!code focus]\n *   signature, // [!code focus]\n * })\n * // @log: { authorization: { ... }, data: '0x...', signature: { ... } }\n * ```\n *\n * @param value - Value to parse.\n * @returns Parsed value.\n */\nexport function from(value: Unwrapped | Wrapped): Unwrapped {\n  if (typeof value === 'string') return unwrap(value)\n  return value\n}\n\nexport declare namespace from {\n  type ErrorType = unwrap.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Unwraps an [ERC-8010 wrapped signature](https://github.com/jxom/ERCs/blob/16f7e3891fff2e1e9c25dea0485497739db8a816/ERCS/erc-8010.md) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc8010 } from 'ox/erc8010'\n *\n * const { authorization, data, signature } = SignatureErc8010.unwrap('0x...')\n * ```\n *\n * @param wrapped - Wrapped signature to unwrap.\n * @returns Unwrapped signature.\n */\nexport function unwrap(wrapped: Wrapped): Unwrapped {\n  assert(wrapped)\n\n  const suffixLength = Hex.toNumber(Hex.slice(wrapped, -64, -32))\n  const suffix = Hex.slice(wrapped, -suffixLength - 64, -64)\n  const signature = Hex.slice(wrapped, 0, -suffixLength - 64)\n\n  const [auth, to, data] = AbiParameters.decode(suffixParameters, suffix)\n\n  const authorization = Authorization.from({\n    address: auth.delegation,\n    chainId: Number(auth.chainId),\n    nonce: auth.nonce,\n    yParity: auth.yParity,\n    r: auth.r,\n    s: auth.s,\n  })\n\n  return {\n    authorization,\n    signature,\n    ...(data && data !== '0x' ? { data, to } : {}),\n  }\n}\n\nexport declare namespace unwrap {\n  type ErrorType = assert.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Wraps a signature into [ERC-8010 format](https://github.com/jxom/ERCs/blob/16f7e3891fff2e1e9c25dea0485497739db8a816/ERCS/erc-8010.md).\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1, Signature } from 'ox'\n * import { SignatureErc8010 } from 'ox/erc8010' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n *   payload: '0x...',\n *   privateKey: '0x...',\n * })\n *\n * const wrapped = SignatureErc8010.wrap({ // [!code focus]\n *   authorization: { ... }, // [!code focus]\n *   data: '0xdeadbeef', // [!code focus]\n *   signature: Signature.toHex(signature), // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param value - Values to wrap.\n * @returns Wrapped signature.\n */\nexport function wrap(value: Unwrapped): Wrapped {\n  const { data, signature } = value\n\n  assert(value)\n\n  const self = Secp256k1.recoverAddress({\n    payload: Authorization.getSignPayload(value.authorization),\n    signature: Signature.from(value.authorization),\n  })\n\n  const suffix = AbiParameters.encode(suffixParameters, [\n    {\n      ...value.authorization,\n      delegation: value.authorization.address,\n      chainId: BigInt(value.authorization.chainId),\n    },\n    value.to ?? self,\n    data ?? '0x',\n  ])\n  const suffixLength = Hex.fromNumber(Hex.size(suffix), { size: 32 })\n  return Hex.concat(signature, suffix, suffixLength, magicBytes)\n}\n\nexport declare namespace wrap {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Validates a wrapped signature. Returns `true` if the wrapped signature is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc8010 } from 'ox/erc8010'\n *\n * const valid = SignatureErc8010.validate('0xdeadbeef')\n * // @log: false\n * ```\n *\n * @param value - The value to validate.\n * @returns `true` if the value is valid, `false` otherwise.\n */\nexport function validate(value: Unwrapped | Wrapped): boolean {\n  try {\n    assert(value)\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/** Thrown when the ERC-8010 wrapped signature is invalid. */\nexport class InvalidWrappedSignatureError extends Errors.BaseError {\n  override readonly name = 'SignatureErc8010.InvalidWrappedSignatureError'\n\n  constructor(wrapped: Wrapped) {\n    super(`Value \\`${wrapped}\\` is an invalid ERC-8010 wrapped signature.`)\n  }\n}\n", "import * as abitype from 'abitype'\nimport * as Address from './Address.js'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as internal from './internal/abiParameters.js'\nimport * as Cursor from './internal/cursor.js'\nimport * as Solidity from './Solidity.js'\n\n/** Root type for ABI parameters. */\nexport type AbiParameters = readonly abitype.AbiParameter[]\n\n/** A parameter on an {@link ox#AbiParameters.AbiParameters}. */\nexport type Parameter = abitype.AbiParameter\n\n/** A packed ABI type. */\nexport type PackedAbiType =\n  | abitype.SolidityAddress\n  | abitype.SolidityBool\n  | abitype.SolidityBytes\n  | abitype.SolidityInt\n  | abitype.SolidityString\n  | abitype.SolidityArrayWithoutTuple\n\n/**\n * Decodes ABI-encoded data into its respective primitive values based on ABI Parameters.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.decode(\n *   AbiParameters.from(['string', 'uint', 'bool']),\n *   '0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',\n * )\n * // @log: ['wagmi', 420n, true]\n * ```\n *\n * @example\n * ### JSON Parameters\n *\n * You can pass **JSON ABI** Parameters:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.decode(\n *   [\n *     { name: 'x', type: 'string' },\n *     { name: 'y', type: 'uint' },\n *     { name: 'z', type: 'bool' },\n *   ],\n *   '0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',\n * )\n * // @log: ['wagmi', 420n, true]\n * ```\n *\n * @param parameters - The set of ABI parameters to decode, in the shape of the `inputs` or `outputs` attribute of an ABI Item. These parameters must include valid [ABI types](https://docs.soliditylang.org/en/latest/types.html).\n * @param data - ABI encoded data.\n * @param options - Decoding options.\n * @returns Array of decoded values.\n */\nexport function decode<\n  const parameters extends AbiParameters,\n  as extends 'Object' | 'Array' = 'Array',\n>(\n  parameters: parameters,\n  data: Bytes.Bytes | Hex.Hex,\n  options?: decode.Options<as>,\n): decode.ReturnType<parameters, as>\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decode(\n  parameters: AbiParameters,\n  data: Bytes.Bytes | Hex.Hex,\n  options: {\n    as?: 'Array' | 'Object' | undefined\n    checksumAddress?: boolean | undefined\n  } = {},\n): readonly unknown[] | Record<string, unknown> {\n  const { as = 'Array', checksumAddress = false } = options\n\n  const bytes = typeof data === 'string' ? Bytes.fromHex(data) : data\n  const cursor = Cursor.create(bytes)\n\n  if (Bytes.size(bytes) === 0 && parameters.length > 0)\n    throw new ZeroDataError()\n  if (Bytes.size(bytes) && Bytes.size(bytes) < 32)\n    throw new DataSizeTooSmallError({\n      data: typeof data === 'string' ? data : Hex.fromBytes(data),\n      parameters: parameters as readonly Parameter[],\n      size: Bytes.size(bytes),\n    })\n\n  let consumed = 0\n  const values: any = as === 'Array' ? [] : {}\n  for (let i = 0; i < parameters.length; ++i) {\n    const param = parameters[i] as Parameter\n    cursor.setPosition(consumed)\n    const [data, consumed_] = internal.decodeParameter(cursor, param, {\n      checksumAddress,\n      staticPosition: 0,\n    })\n    consumed += consumed_\n    if (as === 'Array') values.push(data)\n    else values[param.name ?? i] = data\n  }\n  return values\n}\n\nexport declare namespace decode {\n  type Options<as extends 'Object' | 'Array'> = {\n    /**\n     * Whether the decoded values should be returned as an `Object` or `Array`.\n     *\n     * @default \"Array\"\n     */\n    as?: as | 'Object' | 'Array' | undefined\n    /**\n     * Whether decoded addresses should be checksummed.\n     *\n     * @default false\n     */\n    checksumAddress?: boolean | undefined\n  }\n\n  type ReturnType<\n    parameters extends AbiParameters = AbiParameters,\n    as extends 'Object' | 'Array' = 'Array',\n  > = parameters extends readonly []\n    ? as extends 'Object'\n      ? {}\n      : []\n    : as extends 'Object'\n      ? internal.ToObject<parameters>\n      : internal.ToPrimitiveTypes<parameters>\n\n  type ErrorType =\n    | Bytes.fromHex.ErrorType\n    | internal.decodeParameter.ErrorType\n    | ZeroDataError\n    | DataSizeTooSmallError\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes primitive values into ABI encoded data as per the [Application Binary Interface (ABI) Specification](https://docs.soliditylang.org/en/latest/abi-spec).\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.encode(\n *   AbiParameters.from(['string', 'uint', 'bool']),\n *   ['wagmi', 420n, true],\n * )\n * ```\n *\n * @example\n * ### JSON Parameters\n *\n * Specify **JSON ABI** Parameters as schema:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.encode(\n *   [\n *     { type: 'string', name: 'name' },\n *     { type: 'uint', name: 'age' },\n *     { type: 'bool', name: 'isOwner' },\n *   ],\n *   ['wagmi', 420n, true],\n * )\n * ```\n *\n * @param parameters - The set of ABI parameters to encode, in the shape of the `inputs` or `outputs` attribute of an ABI Item. These parameters must include valid [ABI types](https://docs.soliditylang.org/en/latest/types.html).\n * @param values - The set of primitive values that correspond to the ABI types defined in `parameters`.\n * @returns ABI encoded data.\n */\nexport function encode<\n  const parameters extends AbiParameters | readonly unknown[],\n>(\n  parameters: parameters,\n  values: parameters extends AbiParameters\n    ? internal.ToPrimitiveTypes<parameters>\n    : never,\n  options?: encode.Options,\n): Hex.Hex {\n  const { checksumAddress = false } = options ?? {}\n\n  if (parameters.length !== values.length)\n    throw new LengthMismatchError({\n      expectedLength: parameters.length as number,\n      givenLength: values.length as any,\n    })\n  // Prepare the parameters to determine dynamic types to encode.\n  const preparedParameters = internal.prepareParameters({\n    checksumAddress,\n    parameters: parameters as readonly Parameter[],\n    values: values as any,\n  })\n  const data = internal.encode(preparedParameters)\n  if (data.length === 0) return '0x'\n  return data\n}\n\nexport declare namespace encode {\n  type ErrorType =\n    | LengthMismatchError\n    | internal.encode.ErrorType\n    | internal.prepareParameters.ErrorType\n    | Errors.GlobalErrorType\n\n  type Options = {\n    /**\n     * Whether addresses should be checked against their checksum.\n     *\n     * @default false\n     */\n    checksumAddress?: boolean | undefined\n  }\n}\n\n/**\n * Encodes an array of primitive values to a [packed ABI encoding](https://docs.soliditylang.org/en/latest/abi-spec.html#non-standard-packed-mode).\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const encoded = AbiParameters.encodePacked(\n *   ['address', 'string'],\n *   ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 'hello world'],\n * )\n * // @log: '0xd8da6bf26964af9d7eed9e03e53415d37aa9604568656c6c6f20776f726c64'\n * ```\n *\n * @param types - Set of ABI types to pack encode.\n * @param values - The set of primitive values that correspond to the ABI types defined in `types`.\n * @returns The encoded packed data.\n */\nexport function encodePacked<\n  const packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n>(types: packedAbiTypes, values: encodePacked.Values<packedAbiTypes>): Hex.Hex {\n  if (types.length !== values.length)\n    throw new LengthMismatchError({\n      expectedLength: types.length as number,\n      givenLength: values.length as number,\n    })\n\n  const data: Hex.Hex[] = []\n  for (let i = 0; i < (types as unknown[]).length; i++) {\n    const type = types[i]\n    const value = values[i]\n    data.push(encodePacked.encode(type, value))\n  }\n  return Hex.concat(...data)\n}\n\nexport namespace encodePacked {\n  export type ErrorType =\n    | Hex.concat.ErrorType\n    | LengthMismatchError\n    | Errors.GlobalErrorType\n\n  export type Values<\n    packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n  > = {\n    [key in keyof packedAbiTypes]: packedAbiTypes[key] extends abitype.AbiType\n      ? abitype.AbiParameterToPrimitiveType<{ type: packedAbiTypes[key] }>\n      : unknown\n  }\n\n  // eslint-disable-next-line jsdoc/require-jsdoc\n  export function encode<const packedAbiType extends PackedAbiType | unknown>(\n    type: packedAbiType,\n    value: Values<[packedAbiType]>[0],\n    isArray = false,\n  ): Hex.Hex {\n    if (type === 'address') {\n      const address = value as Address.Address\n      Address.assert(address)\n      return Hex.padLeft(\n        address.toLowerCase() as Hex.Hex,\n        isArray ? 32 : 0,\n      ) as Address.Address\n    }\n    if (type === 'string') return Hex.fromString(value as string)\n    if (type === 'bytes') return value as Hex.Hex\n    if (type === 'bool')\n      return Hex.padLeft(Hex.fromBoolean(value as boolean), isArray ? 32 : 1)\n\n    const intMatch = (type as string).match(Solidity.integerRegex)\n    if (intMatch) {\n      const [_type, baseType, bits = '256'] = intMatch\n      const size = Number.parseInt(bits, 10) / 8\n      return Hex.fromNumber(value as number, {\n        size: isArray ? 32 : size,\n        signed: baseType === 'int',\n      })\n    }\n\n    const bytesMatch = (type as string).match(Solidity.bytesRegex)\n    if (bytesMatch) {\n      const [_type, size] = bytesMatch\n      if (Number.parseInt(size!, 10) !== ((value as Hex.Hex).length - 2) / 2)\n        throw new BytesSizeMismatchError({\n          expectedSize: Number.parseInt(size!, 10),\n          value: value as Hex.Hex,\n        })\n      return Hex.padRight(value as Hex.Hex, isArray ? 32 : 0) as Hex.Hex\n    }\n\n    const arrayMatch = (type as string).match(Solidity.arrayRegex)\n    if (arrayMatch && Array.isArray(value)) {\n      const [_type, childType] = arrayMatch\n      const data: Hex.Hex[] = []\n      for (let i = 0; i < value.length; i++) {\n        data.push(encode(childType, value[i], true))\n      }\n      if (data.length === 0) return '0x'\n      return Hex.concat(...data)\n    }\n\n    throw new InvalidTypeError(type as string)\n  }\n}\n\n/**\n * Formats {@link ox#AbiParameters.AbiParameters} into **Human Readable ABI Parameters**.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const formatted = AbiParameters.format([\n *   {\n *     name: 'spender',\n *     type: 'address',\n *   },\n *   {\n *     name: 'amount',\n *     type: 'uint256',\n *   },\n * ])\n *\n * formatted\n * //    ^?\n *\n *\n * ```\n *\n * @param parameters - The ABI Parameters to format.\n * @returns The formatted ABI Parameters  .\n */\nexport function format<\n  const parameters extends readonly [\n    Parameter | abitype.AbiEventParameter,\n    ...(readonly (Parameter | abitype.AbiEventParameter)[]),\n  ],\n>(\n  parameters:\n    | parameters\n    | readonly [\n        Parameter | abitype.AbiEventParameter,\n        ...(readonly (Parameter | abitype.AbiEventParameter)[]),\n      ],\n): abitype.FormatAbiParameters<parameters> {\n  return abitype.formatAbiParameters(parameters)\n}\n\nexport declare namespace format {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses arbitrary **JSON ABI Parameters** or **Human Readable ABI Parameters** into typed {@link ox#AbiParameters.AbiParameters}.\n *\n * @example\n * ### JSON Parameters\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from([\n *   {\n *     name: 'spender',\n *     type: 'address',\n *   },\n *   {\n *     name: 'amount',\n *     type: 'uint256',\n *   },\n * ])\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable Parameters\n *\n * Human Readable ABI Parameters can be parsed into a typed {@link ox#AbiParameters.AbiParameters}:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from('address spender, uint256 amount')\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from([\n *   'struct Foo { address spender; uint256 amount; }', // [!code hl]\n *   'Foo foo, address bar',\n * ])\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param parameters - The ABI Parameters to parse.\n * @returns The typed ABI Parameters.\n */\nexport function from<\n  const parameters extends AbiParameters | string | readonly string[],\n>(\n  parameters: parameters | AbiParameters | string | readonly string[],\n): from.ReturnType<parameters> {\n  if (Array.isArray(parameters) && typeof parameters[0] === 'string')\n    return abitype.parseAbiParameters(parameters) as never\n  if (typeof parameters === 'string')\n    return abitype.parseAbiParameters(parameters) as never\n  return parameters as never\n}\n\nexport declare namespace from {\n  type ReturnType<\n    parameters extends AbiParameters | string | readonly string[],\n  > = parameters extends string\n    ? abitype.ParseAbiParameters<parameters>\n    : parameters extends readonly string[]\n      ? abitype.ParseAbiParameters<parameters>\n      : parameters\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Throws when the data size is too small for the given parameters.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x010f')\n * //                                             \u2191 \u274C 2 bytes\n * // @error: AbiParameters.DataSizeTooSmallError: Data size of 2 bytes is too small for given parameters.\n * // @error: Params: (uint256)\n * // @error: Data:   0x010f (2 bytes)\n * ```\n *\n * ### Solution\n *\n * Pass a valid data size.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * //                                             \u2191 \u2705 32 bytes\n * ```\n */\nexport class DataSizeTooSmallError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.DataSizeTooSmallError'\n  constructor({\n    data,\n    parameters,\n    size,\n  }: { data: Hex.Hex; parameters: readonly Parameter[]; size: number }) {\n    super(`Data size of ${size} bytes is too small for given parameters.`, {\n      metaMessages: [\n        `Params: (${abitype.formatAbiParameters(parameters as readonly [Parameter])})`,\n        `Data:   ${data} (${size} bytes)`,\n      ],\n    })\n  }\n}\n\n/**\n * Throws when zero data is provided, but data is expected.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x')\n * //                                           \u2191 \u274C zero data\n * // @error: AbiParameters.DataSizeTooSmallError: Data size of 2 bytes is too small for given parameters.\n * // @error: Params: (uint256)\n * // @error: Data:   0x010f (2 bytes)\n * ```\n *\n * ### Solution\n *\n * Pass valid data.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * //                                             \u2191 \u2705 32 bytes\n * ```\n */\nexport class ZeroDataError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.ZeroDataError'\n  constructor() {\n    super('Cannot decode zero data (\"0x\") with ABI parameters.')\n  }\n}\n\n/**\n * The length of the array value does not match the length specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from('uint256[3]'), [[69n, 420n]])\n * //                                               \u2191 expected: 3  \u2191 \u274C length: 2\n * // @error: AbiParameters.ArrayLengthMismatchError: ABI encoding array length mismatch\n * // @error: for type `uint256[3]`. Expected: `3`. Given: `2`.\n * ```\n *\n * ### Solution\n *\n * Pass an array of the correct length.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['uint256[3]']), [[69n, 420n, 69n]])\n * //                                                         \u2191 \u2705 length: 3\n * ```\n */\nexport class ArrayLengthMismatchError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.ArrayLengthMismatchError'\n  constructor({\n    expectedLength,\n    givenLength,\n    type,\n  }: { expectedLength: number; givenLength: number; type: string }) {\n    super(\n      `Array length mismatch for type \\`${type}\\`. Expected: \\`${expectedLength}\\`. Given: \\`${givenLength}\\`.`,\n    )\n  }\n}\n\n/**\n * The size of the bytes value does not match the size specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from('bytes8'), [['0xdeadbeefdeadbeefdeadbeef']])\n * //                                            \u2191 expected: 8 bytes  \u2191 \u274C size: 12 bytes\n * // @error: BytesSizeMismatchError: Size of bytes \"0xdeadbeefdeadbeefdeadbeef\"\n * // @error: (bytes12) does not match expected size (bytes8).\n * ```\n *\n * ### Solution\n *\n * Pass a bytes value of the correct size.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['bytes8']), ['0xdeadbeefdeadbeef'])\n * //                                                       \u2191 \u2705 size: 8 bytes\n * ```\n */\nexport class BytesSizeMismatchError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.BytesSizeMismatchError'\n  constructor({\n    expectedSize,\n    value,\n  }: { expectedSize: number; value: Hex.Hex }) {\n    super(\n      `Size of bytes \"${value}\" (bytes${Hex.size(\n        value,\n      )}) does not match expected size (bytes${expectedSize}).`,\n    )\n  }\n}\n\n/**\n * The length of the values to encode does not match the length of the ABI parameters.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['string', 'uint256']), ['hello'])\n * // @error: LengthMismatchError: ABI encoding params/values length mismatch.\n * // @error: Expected length (params): 2\n * // @error: Given length (values): 1\n * ```\n *\n * ### Solution\n *\n * Pass the correct number of values to encode.\n *\n * ### Solution\n *\n * Pass a [valid ABI type](https://docs.soliditylang.org/en/develop/abi-spec.html#types).\n */\nexport class LengthMismatchError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.LengthMismatchError'\n  constructor({\n    expectedLength,\n    givenLength,\n  }: { expectedLength: number; givenLength: number }) {\n    super(\n      [\n        'ABI encoding parameters/values length mismatch.',\n        `Expected length (parameters): ${expectedLength}`,\n        `Given length (values): ${givenLength}`,\n      ].join('\\n'),\n    )\n  }\n}\n\n/**\n * The value provided is not a valid array as specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['uint256[3]']), [69])\n * ```\n *\n * ### Solution\n *\n * Pass an array value.\n */\nexport class InvalidArrayError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.InvalidArrayError'\n  constructor(value: unknown) {\n    super(`Value \\`${value}\\` is not a valid array.`)\n  }\n}\n\n/**\n * Throws when the ABI parameter type is invalid.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'lol' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * //                             \u2191 \u274C invalid type\n * // @error: AbiParameters.InvalidTypeError: Type `lol` is not a valid ABI Type.\n * ```\n */\nexport class InvalidTypeError extends Errors.BaseError {\n  override readonly name = 'AbiParameters.InvalidTypeError'\n  constructor(type: string) {\n    super(`Type \\`${type}\\` is not a valid ABI Type.`)\n  }\n}\n", "import type { Address as abitype_Address } from 'abitype'\nimport * as Bytes from './Bytes.js'\nimport * as Caches from './Caches.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as PublicKey from './PublicKey.js'\n\nconst addressRegex = /^0x[a-fA-F0-9]{40}$/\n\n/** Root type for Address. */\nexport type Address = abitype_Address\n\n/**\n * Asserts that the given value is a valid {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.assert('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.assert('0xdeadbeef')\n * // @error: InvalidAddressError: Address \"0xdeadbeef\" is invalid.\n * ```\n *\n * @param value - Value to assert if it is a valid address.\n * @param options - Assertion options.\n */\nexport function assert(\n  value: string,\n  options: assert.Options = {},\n): asserts value is Address {\n  const { strict = true } = options\n\n  if (!addressRegex.test(value))\n    throw new InvalidAddressError({\n      address: value,\n      cause: new InvalidInputError(),\n    })\n\n  if (strict) {\n    if (value.toLowerCase() === value) return\n    if (checksum(value as Address) !== value)\n      throw new InvalidAddressError({\n        address: value,\n        cause: new InvalidChecksumError(),\n      })\n  }\n}\n\nexport declare namespace assert {\n  type Options = {\n    /**\n     * Enables strict mode. Whether or not to compare the address against its checksum.\n     *\n     * @default true\n     */\n    strict?: boolean | undefined\n  }\n\n  type ErrorType = InvalidAddressError | Errors.GlobalErrorType\n}\n\n/**\n * Computes the checksum address for the given {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.checksum('0xa0cf798816d4b9b9866b5330eea46a18382f251e')\n * // @log: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * ```\n *\n * @param address - The address to compute the checksum for.\n * @returns The checksummed address.\n */\nexport function checksum(address: string): Address {\n  if (Caches.checksum.has(address)) return Caches.checksum.get(address)!\n\n  assert(address, { strict: false })\n\n  const hexAddress = address.substring(2).toLowerCase()\n  const hash = Hash.keccak256(Bytes.fromString(hexAddress), { as: 'Bytes' })\n\n  const characters = hexAddress.split('')\n  for (let i = 0; i < 40; i += 2) {\n    if (hash[i >> 1]! >> 4 >= 8 && characters[i]) {\n      characters[i] = characters[i]!.toUpperCase()\n    }\n    if ((hash[i >> 1]! & 0x0f) >= 8 && characters[i + 1]) {\n      characters[i + 1] = characters[i + 1]!.toUpperCase()\n    }\n  }\n\n  const result = `0x${characters.join('')}` as const\n  Caches.checksum.set(address, result)\n  return result\n}\n\nexport declare namespace checksum {\n  type ErrorType =\n    | assert.ErrorType\n    | Hash.keccak256.ErrorType\n    | Bytes.fromString.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Converts a stringified address to a typed (optionally checksummed) {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0xa0cf798816d4b9b9866b5330eea46a18382f251e')\n * // @log: '0xa0cf798816d4b9b9866b5330eea46a18382f251e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0xa0cf798816d4b9b9866b5330eea46a18382f251e', {\n *   checksum: true\n * })\n * // @log: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('hello')\n * // @error: InvalidAddressError: Address \"0xa\" is invalid.\n * ```\n *\n * @param address - An address string to convert to a typed Address.\n * @param options - Conversion options.\n * @returns The typed Address.\n */\nexport function from(address: string, options: from.Options = {}): Address {\n  const { checksum: checksumVal = false } = options\n  assert(address)\n  if (checksumVal) return checksum(address)\n  return address as Address\n}\n\nexport declare namespace from {\n  type Options = {\n    /**\n     * Whether to checksum the address.\n     *\n     * @default false\n     */\n    checksum?: boolean | undefined\n  }\n\n  type ErrorType =\n    | assert.ErrorType\n    | checksum.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Converts an ECDSA public key to an {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address, PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from(\n *   '0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5',\n * )\n * const address = Address.fromPublicKey(publicKey)\n * // @log: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266'\n * ```\n *\n * @param publicKey - The ECDSA public key to convert to an {@link ox#Address.Address}.\n * @param options - Conversion options.\n * @returns The {@link ox#Address.Address} corresponding to the public key.\n */\nexport function fromPublicKey(\n  publicKey: PublicKey.PublicKey,\n  options: fromPublicKey.Options = {},\n): Address {\n  const address = Hash.keccak256(\n    `0x${PublicKey.toHex(publicKey).slice(4)}`,\n  ).substring(26)\n  return from(`0x${address}`, options)\n}\n\nexport declare namespace fromPublicKey {\n  type Options = {\n    /**\n     * Whether to checksum the address.\n     *\n     * @default false\n     */\n    checksum?: boolean | undefined\n  }\n\n  type ErrorType =\n    | Hash.keccak256.ErrorType\n    | PublicKey.toHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Checks if two {@link ox#Address.Address} are equal.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.isEqual(\n *   '0xa0cf798816d4b9b9866b5330eea46a18382f251e',\n *   '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * )\n * // @log: true\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.isEqual(\n *   '0xa0cf798816d4b9b9866b5330eea46a18382f251e',\n *   '0xA0Cf798816D4b9b9866b5330EEa46a18382f251f'\n * )\n * // @log: false\n * ```\n *\n * @param addressA - The first address to compare.\n * @param addressB - The second address to compare.\n * @returns Whether the addresses are equal.\n */\nexport function isEqual(addressA: Address, addressB: Address): boolean {\n  assert(addressA, { strict: false })\n  assert(addressB, { strict: false })\n  return addressA.toLowerCase() === addressB.toLowerCase()\n}\n\nexport declare namespace isEqual {\n  type ErrorType = assert.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if the given address is a valid {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.validate('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')\n * // @log: true\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.validate('0xdeadbeef')\n * // @log: false\n * ```\n *\n * @param address - Value to check if it is a valid address.\n * @param options - Check options.\n * @returns Whether the address is a valid address.\n */\nexport function validate(\n  address: string,\n  options: validate.Options = {},\n): address is Address {\n  const { strict = true } = options ?? {}\n  try {\n    assert(address, { strict })\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  type Options = {\n    /**\n     * Enables strict mode. Whether or not to compare the address against its checksum.\n     *\n     * @default true\n     */\n    strict?: boolean | undefined\n  }\n}\n\n/**\n * Thrown when an address is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0x123')\n * // @error: Address.InvalidAddressError: Address `0x123` is invalid.\n * ```\n */\nexport class InvalidAddressError<\n  cause extends InvalidInputError | InvalidChecksumError =\n    | InvalidInputError\n    | InvalidChecksumError,\n> extends Errors.BaseError<cause> {\n  override readonly name = 'Address.InvalidAddressError'\n\n  constructor({ address, cause }: { address: string; cause: cause }) {\n    super(`Address \"${address}\" is invalid.`, {\n      cause,\n    })\n  }\n}\n\n/** Thrown when an address is not a 20 byte (40 hexadecimal character) value. */\nexport class InvalidInputError extends Errors.BaseError {\n  override readonly name = 'Address.InvalidInputError'\n\n  constructor() {\n    super('Address is not a 20 byte (40 hexadecimal character) value.')\n  }\n}\n\n/** Thrown when an address does not match its checksum counterpart. */\nexport class InvalidChecksumError extends Errors.BaseError {\n  override readonly name = 'Address.InvalidChecksumError'\n\n  constructor() {\n    super('Address does not match its checksum counterpart.')\n  }\n}\n", "/**\n * @internal\n *\n * Map with a LRU (Least recently used) policy.\n * @see https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU\n */\nexport class LruMap<value = unknown> extends Map<string, value> {\n  maxSize: number\n\n  constructor(size: number) {\n    super()\n    this.maxSize = size\n  }\n\n  override get(key: string) {\n    const value = super.get(key)\n\n    if (super.has(key) && value !== undefined) {\n      this.delete(key)\n      super.set(key, value)\n    }\n\n    return value\n  }\n\n  override set(key: string, value: value) {\n    super.set(key, value)\n    if (this.maxSize && this.size > this.maxSize) {\n      const firstKey = this.keys().next().value\n      if (firstKey) this.delete(firstKey)\n    }\n    return this\n  }\n}\n", "import type * as Address from './Address.js'\nimport { LruMap } from './internal/lru.js'\n\nconst caches = {\n  checksum: /*#__PURE__*/ new LruMap<Address.Address>(8192),\n}\n\nexport const checksum = caches.checksum\n\n/**\n * Clears all global caches.\n *\n * @example\n * ```ts\n * import { Caches } from 'ox'\n * Caches.clear()\n * ```\n */\nexport function clear() {\n  for (const cache of Object.values(caches)) cache.clear()\n}\n", "import { hmac } from '@noble/hashes/hmac'\nimport { ripemd160 as noble_ripemd160 } from '@noble/hashes/ripemd160'\nimport { keccak_256 as noble_keccak256 } from '@noble/hashes/sha3'\nimport { sha256 as noble_sha256 } from '@noble/hashes/sha256'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\n\n/**\n * Calculates the [Keccak256](https://en.wikipedia.org/wiki/SHA-3) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `keccak_256` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.keccak256('0xdeadbeef')\n * // @log: '0xd4fd4e189132273036449fc9e11198c739161b4c0116a9a2dccdfa1c492006f1'\n * ```\n *\n * @example\n * ### Calculate Hash of a String\n *\n * ```ts twoslash\n * import { Hash, Hex } from 'ox'\n *\n * Hash.keccak256(Hex.fromString('hello world'))\n * // @log: '0x3ea2f1d0abf3fc66cf29eebb70cbd4e7fe762ef8a09bcc06c8edf641230afec0'\n * ```\n *\n * @example\n * ### Configure Return Type\n *\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.keccak256('0xdeadbeef', { as: 'Bytes' })\n * // @log: Uint8Array [...]\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Keccak256 hash.\n */\nexport function keccak256<\n  value extends Hex.Hex | Bytes.Bytes,\n  as extends 'Hex' | 'Bytes' =\n    | (value extends Hex.Hex ? 'Hex' : never)\n    | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n  value: value | Hex.Hex | Bytes.Bytes,\n  options: keccak256.Options<as> = {},\n): keccak256.ReturnType<as> {\n  const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n  const bytes = noble_keccak256(Bytes.from(value))\n  if (as === 'Bytes') return bytes as never\n  return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace keccak256 {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> = {\n    /** The return type. @default 'Hex' */\n    as?: as | 'Hex' | 'Bytes' | undefined\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType =\n    | Bytes.from.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Calculates the [HMAC-SHA256](https://en.wikipedia.org/wiki/HMAC) of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `hmac` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash, Hex } from 'ox'\n *\n * Hash.hmac256(Hex.fromString('key'), '0xdeadbeef')\n * // @log: '0x...'\n * ```\n *\n * @example\n * ### Configure Return Type\n *\n * ```ts twoslash\n * import { Hash, Hex } from 'ox'\n *\n * Hash.hmac256(Hex.fromString('key'), '0xdeadbeef', { as: 'Bytes' })\n * // @log: Uint8Array [...]\n * ```\n *\n * @param key - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} key.\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns HMAC-SHA256 hash.\n */\nexport function hmac256<\n  value extends Hex.Hex | Bytes.Bytes,\n  as extends 'Hex' | 'Bytes' =\n    | (value extends Hex.Hex ? 'Hex' : never)\n    | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n  key: Hex.Hex | Bytes.Bytes,\n  value: value | Hex.Hex | Bytes.Bytes,\n  options: hmac256.Options<as> = {},\n): hmac256.ReturnType<as> {\n  const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n  const bytes = hmac(noble_sha256, Bytes.from(key), Bytes.from(value))\n  if (as === 'Bytes') return bytes as never\n  return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace hmac256 {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> = {\n    /** The return type. @default 'Hex' */\n    as?: as | 'Hex' | 'Bytes' | undefined\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType =\n    | Bytes.from.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Calculates the [Ripemd160](https://en.wikipedia.org/wiki/RIPEMD) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `ripemd160` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.ripemd160('0xdeadbeef')\n * // '0x226821c2f5423e11fe9af68bd285c249db2e4b5a'\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Ripemd160 hash.\n */\nexport function ripemd160<\n  value extends Hex.Hex | Bytes.Bytes,\n  as extends 'Hex' | 'Bytes' =\n    | (value extends Hex.Hex ? 'Hex' : never)\n    | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n  value: value | Hex.Hex | Bytes.Bytes,\n  options: ripemd160.Options<as> = {},\n): ripemd160.ReturnType<as> {\n  const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n  const bytes = noble_ripemd160(Bytes.from(value))\n  if (as === 'Bytes') return bytes as never\n  return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace ripemd160 {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> = {\n    /** The return type. @default 'Hex' */\n    as?: as | 'Hex' | 'Bytes' | undefined\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType =\n    | Bytes.from.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Calculates the [Sha256](https://en.wikipedia.org/wiki/SHA-256) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `sha256` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.sha256('0xdeadbeef')\n * // '0x5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953'\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Sha256 hash.\n */\nexport function sha256<\n  value extends Hex.Hex | Bytes.Bytes,\n  as extends 'Hex' | 'Bytes' =\n    | (value extends Hex.Hex ? 'Hex' : never)\n    | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n  value: value | Hex.Hex | Bytes.Bytes,\n  options: sha256.Options<as> = {},\n): sha256.ReturnType<as> {\n  const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n  const bytes = noble_sha256(Bytes.from(value))\n  if (as === 'Bytes') return bytes as never\n  return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace sha256 {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n    /** The return type. @default 'Hex' */\n    as?: as | 'Hex' | 'Bytes' | undefined\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType =\n    | Bytes.from.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Checks if a string is a valid hash value.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.validate('0x')\n * // @log: false\n *\n * Hash.validate('0x3ea2f1d0abf3fc66cf29eebb70cbd4e7fe762ef8a09bcc06c8edf641230afec0')\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns Whether the value is a valid hash.\n */\nexport function validate(value: string): value is Hex.Hex {\n  return Hex.validate(value) && Hex.size(value) === 32\n}\n\nexport declare namespace validate {\n  type ErrorType =\n    | Hex.validate.ErrorType\n    | Hex.size.ErrorType\n    | Errors.GlobalErrorType\n}\n", "import * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type { Compute, ExactPartial } from './internal/types.js'\nimport * as Json from './Json.js'\n\n/** Root type for an ECDSA Public Key. */\nexport type PublicKey<\n  compressed extends boolean = false,\n  bigintType = bigint,\n  numberType = number,\n> = Compute<\n  compressed extends true\n    ? {\n        prefix: numberType\n        x: bigintType\n        y?: undefined\n      }\n    : {\n        prefix: numberType\n        x: bigintType\n        y: bigintType\n      }\n>\n\n/**\n * Asserts that a {@link ox#PublicKey.PublicKey} is valid.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * PublicKey.assert({\n *   prefix: 4,\n *   y: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * })\n * // @error: PublicKey.InvalidError: Value \\`{\"y\":\"1\"}\\` is not a valid public key.\n * // @error: Public key must contain:\n * // @error: - an `x` and `prefix` value (compressed)\n * // @error: - an `x`, `y`, and `prefix` value (uncompressed)\n * ```\n *\n * @param publicKey - The public key object to assert.\n */\nexport function assert(\n  publicKey: ExactPartial<PublicKey>,\n  options: assert.Options = {},\n): asserts publicKey is PublicKey {\n  const { compressed } = options\n  const { prefix, x, y } = publicKey\n\n  // Uncompressed\n  if (\n    compressed === false ||\n    (typeof x === 'bigint' && typeof y === 'bigint')\n  ) {\n    if (prefix !== 4)\n      throw new InvalidPrefixError({\n        prefix,\n        cause: new InvalidUncompressedPrefixError(),\n      })\n    return\n  }\n\n  // Compressed\n  if (\n    compressed === true ||\n    (typeof x === 'bigint' && typeof y === 'undefined')\n  ) {\n    if (prefix !== 3 && prefix !== 2)\n      throw new InvalidPrefixError({\n        prefix,\n        cause: new InvalidCompressedPrefixError(),\n      })\n    return\n  }\n\n  // Unknown/invalid\n  throw new InvalidError({ publicKey })\n}\n\nexport declare namespace assert {\n  type Options = {\n    /** Whether or not the public key should be compressed. */\n    compressed?: boolean\n  }\n\n  type ErrorType = InvalidError | InvalidPrefixError | Errors.GlobalErrorType\n}\n\n/**\n * Compresses a {@link ox#PublicKey.PublicKey}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n *   prefix: 4,\n *   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n *   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const compressed = PublicKey.compress(publicKey) // [!code focus]\n * // @log: {\n * // @log:   prefix: 3,\n * // @log:   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: }\n * ```\n *\n * @param publicKey - The public key to compress.\n * @returns The compressed public key.\n */\nexport function compress(publicKey: PublicKey<false>): PublicKey<true> {\n  const { x, y } = publicKey\n  return {\n    prefix: y % 2n === 0n ? 2 : 3,\n    x,\n  }\n}\n\nexport declare namespace compress {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a typed {@link ox#PublicKey.PublicKey} object from a {@link ox#PublicKey.PublicKey}, {@link ox#Bytes.Bytes}, or {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n *   prefix: 4,\n *   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n *   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n * // @log: {\n * // @log:   prefix: 4,\n * // @log:   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log:   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from('0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5')\n * // @log: {\n * // @log:   prefix: 4,\n * // @log:   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log:   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @param value - The public key value to instantiate.\n * @returns The instantiated {@link ox#PublicKey.PublicKey}.\n */\nexport function from<\n  const publicKey extends\n    | CompressedPublicKey\n    | UncompressedPublicKey\n    | Hex.Hex\n    | Bytes.Bytes,\n>(value: from.Value<publicKey>): from.ReturnType<publicKey> {\n  const publicKey = (() => {\n    if (Hex.validate(value)) return fromHex(value)\n    if (Bytes.validate(value)) return fromBytes(value)\n\n    const { prefix, x, y } = value\n    if (typeof x === 'bigint' && typeof y === 'bigint')\n      return { prefix: prefix ?? 0x04, x, y }\n    return { prefix, x }\n  })()\n\n  assert(publicKey)\n\n  return publicKey as never\n}\n\n/** @internal */\ntype CompressedPublicKey = PublicKey<true>\n\n/** @internal */\ntype UncompressedPublicKey = Omit<PublicKey<false>, 'prefix'> & {\n  prefix?: PublicKey['prefix'] | undefined\n}\n\nexport declare namespace from {\n  type Value<\n    publicKey extends\n      | CompressedPublicKey\n      | UncompressedPublicKey\n      | Hex.Hex\n      | Bytes.Bytes = PublicKey,\n  > = publicKey | CompressedPublicKey | UncompressedPublicKey\n\n  type ReturnType<\n    publicKey extends\n      | CompressedPublicKey\n      | UncompressedPublicKey\n      | Hex.Hex\n      | Bytes.Bytes = PublicKey,\n  > = publicKey extends CompressedPublicKey | UncompressedPublicKey\n    ? publicKey extends UncompressedPublicKey\n      ? Compute<publicKey & { readonly prefix: 0x04 }>\n      : publicKey\n    : PublicKey\n\n  type ErrorType = assert.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#PublicKey.PublicKey} from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromBytes(new Uint8Array([128, 3, 131, ...]))\n * // @log: {\n * // @log:   prefix: 4,\n * // @log:   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log:   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @param publicKey - The serialized public key.\n * @returns The deserialized public key.\n */\nexport function fromBytes(publicKey: Bytes.Bytes): PublicKey {\n  return fromHex(Hex.fromBytes(publicKey))\n}\n\nexport declare namespace fromBytes {\n  type ErrorType =\n    | fromHex.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#PublicKey.PublicKey} from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromHex('0x8318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5')\n * // @log: {\n * // @log:   prefix: 4,\n * // @log:   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log:   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @example\n * ### Deserializing a Compressed Public Key\n *\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromHex('0x038318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed75')\n * // @log: {\n * // @log:   prefix: 3,\n * // @log:   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: }\n * ```\n *\n * @param publicKey - The serialized public key.\n * @returns The deserialized public key.\n */\nexport function fromHex(publicKey: Hex.Hex): PublicKey {\n  if (\n    publicKey.length !== 132 &&\n    publicKey.length !== 130 &&\n    publicKey.length !== 68\n  )\n    throw new InvalidSerializedSizeError({ publicKey })\n\n  if (publicKey.length === 130) {\n    const x = BigInt(Hex.slice(publicKey, 0, 32))\n    const y = BigInt(Hex.slice(publicKey, 32, 64))\n    return {\n      prefix: 4,\n      x,\n      y,\n    } as never\n  }\n\n  if (publicKey.length === 132) {\n    const prefix = Number(Hex.slice(publicKey, 0, 1))\n    const x = BigInt(Hex.slice(publicKey, 1, 33))\n    const y = BigInt(Hex.slice(publicKey, 33, 65))\n    return {\n      prefix,\n      x,\n      y,\n    } as never\n  }\n\n  const prefix = Number(Hex.slice(publicKey, 0, 1))\n  const x = BigInt(Hex.slice(publicKey, 1, 33))\n  return {\n    prefix,\n    x,\n  } as never\n}\n\nexport declare namespace fromHex {\n  type ErrorType = Hex.slice.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#PublicKey.PublicKey} to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n *   prefix: 4,\n *   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n *   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const bytes = PublicKey.toBytes(publicKey) // [!code focus]\n * // @log: Uint8Array [128, 3, 131, ...]\n * ```\n *\n * @param publicKey - The public key to serialize.\n * @returns The serialized public key.\n */\nexport function toBytes(\n  publicKey: PublicKey<boolean>,\n  options: toBytes.Options = {},\n): Bytes.Bytes {\n  return Bytes.fromHex(toHex(publicKey, options))\n}\n\nexport declare namespace toBytes {\n  type Options = {\n    /**\n     * Whether to include the prefix in the serialized public key.\n     * @default true\n     */\n    includePrefix?: boolean | undefined\n  }\n\n  type ErrorType =\n    | Hex.fromNumber.ErrorType\n    | Bytes.fromHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#PublicKey.PublicKey} to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n *   prefix: 4,\n *   x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n *   y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const hex = PublicKey.toHex(publicKey) // [!code focus]\n * // @log: '0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5'\n * ```\n *\n * @param publicKey - The public key to serialize.\n * @returns The serialized public key.\n */\nexport function toHex(\n  publicKey: PublicKey<boolean>,\n  options: toHex.Options = {},\n): Hex.Hex {\n  assert(publicKey)\n\n  const { prefix, x, y } = publicKey\n  const { includePrefix = true } = options\n\n  const publicKey_ = Hex.concat(\n    includePrefix ? Hex.fromNumber(prefix, { size: 1 }) : '0x',\n    Hex.fromNumber(x, { size: 32 }),\n    // If the public key is not compressed, add the y coordinate.\n    typeof y === 'bigint' ? Hex.fromNumber(y, { size: 32 }) : '0x',\n  )\n\n  return publicKey_\n}\n\nexport declare namespace toHex {\n  type Options = {\n    /**\n     * Whether to include the prefix in the serialized public key.\n     * @default true\n     */\n    includePrefix?: boolean | undefined\n  }\n\n  type ErrorType = Hex.fromNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Validates a {@link ox#PublicKey.PublicKey}. Returns `true` if valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const valid = PublicKey.validate({\n *   prefix: 4,\n *   y: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * })\n * // @log: false\n * ```\n *\n * @param publicKey - The public key object to assert.\n */\nexport function validate(\n  publicKey: ExactPartial<PublicKey>,\n  options: validate.Options = {},\n): boolean {\n  try {\n    assert(publicKey, options)\n    return true\n  } catch (_error) {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  type Options = {\n    /** Whether or not the public key should be compressed. */\n    compressed?: boolean\n  }\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Thrown when a public key is invalid.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * PublicKey.assert({ y: 1n })\n * // @error: PublicKey.InvalidError: Value `{\"y\":1n}` is not a valid public key.\n * // @error: Public key must contain:\n * // @error: - an `x` and `prefix` value (compressed)\n * // @error: - an `x`, `y`, and `prefix` value (uncompressed)\n * ```\n */\nexport class InvalidError extends Errors.BaseError {\n  override readonly name = 'PublicKey.InvalidError'\n\n  constructor({ publicKey }: { publicKey: unknown }) {\n    super(`Value \\`${Json.stringify(publicKey)}\\` is not a valid public key.`, {\n      metaMessages: [\n        'Public key must contain:',\n        '- an `x` and `prefix` value (compressed)',\n        '- an `x`, `y`, and `prefix` value (uncompressed)',\n      ],\n    })\n  }\n}\n\n/** Thrown when a public key has an invalid prefix. */\nexport class InvalidPrefixError<\n  cause extends InvalidCompressedPrefixError | InvalidUncompressedPrefixError =\n    | InvalidCompressedPrefixError\n    | InvalidUncompressedPrefixError,\n> extends Errors.BaseError<cause> {\n  override readonly name = 'PublicKey.InvalidPrefixError'\n\n  constructor({ prefix, cause }: { prefix: number | undefined; cause: cause }) {\n    super(`Prefix \"${prefix}\" is invalid.`, {\n      cause,\n    })\n  }\n}\n\n/** Thrown when the public key has an invalid prefix for a compressed public key. */\nexport class InvalidCompressedPrefixError extends Errors.BaseError {\n  override readonly name = 'PublicKey.InvalidCompressedPrefixError'\n\n  constructor() {\n    super('Prefix must be 2 or 3 for compressed public keys.')\n  }\n}\n\n/** Thrown when the public key has an invalid prefix for an uncompressed public key. */\nexport class InvalidUncompressedPrefixError extends Errors.BaseError {\n  override readonly name = 'PublicKey.InvalidUncompressedPrefixError'\n\n  constructor() {\n    super('Prefix must be 4 for uncompressed public keys.')\n  }\n}\n\n/** Thrown when the public key has an invalid serialized size. */\nexport class InvalidSerializedSizeError extends Errors.BaseError {\n  override readonly name = 'PublicKey.InvalidSerializedSizeError'\n\n  constructor({ publicKey }: { publicKey: Hex.Hex | Bytes.Bytes }) {\n    super(`Value \\`${publicKey}\\` is an invalid public key size.`, {\n      metaMessages: [\n        'Expected: 33 bytes (compressed + prefix), 64 bytes (uncompressed) or 65 bytes (uncompressed + prefix).',\n        `Received ${Hex.size(Hex.from(publicKey))} bytes.`,\n      ],\n    })\n  }\n}\n", "import type {\n  AbiParameter,\n  AbiParameterKind,\n  AbiParametersToPrimitiveTypes,\n  AbiParameterToPrimitiveType,\n} from 'abitype'\nimport * as AbiParameters from '../AbiParameters.js'\nimport * as Address from '../Address.js'\nimport * as Bytes from '../Bytes.js'\nimport * as Errors from '../Errors.js'\nimport * as Hex from '../Hex.js'\nimport { integerRegex } from '../Solidity.js'\nimport type * as Cursor from './cursor.js'\nimport type { Compute, IsNarrowable, UnionToIntersection } from './types.js'\n\n/** @internal */\nexport type ParameterToPrimitiveType<\n  abiParameter extends AbiParameter | { name: string; type: unknown },\n  abiParameterKind extends AbiParameterKind = AbiParameterKind,\n> = AbiParameterToPrimitiveType<abiParameter, abiParameterKind>\n\n/** @internal */\nexport type PreparedParameter = { dynamic: boolean; encoded: Hex.Hex }\n\n/** @internal */\nexport type ToObject<\n  parameters extends readonly AbiParameter[],\n  kind extends AbiParameterKind = AbiParameterKind,\n> = IsNarrowable<parameters, AbiParameters.AbiParameters> extends true\n  ? Compute<\n      UnionToIntersection<\n        {\n          [index in keyof parameters]: parameters[index] extends {\n            name: infer name extends string\n          }\n            ? {\n                [key in name]: AbiParameterToPrimitiveType<\n                  parameters[index],\n                  kind\n                >\n              }\n            : {\n                [key in index]: AbiParameterToPrimitiveType<\n                  parameters[index],\n                  kind\n                >\n              }\n        }[number]\n      >\n    >\n  : unknown\n\n/** @internal */\nexport type ToPrimitiveTypes<\n  abiParameters extends readonly AbiParameter[],\n  abiParameterKind extends AbiParameterKind = AbiParameterKind,\n> = AbiParametersToPrimitiveTypes<abiParameters, abiParameterKind>\n\n/** @internal */\nexport type Tuple = ParameterToPrimitiveType<TupleAbiParameter>\n\n/** @internal */\nexport function decodeParameter(\n  cursor: Cursor.Cursor,\n  param: AbiParameters.Parameter,\n  options: { checksumAddress?: boolean | undefined; staticPosition: number },\n) {\n  const { checksumAddress, staticPosition } = options\n  const arrayComponents = getArrayComponents(param.type)\n  if (arrayComponents) {\n    const [length, type] = arrayComponents\n    return decodeArray(\n      cursor,\n      { ...param, type },\n      { checksumAddress, length, staticPosition },\n    )\n  }\n  if (param.type === 'tuple')\n    return decodeTuple(cursor, param as TupleAbiParameter, {\n      checksumAddress,\n      staticPosition,\n    })\n  if (param.type === 'address')\n    return decodeAddress(cursor, { checksum: checksumAddress })\n  if (param.type === 'bool') return decodeBool(cursor)\n  if (param.type.startsWith('bytes'))\n    return decodeBytes(cursor, param, { staticPosition })\n  if (param.type.startsWith('uint') || param.type.startsWith('int'))\n    return decodeNumber(cursor, param)\n  if (param.type === 'string') return decodeString(cursor, { staticPosition })\n  throw new AbiParameters.InvalidTypeError(param.type)\n}\n\nexport declare namespace decodeParameter {\n  type ErrorType =\n    | decodeArray.ErrorType\n    | decodeTuple.ErrorType\n    | decodeAddress.ErrorType\n    | decodeBool.ErrorType\n    | decodeBytes.ErrorType\n    | decodeNumber.ErrorType\n    | decodeString.ErrorType\n    | AbiParameters.InvalidTypeError\n    | Errors.GlobalErrorType\n}\n\nconst sizeOfLength = 32\nconst sizeOfOffset = 32\n\n/** @internal */\nexport function decodeAddress(\n  cursor: Cursor.Cursor,\n  options: { checksum?: boolean | undefined } = {},\n) {\n  const { checksum = false } = options\n  const value = cursor.readBytes(32)\n  const wrap = (address: Hex.Hex) =>\n    checksum ? Address.checksum(address) : address\n  return [wrap(Hex.fromBytes(Bytes.slice(value, -20))), 32]\n}\n\nexport declare namespace decodeAddress {\n  type ErrorType =\n    | Hex.fromBytes.ErrorType\n    | Bytes.slice.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeArray(\n  cursor: Cursor.Cursor,\n  param: AbiParameters.Parameter,\n  options: {\n    checksumAddress?: boolean | undefined\n    length: number | null\n    staticPosition: number\n  },\n) {\n  const { checksumAddress, length, staticPosition } = options\n\n  // If the length of the array is not known in advance (dynamic array),\n  // this means we will need to wonder off to the pointer and decode.\n  if (!length) {\n    // Dealing with a dynamic type, so get the offset of the array data.\n    const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset))\n\n    // Start is the static position of current slot + offset.\n    const start = staticPosition + offset\n    const startOfData = start + sizeOfLength\n\n    // Get the length of the array from the offset.\n    cursor.setPosition(start)\n    const length = Bytes.toNumber(cursor.readBytes(sizeOfLength))\n\n    // Check if the array has any dynamic children.\n    const dynamicChild = hasDynamicChild(param)\n\n    let consumed = 0\n    const value: unknown[] = []\n    for (let i = 0; i < length; ++i) {\n      // If any of the children is dynamic, then all elements will be offset pointer, thus size of one slot (32 bytes).\n      // Otherwise, elements will be the size of their encoding (consumed bytes).\n      cursor.setPosition(startOfData + (dynamicChild ? i * 32 : consumed))\n      const [data, consumed_] = decodeParameter(cursor, param, {\n        checksumAddress,\n        staticPosition: startOfData,\n      })\n      consumed += consumed_\n      value.push(data)\n    }\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [value, 32]\n  }\n\n  // If the length of the array is known in advance,\n  // and the length of an element deeply nested in the array is not known,\n  // we need to decode the offset of the array data.\n  if (hasDynamicChild(param)) {\n    // Dealing with dynamic types, so get the offset of the array data.\n    const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset))\n\n    // Start is the static position of current slot + offset.\n    const start = staticPosition + offset\n\n    const value: unknown[] = []\n    for (let i = 0; i < length; ++i) {\n      // Move cursor along to the next slot (next offset pointer).\n      cursor.setPosition(start + i * 32)\n      const [data] = decodeParameter(cursor, param, {\n        checksumAddress,\n        staticPosition: start,\n      })\n      value.push(data)\n    }\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [value, 32]\n  }\n\n  // If the length of the array is known in advance and the array is deeply static,\n  // then we can just decode each element in sequence.\n  let consumed = 0\n  const value: unknown[] = []\n  for (let i = 0; i < length; ++i) {\n    const [data, consumed_] = decodeParameter(cursor, param, {\n      checksumAddress,\n      staticPosition: staticPosition + consumed,\n    })\n    consumed += consumed_\n    value.push(data)\n  }\n  return [value, consumed]\n}\n\nexport declare namespace decodeArray {\n  type ErrorType = Bytes.toNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeBool(cursor: Cursor.Cursor) {\n  return [Bytes.toBoolean(cursor.readBytes(32), { size: 32 }), 32]\n}\n\nexport declare namespace decodeBool {\n  type ErrorType = Bytes.toBoolean.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeBytes(\n  cursor: Cursor.Cursor,\n  param: AbiParameters.Parameter,\n  { staticPosition }: { staticPosition: number },\n) {\n  const [_, size] = param.type.split('bytes')\n  if (!size) {\n    // Dealing with dynamic types, so get the offset of the bytes data.\n    const offset = Bytes.toNumber(cursor.readBytes(32))\n\n    // Set position of the cursor to start of bytes data.\n    cursor.setPosition(staticPosition + offset)\n\n    const length = Bytes.toNumber(cursor.readBytes(32))\n\n    // If there is no length, we have zero data.\n    if (length === 0) {\n      // As we have gone wondering, restore to the original position + next slot.\n      cursor.setPosition(staticPosition + 32)\n      return ['0x', 32]\n    }\n\n    const data = cursor.readBytes(length)\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [Hex.fromBytes(data), 32]\n  }\n\n  const value = Hex.fromBytes(cursor.readBytes(Number.parseInt(size, 10), 32))\n  return [value, 32]\n}\n\nexport declare namespace decodeBytes {\n  type ErrorType =\n    | Hex.fromBytes.ErrorType\n    | Bytes.toNumber.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeNumber(\n  cursor: Cursor.Cursor,\n  param: AbiParameters.Parameter,\n) {\n  const signed = param.type.startsWith('int')\n  const size = Number.parseInt(param.type.split('int')[1] || '256', 10)\n  const value = cursor.readBytes(32)\n  return [\n    size > 48\n      ? Bytes.toBigInt(value, { signed })\n      : Bytes.toNumber(value, { signed }),\n    32,\n  ]\n}\n\nexport declare namespace decodeNumber {\n  type ErrorType =\n    | Bytes.toNumber.ErrorType\n    | Bytes.toBigInt.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport type TupleAbiParameter = AbiParameters.Parameter & {\n  components: readonly AbiParameters.Parameter[]\n}\n\n/** @internal */\nexport function decodeTuple(\n  cursor: Cursor.Cursor,\n  param: TupleAbiParameter,\n  options: { checksumAddress?: boolean | undefined; staticPosition: number },\n) {\n  const { checksumAddress, staticPosition } = options\n\n  // Tuples can have unnamed components (i.e. they are arrays), so we must\n  // determine whether the tuple is named or unnamed. In the case of a named\n  // tuple, the value will be an object where each property is the name of the\n  // component. In the case of an unnamed tuple, the value will be an array.\n  const hasUnnamedChild =\n    param.components.length === 0 || param.components.some(({ name }) => !name)\n\n  // Initialize the value to an object or an array, depending on whether the\n  // tuple is named or unnamed.\n  const value: any = hasUnnamedChild ? [] : {}\n  let consumed = 0\n\n  // If the tuple has a dynamic child, we must first decode the offset to the\n  // tuple data.\n  if (hasDynamicChild(param)) {\n    // Dealing with dynamic types, so get the offset of the tuple data.\n    const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset))\n\n    // Start is the static position of referencing slot + offset.\n    const start = staticPosition + offset\n\n    for (let i = 0; i < param.components.length; ++i) {\n      const component = param.components[i]!\n      cursor.setPosition(start + consumed)\n      const [data, consumed_] = decodeParameter(cursor, component, {\n        checksumAddress,\n        staticPosition: start,\n      })\n      consumed += consumed_\n      value[hasUnnamedChild ? i : component?.name!] = data\n    }\n\n    // As we have gone wondering, restore to the original position + next slot.\n    cursor.setPosition(staticPosition + 32)\n    return [value, 32]\n  }\n\n  // If the tuple has static children, we can just decode each component\n  // in sequence.\n  for (let i = 0; i < param.components.length; ++i) {\n    const component = param.components[i]!\n    const [data, consumed_] = decodeParameter(cursor, component, {\n      checksumAddress,\n      staticPosition,\n    })\n    value[hasUnnamedChild ? i : component?.name!] = data\n    consumed += consumed_\n  }\n  return [value, consumed]\n}\n\nexport declare namespace decodeTuple {\n  type ErrorType = Bytes.toNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeString(\n  cursor: Cursor.Cursor,\n  { staticPosition }: { staticPosition: number },\n) {\n  // Get offset to start of string data.\n  const offset = Bytes.toNumber(cursor.readBytes(32))\n\n  // Start is the static position of current slot + offset.\n  const start = staticPosition + offset\n  cursor.setPosition(start)\n\n  const length = Bytes.toNumber(cursor.readBytes(32))\n\n  // If there is no length, we have zero data (empty string).\n  if (length === 0) {\n    cursor.setPosition(staticPosition + 32)\n    return ['', 32]\n  }\n\n  const data = cursor.readBytes(length, 32)\n  const value = Bytes.toString(Bytes.trimLeft(data))\n\n  // As we have gone wondering, restore to the original position + next slot.\n  cursor.setPosition(staticPosition + 32)\n\n  return [value, 32]\n}\n\nexport declare namespace decodeString {\n  type ErrorType =\n    | Bytes.toNumber.ErrorType\n    | Bytes.toString.ErrorType\n    | Bytes.trimLeft.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function prepareParameters<\n  const parameters extends AbiParameters.AbiParameters,\n>({\n  checksumAddress,\n  parameters,\n  values,\n}: {\n  checksumAddress?: boolean | undefined\n  parameters: parameters\n  values: parameters extends AbiParameters.AbiParameters\n    ? ToPrimitiveTypes<parameters>\n    : never\n}) {\n  const preparedParameters: PreparedParameter[] = []\n  for (let i = 0; i < parameters.length; i++) {\n    preparedParameters.push(\n      prepareParameter({\n        checksumAddress,\n        parameter: parameters[i]!,\n        value: values[i],\n      }),\n    )\n  }\n  return preparedParameters\n}\n\n/** @internal */\nexport declare namespace prepareParameters {\n  type ErrorType = prepareParameter.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function prepareParameter<\n  const parameter extends AbiParameters.Parameter,\n>({\n  checksumAddress = false,\n  parameter: parameter_,\n  value,\n}: {\n  parameter: parameter\n  value: parameter extends AbiParameters.Parameter\n    ? ParameterToPrimitiveType<parameter>\n    : never\n  checksumAddress?: boolean | undefined\n}): PreparedParameter {\n  const parameter = parameter_ as AbiParameters.Parameter\n\n  const arrayComponents = getArrayComponents(parameter.type)\n  if (arrayComponents) {\n    const [length, type] = arrayComponents\n    return encodeArray(value, {\n      checksumAddress,\n      length,\n      parameter: {\n        ...parameter,\n        type,\n      },\n    })\n  }\n  if (parameter.type === 'tuple') {\n    return encodeTuple(value as unknown as Tuple, {\n      checksumAddress,\n      parameter: parameter as TupleAbiParameter,\n    })\n  }\n  if (parameter.type === 'address') {\n    return encodeAddress(value as unknown as Hex.Hex, {\n      checksum: checksumAddress,\n    })\n  }\n  if (parameter.type === 'bool') {\n    return encodeBoolean(value as unknown as boolean)\n  }\n  if (parameter.type.startsWith('uint') || parameter.type.startsWith('int')) {\n    const signed = parameter.type.startsWith('int')\n    const [, , size = '256'] = integerRegex.exec(parameter.type) ?? []\n    return encodeNumber(value as unknown as number, {\n      signed,\n      size: Number(size),\n    })\n  }\n  if (parameter.type.startsWith('bytes')) {\n    return encodeBytes(value as unknown as Hex.Hex, { type: parameter.type })\n  }\n  if (parameter.type === 'string') {\n    return encodeString(value as unknown as string)\n  }\n  throw new AbiParameters.InvalidTypeError(parameter.type)\n}\n\n/** @internal */\nexport declare namespace prepareParameter {\n  type ErrorType =\n    | encodeArray.ErrorType\n    | encodeTuple.ErrorType\n    | encodeAddress.ErrorType\n    | encodeBoolean.ErrorType\n    | encodeBytes.ErrorType\n    | encodeString.ErrorType\n    | AbiParameters.InvalidTypeError\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encode(preparedParameters: PreparedParameter[]): Hex.Hex {\n  // 1. Compute the size of the static part of the parameters.\n  let staticSize = 0\n  for (let i = 0; i < preparedParameters.length; i++) {\n    const { dynamic, encoded } = preparedParameters[i]!\n    if (dynamic) staticSize += 32\n    else staticSize += Hex.size(encoded)\n  }\n\n  // 2. Split the parameters into static and dynamic parts.\n  const staticParameters: Hex.Hex[] = []\n  const dynamicParameters: Hex.Hex[] = []\n  let dynamicSize = 0\n  for (let i = 0; i < preparedParameters.length; i++) {\n    const { dynamic, encoded } = preparedParameters[i]!\n    if (dynamic) {\n      staticParameters.push(\n        Hex.fromNumber(staticSize + dynamicSize, { size: 32 }),\n      )\n      dynamicParameters.push(encoded)\n      dynamicSize += Hex.size(encoded)\n    } else {\n      staticParameters.push(encoded)\n    }\n  }\n\n  // 3. Concatenate static and dynamic parts.\n  return Hex.concat(...staticParameters, ...dynamicParameters)\n}\n\n/** @internal */\nexport declare namespace encode {\n  type ErrorType =\n    | Hex.concat.ErrorType\n    | Hex.fromNumber.ErrorType\n    | Hex.size.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeAddress(\n  value: Hex.Hex,\n  options: { checksum: boolean },\n): PreparedParameter {\n  const { checksum = false } = options\n  Address.assert(value, { strict: checksum })\n  return {\n    dynamic: false,\n    encoded: Hex.padLeft(value.toLowerCase() as Hex.Hex),\n  }\n}\n\n/** @internal */\nexport declare namespace encodeAddress {\n  type ErrorType =\n    | Address.assert.ErrorType\n    | Hex.padLeft.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeArray<const parameter extends AbiParameters.Parameter>(\n  value: ParameterToPrimitiveType<parameter>,\n  options: {\n    checksumAddress?: boolean | undefined\n    length: number | null\n    parameter: parameter\n  },\n): PreparedParameter {\n  const { checksumAddress, length, parameter } = options\n\n  const dynamic = length === null\n\n  if (!Array.isArray(value)) throw new AbiParameters.InvalidArrayError(value)\n  if (!dynamic && value.length !== length)\n    throw new AbiParameters.ArrayLengthMismatchError({\n      expectedLength: length!,\n      givenLength: value.length,\n      type: `${parameter.type}[${length}]`,\n    })\n\n  let dynamicChild = false\n  const preparedParameters: PreparedParameter[] = []\n  for (let i = 0; i < value.length; i++) {\n    const preparedParam = prepareParameter({\n      checksumAddress,\n      parameter,\n      value: value[i],\n    })\n    if (preparedParam.dynamic) dynamicChild = true\n    preparedParameters.push(preparedParam)\n  }\n\n  if (dynamic || dynamicChild) {\n    const data = encode(preparedParameters)\n    if (dynamic) {\n      const length = Hex.fromNumber(preparedParameters.length, { size: 32 })\n      return {\n        dynamic: true,\n        encoded:\n          preparedParameters.length > 0 ? Hex.concat(length, data) : length,\n      }\n    }\n    if (dynamicChild) return { dynamic: true, encoded: data }\n  }\n  return {\n    dynamic: false,\n    encoded: Hex.concat(...preparedParameters.map(({ encoded }) => encoded)),\n  }\n}\n\n/** @internal */\nexport declare namespace encodeArray {\n  type ErrorType =\n    | AbiParameters.InvalidArrayError\n    | AbiParameters.ArrayLengthMismatchError\n    | Hex.concat.ErrorType\n    | Hex.fromNumber.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeBytes(\n  value: Hex.Hex,\n  { type }: { type: string },\n): PreparedParameter {\n  const [, parametersize] = type.split('bytes')\n  const bytesSize = Hex.size(value)\n  if (!parametersize) {\n    let value_ = value\n    // If the size is not divisible by 32 bytes, pad the end\n    // with empty bytes to the ceiling 32 bytes.\n    if (bytesSize % 32 !== 0)\n      value_ = Hex.padRight(value_, Math.ceil((value.length - 2) / 2 / 32) * 32)\n    return {\n      dynamic: true,\n      encoded: Hex.concat(\n        Hex.padLeft(Hex.fromNumber(bytesSize, { size: 32 })),\n        value_,\n      ),\n    }\n  }\n  if (bytesSize !== Number.parseInt(parametersize, 10))\n    throw new AbiParameters.BytesSizeMismatchError({\n      expectedSize: Number.parseInt(parametersize, 10),\n      value,\n    })\n  return { dynamic: false, encoded: Hex.padRight(value) }\n}\n\n/** @internal */\nexport declare namespace encodeBytes {\n  type ErrorType =\n    | Hex.padLeft.ErrorType\n    | Hex.padRight.ErrorType\n    | Hex.fromNumber.ErrorType\n    | Hex.slice.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeBoolean(value: boolean): PreparedParameter {\n  if (typeof value !== 'boolean')\n    throw new Errors.BaseError(\n      `Invalid boolean value: \"${value}\" (type: ${typeof value}). Expected: \\`true\\` or \\`false\\`.`,\n    )\n  return { dynamic: false, encoded: Hex.padLeft(Hex.fromBoolean(value)) }\n}\n\n/** @internal */\nexport declare namespace encodeBoolean {\n  type ErrorType =\n    | Hex.padLeft.ErrorType\n    | Hex.fromBoolean.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeNumber(\n  value: number,\n  { signed, size }: { signed: boolean; size: number },\n): PreparedParameter {\n  if (typeof size === 'number') {\n    const max = 2n ** (BigInt(size) - (signed ? 1n : 0n)) - 1n\n    const min = signed ? -max - 1n : 0n\n    if (value > max || value < min)\n      throw new Hex.IntegerOutOfRangeError({\n        max: max.toString(),\n        min: min.toString(),\n        signed,\n        size: size / 8,\n        value: value.toString(),\n      })\n  }\n  return {\n    dynamic: false,\n    encoded: Hex.fromNumber(value, {\n      size: 32,\n      signed,\n    }),\n  }\n}\n\n/** @internal */\nexport declare namespace encodeNumber {\n  type ErrorType = Hex.fromNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeString(value: string): PreparedParameter {\n  const hexValue = Hex.fromString(value)\n  const partsLength = Math.ceil(Hex.size(hexValue) / 32)\n  const parts: Hex.Hex[] = []\n  for (let i = 0; i < partsLength; i++) {\n    parts.push(Hex.padRight(Hex.slice(hexValue, i * 32, (i + 1) * 32)))\n  }\n  return {\n    dynamic: true,\n    encoded: Hex.concat(\n      Hex.padRight(Hex.fromNumber(Hex.size(hexValue), { size: 32 })),\n      ...parts,\n    ),\n  }\n}\n\n/** @internal */\nexport declare namespace encodeString {\n  type ErrorType =\n    | Hex.fromNumber.ErrorType\n    | Hex.padRight.ErrorType\n    | Hex.slice.ErrorType\n    | Hex.size.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeTuple<\n  const parameter extends AbiParameters.Parameter & {\n    components: readonly AbiParameters.Parameter[]\n  },\n>(\n  value: ParameterToPrimitiveType<parameter>,\n  options: {\n    checksumAddress?: boolean | undefined\n    parameter: parameter\n  },\n): PreparedParameter {\n  const { checksumAddress, parameter } = options\n\n  let dynamic = false\n  const preparedParameters: PreparedParameter[] = []\n  for (let i = 0; i < parameter.components.length; i++) {\n    const param_ = parameter.components[i]!\n    const index = Array.isArray(value) ? i : param_.name\n    const preparedParam = prepareParameter({\n      checksumAddress,\n      parameter: param_,\n      value: (value as any)[index!] as readonly unknown[],\n    })\n    preparedParameters.push(preparedParam)\n    if (preparedParam.dynamic) dynamic = true\n  }\n  return {\n    dynamic,\n    encoded: dynamic\n      ? encode(preparedParameters)\n      : Hex.concat(...preparedParameters.map(({ encoded }) => encoded)),\n  }\n}\n\n/** @internal */\nexport declare namespace encodeTuple {\n  type ErrorType = Hex.concat.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function getArrayComponents(\n  type: string,\n): [length: number | null, innerType: string] | undefined {\n  const matches = type.match(/^(.*)\\[(\\d+)?\\]$/)\n  return matches\n    ? // Return `null` if the array is dynamic.\n      [matches[2]! ? Number(matches[2]!) : null, matches[1]!]\n    : undefined\n}\n\n/** @internal */\nexport function hasDynamicChild(param: AbiParameters.Parameter) {\n  const { type } = param\n  if (type === 'string') return true\n  if (type === 'bytes') return true\n  if (type.endsWith('[]')) return true\n\n  if (type === 'tuple') return (param as any).components?.some(hasDynamicChild)\n\n  const arrayComponents = getArrayComponents(param.type)\n  if (\n    arrayComponents &&\n    hasDynamicChild({\n      ...param,\n      type: arrayComponents[1],\n    } as AbiParameters.Parameter)\n  )\n    return true\n\n  return false\n}\n", "export const arrayRegex = /^(.*)\\[([0-9]*)\\]$/\n\n// `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n// https://regexr.com/6va55\nexport const bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/\n\n// `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nexport const integerRegex =\n  /^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/\n\nexport const maxInt8 = 2n ** (8n - 1n) - 1n\nexport const maxInt16 = 2n ** (16n - 1n) - 1n\nexport const maxInt24 = 2n ** (24n - 1n) - 1n\nexport const maxInt32 = 2n ** (32n - 1n) - 1n\nexport const maxInt40 = 2n ** (40n - 1n) - 1n\nexport const maxInt48 = 2n ** (48n - 1n) - 1n\nexport const maxInt56 = 2n ** (56n - 1n) - 1n\nexport const maxInt64 = 2n ** (64n - 1n) - 1n\nexport const maxInt72 = 2n ** (72n - 1n) - 1n\nexport const maxInt80 = 2n ** (80n - 1n) - 1n\nexport const maxInt88 = 2n ** (88n - 1n) - 1n\nexport const maxInt96 = 2n ** (96n - 1n) - 1n\nexport const maxInt104 = 2n ** (104n - 1n) - 1n\nexport const maxInt112 = 2n ** (112n - 1n) - 1n\nexport const maxInt120 = 2n ** (120n - 1n) - 1n\nexport const maxInt128 = 2n ** (128n - 1n) - 1n\nexport const maxInt136 = 2n ** (136n - 1n) - 1n\nexport const maxInt144 = 2n ** (144n - 1n) - 1n\nexport const maxInt152 = 2n ** (152n - 1n) - 1n\nexport const maxInt160 = 2n ** (160n - 1n) - 1n\nexport const maxInt168 = 2n ** (168n - 1n) - 1n\nexport const maxInt176 = 2n ** (176n - 1n) - 1n\nexport const maxInt184 = 2n ** (184n - 1n) - 1n\nexport const maxInt192 = 2n ** (192n - 1n) - 1n\nexport const maxInt200 = 2n ** (200n - 1n) - 1n\nexport const maxInt208 = 2n ** (208n - 1n) - 1n\nexport const maxInt216 = 2n ** (216n - 1n) - 1n\nexport const maxInt224 = 2n ** (224n - 1n) - 1n\nexport const maxInt232 = 2n ** (232n - 1n) - 1n\nexport const maxInt240 = 2n ** (240n - 1n) - 1n\nexport const maxInt248 = 2n ** (248n - 1n) - 1n\nexport const maxInt256 = 2n ** (256n - 1n) - 1n\n\nexport const minInt8 = -(2n ** (8n - 1n))\nexport const minInt16 = -(2n ** (16n - 1n))\nexport const minInt24 = -(2n ** (24n - 1n))\nexport const minInt32 = -(2n ** (32n - 1n))\nexport const minInt40 = -(2n ** (40n - 1n))\nexport const minInt48 = -(2n ** (48n - 1n))\nexport const minInt56 = -(2n ** (56n - 1n))\nexport const minInt64 = -(2n ** (64n - 1n))\nexport const minInt72 = -(2n ** (72n - 1n))\nexport const minInt80 = -(2n ** (80n - 1n))\nexport const minInt88 = -(2n ** (88n - 1n))\nexport const minInt96 = -(2n ** (96n - 1n))\nexport const minInt104 = -(2n ** (104n - 1n))\nexport const minInt112 = -(2n ** (112n - 1n))\nexport const minInt120 = -(2n ** (120n - 1n))\nexport const minInt128 = -(2n ** (128n - 1n))\nexport const minInt136 = -(2n ** (136n - 1n))\nexport const minInt144 = -(2n ** (144n - 1n))\nexport const minInt152 = -(2n ** (152n - 1n))\nexport const minInt160 = -(2n ** (160n - 1n))\nexport const minInt168 = -(2n ** (168n - 1n))\nexport const minInt176 = -(2n ** (176n - 1n))\nexport const minInt184 = -(2n ** (184n - 1n))\nexport const minInt192 = -(2n ** (192n - 1n))\nexport const minInt200 = -(2n ** (200n - 1n))\nexport const minInt208 = -(2n ** (208n - 1n))\nexport const minInt216 = -(2n ** (216n - 1n))\nexport const minInt224 = -(2n ** (224n - 1n))\nexport const minInt232 = -(2n ** (232n - 1n))\nexport const minInt240 = -(2n ** (240n - 1n))\nexport const minInt248 = -(2n ** (248n - 1n))\nexport const minInt256 = -(2n ** (256n - 1n))\n\nexport const maxUint8 = 2n ** 8n - 1n\nexport const maxUint16 = 2n ** 16n - 1n\nexport const maxUint24 = 2n ** 24n - 1n\nexport const maxUint32 = 2n ** 32n - 1n\nexport const maxUint40 = 2n ** 40n - 1n\nexport const maxUint48 = 2n ** 48n - 1n\nexport const maxUint56 = 2n ** 56n - 1n\nexport const maxUint64 = 2n ** 64n - 1n\nexport const maxUint72 = 2n ** 72n - 1n\nexport const maxUint80 = 2n ** 80n - 1n\nexport const maxUint88 = 2n ** 88n - 1n\nexport const maxUint96 = 2n ** 96n - 1n\nexport const maxUint104 = 2n ** 104n - 1n\nexport const maxUint112 = 2n ** 112n - 1n\nexport const maxUint120 = 2n ** 120n - 1n\nexport const maxUint128 = 2n ** 128n - 1n\nexport const maxUint136 = 2n ** 136n - 1n\nexport const maxUint144 = 2n ** 144n - 1n\nexport const maxUint152 = 2n ** 152n - 1n\nexport const maxUint160 = 2n ** 160n - 1n\nexport const maxUint168 = 2n ** 168n - 1n\nexport const maxUint176 = 2n ** 176n - 1n\nexport const maxUint184 = 2n ** 184n - 1n\nexport const maxUint192 = 2n ** 192n - 1n\nexport const maxUint200 = 2n ** 200n - 1n\nexport const maxUint208 = 2n ** 208n - 1n\nexport const maxUint216 = 2n ** 216n - 1n\nexport const maxUint224 = 2n ** 224n - 1n\nexport const maxUint232 = 2n ** 232n - 1n\nexport const maxUint240 = 2n ** 240n - 1n\nexport const maxUint248 = 2n ** 248n - 1n\nexport const maxUint256 = 2n ** 256n - 1n\n", "import type { Bytes } from '../Bytes.js'\nimport * as Errors from '../Errors.js'\n\n/** @internal */\nexport type Cursor = {\n  bytes: Bytes\n  dataView: DataView\n  position: number\n  positionReadCount: Map<number, number>\n  recursiveReadCount: number\n  recursiveReadLimit: number\n  remaining: number\n  assertReadLimit(position?: number): void\n  assertPosition(position: number): void\n  decrementPosition(offset: number): void\n  getReadCount(position?: number): number\n  incrementPosition(offset: number): void\n  inspectByte(position?: number): Bytes[number]\n  inspectBytes(length: number, position?: number): Bytes\n  inspectUint8(position?: number): number\n  inspectUint16(position?: number): number\n  inspectUint24(position?: number): number\n  inspectUint32(position?: number): number\n  pushByte(byte: Bytes[number]): void\n  pushBytes(bytes: Bytes): void\n  pushUint8(value: number): void\n  pushUint16(value: number): void\n  pushUint24(value: number): void\n  pushUint32(value: number): void\n  readByte(): Bytes[number]\n  readBytes(length: number, size?: number): Bytes\n  readUint8(): number\n  readUint16(): number\n  readUint24(): number\n  readUint32(): number\n  setPosition(position: number): () => void\n  _touch(): void\n}\n\nconst staticCursor: Cursor = {\n  bytes: new Uint8Array(),\n  dataView: new DataView(new ArrayBuffer(0)),\n  position: 0,\n  positionReadCount: new Map(),\n  recursiveReadCount: 0,\n  recursiveReadLimit: Number.POSITIVE_INFINITY,\n  assertReadLimit() {\n    if (this.recursiveReadCount >= this.recursiveReadLimit)\n      throw new RecursiveReadLimitExceededError({\n        count: this.recursiveReadCount + 1,\n        limit: this.recursiveReadLimit,\n      })\n  },\n  assertPosition(position) {\n    if (position < 0 || position > this.bytes.length - 1)\n      throw new PositionOutOfBoundsError({\n        length: this.bytes.length,\n        position,\n      })\n  },\n  decrementPosition(offset) {\n    if (offset < 0) throw new NegativeOffsetError({ offset })\n    const position = this.position - offset\n    this.assertPosition(position)\n    this.position = position\n  },\n  getReadCount(position) {\n    return this.positionReadCount.get(position || this.position) || 0\n  },\n  incrementPosition(offset) {\n    if (offset < 0) throw new NegativeOffsetError({ offset })\n    const position = this.position + offset\n    this.assertPosition(position)\n    this.position = position\n  },\n  inspectByte(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position)\n    return this.bytes[position]!\n  },\n  inspectBytes(length, position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + length - 1)\n    return this.bytes.subarray(position, position + length)\n  },\n  inspectUint8(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position)\n    return this.bytes[position]!\n  },\n  inspectUint16(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + 1)\n    return this.dataView.getUint16(position)\n  },\n  inspectUint24(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + 2)\n    return (\n      (this.dataView.getUint16(position) << 8) +\n      this.dataView.getUint8(position + 2)\n    )\n  },\n  inspectUint32(position_) {\n    const position = position_ ?? this.position\n    this.assertPosition(position + 3)\n    return this.dataView.getUint32(position)\n  },\n  pushByte(byte: Bytes[number]) {\n    this.assertPosition(this.position)\n    this.bytes[this.position] = byte\n    this.position++\n  },\n  pushBytes(bytes: Bytes) {\n    this.assertPosition(this.position + bytes.length - 1)\n    this.bytes.set(bytes, this.position)\n    this.position += bytes.length\n  },\n  pushUint8(value: number) {\n    this.assertPosition(this.position)\n    this.bytes[this.position] = value\n    this.position++\n  },\n  pushUint16(value: number) {\n    this.assertPosition(this.position + 1)\n    this.dataView.setUint16(this.position, value)\n    this.position += 2\n  },\n  pushUint24(value: number) {\n    this.assertPosition(this.position + 2)\n    this.dataView.setUint16(this.position, value >> 8)\n    this.dataView.setUint8(this.position + 2, value & ~4294967040)\n    this.position += 3\n  },\n  pushUint32(value: number) {\n    this.assertPosition(this.position + 3)\n    this.dataView.setUint32(this.position, value)\n    this.position += 4\n  },\n  readByte() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectByte()\n    this.position++\n    return value\n  },\n  readBytes(length, size) {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectBytes(length)\n    this.position += size ?? length\n    return value\n  },\n  readUint8() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint8()\n    this.position += 1\n    return value\n  },\n  readUint16() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint16()\n    this.position += 2\n    return value\n  },\n  readUint24() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint24()\n    this.position += 3\n    return value\n  },\n  readUint32() {\n    this.assertReadLimit()\n    this._touch()\n    const value = this.inspectUint32()\n    this.position += 4\n    return value\n  },\n  get remaining() {\n    return this.bytes.length - this.position\n  },\n  setPosition(position) {\n    const oldPosition = this.position\n    this.assertPosition(position)\n    this.position = position\n    return () => (this.position = oldPosition)\n  },\n  _touch() {\n    if (this.recursiveReadLimit === Number.POSITIVE_INFINITY) return\n    const count = this.getReadCount()\n    this.positionReadCount.set(this.position, count + 1)\n    if (count > 0) this.recursiveReadCount++\n  },\n}\n\n/** @internal */\nexport function create(\n  bytes: Bytes,\n  { recursiveReadLimit = 8_192 }: create.Config = {},\n): Cursor {\n  const cursor: Cursor = Object.create(staticCursor)\n  cursor.bytes = bytes\n  cursor.dataView = new DataView(\n    bytes.buffer,\n    bytes.byteOffset,\n    bytes.byteLength,\n  )\n  cursor.positionReadCount = new Map()\n  cursor.recursiveReadLimit = recursiveReadLimit\n  return cursor\n}\n\n/** @internal */\nexport declare namespace create {\n  type Config = { recursiveReadLimit?: number | undefined }\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/** @internal */\nexport class NegativeOffsetError extends Errors.BaseError {\n  override readonly name = 'Cursor.NegativeOffsetError'\n\n  constructor({ offset }: { offset: number }) {\n    super(`Offset \\`${offset}\\` cannot be negative.`)\n  }\n}\n\n/** @internal */\nexport class PositionOutOfBoundsError extends Errors.BaseError {\n  override readonly name = 'Cursor.PositionOutOfBoundsError'\n\n  constructor({ length, position }: { length: number; position: number }) {\n    super(\n      `Position \\`${position}\\` is out of bounds (\\`0 < position < ${length}\\`).`,\n    )\n  }\n}\n\n/** @internal */\nexport class RecursiveReadLimitExceededError extends Errors.BaseError {\n  override readonly name = 'Cursor.RecursiveReadLimitExceededError'\n\n  constructor({ count, limit }: { count: number; limit: number }) {\n    super(\n      `Recursive read limit of \\`${limit}\\` exceeded (recursive read count: \\`${count}\\`).`,\n    )\n  }\n}\n", "import type * as Address from './Address.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport type { Compute, Mutable, Undefined } from './internal/types.js'\nimport * as Rlp from './Rlp.js'\nimport * as Signature from './Signature.js'\n\n/** Root type for an EIP-7702 Authorization. */\nexport type Authorization<\n  signed extends boolean = boolean,\n  bigintType = bigint,\n  numberType = number,\n> = Compute<\n  {\n    /** Address of the contract to set as code for the Authority. */\n    address: Address.Address\n    /** Chain ID to authorize. */\n    chainId: numberType\n    /** Nonce of the Authority to authorize. */\n    nonce: bigintType\n  } & (signed extends true\n    ? Signature.Signature<true, bigintType, numberType>\n    : Undefined<Signature.Signature>)\n>\n\n/** RPC representation of an {@link ox#Authorization.Authorization}. */\nexport type Rpc = Authorization<true, Hex.Hex, Hex.Hex>\n\n/** List of {@link ox#Authorization.Authorization}. */\nexport type List<\n  signed extends boolean = boolean,\n  bigintType = bigint,\n  numberType = number,\n> = Compute<readonly Authorization<signed, bigintType, numberType>[]>\n\n/** RPC representation of an {@link ox#Authorization.List}. */\nexport type ListRpc = List<true, Hex.Hex, Hex.Hex>\n\n/** Signed representation of a list of {@link ox#Authorization.Authorization}. */\nexport type ListSigned<bigintType = bigint, numberType = number> = List<\n  true,\n  bigintType,\n  numberType\n>\n\n/** Signed representation of an {@link ox#Authorization.Authorization}. */\nexport type Signed<bigintType = bigint, numberType = number> = Authorization<\n  true,\n  bigintType,\n  numberType\n>\n\n/** Tuple representation of an {@link ox#Authorization.Authorization}. */\nexport type Tuple<signed extends boolean = boolean> = signed extends true\n  ? readonly [\n      chainId: Hex.Hex,\n      address: Hex.Hex,\n      nonce: Hex.Hex,\n      yParity: Hex.Hex,\n      r: Hex.Hex,\n      s: Hex.Hex,\n    ]\n  : readonly [chainId: Hex.Hex, address: Hex.Hex, nonce: Hex.Hex]\n\n/** Tuple representation of a signed {@link ox#Authorization.Authorization}. */\nexport type TupleSigned = Tuple<true>\n\n/** Tuple representation of a list of {@link ox#Authorization.Authorization}. */\nexport type TupleList<signed extends boolean = boolean> =\n  readonly Tuple<signed>[]\n\n/** Tuple representation of a list of signed {@link ox#Authorization.Authorization}. */\nexport type TupleListSigned = TupleList<true>\n\n/**\n * Converts an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization object into a typed {@link ox#Authorization.Authorization}.\n *\n * @example\n * An Authorization can be instantiated from an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple in object format.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 1,\n *   nonce: 69n,\n * })\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * A {@link ox#Signature.Signature} can be attached with the `signature` option. The example below demonstrates signing\n * an Authorization with {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * import { Authorization, Secp256k1 } from 'ox'\n *\n * const authorization = Authorization.from({\n *   address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n *   chainId: 1,\n *   nonce: 40n,\n * })\n *\n * const signature = Secp256k1.sign({\n *   payload: Authorization.getSignPayload(authorization),\n *   privateKey: '0x...',\n * })\n *\n * const authorization_signed = Authorization.from(authorization, { signature }) // [!code focus]\n * ```\n *\n * @param authorization - An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple in object format.\n * @param options - Authorization options.\n * @returns The {@link ox#Authorization.Authorization}.\n */\nexport function from<\n  const authorization extends Authorization | Rpc,\n  const signature extends Signature.Signature | undefined = undefined,\n>(\n  authorization: authorization | Authorization,\n  options: from.Options<signature> = {},\n): from.ReturnType<authorization, signature> {\n  if (typeof authorization.chainId === 'string')\n    return fromRpc(authorization) as never\n  return { ...authorization, ...options.signature } as never\n}\n\nexport declare namespace from {\n  type Options<\n    signature extends Signature.Signature | undefined =\n      | Signature.Signature\n      | undefined,\n  > = {\n    /** The {@link ox#Signature.Signature} to attach to the Authorization. */\n    signature?: signature | Signature.Signature | undefined\n  }\n\n  type ReturnType<\n    authorization extends Authorization | Rpc = Authorization,\n    signature extends Signature.Signature | undefined =\n      | Signature.Signature\n      | undefined,\n  > = Compute<\n    authorization extends Rpc\n      ? Signed\n      : authorization &\n          (signature extends Signature.Signature ? Readonly<signature> : {})\n  >\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Rpc} to an {@link ox#Authorization.Authorization}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromRpc({\n *   address: '0x0000000000000000000000000000000000000000',\n *   chainId: '0x1',\n *   nonce: '0x1',\n *   r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n *   s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n *   yParity: '0x0',\n * })\n * ```\n *\n * @param authorization - The RPC-formatted Authorization.\n * @returns A signed {@link ox#Authorization.Authorization}.\n */\nexport function fromRpc(authorization: Rpc): Signed {\n  const { address, chainId, nonce } = authorization\n  const signature = Signature.extract(authorization)!\n\n  return {\n    address,\n    chainId: Number(chainId),\n    nonce: BigInt(nonce),\n    ...signature,\n  }\n}\n\nexport declare namespace fromRpc {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.ListRpc} to an {@link ox#Authorization.List}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromRpcList([{\n *   address: '0x0000000000000000000000000000000000000000',\n *   chainId: '0x1',\n *   nonce: '0x1',\n *   r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n *   s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n *   yParity: '0x0',\n * }])\n * ```\n *\n * @param authorizationList - The RPC-formatted Authorization list.\n * @returns A signed {@link ox#Authorization.List}.\n */\nexport function fromRpcList(authorizationList: ListRpc): ListSigned {\n  return authorizationList.map(fromRpc)\n}\n\nexport declare namespace fromRpcList {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Tuple} to an {@link ox#Authorization.Authorization}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromTuple([\n *   '0x1',\n *   '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n *   '0x3'\n * ])\n * // @log: {\n * // @log:   address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log:   chainId: 1,\n * // @log:   nonce: 3n\n * // @log: }\n * ```\n *\n * @example\n * It is also possible to append a Signature tuple to the end of an Authorization tuple.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromTuple([\n *   '0x1',\n *   '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n *   '0x3',\n *   '0x1',\n *   '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90',\n *   '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064',\n * ])\n * // @log: {\n * // @log:   address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log:   chainId: 1,\n * // @log:   nonce: 3n\n * // @log:   r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log:   s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log:   yParity: 0,\n * // @log: }\n * ```\n *\n * @param tuple - The [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple.\n * @returns The {@link ox#Authorization.Authorization}.\n */\nexport function fromTuple<const tuple extends Tuple>(\n  tuple: tuple,\n): fromTuple.ReturnType<tuple> {\n  const [chainId, address, nonce, yParity, r, s] = tuple\n  let args = {\n    address,\n    chainId: chainId === '0x' ? 0 : Number(chainId),\n    nonce: nonce === '0x' ? 0n : BigInt(nonce),\n  }\n  if (yParity && r && s)\n    args = { ...args, ...Signature.fromTuple([yParity, r, s]) }\n  return from(args) as never\n}\n\nexport declare namespace fromTuple {\n  type ReturnType<authorization extends Tuple = Tuple> = Compute<\n    Authorization<authorization extends Tuple<true> ? true : false>\n  >\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.TupleList} to an {@link ox#Authorization.List}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromTupleList([\n *   ['0x1', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x3'],\n *   ['0x3', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x14'],\n * ])\n * // @log: [\n * // @log:   {\n * // @log:     address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log:     chainId: 1,\n * // @log:     nonce: 3n,\n * // @log:   },\n * // @log:   {\n * // @log:     address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log:     chainId: 3,\n * // @log:     nonce: 20n,\n * // @log:   },\n * // @log: ]\n * ```\n *\n * @example\n * It is also possible to append a Signature tuple to the end of an Authorization tuple.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromTupleList([\n *   ['0x1', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x3', '0x1', '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90', '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'],\n *   ['0x3', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x14', '0x1', '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90', '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'],\n * ])\n * // @log: [\n * // @log:   {\n * // @log:     address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log:     chainId: 1,\n * // @log:     nonce: 3n,\n * // @log:     r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log:     s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log:     yParity: 0,\n * // @log:   },\n * // @log:   {\n * // @log:     address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log:     chainId: 3,\n * // @log:     nonce: 20n,\n * // @log:     r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log:     s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log:     yParity: 0,\n * // @log:   },\n * // @log: ]\n * ```\n *\n * @param tupleList - The [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple list.\n * @returns An {@link ox#Authorization.List}.\n */\nexport function fromTupleList<const tupleList extends TupleList>(\n  tupleList: tupleList,\n): fromTupleList.ReturnType<tupleList> {\n  const list: Mutable<List> = []\n  for (const tuple of tupleList) list.push(fromTuple(tuple))\n  return list as never\n}\n\nexport declare namespace fromTupleList {\n  type ReturnType<tupleList extends TupleList> = Compute<\n    TupleList<tupleList extends TupleList<true> ? true : false>\n  >\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Computes the sign payload for an {@link ox#Authorization.Authorization} in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n *\n * @example\n * The example below demonstrates computing the sign payload for an {@link ox#Authorization.Authorization}. This payload\n * can then be passed to signing functions like {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * import { Authorization, Secp256k1 } from 'ox'\n *\n * const authorization = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 1,\n *   nonce: 69n,\n * })\n *\n * const payload = Authorization.getSignPayload(authorization) // [!code focus]\n *\n * const signature = Secp256k1.sign({\n *   payload,\n *   privateKey: '0x...',\n * })\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns The sign payload.\n */\nexport function getSignPayload(authorization: Authorization): Hex.Hex {\n  return hash(authorization, { presign: true })\n}\n\nexport declare namespace getSignPayload {\n  type ErrorType = hash.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Computes the hash for an {@link ox#Authorization.Authorization} in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 1,\n *   nonce: 69n,\n * })\n *\n * const hash = Authorization.hash(authorization) // [!code focus]\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns The hash.\n */\nexport function hash(\n  authorization: Authorization,\n  options: hash.Options = {},\n): Hex.Hex {\n  const { presign } = options\n  return Hash.keccak256(\n    Hex.concat(\n      '0x05',\n      Rlp.fromHex(\n        toTuple(\n          presign\n            ? {\n                address: authorization.address,\n                chainId: authorization.chainId,\n                nonce: authorization.nonce,\n              }\n            : authorization,\n        ),\n      ),\n    ),\n  )\n}\n\nexport declare namespace hash {\n  type ErrorType =\n    | toTuple.ErrorType\n    | Hash.keccak256.ErrorType\n    | Hex.concat.ErrorType\n    | Rlp.fromHex.ErrorType\n    | Errors.GlobalErrorType\n\n  type Options = {\n    /** Whether to hash this authorization for signing. @default false */\n    presign?: boolean | undefined\n  }\n}\n\n/**\n * Converts an {@link ox#Authorization.Authorization} to an {@link ox#Authorization.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.toRpc({\n *   address: '0x0000000000000000000000000000000000000000',\n *   chainId: 1,\n *   nonce: 1n,\n *   r: 44944627813007772897391531230081695102703289123332187696115181104739239197517n,\n *   s: 36528503505192438307355164441104001310566505351980369085208178712678799181120n,\n *   yParity: 0,\n * })\n * ```\n *\n * @param authorization - An Authorization.\n * @returns An RPC-formatted Authorization.\n */\nexport function toRpc(authorization: Signed): Rpc {\n  const { address, chainId, nonce, ...signature } = authorization\n\n  return {\n    address,\n    chainId: Hex.fromNumber(chainId),\n    nonce: Hex.fromNumber(nonce),\n    ...Signature.toRpc(signature),\n  }\n}\n\nexport declare namespace toRpc {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.List} to an {@link ox#Authorization.ListRpc}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.toRpcList([{\n *   address: '0x0000000000000000000000000000000000000000',\n *   chainId: 1,\n *   nonce: 1n,\n *   r: 44944627813007772897391531230081695102703289123332187696115181104739239197517n,\n *   s: 36528503505192438307355164441104001310566505351980369085208178712678799181120n,\n *   yParity: 0,\n * }])\n * ```\n *\n * @param authorizationList - An Authorization List.\n * @returns An RPC-formatted Authorization List.\n */\nexport function toRpcList(authorizationList: ListSigned): ListRpc {\n  return authorizationList.map(toRpc)\n}\n\nexport declare namespace toRpcList {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Authorization} to an {@link ox#Authorization.Tuple}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 1,\n *   nonce: 69n,\n * })\n *\n * const tuple = Authorization.toTuple(authorization) // [!code focus]\n * // @log: [\n * // @log:   address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log:   chainId: 1,\n * // @log:   nonce: 69n,\n * // @log: ]\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple.\n */\nexport function toTuple<const authorization extends Authorization>(\n  authorization: authorization,\n): toTuple.ReturnType<authorization> {\n  const { address, chainId, nonce } = authorization\n  const signature = Signature.extract(authorization)\n  return [\n    chainId ? Hex.fromNumber(chainId) : '0x',\n    address,\n    nonce ? Hex.fromNumber(nonce) : '0x',\n    ...(signature ? Signature.toTuple(signature) : []),\n  ] as never\n}\n\nexport declare namespace toTuple {\n  type ReturnType<authorization extends Authorization = Authorization> =\n    Compute<Tuple<authorization extends Signature.Signature ? true : false>>\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.List} to an {@link ox#Authorization.TupleList}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization_1 = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 1,\n *   nonce: 69n,\n * })\n * const authorization_2 = Authorization.from({\n *   address: '0x1234567890abcdef1234567890abcdef12345678',\n *   chainId: 3,\n *   nonce: 20n,\n * })\n *\n * const tuple = Authorization.toTupleList([authorization_1, authorization_2]) // [!code focus]\n * // @log: [\n * // @log:   [\n * // @log:     address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log:     chainId: 1,\n * // @log:     nonce: 69n,\n * // @log:   ],\n * // @log:   [\n * // @log:     address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log:     chainId: 3,\n * // @log:     nonce: 20n,\n * // @log:   ],\n * // @log: ]\n * ```\n *\n * @param list - An {@link ox#Authorization.List}.\n * @returns An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple list.\n */\nexport function toTupleList<\n  const list extends\n    | readonly Authorization<true>[]\n    | readonly Authorization<false>[],\n>(list?: list | undefined): toTupleList.ReturnType<list> {\n  if (!list || list.length === 0) return []\n\n  const tupleList: Mutable<TupleList> = []\n  for (const authorization of list) tupleList.push(toTuple(authorization))\n\n  return tupleList as never\n}\n\nexport declare namespace toTupleList {\n  type ReturnType<\n    list extends\n      | readonly Authorization<true>[]\n      | readonly Authorization<false>[],\n  > = Compute<\n    TupleList<list extends readonly Authorization<true>[] ? true : false>\n  >\n\n  type ErrorType = Errors.GlobalErrorType\n}\n", "import * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Cursor from './internal/cursor.js'\nimport type { ExactPartial, RecursiveArray } from './internal/types.js'\n\n/**\n * Decodes a Recursive-Length Prefix (RLP) value into a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n * Rlp.toBytes('0x8b68656c6c6f20776f726c64')\n * // Uint8Array([139, 104, 101, 108, 108, 111,  32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param value - The value to decode.\n * @returns The decoded {@link ox#Bytes.Bytes} value.\n */\nexport function toBytes(\n  value: Bytes.Bytes | Hex.Hex,\n): RecursiveArray<Bytes.Bytes> {\n  return to(value, 'Bytes')\n}\n\nexport declare namespace toBytes {\n  type ErrorType = to.ErrorType\n}\n\n/**\n * Decodes a Recursive-Length Prefix (RLP) value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n * Rlp.toHex('0x8b68656c6c6f20776f726c64')\n * // 0x68656c6c6f20776f726c64\n * ```\n *\n * @param value - The value to decode.\n * @returns The decoded {@link ox#Hex.Hex} value.\n */\nexport function toHex(value: Bytes.Bytes | Hex.Hex): RecursiveArray<Hex.Hex> {\n  return to(value, 'Hex')\n}\n\nexport declare namespace toHex {\n  type ErrorType = to.ErrorType\n}\n\n/////////////////////////////////////////////////////////////////////////////////\n// Internal\n/////////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport function to<\n  value extends Bytes.Bytes | Hex.Hex,\n  to extends 'Hex' | 'Bytes',\n>(value: value, to: to | 'Hex' | 'Bytes'): to.ReturnType<to> {\n  const to_ = to ?? (typeof value === 'string' ? 'Hex' : 'Bytes')\n\n  const bytes = (() => {\n    if (typeof value === 'string') {\n      if (value.length > 3 && value.length % 2 !== 0)\n        throw new Hex.InvalidLengthError(value)\n      return Bytes.fromHex(value)\n    }\n    return value as Bytes.Bytes\n  })()\n\n  const cursor = Cursor.create(bytes, {\n    recursiveReadLimit: Number.POSITIVE_INFINITY,\n  })\n  const result = decodeRlpCursor(cursor, to_)\n\n  return result as to.ReturnType<to>\n}\n\n/** @internal */\nexport declare namespace to {\n  type ReturnType<to extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n    | (to extends 'Bytes' ? RecursiveArray<Bytes.Bytes> : never)\n    | (to extends 'Hex' ? RecursiveArray<Hex.Hex> : never)\n\n  type ErrorType =\n    | Bytes.fromHex.ErrorType\n    | decodeRlpCursor.ErrorType\n    | Cursor.create.ErrorType\n    | Hex.InvalidLengthError\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\n\n/** @internal */\nexport function decodeRlpCursor<to extends 'Hex' | 'Bytes' = 'Hex'>(\n  cursor: Cursor.Cursor,\n  to: to | 'Hex' | 'Bytes' | undefined = 'Hex',\n): decodeRlpCursor.ReturnType<to> {\n  if (cursor.bytes.length === 0)\n    return (\n      to === 'Hex' ? Hex.fromBytes(cursor.bytes) : cursor.bytes\n    ) as decodeRlpCursor.ReturnType<to>\n\n  const prefix = cursor.readByte()\n  if (prefix < 0x80) cursor.decrementPosition(1)\n\n  // bytes\n  if (prefix < 0xc0) {\n    const length = readLength(cursor, prefix, 0x80)\n    const bytes = cursor.readBytes(length)\n    return (\n      to === 'Hex' ? Hex.fromBytes(bytes) : bytes\n    ) as decodeRlpCursor.ReturnType<to>\n  }\n\n  // list\n  const length = readLength(cursor, prefix, 0xc0)\n  return readList(cursor, length, to) as {} as decodeRlpCursor.ReturnType<to>\n}\n\n/** @internal */\nexport declare namespace decodeRlpCursor {\n  type ReturnType<to extends 'Hex' | 'Bytes' = 'Hex'> = to.ReturnType<to>\n  type ErrorType =\n    | Hex.fromBytes.ErrorType\n    | readLength.ErrorType\n    | readList.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function readLength(\n  cursor: Cursor.Cursor,\n  prefix: number,\n  offset: number,\n) {\n  if (offset === 0x80 && prefix < 0x80) return 1\n  if (prefix <= offset + 55) return prefix - offset\n  if (prefix === offset + 55 + 1) return cursor.readUint8()\n  if (prefix === offset + 55 + 2) return cursor.readUint16()\n  if (prefix === offset + 55 + 3) return cursor.readUint24()\n  if (prefix === offset + 55 + 4) return cursor.readUint32()\n  throw new Errors.BaseError('Invalid RLP prefix')\n}\n\n/** @internal */\nexport declare namespace readLength {\n  type ErrorType = Errors.BaseError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function readList<to extends 'Hex' | 'Bytes'>(\n  cursor: Cursor.Cursor,\n  length: number,\n  to: to | 'Hex' | 'Bytes',\n) {\n  const position = cursor.position\n  const value: decodeRlpCursor.ReturnType<to>[] = []\n  while (cursor.position - position < length)\n    value.push(decodeRlpCursor(cursor, to))\n  return value\n}\n\n/** @internal */\nexport declare namespace readList {\n  type ErrorType = Errors.GlobalErrorType\n}\n\ntype Encodable = {\n  length: number\n  encode(cursor: Cursor.Cursor): void\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Rlp } from 'ox'\n *\n * Rlp.from('0x68656c6c6f20776f726c64', { as: 'Hex' })\n * // @log: 0x8b68656c6c6f20776f726c64\n *\n * Rlp.from(Bytes.from([139, 104, 101, 108, 108, 111,  32, 119, 111, 114, 108, 100]), { as: 'Bytes' })\n * // @log: Uint8Array([104, 101, 108, 108, 111,  32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function from<as extends 'Hex' | 'Bytes'>(\n  value: RecursiveArray<Bytes.Bytes> | RecursiveArray<Hex.Hex>,\n  options: from.Options<as>,\n): from.ReturnType<as> {\n  const { as } = options\n\n  const encodable = getEncodable(value)\n  const cursor = Cursor.create(new Uint8Array(encodable.length))\n  encodable.encode(cursor)\n\n  if (as === 'Hex') return Hex.fromBytes(cursor.bytes) as from.ReturnType<as>\n  return cursor.bytes as from.ReturnType<as>\n}\n\nexport declare namespace from {\n  type Options<as extends 'Hex' | 'Bytes'> = {\n    /** The type to convert the RLP value to. */\n    as: as | 'Hex' | 'Bytes'\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType =\n    | Cursor.create.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Bytes.fromHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Rlp } from 'ox'\n *\n * Rlp.fromBytes(Bytes.from([139, 104, 101, 108, 108, 111,  32, 119, 111, 114, 108, 100]))\n * // @log: Uint8Array([104, 101, 108, 108, 111,  32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function fromBytes<as extends 'Hex' | 'Bytes' = 'Bytes'>(\n  bytes: RecursiveArray<Bytes.Bytes>,\n  options: fromBytes.Options<as> = {},\n): fromBytes.ReturnType<as> {\n  const { as = 'Bytes' } = options\n  return from(bytes, { as }) as never\n}\n\nexport declare namespace fromBytes {\n  type Options<as extends 'Hex' | 'Bytes' = 'Bytes'> = ExactPartial<\n    from.Options<as>\n  >\n\n  type ReturnType<as extends 'Hex' | 'Bytes' = 'Bytes'> = from.ReturnType<as>\n\n  type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Hex.Hex} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n *\n * Rlp.fromHex('0x68656c6c6f20776f726c64')\n * // @log: 0x8b68656c6c6f20776f726c64\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function fromHex<as extends 'Hex' | 'Bytes' = 'Hex'>(\n  hex: RecursiveArray<Hex.Hex>,\n  options: fromHex.Options<as> = {},\n): fromHex.ReturnType<as> {\n  const { as = 'Hex' } = options\n  return from(hex, { as }) as never\n}\n\nexport declare namespace fromHex {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = ExactPartial<\n    from.Options<as>\n  >\n\n  type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex'> = from.ReturnType<as>\n\n  type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/////////////////////////////////////////////////////////////////////////////////\n// Internal\n/////////////////////////////////////////////////////////////////////////////////\n\nfunction getEncodable(\n  bytes: RecursiveArray<Bytes.Bytes> | RecursiveArray<Hex.Hex>,\n): Encodable {\n  if (Array.isArray(bytes))\n    return getEncodableList(bytes.map((x) => getEncodable(x)))\n  return getEncodableBytes(bytes as any)\n}\n\nfunction getEncodableList(list: Encodable[]): Encodable {\n  const bodyLength = list.reduce((acc, x) => acc + x.length, 0)\n\n  const sizeOfBodyLength = getSizeOfLength(bodyLength)\n  const length = (() => {\n    if (bodyLength <= 55) return 1 + bodyLength\n    return 1 + sizeOfBodyLength + bodyLength\n  })()\n\n  return {\n    length,\n    encode(cursor: Cursor.Cursor) {\n      if (bodyLength <= 55) {\n        cursor.pushByte(0xc0 + bodyLength)\n      } else {\n        cursor.pushByte(0xc0 + 55 + sizeOfBodyLength)\n        if (sizeOfBodyLength === 1) cursor.pushUint8(bodyLength)\n        else if (sizeOfBodyLength === 2) cursor.pushUint16(bodyLength)\n        else if (sizeOfBodyLength === 3) cursor.pushUint24(bodyLength)\n        else cursor.pushUint32(bodyLength)\n      }\n      for (const { encode } of list) {\n        encode(cursor)\n      }\n    },\n  }\n}\n\nfunction getEncodableBytes(bytesOrHex: Bytes.Bytes | Hex.Hex): Encodable {\n  const bytes =\n    typeof bytesOrHex === 'string' ? Bytes.fromHex(bytesOrHex) : bytesOrHex\n\n  const sizeOfBytesLength = getSizeOfLength(bytes.length)\n  const length = (() => {\n    if (bytes.length === 1 && bytes[0]! < 0x80) return 1\n    if (bytes.length <= 55) return 1 + bytes.length\n    return 1 + sizeOfBytesLength + bytes.length\n  })()\n\n  return {\n    length,\n    encode(cursor: Cursor.Cursor) {\n      if (bytes.length === 1 && bytes[0]! < 0x80) {\n        cursor.pushBytes(bytes)\n      } else if (bytes.length <= 55) {\n        cursor.pushByte(0x80 + bytes.length)\n        cursor.pushBytes(bytes)\n      } else {\n        cursor.pushByte(0x80 + 55 + sizeOfBytesLength)\n        if (sizeOfBytesLength === 1) cursor.pushUint8(bytes.length)\n        else if (sizeOfBytesLength === 2) cursor.pushUint16(bytes.length)\n        else if (sizeOfBytesLength === 3) cursor.pushUint24(bytes.length)\n        else cursor.pushUint32(bytes.length)\n        cursor.pushBytes(bytes)\n      }\n    },\n  }\n}\n\nfunction getSizeOfLength(length: number) {\n  if (length <= 0xff) return 1\n  if (length <= 0xff_ff) return 2\n  if (length <= 0xff_ff_ff) return 3\n  if (length <= 0xff_ff_ff_ff) return 4\n  throw new Errors.BaseError('Length is too large.')\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type { Compute, ExactPartial, OneOf } from './internal/types.js'\nimport * as Json from './Json.js'\nimport * as Solidity from './Solidity.js'\n\n/** Root type for an ECDSA signature. */\nexport type Signature<\n  recovered extends boolean = true,\n  bigintType = bigint,\n  numberType = number,\n> = Compute<\n  recovered extends true\n    ? {\n        r: bigintType\n        s: bigintType\n        yParity: numberType\n      }\n    : {\n        r: bigintType\n        s: bigintType\n        yParity?: numberType | undefined\n      }\n>\n\n/** RPC-formatted ECDSA signature. */\nexport type Rpc<recovered extends boolean = true> = Signature<\n  recovered,\n  Hex.Hex,\n  Hex.Hex\n>\n\n/** (Legacy) ECDSA signature. */\nexport type Legacy<bigintType = bigint, numberType = number> = {\n  r: bigintType\n  s: bigintType\n  v: numberType\n}\n\n/** RPC-formatted (Legacy) ECDSA signature. */\nexport type LegacyRpc = Legacy<Hex.Hex, Hex.Hex>\n\nexport type Tuple = readonly [yParity: Hex.Hex, r: Hex.Hex, s: Hex.Hex]\n\n/**\n * Asserts that a Signature is valid.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.assert({\n *   r: -49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1,\n * })\n * // @error: InvalidSignatureRError:\n * // @error: Value `-549...n` is an invalid r value.\n * // @error: r must be a positive integer less than 2^256.\n * ```\n *\n * @param signature - The signature object to assert.\n */\nexport function assert(\n  signature: ExactPartial<Signature>,\n  options: assert.Options = {},\n): asserts signature is Signature {\n  const { recovered } = options\n  if (typeof signature.r === 'undefined')\n    throw new MissingPropertiesError({ signature })\n  if (typeof signature.s === 'undefined')\n    throw new MissingPropertiesError({ signature })\n  if (recovered && typeof signature.yParity === 'undefined')\n    throw new MissingPropertiesError({ signature })\n  if (signature.r < 0n || signature.r > Solidity.maxUint256)\n    throw new InvalidRError({ value: signature.r })\n  if (signature.s < 0n || signature.s > Solidity.maxUint256)\n    throw new InvalidSError({ value: signature.s })\n  if (\n    typeof signature.yParity === 'number' &&\n    signature.yParity !== 0 &&\n    signature.yParity !== 1\n  )\n    throw new InvalidYParityError({ value: signature.yParity })\n}\n\nexport declare namespace assert {\n  type Options = {\n    /** Whether or not the signature should be recovered (contain `yParity`). */\n    recovered?: boolean\n  }\n\n  type ErrorType =\n    | MissingPropertiesError\n    | InvalidRError\n    | InvalidSError\n    | InvalidYParityError\n    | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#Bytes.Bytes} signature into a structured {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * Signature.fromBytes(new Uint8Array([128, 3, 131, ...]))\n * // @log: { r: 5231...n, s: 3522...n, yParity: 0 }\n * ```\n *\n * @param signature - The serialized signature.\n * @returns The deserialized {@link ox#Signature.Signature}.\n */\nexport function fromBytes(signature: Bytes.Bytes): Signature {\n  return fromHex(Hex.fromBytes(signature))\n}\n\nexport declare namespace fromBytes {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#Hex.Hex} signature into a structured {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.fromHex('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c')\n * // @log: { r: 5231...n, s: 3522...n, yParity: 0 }\n * ```\n *\n * @param serialized - The serialized signature.\n * @returns The deserialized {@link ox#Signature.Signature}.\n */\nexport function fromHex(signature: Hex.Hex): Signature {\n  if (signature.length !== 130 && signature.length !== 132)\n    throw new InvalidSerializedSizeError({ signature })\n\n  const r = BigInt(Hex.slice(signature, 0, 32))\n  const s = BigInt(Hex.slice(signature, 32, 64))\n\n  const yParity = (() => {\n    const yParity = Number(`0x${signature.slice(130)}`)\n    if (Number.isNaN(yParity)) return undefined\n    try {\n      return vToYParity(yParity)\n    } catch {\n      throw new InvalidYParityError({ value: yParity })\n    }\n  })()\n\n  if (typeof yParity === 'undefined')\n    return {\n      r,\n      s,\n    } as never\n  return {\n    r,\n    s,\n    yParity,\n  } as never\n}\n\nexport declare namespace fromHex {\n  type ErrorType =\n    | Hex.from.ErrorType\n    | InvalidSerializedSizeError\n    | Errors.GlobalErrorType\n}\n\n/**\n * Extracts a {@link ox#Signature.Signature} from an arbitrary object that may include signature properties.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * Signature.extract({\n *   baz: 'barry',\n *   foo: 'bar',\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1,\n *   zebra: 'stripes',\n * })\n * // @log: {\n * // @log:   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log:   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log:   yParity: 1\n * // @log: }\n * ```\n *\n * @param value - The arbitrary object to extract the signature from.\n * @returns The extracted {@link ox#Signature.Signature}.\n */\nexport function extract(value: extract.Value): Signature | undefined {\n  if (typeof value.r === 'undefined') return undefined\n  if (typeof value.s === 'undefined') return undefined\n  return from(value as any)\n}\n\nexport declare namespace extract {\n  type Value = {\n    r?: bigint | Hex.Hex | undefined\n    s?: bigint | Hex.Hex | undefined\n    yParity?: number | Hex.Hex | undefined\n    v?: number | Hex.Hex | undefined\n  }\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a typed {@link ox#Signature.Signature} object from a {@link ox#Signature.Signature}, {@link ox#Signature.Legacy}, {@link ox#Bytes.Bytes}, or {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from({\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1,\n * })\n * // @log: {\n * // @log:   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log:   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log:   yParity: 1\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db801')\n * // @log: {\n * // @log:   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log:   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log:   yParity: 1,\n * // @log: }\n * ```\n *\n * @example\n * ### From Legacy\n *\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from({\n *   r: 47323457007453657207889730243826965761922296599680473886588287015755652701072n,\n *   s: 57228803202727131502949358313456071280488184270258293674242124340113824882788n,\n *   v: 27,\n * })\n * // @log: {\n * // @log:   r: 47323457007453657207889730243826965761922296599680473886588287015755652701072n,\n * // @log:   s: 57228803202727131502949358313456071280488184270258293674242124340113824882788n,\n * // @log:   yParity: 0\n * // @log: }\n * ```\n *\n * @param signature - The signature value to instantiate.\n * @returns The instantiated {@link ox#Signature.Signature}.\n */\nexport function from<\n  const signature extends\n    | OneOf<Signature<boolean> | Rpc<boolean> | Legacy | LegacyRpc>\n    | Hex.Hex\n    | Bytes.Bytes,\n>(\n  signature:\n    | signature\n    | OneOf<Signature<boolean> | Rpc<boolean> | Legacy | LegacyRpc>\n    | Hex.Hex\n    | Bytes.Bytes,\n): from.ReturnType<signature> {\n  const signature_ = (() => {\n    if (typeof signature === 'string') return fromHex(signature)\n    if (signature instanceof Uint8Array) return fromBytes(signature)\n    if (typeof signature.r === 'string') return fromRpc(signature)\n    if (signature.v) return fromLegacy(signature)\n    return {\n      r: signature.r,\n      s: signature.s,\n      ...(typeof signature.yParity !== 'undefined'\n        ? { yParity: signature.yParity }\n        : {}),\n    }\n  })()\n  assert(signature_)\n  return signature_ as never\n}\n\nexport declare namespace from {\n  type ReturnType<\n    signature extends\n      | OneOf<Signature<boolean> | Rpc<boolean> | Legacy | LegacyRpc>\n      | Hex.Hex\n      | Bytes.Bytes,\n  > = signature extends Signature<boolean> & { v?: undefined }\n    ? signature\n    : Signature\n\n  type ErrorType =\n    | assert.ErrorType\n    | fromBytes.ErrorType\n    | fromHex.ErrorType\n    | vToYParity.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Converts a DER-encoded signature to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromDerBytes(new Uint8Array([132, 51, 23, ...]))\n * // @log: {\n * // @log:   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log:   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: }\n * ```\n *\n * @param signature - The DER-encoded signature to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromDerBytes(signature: Bytes.Bytes): Signature<false> {\n  return fromDerHex(Hex.fromBytes(signature))\n}\n\nexport declare namespace fromDerBytes {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a DER-encoded signature to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromDerHex('0x304402206e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf02204a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8')\n * // @log: {\n * // @log:   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log:   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: }\n * ```\n *\n * @param signature - The DER-encoded signature to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromDerHex(signature: Hex.Hex): Signature<false> {\n  const { r, s } = secp256k1.Signature.fromDER(Hex.from(signature).slice(2))\n  return { r, s }\n}\n\nexport declare namespace fromDerHex {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Legacy} into a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const legacy = Signature.fromLegacy({ r: 1n, s: 2n, v: 28 })\n * // @log: { r: 1n, s: 2n, yParity: 1 }\n * ```\n *\n * @param signature - The {@link ox#Signature.Legacy} to convert.\n * @returns The converted {@link ox#Signature.Signature}.\n */\nexport function fromLegacy(signature: Legacy): Signature {\n  return {\n    r: signature.r,\n    s: signature.s,\n    yParity: vToYParity(signature.v),\n  }\n}\n\nexport declare namespace fromLegacy {\n  type ErrorType = vToYParity.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Rpc} into a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromRpc({\n *   r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n *   s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n *   yParity: '0x0',\n * })\n * ```\n *\n * @param signature - The {@link ox#Signature.Rpc} to convert.\n * @returns The converted {@link ox#Signature.Signature}.\n */\nexport function fromRpc(signature: {\n  r: Hex.Hex\n  s: Hex.Hex\n  yParity?: Hex.Hex | undefined\n  v?: Hex.Hex | undefined\n}): Signature {\n  const yParity = (() => {\n    const v = signature.v ? Number(signature.v) : undefined\n    let yParity = signature.yParity ? Number(signature.yParity) : undefined\n    if (typeof v === 'number' && typeof yParity !== 'number')\n      yParity = vToYParity(v)\n    if (typeof yParity !== 'number')\n      throw new InvalidYParityError({ value: signature.yParity })\n    return yParity\n  })()\n\n  return {\n    r: BigInt(signature.r),\n    s: BigInt(signature.s),\n    yParity,\n  }\n}\n\nexport declare namespace fromRpc {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Tuple} to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromTuple(['0x01', '0x7b', '0x1c8'])\n * // @log: {\n * // @log:   r: 123n,\n * // @log:   s: 456n,\n * // @log:   yParity: 1,\n * // @log: }\n * ```\n *\n * @param tuple - The {@link ox#Signature.Tuple} to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromTuple(tuple: Tuple): Signature {\n  const [yParity, r, s] = tuple\n  return from({\n    r: r === '0x' ? 0n : BigInt(r),\n    s: s === '0x' ? 0n : BigInt(s),\n    yParity: yParity === '0x' ? 0 : Number(yParity),\n  })\n}\n\nexport declare namespace fromTuple {\n  type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#Signature.Signature} to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toBytes({\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1\n * })\n * // @log: Uint8Array [102, 16, 10, ...]\n * ```\n *\n * @param signature - The signature to serialize.\n * @returns The serialized signature.\n */\nexport function toBytes(signature: Signature<boolean>): Bytes.Bytes {\n  return Bytes.fromHex(toHex(signature))\n}\n\nexport declare namespace toBytes {\n  type ErrorType =\n    | toHex.ErrorType\n    | Bytes.fromHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#Signature.Signature} to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toHex({\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1\n * })\n * // @log: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c'\n * ```\n *\n * @param signature - The signature to serialize.\n * @returns The serialized signature.\n */\nexport function toHex(signature: Signature<boolean>): Hex.Hex {\n  assert(signature)\n\n  const r = signature.r\n  const s = signature.s\n\n  const signature_ = Hex.concat(\n    Hex.fromNumber(r, { size: 32 }),\n    Hex.fromNumber(s, { size: 32 }),\n    // If the signature is recovered, add the recovery byte to the signature.\n    typeof signature.yParity === 'number'\n      ? Hex.fromNumber(yParityToV(signature.yParity), { size: 1 })\n      : '0x',\n  )\n\n  return signature_\n}\n\nexport declare namespace toHex {\n  type ErrorType =\n    | Hex.concat.ErrorType\n    | Hex.fromNumber.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} to DER-encoded format.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.from({\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * })\n *\n * const signature_der = Signature.toDerBytes(signature)\n * // @log: Uint8Array [132, 51, 23, ...]\n * ```\n *\n * @param signature - The signature to convert.\n * @returns The DER-encoded signature.\n */\nexport function toDerBytes(signature: Signature<boolean>): Bytes.Bytes {\n  const sig = new secp256k1.Signature(signature.r, signature.s)\n  return sig.toDERRawBytes()\n}\n\nexport declare namespace toDerBytes {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} to DER-encoded format.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.from({\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * })\n *\n * const signature_der = Signature.toDerHex(signature)\n * // @log: '0x304402206e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf02204a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8'\n * ```\n *\n * @param signature - The signature to convert.\n * @returns The DER-encoded signature.\n */\nexport function toDerHex(signature: Signature<boolean>): Hex.Hex {\n  const sig = new secp256k1.Signature(signature.r, signature.s)\n  return `0x${sig.toDERHex()}`\n}\n\nexport declare namespace toDerHex {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} into a {@link ox#Signature.Legacy}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const legacy = Signature.toLegacy({ r: 1n, s: 2n, yParity: 1 })\n * // @log: { r: 1n, s: 2n, v: 28 }\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The converted {@link ox#Signature.Legacy}.\n */\nexport function toLegacy(signature: Signature): Legacy {\n  return {\n    r: signature.r,\n    s: signature.s,\n    v: yParityToV(signature.yParity),\n  }\n}\n\nexport declare namespace toLegacy {\n  type ErrorType = yParityToV.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} into a {@link ox#Signature.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toRpc({\n *   r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1\n * })\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The converted {@link ox#Signature.Rpc}.\n */\nexport function toRpc(signature: Signature): Rpc {\n  const { r, s, yParity } = signature\n  return {\n    r: Hex.fromNumber(r, { size: 32 }),\n    s: Hex.fromNumber(s, { size: 32 }),\n    yParity: yParity === 0 ? '0x0' : '0x1',\n  }\n}\n\nexport declare namespace toRpc {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} to a serialized {@link ox#Signature.Tuple} to be used for signatures in Transaction Envelopes, EIP-7702 Authorization Lists, etc.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signatureTuple = Signature.toTuple({\n *   r: 123n,\n *   s: 456n,\n *   yParity: 1,\n * })\n * // @log: [yParity: '0x01', r: '0x7b', s: '0x1c8']\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The {@link ox#Signature.Tuple}.\n */\nexport function toTuple(signature: Signature): Tuple {\n  const { r, s, yParity } = signature\n\n  return [\n    yParity ? '0x01' : '0x',\n    r === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(r!)),\n    s === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(s!)),\n  ] as const\n}\n\nexport declare namespace toTuple {\n  type ErrorType =\n    | Hex.trimLeft.ErrorType\n    | Hex.fromNumber.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Validates a Signature. Returns `true` if the signature is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const valid = Signature.validate({\n *   r: -49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n *   s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n *   yParity: 1,\n * })\n * // @log: false\n * ```\n *\n * @param signature - The signature object to assert.\n */\nexport function validate(\n  signature: ExactPartial<Signature>,\n  options: validate.Options = {},\n): boolean {\n  try {\n    assert(signature, options)\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  type Options = {\n    /** Whether or not the signature should be recovered (contain `yParity`). */\n    recovered?: boolean\n  }\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a ECDSA `v` value to a `yParity` value.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const yParity = Signature.vToYParity(28)\n * // @log: 1\n * ```\n *\n * @param v - The ECDSA `v` value to convert.\n * @returns The `yParity` value.\n */\nexport function vToYParity(v: number): Signature['yParity'] {\n  if (v === 0 || v === 27) return 0\n  if (v === 1 || v === 28) return 1\n  if (v >= 35) return v % 2 === 0 ? 1 : 0\n  throw new InvalidVError({ value: v })\n}\n\nexport declare namespace vToYParity {\n  type ErrorType = InvalidVError | Errors.GlobalErrorType\n}\n\n/**\n * Converts a ECDSA `v` value to a `yParity` value.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const v = Signature.yParityToV(1)\n * // @log: 28\n * ```\n *\n * @param yParity - The ECDSA `yParity` value to convert.\n * @returns The `v` value.\n */\nexport function yParityToV(yParity: number): number {\n  if (yParity === 0) return 27\n  if (yParity === 1) return 28\n  throw new InvalidYParityError({ value: yParity })\n}\n\nexport declare namespace yParityToV {\n  type ErrorType = InvalidVError | Errors.GlobalErrorType\n}\n\n/** Thrown when the serialized signature is of an invalid size. */\nexport class InvalidSerializedSizeError extends Errors.BaseError {\n  override readonly name = 'Signature.InvalidSerializedSizeError'\n\n  constructor({ signature }: { signature: Hex.Hex | Bytes.Bytes }) {\n    super(`Value \\`${signature}\\` is an invalid signature size.`, {\n      metaMessages: [\n        'Expected: 64 bytes or 65 bytes.',\n        `Received ${Hex.size(Hex.from(signature))} bytes.`,\n      ],\n    })\n  }\n}\n\n/** Thrown when the signature is missing either an `r`, `s`, or `yParity` property. */\nexport class MissingPropertiesError extends Errors.BaseError {\n  override readonly name = 'Signature.MissingPropertiesError'\n\n  constructor({ signature }: { signature: unknown }) {\n    super(\n      `Signature \\`${Json.stringify(signature)}\\` is missing either an \\`r\\`, \\`s\\`, or \\`yParity\\` property.`,\n    )\n  }\n}\n\n/** Thrown when the signature has an invalid `r` value. */\nexport class InvalidRError extends Errors.BaseError {\n  override readonly name = 'Signature.InvalidRError'\n\n  constructor({ value }: { value: unknown }) {\n    super(\n      `Value \\`${value}\\` is an invalid r value. r must be a positive integer less than 2^256.`,\n    )\n  }\n}\n\n/** Thrown when the signature has an invalid `s` value. */\nexport class InvalidSError extends Errors.BaseError {\n  override readonly name = 'Signature.InvalidSError'\n\n  constructor({ value }: { value: unknown }) {\n    super(\n      `Value \\`${value}\\` is an invalid s value. s must be a positive integer less than 2^256.`,\n    )\n  }\n}\n\n/** Thrown when the signature has an invalid `yParity` value. */\nexport class InvalidYParityError extends Errors.BaseError {\n  override readonly name = 'Signature.InvalidYParityError'\n\n  constructor({ value }: { value: unknown }) {\n    super(\n      `Value \\`${value}\\` is an invalid y-parity value. Y-parity must be 0 or 1.`,\n    )\n  }\n}\n\n/** Thrown when the signature has an invalid `v` value. */\nexport class InvalidVError extends Errors.BaseError {\n  override readonly name = 'Signature.InvalidVError'\n\n  constructor({ value }: { value: number }) {\n    super(`Value \\`${value}\\` is an invalid v value. v must be 27, 28 or >=35.`)\n  }\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\nimport * as Address from './Address.js'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Entropy from './internal/entropy.js'\nimport type { OneOf } from './internal/types.js'\nimport * as PublicKey from './PublicKey.js'\nimport type * as Signature from './Signature.js'\n\n/** Re-export of noble/curves secp256k1 utilities. */\nexport const noble = secp256k1\n\n/**\n * Creates a new secp256k1 ECDSA key pair consisting of a private key and its corresponding public key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const { privateKey, publicKey } = Secp256k1.createKeyPair()\n * ```\n *\n * @param options - The options to generate the key pair.\n * @returns The generated key pair containing both private and public keys.\n */\nexport function createKeyPair<as extends 'Hex' | 'Bytes' = 'Hex'>(\n  options: createKeyPair.Options<as> = {},\n): createKeyPair.ReturnType<as> {\n  const { as = 'Hex' } = options\n  const privateKey = randomPrivateKey({ as })\n  const publicKey = getPublicKey({ privateKey })\n\n  return {\n    privateKey: privateKey as never,\n    publicKey,\n  }\n}\n\nexport declare namespace createKeyPair {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n    /**\n     * Format of the returned private key.\n     * @default 'Hex'\n     */\n    as?: as | 'Hex' | 'Bytes' | undefined\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes'> = {\n    privateKey:\n      | (as extends 'Bytes' ? Bytes.Bytes : never)\n      | (as extends 'Hex' ? Hex.Hex : never)\n    publicKey: PublicKey.PublicKey\n  }\n\n  type ErrorType =\n    | Hex.fromBytes.ErrorType\n    | PublicKey.from.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Computes the secp256k1 ECDSA public key from a provided private key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const publicKey = Secp256k1.getPublicKey({ privateKey: '0x...' })\n * ```\n *\n * @param options - The options to compute the public key.\n * @returns The computed public key.\n */\nexport function getPublicKey(\n  options: getPublicKey.Options,\n): PublicKey.PublicKey {\n  const { privateKey } = options\n  const point = secp256k1.ProjectivePoint.fromPrivateKey(\n    Hex.from(privateKey).slice(2),\n  )\n  return PublicKey.from(point)\n}\n\nexport declare namespace getPublicKey {\n  type Options = {\n    /**\n     * Private key to compute the public key from.\n     */\n    privateKey: Hex.Hex | Bytes.Bytes\n  }\n\n  type ErrorType =\n    | Hex.from.ErrorType\n    | PublicKey.from.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Computes a shared secret using ECDH (Elliptic Curve Diffie-Hellman) between a private key and a public key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const { privateKey: privateKeyA } = Secp256k1.createKeyPair()\n * const { publicKey: publicKeyB } = Secp256k1.createKeyPair()\n *\n * const sharedSecret = Secp256k1.getSharedSecret({\n *   privateKey: privateKeyA,\n *   publicKey: publicKeyB\n * })\n * ```\n *\n * @param options - The options to compute the shared secret.\n * @returns The computed shared secret.\n */\nexport function getSharedSecret<as extends 'Hex' | 'Bytes' = 'Hex'>(\n  options: getSharedSecret.Options<as>,\n): getSharedSecret.ReturnType<as> {\n  const { as = 'Hex', privateKey, publicKey } = options\n  const point = secp256k1.ProjectivePoint.fromHex(\n    PublicKey.toHex(publicKey).slice(2),\n  )\n  const sharedPoint = point.multiply(\n    secp256k1.utils.normPrivateKeyToScalar(Hex.from(privateKey).slice(2)),\n  )\n  const sharedSecret = sharedPoint.toRawBytes(true) // compressed format\n  if (as === 'Hex') return Hex.fromBytes(sharedSecret) as never\n  return sharedSecret as never\n}\n\nexport declare namespace getSharedSecret {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n    /**\n     * Format of the returned shared secret.\n     * @default 'Hex'\n     */\n    as?: as | 'Hex' | 'Bytes' | undefined\n    /**\n     * Private key to use for the shared secret computation.\n     */\n    privateKey: Hex.Hex | Bytes.Bytes\n    /**\n     * Public key to use for the shared secret computation.\n     */\n    publicKey: PublicKey.PublicKey<boolean>\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType =\n    | Hex.from.ErrorType\n    | PublicKey.toHex.ErrorType\n    | Hex.fromBytes.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Generates a random ECDSA private key on the secp256k1 curve.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const privateKey = Secp256k1.randomPrivateKey()\n * ```\n *\n * @param options - The options to generate the private key.\n * @returns The generated private key.\n */\nexport function randomPrivateKey<as extends 'Hex' | 'Bytes' = 'Hex'>(\n  options: randomPrivateKey.Options<as> = {},\n): randomPrivateKey.ReturnType<as> {\n  const { as = 'Hex' } = options\n  const bytes = secp256k1.utils.randomPrivateKey()\n  if (as === 'Hex') return Hex.fromBytes(bytes) as never\n  return bytes as never\n}\n\nexport declare namespace randomPrivateKey {\n  type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n    /**\n     * Format of the returned private key.\n     * @default 'Hex'\n     */\n    as?: as | 'Hex' | 'Bytes' | undefined\n  }\n\n  type ReturnType<as extends 'Hex' | 'Bytes'> =\n    | (as extends 'Bytes' ? Bytes.Bytes : never)\n    | (as extends 'Hex' ? Hex.Hex : never)\n\n  type ErrorType = Hex.fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Recovers the signing address from the signed payload and signature.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const address = Secp256k1.recoverAddress({ // [!code focus]\n *   payload: '0xdeadbeef', // [!code focus]\n *   signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The recovery options.\n * @returns The recovered address.\n */\nexport function recoverAddress(\n  options: recoverAddress.Options,\n): recoverAddress.ReturnType {\n  return Address.fromPublicKey(recoverPublicKey(options))\n}\n\nexport declare namespace recoverAddress {\n  type Options = {\n    /** Payload that was signed. */\n    payload: Hex.Hex | Bytes.Bytes\n    /** Signature of the payload. */\n    signature: Signature.Signature\n  }\n\n  type ReturnType = Address.Address\n\n  type ErrorType =\n    | Address.fromPublicKey.ErrorType\n    | recoverPublicKey.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Recovers the signing public key from the signed payload and signature.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const publicKey = Secp256k1.recoverPublicKey({ // [!code focus]\n *   payload: '0xdeadbeef', // [!code focus]\n *   signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The recovery options.\n * @returns The recovered public key.\n */\nexport function recoverPublicKey(\n  options: recoverPublicKey.Options,\n): PublicKey.PublicKey {\n  const { payload, signature } = options\n  const { r, s, yParity } = signature\n  const signature_ = new secp256k1.Signature(\n    BigInt(r),\n    BigInt(s),\n  ).addRecoveryBit(yParity)\n  const point = signature_.recoverPublicKey(Hex.from(payload).substring(2))\n  return PublicKey.from(point)\n}\n\nexport declare namespace recoverPublicKey {\n  type Options = {\n    /** Payload that was signed. */\n    payload: Hex.Hex | Bytes.Bytes\n    /** Signature of the payload. */\n    signature: Signature.Signature\n  }\n\n  type ErrorType =\n    | PublicKey.from.ErrorType\n    | Hex.from.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Signs the payload with the provided private key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ // [!code focus]\n *   payload: '0xdeadbeef', // [!code focus]\n *   privateKey: '0x...' // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The signing options.\n * @returns The ECDSA {@link ox#Signature.Signature}.\n */\nexport function sign(options: sign.Options): Signature.Signature {\n  const {\n    extraEntropy = Entropy.extraEntropy,\n    hash,\n    payload,\n    privateKey,\n  } = options\n  const { r, s, recovery } = secp256k1.sign(\n    Bytes.from(payload),\n    Bytes.from(privateKey),\n    {\n      extraEntropy:\n        typeof extraEntropy === 'boolean'\n          ? extraEntropy\n          : Hex.from(extraEntropy).slice(2),\n      lowS: true,\n      ...(hash ? { prehash: true } : {}),\n    },\n  )\n  return {\n    r,\n    s,\n    yParity: recovery,\n  }\n}\n\nexport declare namespace sign {\n  type Options = {\n    /**\n     * Extra entropy to add to the signing process. Setting to `false` will disable it.\n     * @default true\n     */\n    extraEntropy?: boolean | Hex.Hex | Bytes.Bytes | undefined\n    /**\n     *  If set to `true`, the payload will be hashed (sha256) before being signed.\n     */\n    hash?: boolean | undefined\n    /**\n     * Payload to sign.\n     */\n    payload: Hex.Hex | Bytes.Bytes\n    /**\n     * ECDSA private key.\n     */\n    privateKey: Hex.Hex | Bytes.Bytes\n  }\n\n  type ErrorType = Bytes.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Verifies a payload was signed by the provided address.\n *\n * @example\n * ### Verify with Ethereum Address\n *\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const verified = Secp256k1.verify({ // [!code focus]\n *   address: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', // [!code focus]\n *   payload: '0xdeadbeef', // [!code focus]\n *   signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### Verify with Public Key\n *\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const privateKey = '0x...'\n * const publicKey = Secp256k1.getPublicKey({ privateKey })\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey })\n *\n * const verified = Secp256k1.verify({ // [!code focus]\n *   publicKey, // [!code focus]\n *   payload: '0xdeadbeef', // [!code focus]\n *   signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The verification options.\n * @returns Whether the payload was signed by the provided address.\n */\nexport function verify(options: verify.Options): boolean {\n  const { address, hash, payload, publicKey, signature } = options\n  if (address)\n    return Address.isEqual(address, recoverAddress({ payload, signature }))\n  return secp256k1.verify(\n    signature,\n    Bytes.from(payload),\n    PublicKey.toBytes(publicKey),\n    ...(hash ? [{ prehash: true, lowS: true }] : []),\n  )\n}\n\nexport declare namespace verify {\n  type Options = {\n    /** If set to `true`, the payload will be hashed (sha256) before being verified. */\n    hash?: boolean | undefined\n    /** Payload that was signed. */\n    payload: Hex.Hex | Bytes.Bytes\n  } & OneOf<\n    | {\n        /** Address that signed the payload. */\n        address: Address.Address\n        /** Signature of the payload. */\n        signature: Signature.Signature\n      }\n    | {\n        /** Public key that signed the payload. */\n        publicKey: PublicKey.PublicKey<boolean>\n        /** Signature of the payload. */\n        signature: Signature.Signature<false>\n      }\n  >\n\n  type ErrorType = Errors.GlobalErrorType\n}\n", "import { BaseError } from './base.js'\n\nexport type InvalidDecimalNumberErrorType = InvalidDecimalNumberError & {\n  name: 'InvalidDecimalNumberError'\n}\nexport class InvalidDecimalNumberError extends BaseError {\n  constructor({ value }: { value: string }) {\n    super(`Number \\`${value}\\` is not a valid decimal number.`, {\n      name: 'InvalidDecimalNumberError',\n    })\n  }\n}\n", "import { InvalidDecimalNumberError } from '../../errors/unit.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nexport type ParseUnitsErrorType = ErrorType\n\n/**\n * Multiplies a string representation of a number by a given exponent of base 10 (10exponent).\n *\n * - Docs: https://viem.sh/docs/utilities/parseUnits\n *\n * @example\n * import { parseUnits } from 'viem'\n *\n * parseUnits('420', 9)\n * // 420000000000n\n */\nexport function parseUnits(value: string, decimals: number) {\n  if (!/^(-?)([0-9]*)\\.?([0-9]*)$/.test(value))\n    throw new InvalidDecimalNumberError({ value })\n\n  let [integer, fraction = '0'] = value.split('.')\n\n  const negative = integer.startsWith('-')\n  if (negative) integer = integer.slice(1)\n\n  // trim trailing zeros.\n  fraction = fraction.replace(/(0+)$/, '')\n\n  // round off if the fraction is larger than the number of decimals.\n  if (decimals === 0) {\n    if (Math.round(Number(`.${fraction}`)) === 1)\n      integer = `${BigInt(integer) + 1n}`\n    fraction = ''\n  } else if (fraction.length > decimals) {\n    const [left, unit, right] = [\n      fraction.slice(0, decimals - 1),\n      fraction.slice(decimals - 1, decimals),\n      fraction.slice(decimals),\n    ]\n\n    const rounded = Math.round(Number(`${unit}.${right}`))\n    if (rounded > 9)\n      fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, '0')\n    else fraction = `${left}${rounded}`\n\n    if (fraction.length > decimals) {\n      fraction = fraction.slice(1)\n      integer = `${BigInt(integer) + 1n}`\n    }\n\n    fraction = fraction.slice(0, decimals)\n  } else {\n    fraction = fraction.padEnd(decimals, '0')\n  }\n\n  return BigInt(`${negative ? '-' : ''}${integer}${fraction}`)\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Proof } from '../../types/proof.js'\nimport type { RpcProof } from '../../types/rpc.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { hexToNumber } from '../index.js'\n\nexport type FormatProofErrorType = ErrorType\n\nfunction formatStorageProof(storageProof: RpcProof['storageProof']) {\n  return storageProof.map((proof) => ({\n    ...proof,\n    value: BigInt(proof.value),\n  }))\n}\n\nexport function formatProof(proof: ExactPartial<RpcProof>) {\n  return {\n    ...proof,\n    balance: proof.balance ? BigInt(proof.balance) : undefined,\n    nonce: proof.nonce ? hexToNumber(proof.nonce) : undefined,\n    storageProof: proof.storageProof\n      ? formatStorageProof(proof.storageProof)\n      : undefined,\n  } as Proof\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetStorageAtParameters = {\n  address: Address\n  slot: Hex\n} & (\n  | {\n      blockNumber?: undefined\n      blockTag?: BlockTag | undefined\n    }\n  | {\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n)\n\nexport type GetStorageAtReturnType = Hex | undefined\n\nexport type GetStorageAtErrorType =\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns the value from a storage slot at a given address.\n *\n * - Docs: https://viem.sh/docs/contract/getStorageAt\n * - JSON-RPC Methods: [`eth_getStorageAt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getstorageat)\n *\n * @param client - Client to use\n * @param parameters - {@link GetStorageAtParameters}\n * @returns The value of the storage slot. {@link GetStorageAtReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getStorageAt } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const code = await getStorageAt(client, {\n *   address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *   slot: toHex(0),\n * })\n */\nexport async function getStorageAt<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { address, blockNumber, blockTag = 'latest', slot }: GetStorageAtParameters,\n): Promise<GetStorageAtReturnType> {\n  const blockNumberHex =\n    blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n  const data = await client.request({\n    method: 'eth_getStorageAt',\n    params: [address, slot, blockNumberHex || blockTag],\n  })\n  return data\n}\n", "import type { Address } from '../../accounts/index.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  TransactionNotFoundError,\n  type TransactionNotFoundErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RpcTransaction } from '../../types/rpc.js'\nimport type { OneOf, Prettify } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n  type FormattedTransaction,\n  formatTransaction,\n} from '../../utils/formatters/transaction.js'\n\nexport type GetTransactionParameters<blockTag extends BlockTag = 'latest'> =\n  OneOf<\n    // eth_getTransactionByBlockHashAndIndex\n    | {\n        /** The block hash */\n        blockHash: Hash\n        /** The index of the transaction on the block. */\n        index: number\n      }\n    // eth_getTransactionByBlockNumberAndIndex\n    | {\n        /** The block number */\n        blockNumber: bigint\n        /** The index of the transaction on the block. */\n        index: number\n      }\n    // eth_getTransactionByBlockNumberAndIndex\n    | {\n        /** The block tag. */\n        blockTag: blockTag | BlockTag\n        /** The index of the transaction on the block. */\n        index: number\n      }\n    // eth_getTransactionByHash\n    | {\n        /** The hash of the transaction. */\n        hash: Hash\n      }\n    // eth_getTransactionBySenderAndNonce\n    | {\n        /** The sender of the transaction. */\n        sender: Address\n        /** The nonce of the transaction on the sender. */\n        nonce: number\n      }\n  >\n\nexport type GetTransactionReturnType<\n  chain extends Chain | undefined = undefined,\n  blockTag extends BlockTag = 'latest',\n> = Prettify<FormattedTransaction<chain, blockTag>>\n\nexport type GetTransactionErrorType =\n  | TransactionNotFoundErrorType\n  | NumberToHexErrorType\n  | RequestErrorType\n  | ErrorType\n\n/**\n * Returns information about a [Transaction](https://viem.sh/docs/glossary/terms#transaction) given a hash or block identifier.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransaction\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionByHash)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionParameters}\n * @returns The transaction information. {@link GetTransactionReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransaction } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const transaction = await getTransaction(client, {\n *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function getTransaction<\n  chain extends Chain | undefined,\n  blockTag extends BlockTag = 'latest',\n>(\n  client: Client<Transport, chain>,\n  {\n    blockHash,\n    blockNumber,\n    blockTag: blockTag_,\n    hash,\n    index,\n    sender,\n    nonce,\n  }: GetTransactionParameters<blockTag>,\n): Promise<GetTransactionReturnType<chain, blockTag>> {\n  const blockTag = blockTag_ || 'latest'\n\n  const blockNumberHex =\n    blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n  let transaction: RpcTransaction | null = null\n  if (hash) {\n    transaction = await client.request(\n      {\n        method: 'eth_getTransactionByHash',\n        params: [hash],\n      },\n      { dedupe: true },\n    )\n  } else if (blockHash) {\n    transaction = await client.request(\n      {\n        method: 'eth_getTransactionByBlockHashAndIndex',\n        params: [blockHash, numberToHex(index)],\n      },\n      { dedupe: true },\n    )\n  } else if ((blockNumberHex || blockTag) && typeof index === 'number') {\n    transaction = await client.request(\n      {\n        method: 'eth_getTransactionByBlockNumberAndIndex',\n        params: [blockNumberHex || blockTag, numberToHex(index)],\n      },\n      { dedupe: Boolean(blockNumberHex) },\n    )\n  } else if (sender && typeof nonce === 'number') {\n    transaction = await client.request(\n      {\n        method: 'eth_getTransactionBySenderAndNonce',\n        params: [sender, numberToHex(nonce)],\n      },\n      { dedupe: true },\n    )\n  }\n\n  if (!transaction)\n    throw new TransactionNotFoundError({\n      blockHash,\n      blockNumber,\n      blockTag,\n      hash,\n      index,\n    })\n\n  const format =\n    client.chain?.formatters?.transaction?.format || formatTransaction\n  return format(transaction, 'getTransaction')\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { FormattedTransactionReceipt } from '../../utils/formatters/transactionReceipt.js'\nimport { getAction } from '../../utils/getAction.js'\n\nimport {\n  type GetBlockNumberErrorType,\n  getBlockNumber,\n} from './getBlockNumber.js'\nimport {\n  type GetTransactionErrorType,\n  getTransaction,\n} from './getTransaction.js'\n\nexport type GetTransactionConfirmationsParameters<\n  chain extends Chain | undefined = Chain,\n> =\n  | {\n      /** The transaction hash. */\n      hash: Hash\n      transactionReceipt?: undefined\n    }\n  | {\n      hash?: undefined\n      /** The transaction receipt. */\n      transactionReceipt: FormattedTransactionReceipt<chain>\n    }\n\nexport type GetTransactionConfirmationsReturnType = bigint\n\nexport type GetTransactionConfirmationsErrorType =\n  | GetBlockNumberErrorType\n  | GetTransactionErrorType\n  | ErrorType\n\n/**\n * Returns the number of blocks passed (confirmations) since the transaction was processed on a block.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionConfirmations\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionConfirmations`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionConfirmations)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionConfirmationsParameters}\n * @returns The number of blocks passed since the transaction was processed. If confirmations is 0, then the Transaction has not been confirmed & processed yet. {@link GetTransactionConfirmationsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionConfirmations } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const confirmations = await getTransactionConfirmations(client, {\n *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function getTransactionConfirmations<\n  chain extends Chain | undefined,\n>(\n  client: Client<Transport, chain>,\n  { hash, transactionReceipt }: GetTransactionConfirmationsParameters<chain>,\n): Promise<GetTransactionConfirmationsReturnType> {\n  const [blockNumber, transaction] = await Promise.all([\n    getAction(client, getBlockNumber, 'getBlockNumber')({}),\n    hash\n      ? getAction(client, getTransaction, 'getTransaction')({ hash })\n      : undefined,\n  ])\n  const transactionBlockNumber =\n    transactionReceipt?.blockNumber || transaction?.blockNumber\n  if (!transactionBlockNumber) return 0n\n  return blockNumber - transactionBlockNumber! + 1n\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  TransactionReceiptNotFoundError,\n  type TransactionReceiptNotFoundErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n  type FormattedTransactionReceipt,\n  formatTransactionReceipt,\n} from '../../utils/formatters/transactionReceipt.js'\n\nexport type GetTransactionReceiptParameters = {\n  /** The hash of the transaction. */\n  hash: Hash\n}\n\nexport type GetTransactionReceiptReturnType<\n  chain extends Chain | undefined = undefined,\n> = FormattedTransactionReceipt<chain>\n\nexport type GetTransactionReceiptErrorType =\n  | RequestErrorType\n  | TransactionReceiptNotFoundErrorType\n  | ErrorType\n\n/**\n * Returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt) given a [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionReceipt\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactionreceipt)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionReceiptParameters}\n * @returns The transaction receipt. {@link GetTransactionReceiptReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionReceipt } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const transactionReceipt = await getTransactionReceipt(client, {\n *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function getTransactionReceipt<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  { hash }: GetTransactionReceiptParameters,\n) {\n  const receipt = await client.request(\n    {\n      method: 'eth_getTransactionReceipt',\n      params: [hash],\n    },\n    { dedupe: true },\n  )\n\n  if (!receipt) throw new TransactionReceiptNotFoundError({ hash })\n\n  const format =\n    client.chain?.formatters?.transactionReceipt?.format ||\n    formatTransactionReceipt\n  return format(\n    receipt,\n    'getTransactionReceipt',\n  ) as GetTransactionReceiptReturnType<chain>\n}\n", "import type { AbiStateMutability, Address, Narrow } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { multicall3Abi } from '../../constants/abis.js'\nimport { multicall3Bytecode } from '../../constants/contracts.js'\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js'\nimport { BaseError } from '../../errors/base.js'\nimport { RawContractError } from '../../errors/contract.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ContractFunctionParameters } from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n  MulticallContracts,\n  MulticallResults,\n} from '../../types/multicall.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { CallParameters } from './call.js'\nimport { type ReadContractErrorType, readContract } from './readContract.js'\n\nexport type MulticallParameters<\n  contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n  allowFailure extends boolean = true,\n  options extends {\n    optional?: boolean\n    properties?: Record<string, any>\n  } = {},\n> = Pick<\n  CallParameters,\n  | 'authorizationList'\n  | 'blockNumber'\n  | 'blockOverrides'\n  | 'blockTag'\n  | 'stateOverride'\n> & {\n  /** The account to use for the multicall. */\n  account?: Address | undefined\n  /** Whether to allow failures. */\n  allowFailure?: allowFailure | boolean | undefined\n  /** The size of each batch of calls. */\n  batchSize?: number | undefined\n  /** Enable deployless multicall. */\n  deployless?: boolean | undefined\n  /** The contracts to call. */\n  contracts: MulticallContracts<\n    Narrow<contracts>,\n    { mutability: AbiStateMutability } & options\n  >\n  /** The address of the multicall3 contract to use. */\n  multicallAddress?: Address | undefined\n}\n\nexport type MulticallReturnType<\n  contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n  allowFailure extends boolean = true,\n  options extends {\n    error?: Error\n  } = { error: Error },\n> = MulticallResults<\n  Narrow<contracts>,\n  allowFailure,\n  { mutability: AbiStateMutability } & options\n>\n\nexport type MulticallErrorType =\n  | GetChainContractAddressErrorType\n  | ReadContractErrorType\n  | GetContractErrorReturnType<\n      EncodeFunctionDataErrorType | DecodeFunctionResultErrorType\n    >\n  | ErrorType\n\n/**\n * Similar to [`readContract`](https://viem.sh/docs/contract/readContract), but batches up multiple functions on a contract in a single RPC call via the [`multicall3` contract](https://github.com/mds1/multicall).\n *\n * - Docs: https://viem.sh/docs/contract/multicall\n *\n * @param client - Client to use\n * @param parameters - {@link MulticallParameters}\n * @returns An array of results with accompanying status. {@link MulticallReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { multicall } from 'viem/contract'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const abi = parseAbi([\n *   'function balanceOf(address) view returns (uint256)',\n *   'function totalSupply() view returns (uint256)',\n * ])\n * const results = await multicall(client, {\n *   contracts: [\n *     {\n *       address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *       abi,\n *       functionName: 'balanceOf',\n *       args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n *     },\n *     {\n *       address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n *       abi,\n *       functionName: 'totalSupply',\n *     },\n *   ],\n * })\n * // [{ result: 424122n, status: 'success' }, { result: 1000000n, status: 'success' }]\n */\nexport async function multicall<\n  const contracts extends readonly unknown[],\n  chain extends Chain | undefined,\n  allowFailure extends boolean = true,\n>(\n  client: Client<Transport, chain>,\n  parameters: MulticallParameters<contracts, allowFailure>,\n): Promise<MulticallReturnType<contracts, allowFailure>> {\n  const {\n    account,\n    authorizationList,\n    allowFailure = true,\n    blockNumber,\n    blockOverrides,\n    blockTag,\n    stateOverride,\n  } = parameters\n  const contracts = parameters.contracts as ContractFunctionParameters[]\n\n  const {\n    batchSize = parameters.batchSize ?? 1024,\n    deployless = parameters.deployless ?? false,\n  } = typeof client.batch?.multicall === 'object' ? client.batch.multicall : {}\n\n  const multicallAddress = (() => {\n    if (parameters.multicallAddress) return parameters.multicallAddress\n    if (deployless) return null\n    if (client.chain) {\n      return getChainContractAddress({\n        blockNumber,\n        chain: client.chain,\n        contract: 'multicall3',\n      })\n    }\n    throw new Error(\n      'client chain not configured. multicallAddress is required.',\n    )\n  })()\n\n  type Aggregate3Calls = {\n    allowFailure: boolean\n    callData: Hex\n    target: Address\n  }[]\n\n  const chunkedCalls: Aggregate3Calls[] = [[]]\n  let currentChunk = 0\n  let currentChunkSize = 0\n  for (let i = 0; i < contracts.length; i++) {\n    const { abi, address, args, functionName } = contracts[i]\n    try {\n      const callData = encodeFunctionData({ abi, args, functionName })\n\n      currentChunkSize += (callData.length - 2) / 2\n      // Check to see if we need to create a new chunk.\n      if (\n        // Check if batching is enabled.\n        batchSize > 0 &&\n        // Check if the current size of the batch exceeds the size limit.\n        currentChunkSize > batchSize &&\n        // Check if the current chunk is not already empty.\n        chunkedCalls[currentChunk].length > 0\n      ) {\n        currentChunk++\n        currentChunkSize = (callData.length - 2) / 2\n        chunkedCalls[currentChunk] = []\n      }\n\n      chunkedCalls[currentChunk] = [\n        ...chunkedCalls[currentChunk],\n        {\n          allowFailure: true,\n          callData,\n          target: address,\n        },\n      ]\n    } catch (err) {\n      const error = getContractError(err as BaseError, {\n        abi,\n        address,\n        args,\n        docsPath: '/docs/contract/multicall',\n        functionName,\n        sender: account,\n      })\n      if (!allowFailure) throw error\n      chunkedCalls[currentChunk] = [\n        ...chunkedCalls[currentChunk],\n        {\n          allowFailure: true,\n          callData: '0x' as Hex,\n          target: address,\n        },\n      ]\n    }\n  }\n\n  const aggregate3Results = await Promise.allSettled(\n    chunkedCalls.map((calls) =>\n      getAction(\n        client,\n        readContract,\n        'readContract',\n      )({\n        ...(multicallAddress === null\n          ? { code: multicall3Bytecode }\n          : { address: multicallAddress }),\n        abi: multicall3Abi,\n        account,\n        args: [calls],\n        authorizationList,\n        blockNumber,\n        blockOverrides,\n        blockTag,\n        functionName: 'aggregate3',\n        stateOverride,\n      }),\n    ),\n  )\n\n  const results = []\n  for (let i = 0; i < aggregate3Results.length; i++) {\n    const result = aggregate3Results[i]\n\n    // If an error occurred in a `readContract` invocation (ie. network error),\n    // then append the failure reason to each contract result.\n    if (result.status === 'rejected') {\n      if (!allowFailure) throw result.reason\n      for (let j = 0; j < chunkedCalls[i].length; j++) {\n        results.push({\n          status: 'failure',\n          error: result.reason,\n          result: undefined,\n        })\n      }\n      continue\n    }\n\n    // If the `readContract` call was successful, then decode the results.\n    const aggregate3Result = result.value\n    for (let j = 0; j < aggregate3Result.length; j++) {\n      // Extract the response from `readContract`\n      const { returnData, success } = aggregate3Result[j]\n\n      // Extract the request call data from the original call.\n      const { callData } = chunkedCalls[i][j]\n\n      // Extract the contract config for this call from the `contracts` argument\n      // for decoding.\n      const { abi, address, functionName, args } = contracts[\n        results.length\n      ] as ContractFunctionParameters\n\n      try {\n        if (callData === '0x') throw new AbiDecodingZeroDataError()\n        if (!success) throw new RawContractError({ data: returnData })\n        const result = decodeFunctionResult({\n          abi,\n          args,\n          data: returnData,\n          functionName,\n        })\n        results.push(allowFailure ? { result, status: 'success' } : result)\n      } catch (err) {\n        const error = getContractError(err as BaseError, {\n          abi,\n          address,\n          args,\n          docsPath: '/docs/contract/multicall',\n          functionName,\n        })\n        if (!allowFailure) throw error\n        results.push({ error, result: undefined, status: 'failure' })\n      }\n    }\n  }\n\n  if (results.length !== contracts.length)\n    throw new BaseError('multicall results mismatch')\n  return results as MulticallReturnType<contracts, allowFailure>\n}\n", "import type { Abi, AbiStateMutability, Address, Narrow } from 'abitype'\nimport * as BlockOverrides from 'ox/BlockOverrides'\n\nimport {\n  type ParseAccountErrorType,\n  parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js'\nimport type { BaseError } from '../../errors/base.js'\nimport { RawContractError } from '../../errors/contract.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block, BlockTag } from '../../types/block.js'\nimport type { Call, Calls } from '../../types/calls.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { MulticallResults } from '../../types/multicall.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { ExactPartial, UnionOmit } from '../../types/utils.js'\nimport {\n  type DecodeFunctionResultErrorType,\n  decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport { concat } from '../../utils/data/concat.js'\nimport {\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { getContractError } from '../../utils/errors/getContractError.js'\nimport {\n  type GetNodeErrorReturnType,\n  getNodeError,\n} from '../../utils/errors/getNodeError.js'\nimport {\n  type FormatBlockErrorType,\n  formatBlock,\n} from '../../utils/formatters/block.js'\nimport { formatLog } from '../../utils/formatters/log.js'\nimport {\n  type FormatTransactionRequestErrorType,\n  formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport {\n  type SerializeStateOverrideErrorType,\n  serializeStateOverride,\n} from '../../utils/stateOverride.js'\nimport {\n  type AssertRequestErrorType,\n  assertRequest,\n} from '../../utils/transaction/assertRequest.js'\n\ntype CallExtraProperties = ExactPartial<\n  UnionOmit<\n    TransactionRequest,\n    'blobs' | 'data' | 'kzg' | 'to' | 'sidecars' | 'value'\n  >\n> & {\n  /** Account attached to the call (msg.sender). */\n  account?: Account | Address | undefined\n  /** Recipient. `null` if contract deployment. */\n  to?: Address | null | undefined\n}\n\nexport type SimulateBlocksParameters<\n  calls extends readonly unknown[] = readonly unknown[],\n> = {\n  /** Blocks to simulate. */\n  blocks: readonly {\n    /** Block overrides. */\n    blockOverrides?: BlockOverrides.BlockOverrides | undefined\n    /** Calls to execute. */\n    calls: Calls<Narrow<calls>, CallExtraProperties>\n    /** State overrides. */\n    stateOverrides?: StateOverride | undefined\n  }[]\n  /** Whether to return the full transactions. */\n  returnFullTransactions?: boolean | undefined\n  /** Whether to trace transfers. */\n  traceTransfers?: boolean | undefined\n  /** Whether to enable validation mode. */\n  validation?: boolean | undefined\n} & (\n  | {\n      /** The balance of the account at a block number. */\n      blockNumber?: bigint | undefined\n      blockTag?: undefined\n    }\n  | {\n      blockNumber?: undefined\n      /**\n       * The balance of the account at a block tag.\n       * @default 'latest'\n       */\n      blockTag?: BlockTag | undefined\n    }\n)\n\nexport type SimulateBlocksReturnType<\n  calls extends readonly unknown[] = readonly unknown[],\n> = readonly (Block & {\n  calls: MulticallResults<\n    Narrow<calls>,\n    true,\n    {\n      extraProperties: {\n        data: Hex\n        gasUsed: bigint\n        logs?: Log[] | undefined\n      }\n      error: Error\n      mutability: AbiStateMutability\n    }\n  >\n})[]\n\nexport type SimulateBlocksErrorType =\n  | AssertRequestErrorType\n  | DecodeFunctionResultErrorType\n  | EncodeFunctionDataErrorType\n  | FormatBlockErrorType\n  | FormatTransactionRequestErrorType\n  | GetNodeErrorReturnType\n  | ParseAccountErrorType\n  | SerializeStateOverrideErrorType\n  | NumberToHexErrorType\n  | ErrorType\n\n/**\n * Simulates a set of calls on block(s) with optional block and state overrides.\n *\n * @example\n * ```ts\n * import { createClient, http, parseEther } from 'viem'\n * import { simulate } from 'viem/actions'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n *\n * const result = await simulate(client, {\n *   blocks: [{\n *     blockOverrides: {\n *       number: 69420n,\n *     },\n *     calls: [{\n *       {\n *         account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n *         data: '0xdeadbeef',\n *         to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *       },\n *       {\n *         account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n *         to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *         value: parseEther('1'),\n *       },\n *     }],\n *     stateOverrides: [{\n *       address: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n *       balance: parseEther('10'),\n *     }],\n *   }]\n * })\n * ```\n *\n * @param client - Client to use.\n * @param parameters - {@link SimulateBlocksParameters}\n * @returns Simulated blocks. {@link SimulateBlocksReturnType}\n */\nexport async function simulateBlocks<\n  chain extends Chain | undefined,\n  const calls extends readonly unknown[],\n>(\n  client: Client<Transport, chain>,\n  parameters: SimulateBlocksParameters<calls>,\n): Promise<SimulateBlocksReturnType<calls>> {\n  const {\n    blockNumber,\n    blockTag = client.experimental_blockTag ?? 'latest',\n    blocks,\n    returnFullTransactions,\n    traceTransfers,\n    validation,\n  } = parameters\n\n  try {\n    const blockStateCalls = []\n    for (const block of blocks) {\n      const blockOverrides = block.blockOverrides\n        ? BlockOverrides.toRpc(block.blockOverrides)\n        : undefined\n      const calls = block.calls.map((call_) => {\n        const call = call_ as Call<unknown, CallExtraProperties>\n        const account = call.account ? parseAccount(call.account) : undefined\n        const data = call.abi ? encodeFunctionData(call) : call.data\n        const request = {\n          ...call,\n          account,\n          data: call.dataSuffix\n            ? concat([data || '0x', call.dataSuffix])\n            : data,\n          from: call.from ?? account?.address,\n        } as const\n        assertRequest(request)\n        return formatTransactionRequest(request)\n      })\n      const stateOverrides = block.stateOverrides\n        ? serializeStateOverride(block.stateOverrides)\n        : undefined\n\n      blockStateCalls.push({\n        blockOverrides,\n        calls,\n        stateOverrides,\n      })\n    }\n\n    const blockNumberHex =\n      typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined\n    const block = blockNumberHex || blockTag\n\n    const result = await client.request({\n      method: 'eth_simulateV1',\n      params: [\n        { blockStateCalls, returnFullTransactions, traceTransfers, validation },\n        block,\n      ],\n    })\n\n    return result.map((block, i) => ({\n      ...formatBlock(block),\n      calls: block.calls.map((call, j) => {\n        const { abi, args, functionName, to } = blocks[i].calls[j] as Call<\n          unknown,\n          CallExtraProperties\n        >\n\n        const data = call.error?.data ?? call.returnData\n        const gasUsed = BigInt(call.gasUsed)\n        const logs = call.logs?.map((log) => formatLog(log))\n        const status = call.status === '0x1' ? 'success' : 'failure'\n\n        const result =\n          abi && status === 'success' && data !== '0x'\n            ? decodeFunctionResult({\n                abi,\n                data,\n                functionName,\n              })\n            : null\n\n        const error = (() => {\n          if (status === 'success') return undefined\n\n          let error: Error | undefined\n          if (data === '0x') error = new AbiDecodingZeroDataError()\n          else if (data) error = new RawContractError({ data })\n\n          if (!error) return undefined\n          return getContractError(error, {\n            abi: (abi ?? []) as Abi,\n            address: to ?? '0x',\n            args,\n            functionName: functionName ?? '<unknown>',\n          })\n        })()\n\n        return {\n          data,\n          gasUsed,\n          logs,\n          status,\n          ...(status === 'success'\n            ? {\n                result,\n              }\n            : {\n                error,\n              }),\n        }\n      }),\n    })) as unknown as SimulateBlocksReturnType<calls>\n  } catch (e) {\n    const cause = e as BaseError\n    const error = getNodeError(cause, {})\n    if (error instanceof UnknownNodeError) throw cause\n    throw error\n  }\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as internal from './internal/abiItem.js'\nimport type { UnionCompute } from './internal/types.js'\n\n/** Root type for an item on an {@link ox#Abi.Abi}. */\nexport type AbiItem = Abi.Abi[number]\n\n/**\n * Extracts an {@link ox#AbiItem.AbiItem} item from an {@link ox#Abi.Abi}, given a name.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n *   'error Foo(string)',\n *   'function foo(string)',\n *   'event Bar(uint256)',\n * ])\n *\n * type Foo = AbiItem.FromAbi<typeof abi, 'Foo'>\n * //   ^?\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type FromAbi<\n  abi extends Abi.Abi,\n  name extends ExtractNames<abi>,\n> = Extract<abi[number], { name: name }>\n\n/**\n * Extracts the names of all {@link ox#AbiItem.AbiItem} items in an {@link ox#Abi.Abi}.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n *   'error Foo(string)',\n *   'function foo(string)',\n *   'event Bar(uint256)',\n * ])\n *\n * type names = AbiItem.Name<typeof abi>\n * //   ^?\n *\n * ```\n */\nexport type Name<abi extends Abi.Abi | readonly unknown[] = Abi.Abi> =\n  abi extends Abi.Abi ? ExtractNames<abi> : string\n\nexport type ExtractNames<abi extends Abi.Abi> = Extract<\n  abi[number],\n  { name: string }\n>['name']\n\n/**\n * Formats an {@link ox#AbiItem.AbiItem} into a **Human Readable ABI Item**.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const formatted = AbiItem.format({\n *   type: 'function',\n *   name: 'approve',\n *   stateMutability: 'nonpayable',\n *   inputs: [\n *     {\n *       name: 'spender',\n *       type: 'address',\n *     },\n *     {\n *       name: 'amount',\n *       type: 'uint256',\n *     },\n *   ],\n *   outputs: [{ type: 'bool' }],\n * })\n *\n * formatted\n * //    ^?\n *\n *\n * ```\n *\n * @param abiItem - The ABI Item to format.\n * @returns The formatted ABI Item  .\n */\nexport function format<const abiItem extends AbiItem>(\n  abiItem: abiItem | AbiItem,\n): abitype.FormatAbiItem<abiItem> {\n  return abitype.formatAbiItem(abiItem) as never\n}\n\nexport declare namespace format {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses an arbitrary **JSON ABI Item** or **Human Readable ABI Item** into a typed {@link ox#AbiItem.AbiItem}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from({\n *   type: 'function',\n *   name: 'approve',\n *   stateMutability: 'nonpayable',\n *   inputs: [\n *     {\n *       name: 'spender',\n *       type: 'address',\n *     },\n *     {\n *       name: 'amount',\n *       type: 'uint256',\n *     },\n *   ],\n *   outputs: [{ type: 'bool' }],\n * })\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from(\n *   'function approve(address spender, uint256 amount) returns (bool)' // [!code hl]\n * )\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from([\n *   'struct Foo { address spender; uint256 amount; }', // [!code hl]\n *   'function approve(Foo foo) returns (bool)',\n * ])\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiItem - The ABI Item to parse.\n * @returns The typed ABI Item.\n */\nexport function from<\n  const abiItem extends AbiItem | string | readonly string[],\n>(\n  abiItem: (abiItem | AbiItem | string | readonly string[]) &\n    (\n      | (abiItem extends string ? internal.Signature<abiItem> : never)\n      | (abiItem extends readonly string[]\n          ? internal.Signatures<abiItem>\n          : never)\n      | AbiItem\n    ),\n  options: from.Options = {},\n): from.ReturnType<abiItem> {\n  const { prepare = true } = options\n  const item = (() => {\n    if (Array.isArray(abiItem)) return abitype.parseAbiItem(abiItem)\n    if (typeof abiItem === 'string')\n      return abitype.parseAbiItem(abiItem as never)\n    return abiItem\n  })() as AbiItem\n  return {\n    ...item,\n    ...(prepare ? { hash: getSignatureHash(item) } : {}),\n  } as never\n}\n\nexport declare namespace from {\n  type Options = {\n    /**\n     * Whether or not to prepare the extracted item (optimization for encoding performance).\n     * When `true`, the `hash` property is computed and included in the returned value.\n     *\n     * @default true\n     */\n    prepare?: boolean | undefined\n  }\n\n  type ReturnType<abiItem extends AbiItem | string | readonly string[]> =\n    abiItem extends string\n      ? abitype.ParseAbiItem<abiItem>\n      : abiItem extends readonly string[]\n        ? abitype.ParseAbiItem<abiItem>\n        : abiItem\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Extracts an {@link ox#AbiItem.AbiItem} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ABI Items can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n *   'function foo()',\n *   'event Transfer(address owner, address to, uint256 tokenId)',\n *   'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiItem.fromAbi(abi, 'Transfer') // [!code focus]\n * //    ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Items can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n *   'function foo()',\n *   'event Transfer(address owner, address to, uint256 tokenId)',\n *   'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiItem.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * //    ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Item from an `eth_call` RPC response,\n * a Transaction `input`, or from Event Log `topics`.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi<\n  const abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n  const args extends internal.ExtractArgs<abi, name> | undefined = undefined,\n  //\n  allNames = Name<abi>,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  name: Hex.Hex | (name extends allNames ? name : never),\n  options?: fromAbi.Options<abi, name, args>,\n): fromAbi.ReturnType<abi, name, args> {\n  const { args = [], prepare = true } = (options ??\n    {}) as unknown as fromAbi.Options\n\n  const isSelector = Hex.validate(name, { strict: false })\n  const abiItems = (abi as Abi.Abi).filter((abiItem) => {\n    if (isSelector) {\n      if (abiItem.type === 'function' || abiItem.type === 'error')\n        return getSelector(abiItem) === Hex.slice(name, 0, 4)\n      if (abiItem.type === 'event') return getSignatureHash(abiItem) === name\n      return false\n    }\n    return 'name' in abiItem && abiItem.name === name\n  })\n\n  if (abiItems.length === 0) throw new NotFoundError({ name: name as string })\n  if (abiItems.length === 1)\n    return {\n      ...abiItems[0],\n      ...(prepare ? { hash: getSignatureHash(abiItems[0]!) } : {}),\n    } as never\n\n  let matchedAbiItem: AbiItem | undefined\n  for (const abiItem of abiItems) {\n    if (!('inputs' in abiItem)) continue\n    if (!args || args.length === 0) {\n      if (!abiItem.inputs || abiItem.inputs.length === 0)\n        return {\n          ...abiItem,\n          ...(prepare ? { hash: getSignatureHash(abiItem) } : {}),\n        } as never\n      continue\n    }\n    if (!abiItem.inputs) continue\n    if (abiItem.inputs.length === 0) continue\n    if (abiItem.inputs.length !== args.length) continue\n    const matched = args.every((arg, index) => {\n      const abiParameter = 'inputs' in abiItem && abiItem.inputs![index]\n      if (!abiParameter) return false\n      return internal.isArgOfType(arg, abiParameter)\n    })\n    if (matched) {\n      // Check for ambiguity against already matched parameters (e.g. `address` vs `bytes20`).\n      if (\n        matchedAbiItem &&\n        'inputs' in matchedAbiItem &&\n        matchedAbiItem.inputs\n      ) {\n        const ambiguousTypes = internal.getAmbiguousTypes(\n          abiItem.inputs,\n          matchedAbiItem.inputs,\n          args as readonly unknown[],\n        )\n        if (ambiguousTypes)\n          throw new AmbiguityError(\n            {\n              abiItem,\n              type: ambiguousTypes[0]!,\n            },\n            {\n              abiItem: matchedAbiItem,\n              type: ambiguousTypes[1]!,\n            },\n          )\n      }\n\n      matchedAbiItem = abiItem\n    }\n  }\n\n  const abiItem = (() => {\n    if (matchedAbiItem) return matchedAbiItem\n    const [abiItem, ...overloads] = abiItems\n    return { ...abiItem!, overloads }\n  })()\n\n  if (!abiItem) throw new NotFoundError({ name: name as string })\n  return {\n    ...abiItem,\n    ...(prepare ? { hash: getSignatureHash(abiItem) } : {}),\n  } as never\n}\n\nexport declare namespace fromAbi {\n  type Options<\n    abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n    name extends Name<abi> = Name<abi>,\n    args extends\n      | internal.ExtractArgs<abi, name>\n      | undefined = internal.ExtractArgs<abi, name>,\n    ///\n    allArgs = internal.ExtractArgs<abi, name>,\n  > = {\n    /**\n     * Whether or not to prepare the extracted item (optimization for encoding performance).\n     * When `true`, the `hash` property is computed and included in the returned value.\n     *\n     * @default true\n     */\n    prepare?: boolean | undefined\n  } & UnionCompute<\n    readonly [] extends allArgs\n      ? {\n          args?:\n            | allArgs // show all options\n            // infer value, widen inferred value of `args` conditionally to match `allArgs`\n            | (abi extends Abi.Abi\n                ? args extends allArgs\n                  ? internal.Widen<args>\n                  : never\n                : never)\n            | undefined\n        }\n      : {\n          args?:\n            | allArgs // show all options\n            | (internal.Widen<args> & (args extends allArgs ? unknown : never)) // infer value, widen inferred value of `args` match `allArgs` (e.g. avoid union `args: readonly [123n] | readonly [bigint]`)\n            | undefined\n        }\n  >\n\n  type ReturnType<\n    abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n    name extends Name<abi> = Name<abi>,\n    args extends\n      | internal.ExtractArgs<abi, name>\n      | undefined = internal.ExtractArgs<abi, name>,\n    fallback = AbiItem,\n  > = abi extends Abi.Abi\n    ? Abi.Abi extends abi\n      ? fallback\n      : internal.ExtractForArgs<\n          abi,\n          name,\n          args extends internal.ExtractArgs<abi, name>\n            ? args\n            : internal.ExtractArgs<abi, name>\n        >\n    : fallback\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiItem.AbiItem}.\n *\n * Useful for computing function selectors for calldata.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const selector = AbiItem.getSelector('function ownerOf(uint256 tokenId)')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiItem } from 'ox'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const selector = AbiItem.getSelector(erc20Abi, 'ownerOf')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const selector = AbiItem.getSelector({\n *   inputs: [{ type: 'uint256' }],\n *   name: 'ownerOf',\n *   outputs: [],\n *   stateMutability: 'view',\n *   type: 'function'\n * })\n * // @log: '0x6352211e'\n * ```\n *\n * @param abiItem - The ABI item to compute the selector for. Can be a signature or an ABI item for an error, event, function, etc.\n * @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the function signature.\n */\nexport function getSelector<\n  abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n>(abi: abi | Abi.Abi | readonly unknown[], name: name): Hex.Hex\nexport function getSelector(abiItem: string | AbiItem): Hex.Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getSelector(\n  ...parameters:\n    | [abi: Abi.Abi | readonly unknown[], name: string]\n    | [string | AbiItem]\n): Hex.Hex {\n  const abiItem = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name] = parameters as [Abi.Abi | readonly unknown[], string]\n      return fromAbi(abi, name)\n    }\n    return parameters[0] as string | AbiItem\n  })()\n  return Hex.slice(getSignatureHash(abiItem), 0, 4)\n}\n\nexport declare namespace getSelector {\n  type ErrorType =\n    | getSignatureHash.ErrorType\n    | Hex.slice.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Computes the stringified signature for a given {@link ox#AbiItem.AbiItem}.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const signature = AbiItem.getSignature('function ownerOf(uint256 tokenId)')\n * // @log: 'ownerOf(uint256)'\n * ```\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiItem } from 'ox'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const signature = AbiItem.getSignature(erc20Abi, 'ownerOf')\n * // @log: 'ownerOf(uint256)'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const signature = AbiItem.getSignature({\n *   name: 'ownerOf',\n *   type: 'function',\n *   inputs: [{ name: 'tokenId', type: 'uint256' }],\n *   outputs: [],\n *   stateMutability: 'view',\n * })\n * // @log: 'ownerOf(uint256)'\n * ```\n *\n * @param abiItem - The ABI Item to compute the signature for.\n * @returns The stringified signature of the ABI Item.\n */\nexport function getSignature<\n  abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n>(abi: abi | Abi.Abi | readonly unknown[], name: name): string\nexport function getSignature(abiItem: string | AbiItem): string\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getSignature(\n  ...parameters:\n    | [abi: Abi.Abi | readonly unknown[], name: string]\n    | [string | AbiItem]\n): string {\n  const abiItem = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name] = parameters as [Abi.Abi | readonly unknown[], string]\n      return fromAbi(abi, name)\n    }\n    return parameters[0] as string | AbiItem\n  })()\n  const signature = (() => {\n    if (typeof abiItem === 'string') return abiItem\n    return abitype.formatAbiItem(abiItem)\n  })()\n  return internal.normalizeSignature(signature)\n}\n\nexport declare namespace getSignature {\n  type ErrorType =\n    | internal.normalizeSignature.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Computes the signature hash for an {@link ox#AbiItem.AbiItem}.\n *\n * Useful for computing Event Topic values.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const hash = AbiItem.getSignatureHash('event Transfer(address indexed from, address indexed to, uint256 amount)')\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'\n * ```\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiItem } from 'ox'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const hash = AbiItem.getSignatureHash(erc20Abi, 'Transfer')\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const hash = AbiItem.getSignatureHash({\n *   name: 'Transfer',\n *   type: 'event',\n *   inputs: [\n *     { name: 'from', type: 'address', indexed: true },\n *     { name: 'to', type: 'address', indexed: true },\n *     { name: 'amount', type: 'uint256', indexed: false },\n *   ],\n * })\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'\n * ```\n *\n * @param abiItem - The ABI Item to compute the signature hash for.\n * @returns The {@link ox#Hash.(keccak256:function)} hash of the ABI item's signature.\n */\nexport function getSignatureHash<\n  abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n>(abi: abi | Abi.Abi | readonly unknown[], name: name): Hex.Hex\nexport function getSignatureHash(abiItem: string | AbiItem): Hex.Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getSignatureHash(\n  ...parameters:\n    | [abi: Abi.Abi | readonly unknown[], name: string]\n    | [string | AbiItem]\n): Hex.Hex {\n  const abiItem = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name] = parameters as [Abi.Abi | readonly unknown[], string]\n      return fromAbi(abi, name)\n    }\n    return parameters[0] as string | AbiItem\n  })()\n  if (typeof abiItem !== 'string' && 'hash' in abiItem && abiItem.hash)\n    return abiItem.hash as Hex.Hex\n  return Hash.keccak256(Hex.fromString(getSignature(abiItem)))\n}\n\nexport declare namespace getSignatureHash {\n  type ErrorType =\n    | getSignature.ErrorType\n    | Hash.keccak256.ErrorType\n    | Hex.fromString.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Throws when ambiguous types are found on overloaded ABI items.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from(['function foo(address)', 'function foo(bytes20)'])\n * AbiFunction.fromAbi(foo, 'foo', {\n *   args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // @error: AbiItem.AmbiguityError: Found ambiguous types in overloaded ABI Items.\n * // @error: `bytes20` in `foo(bytes20)`, and\n * // @error: `address` in `foo(address)`\n * // @error: These types encode differently and cannot be distinguished at runtime.\n * // @error: Remove one of the ambiguous items in the ABI.\n * ```\n *\n * ### Solution\n *\n * Remove one of the ambiguous types from the ABI.\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n *   'function foo(address)',\n *   'function foo(bytes20)' // [!code --]\n * ])\n * AbiFunction.fromAbi(foo, 'foo', {\n *   args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // @error: AbiItem.AmbiguityError: Found ambiguous types in overloaded ABI Items.\n * // @error: `bytes20` in `foo(bytes20)`, and\n * // @error: `address` in `foo(address)`\n * // @error: These types encode differently and cannot be distinguished at runtime.\n * // @error: Remove one of the ambiguous items in the ABI.\n * ```\n */\nexport class AmbiguityError extends Errors.BaseError {\n  override readonly name = 'AbiItem.AmbiguityError'\n  constructor(\n    x: { abiItem: Abi.Abi[number]; type: string },\n    y: { abiItem: Abi.Abi[number]; type: string },\n  ) {\n    super('Found ambiguous types in overloaded ABI Items.', {\n      metaMessages: [\n        // TODO: abitype to add support for signature-formatted ABI items.\n        `\\`${x.type}\\` in \\`${internal.normalizeSignature(abitype.formatAbiItem(x.abiItem))}\\`, and`,\n        `\\`${y.type}\\` in \\`${internal.normalizeSignature(abitype.formatAbiItem(y.abiItem))}\\``,\n        '',\n        'These types encode differently and cannot be distinguished at runtime.',\n        'Remove one of the ambiguous items in the ABI.',\n      ],\n    })\n  }\n}\n\n/**\n * Throws when an ABI item is not found in the ABI.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n *   'function foo(address)',\n *   'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, 'baz')\n * // @error: AbiItem.NotFoundError: ABI function with name \"baz\" not found.\n * ```\n *\n * ### Solution\n *\n * Ensure the ABI item exists on the ABI.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n *   'function foo(address)',\n *   'function bar(uint)',\n *   'function baz(bool)' // [!code ++]\n * ])\n * AbiFunction.fromAbi(foo, 'baz')\n * ```\n */\nexport class NotFoundError extends Errors.BaseError {\n  override readonly name = 'AbiItem.NotFoundError'\n  constructor({\n    name,\n    data,\n    type = 'item',\n  }: {\n    name?: string | undefined\n    data?: Hex.Hex | undefined\n    type?: string | undefined\n  }) {\n    const selector = (() => {\n      if (name) return ` with name \"${name}\"`\n      if (data) return ` with data \"${data}\"`\n      return ''\n    })()\n    super(`ABI ${type}${selector} not found.`)\n  }\n}\n\n/**\n * Throws when the selector size is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n *   'function foo(address)',\n *   'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, '0xaaa')\n * // @error: AbiItem.InvalidSelectorSizeError: Selector size is invalid. Expected 4 bytes. Received 2 bytes (\"0xaaa\").\n * ```\n *\n * ### Solution\n *\n * Ensure the selector size is 4 bytes.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n *   'function foo(address)',\n *   'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, '0x7af82b1a')\n * ```\n */\nexport class InvalidSelectorSizeError extends Errors.BaseError {\n  override readonly name = 'AbiItem.InvalidSelectorSizeError'\n  constructor({ data }: { data: Hex.Hex }) {\n    super(\n      `Selector size is invalid. Expected 4 bytes. Received ${Hex.size(data)} bytes (\"${data}\").`,\n    )\n  }\n}\n", "import type * as abitype from 'abitype'\nimport type * as Abi from '../Abi.js'\nimport type * as AbiItem from '../AbiItem.js'\nimport type * as AbiParameters from '../AbiParameters.js'\nimport * as Address from '../Address.js'\nimport * as Errors from '../Errors.js'\nimport type {\n  Compute,\n  IsNever,\n  IsUnion,\n  TypeErrorMessage,\n  UnionToTuple,\n} from './types.js'\n\n/** @internal */\nexport type ExtractArgs<\n  abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n  name extends AbiItem.Name<abi> = AbiItem.Name<abi>,\n> = abitype.AbiParametersToPrimitiveTypes<\n  AbiItem.FromAbi<abi extends Abi.Abi ? abi : Abi.Abi, name>['inputs'],\n  'inputs'\n> extends infer args\n  ? [args] extends [never]\n    ? readonly unknown[]\n    : args\n  : readonly unknown[]\n\n/** @internal */\nexport type ExtractForArgs<\n  abi extends Abi.Abi,\n  name extends AbiItem.Name<abi>,\n  args extends ExtractArgs<abi, name>,\n> = IsUnion<name> extends true\n  ? {\n      [key in keyof abi]: abi[key] extends { name: name } ? abi[key] : never\n    }[number]\n  : AbiItem.FromAbi<abi, name> extends infer abiItem extends AbiItem.AbiItem & {\n        inputs: readonly abitype.AbiParameter[]\n      }\n    ? IsUnion<abiItem> extends true // narrow overloads using `args` by converting to tuple and filtering out overloads that don't match\n      ? UnionToTuple<abiItem> extends infer abiItems extends\n          readonly (AbiItem.AbiItem & {\n            inputs: readonly abitype.AbiParameter[]\n          })[]\n        ? IsNever<TupleToUnion<abiItems, abi, name, args>> extends true\n          ? Compute<\n              abiItems[0] & {\n                readonly overloads: UnionToTuple<\n                  Exclude<abiItems[number], abiItems[0]>\n                >\n              }\n            >\n          : TupleToUnion<abiItems, abi, name, args> // convert back to union (removes `never` tuple entries: `['foo', never, 'bar'][number]` => `'foo' | 'bar'`)\n        : never\n      : abiItem\n    : never\n\n/** @internal */\nexport type TupleToUnion<\n  abiItems extends readonly {\n    inputs: readonly abitype.AbiParameter[]\n  }[],\n  abi extends Abi.Abi,\n  name extends AbiItem.Name<abi>,\n  args extends ExtractArgs<abi, name>,\n> = {\n  [k in keyof abiItems]: (\n    readonly [] extends args\n      ? readonly [] // fallback to `readonly []` if `args` has no value (e.g. `args` property not provided)\n      : args\n  ) extends abitype.AbiParametersToPrimitiveTypes<\n    abiItems[k]['inputs'],\n    'inputs'\n  >\n    ? abiItems[k]\n    : never\n}[number]\n\n/** @internal */\nexport type ErrorSignature<\n  name extends string = string,\n  parameters extends string = string,\n> = `error ${name}(${parameters})`\n\n/** @internal */\nexport type IsErrorSignature<signature extends string> =\n  signature extends ErrorSignature<infer name> ? IsName<name> : false\n\n/** @internal */\nexport type EventSignature<\n  name extends string = string,\n  parameters extends string = string,\n> = `event ${name}(${parameters})`\n\n/** @internal */\nexport type IsEventSignature<signature extends string> =\n  signature extends EventSignature<infer name> ? IsName<name> : false\n\n/** @internal */\nexport type FunctionSignature<\n  name extends string = string,\n  tail extends string = string,\n> = `function ${name}(${tail}`\nexport type IsFunctionSignature<signature> =\n  signature extends FunctionSignature<infer name>\n    ? IsName<name> extends true\n      ? signature extends ValidFunctionSignatures\n        ? true\n        : // Check that `Parameters` is not absorbing other types (e.g. `returns`)\n          signature extends `function ${string}(${infer parameters})`\n          ? parameters extends InvalidFunctionParameters\n            ? false\n            : true\n          : false\n      : false\n    : false\n/** @internal */\nexport type Scope = 'public' | 'external' // `internal` or `private` functions wouldn't make it to ABI so can ignore\n\n/** @internal */\nexport type Returns = `returns (${string})` | `returns(${string})`\n\n// Almost all valid function signatures, except `function ${string}(${infer parameters})` since `parameters` can absorb returns\n/** @internal */\nexport type ValidFunctionSignatures =\n  | `function ${string}()`\n  // basic\n  | `function ${string}() ${Returns}`\n  | `function ${string}() ${abitype.AbiStateMutability}`\n  | `function ${string}() ${Scope}`\n  // combinations\n  | `function ${string}() ${abitype.AbiStateMutability} ${Returns}`\n  | `function ${string}() ${Scope} ${Returns}`\n  | `function ${string}() ${Scope} ${abitype.AbiStateMutability}`\n  | `function ${string}() ${Scope} ${abitype.AbiStateMutability} ${Returns}`\n  // Parameters\n  | `function ${string}(${string}) ${Returns}`\n  | `function ${string}(${string}) ${abitype.AbiStateMutability}`\n  | `function ${string}(${string}) ${Scope}`\n  | `function ${string}(${string}) ${abitype.AbiStateMutability} ${Returns}`\n  | `function ${string}(${string}) ${Scope} ${Returns}`\n  | `function ${string}(${string}) ${Scope} ${abitype.AbiStateMutability}`\n  | `function ${string}(${string}) ${Scope} ${abitype.AbiStateMutability} ${Returns}`\n\n/** @internal */\nexport type StructSignature<\n  name extends string = string,\n  properties extends string = string,\n> = `struct ${name} {${properties}}`\n\n/** @internal */\nexport type IsStructSignature<signature extends string> =\n  signature extends StructSignature<infer name> ? IsName<name> : false\n\n/** @internal */\nexport type ConstructorSignature<tail extends string = string> =\n  `constructor(${tail}`\n\n/** @internal */\nexport type IsConstructorSignature<signature> =\n  signature extends ConstructorSignature\n    ? signature extends ValidConstructorSignatures\n      ? true\n      : false\n    : false\n\n/** @internal */\nexport type ValidConstructorSignatures =\n  | `constructor(${string})`\n  | `constructor(${string}) payable`\n\n/** @internal */\nexport type FallbackSignature<abiStateMutability extends '' | ' payable' = ''> =\n  `fallback() external${abiStateMutability}`\n\n/** @internal */\nexport type ReceiveSignature = 'receive() external payable'\n\n// TODO: Maybe use this for signature validation one day\n// https://twitter.com/devanshj__/status/1610423724708343808\n/** @internal */\nexport type IsSignature<type extends string> =\n  | (IsErrorSignature<type> extends true ? true : never)\n  | (IsEventSignature<type> extends true ? true : never)\n  | (IsFunctionSignature<type> extends true ? true : never)\n  | (IsStructSignature<type> extends true ? true : never)\n  | (IsConstructorSignature<type> extends true ? true : never)\n  | (type extends FallbackSignature ? true : never)\n  | (type extends ReceiveSignature ? true : never) extends infer condition\n  ? [condition] extends [never]\n    ? false\n    : true\n  : false\n\n/** @internal */\nexport type Signature<\n  string1 extends string,\n  string2 extends string | unknown = unknown,\n> = IsSignature<string1> extends true\n  ? string1\n  : string extends string1 // if exactly `string` (not narrowed), then pass through as valid\n    ? string1\n    : TypeErrorMessage<`Signature \"${string1}\" is invalid${string2 extends string\n        ? ` at position ${string2}`\n        : ''}.`>\n\n/** @internal */\nexport type Signatures<signatures extends readonly string[]> = {\n  [key in keyof signatures]: Signature<signatures[key], key>\n}\n\n/** @internal */\nexport type IsName<name extends string> = name extends ''\n  ? false\n  : ValidateName<name> extends name\n    ? true\n    : false\n\n/** @internal */\nexport type ValidateName<\n  name extends string,\n  checkCharacters extends boolean = false,\n> = name extends `${string}${' '}${string}`\n  ? TypeErrorMessage<`Identifier \"${name}\" cannot contain whitespace.`>\n  : IsSolidityKeyword<name> extends true\n    ? TypeErrorMessage<`\"${name}\" is a protected Solidity keyword.`>\n    : name extends `${number}`\n      ? TypeErrorMessage<`Identifier \"${name}\" cannot be a number string.`>\n      : name extends `${number}${string}`\n        ? TypeErrorMessage<`Identifier \"${name}\" cannot start with a number.`>\n        : checkCharacters extends true\n          ? IsValidCharacter<name> extends true\n            ? name\n            : TypeErrorMessage<`\"${name}\" contains invalid character.`>\n          : name\n\n/** @internal */\nexport type IsSolidityKeyword<type extends string> =\n  type extends SolidityKeywords ? true : false\n\n/** @internal */\nexport type SolidityKeywords =\n  | 'after'\n  | 'alias'\n  | 'anonymous'\n  | 'apply'\n  | 'auto'\n  | 'byte'\n  | 'calldata'\n  | 'case'\n  | 'catch'\n  | 'constant'\n  | 'copyof'\n  | 'default'\n  | 'defined'\n  | 'error'\n  | 'event'\n  | 'external'\n  | 'false'\n  | 'final'\n  | 'function'\n  | 'immutable'\n  | 'implements'\n  | 'in'\n  | 'indexed'\n  | 'inline'\n  | 'internal'\n  | 'let'\n  | 'mapping'\n  | 'match'\n  | 'memory'\n  | 'mutable'\n  | 'null'\n  | 'of'\n  | 'override'\n  | 'partial'\n  | 'private'\n  | 'promise'\n  | 'public'\n  | 'pure'\n  | 'reference'\n  | 'relocatable'\n  | 'return'\n  | 'returns'\n  | 'sizeof'\n  | 'static'\n  | 'storage'\n  | 'struct'\n  | 'super'\n  | 'supports'\n  | 'switch'\n  | 'this'\n  | 'true'\n  | 'try'\n  | 'typedef'\n  | 'typeof'\n  | 'var'\n  | 'view'\n  | 'virtual'\n  | `address${`[${string}]` | ''}`\n  | `bool${`[${string}]` | ''}`\n  | `string${`[${string}]` | ''}`\n  | `tuple${`[${string}]` | ''}`\n  | `bytes${number | ''}${`[${string}]` | ''}`\n  | `${'u' | ''}int${number | ''}${`[${string}]` | ''}`\n\n/** @internal */\nexport type IsValidCharacter<character extends string> =\n  character extends `${ValidCharacters}${infer tail}`\n    ? tail extends ''\n      ? true\n      : IsValidCharacter<tail>\n    : false\n\n// biome-ignore format: no formatting\n/** @internal */\nexport type ValidCharacters =\n  // uppercase letters\n  | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z'\n  // lowercase letters\n  | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z'\n  // numbers\n  | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n  // special characters\n  | '_' | '$'\n\n// Template string inference can absorb `returns`:\n// type Result = `function foo(string) return s (uint256)` extends `function ${string}(${infer Parameters})` ? Parameters : never\n// //   ^? type Result = \"string ) return s (uint256\"\n// So we need to validate against `returns` keyword with all combinations of whitespace\n/** @internal */\nexport type InvalidFunctionParameters =\n  | `${string}${MangledReturns} (${string}`\n  | `${string}) ${MangledReturns}${string}`\n  | `${string})${string}${MangledReturns}${string}(${string}`\n\n// r_e_t_u_r_n_s\n/** @internal */\nexport type MangledReturns =\n  // Single\n  | `r${string}eturns`\n  | `re${string}turns`\n  | `ret${string}urns`\n  | `retu${string}rns`\n  | `retur${string}ns`\n  | `return${string}s`\n  // Double\n  // `r_e*`\n  | `r${string}e${string}turns`\n  | `r${string}et${string}urns`\n  | `r${string}etu${string}rns`\n  | `r${string}etur${string}ns`\n  | `r${string}eturn${string}s`\n  // `re_t*`\n  | `re${string}t${string}urns`\n  | `re${string}tu${string}rns`\n  | `re${string}tur${string}ns`\n  | `re${string}turn${string}s`\n  // `ret_u*`\n  | `ret${string}u${string}rns`\n  | `ret${string}ur${string}ns`\n  | `ret${string}urn${string}s`\n  // `retu_r*`\n  | `retu${string}r${string}ns`\n  | `retu${string}rn${string}s`\n  // `retur_n*`\n  | `retur${string}n${string}s`\n  // Triple\n  // `r_e_t*`\n  | `r${string}e${string}t${string}urns`\n  | `r${string}e${string}tu${string}rns`\n  | `r${string}e${string}tur${string}ns`\n  | `r${string}e${string}turn${string}s`\n  // `re_t_u*`\n  | `re${string}t${string}u${string}rns`\n  | `re${string}t${string}ur${string}ns`\n  | `re${string}t${string}urn${string}s`\n  // `ret_u_r*`\n  | `ret${string}u${string}r${string}ns`\n  | `ret${string}u${string}rn${string}s`\n  // `retu_r_n*`\n  | `retu${string}r${string}n${string}s`\n  // Quadruple\n  // `r_e_t_u*`\n  | `r${string}e${string}t${string}u${string}rns`\n  | `r${string}e${string}t${string}ur${string}ns`\n  | `r${string}e${string}t${string}urn${string}s`\n  // `re_t_u_r*`\n  | `re${string}t${string}u${string}r${string}ns`\n  | `re${string}t${string}u${string}rn${string}s`\n  // `ret_u_r_n*`\n  | `ret${string}u${string}r${string}n${string}s`\n  // Quintuple\n  // `r_e_t_u_r*`\n  | `r${string}e${string}t${string}u${string}r${string}ns`\n  | `r${string}e${string}t${string}u${string}rn${string}s`\n  // `re_t_u_r_n*`\n  | `re${string}t${string}u${string}r${string}n${string}s`\n  // Sextuple\n  // `r_e_t_u_r_n_s`\n  | `r${string}e${string}t${string}u${string}r${string}n${string}s`\n\n/** @internal */\nexport type Widen<type> =\n  | ([unknown] extends [type] ? unknown : never)\n  | (type extends Function ? type : never)\n  | (type extends abitype.ResolvedRegister['bigIntType'] ? bigint : never)\n  | (type extends boolean ? boolean : never)\n  | (type extends abitype.ResolvedRegister['intType'] ? number : never)\n  | (type extends string\n      ? type extends abitype.ResolvedRegister['addressType']\n        ? abitype.ResolvedRegister['addressType']\n        : type extends abitype.ResolvedRegister['bytesType']['inputs']\n          ? abitype.ResolvedRegister['bytesType']\n          : string\n      : never)\n  | (type extends readonly [] ? readonly [] : never)\n  | (type extends Record<string, unknown>\n      ? { [K in keyof type]: Widen<type[K]> }\n      : never)\n  | (type extends { length: number }\n      ? {\n          [K in keyof type]: Widen<type[K]>\n        } extends infer Val extends readonly unknown[]\n        ? readonly [...Val]\n        : never\n      : never)\n\n/** @internal */\nexport function normalizeSignature(signature: string): string {\n  let active = true\n  let current = ''\n  let level = 0\n  let result = ''\n  let valid = false\n\n  for (let i = 0; i < signature.length; i++) {\n    const char = signature[i]!\n\n    // If the character is a separator, we want to reactivate.\n    if (['(', ')', ','].includes(char)) active = true\n\n    // If the character is a \"level\" token, we want to increment/decrement.\n    if (char === '(') level++\n    if (char === ')') level--\n\n    // If we aren't active, we don't want to mutate the result.\n    if (!active) continue\n\n    // If level === 0, we are at the definition level.\n    if (level === 0) {\n      if (char === ' ' && ['event', 'function', 'error', ''].includes(result))\n        result = ''\n      else {\n        result += char\n\n        // If we are at the end of the definition, we must be finished.\n        if (char === ')') {\n          valid = true\n          break\n        }\n      }\n\n      continue\n    }\n\n    // Ignore spaces\n    if (char === ' ') {\n      // If the previous character is a separator, and the current section isn't empty, we want to deactivate.\n      if (signature[i - 1] !== ',' && current !== ',' && current !== ',(') {\n        current = ''\n        active = false\n      }\n      continue\n    }\n\n    result += char\n    current += char\n  }\n\n  if (!valid) throw new Errors.BaseError('Unable to normalize signature.')\n\n  return result\n}\n\n/** @internal */\nexport declare namespace normalizeSignature {\n  export type ErrorType = Errors.BaseError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function isArgOfType(\n  arg: unknown,\n  abiParameter: AbiParameters.Parameter,\n): boolean {\n  const argType = typeof arg\n  const abiParameterType = abiParameter.type\n  switch (abiParameterType) {\n    case 'address':\n      return Address.validate(arg as Address.Address, { strict: false })\n    case 'bool':\n      return argType === 'boolean'\n    case 'function':\n      return argType === 'string'\n    case 'string':\n      return argType === 'string'\n    default: {\n      if (abiParameterType === 'tuple' && 'components' in abiParameter)\n        return Object.values(abiParameter.components).every(\n          (component, index) => {\n            return isArgOfType(\n              Object.values(arg as unknown[] | Record<string, unknown>)[index],\n              component as AbiParameters.Parameter,\n            )\n          },\n        )\n\n      // `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n      // https://regexr.com/6v8hp\n      if (\n        /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(\n          abiParameterType,\n        )\n      )\n        return argType === 'number' || argType === 'bigint'\n\n      // `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n      // https://regexr.com/6va55\n      if (/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(abiParameterType))\n        return argType === 'string' || arg instanceof Uint8Array\n\n      // fixed-length (`<type>[M]`) and dynamic (`<type>[]`) arrays\n      // https://regexr.com/6va6i\n      if (/[a-z]+[1-9]{0,3}(\\[[0-9]{0,}\\])+$/.test(abiParameterType)) {\n        return (\n          Array.isArray(arg) &&\n          arg.every((x: unknown) =>\n            isArgOfType(x, {\n              ...abiParameter,\n              // Pop off `[]` or `[M]` from end of type\n              type: abiParameterType.replace(/(\\[[0-9]{0,}\\])$/, ''),\n            } as AbiParameters.Parameter),\n          )\n        )\n      }\n\n      return false\n    }\n  }\n}\n\n/** @internal */\nexport function getAmbiguousTypes(\n  sourceParameters: readonly AbiParameters.Parameter[],\n  targetParameters: readonly AbiParameters.Parameter[],\n  args: ExtractArgs,\n): AbiParameters.Parameter['type'][] | undefined {\n  for (const parameterIndex in sourceParameters) {\n    const sourceParameter = sourceParameters[parameterIndex]!\n    const targetParameter = targetParameters[parameterIndex]!\n\n    if (\n      sourceParameter.type === 'tuple' &&\n      targetParameter.type === 'tuple' &&\n      'components' in sourceParameter &&\n      'components' in targetParameter\n    )\n      return getAmbiguousTypes(\n        sourceParameter.components,\n        targetParameter.components,\n        (args as any)[parameterIndex],\n      )\n\n    const types = [sourceParameter.type, targetParameter.type]\n\n    const ambiguous = (() => {\n      if (types.includes('address') && types.includes('bytes20')) return true\n      if (types.includes('address') && types.includes('string'))\n        return Address.validate(args[parameterIndex] as Address.Address, {\n          strict: false,\n        })\n      if (types.includes('address') && types.includes('bytes'))\n        return Address.validate(args[parameterIndex] as Address.Address, {\n          strict: false,\n        })\n      return false\n    })()\n\n    if (ambiguous) return types\n  }\n\n  return\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as AbiItem from './AbiItem.js'\nimport * as AbiParameters from './AbiParameters.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type * as internal from './internal/abiConstructor.js'\nimport type { IsNarrowable } from './internal/types.js'\n\n/** Root type for an {@link ox#AbiItem.AbiItem} with a `constructor` type. */\nexport type AbiConstructor = abitype.AbiConstructor\n\n/**\n * ABI-decodes the provided constructor input (`inputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from('constructor(address, uint256)')\n *\n * const bytecode = '0x...'\n *\n * const data = AbiConstructor.encode(constructor, {\n *   bytecode,\n *   args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n *\n * const decoded = AbiConstructor.decode(constructor, { // [!code focus]\n *   bytecode, // [!code focus]\n *   data, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object as a parameter to `AbiConstructor.decode`.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiConstructor } from 'ox'\n *\n * const abi = Abi.from([...])\n *\n * const data = AbiConstructor.encode(abi, {\n *   bytecode: '0x...',\n *   args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n *\n * const decoded = AbiConstructor.decode(abi, { // [!code focus]\n *   bytecode: '0x...', // [!code focus]\n *   data, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param abiConstructor - The ABI Constructor to decode.\n * @param options - Decoding options.\n * @returns The decoded constructor inputs.\n */\nexport function decode<\n  const abi extends Abi.Abi | readonly unknown[],\n  abiConstructor extends\n    AbiConstructor = fromAbi.ReturnType<abi> extends AbiConstructor\n    ? fromAbi.ReturnType<abi>\n    : never,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  options: decode.Options,\n): decode.ReturnType<abiConstructor>\nexport function decode<const abiConstructor extends AbiConstructor>(\n  abiConstructor: abiConstructor | AbiConstructor,\n  options: decode.Options,\n): decode.ReturnType<abiConstructor>\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decode(\n  ...parameters:\n    | [abi: Abi.Abi | readonly unknown[], options: decode.Options]\n    | [abiConstructor: AbiConstructor, options: decode.Options]\n): decode.ReturnType {\n  const [abiConstructor, options] = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, options] = parameters as [\n        Abi.Abi | readonly unknown[],\n        decode.Options,\n      ]\n      return [fromAbi(abi), options] as [AbiConstructor, decode.Options]\n    }\n    return parameters as [AbiConstructor, decode.Options]\n  })()\n\n  const { bytecode } = options\n  if (abiConstructor.inputs?.length === 0) return undefined\n  const data = options.data.replace(bytecode, '0x') as Hex.Hex\n  return AbiParameters.decode(abiConstructor.inputs, data)\n}\n\nexport declare namespace decode {\n  interface Options {\n    /** The bytecode of the contract. */\n    bytecode: Hex.Hex\n    /** The encoded constructor. */\n    data: Hex.Hex\n  }\n\n  type ReturnType<abiConstructor extends AbiConstructor = AbiConstructor> =\n    | (abiConstructor['inputs']['length'] extends 0\n        ? undefined\n        : abitype.AbiParametersToPrimitiveTypes<abiConstructor['inputs']>)\n    | (IsNarrowable<abiConstructor, AbiConstructor> extends true\n        ? never\n        : undefined)\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes the provided constructor input (`inputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from('constructor(address, uint256)')\n *\n * const data = AbiConstructor.encode(constructor, {\n *   bytecode: '0x...',\n *   args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object as a parameter to `AbiConstructor.encode`.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiConstructor } from 'ox'\n *\n * const abi = Abi.from([...])\n *\n * const data = AbiConstructor.encode(abi, { // [!code focus]\n *   bytecode: '0x...', // [!code focus]\n *   args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n], // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiConstructor.encode` to encode the constructor of a contract and deploy it.\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { AbiConstructor, Hex } from 'ox'\n *\n * // 1. Instantiate the ABI Constructor.\n * const constructor = AbiConstructor.from(\n *   'constructor(address owner, uint256 amount)',\n * )\n *\n * // 2. Encode the ABI Constructor.\n * const data = AbiConstructor.encode(constructor, {\n *   bytecode: '0x...',\n *   args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n *\n * // 3. Deploy the contract.\n * const hash = await window.ethereum!.request({\n *   method: 'eth_sendTransaction',\n *   params: [{ data }],\n * })\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiConstructor - The ABI Constructor to encode.\n * @param options - Encoding options.\n * @returns The encoded constructor.\n */\nexport function encode<\n  const abi extends Abi.Abi | readonly unknown[],\n  abiConstructor extends\n    AbiConstructor = fromAbi.ReturnType<abi> extends AbiConstructor\n    ? fromAbi.ReturnType<abi>\n    : never,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  options: encode.Options<abiConstructor>,\n): encode.ReturnType\nexport function encode<const abiConstructor extends AbiConstructor>(\n  abiConstructor: abiConstructor | AbiConstructor,\n  options: encode.Options<abiConstructor>,\n): encode.ReturnType\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encode(\n  ...parameters:\n    | [abi: Abi.Abi | readonly unknown[], options: encode.Options]\n    | [abiConstructor: AbiConstructor, options: encode.Options]\n): encode.ReturnType {\n  const [abiConstructor, options] = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, options] = parameters as [\n        Abi.Abi | readonly unknown[],\n        encode.Options,\n      ]\n      return [fromAbi(abi), options] as [AbiConstructor, encode.Options]\n    }\n\n    return parameters as [AbiConstructor, encode.Options]\n  })()\n\n  const { bytecode, args } = options\n  return Hex.concat(\n    bytecode,\n    abiConstructor.inputs?.length && args?.length\n      ? AbiParameters.encode(abiConstructor.inputs, args as readonly unknown[])\n      : '0x',\n  )\n}\n\nexport declare namespace encode {\n  type Options<\n    abiConstructor extends AbiConstructor = AbiConstructor,\n    ///\n    args extends abitype.AbiParametersToPrimitiveTypes<\n      abiConstructor['inputs']\n    > = abitype.AbiParametersToPrimitiveTypes<abiConstructor['inputs']>,\n  > = {\n    /** The bytecode of the contract. */\n    bytecode: Hex.Hex\n    /** The constructor arguments to encode. */\n    args?: args | undefined\n  } & (readonly [] extends args\n    ? {}\n    : {\n        /** The constructor arguments to encode. */\n        args: args\n      })\n\n  type ReturnType = Hex.Hex\n\n  type ErrorType =\n    | Hex.concat.ErrorType\n    | AbiParameters.encode.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function format<const abiConstructor extends AbiConstructor>(\n  abiConstructor: abiConstructor,\n): format.ReturnType<abiConstructor>\n/**\n * Formats an {@link ox#AbiConstructor.AbiConstructor} into a **Human Readable ABI Function**.\n *\n * @example\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const formatted = AbiConstructor.format({\n *   inputs: [\n *     { name: 'owner', type: 'address' },\n *   ],\n *   payable: false,\n *   stateMutability: 'nonpayable',\n *   type: 'constructor',\n * })\n *\n * formatted\n * //    ^?\n *\n *\n * ```\n *\n * @param abiConstructor - The ABI Constructor to format.\n * @returns The formatted ABI Constructor.\n */\nexport function format(abiConstructor: AbiConstructor): string\n/** @internal */\nexport function format(abiConstructor: AbiConstructor): format.ReturnType {\n  return abitype.formatAbiItem(abiConstructor)\n}\n\nexport declare namespace format {\n  type ReturnType<abiConstructor extends AbiConstructor = AbiConstructor> =\n    abitype.FormatAbiItem<abiConstructor>\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function from<\n  const abiConstructor extends AbiConstructor | string | readonly string[],\n>(\n  abiConstructor: (abiConstructor | string | readonly string[]) &\n    (\n      | (abiConstructor extends string\n          ? internal.Signature<abiConstructor>\n          : never)\n      | (abiConstructor extends readonly string[]\n          ? internal.Signatures<abiConstructor>\n          : never)\n      | AbiConstructor\n    ),\n): from.ReturnType<abiConstructor>\n/**\n * Parses an arbitrary **JSON ABI Constructor** or **Human Readable ABI Constructor** into a typed {@link ox#AbiConstructor.AbiConstructor}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from({\n *   inputs: [\n *     { name: 'owner', type: 'address' },\n *   ],\n *   payable: false,\n *   stateMutability: 'nonpayable',\n *   type: 'constructor',\n * })\n *\n * constructor\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from(\n *   'constructor(address owner)' // [!code hl]\n * )\n *\n * constructor\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from([\n *   'struct Foo { address owner; uint256 amount; }', // [!code hl]\n *   'constructor(Foo foo)',\n * ])\n *\n * constructor\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiConstructor - The ABI Constructor to parse.\n * @returns Typed ABI Constructor.\n */\nexport function from(\n  abiConstructor: AbiConstructor | string | readonly string[],\n): AbiConstructor\n/** @internal */\nexport function from(\n  abiConstructor: AbiConstructor | string | readonly string[],\n): from.ReturnType {\n  return AbiItem.from(abiConstructor as AbiConstructor)\n}\n\nexport declare namespace from {\n  type ReturnType<\n    abiConstructor extends\n      | AbiConstructor\n      | string\n      | readonly string[] = AbiConstructor,\n  > = AbiItem.from.ReturnType<abiConstructor>\n\n  type ErrorType = AbiItem.from.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function fromAbi<const abi extends Abi.Abi | readonly unknown[]>(\n  abi: abi | Abi.Abi | readonly unknown[],\n): fromAbi.ReturnType<abi>\n/**\n * Extracts an {@link ox#AbiConstructor.AbiConstructor} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Events can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiConstructor } from 'ox'\n *\n * const abi = Abi.from([\n *   'constructor(address owner)',\n *   'function foo()',\n *   'event Transfer(address owner, address to, uint256 tokenId)',\n *   'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiConstructor.fromAbi(abi) // [!code focus]\n * //    ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @returns The ABI constructor.\n */\nexport function fromAbi(abi: Abi.Abi | readonly unknown[]): AbiConstructor\n/** @internal */\nexport function fromAbi(abi: Abi.Abi | readonly unknown[]): fromAbi.ReturnType {\n  const item = (abi as Abi.Abi).find((item) => item.type === 'constructor')\n  if (!item) throw new AbiItem.NotFoundError({ name: 'constructor' })\n  return item\n}\n\nexport declare namespace fromAbi {\n  type ReturnType<abi extends Abi.Abi | readonly unknown[] = Abi.Abi> = Extract<\n    abi[number],\n    { type: 'constructor' }\n  >\n\n  type ErrorType = AbiItem.NotFoundError | Errors.GlobalErrorType\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as AbiItem from './AbiItem.js'\nimport * as AbiParameters from './AbiParameters.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type * as internal from './internal/abiFunction.js'\nimport type * as AbiItem_internal from './internal/abiItem.js'\nimport type * as AbiParameters_internal from './internal/abiParameters.js'\nimport type { IsNarrowable } from './internal/types.js'\n\n/** Root type for an {@link ox#AbiItem.AbiItem} with a `function` type. */\nexport type AbiFunction = abitype.AbiFunction & {\n  hash?: Hex.Hex | undefined\n  overloads?: readonly AbiFunction[] | undefined\n}\n\n/**\n * Extracts an {@link ox#AbiFunction.AbiFunction} item from an {@link ox#Abi.Abi}, given a name.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n *   'function foo(string)',\n *   'function bar(uint256)',\n * ])\n *\n * type Foo = AbiFunction.FromAbi<typeof abi, 'foo'>\n * //   ^?\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type FromAbi<\n  abi extends Abi.Abi,\n  name extends ExtractNames<abi>,\n> = abitype.ExtractAbiFunction<abi, name>\n\n/**\n * Extracts the names of all {@link ox#AbiFunction.AbiFunction} items in an {@link ox#Abi.Abi}.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n *   'function foo(string)',\n *   'function bar(uint256)',\n * ])\n *\n * type names = AbiFunction.Name<typeof abi>\n * //   ^?\n *\n *\n * ```\n */\nexport type Name<abi extends Abi.Abi | readonly unknown[] = Abi.Abi> =\n  abi extends Abi.Abi ? ExtractNames<abi> : string\n\nexport type ExtractNames<\n  abi extends Abi.Abi,\n  abiStateMutability extends\n    abitype.AbiStateMutability = abitype.AbiStateMutability,\n> = abitype.ExtractAbiFunctionNames<abi, abiStateMutability>\n\n/**\n * ABI-decodes function arguments according to the ABI Item's input types (`inputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from('function approve(address, uint256)')\n *\n * const data = AbiFunction.encodeData(\n *   approve,\n *   ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n * // '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n *\n * const input = AbiFunction.decodeData(approve, data) // [!code focus]\n * // @log: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object and a function name as parameters to {@link ox#AbiFunction.(decodeData:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([...])\n * const data = '0x...\n *\n * const input = AbiFunction.decodeData(\n *   abi, // [!code focus]\n *   'approve', // [!code focus]\n *   data\n * )\n * // @log: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * ```\n *\n * @param abiFunction - The ABI Item to decode.\n * @param data - The data to decode.\n */\nexport function decodeData<\n  const abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n  const args extends\n    | AbiItem_internal.ExtractArgs<abi, name>\n    | undefined = undefined,\n  //\n  abiFunction extends AbiFunction = AbiItem.fromAbi.ReturnType<\n    abi,\n    name,\n    args,\n    AbiFunction\n  >,\n  allNames = Name<abi>,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  name: Hex.Hex | (name extends allNames ? name : never),\n  data: Hex.Hex,\n): decodeData.ReturnType<abiFunction>\nexport function decodeData<const abiItem extends AbiFunction>(\n  abiFunction: abiItem | AbiFunction,\n  data: Hex.Hex,\n): decodeData.ReturnType<abiItem>\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decodeData(\n  ...parameters:\n    | [abi: Abi.Abi | readonly unknown[], name: Hex.Hex | string, data: Hex.Hex]\n    | [abiFunction: AbiFunction, data: Hex.Hex]\n) {\n  const [abiFunction, data] = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name, data] = parameters as [\n        Abi.Abi | readonly unknown[],\n        Hex.Hex | string,\n        Hex.Hex,\n      ]\n      return [fromAbi(abi, name), data]\n    }\n    return parameters as [AbiFunction, Hex.Hex]\n  })()\n\n  const { overloads } = abiFunction\n\n  if (Hex.size(data) < 4) throw new AbiItem.InvalidSelectorSizeError({ data })\n  if (abiFunction.inputs?.length === 0) return undefined\n\n  const item = overloads\n    ? fromAbi([abiFunction, ...overloads], data as never)\n    : abiFunction\n\n  if (Hex.size(data) <= 4) return undefined\n  return AbiParameters.decode(item.inputs, Hex.slice(data, 4))\n}\n\nexport declare namespace decodeData {\n  type ReturnType<abiFunction extends AbiFunction = AbiFunction> = IsNarrowable<\n    abiFunction,\n    AbiFunction\n  > extends true\n    ? abiFunction['inputs'] extends readonly []\n      ? undefined\n      :\n          | AbiParameters_internal.ToPrimitiveTypes<abiFunction['inputs']>\n          | (abiFunction['overloads'] extends readonly AbiFunction[]\n              ? AbiParameters_internal.ToPrimitiveTypes<\n                  abiFunction['overloads'][number]['inputs']\n                >\n              : never)\n    : unknown\n\n  type ErrorType =\n    | fromAbi.ErrorType\n    | AbiParameters.decode.ErrorType\n    | Hex.size.ErrorType\n    | Hex.slice.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * ABI-decodes a function's result according to the ABI Item's output types (`outputs`).\n *\n * :::tip\n *\n * This function is typically used to decode contract function return values (e.g. the response of an `eth_call` or the `input` property of a Transaction).\n *\n * See the [End-to-end Example](#end-to-end).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const data = '0x000000000000000000000000000000000000000000000000000000000000002a'\n *\n * const totalSupply = AbiFunction.from('function totalSupply() returns (uint256)')\n *\n * const output = AbiFunction.decodeResult(totalSupply, data)\n * // @log: 42n\n * ```\n *\n * @example\n * You can extract an ABI Function from a JSON ABI with {@link ox#AbiFunction.(fromAbi:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const data = '0x000000000000000000000000000000000000000000000000000000000000002a'\n *\n * const erc20Abi = Abi.from([...]) // [!code hl]\n * const totalSupply = AbiFunction.fromAbi(erc20Abi, 'totalSupply') // [!code hl]\n *\n * const output = AbiFunction.decodeResult(totalSupply, data)\n * // @log: 42n\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object and a function name as parameters to {@link ox#AbiFunction.(decodeResult:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const data = '0x000000000000000000000000000000000000000000000000000000000000002a'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const output = AbiFunction.decodeResult(\n *   erc20Abi, // [!code focus]\n *   'totalSupply', // [!code focus]\n *   data\n * )\n * // @log: 42n\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiFunction.decodeResult` to decode the result of a `balanceOf` contract call on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { Abi, AbiFunction } from 'ox'\n *\n * // 1. Extract the Function from the Contract's ABI.\n * const abi = Abi.from([\n *   // ...\n *   {\n *     name: 'balanceOf',\n *     type: 'function',\n *     inputs: [{ name: 'account', type: 'address' }],\n *     outputs: [{ name: 'balance', type: 'uint256' }],\n *     stateMutability: 'view',\n *   },\n *   // ...\n * ])\n * const balanceOf = AbiFunction.fromAbi(abi, 'balanceOf')\n *\n * // 2. Encode the Function Input.\n * const data = AbiFunction.encodeData(\n *   balanceOf,\n *   ['0xd2135CfB216b74109775236E36d4b433F1DF507B']\n * )\n *\n * // 3. Perform the Contract Call.\n * const response = await window.ethereum!.request({\n *   method: 'eth_call',\n *   params: [\n *     {\n *       data,\n *       to: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n *     },\n *   ],\n * })\n *\n * // 4. Decode the Function Output. // [!code focus]\n * const balance = AbiFunction.decodeResult(balanceOf, response) // [!code focus]\n * // @log: 42n\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiFunction - ABI Function to decode\n * @param data - ABI-encoded function output\n * @param options - Decoding options\n * @returns Decoded function output\n */\nexport function decodeResult<\n  const abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n  const args extends\n    | AbiItem_internal.ExtractArgs<abi, name>\n    | undefined = undefined,\n  //\n  abiFunction extends AbiFunction = AbiItem.fromAbi.ReturnType<\n    abi,\n    name,\n    args,\n    AbiFunction\n  >,\n  allNames = Name<abi>,\n  as extends 'Object' | 'Array' = 'Array',\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  name: Hex.Hex | (name extends allNames ? name : never),\n  data: Hex.Hex,\n  options?: decodeResult.Options<as> | undefined,\n): decodeResult.ReturnType<abiFunction, as>\nexport function decodeResult<\n  const abiFunction extends AbiFunction,\n  as extends 'Object' | 'Array' = 'Array',\n>(\n  abiFunction: abiFunction | AbiFunction,\n  data: Hex.Hex,\n  options?: decodeResult.Options<as> | undefined,\n): decodeResult.ReturnType<abiFunction, as>\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decodeResult(\n  ...parameters:\n    | [\n        abi: Abi.Abi | readonly unknown[],\n        name: Hex.Hex | string,\n        data: Hex.Hex,\n        options?: decodeResult.Options | undefined,\n      ]\n    | [\n        abiFunction: AbiFunction,\n        data: Hex.Hex,\n        options?: decodeResult.Options | undefined,\n      ]\n) {\n  const [abiFunction, data, options = {}] = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name, data, options] = parameters as [\n        Abi.Abi | readonly unknown[],\n        Hex.Hex | string,\n        Hex.Hex,\n        decodeResult.Options | undefined,\n      ]\n      return [fromAbi(abi, name), data, options]\n    }\n    return parameters as [\n      AbiFunction,\n      Hex.Hex,\n      decodeResult.Options | undefined,\n    ]\n  })()\n\n  const values = AbiParameters.decode(abiFunction.outputs, data, options)\n  if (values && Object.keys(values).length === 0) return undefined\n  if (values && Object.keys(values).length === 1) {\n    if (Array.isArray(values)) return values[0]\n    return Object.values(values)[0]\n  }\n  return values\n}\n\nexport declare namespace decodeResult {\n  type Options<as extends 'Object' | 'Array' = 'Array'> = {\n    /**\n     * Whether the decoded values should be returned as an `Object` or `Array`.\n     *\n     * @default \"Array\"\n     */\n    as?: as | 'Array' | 'Object' | undefined\n  }\n\n  type ReturnType<\n    abiFunction extends AbiFunction = AbiFunction,\n    as extends 'Object' | 'Array' = 'Array',\n  > = IsNarrowable<abiFunction, AbiFunction> extends true\n    ? abiFunction['outputs'] extends readonly []\n      ? undefined\n      : abiFunction['outputs'] extends readonly [\n            infer type extends abitype.AbiParameter,\n          ]\n        ? abitype.AbiParameterToPrimitiveType<type>\n        : AbiParameters.decode.ReturnType<\n              abiFunction['outputs'],\n              as\n            > extends infer types\n          ? types extends readonly []\n            ? undefined\n            : types extends readonly [infer type]\n              ? type\n              : types\n          : never\n    : unknown\n\n  type ErrorType = AbiParameters.decode.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes function arguments (`inputs`), prefixed with the 4 byte function selector.\n *\n * :::tip\n *\n * This function is typically used to encode a contract function and its arguments for contract calls (e.g. `data` parameter of an `eth_call` or `eth_sendTransaction`).\n *\n * See the [End-to-end Example](#end-to-end).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from('function approve(address, uint256)')\n *\n * const data = AbiFunction.encodeData( // [!code focus]\n *   approve, // [!code focus]\n *   ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n] // [!code focus]\n * ) // [!code focus]\n * // @log: '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n * ```\n *\n * @example\n * You can extract an ABI Function from a JSON ABI with {@link ox#AbiFunction.(fromAbi:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const erc20Abi = Abi.from([...]) // [!code hl]\n * const approve = AbiFunction.fromAbi(erc20Abi, 'approve') // [!code hl]\n *\n * const data = AbiFunction.encodeData(\n *   approve,\n *   ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n * // @log: '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can specify an entire ABI object and a function name as parameters to {@link ox#AbiFunction.(encodeData:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const erc20Abi = Abi.from([...])\n *\n * const data = AbiFunction.encodeData(\n *   erc20Abi, // [!code focus]\n *   'approve', // [!code focus]\n *   ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiFunction.encodeData` to encode the input of a `balanceOf` contract call on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { Abi, AbiFunction } from 'ox'\n *\n * // 1. Extract the Function from the Contract's ABI.\n * const abi = Abi.from([\n *   // ...\n *   {\n *     name: 'balanceOf',\n *     type: 'function',\n *     inputs: [{ name: 'account', type: 'address' }],\n *     outputs: [{ name: 'balance', type: 'uint256' }],\n *     stateMutability: 'view',\n *   },\n *   // ...\n * ])\n * const balanceOf = AbiFunction.fromAbi(abi, 'balanceOf')\n *\n * // 2. Encode the Function Input. // [!code focus]\n * const data = AbiFunction.encodeData( // [!code focus]\n *   balanceOf, // [!code focus]\n *   ['0xd2135CfB216b74109775236E36d4b433F1DF507B'] // [!code focus]\n * ) // [!code focus]\n *\n * // 3. Perform the Contract Call.\n * const response = await window.ethereum!.request({\n *   method: 'eth_call',\n *   params: [\n *     {\n *       data,\n *       to: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n *     },\n *   ],\n * })\n *\n * // 4. Decode the Function Output.\n * const balance = AbiFunction.decodeResult(balanceOf, response)\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiFunction - ABI Function to encode\n * @param args - Function arguments\n * @returns ABI-encoded function name and arguments\n */\nexport function encodeData<\n  const abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n  const args extends\n    | AbiItem_internal.ExtractArgs<abi, name>\n    | undefined = undefined,\n  //\n  abiFunction extends AbiFunction = AbiItem.fromAbi.ReturnType<\n    abi,\n    name,\n    args,\n    AbiFunction\n  >,\n  allNames = Name<abi>,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  name: Hex.Hex | (name extends allNames ? name : never),\n  ...args: encodeData.Args<abiFunction>\n): Hex.Hex\nexport function encodeData<const abiFunction extends AbiFunction>(\n  abiFunction: abiFunction | AbiFunction,\n  ...args: encodeData.Args<abiFunction>\n): Hex.Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encodeData(\n  ...parameters:\n    | [\n        abi: Abi.Abi | readonly unknown[],\n        name: Hex.Hex | string,\n        ...args: readonly unknown[],\n      ]\n    | [abiFunction: AbiFunction, ...args: readonly unknown[]]\n) {\n  const [abiFunction, args = []] = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name, args] = parameters as [\n        Abi.Abi | readonly unknown[],\n        Hex.Hex | string,\n        readonly unknown[],\n      ]\n      return [fromAbi(abi, name, { args }), args]\n    }\n    const [abiFunction, args] = parameters as [AbiFunction, readonly unknown[]]\n    return [abiFunction, args]\n  })()\n\n  const { overloads } = abiFunction\n\n  const item = overloads\n    ? (fromAbi([abiFunction as AbiFunction, ...overloads], abiFunction.name, {\n        args,\n      }) as AbiFunction)\n    : abiFunction\n\n  const selector = getSelector(item)\n\n  const data =\n    args.length > 0 ? AbiParameters.encode(item.inputs, args) : undefined\n\n  return data ? Hex.concat(selector, data) : selector\n}\n\nexport declare namespace encodeData {\n  type Args<abiFunction extends AbiFunction = AbiFunction> = IsNarrowable<\n    abiFunction,\n    AbiFunction\n  > extends true\n    ?\n        | (abitype.AbiParametersToPrimitiveTypes<\n            abiFunction['inputs']\n          > extends readonly []\n            ? []\n            : [abitype.AbiParametersToPrimitiveTypes<abiFunction['inputs']>])\n        | (abiFunction['overloads'] extends readonly AbiFunction[]\n            ? [\n                abitype.AbiParametersToPrimitiveTypes<\n                  abiFunction['overloads'][number]['inputs']\n                >,\n              ]\n            : [])\n    : readonly unknown[]\n\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes a function's result (`outputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const totalSupply = AbiFunction.from('function totalSupply() returns (uint256)')\n * const output = AbiFunction.decodeResult(totalSupply, '0x000000000000000000000000000000000000000000000000000000000000002a')\n * // 42n\n *\n * const data = AbiFunction.encodeResult(totalSupply, 42n) // [!code focus]\n * // @log: '0x000000000000000000000000000000000000000000000000000000000000002a'\n * ```\n *\n * @example\n * ### ABI-shorthand\n *\n * You can also specify an entire ABI object and a function name as parameters to {@link ox#AbiFunction.(encodeResult:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([...])\n *\n * const data = AbiFunction.encodeResult(\n *   abi, // [!code focus]\n *   'totalSupply', // [!code focus]\n *   42n\n * )\n * // @log: '0x000000000000000000000000000000000000000000000000000000000000002a'\n * ```\n *\n * @param abiFunction - The ABI item to encode the function output for.\n * @param output - The function output to encode.\n * @param options - Encoding options.\n * @returns The encoded function output.\n */\nexport function encodeResult<\n  const abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n  const args extends\n    | AbiItem_internal.ExtractArgs<abi, name>\n    | undefined = undefined,\n  as extends 'Object' | 'Array' = 'Array',\n  //\n  abiFunction extends AbiFunction = AbiItem.fromAbi.ReturnType<\n    abi,\n    name,\n    args,\n    AbiFunction\n  >,\n  allNames = Name<abi>,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  name: Hex.Hex | (name extends allNames ? name : never),\n  output: encodeResult.Output<abiFunction, as>,\n  options?: encodeResult.Options<as>,\n): Hex.Hex\nexport function encodeResult<\n  const abiFunction extends AbiFunction,\n  as extends 'Object' | 'Array' = 'Array',\n>(\n  abiFunction: abiFunction | AbiFunction,\n  output: encodeResult.Output<abiFunction, as>,\n  options?: encodeResult.Options<as>,\n): Hex.Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encodeResult(\n  ...parameters:\n    | [\n        abi: Abi.Abi | readonly unknown[],\n        name: Hex.Hex | string,\n        output: any,\n        options?: encodeResult.Options<any> | undefined,\n      ]\n    | [\n        abiFunction: AbiFunction,\n        output: any,\n        options?: encodeResult.Options<any> | undefined,\n      ]\n) {\n  const [abiFunction, output, options = {}] = (() => {\n    if (Array.isArray(parameters[0])) {\n      const [abi, name, output, options] = parameters as [\n        Abi.Abi | readonly unknown[],\n        Hex.Hex | string,\n        any,\n        encodeResult.Options<any> | undefined,\n      ]\n      return [fromAbi(abi, name), output, options]\n    }\n    return parameters as [\n      AbiFunction,\n      any,\n      encodeResult.Options<any> | undefined,\n    ]\n  })()\n\n  const { as = 'Array' } = options\n\n  const values = (() => {\n    if (abiFunction.outputs.length === 1) return [output]\n    if (Array.isArray(output)) return output\n    if (as === 'Object') return Object.values(output as any)\n    return [output]\n  })()\n\n  return AbiParameters.encode(abiFunction.outputs, values)\n}\n\nexport declare namespace encodeResult {\n  type Output<\n    abiFunction extends AbiFunction = AbiFunction,\n    as extends 'Object' | 'Array' = 'Array',\n  > = abiFunction['outputs'] extends readonly []\n    ? never\n    : abiFunction['outputs']['length'] extends 1\n      ? AbiParameters_internal.ToPrimitiveTypes<abiFunction['outputs']>[0]\n      : as extends 'Object'\n        ? AbiParameters_internal.ToObject<abiFunction['outputs']>\n        : AbiParameters_internal.ToPrimitiveTypes<abiFunction['outputs']>\n\n  type Options<as extends 'Object' | 'Array'> = {\n    as?: as | 'Object' | 'Array' | undefined\n  }\n\n  type ErrorType = AbiParameters.encode.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Formats an {@link ox#AbiFunction.AbiFunction} into a **Human Readable ABI Function**.\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const formatted = AbiFunction.format({\n *   type: 'function',\n *   name: 'approve',\n *   stateMutability: 'nonpayable',\n *   inputs: [\n *     {\n *       name: 'spender',\n *       type: 'address',\n *     },\n *     {\n *       name: 'amount',\n *       type: 'uint256',\n *     },\n *   ],\n *   outputs: [{ type: 'bool' }],\n * })\n *\n * formatted\n * //    ^?\n *\n *\n * ```\n *\n * @param abiFunction - The ABI Function to format.\n * @returns The formatted ABI Function.\n */\nexport function format<const abiFunction extends AbiFunction>(\n  abiFunction: abiFunction | AbiFunction,\n): abitype.FormatAbiItem<abiFunction> {\n  return abitype.formatAbiItem(abiFunction) as never\n}\n\nexport declare namespace format {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses an arbitrary **JSON ABI Function** or **Human Readable ABI Function** into a typed {@link ox#AbiFunction.AbiFunction}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from({\n *   type: 'function',\n *   name: 'approve',\n *   stateMutability: 'nonpayable',\n *   inputs: [\n *     {\n *       name: 'spender',\n *       type: 'address',\n *     },\n *     {\n *       name: 'amount',\n *       type: 'uint256',\n *     },\n *   ],\n *   outputs: [{ type: 'bool' }],\n * })\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from(\n *   'function approve(address spender, uint256 amount) returns (bool)' // [!code hl]\n * )\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from([\n *   'struct Foo { address spender; uint256 amount; }', // [!code hl]\n *   'function approve(Foo foo) returns (bool)',\n * ])\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiFunction - The ABI Function to parse.\n * @returns Typed ABI Function.\n */\nexport function from<\n  const abiFunction extends AbiFunction | string | readonly string[],\n>(\n  abiFunction: (abiFunction | AbiFunction | string | readonly string[]) &\n    (\n      | (abiFunction extends string ? internal.Signature<abiFunction> : never)\n      | (abiFunction extends readonly string[]\n          ? internal.Signatures<abiFunction>\n          : never)\n      | AbiFunction\n    ),\n  options: from.Options = {},\n): from.ReturnType<abiFunction> {\n  return AbiItem.from(abiFunction as AbiFunction, options) as never\n}\n\nexport declare namespace from {\n  type Options = {\n    /**\n     * Whether or not to prepare the extracted function (optimization for encoding performance).\n     * When `true`, the `hash` property is computed and included in the returned value.\n     *\n     * @default true\n     */\n    prepare?: boolean | undefined\n  }\n\n  type ReturnType<\n    abiFunction extends AbiFunction | string | readonly string[],\n  > = AbiItem.from.ReturnType<abiFunction>\n\n  type ErrorType = AbiItem.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Extracts an {@link ox#AbiFunction.AbiFunction} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Functions can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n *   'function foo()',\n *   'event Transfer(address owner, address to, uint256 tokenId)',\n *   'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiFunction.fromAbi(abi, 'foo') // [!code focus]\n * //    ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Functions can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n *   'function foo()',\n *   'event Transfer(address owner, address to, uint256 tokenId)',\n *   'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiFunction.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * //    ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Function from an `eth_call` RPC response or\n * from a Transaction `input`.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi<\n  const abi extends Abi.Abi | readonly unknown[],\n  name extends Name<abi>,\n  const args extends\n    | AbiItem_internal.ExtractArgs<abi, name>\n    | undefined = undefined,\n  //\n  allNames = Name<abi>,\n>(\n  abi: abi | Abi.Abi | readonly unknown[],\n  name: Hex.Hex | (name extends allNames ? name : never),\n  options?: AbiItem.fromAbi.Options<\n    abi,\n    name,\n    args,\n    AbiItem_internal.ExtractArgs<abi, name>\n  >,\n): AbiItem.fromAbi.ReturnType<abi, name, args, AbiFunction> {\n  const item = AbiItem.fromAbi(abi, name, options as any)\n  if (item.type !== 'function')\n    throw new AbiItem.NotFoundError({ name, type: 'function' })\n  return item as never\n}\n\nexport declare namespace fromAbi {\n  type ErrorType = AbiItem.fromAbi.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiFunction.AbiFunction}.\n *\n * Useful for computing function selectors for calldata.\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const selector = AbiFunction.getSelector('function ownerOf(uint256 tokenId)')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const selector = AbiFunction.getSelector({\n *   inputs: [{ type: 'uint256' }],\n *   name: 'ownerOf',\n *   outputs: [],\n *   stateMutability: 'view',\n *   type: 'function'\n * })\n * // @log: '0x6352211e'\n * ```\n *\n * @param abiItem - The ABI item to compute the selector for.\n * @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the function signature.\n */\nexport function getSelector(abiItem: string | AbiFunction): Hex.Hex {\n  return AbiItem.getSelector(abiItem)\n}\n\nexport declare namespace getSelector {\n  type ErrorType = AbiItem.getSelector.ErrorType | Errors.GlobalErrorType\n}\n", "import type { AbiStateMutability, Address, Narrow } from 'abitype'\nimport * as AbiConstructor from 'ox/AbiConstructor'\nimport * as AbiFunction from 'ox/AbiFunction'\n\nimport { parseAccount } from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { ethAddress, zeroAddress } from '../../constants/address.js'\nimport { deploylessCallViaBytecodeBytecode } from '../../constants/contracts.js'\nimport { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type { Call, Calls } from '../../types/calls.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { MulticallResults } from '../../types/multicall.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { Mutable } from '../../types/utils.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport { hexToBigInt } from '../../utils/index.js'\nimport {\n  type CreateAccessListErrorType,\n  createAccessList,\n} from './createAccessList.js'\nimport {\n  type SimulateBlocksErrorType,\n  type SimulateBlocksParameters,\n  simulateBlocks,\n} from './simulateBlocks.js'\n\nconst getBalanceCode =\n  '0x6080604052348015600e575f80fd5b5061016d8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063f8b2cb4f1461002d575b5f80fd5b610047600480360381019061004291906100db565b61005d565b604051610054919061011e565b60405180910390f35b5f8173ffffffffffffffffffffffffffffffffffffffff16319050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100aa82610081565b9050919050565b6100ba816100a0565b81146100c4575f80fd5b50565b5f813590506100d5816100b1565b92915050565b5f602082840312156100f0576100ef61007d565b5b5f6100fd848285016100c7565b91505092915050565b5f819050919050565b61011881610106565b82525050565b5f6020820190506101315f83018461010f565b9291505056fea26469706673582212203b9fe929fe995c7cf9887f0bdba8a36dd78e8b73f149b17d2d9ad7cd09d2dc6264736f6c634300081a0033'\n\nexport type SimulateCallsParameters<\n  calls extends readonly unknown[] = readonly unknown[],\n  account extends Account | Address | undefined = Account | Address | undefined,\n> = Omit<SimulateBlocksParameters, 'blocks' | 'returnFullTransactions'> & {\n  /** Account attached to the calls (msg.sender). */\n  account?: account | undefined\n  /** Calls to simulate. */\n  calls: Calls<Narrow<calls>>\n  /** State overrides. */\n  stateOverrides?: StateOverride | undefined\n  /** Whether to trace asset changes. */\n  traceAssetChanges?: boolean | undefined\n}\n\nexport type SimulateCallsReturnType<\n  calls extends readonly unknown[] = readonly unknown[],\n> = {\n  /** Asset changes. */\n  assetChanges: readonly {\n    token: {\n      address: Address\n      decimals?: number | undefined\n      symbol?: string | undefined\n    }\n    value: { pre: bigint; post: bigint; diff: bigint }\n  }[]\n  /** Block results. */\n  block: Block\n  /** Call results. */\n  results: MulticallResults<\n    Narrow<calls>,\n    true,\n    {\n      extraProperties: {\n        data: Hex\n        gasUsed: bigint\n        logs?: Log[] | undefined\n      }\n      error: Error\n      mutability: AbiStateMutability\n    }\n  >\n}\n\nexport type SimulateCallsErrorType =\n  | AbiFunction.encodeData.ErrorType\n  | AbiFunction.from.ErrorType\n  | CreateAccessListErrorType\n  | EncodeFunctionDataErrorType\n  | SimulateBlocksErrorType\n  | ErrorType\n\n/**\n * Simulates execution of a batch of calls.\n *\n * @param client - Client to use\n * @param parameters - {@link SimulateCallsParameters}\n * @returns Results. {@link SimulateCallsReturnType}\n *\n * @example\n * ```ts\n * import { createPublicClient, http, parseEther } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { simulateCalls } from 'viem/actions'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n *\n * const result = await simulateCalls(client, {\n *   account: '0x5a0b54d5dc17e482fe8b0bdca5320161b95fb929',\n *   calls: [{\n *     {\n *       data: '0xdeadbeef',\n *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *     },\n *     {\n *       to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n *       value: parseEther('1'),\n *     },\n *   ]\n * })\n * ```\n */\nexport async function simulateCalls<\n  const calls extends readonly unknown[],\n  chain extends Chain | undefined,\n  account extends Account | Address | undefined = undefined,\n>(\n  client: Client<Transport, chain>,\n  parameters: SimulateCallsParameters<calls, account>,\n): Promise<SimulateCallsReturnType<calls>> {\n  const {\n    blockNumber,\n    blockTag,\n    calls,\n    stateOverrides,\n    traceAssetChanges,\n    traceTransfers,\n    validation,\n  } = parameters\n\n  const account = parameters.account\n    ? parseAccount(parameters.account)\n    : undefined\n\n  if (traceAssetChanges && !account)\n    throw new BaseError(\n      '`account` is required when `traceAssetChanges` is true',\n    )\n\n  // Derive bytecode to extract ETH balance via a contract call.\n  const getBalanceData = account\n    ? AbiConstructor.encode(AbiConstructor.from('constructor(bytes, bytes)'), {\n        bytecode: deploylessCallViaBytecodeBytecode,\n        args: [\n          getBalanceCode,\n          AbiFunction.encodeData(\n            AbiFunction.from('function getBalance(address)'),\n            [account.address],\n          ),\n        ],\n      })\n    : undefined\n\n  // Fetch ERC20/721 addresses that were \"touched\" from the calls.\n  const assetAddresses = traceAssetChanges\n    ? await Promise.all(\n        parameters.calls.map(async (call: any) => {\n          if (!call.data && !call.abi) return\n          const { accessList } = await createAccessList(client, {\n            account: account!.address,\n            ...call,\n            data: call.abi ? encodeFunctionData(call) : call.data,\n          })\n          return accessList.map(({ address, storageKeys }) =>\n            storageKeys.length > 0 ? address : null,\n          )\n        }),\n      ).then((x) => x.flat().filter(Boolean))\n    : []\n\n  const blocks = await simulateBlocks(client, {\n    blockNumber,\n    blockTag: blockTag as undefined,\n    blocks: [\n      ...(traceAssetChanges\n        ? [\n            // ETH pre balances\n            {\n              calls: [{ data: getBalanceData }],\n              stateOverrides,\n            },\n\n            // Asset pre balances\n            {\n              calls: assetAddresses.map((address, i) => ({\n                abi: [\n                  AbiFunction.from(\n                    'function balanceOf(address) returns (uint256)',\n                  ),\n                ],\n                functionName: 'balanceOf',\n                args: [account!.address],\n                to: address,\n                from: zeroAddress,\n                nonce: i,\n              })),\n              stateOverrides: [\n                {\n                  address: zeroAddress,\n                  nonce: 0,\n                },\n              ],\n            },\n          ]\n        : []),\n\n      {\n        calls: [...calls, { to: zeroAddress }].map((call) => ({\n          ...(call as Call),\n          from: account?.address,\n        })) as any,\n        stateOverrides,\n      },\n\n      ...(traceAssetChanges\n        ? [\n            // ETH post balances\n            {\n              calls: [{ data: getBalanceData }],\n            },\n\n            // Asset post balances\n            {\n              calls: assetAddresses.map((address, i) => ({\n                abi: [\n                  AbiFunction.from(\n                    'function balanceOf(address) returns (uint256)',\n                  ),\n                ],\n                functionName: 'balanceOf',\n                args: [account!.address],\n                to: address,\n                from: zeroAddress,\n                nonce: i,\n              })),\n              stateOverrides: [\n                {\n                  address: zeroAddress,\n                  nonce: 0,\n                },\n              ],\n            },\n\n            // Decimals\n            {\n              calls: assetAddresses.map((address, i) => ({\n                to: address,\n                abi: [\n                  AbiFunction.from('function decimals() returns (uint256)'),\n                ],\n                functionName: 'decimals',\n                from: zeroAddress,\n                nonce: i,\n              })),\n              stateOverrides: [\n                {\n                  address: zeroAddress,\n                  nonce: 0,\n                },\n              ],\n            },\n\n            // Token URI\n            {\n              calls: assetAddresses.map((address, i) => ({\n                to: address,\n                abi: [\n                  AbiFunction.from(\n                    'function tokenURI(uint256) returns (string)',\n                  ),\n                ],\n                functionName: 'tokenURI',\n                args: [0n],\n                from: zeroAddress,\n                nonce: i,\n              })),\n              stateOverrides: [\n                {\n                  address: zeroAddress,\n                  nonce: 0,\n                },\n              ],\n            },\n\n            // Symbols\n            {\n              calls: assetAddresses.map((address, i) => ({\n                to: address,\n                abi: [AbiFunction.from('function symbol() returns (string)')],\n                functionName: 'symbol',\n                from: zeroAddress,\n                nonce: i,\n              })),\n              stateOverrides: [\n                {\n                  address: zeroAddress,\n                  nonce: 0,\n                },\n              ],\n            },\n          ]\n        : []),\n    ],\n    traceTransfers,\n    validation,\n  })\n\n  const block_results = traceAssetChanges ? blocks[2] : blocks[0]\n  const [\n    block_ethPre,\n    block_assetsPre,\n    ,\n    block_ethPost,\n    block_assetsPost,\n    block_decimals,\n    block_tokenURI,\n    block_symbols,\n  ] = traceAssetChanges ? blocks : []\n\n  // Extract call results from the simulation.\n  const { calls: block_calls, ...block } = block_results\n  const results = block_calls.slice(0, -1) ?? []\n\n  // Extract pre-execution ETH and asset balances.\n  const ethPre = block_ethPre?.calls ?? []\n  const assetsPre = block_assetsPre?.calls ?? []\n  const balancesPre = [...ethPre, ...assetsPre].map((call) =>\n    call.status === 'success' ? hexToBigInt(call.data) : null,\n  )\n\n  // Extract post-execution ETH and asset balances.\n  const ethPost = block_ethPost?.calls ?? []\n  const assetsPost = block_assetsPost?.calls ?? []\n  const balancesPost = [...ethPost, ...assetsPost].map((call) =>\n    call.status === 'success' ? hexToBigInt(call.data) : null,\n  )\n\n  // Extract asset symbols & decimals.\n  const decimals = (block_decimals?.calls ?? []).map((x) =>\n    x.status === 'success' ? x.result : null,\n  ) as (number | null)[]\n  const symbols = (block_symbols?.calls ?? []).map((x) =>\n    x.status === 'success' ? x.result : null,\n  ) as (string | null)[]\n  const tokenURI = (block_tokenURI?.calls ?? []).map((x) =>\n    x.status === 'success' ? x.result : null,\n  ) as (string | null)[]\n\n  const changes: Mutable<SimulateCallsReturnType<calls>['assetChanges']> = []\n  for (const [i, balancePost] of balancesPost.entries()) {\n    const balancePre = balancesPre[i]\n\n    if (typeof balancePost !== 'bigint') continue\n    if (typeof balancePre !== 'bigint') continue\n\n    const decimals_ = decimals[i - 1]\n    const symbol_ = symbols[i - 1]\n    const tokenURI_ = tokenURI[i - 1]\n\n    const token = (() => {\n      if (i === 0)\n        return {\n          address: ethAddress,\n          decimals: 18,\n          symbol: 'ETH',\n        }\n\n      return {\n        address: assetAddresses[i - 1]! as Address,\n        decimals: tokenURI_ || decimals_ ? Number(decimals_ ?? 1) : undefined,\n        symbol: symbol_ ?? undefined,\n      }\n    })()\n\n    if (changes.some((change) => change.token.address === token.address))\n      continue\n\n    changes.push({\n      token,\n      value: {\n        pre: balancePre,\n        post: balancePost,\n        diff: balancePost - balancePre,\n      },\n    })\n  }\n\n  return {\n    assetChanges: changes,\n    block,\n    results,\n  } as unknown as SimulateCallsReturnType<calls>\n}\n", "export const ethAddress = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' as const\n\nexport const zeroAddress = '0x0000000000000000000000000000000000000000' as const\n", "import type * as Abi from '../core/Abi.js'\nimport * as AbiParameters from '../core/AbiParameters.js'\nimport type * as Address from '../core/Address.js'\nimport * as Errors from '../core/Errors.js'\nimport * as Hex from '../core/Hex.js'\nimport type * as Signature from '../core/Signature.js'\n\n/** Unwrapped ERC-6492 signature. */\nexport type Unwrapped = {\n  /** Calldata to pass to the target address for counterfactual verification. */\n  data: Hex.Hex\n  /** The original signature. */\n  signature: Hex.Hex\n  /** The target address to use for counterfactual verification. */\n  to: Address.Address\n}\n\n/** Wrapped ERC-6492 signature. */\nexport type Wrapped = Hex.Hex\n\n/**\n * Magic bytes used to identify ERC-6492 wrapped signatures.\n */\nexport const magicBytes =\n  '0x6492649264926492649264926492649264926492649264926492649264926492' as const\n\n/**\n * Deployless ERC-6492 signature verification bytecode.\n */\nexport const universalSignatureValidatorBytecode =\n  '0x608060405234801561001057600080fd5b5060405161069438038061069483398101604081905261002f9161051e565b600061003c848484610048565b9050806000526001601ff35b60007f64926492649264926492649264926492649264926492649264926492649264926100748361040c565b036101e7576000606080848060200190518101906100929190610577565b60405192955090935091506000906001600160a01b038516906100b69085906105dd565b6000604051808303816000865af19150503d80600081146100f3576040519150601f19603f3d011682016040523d82523d6000602084013e6100f8565b606091505b50509050876001600160a01b03163b60000361016057806101605760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90610190908b9087906004016105f9565b602060405180830381865afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d19190610633565b6001600160e01b03191614945050505050610405565b6001600160a01b0384163b1561027a57604051630b135d3f60e11b808252906001600160a01b03861690631626ba7e9061022790879087906004016105f9565b602060405180830381865afa158015610244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102689190610633565b6001600160e01b031916149050610405565b81516041146102df5760405162461bcd60e51b815260206004820152603a602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e6774680000000000006064820152608401610157565b6102e7610425565b5060208201516040808401518451859392600091859190811061030c5761030c61065d565b016020015160f81c9050601b811480159061032b57508060ff16601c14155b1561038c5760405162461bcd60e51b815260206004820152603b602482015260008051602061067483398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c756500000000006064820152608401610157565b60408051600081526020810180835289905260ff83169181019190915260608101849052608081018390526001600160a01b0389169060019060a0016020604051602081039080840390855afa1580156103ea573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149450505050505b9392505050565b600060208251101561041d57600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461045857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561048c578181015183820152602001610474565b50506000910152565b600082601f8301126104a657600080fd5b81516001600160401b038111156104bf576104bf61045b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104ed576104ed61045b565b60405281815283820160200185101561050557600080fd5b610516826020830160208701610471565b949350505050565b60008060006060848603121561053357600080fd5b835161053e81610443565b6020850151604086015191945092506001600160401b0381111561056157600080fd5b61056d86828701610495565b9150509250925092565b60008060006060848603121561058c57600080fd5b835161059781610443565b60208501519093506001600160401b038111156105b357600080fd5b6105bf86828701610495565b604086015190935090506001600160401b0381111561056157600080fd5b600082516105ef818460208701610471565b9190910192915050565b828152604060208201526000825180604084015261061e816060850160208701610471565b601f01601f1916919091016060019392505050565b60006020828403121561064557600080fd5b81516001600160e01b03198116811461040557600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572'\n\n/**\n * ABI for the ERC-6492 universal deployless signature validator contract.\n *\n * Constructor return value is `0x1` (valid) or `0x0` (invalid).\n */\nexport const universalSignatureValidatorAbi = [\n  {\n    inputs: [\n      {\n        name: '_signer',\n        type: 'address',\n      },\n      {\n        name: '_hash',\n        type: 'bytes32',\n      },\n      {\n        name: '_signature',\n        type: 'bytes',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'constructor',\n  },\n  {\n    inputs: [\n      {\n        name: '_signer',\n        type: 'address',\n      },\n      {\n        name: '_hash',\n        type: 'bytes32',\n      },\n      {\n        name: '_signature',\n        type: 'bytes',\n      },\n    ],\n    outputs: [\n      {\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n    name: 'isValidSig',\n  },\n] as const satisfies Abi.Abi\n\n/**\n * Asserts that the wrapped signature is valid.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc6492 } from 'ox/erc6492'\n *\n * SignatureErc6492.assert('0xdeadbeef')\n * // @error: InvalidWrappedSignatureError: Value `0xdeadbeef` is an invalid ERC-6492 wrapped signature.\n * ```\n *\n * @param wrapped - The wrapped signature to assert.\n */\nexport function assert(wrapped: Wrapped) {\n  if (Hex.slice(wrapped, -32) !== magicBytes)\n    throw new InvalidWrappedSignatureError(wrapped)\n}\n\nexport declare namespace assert {\n  type ErrorType =\n    | InvalidWrappedSignatureError\n    | Hex.slice.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Parses an [ERC-6492 wrapped signature](https://eips.ethereum.org/EIPS/eip-6492#specification) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1 } from 'ox'\n * import { SignatureErc6492 } from 'ox/erc6492' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n *   payload: '0x...',\n *   privateKey: '0x...',\n * })\n *\n * // Instantiate from serialized format. // [!code focus]\n * const wrapped = SignatureErc6492.from('0x...') // [!code focus]\n * // @log: { data: '0x...', signature: { ... }, to: '0x...', } // [!code focus]\n *\n * // Instantiate from constituent parts. // [!code focus]\n * const wrapped = SignatureErc6492.from({ // [!code focus]\n *   data: '0x...', // [!code focus]\n *   signature, // [!code focus]\n *   to: '0x...', // [!code focus]\n * })\n * // @log: { data: '0x...', signature: { ... }, to: '0x...', }\n * ```\n *\n * @param wrapped - Wrapped signature to parse.\n * @returns Wrapped signature.\n */\nexport function from(wrapped: Unwrapped | Wrapped): Unwrapped {\n  if (typeof wrapped === 'string') return unwrap(wrapped)\n  return wrapped\n}\n\nexport declare namespace from {\n  type ReturnType = Unwrapped\n\n  type ErrorType =\n    | AbiParameters.from.ErrorType\n    | AbiParameters.decode.ErrorType\n    | Signature.fromHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Parses an [ERC-6492 wrapped signature](https://eips.ethereum.org/EIPS/eip-6492#specification) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc6492 } from 'ox/erc6492'\n *\n * const { data, signature, to } = SignatureErc6492.unwrap('0x...')\n * ```\n *\n * @param wrapped - Wrapped signature to parse.\n * @returns Wrapped signature.\n */\nexport function unwrap(wrapped: Wrapped): Unwrapped {\n  assert(wrapped)\n\n  const [to, data, signature] = AbiParameters.decode(\n    AbiParameters.from('address, bytes, bytes'),\n    wrapped,\n  )\n\n  return { data, signature, to }\n}\n\nexport declare namespace unwrap {\n  type ErrorType =\n    | AbiParameters.from.ErrorType\n    | AbiParameters.decode.ErrorType\n    | Signature.fromHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Serializes an [ERC-6492 wrapped signature](https://eips.ethereum.org/EIPS/eip-6492#specification).\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1, Signature } from 'ox'\n * import { SignatureErc6492 } from 'ox/erc6492' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n *   payload: '0x...',\n *   privateKey: '0x...',\n * })\n *\n * const wrapped = SignatureErc6492.wrap({ // [!code focus]\n *   data: '0xdeadbeef', // [!code focus]\n *   signature: Signature.toHex(signature), // [!code focus]\n *   to: '0x00000000219ab540356cBB839Cbe05303d7705Fa', // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param value - Wrapped signature to serialize.\n * @returns Serialized wrapped signature.\n */\nexport function wrap(value: Unwrapped): Wrapped {\n  const { data, signature, to } = value\n\n  return Hex.concat(\n    AbiParameters.encode(AbiParameters.from('address, bytes, bytes'), [\n      to,\n      data,\n      signature,\n    ]),\n    magicBytes,\n  )\n}\n\nexport declare namespace wrap {\n  type ErrorType =\n    | AbiParameters.encode.ErrorType\n    | Hex.concat.ErrorType\n    | Signature.toHex.ErrorType\n    | Errors.GlobalErrorType\n}\n\n/**\n * Validates a wrapped signature. Returns `true` if the wrapped signature is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc6492 } from 'ox/erc6492'\n *\n * const valid = SignatureErc6492.validate('0xdeadbeef')\n * // @log: false\n * ```\n *\n * @param wrapped - The wrapped signature to validate.\n * @returns `true` if the wrapped signature is valid, `false` otherwise.\n */\nexport function validate(wrapped: Wrapped): boolean {\n  try {\n    assert(wrapped)\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport declare namespace validate {\n  type ErrorType = Errors.GlobalErrorType\n}\n\n/** Thrown when the ERC-6492 wrapped signature is invalid. */\nexport class InvalidWrappedSignatureError extends Errors.BaseError {\n  override readonly name = 'SignatureErc6492.InvalidWrappedSignatureError'\n\n  constructor(wrapped: Wrapped) {\n    super(`Value \\`${wrapped}\\` is an invalid ERC-6492 wrapped signature.`)\n  }\n}\n", "import type { Address } from 'abitype'\nimport { SignatureErc6492 } from 'ox/erc6492'\nimport { SignatureErc8010 } from 'ox/erc8010'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  erc1271Abi,\n  erc6492SignatureValidatorAbi,\n  multicall3Abi,\n} from '../../constants/abis.js'\nimport {\n  erc6492SignatureValidatorByteCode,\n  multicall3Bytecode,\n} from '../../constants/contracts.js'\nimport {\n  CallExecutionError,\n  ContractFunctionExecutionError,\n} from '../../errors/contract.js'\nimport type { InvalidHexBooleanError } from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { OneOf } from '../../types/utils.js'\nimport {\n  type EncodeDeployDataErrorType,\n  encodeDeployData,\n} from '../../utils/abi/encodeDeployData.js'\nimport {\n  type EncodeFunctionDataErrorType,\n  encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n  type GetAddressErrorType,\n  getAddress,\n} from '../../utils/address/getAddress.js'\nimport {\n  type IsAddressEqualErrorType,\n  isAddressEqual,\n} from '../../utils/address/isAddressEqual.js'\nimport { verifyAuthorization } from '../../utils/authorization/verifyAuthorization.js'\nimport { type ConcatHexErrorType, concatHex } from '../../utils/data/concat.js'\nimport { type IsHexErrorType, isHex } from '../../utils/data/isHex.js'\nimport { hexToBool } from '../../utils/encoding/fromHex.js'\nimport {\n  type BytesToHexErrorType,\n  bytesToHex,\n  type NumberToHexErrorType,\n  numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type RecoverAddressErrorType,\n  recoverAddress,\n} from '../../utils/signature/recoverAddress.js'\nimport {\n  type SerializeSignatureErrorType,\n  serializeSignature,\n} from '../../utils/signature/serializeSignature.js'\nimport { type CallErrorType, type CallParameters, call } from './call.js'\nimport { type GetCodeErrorType, getCode } from './getCode.js'\nimport { type ReadContractErrorType, readContract } from './readContract.js'\n\nexport type VerifyHashParameters = Pick<\n  CallParameters,\n  'blockNumber' | 'blockTag'\n> & {\n  /** The address that signed the original message. */\n  address: Address\n  /** The chain to use. */\n  chain?: Chain | null | undefined\n  /** The address of the ERC-6492 signature verifier contract. */\n  erc6492VerifierAddress?: Address | undefined\n  /** The hash to be verified. */\n  hash: Hex\n  /** Multicall3 address for ERC-8010 verification. */\n  multicallAddress?: Address | undefined\n  /** The signature that was generated by signing the message with the address's private key. */\n  signature: Hex | ByteArray | Signature\n  /** @deprecated use `erc6492VerifierAddress` instead. */\n  universalSignatureVerifierAddress?: Address | undefined\n  /** Chooses which verification path to try first before falling back. */\n  mode?: 'auto' | 'eoa' | (string & {}) | undefined\n} & OneOf<{ factory: Address; factoryData: Hex } | {}>\n\nexport type VerifyHashReturnType = boolean\n\nexport type VerifyHashErrorType =\n  | BytesToHexErrorType\n  | CallErrorType\n  | ConcatHexErrorType\n  | EncodeDeployDataErrorType\n  | EncodeFunctionDataErrorType\n  | ErrorType\n  | GetAddressErrorType\n  | GetCodeErrorType\n  | InvalidHexBooleanError\n  | IsAddressEqualErrorType\n  | IsHexErrorType\n  | NumberToHexErrorType\n  | ReadContractErrorType\n  | RecoverAddressErrorType\n  | SerializeSignatureErrorType\n\n/**\n * Verifies a message hash onchain using ERC-6492.\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifyHashParameters}\n * @returns Whether or not the signature is valid. {@link VerifyHashReturnType}\n */\nexport async function verifyHash<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: VerifyHashParameters,\n): Promise<VerifyHashReturnType> {\n  const {\n    address,\n    chain = client.chain,\n    hash,\n    erc6492VerifierAddress:\n      verifierAddress = parameters.universalSignatureVerifierAddress ??\n      chain?.contracts?.erc6492Verifier?.address,\n    multicallAddress = parameters.multicallAddress ??\n      chain?.contracts?.multicall3?.address,\n    mode = 'auto',\n  } = parameters\n\n  if (chain?.verifyHash) return await chain.verifyHash(client, parameters)\n\n  const signature = (() => {\n    const signature = parameters.signature\n    if (isHex(signature)) return signature\n    if (typeof signature === 'object' && 'r' in signature && 's' in signature)\n      return serializeSignature(signature)\n    return bytesToHex(signature)\n  })()\n  try {\n    if (mode === 'eoa') {\n      try {\n        const verified = isAddressEqual(\n          getAddress(address),\n          await recoverAddress({ hash, signature }),\n        )\n        if (verified) return true\n      } catch {}\n    }\n\n    if (SignatureErc8010.validate(signature))\n      return await verifyErc8010(client, {\n        ...parameters,\n        multicallAddress,\n        signature,\n      })\n    return await verifyErc6492(client, {\n      ...parameters,\n      verifierAddress,\n      signature,\n    })\n  } catch (error) {\n    if (mode !== 'eoa') {\n      // Fallback attempt to verify the signature via ECDSA recovery.\n      try {\n        const verified = isAddressEqual(\n          getAddress(address),\n          await recoverAddress({ hash, signature }),\n        )\n        if (verified) return true\n      } catch {}\n    }\n\n    if (error instanceof VerificationError) {\n      // if the execution fails, the signature was not valid and an internal method inside of the validator reverted\n      // this can happen for many reasons, for example if signer can not be recovered from the signature\n      // or if the signature has no valid format\n      return false\n    }\n\n    throw error\n  }\n}\n\n/** @internal */\nexport async function verifyErc8010(\n  client: Client,\n  parameters: verifyErc8010.Parameters,\n) {\n  const { address, blockNumber, blockTag, hash, multicallAddress } = parameters\n\n  const {\n    authorization: authorization_ox,\n    data: initData,\n    signature,\n    to,\n  } = SignatureErc8010.unwrap(parameters.signature)\n\n  // Check if already delegated\n  const code = await getCode(client, {\n    address,\n    blockNumber,\n    blockTag,\n  } as never)\n\n  // If already delegated, perform standard ERC-1271 verification.\n  if (code === concatHex(['0xef0100', authorization_ox.address]))\n    return await verifyErc1271(client, {\n      address,\n      blockNumber,\n      blockTag,\n      hash,\n      signature,\n    })\n\n  const authorization = {\n    address: authorization_ox.address,\n    chainId: Number(authorization_ox.chainId),\n    nonce: Number(authorization_ox.nonce),\n    r: numberToHex(authorization_ox.r, { size: 32 }),\n    s: numberToHex(authorization_ox.s, { size: 32 }),\n    yParity: authorization_ox.yParity,\n  } as const\n\n  const valid = await verifyAuthorization({\n    address,\n    authorization,\n  })\n  if (!valid) throw new VerificationError()\n\n  // Deployless verification.\n  const results = await getAction(\n    client,\n    readContract,\n    'readContract',\n  )({\n    ...(multicallAddress\n      ? { address: multicallAddress }\n      : { code: multicall3Bytecode }),\n    authorizationList: [authorization],\n    abi: multicall3Abi,\n    blockNumber,\n    blockTag: 'pending',\n    functionName: 'aggregate3',\n    args: [\n      [\n        ...(initData\n          ? ([\n              {\n                allowFailure: true,\n                target: to ?? address,\n                callData: initData,\n              },\n            ] as const)\n          : []),\n        {\n          allowFailure: true,\n          target: address,\n          callData: encodeFunctionData({\n            abi: erc1271Abi,\n            functionName: 'isValidSignature',\n            args: [hash, signature],\n          }),\n        },\n      ],\n    ],\n  })\n\n  const data = results[results.length - 1]?.returnData\n\n  if (data?.startsWith('0x1626ba7e')) return true\n  throw new VerificationError()\n}\n\nexport namespace verifyErc8010 {\n  export type Parameters = Pick<CallParameters, 'blockNumber' | 'blockTag'> & {\n    /** The address that signed the original message. */\n    address: Address\n    /** The hash to be verified. */\n    hash: Hex\n    /** Multicall3 address for ERC-8010 verification. */\n    multicallAddress?: Address | undefined\n    /** The signature that was generated by signing the message with the address's private key. */\n    signature: Hex\n  }\n}\n\n/** @internal */\n// biome-ignore lint/correctness/noUnusedVariables: _\nasync function verifyErc6492(\n  client: Client,\n  parameters: verifyErc6492.Parameters,\n) {\n  const {\n    address,\n    factory,\n    factoryData,\n    hash,\n    signature,\n    verifierAddress,\n    ...rest\n  } = parameters\n\n  const wrappedSignature = await (async () => {\n    // If no `factory` or `factoryData` is provided, it is assumed that the\n    // address is not a Smart Account, or the Smart Account is already deployed.\n    if (!factory && !factoryData) return signature\n\n    // If the signature is already wrapped, return the signature.\n    if (SignatureErc6492.validate(signature)) return signature\n\n    // If the Smart Account is not deployed, wrap the signature with a 6492 wrapper\n    // to perform counterfactual validation.\n    return SignatureErc6492.wrap({\n      data: factoryData!,\n      signature,\n      to: factory!,\n    })\n  })()\n\n  const args = verifierAddress\n    ? ({\n        to: verifierAddress,\n        data: encodeFunctionData({\n          abi: erc6492SignatureValidatorAbi,\n          functionName: 'isValidSig',\n          args: [address, hash, wrappedSignature],\n        }),\n        ...rest,\n      } as unknown as CallParameters)\n    : ({\n        data: encodeDeployData({\n          abi: erc6492SignatureValidatorAbi,\n          args: [address, hash, wrappedSignature],\n          bytecode: erc6492SignatureValidatorByteCode,\n        }),\n        ...rest,\n      } as unknown as CallParameters)\n\n  const { data } = await getAction(\n    client,\n    call,\n    'call',\n  )(args).catch((error) => {\n    if (error instanceof CallExecutionError) throw new VerificationError()\n    throw error\n  })\n\n  if (hexToBool(data ?? '0x0')) return true\n  throw new VerificationError()\n}\n\nexport namespace verifyErc6492 {\n  export type Parameters = Pick<CallParameters, 'blockNumber' | 'blockTag'> & {\n    /** The address that signed the original message. */\n    address: Address\n    /** The hash to be verified. */\n    hash: Hex\n    /** The signature that was generated by signing the message with the address's private key. */\n    signature: Hex\n    /** The address of the ERC-6492 signature verifier contract. */\n    verifierAddress?: Address | undefined\n  } & OneOf<{ factory: Address; factoryData: Hex } | {}>\n}\n\n/** @internal */\nexport async function verifyErc1271(\n  client: Client,\n  parameters: verifyErc1271.Parameters,\n) {\n  const { address, blockNumber, blockTag, hash, signature } = parameters\n\n  const result = await getAction(\n    client,\n    readContract,\n    'readContract',\n  )({\n    address,\n    abi: erc1271Abi,\n    args: [hash, signature],\n    blockNumber,\n    blockTag,\n    functionName: 'isValidSignature',\n  }).catch((error) => {\n    if (error instanceof ContractFunctionExecutionError)\n      throw new VerificationError()\n    throw error\n  })\n\n  if (result.startsWith('0x1626ba7e')) return true\n  throw new VerificationError()\n}\n\nexport namespace verifyErc1271 {\n  export type Parameters = Pick<CallParameters, 'blockNumber' | 'blockTag'> & {\n    /** The address that signed the original message. */\n    address: Address\n    /** The hash to be verified. */\n    hash: Hex\n    /** The signature that was generated by signing the message with the address's private key. */\n    signature: Hex\n  }\n}\n\nclass VerificationError extends Error {}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport { type HexToBigIntErrorType, hexToBigInt } from '../encoding/fromHex.js'\nimport { hexToBytes } from '../encoding/toBytes.js'\nimport type { ToHexErrorType } from '../encoding/toHex.js'\n\ntype To = 'bytes' | 'hex'\n\nexport type SerializeSignatureParameters<to extends To = 'hex'> = Signature & {\n  to?: to | To | undefined\n}\n\nexport type SerializeSignatureReturnType<to extends To = 'hex'> =\n  | (to extends 'hex' ? Hex : never)\n  | (to extends 'bytes' ? ByteArray : never)\n\nexport type SerializeSignatureErrorType =\n  | HexToBigIntErrorType\n  | ToHexErrorType\n  | ErrorType\n\n/**\n * @description Converts a signature into hex format.\n *\n * @param signature The signature to convert.\n * @returns The signature in hex format.\n *\n * @example\n * serializeSignature({\n *   r: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf',\n *   s: '0x4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8',\n *   yParity: 1\n * })\n * // \"0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c\"\n */\nexport function serializeSignature<to extends To = 'hex'>({\n  r,\n  s,\n  to = 'hex',\n  v,\n  yParity,\n}: SerializeSignatureParameters<to>): SerializeSignatureReturnType<to> {\n  const yParity_ = (() => {\n    if (yParity === 0 || yParity === 1) return yParity\n    if (v && (v === 27n || v === 28n || v >= 35n)) return v % 2n === 0n ? 1 : 0\n    throw new Error('Invalid `v` or `yParity` value')\n  })()\n  const signature = `0x${new secp256k1.Signature(\n    hexToBigInt(r),\n    hexToBigInt(s),\n  ).toCompactHex()}${yParity_ === 0 ? '1b' : '1c'}` as const\n\n  if (to === 'hex') return signature as SerializeSignatureReturnType<to>\n  return hexToBytes(signature) as SerializeSignatureReturnType<to>\n}\n", "import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  ByteArray,\n  Hex,\n  SignableMessage,\n  Signature,\n} from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { HashMessageErrorType } from '../../utils/signature/hashMessage.js'\nimport { hashMessage } from '../../utils/signature/hashMessage.js'\nimport {\n  type VerifyHashErrorType,\n  type VerifyHashParameters,\n  verifyHash,\n} from './verifyHash.js'\n\nexport type VerifyMessageParameters = Prettify<\n  Omit<VerifyHashParameters, 'hash'> & {\n    /** The address that signed the original message. */\n    address: Address\n    /** The message to be verified. */\n    message: SignableMessage\n    /** The signature that was generated by signing the message with the address's private key. */\n    signature: Hex | ByteArray | Signature\n  }\n>\n\nexport type VerifyMessageReturnType = boolean\n\nexport type VerifyMessageErrorType =\n  | HashMessageErrorType\n  | VerifyHashErrorType\n  | ErrorType\n\n/**\n * Verify that a message was signed by the provided address.\n *\n * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyMessage}\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifyMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifyMessageReturnType}\n */\nexport async function verifyMessage<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    address,\n    message,\n    factory,\n    factoryData,\n    signature,\n    ...callRequest\n  }: VerifyMessageParameters,\n): Promise<VerifyMessageReturnType> {\n  const hash = hashMessage(message)\n  return getAction(\n    client,\n    verifyHash,\n    'verifyHash',\n  )({\n    address,\n    factory: factory!,\n    factoryData: factoryData!,\n    hash,\n    signature,\n    ...callRequest,\n  })\n}\n", "import type { Address, TypedData } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { TypedDataDefinition } from '../../types/typedData.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n  type HashTypedDataErrorType,\n  hashTypedData,\n} from '../../utils/signature/hashTypedData.js'\nimport {\n  type VerifyHashErrorType,\n  type VerifyHashParameters,\n  verifyHash,\n} from './verifyHash.js'\n\nexport type VerifyTypedDataParameters<\n  typedData extends TypedData | Record<string, unknown> = TypedData,\n  primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n> = Omit<VerifyHashParameters, 'hash'> &\n  TypedDataDefinition<typedData, primaryType> & {\n    /** The address to verify the typed data for. */\n    address: Address\n    /** The signature to verify */\n    signature: Hex | ByteArray | Signature\n  }\n\nexport type VerifyTypedDataReturnType = boolean\n\nexport type VerifyTypedDataErrorType =\n  | HashTypedDataErrorType\n  | VerifyHashErrorType\n  | ErrorType\n\n/**\n * Verify that typed data was signed by the provided address.\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyTypedData}\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifyTypedDataParameters}\n * @returns Whether or not the signature is valid. {@link VerifyTypedDataReturnType}\n */\nexport async function verifyTypedData<\n  const typedData extends TypedData | Record<string, unknown>,\n  primaryType extends keyof typedData | 'EIP712Domain',\n  chain extends Chain | undefined,\n>(\n  client: Client<Transport, chain>,\n  parameters: VerifyTypedDataParameters<typedData, primaryType>,\n): Promise<VerifyTypedDataReturnType> {\n  const {\n    address,\n    factory,\n    factoryData,\n    signature,\n    message,\n    primaryType,\n    types,\n    domain,\n    ...callRequest\n  } = parameters as VerifyTypedDataParameters\n  const hash = hashTypedData({ message, primaryType, types, domain })\n  return getAction(\n    client,\n    verifyHash,\n    'verifyHash',\n  )({\n    address,\n    factory: factory!,\n    factoryData: factoryData!,\n    hash,\n    signature,\n    ...callRequest,\n  })\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { BlockNotFoundError } from '../../errors/block.js'\nimport {\n  TransactionNotFoundError,\n  TransactionReceiptNotFoundError,\n  WaitForTransactionReceiptTimeoutError,\n  type WaitForTransactionReceiptTimeoutErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { Transaction } from '../../types/transaction.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { withResolvers } from '../../utils/promise/withResolvers.js'\nimport {\n  type WithRetryParameters,\n  withRetry,\n} from '../../utils/promise/withRetry.js'\nimport { stringify } from '../../utils/stringify.js'\n\nimport { type GetBlockErrorType, getBlock } from './getBlock.js'\nimport {\n  type GetTransactionErrorType,\n  type GetTransactionReturnType,\n  getTransaction,\n} from './getTransaction.js'\nimport {\n  type GetTransactionReceiptErrorType,\n  type GetTransactionReceiptReturnType,\n  getTransactionReceipt,\n} from './getTransactionReceipt.js'\nimport {\n  type WatchBlockNumberErrorType,\n  watchBlockNumber,\n} from './watchBlockNumber.js'\n\nexport type ReplacementReason = 'cancelled' | 'replaced' | 'repriced'\nexport type ReplacementReturnType<\n  chain extends Chain | undefined = Chain | undefined,\n> = {\n  reason: ReplacementReason\n  replacedTransaction: Transaction\n  transaction: Transaction\n  transactionReceipt: GetTransactionReceiptReturnType<chain>\n}\n\nexport type WaitForTransactionReceiptReturnType<\n  chain extends Chain | undefined = Chain | undefined,\n> = GetTransactionReceiptReturnType<chain>\n\nexport type WaitForTransactionReceiptParameters<\n  chain extends Chain | undefined = Chain | undefined,\n> = {\n  /**\n   * Whether to check for transaction replacements.\n   * @default true\n   */\n  checkReplacement?: boolean | undefined\n  /**\n   * The number of confirmations (blocks that have passed) to wait before resolving.\n   * @default 1\n   */\n  confirmations?: number | undefined\n  /** The hash of the transaction. */\n  hash: Hash\n  /** Optional callback to emit if the transaction has been replaced. */\n  onReplaced?: ((response: ReplacementReturnType<chain>) => void) | undefined\n  /**\n   * Polling frequency (in ms). Defaults to the client's pollingInterval config.\n   * @default client.pollingInterval\n   */\n  pollingInterval?: number | undefined\n  /**\n   * Number of times to retry if the transaction or block is not found.\n   * @default 6 (exponential backoff)\n   */\n  retryCount?: WithRetryParameters['retryCount'] | undefined\n  /**\n   * Time to wait (in ms) between retries.\n   * @default `({ count }) => ~~(1 << count) * 200` (exponential backoff)\n   */\n  retryDelay?: WithRetryParameters['delay'] | undefined\n  /**\n   * Optional timeout (in milliseconds) to wait before stopping polling.\n   * @default 180_000\n   */\n  timeout?: number | undefined\n}\n\nexport type WaitForTransactionReceiptErrorType =\n  | ObserveErrorType\n  | GetBlockErrorType\n  | GetTransactionErrorType\n  | GetTransactionReceiptErrorType\n  | WatchBlockNumberErrorType\n  | WaitForTransactionReceiptTimeoutErrorType\n  | ErrorType\n\n/**\n * Waits for the [Transaction](https://viem.sh/docs/glossary/terms#transaction) to be included on a [Block](https://viem.sh/docs/glossary/terms#block) (one confirmation), and then returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt).\n *\n * - Docs: https://viem.sh/docs/actions/public/waitForTransactionReceipt\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions\n * - JSON-RPC Methods:\n *   - Polls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt) on each block until it has been processed.\n *   - If a Transaction has been replaced:\n *     - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) and extracts the transactions\n *     - Checks if one of the Transactions is a replacement\n *     - If so, calls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt).\n *\n * The `waitForTransactionReceipt` action additionally supports Replacement detection (e.g. sped up Transactions).\n *\n * Transactions can be replaced when a user modifies their transaction in their wallet (to speed up or cancel). Transactions are replaced when they are sent from the same nonce.\n *\n * There are 3 types of Transaction Replacement reasons:\n *\n * - `repriced`: The gas price has been modified (e.g. different `maxFeePerGas`)\n * - `cancelled`: The Transaction has been cancelled (e.g. `value === 0n`)\n * - `replaced`: The Transaction has been replaced (e.g. different `value` or `data`)\n *\n * @param client - Client to use\n * @param parameters - {@link WaitForTransactionReceiptParameters}\n * @returns The transaction receipt. {@link WaitForTransactionReceiptReturnType}\n *\n * @example\n * import { createPublicClient, waitForTransactionReceipt, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const transactionReceipt = await waitForTransactionReceipt(client, {\n *   hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function waitForTransactionReceipt<\n  chain extends Chain | undefined,\n>(\n  client: Client<Transport, chain>,\n  parameters: WaitForTransactionReceiptParameters<chain>,\n): Promise<WaitForTransactionReceiptReturnType<chain>> {\n  const {\n    checkReplacement = true,\n    confirmations = 1,\n    hash,\n    onReplaced,\n    retryCount = 6,\n    retryDelay = ({ count }) => ~~(1 << count) * 200, // exponential backoff\n    timeout = 180_000,\n  } = parameters\n\n  const observerId = stringify(['waitForTransactionReceipt', client.uid, hash])\n\n  const pollingInterval = (() => {\n    if (parameters.pollingInterval) return parameters.pollingInterval\n    if (client.chain?.experimental_preconfirmationTime)\n      return client.chain.experimental_preconfirmationTime\n    return client.pollingInterval\n  })()\n\n  let transaction: GetTransactionReturnType<chain> | undefined\n  let replacedTransaction: GetTransactionReturnType<chain> | undefined\n  let receipt: GetTransactionReceiptReturnType<chain> | undefined\n  let retrying = false\n\n  let _unobserve: () => void\n  let _unwatch: () => void\n\n  const { promise, resolve, reject } =\n    withResolvers<WaitForTransactionReceiptReturnType<chain>>()\n\n  const timer = timeout\n    ? setTimeout(() => {\n        _unwatch?.()\n        _unobserve?.()\n        reject(new WaitForTransactionReceiptTimeoutError({ hash }))\n      }, timeout)\n    : undefined\n\n  _unobserve = observe(\n    observerId,\n    { onReplaced, resolve, reject },\n    async (emit) => {\n      receipt = await getAction(\n        client,\n        getTransactionReceipt,\n        'getTransactionReceipt',\n      )({ hash }).catch(() => undefined)\n\n      if (receipt && confirmations <= 1) {\n        clearTimeout(timer)\n        emit.resolve(receipt)\n        _unobserve?.()\n        return\n      }\n\n      _unwatch = getAction(\n        client,\n        watchBlockNumber,\n        'watchBlockNumber',\n      )({\n        emitMissed: true,\n        emitOnBegin: true,\n        poll: true,\n        pollingInterval,\n        async onBlockNumber(blockNumber_) {\n          const done = (fn: () => void) => {\n            clearTimeout(timer)\n            _unwatch?.()\n            fn()\n            _unobserve?.()\n          }\n\n          let blockNumber = blockNumber_\n\n          if (retrying) return\n\n          try {\n            // If we already have a valid receipt, let's check if we have enough\n            // confirmations. If we do, then we can resolve.\n            if (receipt) {\n              if (\n                confirmations > 1 &&\n                (!receipt.blockNumber ||\n                  blockNumber - receipt.blockNumber + 1n < confirmations)\n              )\n                return\n\n              done(() => emit.resolve(receipt!))\n              return\n            }\n\n            // Get the transaction to check if it's been replaced.\n            // We need to retry as some RPC Providers may be slow to sync\n            // up mined transactions.\n            if (checkReplacement && !transaction) {\n              retrying = true\n              await withRetry(\n                async () => {\n                  transaction = (await getAction(\n                    client,\n                    getTransaction,\n                    'getTransaction',\n                  )({ hash })) as GetTransactionReturnType<chain>\n                  if (transaction.blockNumber)\n                    blockNumber = transaction.blockNumber\n                },\n                {\n                  delay: retryDelay,\n                  retryCount,\n                },\n              )\n              retrying = false\n            }\n\n            // Get the receipt to check if it's been processed.\n            receipt = await getAction(\n              client,\n              getTransactionReceipt,\n              'getTransactionReceipt',\n            )({ hash })\n\n            // Check if we have enough confirmations. If not, continue polling.\n            if (\n              confirmations > 1 &&\n              (!receipt.blockNumber ||\n                blockNumber - receipt.blockNumber + 1n < confirmations)\n            )\n              return\n\n            done(() => emit.resolve(receipt!))\n          } catch (err) {\n            // If the receipt is not found, the transaction will be pending.\n            // We need to check if it has potentially been replaced.\n            if (\n              err instanceof TransactionNotFoundError ||\n              err instanceof TransactionReceiptNotFoundError\n            ) {\n              if (!transaction) {\n                retrying = false\n                return\n              }\n\n              try {\n                replacedTransaction = transaction\n\n                // Let's retrieve the transactions from the current block.\n                // We need to retry as some RPC Providers may be slow to sync\n                // up mined blocks.\n                retrying = true\n                const block = await withRetry(\n                  () =>\n                    getAction(\n                      client,\n                      getBlock,\n                      'getBlock',\n                    )({\n                      blockNumber,\n                      includeTransactions: true,\n                    }),\n                  {\n                    delay: retryDelay,\n                    retryCount,\n                    shouldRetry: ({ error }) =>\n                      error instanceof BlockNotFoundError,\n                  },\n                )\n                retrying = false\n\n                const replacementTransaction = (\n                  block.transactions as {} as Transaction[]\n                ).find(\n                  ({ from, nonce }) =>\n                    from === replacedTransaction!.from &&\n                    nonce === replacedTransaction!.nonce,\n                )\n\n                // If we couldn't find a replacement transaction, continue polling.\n                if (!replacementTransaction) return\n\n                // If we found a replacement transaction, return it's receipt.\n                receipt = await getAction(\n                  client,\n                  getTransactionReceipt,\n                  'getTransactionReceipt',\n                )({\n                  hash: replacementTransaction.hash,\n                })\n\n                // Check if we have enough confirmations. If not, continue polling.\n                if (\n                  confirmations > 1 &&\n                  (!receipt.blockNumber ||\n                    blockNumber - receipt.blockNumber + 1n < confirmations)\n                )\n                  return\n\n                let reason: ReplacementReason = 'replaced'\n                if (\n                  replacementTransaction.to === replacedTransaction.to &&\n                  replacementTransaction.value === replacedTransaction.value &&\n                  replacementTransaction.input === replacedTransaction.input\n                ) {\n                  reason = 'repriced'\n                } else if (\n                  replacementTransaction.from === replacementTransaction.to &&\n                  replacementTransaction.value === 0n\n                ) {\n                  reason = 'cancelled'\n                }\n\n                done(() => {\n                  emit.onReplaced?.({\n                    reason,\n                    replacedTransaction: replacedTransaction! as any,\n                    transaction: replacementTransaction,\n                    transactionReceipt: receipt!,\n                  })\n                  emit.resolve(receipt!)\n                })\n              } catch (err_) {\n                done(() => emit.reject(err_))\n              }\n            } else {\n              done(() => emit.reject(err))\n            }\n          }\n        },\n      })\n    },\n  )\n\n  return promise\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { HasTransportType } from '../../types/transport.js'\nimport { hexToBigInt } from '../../utils/encoding/fromHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { observe } from '../../utils/observe.js'\nimport { type PollErrorType, poll } from '../../utils/poll.js'\nimport { stringify } from '../../utils/stringify.js'\n\nimport {\n  type GetBlockNumberReturnType,\n  getBlockNumber,\n} from './getBlockNumber.js'\n\nexport type OnBlockNumberParameter = GetBlockNumberReturnType\nexport type OnBlockNumberFn = (\n  blockNumber: OnBlockNumberParameter,\n  prevBlockNumber: OnBlockNumberParameter | undefined,\n) => void\n\nexport type WatchBlockNumberParameters<\n  transport extends Transport = Transport,\n> = {\n  /** The callback to call when a new block number is received. */\n  onBlockNumber: OnBlockNumberFn\n  /** The callback to call when an error occurred when trying to get for a new block. */\n  onError?: ((error: Error) => void) | undefined\n} & (\n  | (HasTransportType<transport, 'webSocket' | 'ipc'> extends true\n      ? {\n          emitMissed?: undefined\n          emitOnBegin?: undefined\n          /** Whether or not the WebSocket Transport should poll the JSON-RPC, rather than using `eth_subscribe`. */\n          poll?: false | undefined\n          pollingInterval?: undefined\n        }\n      : never)\n  | {\n      /** Whether or not to emit the missed block numbers to the callback. */\n      emitMissed?: boolean | undefined\n      /** Whether or not to emit the latest block number to the callback when the subscription opens. */\n      emitOnBegin?: boolean | undefined\n      poll?: true | undefined\n      /** Polling frequency (in ms). Defaults to Client's pollingInterval config. */\n      pollingInterval?: number | undefined\n    }\n)\n\nexport type WatchBlockNumberReturnType = () => void\n\nexport type WatchBlockNumberErrorType = PollErrorType | ErrorType\n\n/**\n * Watches and returns incoming block numbers.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchBlockNumber\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n * - JSON-RPC Methods:\n *   - When `poll: true`, calls [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber) on a polling interval.\n *   - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchBlockNumberParameters}\n * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlockNumberReturnType}\n *\n * @example\n * import { createPublicClient, watchBlockNumber, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const unwatch = watchBlockNumber(client, {\n *   onBlockNumber: (blockNumber) => console.log(blockNumber),\n * })\n */\nexport function watchBlockNumber<\n  chain extends Chain | undefined,\n  transport extends Transport,\n>(\n  client: Client<transport, chain>,\n  {\n    emitOnBegin = false,\n    emitMissed = false,\n    onBlockNumber,\n    onError,\n    poll: poll_,\n    pollingInterval = client.pollingInterval,\n  }: WatchBlockNumberParameters<transport>,\n): WatchBlockNumberReturnType {\n  const enablePolling = (() => {\n    if (typeof poll_ !== 'undefined') return poll_\n    if (\n      client.transport.type === 'webSocket' ||\n      client.transport.type === 'ipc'\n    )\n      return false\n    if (\n      client.transport.type === 'fallback' &&\n      (client.transport.transports[0].config.type === 'webSocket' ||\n        client.transport.transports[0].config.type === 'ipc')\n    )\n      return false\n    return true\n  })()\n\n  let prevBlockNumber: GetBlockNumberReturnType | undefined\n\n  const pollBlockNumber = () => {\n    const observerId = stringify([\n      'watchBlockNumber',\n      client.uid,\n      emitOnBegin,\n      emitMissed,\n      pollingInterval,\n    ])\n\n    return observe(observerId, { onBlockNumber, onError }, (emit) =>\n      poll(\n        async () => {\n          try {\n            const blockNumber = await getAction(\n              client,\n              getBlockNumber,\n              'getBlockNumber',\n            )({ cacheTime: 0 })\n\n            if (prevBlockNumber !== undefined) {\n              // If the current block number is the same as the previous,\n              // we can skip.\n              if (blockNumber === prevBlockNumber) return\n\n              // If we have missed out on some previous blocks, and the\n              // `emitMissed` flag is truthy, let's emit those blocks.\n              if (blockNumber - prevBlockNumber > 1 && emitMissed) {\n                for (let i = prevBlockNumber + 1n; i < blockNumber; i++) {\n                  emit.onBlockNumber(i, prevBlockNumber)\n                  prevBlockNumber = i\n                }\n              }\n            }\n\n            // If the next block number is greater than the previous,\n            // it is not in the past, and we can emit the new block number.\n            if (\n              prevBlockNumber === undefined ||\n              blockNumber > prevBlockNumber\n            ) {\n              emit.onBlockNumber(blockNumber, prevBlockNumber)\n              prevBlockNumber = blockNumber\n            }\n          } catch (err) {\n            emit.onError?.(err as Error)\n          }\n        },\n        {\n          emitOnBegin,\n          interval: pollingInterval,\n        },\n      ),\n    )\n  }\n\n  const subscribeBlockNumber = () => {\n    const observerId = stringify([\n      'watchBlockNumber',\n      client.uid,\n      emitOnBegin,\n      emitMissed,\n    ])\n\n    return observe(observerId, { onBlockNumber, onError }, (emit) => {\n      let active = true\n      let unsubscribe = () => (active = false)\n      ;(async () => {\n        try {\n          const transport = (() => {\n            if (client.transport.type === 'fallback') {\n              const transport = client.transport.transports.find(\n                (transport: ReturnType<Transport>) =>\n                  transport.config.type === 'webSocket' ||\n                  transport.config.type === 'ipc',\n              )\n              if (!transport) return client.transport\n              return transport.value\n            }\n            return client.transport\n          })()\n\n          const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n            params: ['newHeads'],\n            onData(data: any) {\n              if (!active) return\n              const blockNumber = hexToBigInt(data.result?.number)\n              emit.onBlockNumber(blockNumber, prevBlockNumber)\n              prevBlockNumber = blockNumber\n            },\n            onError(error: Error) {\n              emit.onError?.(error)\n            },\n          })\n          unsubscribe = unsubscribe_\n          if (!active) unsubscribe()\n        } catch (err) {\n          onError?.(err as Error)\n        }\n      })()\n      return () => unsubscribe()\n    })\n  }\n\n  return enablePolling ? pollBlockNumber() : subscribeBlockNumber()\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { HasTransportType } from '../../types/transport.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { observe } from '../../utils/observe.js'\nimport { type PollErrorType, poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\n\nimport { type GetBlockReturnType, getBlock } from './getBlock.js'\n\nexport type OnBlockParameter<\n  chain extends Chain | undefined = Chain,\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n> = GetBlockReturnType<chain, includeTransactions, blockTag>\n\nexport type OnBlock<\n  chain extends Chain | undefined = Chain,\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n> = (\n  block: OnBlockParameter<chain, includeTransactions, blockTag>,\n  prevBlock: OnBlockParameter<chain, includeTransactions, blockTag> | undefined,\n) => void\n\nexport type WatchBlocksParameters<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain,\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n> = {\n  /** The callback to call when a new block is received. */\n  onBlock: OnBlock<chain, includeTransactions, blockTag>\n  /** The callback to call when an error occurred when trying to get for a new block. */\n  onError?: ((error: Error) => void) | undefined\n} & (\n  | (HasTransportType<transport, 'webSocket' | 'ipc'> extends true\n      ? {\n          blockTag?: undefined\n          emitMissed?: undefined\n          emitOnBegin?: undefined\n          includeTransactions?: undefined\n          /** Whether or not the WebSocket Transport should poll the JSON-RPC, rather than using `eth_subscribe`. */\n          poll?: false | undefined\n          pollingInterval?: undefined\n        }\n      : never)\n  | {\n      /** The block tag. Defaults to \"latest\". */\n      blockTag?: blockTag | BlockTag | undefined\n      /** Whether or not to emit the missed blocks to the callback. */\n      emitMissed?: boolean | undefined\n      /** Whether or not to emit the block to the callback when the subscription opens. */\n      emitOnBegin?: boolean | undefined\n      /** Whether or not to include transaction data in the response. */\n      includeTransactions?: includeTransactions | undefined\n      poll?: true | undefined\n      /** Polling frequency (in ms). Defaults to the client's pollingInterval config. */\n      pollingInterval?: number | undefined\n    }\n)\n\nexport type WatchBlocksReturnType = () => void\n\nexport type WatchBlocksErrorType =\n  | StringifyErrorType\n  | PollErrorType\n  | ErrorType\n\n/**\n * Watches and returns information for incoming blocks.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchBlocks\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n * - JSON-RPC Methods:\n *   - When `poll: true`, calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getBlockByNumber) on a polling interval.\n *   - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchBlocksParameters}\n * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlocksReturnType}\n *\n * @example\n * import { createPublicClient, watchBlocks, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const unwatch = watchBlocks(client, {\n *   onBlock: (block) => console.log(block),\n * })\n */\nexport function watchBlocks<\n  transport extends Transport,\n  chain extends Chain | undefined,\n  includeTransactions extends boolean = false,\n  blockTag extends BlockTag = 'latest',\n>(\n  client: Client<transport, chain>,\n  {\n    blockTag = client.experimental_blockTag ?? 'latest',\n    emitMissed = false,\n    emitOnBegin = false,\n    onBlock,\n    onError,\n    includeTransactions: includeTransactions_,\n    poll: poll_,\n    pollingInterval = client.pollingInterval,\n  }: WatchBlocksParameters<transport, chain, includeTransactions, blockTag>,\n): WatchBlocksReturnType {\n  const enablePolling = (() => {\n    if (typeof poll_ !== 'undefined') return poll_\n    if (\n      client.transport.type === 'webSocket' ||\n      client.transport.type === 'ipc'\n    )\n      return false\n    if (\n      client.transport.type === 'fallback' &&\n      (client.transport.transports[0].config.type === 'webSocket' ||\n        client.transport.transports[0].config.type === 'ipc')\n    )\n      return false\n    return true\n  })()\n  const includeTransactions = includeTransactions_ ?? false\n\n  let prevBlock:\n    | GetBlockReturnType<chain, false | includeTransactions, 'latest'>\n    | undefined\n\n  const pollBlocks = () => {\n    const observerId = stringify([\n      'watchBlocks',\n      client.uid,\n      blockTag,\n      emitMissed,\n      emitOnBegin,\n      includeTransactions,\n      pollingInterval,\n    ])\n\n    return observe(observerId, { onBlock, onError }, (emit) =>\n      poll(\n        async () => {\n          try {\n            const block = await getAction(\n              client,\n              getBlock,\n              'getBlock',\n            )({\n              blockTag,\n              includeTransactions,\n            })\n            if (block.number !== null && prevBlock?.number != null) {\n              // If the current block number is the same as the previous,\n              // we can skip.\n              if (block.number === prevBlock.number) return\n\n              // If we have missed out on some previous blocks, and the\n              // `emitMissed` flag is truthy, let's emit those blocks.\n              if (block.number - prevBlock.number > 1 && emitMissed) {\n                for (let i = prevBlock?.number + 1n; i < block.number; i++) {\n                  const block = (await getAction(\n                    client,\n                    getBlock,\n                    'getBlock',\n                  )({\n                    blockNumber: i,\n                    includeTransactions,\n                  })) as GetBlockReturnType<chain>\n                  emit.onBlock(block as any, prevBlock as any)\n                  prevBlock = block\n                }\n              }\n            }\n\n            if (\n              // If no previous block exists, emit.\n              prevBlock?.number == null ||\n              // If the block tag is \"pending\" with no block number, emit.\n              (blockTag === 'pending' && block?.number == null) ||\n              // If the next block number is greater than the previous block number, emit.\n              // We don't want to emit blocks in the past.\n              (block.number !== null && block.number > prevBlock.number)\n            ) {\n              emit.onBlock(block as any, prevBlock as any)\n              prevBlock = block as any\n            }\n          } catch (err) {\n            emit.onError?.(err as Error)\n          }\n        },\n        {\n          emitOnBegin,\n          interval: pollingInterval,\n        },\n      ),\n    )\n  }\n\n  const subscribeBlocks = () => {\n    let active = true\n    let emitFetched = true\n    let unsubscribe = () => (active = false)\n    ;(async () => {\n      try {\n        if (emitOnBegin) {\n          getAction(\n            client,\n            getBlock,\n            'getBlock',\n          )({\n            blockTag,\n            includeTransactions,\n          })\n            .then((block) => {\n              if (!active) return\n              if (!emitFetched) return\n              onBlock(block as any, undefined)\n              emitFetched = false\n            })\n            .catch(onError)\n        }\n\n        const transport = (() => {\n          if (client.transport.type === 'fallback') {\n            const transport = client.transport.transports.find(\n              (transport: ReturnType<Transport>) =>\n                transport.config.type === 'webSocket' ||\n                transport.config.type === 'ipc',\n            )\n            if (!transport) return client.transport\n            return transport.value\n          }\n          return client.transport\n        })()\n\n        const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n          params: ['newHeads'],\n          async onData(data: any) {\n            if (!active) return\n            const block = (await getAction(\n              client,\n              getBlock,\n              'getBlock',\n            )({\n              blockNumber: data.result?.number,\n              includeTransactions,\n            }).catch(() => {})) as GetBlockReturnType<chain>\n            if (!active) return\n            onBlock(block as any, prevBlock as any)\n            emitFetched = false\n            prevBlock = block\n          },\n          onError(error: Error) {\n            onError?.(error)\n          },\n        })\n        unsubscribe = unsubscribe_\n        if (!active) unsubscribe()\n      } catch (err) {\n        onError?.(err as Error)\n      }\n    })()\n    return () => unsubscribe()\n  }\n\n  return enablePolling ? pollBlocks() : subscribeBlocks()\n}\n", "import type { AbiEvent, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n  DecodeLogDataMismatch,\n  DecodeLogTopicsMismatch,\n} from '../../errors/abi.js'\nimport { InvalidInputRpcError } from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n  MaybeAbiEventName,\n  MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { LogTopic } from '../../types/misc.js'\nimport type { GetPollOptions } from '../../types/transport.js'\nimport { decodeEventLog } from '../../utils/abi/decodeEventLog.js'\nimport {\n  type EncodeEventTopicsParameters,\n  encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport { formatLog } from '../../utils/formatters/log.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\nimport {\n  type CreateEventFilterParameters,\n  createEventFilter,\n} from './createEventFilter.js'\nimport { getBlockNumber } from './getBlockNumber.js'\nimport { getFilterChanges } from './getFilterChanges.js'\nimport { type GetLogsParameters, getLogs } from './getLogs.js'\nimport { uninstallFilter } from './uninstallFilter.js'\n\nexport type WatchEventOnLogsParameter<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n> = Log<bigint, number, false, abiEvent, strict, abiEvents, eventName>[]\nexport type WatchEventOnLogsFn<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  //\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n> = (\n  logs: WatchEventOnLogsParameter<abiEvent, abiEvents, strict, _eventName>,\n) => void\n\nexport type WatchEventParameters<\n  abiEvent extends AbiEvent | undefined = undefined,\n  abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  transport extends Transport = Transport,\n  //\n  _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n> = {\n  /** The address of the contract. */\n  address?: Address | Address[] | undefined\n  /** Block to start listening from. */\n  fromBlock?: BlockNumber<bigint> | undefined\n  /** The callback to call when an error occurred when trying to get for a new block. */\n  onError?: ((error: Error) => void) | undefined\n  /** The callback to call when new event logs are received. */\n  onLogs: WatchEventOnLogsFn<abiEvent, abiEvents, strict, _eventName>\n} & GetPollOptions<transport> &\n  (\n    | {\n        event: abiEvent\n        events?: undefined\n        args?: MaybeExtractEventArgsFromAbi<abiEvents, _eventName> | undefined\n        /**\n         * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n         * @default false\n         */\n        strict?: strict | undefined\n      }\n    | {\n        event?: undefined\n        events?: abiEvents | undefined\n        args?: undefined\n        /**\n         * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n         * @default false\n         */\n        strict?: strict | undefined\n      }\n    | {\n        event?: undefined\n        events?: undefined\n        args?: undefined\n        strict?: undefined\n      }\n  )\n\nexport type WatchEventReturnType = () => void\n\nexport type WatchEventErrorType =\n  | StringifyErrorType\n  | ObserveErrorType\n  | ErrorType\n\n/**\n * Watches and returns emitted [Event Logs](https://viem.sh/docs/glossary/terms#event-log).\n *\n * - Docs: https://viem.sh/docs/actions/public/watchEvent\n * - JSON-RPC Methods:\n *   - **RPC Provider supports `eth_newFilter`:**\n *     - Calls [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter) to create a filter (called on initialize).\n *     - On a polling interval, it will call [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges).\n *   - **RPC Provider does not support `eth_newFilter`:**\n *     - Calls [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) for each block between the polling interval.\n *\n * This Action will batch up all the Event Logs found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/actions/public/watchEvent#onLogs).\n *\n * `watchEvent` will attempt to create an [Event Filter](https://viem.sh/docs/actions/public/createEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchEventParameters}\n * @returns A function that can be invoked to stop watching for new Event Logs. {@link WatchEventReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchEvent } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const unwatch = watchEvent(client, {\n *   onLogs: (logs) => console.log(logs),\n * })\n */\nexport function watchEvent<\n  chain extends Chain | undefined,\n  const abiEvent extends AbiEvent | undefined = undefined,\n  const abiEvents extends\n    | readonly AbiEvent[]\n    | readonly unknown[]\n    | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n  strict extends boolean | undefined = undefined,\n  transport extends Transport = Transport,\n  _eventName extends string | undefined = undefined,\n>(\n  client: Client<transport, chain>,\n  {\n    address,\n    args,\n    batch = true,\n    event,\n    events,\n    fromBlock,\n    onError,\n    onLogs,\n    poll: poll_,\n    pollingInterval = client.pollingInterval,\n    strict: strict_,\n  }: WatchEventParameters<abiEvent, abiEvents, strict, transport>,\n): WatchEventReturnType {\n  const enablePolling = (() => {\n    if (typeof poll_ !== 'undefined') return poll_\n    if (typeof fromBlock === 'bigint') return true\n    if (\n      client.transport.type === 'webSocket' ||\n      client.transport.type === 'ipc'\n    )\n      return false\n    if (\n      client.transport.type === 'fallback' &&\n      (client.transport.transports[0].config.type === 'webSocket' ||\n        client.transport.transports[0].config.type === 'ipc')\n    )\n      return false\n    return true\n  })()\n  const strict = strict_ ?? false\n\n  const pollEvent = () => {\n    const observerId = stringify([\n      'watchEvent',\n      address,\n      args,\n      batch,\n      client.uid,\n      event,\n      pollingInterval,\n      fromBlock,\n    ])\n\n    return observe(observerId, { onLogs, onError }, (emit) => {\n      let previousBlockNumber: bigint\n      if (fromBlock !== undefined) previousBlockNumber = fromBlock - 1n\n      let filter: Filter<'event', abiEvents, _eventName, any>\n      let initialized = false\n\n      const unwatch = poll(\n        async () => {\n          if (!initialized) {\n            try {\n              filter = (await getAction(\n                client,\n                createEventFilter as any,\n                'createEventFilter',\n              )({\n                address,\n                args,\n                event: event!,\n                events,\n                strict,\n                fromBlock,\n              } as unknown as CreateEventFilterParameters)) as unknown as Filter<\n                'event',\n                abiEvents,\n                _eventName\n              >\n            } catch {}\n            initialized = true\n            return\n          }\n\n          try {\n            let logs: Log[]\n            if (filter) {\n              logs = await getAction(\n                client,\n                getFilterChanges,\n                'getFilterChanges',\n              )({ filter })\n            } else {\n              // If the filter doesn't exist, we will fall back to use `getLogs`.\n              // The fall back exists because some RPC Providers do not support filters.\n\n              // Fetch the block number to use for `getLogs`.\n              const blockNumber = await getAction(\n                client,\n                getBlockNumber,\n                'getBlockNumber',\n              )({})\n\n              // If the block number has changed, we will need to fetch the logs.\n              // If the block number doesn't exist, we are yet to reach the first poll interval,\n              // so do not emit any logs.\n              if (previousBlockNumber && previousBlockNumber !== blockNumber) {\n                logs = await getAction(\n                  client,\n                  getLogs,\n                  'getLogs',\n                )({\n                  address,\n                  args,\n                  event: event!,\n                  events,\n                  fromBlock: previousBlockNumber + 1n,\n                  toBlock: blockNumber,\n                } as unknown as GetLogsParameters)\n              } else {\n                logs = []\n              }\n              previousBlockNumber = blockNumber\n            }\n\n            if (logs.length === 0) return\n            if (batch) emit.onLogs(logs as any)\n            else for (const log of logs) emit.onLogs([log] as any)\n          } catch (err) {\n            // If a filter has been set and gets uninstalled, providers will throw an InvalidInput error.\n            // Reinitialize the filter when this occurs\n            if (filter && err instanceof InvalidInputRpcError)\n              initialized = false\n            emit.onError?.(err as Error)\n          }\n        },\n        {\n          emitOnBegin: true,\n          interval: pollingInterval,\n        },\n      )\n\n      return async () => {\n        if (filter)\n          await getAction(\n            client,\n            uninstallFilter,\n            'uninstallFilter',\n          )({ filter })\n        unwatch()\n      }\n    })\n  }\n\n  const subscribeEvent = () => {\n    let active = true\n    let unsubscribe = () => (active = false)\n    ;(async () => {\n      try {\n        const transport = (() => {\n          if (client.transport.type === 'fallback') {\n            const transport = client.transport.transports.find(\n              (transport: ReturnType<Transport>) =>\n                transport.config.type === 'webSocket' ||\n                transport.config.type === 'ipc',\n            )\n            if (!transport) return client.transport\n            return transport.value\n          }\n          return client.transport\n        })()\n\n        const events_ = events ?? (event ? [event] : undefined)\n        let topics: LogTopic[] = []\n        if (events_) {\n          const encoded = (events_ as AbiEvent[]).flatMap((event) =>\n            encodeEventTopics({\n              abi: [event],\n              eventName: (event as AbiEvent).name,\n              args,\n            } as EncodeEventTopicsParameters),\n          )\n          // TODO: Clean up type casting\n          topics = [encoded as LogTopic]\n          if (event) topics = topics[0] as LogTopic[]\n        }\n\n        const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n          params: ['logs', { address, topics }],\n          onData(data: any) {\n            if (!active) return\n            const log = data.result\n            try {\n              const { eventName, args } = decodeEventLog({\n                abi: events_ ?? [],\n                data: log.data,\n                topics: log.topics,\n                strict,\n              })\n              const formatted = formatLog(log, { args, eventName })\n              onLogs([formatted] as any)\n            } catch (err) {\n              let eventName: string | undefined\n              let isUnnamed: boolean | undefined\n              if (\n                err instanceof DecodeLogDataMismatch ||\n                err instanceof DecodeLogTopicsMismatch\n              ) {\n                // If strict mode is on, and log data/topics do not match event definition, skip.\n                if (strict_) return\n                eventName = err.abiItem.name\n                isUnnamed = err.abiItem.inputs?.some(\n                  (x) => !('name' in x && x.name),\n                )\n              }\n\n              // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).\n              const formatted = formatLog(log, {\n                args: isUnnamed ? [] : {},\n                eventName,\n              })\n              onLogs([formatted] as any)\n            }\n          },\n          onError(error: Error) {\n            onError?.(error)\n          },\n        })\n        unsubscribe = unsubscribe_\n        if (!active) unsubscribe()\n      } catch (err) {\n        onError?.(err as Error)\n      }\n    })()\n    return () => unsubscribe()\n  }\n\n  return enablePolling ? pollEvent() : subscribeEvent()\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { GetPollOptions } from '../../types/transport.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\n\nimport { createPendingTransactionFilter } from './createPendingTransactionFilter.js'\nimport { getFilterChanges } from './getFilterChanges.js'\nimport { uninstallFilter } from './uninstallFilter.js'\n\nexport type OnTransactionsParameter = Hash[]\nexport type OnTransactionsFn = (transactions: OnTransactionsParameter) => void\n\nexport type WatchPendingTransactionsParameters<\n  transport extends Transport = Transport,\n> = {\n  /** The callback to call when an error occurred when trying to get for a new block. */\n  onError?: ((error: Error) => void) | undefined\n  /** The callback to call when new transactions are received. */\n  onTransactions: OnTransactionsFn\n} & GetPollOptions<transport>\n\nexport type WatchPendingTransactionsReturnType = () => void\n\nexport type WatchPendingTransactionsErrorType =\n  | StringifyErrorType\n  | ObserveErrorType\n  | ErrorType\n\n/**\n * Watches and returns pending transaction hashes.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchPendingTransactions\n * - JSON-RPC Methods:\n *   - When `poll: true`\n *     - Calls [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter) to initialize the filter.\n *     - Calls [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getFilterChanges) on a polling interval.\n *   - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newPendingTransactions\"` event.\n *\n * This Action will batch up all the pending transactions found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchPendingTransactions#pollinginterval-optional), and invoke them via [`onTransactions`](https://viem.sh/docs/actions/public/watchPendingTransactions#ontransactions).\n *\n * @param client - Client to use\n * @param parameters - {@link WatchPendingTransactionsParameters}\n * @returns A function that can be invoked to stop watching for new pending transaction hashes. {@link WatchPendingTransactionsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchPendingTransactions } from 'viem/public'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n * const unwatch = await watchPendingTransactions(client, {\n *   onTransactions: (hashes) => console.log(hashes),\n * })\n */\nexport function watchPendingTransactions<\n  transport extends Transport,\n  chain extends Chain | undefined,\n>(\n  client: Client<transport, chain>,\n  {\n    batch = true,\n    onError,\n    onTransactions,\n    poll: poll_,\n    pollingInterval = client.pollingInterval,\n  }: WatchPendingTransactionsParameters<transport>,\n) {\n  const enablePolling =\n    typeof poll_ !== 'undefined'\n      ? poll_\n      : client.transport.type !== 'webSocket' && client.transport.type !== 'ipc'\n\n  const pollPendingTransactions = () => {\n    const observerId = stringify([\n      'watchPendingTransactions',\n      client.uid,\n      batch,\n      pollingInterval,\n    ])\n    return observe(observerId, { onTransactions, onError }, (emit) => {\n      let filter: Filter<'transaction'>\n\n      const unwatch = poll(\n        async () => {\n          try {\n            if (!filter) {\n              try {\n                filter = await getAction(\n                  client,\n                  createPendingTransactionFilter,\n                  'createPendingTransactionFilter',\n                )({})\n                return\n              } catch (err) {\n                unwatch()\n                throw err\n              }\n            }\n\n            const hashes = await getAction(\n              client,\n              getFilterChanges,\n              'getFilterChanges',\n            )({ filter })\n            if (hashes.length === 0) return\n            if (batch) emit.onTransactions(hashes)\n            else for (const hash of hashes) emit.onTransactions([hash])\n          } catch (err) {\n            emit.onError?.(err as Error)\n          }\n        },\n        {\n          emitOnBegin: true,\n          interval: pollingInterval,\n        },\n      )\n\n      return async () => {\n        if (filter)\n          await getAction(\n            client,\n            uninstallFilter,\n            'uninstallFilter',\n          )({ filter })\n        unwatch()\n      }\n    })\n  }\n\n  const subscribePendingTransactions = () => {\n    let active = true\n    let unsubscribe = () => (active = false)\n    ;(async () => {\n      try {\n        const { unsubscribe: unsubscribe_ } = await client.transport.subscribe({\n          params: ['newPendingTransactions'],\n          onData(data: any) {\n            if (!active) return\n            const transaction = data.result\n            onTransactions([transaction])\n          },\n          onError(error: Error) {\n            onError?.(error)\n          },\n        })\n        unsubscribe = unsubscribe_\n        if (!active) unsubscribe()\n      } catch (err) {\n        onError?.(err as Error)\n      }\n    })()\n    return () => unsubscribe()\n  }\n\n  return enablePolling\n    ? pollPendingTransactions()\n    : subscribePendingTransactions()\n}\n", "import type { Address } from 'abitype'\n\nimport type { ExactPartial, Prettify } from '../../types/utils.js'\nimport type { SiweMessage } from './types.js'\n\n/**\n * @description Parses EIP-4361 formatted message into message fields object.\n *\n * @see https://eips.ethereum.org/EIPS/eip-4361\n *\n * @returns EIP-4361 fields object\n */\nexport function parseSiweMessage(\n  message: string,\n): Prettify<ExactPartial<SiweMessage>> {\n  const { scheme, statement, ...prefix } = (message.match(prefixRegex)\n    ?.groups ?? {}) as {\n    address: Address\n    domain: string\n    scheme?: string\n    statement?: string\n  }\n  const { chainId, expirationTime, issuedAt, notBefore, requestId, ...suffix } =\n    (message.match(suffixRegex)?.groups ?? {}) as {\n      chainId: string\n      expirationTime?: string\n      issuedAt?: string\n      nonce: string\n      notBefore?: string\n      requestId?: string\n      uri: string\n      version: '1'\n    }\n  const resources = message.split('Resources:')[1]?.split('\\n- ').slice(1)\n  return {\n    ...prefix,\n    ...suffix,\n    ...(chainId ? { chainId: Number(chainId) } : {}),\n    ...(expirationTime ? { expirationTime: new Date(expirationTime) } : {}),\n    ...(issuedAt ? { issuedAt: new Date(issuedAt) } : {}),\n    ...(notBefore ? { notBefore: new Date(notBefore) } : {}),\n    ...(requestId ? { requestId } : {}),\n    ...(resources ? { resources } : {}),\n    ...(scheme ? { scheme } : {}),\n    ...(statement ? { statement } : {}),\n  }\n}\n\n// https://regexr.com/80gdj\nconst prefixRegex =\n  /^(?:(?<scheme>[a-zA-Z][a-zA-Z0-9+-.]*):\\/\\/)?(?<domain>[a-zA-Z0-9+-.]*(?::[0-9]{1,5})?) (?:wants you to sign in with your Ethereum account:\\n)(?<address>0x[a-fA-F0-9]{40})\\n\\n(?:(?<statement>.*)\\n\\n)?/\n\n// https://regexr.com/80gf9\nconst suffixRegex =\n  /(?:URI: (?<uri>.+))\\n(?:Version: (?<version>.+))\\n(?:Chain ID: (?<chainId>\\d+))\\n(?:Nonce: (?<nonce>[a-zA-Z0-9]+))\\n(?:Issued At: (?<issuedAt>.+))(?:\\nExpiration Time: (?<expirationTime>.+))?(?:\\nNot Before: (?<notBefore>.+))?(?:\\nRequest ID: (?<requestId>.+))?/\n", "import type { Address } from 'abitype'\n\nimport type { ExactPartial } from '../../types/utils.js'\nimport { isAddress } from '../address/isAddress.js'\nimport { isAddressEqual } from '../address/isAddressEqual.js'\nimport type { SiweMessage } from './types.js'\n\nexport type ValidateSiweMessageParameters = {\n  /**\n   * Ethereum address to check against.\n   */\n  address?: Address | undefined\n  /**\n   * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) authority to check against.\n   */\n  domain?: string | undefined\n  /**\n   * EIP-4361 message fields.\n   */\n  message: ExactPartial<SiweMessage>\n  /**\n   * Random string to check against.\n   */\n  nonce?: string | undefined\n  /**\n   * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) URI scheme to check against.\n   */\n  scheme?: string | undefined\n  /**\n   * Current time to check optional `expirationTime` and `notBefore` fields.\n   *\n   * @default new Date()\n   */\n  time?: Date | undefined\n}\n\nexport type ValidateSiweMessageReturnType = boolean\n\n/**\n * @description Validates EIP-4361 message.\n *\n * @see https://eips.ethereum.org/EIPS/eip-4361\n */\nexport function validateSiweMessage(\n  parameters: ValidateSiweMessageParameters,\n): ValidateSiweMessageReturnType {\n  const {\n    address,\n    domain,\n    message,\n    nonce,\n    scheme,\n    time = new Date(),\n  } = parameters\n\n  if (domain && message.domain !== domain) return false\n  if (nonce && message.nonce !== nonce) return false\n  if (scheme && message.scheme !== scheme) return false\n\n  if (message.expirationTime && time >= message.expirationTime) return false\n  if (message.notBefore && time < message.notBefore) return false\n\n  try {\n    if (!message.address) return false\n    if (!isAddress(message.address, { strict: false })) return false\n    if (address && !isAddressEqual(message.address, address)) return false\n  } catch {\n    return false\n  }\n\n  return true\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport type { HashMessageErrorType } from '../../utils/signature/hashMessage.js'\nimport { hashMessage } from '../../utils/signature/hashMessage.js'\nimport { parseSiweMessage } from '../../utils/siwe/parseSiweMessage.js'\nimport {\n  type ValidateSiweMessageParameters,\n  validateSiweMessage,\n} from '../../utils/siwe/validateSiweMessage.js'\nimport {\n  type VerifyHashErrorType,\n  type VerifyHashParameters,\n  verifyHash,\n} from '../public/verifyHash.js'\n\nexport type VerifySiweMessageParameters = Prettify<\n  Pick<VerifyHashParameters, 'blockNumber' | 'blockTag'> &\n    Pick<\n      ValidateSiweMessageParameters,\n      'address' | 'domain' | 'nonce' | 'scheme' | 'time'\n    > & {\n      /**\n       * EIP-4361 formatted message.\n       */\n      message: string\n      /**\n       * Signature to check against.\n       */\n      signature: Hex\n    }\n>\n\nexport type VerifySiweMessageReturnType = boolean\n\nexport type VerifySiweMessageErrorType =\n  | HashMessageErrorType\n  | VerifyHashErrorType\n  | ErrorType\n\n/**\n * Verifies [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message was signed.\n *\n * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n *\n * - Docs {@link https://viem.sh/docs/siwe/actions/verifySiweMessage}\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifySiweMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifySiweMessageReturnType}\n */\nexport async function verifySiweMessage<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  parameters: VerifySiweMessageParameters,\n): Promise<VerifySiweMessageReturnType> {\n  const {\n    address,\n    domain,\n    message,\n    nonce,\n    scheme,\n    signature,\n    time = new Date(),\n    ...callRequest\n  } = parameters\n\n  const parsed = parseSiweMessage(message)\n  if (!parsed.address) return false\n\n  const isValid = validateSiweMessage({\n    address,\n    domain,\n    message: parsed,\n    nonce,\n    scheme,\n    time,\n  })\n  if (!isValid) return false\n\n  const hash = hashMessage(message)\n  return verifyHash(client, {\n    address: parsed.address,\n    hash,\n    signature,\n    ...callRequest,\n  })\n}\n", "import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { TransactionReceiptRevertedError } from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { TransactionSerializedGeneric } from '../../types/transaction.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { formatTransactionReceipt } from '../../utils/formatters/transactionReceipt.js'\nimport type { FormattedTransactionReceipt } from '../../utils/index.js'\n\nexport type SendRawTransactionSyncParameters = {\n  /** The signed serialized transaction. */\n  serializedTransaction: TransactionSerializedGeneric\n  /** Whether to throw an error if the transaction was detected as reverted. @default true */\n  throwOnReceiptRevert?: boolean | undefined\n  /** The timeout for the transaction. */\n  timeout?: number | undefined\n}\n\nexport type SendRawTransactionSyncReturnType<\n  chain extends Chain | undefined = undefined,\n> = FormattedTransactionReceipt<chain>\n\nexport type SendRawTransactionSyncErrorType = RequestErrorType | ErrorType\n\n/**\n * Sends a **signed** transaction to the network synchronously,\n * and waits for the transaction to be included in a block.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransactionSync\n * - JSON-RPC Method: [`eth_sendRawTransactionSync`](https://eips.ethereum.org/EIPS/eip-7966)\n *\n * @param client - Client to use\n * @param parameters - {@link SendRawTransactionParameters}\n * @returns The transaction receipt. {@link SendRawTransactionSyncReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendRawTransactionSync } from 'viem/wallet'\n *\n * const client = createWalletClient({\n *   chain: mainnet,\n *   transport: custom(window.ethereum),\n * })\n *\n * const receipt = await sendRawTransactionSync(client, {\n *   serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n * })\n */\nexport async function sendRawTransactionSync<chain extends Chain | undefined>(\n  client: Client<Transport, chain>,\n  {\n    serializedTransaction,\n    throwOnReceiptRevert,\n    timeout,\n  }: SendRawTransactionSyncParameters,\n): Promise<SendRawTransactionSyncReturnType<chain>> {\n  const receipt = await client.request(\n    {\n      method: 'eth_sendRawTransactionSync',\n      params: timeout\n        ? [serializedTransaction, timeout]\n        : [serializedTransaction],\n    },\n    { retryCount: 0 },\n  )\n  const format =\n    client.chain?.formatters?.transactionReceipt?.format ||\n    formatTransactionReceipt\n\n  const formatted = format(receipt) as SendRawTransactionSyncReturnType<chain>\n  if (formatted.status === 'reverted' && throwOnReceiptRevert)\n    throw new TransactionReceiptRevertedError({ receipt: formatted })\n  return formatted\n}\n", "import type { Address } from 'abitype'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Account, ParseAccount } from '../types/account.js'\nimport type { Chain } from '../types/chain.js'\nimport type { PublicRpcSchema, RpcSchema } from '../types/eip1193.js'\nimport type { Prettify } from '../types/utils.js'\nimport {\n  type Client,\n  type ClientConfig,\n  type CreateClientErrorType,\n  createClient,\n} from './createClient.js'\nimport { type PublicActions, publicActions } from './decorators/public.js'\nimport type { Transport } from './transports/createTransport.js'\n\nexport type PublicClientConfig<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  accountOrAddress extends Account | Address | undefined = undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = Prettify<\n  Pick<\n    ClientConfig<transport, chain, accountOrAddress, rpcSchema>,\n    | 'batch'\n    | 'cacheTime'\n    | 'ccipRead'\n    | 'chain'\n    | 'experimental_blockTag'\n    | 'key'\n    | 'name'\n    | 'pollingInterval'\n    | 'rpcSchema'\n    | 'transport'\n  >\n>\n\nexport type PublicClient<\n  transport extends Transport = Transport,\n  chain extends Chain | undefined = Chain | undefined,\n  accountOrAddress extends Account | undefined = undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n> = Prettify<\n  Client<\n    transport,\n    chain,\n    accountOrAddress,\n    rpcSchema extends RpcSchema\n      ? [...PublicRpcSchema, ...rpcSchema]\n      : PublicRpcSchema,\n    PublicActions<transport, chain>\n  >\n>\n\nexport type CreatePublicClientErrorType = CreateClientErrorType | ErrorType\n\n/**\n * Creates a Public Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\n *\n * - Docs: https://viem.sh/docs/clients/public\n *\n * A Public Client is an interface to \"public\" [JSON-RPC API](https://ethereum.org/en/developers/docs/apis/json-rpc/) methods such as retrieving block numbers, transactions, reading from smart contracts, etc through [Public Actions](/docs/actions/public/introduction).\n *\n * @param config - {@link PublicClientConfig}\n * @returns A Public Client. {@link PublicClient}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http(),\n * })\n */\nexport function createPublicClient<\n  transport extends Transport,\n  chain extends Chain | undefined = undefined,\n  accountOrAddress extends Account | Address | undefined = undefined,\n  rpcSchema extends RpcSchema | undefined = undefined,\n>(\n  parameters: PublicClientConfig<transport, chain, accountOrAddress, rpcSchema>,\n): PublicClient<transport, chain, ParseAccount<accountOrAddress>, rpcSchema> {\n  const { key = 'public', name = 'Public Client' } = parameters\n  const client = createClient({\n    ...parameters,\n    key,\n    name,\n    type: 'publicClient',\n  })\n  return client.extend(publicActions) as any\n}\n", "import type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { EIP1193RequestFn } from '../../types/eip1193.js'\nimport type { OneOf } from '../../types/utils.js'\nimport { buildRequest } from '../../utils/buildRequest.js'\nimport { uid as uid_ } from '../../utils/uid.js'\nimport type { ClientConfig } from '../createClient.js'\n\nexport type TransportConfig<\n  type extends string = string,\n  eip1193RequestFn extends EIP1193RequestFn = EIP1193RequestFn,\n> = {\n  /** The name of the transport. */\n  name: string\n  /** The key of the transport. */\n  key: string\n  /** Methods to include or exclude from executing RPC requests. */\n  methods?:\n    | OneOf<\n        | {\n            include?: string[] | undefined\n          }\n        | {\n            exclude?: string[] | undefined\n          }\n      >\n    | undefined\n  /** The JSON-RPC request function that matches the EIP-1193 request spec. */\n  request: eip1193RequestFn\n  /** The base delay (in ms) between retries. */\n  retryDelay?: number | undefined\n  /** The max number of times to retry. */\n  retryCount?: number | undefined\n  /** The timeout (in ms) for requests. */\n  timeout?: number | undefined\n  /** The type of the transport. */\n  type: type\n}\n\nexport type Transport<\n  type extends string = string,\n  rpcAttributes = Record<string, any>,\n  eip1193RequestFn extends EIP1193RequestFn = EIP1193RequestFn,\n> = <chain extends Chain | undefined = Chain>({\n  chain,\n}: {\n  account?: Account | undefined\n  chain?: chain | undefined\n  pollingInterval?: ClientConfig['pollingInterval'] | undefined\n  retryCount?: TransportConfig['retryCount'] | undefined\n  timeout?: TransportConfig['timeout'] | undefined\n}) => {\n  config: TransportConfig<type>\n  request: eip1193RequestFn\n  value?: rpcAttributes | undefined\n}\n\nexport type CreateTransportErrorType = ErrorType\n\n/**\n * @description Creates an transport intended to be used with a client.\n */\nexport function createTransport<\n  type extends string,\n  rpcAttributes extends Record<string, any>,\n>(\n  {\n    key,\n    methods,\n    name,\n    request,\n    retryCount = 3,\n    retryDelay = 150,\n    timeout,\n    type,\n  }: TransportConfig<type>,\n  value?: rpcAttributes | undefined,\n): ReturnType<Transport<type, rpcAttributes>> {\n  const uid = uid_()\n  return {\n    config: {\n      key,\n      methods,\n      name,\n      request,\n      retryCount,\n      retryDelay,\n      timeout,\n      type,\n    },\n    request: buildRequest(request, { methods, retryCount, retryDelay, uid }),\n    value,\n  }\n}\n", "import { RpcRequestError } from '../../errors/request.js'\nimport {\n  UrlRequiredError,\n  type UrlRequiredErrorType,\n} from '../../errors/transport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { EIP1193RequestFn, RpcSchema } from '../../types/eip1193.js'\nimport type { RpcRequest } from '../../types/rpc.js'\nimport { createBatchScheduler } from '../../utils/promise/createBatchScheduler.js'\nimport {\n  getHttpRpcClient,\n  type HttpRpcClientOptions,\n} from '../../utils/rpc/http.js'\n\nimport {\n  type CreateTransportErrorType,\n  createTransport,\n  type Transport,\n  type TransportConfig,\n} from './createTransport.js'\n\nexport type HttpTransportConfig<\n  rpcSchema extends RpcSchema | undefined = undefined,\n  raw extends boolean = false,\n> = {\n  /**\n   * Whether to enable Batch JSON-RPC.\n   * @link https://www.jsonrpc.org/specification#batch\n   */\n  batch?:\n    | boolean\n    | {\n        /** The maximum number of JSON-RPC requests to send in a batch. @default 1_000 */\n        batchSize?: number | undefined\n        /** The maximum number of milliseconds to wait before sending a batch. @default 0 */\n        wait?: number | undefined\n      }\n    | undefined\n  fetchFn?: HttpRpcClientOptions['fetchFn'] | undefined\n  /**\n   * Request configuration to pass to `fetch`.\n   * @link https://developer.mozilla.org/en-US/docs/Web/API/fetch\n   */\n  fetchOptions?: HttpRpcClientOptions['fetchOptions'] | undefined\n  /** A callback to handle the response from `fetch`. */\n  onFetchRequest?: HttpRpcClientOptions['onRequest'] | undefined\n  /** A callback to handle the response from `fetch`. */\n  onFetchResponse?: HttpRpcClientOptions['onResponse'] | undefined\n  /** The key of the HTTP transport. */\n  key?: TransportConfig['key'] | undefined\n  /** Methods to include or exclude from executing RPC requests. */\n  methods?: TransportConfig['methods'] | undefined\n  /** The name of the HTTP transport. */\n  name?: TransportConfig['name'] | undefined\n  /** Whether to return JSON RPC errors as responses instead of throwing. */\n  raw?: raw | boolean | undefined\n  /** The max number of times to retry. */\n  retryCount?: TransportConfig['retryCount'] | undefined\n  /** The base delay (in ms) between retries. */\n  retryDelay?: TransportConfig['retryDelay'] | undefined\n  /** Typed JSON-RPC schema for the transport. */\n  rpcSchema?: rpcSchema | RpcSchema | undefined\n  /** The timeout (in ms) for the HTTP request. Default: 10_000 */\n  timeout?: TransportConfig['timeout'] | undefined\n}\n\nexport type HttpTransport<\n  rpcSchema extends RpcSchema | undefined = undefined,\n  raw extends boolean = false,\n> = Transport<\n  'http',\n  {\n    fetchOptions?: HttpTransportConfig['fetchOptions'] | undefined\n    url?: string | undefined\n  },\n  EIP1193RequestFn<rpcSchema, raw>\n>\n\nexport type HttpTransportErrorType =\n  | CreateTransportErrorType\n  | UrlRequiredErrorType\n  | ErrorType\n\n/**\n * @description Creates a HTTP transport that connects to a JSON-RPC API.\n */\nexport function http<\n  rpcSchema extends RpcSchema | undefined = undefined,\n  raw extends boolean = false,\n>(\n  /** URL of the JSON-RPC API. Defaults to the chain's public RPC URL. */\n  url?: string | undefined,\n  config: HttpTransportConfig<rpcSchema, raw> = {},\n): HttpTransport<rpcSchema, raw> {\n  const {\n    batch,\n    fetchFn,\n    fetchOptions,\n    key = 'http',\n    methods,\n    name = 'HTTP JSON-RPC',\n    onFetchRequest,\n    onFetchResponse,\n    retryDelay,\n    raw,\n  } = config\n  return ({ chain, retryCount: retryCount_, timeout: timeout_ }) => {\n    const { batchSize = 1000, wait = 0 } =\n      typeof batch === 'object' ? batch : {}\n    const retryCount = config.retryCount ?? retryCount_\n    const timeout = timeout_ ?? config.timeout ?? 10_000\n    const url_ = url || chain?.rpcUrls.default.http[0]\n    if (!url_) throw new UrlRequiredError()\n\n    const rpcClient = getHttpRpcClient(url_, {\n      fetchFn,\n      fetchOptions,\n      onRequest: onFetchRequest,\n      onResponse: onFetchResponse,\n      timeout,\n    })\n\n    return createTransport(\n      {\n        key,\n        methods,\n        name,\n        async request({ method, params }) {\n          const body = { method, params }\n\n          const { schedule } = createBatchScheduler({\n            id: url_,\n            wait,\n            shouldSplitBatch(requests) {\n              return requests.length > batchSize\n            },\n            fn: (body: RpcRequest[]) =>\n              rpcClient.request({\n                body,\n              }),\n            sort: (a, b) => a.id - b.id,\n          })\n\n          const fn = async (body: RpcRequest) =>\n            batch\n              ? schedule(body)\n              : [\n                  await rpcClient.request({\n                    body,\n                  }),\n                ]\n\n          const [{ error, result }] = await fn(body)\n\n          if (raw) return { error, result }\n          if (error)\n            throw new RpcRequestError({\n              body,\n              error,\n              url: url_,\n            })\n          return result\n        },\n        retryCount,\n        retryDelay,\n        timeout,\n        type: 'http',\n      },\n      {\n        fetchOptions,\n        url: url_,\n      },\n    )\n  }\n}\n", "import { BaseError } from './base.js'\n\nexport type UrlRequiredErrorType = UrlRequiredError & {\n  name: 'UrlRequiredError'\n}\nexport class UrlRequiredError extends BaseError {\n  constructor() {\n    super(\n      'No URL was provided to the Transport. Please provide a valid RPC URL to the Transport.',\n      {\n        docsPath: '/docs/clients/intro',\n        name: 'UrlRequiredError',\n      },\n    )\n  }\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n  type Abi,\n  type AbiEvent,\n  type AbiFunction,\n  type AbiParameter,\n  type AbiParameterKind,\n  type AbiParameterToPrimitiveType,\n  type AbiStateMutability,\n  type Address,\n  CircularReferenceError,\n  InvalidAbiItemError,\n  InvalidAbiParameterError,\n  InvalidAbiParametersError,\n  InvalidAbiTypeParameterError,\n  InvalidFunctionModifierError,\n  InvalidModifierError,\n  InvalidParameterError,\n  InvalidParenthesisError,\n  InvalidSignatureError,\n  InvalidStructSignatureError,\n  type Narrow,\n  type ParseAbi,\n  type ParseAbiItem,\n  type ParseAbiParameter,\n  type ParseAbiParameters,\n  parseAbi,\n  parseAbiItem,\n  parseAbiParameter,\n  parseAbiParameters,\n  SolidityProtectedKeywordError,\n  type TypedData,\n  type TypedDataDomain,\n  type TypedDataParameter,\n  UnknownSignatureError,\n  UnknownTypeError,\n} from 'abitype'\nexport type {\n  BlockOverrides,\n  Rpc as RpcBlockOverrides,\n} from 'ox/BlockOverrides'\nexport type { EntryPointVersion } from './account-abstraction/types/entryPointVersion.js'\nexport type {\n  RpcEstimateUserOperationGasReturnType,\n  RpcGetUserOperationByHashReturnType,\n  RpcUserOperation,\n  RpcUserOperationReceipt,\n  RpcUserOperationRequest,\n} from './account-abstraction/types/rpc.js'\nexport type {\n  EstimateUserOperationGasReturnType,\n  GetUserOperationByHashReturnType,\n  PackedUserOperation,\n  UserOperation,\n  UserOperationReceipt,\n  UserOperationRequest,\n} from './account-abstraction/types/userOperation.js'\nexport type {\n  Account,\n  AccountSource,\n  CustomSource,\n  HDAccount,\n  HDOptions,\n  JsonRpcAccount,\n  LocalAccount,\n  PrivateKeyAccount,\n} from './accounts/types.js'\nexport type {\n  GetEnsAddressErrorType,\n  GetEnsAddressParameters,\n  GetEnsAddressReturnType,\n} from './actions/ens/getEnsAddress.js'\nexport type {\n  GetEnsAvatarErrorType,\n  GetEnsAvatarParameters,\n  GetEnsAvatarReturnType,\n} from './actions/ens/getEnsAvatar.js'\nexport type {\n  GetEnsNameErrorType,\n  GetEnsNameParameters,\n  GetEnsNameReturnType,\n} from './actions/ens/getEnsName.js'\nexport type {\n  GetEnsResolverErrorType,\n  GetEnsResolverParameters,\n  GetEnsResolverReturnType,\n} from './actions/ens/getEnsResolver.js'\nexport type {\n  GetEnsTextErrorType,\n  GetEnsTextParameters,\n  GetEnsTextReturnType,\n} from './actions/ens/getEnsText.js'\nexport {\n  type GetContractErrorType,\n  type GetContractParameters,\n  type GetContractReturnType,\n  getContract,\n} from './actions/getContract.js'\nexport type {\n  CallErrorType,\n  CallParameters,\n  CallReturnType,\n} from './actions/public/call.js'\nexport type {\n  CreateAccessListErrorType,\n  CreateAccessListParameters,\n  CreateAccessListReturnType,\n} from './actions/public/createAccessList.js'\nexport type {\n  CreateBlockFilterErrorType,\n  CreateBlockFilterReturnType,\n} from './actions/public/createBlockFilter.js'\nexport type {\n  CreateContractEventFilterErrorType,\n  CreateContractEventFilterParameters,\n  CreateContractEventFilterReturnType,\n} from './actions/public/createContractEventFilter.js'\nexport type {\n  CreateEventFilterErrorType,\n  CreateEventFilterParameters,\n  CreateEventFilterReturnType,\n} from './actions/public/createEventFilter.js'\nexport type {\n  CreatePendingTransactionFilterErrorType,\n  CreatePendingTransactionFilterReturnType,\n} from './actions/public/createPendingTransactionFilter.js'\nexport type {\n  EstimateContractGasErrorType,\n  EstimateContractGasParameters,\n  EstimateContractGasReturnType,\n} from './actions/public/estimateContractGas.js'\nexport type {\n  EstimateFeesPerGasErrorType,\n  EstimateFeesPerGasParameters,\n  EstimateFeesPerGasReturnType,\n} from './actions/public/estimateFeesPerGas.js'\nexport type {\n  EstimateGasErrorType,\n  EstimateGasParameters,\n  EstimateGasReturnType,\n} from './actions/public/estimateGas.js'\nexport type {\n  EstimateMaxPriorityFeePerGasErrorType,\n  EstimateMaxPriorityFeePerGasParameters,\n  EstimateMaxPriorityFeePerGasReturnType,\n} from './actions/public/estimateMaxPriorityFeePerGas.js'\nexport type {\n  FillTransactionErrorType,\n  FillTransactionParameters,\n  FillTransactionReturnType,\n} from './actions/public/fillTransaction.js'\nexport type {\n  GetBalanceErrorType,\n  GetBalanceParameters,\n  GetBalanceReturnType,\n} from './actions/public/getBalance.js'\nexport type {\n  GetBlobBaseFeeErrorType,\n  GetBlobBaseFeeReturnType,\n} from './actions/public/getBlobBaseFee.js'\nexport type {\n  GetBlockErrorType,\n  GetBlockParameters,\n  GetBlockReturnType,\n} from './actions/public/getBlock.js'\nexport type {\n  GetBlockNumberErrorType,\n  GetBlockNumberParameters,\n  GetBlockNumberReturnType,\n} from './actions/public/getBlockNumber.js'\nexport type {\n  GetBlockTransactionCountErrorType,\n  GetBlockTransactionCountParameters,\n  GetBlockTransactionCountReturnType,\n} from './actions/public/getBlockTransactionCount.js'\nexport type {\n  GetChainIdErrorType,\n  GetChainIdReturnType,\n} from './actions/public/getChainId.js'\nexport type {\n  /** @deprecated Use `GetCodeErrorType` instead */\n  GetCodeErrorType as GetBytecodeErrorType,\n  GetCodeErrorType,\n  /** @deprecated Use `GetCodeParameters` instead */\n  GetCodeParameters as GetBytecodeParameters,\n  GetCodeParameters,\n  /** @deprecated Use `GetCodeReturnType` instead  */\n  GetCodeReturnType as GetBytecodeReturnType,\n  GetCodeReturnType,\n} from './actions/public/getCode.js'\nexport type {\n  GetContractEventsErrorType,\n  GetContractEventsParameters,\n  GetContractEventsReturnType,\n} from './actions/public/getContractEvents.js'\nexport type {\n  GetDelegationErrorType,\n  GetDelegationParameters,\n  GetDelegationReturnType,\n} from './actions/public/getDelegation.js'\nexport type {\n  GetEip712DomainErrorType,\n  GetEip712DomainParameters,\n  GetEip712DomainReturnType,\n} from './actions/public/getEip712Domain.js'\nexport type {\n  GetFeeHistoryErrorType,\n  GetFeeHistoryParameters,\n  GetFeeHistoryReturnType,\n} from './actions/public/getFeeHistory.js'\nexport type {\n  GetFilterChangesErrorType,\n  GetFilterChangesParameters,\n  GetFilterChangesReturnType,\n} from './actions/public/getFilterChanges.js'\nexport type {\n  GetFilterLogsErrorType,\n  GetFilterLogsParameters,\n  GetFilterLogsReturnType,\n} from './actions/public/getFilterLogs.js'\nexport type {\n  GetGasPriceErrorType,\n  GetGasPriceReturnType,\n} from './actions/public/getGasPrice.js'\nexport type {\n  GetLogsErrorType,\n  GetLogsParameters,\n  GetLogsReturnType,\n} from './actions/public/getLogs.js'\nexport type {\n  GetProofErrorType,\n  GetProofParameters,\n  GetProofReturnType,\n} from './actions/public/getProof.js'\nexport type {\n  GetStorageAtErrorType,\n  GetStorageAtParameters,\n  GetStorageAtReturnType,\n} from './actions/public/getStorageAt.js'\nexport type {\n  GetTransactionErrorType,\n  GetTransactionParameters,\n  GetTransactionReturnType,\n} from './actions/public/getTransaction.js'\nexport type {\n  GetTransactionConfirmationsErrorType,\n  GetTransactionConfirmationsParameters,\n  GetTransactionConfirmationsReturnType,\n} from './actions/public/getTransactionConfirmations.js'\nexport type {\n  GetTransactionCountErrorType,\n  GetTransactionCountParameters,\n  GetTransactionCountReturnType,\n} from './actions/public/getTransactionCount.js'\nexport type {\n  GetTransactionReceiptErrorType,\n  GetTransactionReceiptParameters,\n  GetTransactionReceiptReturnType,\n} from './actions/public/getTransactionReceipt.js'\nexport type {\n  MulticallErrorType,\n  MulticallParameters,\n  MulticallReturnType,\n} from './actions/public/multicall.js'\nexport type {\n  ReadContractErrorType,\n  ReadContractParameters,\n  ReadContractReturnType,\n} from './actions/public/readContract.js'\nexport type {\n  SimulateBlocksErrorType,\n  SimulateBlocksParameters,\n  SimulateBlocksReturnType,\n} from './actions/public/simulateBlocks.js'\nexport type {\n  SimulateCallsErrorType,\n  SimulateCallsParameters,\n  SimulateCallsReturnType,\n} from './actions/public/simulateCalls.js'\nexport type {\n  GetMutabilityAwareValue,\n  SimulateContractErrorType,\n  SimulateContractParameters,\n  SimulateContractReturnType,\n} from './actions/public/simulateContract.js'\nexport type {\n  UninstallFilterErrorType,\n  UninstallFilterParameters,\n  UninstallFilterReturnType,\n} from './actions/public/uninstallFilter.js'\nexport type {\n  VerifyHashErrorType as VerifyHashActionErrorType,\n  VerifyHashParameters as VerifyHashActionParameters,\n  VerifyHashReturnType as VerifyHashActionReturnType,\n} from './actions/public/verifyHash.js'\nexport type {\n  VerifyMessageErrorType as VerifyMessageActionErrorType,\n  VerifyMessageParameters as VerifyMessageActionParameters,\n  VerifyMessageReturnType as VerifyMessageActionReturnType,\n} from './actions/public/verifyMessage.js'\nexport type {\n  VerifyTypedDataErrorType as VerifyTypedDataActionErrorType,\n  VerifyTypedDataParameters as VerifyTypedDataActionParameters,\n  VerifyTypedDataReturnType as VerifyTypedDataActionReturnType,\n} from './actions/public/verifyTypedData.js'\nexport type {\n  ReplacementReason,\n  ReplacementReturnType,\n  WaitForTransactionReceiptErrorType,\n  WaitForTransactionReceiptParameters,\n  WaitForTransactionReceiptReturnType,\n} from './actions/public/waitForTransactionReceipt.js'\nexport type {\n  OnBlockNumberFn,\n  OnBlockNumberParameter,\n  WatchBlockNumberErrorType,\n  WatchBlockNumberParameters,\n  WatchBlockNumberReturnType,\n} from './actions/public/watchBlockNumber.js'\nexport type {\n  OnBlock,\n  OnBlockParameter,\n  WatchBlocksErrorType,\n  WatchBlocksParameters,\n  WatchBlocksReturnType,\n} from './actions/public/watchBlocks.js'\nexport type {\n  WatchContractEventErrorType,\n  WatchContractEventOnLogsFn,\n  WatchContractEventOnLogsParameter,\n  WatchContractEventParameters,\n  WatchContractEventReturnType,\n} from './actions/public/watchContractEvent.js'\nexport type {\n  WatchEventErrorType,\n  WatchEventOnLogsFn,\n  WatchEventOnLogsParameter,\n  WatchEventParameters,\n  WatchEventReturnType,\n} from './actions/public/watchEvent.js'\nexport type {\n  OnTransactionsFn,\n  OnTransactionsParameter,\n  WatchPendingTransactionsErrorType,\n  WatchPendingTransactionsParameters,\n  WatchPendingTransactionsReturnType,\n} from './actions/public/watchPendingTransactions.js'\nexport type {\n  DropTransactionErrorType,\n  DropTransactionParameters,\n} from './actions/test/dropTransaction.js'\nexport type {\n  DumpStateErrorType,\n  DumpStateReturnType,\n} from './actions/test/dumpState.js'\nexport type {\n  GetAutomineErrorType,\n  GetAutomineReturnType,\n} from './actions/test/getAutomine.js'\nexport type {\n  GetTxpoolContentErrorType,\n  GetTxpoolContentReturnType,\n} from './actions/test/getTxpoolContent.js'\nexport type {\n  GetTxpoolStatusErrorType,\n  GetTxpoolStatusReturnType,\n} from './actions/test/getTxpoolStatus.js'\nexport type {\n  ImpersonateAccountErrorType,\n  ImpersonateAccountParameters,\n} from './actions/test/impersonateAccount.js'\nexport type {\n  IncreaseTimeErrorType,\n  IncreaseTimeParameters,\n} from './actions/test/increaseTime.js'\nexport type {\n  InspectTxpoolErrorType,\n  InspectTxpoolReturnType,\n} from './actions/test/inspectTxpool.js'\nexport type {\n  LoadStateErrorType,\n  LoadStateParameters,\n  LoadStateReturnType,\n} from './actions/test/loadState.js'\nexport type { MineErrorType, MineParameters } from './actions/test/mine.js'\nexport type { RemoveBlockTimestampIntervalErrorType } from './actions/test/removeBlockTimestampInterval.js'\nexport type { ResetErrorType, ResetParameters } from './actions/test/reset.js'\nexport type {\n  RevertErrorType,\n  RevertParameters,\n} from './actions/test/revert.js'\nexport type {\n  SendUnsignedTransactionErrorType,\n  SendUnsignedTransactionParameters,\n  SendUnsignedTransactionReturnType,\n} from './actions/test/sendUnsignedTransaction.js'\nexport type { SetAutomineErrorType } from './actions/test/setAutomine.js'\nexport type {\n  SetBalanceErrorType,\n  SetBalanceParameters,\n} from './actions/test/setBalance.js'\nexport type {\n  SetBlockGasLimitErrorType,\n  SetBlockGasLimitParameters,\n} from './actions/test/setBlockGasLimit.js'\nexport type {\n  SetBlockTimestampIntervalErrorType,\n  SetBlockTimestampIntervalParameters,\n} from './actions/test/setBlockTimestampInterval.js'\nexport type {\n  SetCodeErrorType,\n  SetCodeParameters,\n} from './actions/test/setCode.js'\nexport type {\n  SetCoinbaseErrorType,\n  SetCoinbaseParameters,\n} from './actions/test/setCoinbase.js'\nexport type {\n  SetIntervalMiningErrorType,\n  SetIntervalMiningParameters,\n} from './actions/test/setIntervalMining.js'\nexport type { SetLoggingEnabledErrorType } from './actions/test/setLoggingEnabled.js'\nexport type {\n  SetMinGasPriceErrorType,\n  SetMinGasPriceParameters,\n} from './actions/test/setMinGasPrice.js'\nexport type {\n  SetNextBlockBaseFeePerGasErrorType,\n  SetNextBlockBaseFeePerGasParameters,\n} from './actions/test/setNextBlockBaseFeePerGas.js'\nexport type {\n  SetNextBlockTimestampErrorType,\n  SetNextBlockTimestampParameters,\n} from './actions/test/setNextBlockTimestamp.js'\nexport type {\n  SetNonceErrorType,\n  SetNonceParameters,\n} from './actions/test/setNonce.js'\nexport type { SetRpcUrlErrorType } from './actions/test/setRpcUrl.js'\nexport type {\n  SetStorageAtErrorType,\n  SetStorageAtParameters,\n} from './actions/test/setStorageAt.js'\nexport type { SnapshotErrorType } from './actions/test/snapshot.js'\nexport type {\n  StopImpersonatingAccountErrorType,\n  StopImpersonatingAccountParameters,\n} from './actions/test/stopImpersonatingAccount.js'\nexport type {\n  AddChainErrorType,\n  AddChainParameters,\n} from './actions/wallet/addChain.js'\nexport type {\n  DeployContractErrorType,\n  DeployContractParameters,\n  DeployContractReturnType,\n} from './actions/wallet/deployContract.js'\nexport type {\n  GetAddressesErrorType,\n  GetAddressesReturnType,\n} from './actions/wallet/getAddresses.js'\nexport type {\n  GetCallsStatusErrorType,\n  GetCallsStatusParameters,\n  GetCallsStatusReturnType,\n} from './actions/wallet/getCallsStatus.js'\nexport type {\n  GetCapabilitiesErrorType,\n  GetCapabilitiesParameters,\n  GetCapabilitiesReturnType,\n} from './actions/wallet/getCapabilities.js'\nexport type {\n  GetPermissionsErrorType,\n  GetPermissionsReturnType,\n} from './actions/wallet/getPermissions.js'\nexport type {\n  PrepareAuthorizationErrorType,\n  PrepareAuthorizationParameters,\n  PrepareAuthorizationReturnType,\n} from './actions/wallet/prepareAuthorization.js'\nexport type {\n  PrepareTransactionRequestErrorType,\n  PrepareTransactionRequestParameters,\n  PrepareTransactionRequestParameterType,\n  PrepareTransactionRequestRequest,\n  PrepareTransactionRequestReturnType,\n} from './actions/wallet/prepareTransactionRequest.js'\nexport type {\n  RequestAddressesErrorType,\n  RequestAddressesReturnType,\n} from './actions/wallet/requestAddresses.js'\nexport type {\n  RequestPermissionsErrorType,\n  RequestPermissionsParameters,\n  RequestPermissionsReturnType,\n} from './actions/wallet/requestPermissions.js'\nexport type {\n  SendCallsErrorType,\n  SendCallsParameters,\n  SendCallsReturnType,\n} from './actions/wallet/sendCalls.js'\nexport type {\n  SendCallsSyncErrorType,\n  SendCallsSyncParameters,\n  SendCallsSyncReturnType,\n} from './actions/wallet/sendCallsSync.js'\nexport type {\n  SendRawTransactionErrorType,\n  SendRawTransactionParameters,\n  SendRawTransactionReturnType,\n} from './actions/wallet/sendRawTransaction.js'\nexport type {\n  SendRawTransactionSyncErrorType,\n  SendRawTransactionSyncParameters,\n  SendRawTransactionSyncReturnType,\n} from './actions/wallet/sendRawTransactionSync.js'\nexport type {\n  SendTransactionErrorType,\n  SendTransactionParameters,\n  SendTransactionRequest,\n  SendTransactionReturnType,\n} from './actions/wallet/sendTransaction.js'\nexport type {\n  SendTransactionSyncErrorType,\n  SendTransactionSyncParameters,\n  SendTransactionSyncRequest,\n  SendTransactionSyncReturnType,\n} from './actions/wallet/sendTransactionSync.js'\nexport type {\n  ShowCallsStatusErrorType,\n  ShowCallsStatusParameters,\n  ShowCallsStatusReturnType,\n} from './actions/wallet/showCallsStatus.js'\nexport type {\n  SignAuthorizationErrorType,\n  SignAuthorizationParameters,\n  SignAuthorizationReturnType,\n} from './actions/wallet/signAuthorization.js'\nexport type {\n  SignMessageErrorType,\n  SignMessageParameters,\n  SignMessageReturnType,\n} from './actions/wallet/signMessage.js'\nexport type {\n  SignTransactionErrorType,\n  SignTransactionParameters,\n  SignTransactionRequest,\n  SignTransactionReturnType,\n} from './actions/wallet/signTransaction.js'\nexport type {\n  SignTypedDataErrorType,\n  SignTypedDataParameters,\n  SignTypedDataReturnType,\n} from './actions/wallet/signTypedData.js'\nexport type {\n  SwitchChainErrorType,\n  SwitchChainParameters,\n} from './actions/wallet/switchChain.js'\nexport type {\n  WaitForCallsStatusErrorType,\n  WaitForCallsStatusParameters,\n  WaitForCallsStatusReturnType,\n  WaitForCallsStatusTimeoutErrorType,\n} from './actions/wallet/waitForCallsStatus.js'\nexport { WaitForCallsStatusTimeoutError } from './actions/wallet/waitForCallsStatus.js'\nexport type {\n  WatchAssetErrorType,\n  WatchAssetParameters,\n  WatchAssetReturnType,\n} from './actions/wallet/watchAsset.js'\nexport type {\n  WriteContractErrorType,\n  WriteContractParameters,\n  WriteContractReturnType,\n} from './actions/wallet/writeContract.js'\nexport type {\n  WriteContractSyncErrorType,\n  WriteContractSyncParameters,\n  WriteContractSyncReturnType,\n} from './actions/wallet/writeContractSync.js'\nexport {\n  type Client,\n  type ClientConfig,\n  type CreateClientErrorType,\n  createClient,\n  type MulticallBatchOptions,\n  rpcSchema,\n} from './clients/createClient.js'\nexport {\n  type CreatePublicClientErrorType,\n  createPublicClient,\n  type PublicClient,\n  type PublicClientConfig,\n} from './clients/createPublicClient.js'\nexport {\n  type CreateTestClientErrorType,\n  createTestClient,\n  type TestClient,\n  type TestClientConfig,\n} from './clients/createTestClient.js'\nexport {\n  type CreateWalletClientErrorType,\n  createWalletClient,\n  type WalletClient,\n  type WalletClientConfig,\n} from './clients/createWalletClient.js'\nexport {\n  type PublicActions,\n  publicActions,\n} from './clients/decorators/public.js'\nexport {\n  type TestActions,\n  testActions,\n} from './clients/decorators/test.js'\nexport {\n  type WalletActions,\n  walletActions,\n} from './clients/decorators/wallet.js'\nexport {\n  type CreateTransportErrorType,\n  createTransport,\n  type Transport,\n  type TransportConfig,\n} from './clients/transports/createTransport.js'\nexport {\n  type CustomTransport,\n  type CustomTransportConfig,\n  type CustomTransportErrorType,\n  custom,\n} from './clients/transports/custom.js'\nexport {\n  type FallbackTransport,\n  type FallbackTransportConfig,\n  type FallbackTransportErrorType,\n  fallback,\n  shouldThrow,\n} from './clients/transports/fallback.js'\nexport {\n  type HttpTransport,\n  type HttpTransportConfig,\n  type HttpTransportErrorType,\n  http,\n} from './clients/transports/http.js'\nexport {\n  type WebSocketTransport,\n  type WebSocketTransportConfig,\n  type WebSocketTransportErrorType,\n  webSocket,\n} from './clients/transports/webSocket.js'\nexport {\n  erc20Abi,\n  erc20Abi_bytes32,\n  erc721Abi,\n  erc1155Abi,\n  erc4626Abi,\n  erc6492SignatureValidatorAbi,\n  /** @deprecated use `erc6492SignatureValidatorAbi` instead. */\n  erc6492SignatureValidatorAbi as universalSignatureValidatorAbi,\n  multicall3Abi,\n} from './constants/abis.js'\nexport { ethAddress, zeroAddress } from './constants/address.js'\nexport { zeroHash } from './constants/bytes.js'\nexport {\n  deploylessCallViaBytecodeBytecode,\n  deploylessCallViaFactoryBytecode,\n  erc6492SignatureValidatorByteCode,\n  /** @deprecated use `erc6492SignatureValidatorByteCode` instead. */\n  erc6492SignatureValidatorByteCode as universalSignatureValidatorByteCode,\n} from './constants/contracts.js'\nexport {\n  maxInt8,\n  maxInt16,\n  maxInt24,\n  maxInt32,\n  maxInt40,\n  maxInt48,\n  maxInt56,\n  maxInt64,\n  maxInt72,\n  maxInt80,\n  maxInt88,\n  maxInt96,\n  maxInt104,\n  maxInt112,\n  maxInt120,\n  maxInt128,\n  maxInt136,\n  maxInt144,\n  maxInt152,\n  maxInt160,\n  maxInt168,\n  maxInt176,\n  maxInt184,\n  maxInt192,\n  maxInt200,\n  maxInt208,\n  maxInt216,\n  maxInt224,\n  maxInt232,\n  maxInt240,\n  maxInt248,\n  maxInt256,\n  maxUint8,\n  maxUint16,\n  maxUint24,\n  maxUint32,\n  maxUint40,\n  maxUint48,\n  maxUint56,\n  maxUint64,\n  maxUint72,\n  maxUint80,\n  maxUint88,\n  maxUint96,\n  maxUint104,\n  maxUint112,\n  maxUint120,\n  maxUint128,\n  maxUint136,\n  maxUint144,\n  maxUint152,\n  maxUint160,\n  maxUint168,\n  maxUint176,\n  maxUint184,\n  maxUint192,\n  maxUint200,\n  maxUint208,\n  maxUint216,\n  maxUint224,\n  maxUint232,\n  maxUint240,\n  maxUint248,\n  maxUint256,\n  minInt8,\n  minInt16,\n  minInt24,\n  minInt32,\n  minInt40,\n  minInt48,\n  minInt56,\n  minInt64,\n  minInt72,\n  minInt80,\n  minInt88,\n  minInt96,\n  minInt104,\n  minInt112,\n  minInt120,\n  minInt128,\n  minInt136,\n  minInt144,\n  minInt152,\n  minInt160,\n  minInt168,\n  minInt176,\n  minInt184,\n  minInt192,\n  minInt200,\n  minInt208,\n  minInt216,\n  minInt224,\n  minInt232,\n  minInt240,\n  minInt248,\n  minInt256,\n} from './constants/number.js'\nexport { presignMessagePrefix } from './constants/strings.js'\nexport { etherUnits, gweiUnits, weiUnits } from './constants/unit.js'\nexport {\n  AbiConstructorNotFoundError,\n  type AbiConstructorNotFoundErrorType,\n  AbiConstructorParamsNotFoundError,\n  type AbiConstructorParamsNotFoundErrorType,\n  AbiDecodingDataSizeInvalidError,\n  type AbiDecodingDataSizeInvalidErrorType,\n  AbiDecodingDataSizeTooSmallError,\n  type AbiDecodingDataSizeTooSmallErrorType,\n  AbiDecodingZeroDataError,\n  type AbiDecodingZeroDataErrorType,\n  AbiEncodingArrayLengthMismatchError,\n  type AbiEncodingArrayLengthMismatchErrorType,\n  AbiEncodingBytesSizeMismatchError,\n  type AbiEncodingBytesSizeMismatchErrorType,\n  AbiEncodingLengthMismatchError,\n  type AbiEncodingLengthMismatchErrorType,\n  AbiErrorInputsNotFoundError,\n  type AbiErrorInputsNotFoundErrorType,\n  AbiErrorNotFoundError,\n  type AbiErrorNotFoundErrorType,\n  AbiErrorSignatureNotFoundError,\n  type AbiErrorSignatureNotFoundErrorType,\n  AbiEventNotFoundError,\n  type AbiEventNotFoundErrorType,\n  AbiEventSignatureEmptyTopicsError,\n  type AbiEventSignatureEmptyTopicsErrorType,\n  AbiEventSignatureNotFoundError,\n  type AbiEventSignatureNotFoundErrorType,\n  AbiFunctionNotFoundError,\n  type AbiFunctionNotFoundErrorType,\n  AbiFunctionOutputsNotFoundError,\n  type AbiFunctionOutputsNotFoundErrorType,\n  AbiFunctionSignatureNotFoundError,\n  type AbiFunctionSignatureNotFoundErrorType,\n  BytesSizeMismatchError,\n  type BytesSizeMismatchErrorType,\n  DecodeLogDataMismatch,\n  type DecodeLogDataMismatchErrorType,\n  DecodeLogTopicsMismatch,\n  type DecodeLogTopicsMismatchErrorType,\n  InvalidAbiDecodingTypeError,\n  type InvalidAbiDecodingTypeErrorType,\n  InvalidAbiEncodingTypeError,\n  type InvalidAbiEncodingTypeErrorType,\n  InvalidArrayError,\n  type InvalidArrayErrorType,\n  InvalidDefinitionTypeError,\n  type InvalidDefinitionTypeErrorType,\n  UnsupportedPackedAbiType,\n  type UnsupportedPackedAbiTypeErrorType,\n} from './errors/abi.js'\nexport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from './errors/address.js'\nexport { BaseError, type BaseErrorType, setErrorConfig } from './errors/base.js'\nexport {\n  BlockNotFoundError,\n  type BlockNotFoundErrorType,\n} from './errors/block.js'\nexport {\n  BundleFailedError,\n  type BundleFailedErrorType,\n} from './errors/calls.js'\nexport {\n  ChainDoesNotSupportContract,\n  type ChainDoesNotSupportContractErrorType,\n  ChainMismatchError,\n  type ChainMismatchErrorType,\n  ChainNotFoundError,\n  type ChainNotFoundErrorType,\n  ClientChainNotConfiguredError,\n  type ClientChainNotConfiguredErrorType,\n  InvalidChainIdError,\n  type InvalidChainIdErrorType,\n} from './errors/chain.js'\nexport {\n  CallExecutionError,\n  type CallExecutionErrorType,\n  ContractFunctionExecutionError,\n  type ContractFunctionExecutionErrorType,\n  ContractFunctionRevertedError,\n  type ContractFunctionRevertedErrorType,\n  ContractFunctionZeroDataError,\n  type ContractFunctionZeroDataErrorType,\n  CounterfactualDeploymentFailedError,\n  type CounterfactualDeploymentFailedErrorType,\n  RawContractError,\n  type RawContractErrorType,\n} from './errors/contract.js'\nexport {\n  SizeExceedsPaddingSizeError,\n  type SizeExceedsPaddingSizeErrorType,\n  SliceOffsetOutOfBoundsError,\n  type SliceOffsetOutOfBoundsErrorType,\n} from './errors/data.js'\nexport {\n  IntegerOutOfRangeError,\n  type IntegerOutOfRangeErrorType,\n  InvalidBytesBooleanError,\n  type InvalidBytesBooleanErrorType,\n  InvalidHexBooleanError,\n  type InvalidHexBooleanErrorType,\n  InvalidHexValueError,\n  type InvalidHexValueErrorType,\n  SizeOverflowError,\n  type SizeOverflowErrorType,\n} from './errors/encoding.js'\nexport {\n  type EnsAvatarInvalidMetadataError,\n  type EnsAvatarInvalidMetadataErrorType,\n  EnsAvatarInvalidNftUriError,\n  type EnsAvatarInvalidNftUriErrorType,\n  EnsAvatarUnsupportedNamespaceError,\n  type EnsAvatarUnsupportedNamespaceErrorType,\n  EnsAvatarUriResolutionError,\n  type EnsAvatarUriResolutionErrorType,\n  EnsInvalidChainIdError,\n  type EnsInvalidChainIdErrorType,\n} from './errors/ens.js'\nexport {\n  EstimateGasExecutionError,\n  type EstimateGasExecutionErrorType,\n} from './errors/estimateGas.js'\nexport {\n  BaseFeeScalarError,\n  type BaseFeeScalarErrorType,\n  Eip1559FeesNotSupportedError,\n  type Eip1559FeesNotSupportedErrorType,\n  MaxFeePerGasTooLowError,\n  type MaxFeePerGasTooLowErrorType,\n} from './errors/fee.js'\nexport {\n  FilterTypeNotSupportedError,\n  type FilterTypeNotSupportedErrorType,\n} from './errors/log.js'\nexport {\n  ExecutionRevertedError,\n  type ExecutionRevertedErrorType,\n  FeeCapTooHighError,\n  type FeeCapTooHighErrorType,\n  FeeCapTooLowError,\n  type FeeCapTooLowErrorType,\n  InsufficientFundsError,\n  type InsufficientFundsErrorType,\n  IntrinsicGasTooHighError,\n  type IntrinsicGasTooHighErrorType,\n  IntrinsicGasTooLowError,\n  type IntrinsicGasTooLowErrorType,\n  NonceMaxValueError,\n  type NonceMaxValueErrorType,\n  NonceTooHighError,\n  type NonceTooHighErrorType,\n  NonceTooLowError,\n  type NonceTooLowErrorType,\n  TipAboveFeeCapError,\n  type TipAboveFeeCapErrorType,\n  TransactionTypeNotSupportedError,\n  type TransactionTypeNotSupportedErrorType,\n  UnknownNodeError,\n  type UnknownNodeErrorType,\n} from './errors/node.js'\nexport {\n  HttpRequestError,\n  type HttpRequestErrorType,\n  RpcRequestError,\n  type RpcRequestErrorType,\n  SocketClosedError,\n  type SocketClosedErrorType,\n  TimeoutError,\n  type TimeoutErrorType,\n  WebSocketRequestError,\n  type WebSocketRequestErrorType,\n} from './errors/request.js'\nexport {\n  AtomicityNotSupportedError,\n  type AtomicityNotSupportedErrorType,\n  AtomicReadyWalletRejectedUpgradeError,\n  type AtomicReadyWalletRejectedUpgradeErrorType,\n  BundleTooLargeError,\n  type BundleTooLargeErrorType,\n  ChainDisconnectedError,\n  type ChainDisconnectedErrorType,\n  DuplicateIdError,\n  type DuplicateIdErrorType,\n  InternalRpcError,\n  type InternalRpcErrorType,\n  InvalidInputRpcError,\n  type InvalidInputRpcErrorType,\n  InvalidParamsRpcError,\n  type InvalidParamsRpcErrorType,\n  InvalidRequestRpcError,\n  type InvalidRequestRpcErrorType,\n  JsonRpcVersionUnsupportedError,\n  type JsonRpcVersionUnsupportedErrorType,\n  LimitExceededRpcError,\n  type LimitExceededRpcErrorType,\n  MethodNotFoundRpcError,\n  type MethodNotFoundRpcErrorType,\n  MethodNotSupportedRpcError,\n  type MethodNotSupportedRpcErrorType,\n  ParseRpcError,\n  type ParseRpcErrorType,\n  ProviderDisconnectedError,\n  type ProviderDisconnectedErrorType,\n  ProviderRpcError,\n  type ProviderRpcErrorCode,\n  type ProviderRpcErrorType,\n  ResourceNotFoundRpcError,\n  type ResourceNotFoundRpcErrorType,\n  ResourceUnavailableRpcError,\n  type ResourceUnavailableRpcErrorType,\n  RpcError,\n  type RpcErrorCode,\n  type RpcErrorType,\n  SwitchChainError,\n  TransactionRejectedRpcError,\n  type TransactionRejectedRpcErrorType,\n  UnauthorizedProviderError,\n  type UnauthorizedProviderErrorType,\n  UnknownBundleIdError,\n  type UnknownBundleIdErrorType,\n  UnknownRpcError,\n  type UnknownRpcErrorType,\n  UnsupportedChainIdError,\n  type UnsupportedChainIdErrorType,\n  UnsupportedNonOptionalCapabilityError,\n  type UnsupportedNonOptionalCapabilityErrorType,\n  UnsupportedProviderMethodError,\n  type UnsupportedProviderMethodErrorType,\n  UserRejectedRequestError,\n  type UserRejectedRequestErrorType,\n} from './errors/rpc.js'\nexport {\n  AccountStateConflictError,\n  type AccountStateConflictErrorType,\n  StateAssignmentConflictError,\n  type StateAssignmentConflictErrorType,\n} from './errors/stateOverride.js'\nexport {\n  FeeConflictError,\n  type FeeConflictErrorType,\n  InvalidLegacyVError,\n  type InvalidLegacyVErrorType,\n  InvalidSerializableTransactionError,\n  type InvalidSerializableTransactionErrorType,\n  InvalidSerializedTransactionError,\n  type InvalidSerializedTransactionErrorType,\n  InvalidSerializedTransactionTypeError,\n  type InvalidSerializedTransactionTypeErrorType,\n  InvalidStorageKeySizeError,\n  type InvalidStorageKeySizeErrorType,\n  TransactionExecutionError,\n  type TransactionExecutionErrorType,\n  TransactionNotFoundError,\n  type TransactionNotFoundErrorType,\n  TransactionReceiptNotFoundError,\n  type TransactionReceiptNotFoundErrorType,\n  WaitForTransactionReceiptTimeoutError,\n  type WaitForTransactionReceiptTimeoutErrorType,\n} from './errors/transaction.js'\nexport {\n  UrlRequiredError,\n  type UrlRequiredErrorType,\n} from './errors/transport.js'\nexport {\n  InvalidDomainError,\n  type InvalidDomainErrorType,\n  InvalidPrimaryTypeError,\n  type InvalidPrimaryTypeErrorType,\n  InvalidStructTypeError,\n  type InvalidStructTypeErrorType,\n} from './errors/typedData.js'\nexport {\n  InvalidDecimalNumberError,\n  type InvalidDecimalNumberErrorType,\n} from './errors/unit.js'\nexport type {\n  DeriveAccount,\n  HDKey,\n  ParseAccount,\n} from './types/account.js'\nexport type {\n  Authorization,\n  AuthorizationList,\n  AuthorizationRequest,\n  SerializedAuthorization,\n  SerializedAuthorizationList,\n  SignedAuthorization,\n  SignedAuthorizationList,\n} from './types/authorization.js'\nexport type {\n  Block,\n  BlockIdentifier,\n  BlockNumber,\n  BlockTag,\n  Uncle,\n} from './types/block.js'\nexport type { Call, Calls } from './types/calls.js'\nexport type {\n  Capabilities,\n  /** @deprecated Use `Capabilities` instead. */\n  Capabilities as WalletCapabilities,\n  CapabilitiesSchema,\n  /** @deprecated Use `ChainIdToCapabilities` instead. */\n  ChainIdToCapabilities as WalletCapabilitiesRecord,\n  ChainIdToCapabilities,\n  ExtractCapabilities,\n} from './types/capabilities.js'\nexport type {\n  Chain,\n  ChainConfig,\n  ChainContract,\n  ChainEstimateFeesPerGasFn,\n  ChainEstimateFeesPerGasFnParameters,\n  ChainFees,\n  ChainFeesFnParameters,\n  ChainFormatter,\n  ChainFormatters,\n  ChainMaxPriorityFeePerGasFn,\n  ChainSerializers,\n  DeriveChain,\n  ExtractChainFormatterExclude,\n  ExtractChainFormatterParameters,\n  ExtractChainFormatterReturnType,\n  GetChainParameter,\n} from './types/chain.js'\nexport type {\n  AbiEventParametersToPrimitiveTypes,\n  AbiEventParameterToPrimitiveType,\n  AbiEventTopicToPrimitiveType,\n  AbiItem,\n  AbiItemArgs,\n  AbiItemName,\n  ContractConstructorArgs,\n  ContractErrorArgs,\n  ContractErrorName,\n  ContractEventArgs,\n  ContractEventArgsFromTopics,\n  ContractEventName,\n  ContractFunctionArgs,\n  ContractFunctionName,\n  ContractFunctionParameters,\n  ContractFunctionReturnType,\n  EventDefinition,\n  ExtractAbiFunctionForArgs,\n  ExtractAbiItem,\n  ExtractAbiItemForArgs,\n  ExtractAbiItemNames,\n  GetEventArgs,\n  GetValue,\n  LogTopicType,\n  MaybeAbiEventName,\n  MaybeExtractEventArgsFromAbi,\n  UnionWiden,\n  Widen,\n} from './types/contract.js'\nexport type { DataSuffix } from './types/dataSuffix.js'\nexport type {\n  AddEthereumChainParameter,\n  BundlerRpcSchema,\n  DebugBundlerRpcSchema,\n  EIP1193EventMap,\n  EIP1193Events,\n  EIP1193Parameters,\n  EIP1193Provider,\n  EIP1193RequestFn,\n  EIP1474Methods,\n  NetworkSync,\n  PaymasterRpcSchema,\n  ProviderConnectInfo,\n  ProviderMessage,\n  ProviderRpcErrorType as EIP1193ProviderRpcErrorType,\n  PublicRpcSchema,\n  RpcSchema,\n  RpcSchemaOverride,\n  TestRpcSchema,\n  WalletCallReceipt,\n  WalletGetAssetsParameters,\n  WalletGetAssetsReturnType,\n  WalletGetCallsStatusReturnType,\n  WalletGrantPermissionsParameters,\n  WalletGrantPermissionsReturnType,\n  WalletPermission,\n  WalletPermissionCaveat,\n  WalletRpcSchema,\n  WalletSendCallsParameters,\n  WalletSendCallsReturnType,\n  WatchAssetParams,\n} from './types/eip1193.js'\nexport { ProviderRpcError as EIP1193ProviderRpcError } from './types/eip1193.js'\nexport type { BlobSidecar, BlobSidecars } from './types/eip4844.js'\nexport type { AssetGateway, AssetGatewayUrls } from './types/ens.js'\nexport type {\n  FeeHistory,\n  FeeValues,\n  FeeValuesEIP1559,\n  FeeValuesEIP4844,\n  FeeValuesLegacy,\n  FeeValuesType,\n} from './types/fee.js'\nexport type { Filter, FilterType } from './types/filter.js'\nexport type { GetTransactionRequestKzgParameter, Kzg } from './types/kzg.js'\nexport type { Log } from './types/log.js'\nexport type {\n  ByteArray,\n  CompactSignature,\n  Hash,\n  Hex,\n  LogTopic,\n  SignableMessage,\n  Signature,\n} from './types/misc.js'\nexport type {\n  MulticallContracts,\n  MulticallResponse,\n  MulticallResults,\n} from './types/multicall.js'\nexport type { Register, ResolvedRegister } from './types/register.js'\nexport type {\n  Index,\n  Quantity,\n  RpcAccountStateOverride,\n  RpcAuthorization,\n  RpcAuthorizationList,\n  RpcBlock,\n  RpcBlockIdentifier,\n  RpcBlockNumber,\n  RpcFeeHistory,\n  RpcFeeValues,\n  RpcLog,\n  RpcProof,\n  RpcStateMapping,\n  RpcStateOverride,\n  RpcTransaction,\n  RpcTransactionReceipt,\n  RpcTransactionRequest,\n  RpcUncle,\n  Status,\n} from './types/rpc.js'\nexport type {\n  StateMapping,\n  StateOverride,\n} from './types/stateOverride.js'\nexport type {\n  AccessList,\n  Transaction,\n  TransactionBase,\n  TransactionEIP1559,\n  TransactionEIP2930,\n  TransactionEIP4844,\n  TransactionEIP7702,\n  TransactionLegacy,\n  TransactionReceipt,\n  TransactionRequest,\n  TransactionRequestBase,\n  TransactionRequestEIP1559,\n  TransactionRequestEIP2930,\n  TransactionRequestEIP4844,\n  TransactionRequestEIP7702,\n  TransactionRequestGeneric,\n  TransactionRequestLegacy,\n  TransactionSerializable,\n  TransactionSerializableBase,\n  TransactionSerializableEIP1559,\n  TransactionSerializableEIP2930,\n  TransactionSerializableEIP4844,\n  TransactionSerializableEIP7702,\n  TransactionSerializableGeneric,\n  TransactionSerializableLegacy,\n  TransactionSerialized,\n  TransactionSerializedEIP1559,\n  TransactionSerializedEIP2930,\n  TransactionSerializedEIP4844,\n  TransactionSerializedEIP7702,\n  TransactionSerializedGeneric,\n  TransactionSerializedLegacy,\n  TransactionType,\n} from './types/transaction.js'\nexport type { GetPollOptions, GetTransportConfig } from './types/transport.js'\nexport type {\n  EIP712DomainDefinition,\n  MessageDefinition,\n  TypedDataDefinition,\n} from './types/typedData.js'\nexport type {\n  Assign,\n  Branded,\n  Evaluate,\n  ExactPartial,\n  ExactRequired,\n  IsNarrowable,\n  IsNever,\n  IsUndefined,\n  IsUnion,\n  LooseOmit,\n  MaybePartial,\n  MaybePromise,\n  MaybeRequired,\n  Mutable,\n  NoInfer,\n  NoUndefined,\n  Omit,\n  OneOf,\n  Or,\n  PartialBy,\n  Prettify,\n  RequiredBy,\n  Some,\n  UnionEvaluate,\n  UnionLooseOmit,\n  UnionOmit,\n  UnionPartialBy,\n  UnionPick,\n  UnionRequiredBy,\n  UnionToTuple,\n  ValueOf,\n} from './types/utils.js'\nexport type { Withdrawal } from './types/withdrawal.js'\nexport {\n  type DecodeAbiParametersErrorType,\n  type DecodeAbiParametersReturnType,\n  decodeAbiParameters,\n} from './utils/abi/decodeAbiParameters.js'\nexport {\n  type DecodeDeployDataErrorType,\n  type DecodeDeployDataParameters,\n  type DecodeDeployDataReturnType,\n  decodeDeployData,\n} from './utils/abi/decodeDeployData.js'\nexport {\n  type DecodeErrorResultErrorType,\n  type DecodeErrorResultParameters,\n  type DecodeErrorResultReturnType,\n  decodeErrorResult,\n} from './utils/abi/decodeErrorResult.js'\nexport {\n  type DecodeEventLogErrorType,\n  type DecodeEventLogParameters,\n  type DecodeEventLogReturnType,\n  decodeEventLog,\n} from './utils/abi/decodeEventLog.js'\nexport {\n  type DecodeFunctionDataErrorType,\n  type DecodeFunctionDataParameters,\n  type DecodeFunctionDataReturnType,\n  decodeFunctionData,\n} from './utils/abi/decodeFunctionData.js'\nexport {\n  type DecodeFunctionResultErrorType,\n  type DecodeFunctionResultParameters,\n  type DecodeFunctionResultReturnType,\n  decodeFunctionResult,\n} from './utils/abi/decodeFunctionResult.js'\nexport {\n  type EncodeAbiParametersErrorType,\n  type EncodeAbiParametersReturnType,\n  encodeAbiParameters,\n} from './utils/abi/encodeAbiParameters.js'\nexport {\n  type EncodeDeployDataErrorType,\n  type EncodeDeployDataParameters,\n  type EncodeDeployDataReturnType,\n  encodeDeployData,\n} from './utils/abi/encodeDeployData.js'\nexport {\n  type EncodeErrorResultErrorType,\n  type EncodeErrorResultParameters,\n  type EncodeErrorResultReturnType,\n  encodeErrorResult,\n} from './utils/abi/encodeErrorResult.js'\nexport {\n  type EncodeEventTopicsErrorType,\n  type EncodeEventTopicsParameters,\n  type EncodeEventTopicsReturnType,\n  encodeEventTopics,\n} from './utils/abi/encodeEventTopics.js'\nexport {\n  type EncodeFunctionDataErrorType,\n  type EncodeFunctionDataParameters,\n  type EncodeFunctionDataReturnType,\n  encodeFunctionData,\n} from './utils/abi/encodeFunctionData.js'\nexport {\n  type EncodeFunctionResultErrorType,\n  type EncodeFunctionResultParameters,\n  type EncodeFunctionResultReturnType,\n  encodeFunctionResult,\n} from './utils/abi/encodeFunctionResult.js'\nexport {\n  type EncodePackedErrorType,\n  encodePacked,\n} from './utils/abi/encodePacked.js'\nexport {\n  type GetAbiItemErrorType,\n  type GetAbiItemParameters,\n  type GetAbiItemReturnType,\n  getAbiItem,\n} from './utils/abi/getAbiItem.js'\nexport {\n  type ParseEventLogsErrorType,\n  type ParseEventLogsParameters,\n  type ParseEventLogsReturnType,\n  parseEventLogs,\n} from './utils/abi/parseEventLogs.js'\nexport {\n  type PrepareEncodeFunctionDataErrorType,\n  type PrepareEncodeFunctionDataParameters,\n  type PrepareEncodeFunctionDataReturnType,\n  prepareEncodeFunctionData,\n} from './utils/abi/prepareEncodeFunctionData.js'\nexport {\n  type ChecksumAddressErrorType,\n  checksumAddress,\n  type GetAddressErrorType,\n  getAddress,\n} from './utils/address/getAddress.js'\nexport {\n  type GetContractAddressOptions,\n  type GetCreate2AddressErrorType,\n  type GetCreate2AddressOptions,\n  type GetCreateAddressErrorType,\n  type GetCreateAddressOptions,\n  getContractAddress,\n  getCreate2Address,\n  getCreateAddress,\n} from './utils/address/getContractAddress.js'\nexport {\n  type IsAddressErrorType,\n  type IsAddressOptions,\n  isAddress,\n} from './utils/address/isAddress.js'\nexport {\n  type IsAddressEqualErrorType,\n  type IsAddressEqualReturnType,\n  isAddressEqual,\n} from './utils/address/isAddressEqual.js'\nexport {\n  type BlobsToCommitmentsErrorType,\n  type BlobsToCommitmentsParameters,\n  type BlobsToCommitmentsReturnType,\n  blobsToCommitments,\n} from './utils/blob/blobsToCommitments.js'\nexport {\n  blobsToProofs,\n  type blobsToProofsErrorType,\n  type blobsToProofsParameters,\n  type blobsToProofsReturnType,\n} from './utils/blob/blobsToProofs.js'\nexport {\n  type CommitmentsToVersionedHashesErrorType,\n  type CommitmentsToVersionedHashesParameters,\n  type CommitmentsToVersionedHashesReturnType,\n  commitmentsToVersionedHashes,\n} from './utils/blob/commitmentsToVersionedHashes.js'\nexport {\n  type CommitmentToVersionedHashErrorType,\n  type CommitmentToVersionedHashParameters,\n  type CommitmentToVersionedHashReturnType,\n  commitmentToVersionedHash,\n} from './utils/blob/commitmentToVersionedHash.js'\nexport {\n  type FromBlobsErrorType,\n  type FromBlobsParameters,\n  type FromBlobsReturnType,\n  fromBlobs,\n} from './utils/blob/fromBlobs.js'\nexport {\n  type SidecarsToVersionedHashesErrorType,\n  type SidecarsToVersionedHashesParameters,\n  type SidecarsToVersionedHashesReturnType,\n  sidecarsToVersionedHashes,\n} from './utils/blob/sidecarsToVersionedHashes.js'\nexport {\n  type ToBlobSidecarsErrorType,\n  type ToBlobSidecarsParameters,\n  type ToBlobSidecarsReturnType,\n  toBlobSidecars,\n} from './utils/blob/toBlobSidecars.js'\nexport {\n  type ToBlobsErrorType,\n  type ToBlobsParameters,\n  type ToBlobsReturnType,\n  toBlobs,\n} from './utils/blob/toBlobs.js'\nexport {\n  type CcipRequestErrorType,\n  type CcipRequestParameters,\n  ccipRequest,\n  /** @deprecated Use `ccipRequest`. */\n  ccipRequest as ccipFetch,\n  type OffchainLookupErrorType,\n  offchainLookup,\n  offchainLookupAbiItem,\n  offchainLookupSignature,\n} from './utils/ccip.js'\nexport {\n  type AssertCurrentChainErrorType,\n  type AssertCurrentChainParameters,\n  assertCurrentChain,\n} from './utils/chain/assertCurrentChain.js'\nexport {\n  type DefineChainReturnType,\n  defineChain,\n  extendSchema,\n} from './utils/chain/defineChain.js'\nexport {\n  type ExtractChainErrorType,\n  type ExtractChainParameters,\n  type ExtractChainReturnType,\n  extractChain,\n} from './utils/chain/extractChain.js'\nexport {\n  type GetChainContractAddressErrorType,\n  getChainContractAddress,\n} from './utils/chain/getChainContractAddress.js'\nexport {\n  type ConcatBytesErrorType,\n  type ConcatErrorType,\n  type ConcatHexErrorType,\n  type ConcatReturnType,\n  concat,\n  concatBytes,\n  concatHex,\n} from './utils/data/concat.js'\nexport { type IsBytesErrorType, isBytes } from './utils/data/isBytes.js'\nexport { type IsHexErrorType, isHex } from './utils/data/isHex.js'\nexport {\n  type PadBytesErrorType,\n  type PadErrorType,\n  type PadHexErrorType,\n  type PadReturnType,\n  pad,\n  padBytes,\n  padHex,\n} from './utils/data/pad.js'\nexport { type SizeErrorType, size } from './utils/data/size.js'\nexport {\n  type SliceBytesErrorType,\n  type SliceErrorType,\n  type SliceHexErrorType,\n  slice,\n  sliceBytes,\n  sliceHex,\n} from './utils/data/slice.js'\nexport {\n  type TrimErrorType,\n  type TrimReturnType,\n  trim,\n} from './utils/data/trim.js'\nexport {\n  type BytesToBigIntErrorType,\n  type BytesToBigIntOpts,\n  type BytesToBoolErrorType,\n  type BytesToBoolOpts,\n  type BytesToNumberErrorType,\n  type BytesToNumberOpts,\n  type BytesToStringErrorType,\n  type BytesToStringOpts,\n  bytesToBigInt,\n  bytesToBool,\n  bytesToNumber,\n  bytesToString,\n  type FromBytesErrorType,\n  type FromBytesParameters,\n  fromBytes,\n} from './utils/encoding/fromBytes.js'\nexport {\n  type FromHexErrorType,\n  fromHex,\n  type HexToBigIntErrorType,\n  type HexToBoolErrorType,\n  type HexToNumberErrorType,\n  type HexToStringErrorType,\n  hexToBigInt,\n  hexToBool,\n  hexToNumber,\n  hexToString,\n} from './utils/encoding/fromHex.js'\nexport {\n  type FromRlpErrorType,\n  type FromRlpReturnType,\n  fromRlp,\n} from './utils/encoding/fromRlp.js'\nexport {\n  type BoolToBytesErrorType,\n  type BoolToBytesOpts,\n  boolToBytes,\n  type HexToBytesErrorType,\n  type HexToBytesOpts,\n  hexToBytes,\n  type NumberToBytesErrorType,\n  numberToBytes,\n  type StringToBytesErrorType,\n  type StringToBytesOpts,\n  stringToBytes,\n  type ToBytesErrorType,\n  type ToBytesParameters,\n  toBytes,\n} from './utils/encoding/toBytes.js'\nexport {\n  type BoolToHexErrorType,\n  type BoolToHexOpts,\n  type BytesToHexErrorType,\n  type BytesToHexOpts,\n  boolToHex,\n  bytesToHex,\n  type NumberToHexErrorType,\n  type NumberToHexOpts,\n  numberToHex,\n  type StringToHexErrorType,\n  type StringToHexOpts,\n  stringToHex,\n  type ToHexErrorType,\n  type ToHexParameters,\n  toHex,\n} from './utils/encoding/toHex.js'\nexport {\n  type BytesToRlpErrorType,\n  bytesToRlp,\n  type HexToRlpErrorType,\n  hexToRlp,\n  type ToRlpErrorType,\n  type ToRlpReturnType,\n  toRlp,\n} from './utils/encoding/toRlp.js'\nexport { type LabelhashErrorType, labelhash } from './utils/ens/labelhash.js'\nexport { type NamehashErrorType, namehash } from './utils/ens/namehash.js'\nexport {\n  type ToCoinTypeError,\n  toCoinType,\n} from './utils/ens/toCoinType.js'\nexport {\n  type GetContractErrorReturnType,\n  getContractError,\n} from './utils/errors/getContractError.js'\nexport {\n  type DefineBlockErrorType,\n  defineBlock,\n  type FormatBlockErrorType,\n  type FormattedBlock,\n  formatBlock,\n} from './utils/formatters/block.js'\nexport { type FormatLogErrorType, formatLog } from './utils/formatters/log.js'\nexport {\n  type DefineTransactionErrorType,\n  defineTransaction,\n  type FormatTransactionErrorType,\n  type FormattedTransaction,\n  formatTransaction,\n  transactionType,\n} from './utils/formatters/transaction.js'\nexport {\n  type DefineTransactionReceiptErrorType,\n  defineTransactionReceipt,\n  type FormatTransactionReceiptErrorType,\n  type FormattedTransactionReceipt,\n  formatTransactionReceipt,\n} from './utils/formatters/transactionReceipt.js'\nexport {\n  type DefineTransactionRequestErrorType,\n  defineTransactionRequest,\n  type FormatTransactionRequestErrorType,\n  type FormattedTransactionRequest,\n  formatTransactionRequest,\n  rpcTransactionType,\n} from './utils/formatters/transactionRequest.js'\nexport { type IsHashErrorType, isHash } from './utils/hash/isHash.js'\nexport {\n  type Keccak256ErrorType,\n  type Keccak256Hash,\n  keccak256,\n} from './utils/hash/keccak256.js'\nexport {\n  type Ripemd160ErrorType,\n  type Ripemd160Hash,\n  ripemd160,\n} from './utils/hash/ripemd160.js'\nexport {\n  type Sha256ErrorType,\n  type Sha256Hash,\n  sha256,\n} from './utils/hash/sha256.js'\nexport {\n  type ToEventHashErrorType,\n  toEventHash,\n} from './utils/hash/toEventHash.js'\nexport {\n  type ToEventSelectorErrorType,\n  /** @deprecated use `ToEventSelectorErrorType`. */\n  type ToEventSelectorErrorType as GetEventSelectorErrorType,\n  toEventSelector,\n  /** @deprecated use `toEventSelector`. */\n  toEventSelector as getEventSelector,\n} from './utils/hash/toEventSelector.js'\nexport {\n  type ToEventSignatureErrorType,\n  /** @deprecated use `ToEventSignatureErrorType`. */\n  type ToEventSignatureErrorType as GetEventSignatureErrorType,\n  toEventSignature,\n  /** @deprecated use `toEventSignature`. */\n  toEventSignature as getEventSignature,\n} from './utils/hash/toEventSignature.js'\nexport {\n  type ToFunctionHashErrorType,\n  toFunctionHash,\n} from './utils/hash/toFunctionHash.js'\nexport {\n  type ToFunctionSelectorErrorType,\n  /** @deprecated use `ToFunctionSelectorErrorType`. */\n  type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n  toFunctionSelector,\n  /** @deprecated use `toFunctionSelector`. */\n  toFunctionSelector as getFunctionSelector,\n} from './utils/hash/toFunctionSelector.js'\nexport {\n  type ToFunctionSignatureErrorType,\n  /** @deprecated use `ToFunctionSignatureErrorType`. */\n  type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n  toFunctionSignature,\n  /** @deprecated use `toFunctionSignature`. */\n  toFunctionSignature as getFunctionSignature,\n} from './utils/hash/toFunctionSignature.js'\nexport {\n  type DefineKzgErrorType,\n  type DefineKzgParameters,\n  type DefineKzgReturnType,\n  defineKzg,\n} from './utils/kzg/defineKzg.js'\nexport {\n  type SetupKzgErrorType,\n  type SetupKzgParameters,\n  type SetupKzgReturnType,\n  setupKzg,\n} from './utils/kzg/setupKzg.js'\nexport {\n  type CreateNonceManagerParameters,\n  createNonceManager,\n  type NonceManager,\n  type NonceManagerSource,\n  nonceManager,\n} from './utils/nonceManager.js'\nexport { withCache } from './utils/promise/withCache.js'\nexport {\n  type WithRetryErrorType,\n  withRetry,\n} from './utils/promise/withRetry.js'\nexport {\n  type WithTimeoutErrorType,\n  withTimeout,\n} from './utils/promise/withTimeout.js'\nexport {\n  type CompactSignatureToSignatureErrorType,\n  compactSignatureToSignature,\n} from './utils/signature/compactSignatureToSignature.js'\nexport {\n  type HashMessageErrorType,\n  hashMessage,\n} from './utils/signature/hashMessage.js'\nexport {\n  type HashDomainErrorType,\n  type HashStructErrorType,\n  type HashTypedDataErrorType,\n  type HashTypedDataParameters,\n  type HashTypedDataReturnType,\n  hashDomain,\n  hashStruct,\n  hashTypedData,\n} from './utils/signature/hashTypedData.js'\nexport {\n  type IsErc6492SignatureErrorType,\n  type IsErc6492SignatureParameters,\n  type IsErc6492SignatureReturnType,\n  isErc6492Signature,\n} from './utils/signature/isErc6492Signature.js'\nexport {\n  type IsErc8010SignatureErrorType,\n  type IsErc8010SignatureParameters,\n  type IsErc8010SignatureReturnType,\n  isErc8010Signature,\n} from './utils/signature/isErc8010Signature.js'\nexport {\n  /** @deprecated Use `ParseCompactSignatureErrorType`. */\n  type ParseCompactSignatureErrorType as HexToCompactSignatureErrorType,\n  type ParseCompactSignatureErrorType,\n  /** @deprecated Use `parseCompactSignature`. */\n  parseCompactSignature as hexToCompactSignature,\n  parseCompactSignature,\n} from './utils/signature/parseCompactSignature.js'\nexport {\n  type ParseErc6492SignatureErrorType,\n  type ParseErc6492SignatureParameters,\n  type ParseErc6492SignatureReturnType,\n  parseErc6492Signature,\n} from './utils/signature/parseErc6492Signature.js'\nexport {\n  type ParseErc8010SignatureErrorType,\n  type ParseErc8010SignatureParameters,\n  type ParseErc8010SignatureReturnType,\n  parseErc8010Signature,\n} from './utils/signature/parseErc8010Signature.js'\nexport {\n  /** @deprecated Use `ParseSignatureErrorType`. */\n  type ParseSignatureErrorType as HexToSignatureErrorType,\n  type ParseSignatureErrorType,\n  /** @deprecated Use `parseSignature`. */\n  parseSignature as hexToSignature,\n  parseSignature,\n} from './utils/signature/parseSignature.js'\nexport {\n  type RecoverAddressErrorType,\n  type RecoverAddressParameters,\n  type RecoverAddressReturnType,\n  recoverAddress,\n} from './utils/signature/recoverAddress.js'\nexport {\n  type RecoverMessageAddressErrorType,\n  type RecoverMessageAddressParameters,\n  type RecoverMessageAddressReturnType,\n  recoverMessageAddress,\n} from './utils/signature/recoverMessageAddress.js'\nexport {\n  type RecoverPublicKeyErrorType,\n  type RecoverPublicKeyParameters,\n  type RecoverPublicKeyReturnType,\n  recoverPublicKey,\n} from './utils/signature/recoverPublicKey.js'\nexport {\n  type RecoverTransactionAddressErrorType,\n  type RecoverTransactionAddressParameters,\n  type RecoverTransactionAddressReturnType,\n  recoverTransactionAddress,\n} from './utils/signature/recoverTransactionAddress.js'\nexport {\n  type RecoverTypedDataAddressErrorType,\n  type RecoverTypedDataAddressParameters,\n  type RecoverTypedDataAddressReturnType,\n  recoverTypedDataAddress,\n} from './utils/signature/recoverTypedDataAddress.js'\nexport {\n  /** @deprecated Use `SignatureToHexErrorType` instead. */\n  type SerializeCompactSignatureErrorType as CompactSignatureToHexErrorType,\n  type SerializeCompactSignatureErrorType,\n  /** @deprecated Use `serializeCompactSignature` instead. */\n  serializeCompactSignature as compactSignatureToHex,\n  serializeCompactSignature,\n} from './utils/signature/serializeCompactSignature.js'\nexport {\n  type SerializeErc6492SignatureErrorType,\n  type SerializeErc6492SignatureParameters,\n  type SerializeErc6492SignatureReturnType,\n  serializeErc6492Signature,\n} from './utils/signature/serializeErc6492Signature.js'\nexport {\n  type SerializeErc8010SignatureErrorType,\n  type SerializeErc8010SignatureParameters,\n  type SerializeErc8010SignatureReturnType,\n  serializeErc8010Signature,\n} from './utils/signature/serializeErc8010Signature.js'\nexport {\n  /** @deprecated Use `SignatureToHexErrorType` instead. */\n  type SerializeSignatureErrorType as SignatureToHexErrorType,\n  type SerializeSignatureErrorType,\n  type SerializeSignatureParameters,\n  type SerializeSignatureReturnType,\n  /** @deprecated Use `serializeSignature` instead. */\n  serializeSignature as signatureToHex,\n  serializeSignature,\n} from './utils/signature/serializeSignature.js'\nexport {\n  type SignatureToCompactSignatureErrorType,\n  signatureToCompactSignature,\n} from './utils/signature/signatureToCompactSignature.js'\nexport {\n  type ToPrefixedMessageErrorType,\n  toPrefixedMessage,\n} from './utils/signature/toPrefixedMessage.js'\nexport {\n  type VerifyHashErrorType,\n  type VerifyHashParameters,\n  type VerifyHashReturnType,\n  verifyHash,\n} from './utils/signature/verifyHash.js'\nexport {\n  type VerifyMessageErrorType,\n  type VerifyMessageParameters,\n  type VerifyMessageReturnType,\n  verifyMessage,\n} from './utils/signature/verifyMessage.js'\nexport {\n  type VerifyTypedDataErrorType,\n  type VerifyTypedDataParameters,\n  type VerifyTypedDataReturnType,\n  verifyTypedData,\n} from './utils/signature/verifyTypedData.js'\nexport { type StringifyErrorType, stringify } from './utils/stringify.js'\nexport {\n  type AssertRequestErrorType,\n  assertRequest,\n} from './utils/transaction/assertRequest.js'\nexport {\n  type AssertTransactionEIP1559ErrorType,\n  type AssertTransactionEIP2930ErrorType,\n  type AssertTransactionLegacyErrorType,\n  assertTransactionEIP1559,\n  assertTransactionEIP2930,\n  assertTransactionLegacy,\n} from './utils/transaction/assertTransaction.js'\nexport {\n  type GetSerializedTransactionType,\n  type GetSerializedTransactionTypeErrorType,\n  getSerializedTransactionType,\n} from './utils/transaction/getSerializedTransactionType.js'\nexport {\n  type GetTransactionType,\n  type GetTransactionTypeErrorType,\n  getTransactionType,\n} from './utils/transaction/getTransactionType.js'\nexport {\n  type ParseTransactionErrorType,\n  type ParseTransactionReturnType,\n  parseTransaction,\n} from './utils/transaction/parseTransaction.js'\nexport {\n  type SerializeAccessListErrorType,\n  serializeAccessList,\n} from './utils/transaction/serializeAccessList.js'\nexport {\n  type SerializedTransactionReturnType,\n  type SerializeTransactionErrorType,\n  type SerializeTransactionFn,\n  serializeTransaction,\n} from './utils/transaction/serializeTransaction.js'\nexport {\n  type DomainSeparatorErrorType,\n  domainSeparator,\n  type GetTypesForEIP712DomainErrorType,\n  getTypesForEIP712Domain,\n  type SerializeTypedDataErrorType,\n  serializeTypedData,\n  type ValidateTypedDataErrorType,\n  validateTypedData,\n} from './utils/typedData.js'\nexport {\n  type FormatEtherErrorType,\n  formatEther,\n} from './utils/unit/formatEther.js'\nexport {\n  type FormatGweiErrorType,\n  formatGwei,\n} from './utils/unit/formatGwei.js'\nexport {\n  type FormatUnitsErrorType,\n  formatUnits,\n} from './utils/unit/formatUnits.js'\nexport {\n  type ParseEtherErrorType,\n  parseEther,\n} from './utils/unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './utils/unit/parseGwei.js'\nexport {\n  type ParseUnitsErrorType,\n  parseUnits,\n} from './utils/unit/parseUnits.js'\n", "import type { Chain } from '../types/chain.js'\n\n/**\n * Predeploy contracts for OP Stack.\n * @see https://github.com/ethereum-optimism/optimism/blob/develop/specs/predeploys.md\n */\nexport const contracts = {\n  gasPriceOracle: { address: '0x420000000000000000000000000000000000000F' },\n  l1Block: { address: '0x4200000000000000000000000000000000000015' },\n  l2CrossDomainMessenger: {\n    address: '0x4200000000000000000000000000000000000007',\n  },\n  l2Erc721Bridge: { address: '0x4200000000000000000000000000000000000014' },\n  l2StandardBridge: { address: '0x4200000000000000000000000000000000000010' },\n  l2ToL1MessagePasser: {\n    address: '0x4200000000000000000000000000000000000016',\n  },\n} as const satisfies Chain['contracts']\n", "import type { ChainFormatters } from '../types/chain.js'\nimport type { RpcTransaction } from '../types/rpc.js'\nimport { hexToBigInt } from '../utils/encoding/fromHex.js'\nimport { defineBlock } from '../utils/formatters/block.js'\nimport {\n  defineTransaction,\n  formatTransaction,\n} from '../utils/formatters/transaction.js'\nimport { defineTransactionReceipt } from '../utils/formatters/transactionReceipt.js'\nimport type { OpStackBlock, OpStackRpcBlock } from './types/block.js'\nimport type {\n  OpStackRpcTransaction,\n  OpStackRpcTransactionReceipt,\n  OpStackTransaction,\n  OpStackTransactionReceipt,\n} from './types/transaction.js'\n\nexport const formatters = {\n  block: /*#__PURE__*/ defineBlock({\n    format(args: OpStackRpcBlock): OpStackBlock {\n      const transactions = args.transactions?.map((transaction) => {\n        if (typeof transaction === 'string') return transaction\n        const formatted = formatTransaction(\n          transaction as RpcTransaction,\n        ) as OpStackTransaction\n        if (formatted.typeHex === '0x7e') {\n          formatted.isSystemTx = transaction.isSystemTx\n          formatted.mint = transaction.mint\n            ? hexToBigInt(transaction.mint)\n            : undefined\n          formatted.sourceHash = transaction.sourceHash\n          formatted.type = 'deposit'\n        }\n        return formatted\n      })\n      return {\n        transactions,\n        stateRoot: args.stateRoot,\n      } as OpStackBlock\n    },\n  }),\n  transaction: /*#__PURE__*/ defineTransaction({\n    format(args: OpStackRpcTransaction): OpStackTransaction {\n      const transaction = {} as OpStackTransaction\n      if (args.type === '0x7e') {\n        transaction.isSystemTx = args.isSystemTx\n        transaction.mint = args.mint ? hexToBigInt(args.mint) : undefined\n        transaction.sourceHash = args.sourceHash\n        transaction.type = 'deposit'\n      }\n      return transaction\n    },\n  }),\n  transactionReceipt: /*#__PURE__*/ defineTransactionReceipt({\n    format(args: OpStackRpcTransactionReceipt): OpStackTransactionReceipt {\n      return {\n        l1GasPrice: args.l1GasPrice ? hexToBigInt(args.l1GasPrice) : null,\n        l1GasUsed: args.l1GasUsed ? hexToBigInt(args.l1GasUsed) : null,\n        l1Fee: args.l1Fee ? hexToBigInt(args.l1Fee) : null,\n        l1FeeScalar: args.l1FeeScalar ? Number(args.l1FeeScalar) : null,\n      } as OpStackTransactionReceipt\n    },\n  }),\n} as const satisfies ChainFormatters\n", "import { InvalidAddressError } from '../errors/address.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { ChainSerializers } from '../types/chain.js'\nimport type { Hex, Signature } from '../types/misc.js'\nimport type { TransactionSerializable } from '../types/transaction.js'\nimport type { RequiredBy } from '../types/utils.js'\nimport { isAddress } from '../utils/address/isAddress.js'\nimport { concatHex } from '../utils/data/concat.js'\nimport { toHex } from '../utils/encoding/toHex.js'\nimport { toRlp } from '../utils/encoding/toRlp.js'\nimport {\n  type SerializeTransactionErrorType as SerializeTransactionErrorType_,\n  serializeTransaction as serializeTransaction_,\n} from '../utils/transaction/serializeTransaction.js'\nimport type {\n  OpStackTransactionSerializable,\n  TransactionSerializableDeposit,\n  TransactionSerializedDeposit,\n} from './types/transaction.js'\n\nexport type SerializeTransactionReturnType = ReturnType<\n  typeof serializeTransaction\n>\n\nexport type SerializeTransactionErrorType =\n  | SerializeTransactionErrorType_\n  | ErrorType\n\nexport function serializeTransaction(\n  transaction: OpStackTransactionSerializable,\n  signature?: Signature,\n) {\n  if (isDeposit(transaction)) return serializeTransactionDeposit(transaction)\n  return serializeTransaction_(\n    transaction as TransactionSerializable,\n    signature,\n  )\n}\n\nexport const serializers = {\n  transaction: serializeTransaction,\n} as const satisfies ChainSerializers\n\n//////////////////////////////////////////////////////////////////////////////\n// Serializers\n\nexport type SerializeTransactionDepositReturnType = TransactionSerializedDeposit\n\nfunction serializeTransactionDeposit(\n  transaction: TransactionSerializableDeposit,\n): SerializeTransactionDepositReturnType {\n  assertTransactionDeposit(transaction)\n\n  const { sourceHash, data, from, gas, isSystemTx, mint, to, value } =\n    transaction\n\n  const serializedTransaction: Hex[] = [\n    sourceHash,\n    from,\n    to ?? '0x',\n    mint ? toHex(mint) : '0x',\n    value ? toHex(value) : '0x',\n    gas ? toHex(gas) : '0x',\n    isSystemTx ? '0x1' : '0x',\n    data ?? '0x',\n  ]\n\n  return concatHex([\n    '0x7e',\n    toRlp(serializedTransaction),\n  ]) as SerializeTransactionDepositReturnType\n}\n\nfunction isDeposit(\n  transaction: OpStackTransactionSerializable,\n): transaction is RequiredBy<TransactionSerializableDeposit, 'type'> {\n  if (transaction.type === 'deposit') return true\n  if (typeof transaction.sourceHash !== 'undefined') return true\n  return false\n}\n\nexport function assertTransactionDeposit(\n  transaction: TransactionSerializableDeposit,\n) {\n  const { from, to } = transaction\n  if (from && !isAddress(from)) throw new InvalidAddressError({ address: from })\n  if (to && !isAddress(to)) throw new InvalidAddressError({ address: to })\n}\n", "import { contracts } from './contracts.js'\nimport { formatters } from './formatters.js'\nimport { serializers } from './serializers.js'\n\nexport const chainConfig = {\n  blockTime: 2_000,\n  contracts,\n  formatters,\n  serializers,\n} as const\n", "import { defineChain } from '../../utils/chain/defineChain.js'\n\nexport const anvil = /*#__PURE__*/ defineChain({\n  id: 31_337,\n  name: 'Anvil',\n  nativeCurrency: {\n    decimals: 18,\n    name: 'Ether',\n    symbol: 'ETH',\n  },\n  rpcUrls: {\n    default: {\n      http: ['http://127.0.0.1:8545'],\n      webSocket: ['ws://127.0.0.1:8545'],\n    },\n  },\n})\n", "import { chainConfig } from '../../op-stack/chainConfig.js'\nimport { defineChain } from '../../utils/chain/defineChain.js'\n\nconst sourceId = 1 // mainnet\n\nexport const base = /*#__PURE__*/ defineChain({\n  ...chainConfig,\n  id: 8453,\n  name: 'Base',\n  nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n  rpcUrls: {\n    default: {\n      http: ['https://mainnet.base.org'],\n    },\n  },\n  blockExplorers: {\n    default: {\n      name: 'Basescan',\n      url: 'https://basescan.org',\n      apiUrl: 'https://api.basescan.org/api',\n    },\n  },\n  contracts: {\n    ...chainConfig.contracts,\n    disputeGameFactory: {\n      [sourceId]: {\n        address: '0x43edB88C4B80fDD2AdFF2412A7BebF9dF42cB40e',\n      },\n    },\n    l2OutputOracle: {\n      [sourceId]: {\n        address: '0x56315b90c40730925ec5485cf004d835058518A0',\n      },\n    },\n    multicall3: {\n      address: '0xca11bde05977b3631167028862be2a173976ca11',\n      blockCreated: 5022,\n    },\n    portal: {\n      [sourceId]: {\n        address: '0x49048044D57e1C92A77f79988d21Fa8fAF74E97e',\n        blockCreated: 17482143,\n      },\n    },\n    l1StandardBridge: {\n      [sourceId]: {\n        address: '0x3154Cf16ccdb4C6d922629664174b904d80F2C35',\n        blockCreated: 17482143,\n      },\n    },\n  },\n  sourceId,\n})\n\nexport const basePreconf = /*#__PURE__*/ defineChain({\n  ...base,\n  experimental_preconfirmationTime: 200,\n  rpcUrls: {\n    default: {\n      http: ['https://mainnet-preconf.base.org'],\n    },\n  },\n})\n", "import { chainConfig } from '../../op-stack/chainConfig.js'\nimport { defineChain } from '../../utils/chain/defineChain.js'\n\nconst sourceId = 11_155_111 // sepolia\n\nexport const baseSepolia = /*#__PURE__*/ defineChain({\n  ...chainConfig,\n  id: 84532,\n  network: 'base-sepolia',\n  name: 'Base Sepolia',\n  nativeCurrency: { name: 'Sepolia Ether', symbol: 'ETH', decimals: 18 },\n  rpcUrls: {\n    default: {\n      http: ['https://sepolia.base.org'],\n    },\n  },\n  blockExplorers: {\n    default: {\n      name: 'Basescan',\n      url: 'https://sepolia.basescan.org',\n      apiUrl: 'https://api-sepolia.basescan.org/api',\n    },\n  },\n  contracts: {\n    ...chainConfig.contracts,\n    disputeGameFactory: {\n      [sourceId]: {\n        address: '0xd6E6dBf4F7EA0ac412fD8b65ED297e64BB7a06E1',\n      },\n    },\n    l2OutputOracle: {\n      [sourceId]: {\n        address: '0x84457ca9D0163FbC4bbfe4Dfbb20ba46e48DF254',\n      },\n    },\n    portal: {\n      [sourceId]: {\n        address: '0x49f53e41452c74589e85ca1677426ba426459e85',\n        blockCreated: 4446677,\n      },\n    },\n    l1StandardBridge: {\n      [sourceId]: {\n        address: '0xfd0Bf71F60660E2f608ed56e1659C450eB113120',\n        blockCreated: 4446677,\n      },\n    },\n    multicall3: {\n      address: '0xca11bde05977b3631167028862be2a173976ca11',\n      blockCreated: 1059647,\n    },\n  },\n  testnet: true,\n  sourceId,\n})\n\nexport const baseSepoliaPreconf = /*#__PURE__*/ defineChain({\n  ...baseSepolia,\n  experimental_preconfirmationTime: 200,\n  rpcUrls: {\n    default: {\n      http: ['https://sepolia-preconf.base.org'],\n    },\n  },\n})\n", "import { defineChain } from '../../utils/chain/defineChain.js'\n\nexport const xdc = /*#__PURE__*/ defineChain({\n  id: 50,\n  name: 'XDC Network',\n  nativeCurrency: {\n    decimals: 18,\n    name: 'XDC',\n    symbol: 'XDC',\n  },\n  rpcUrls: {\n    default: { http: ['https://rpc.xdcrpc.com'] },\n  },\n  blockExplorers: {\n    default: {\n      name: 'XDCScan',\n      url: 'https://xdcscan.com',\n    },\n  },\n  contracts: {\n    multicall3: {\n      address: '0x0B1795ccA8E4eC4df02346a082df54D437F8D9aF',\n      blockCreated: 75884020,\n    },\n  },\n})\n", "import { defineChain } from '../../utils/chain/defineChain.js'\n\nexport const xdcTestnet = /*#__PURE__*/ defineChain({\n  id: 51,\n  name: 'Apothem Network',\n  nativeCurrency: {\n    decimals: 18,\n    name: 'TXDC',\n    symbol: 'TXDC',\n  },\n  rpcUrls: {\n    default: { http: ['https://erpc.apothem.network'] },\n  },\n  blockExplorers: {\n    default: {\n      name: 'XDCScan',\n      url: 'https://testnet.xdcscan.com',\n    },\n  },\n  contracts: {\n    multicall3: {\n      address: '0xca11bde05977b3631167028862be2a173976ca11',\n      blockCreated: 59765389,\n    },\n  },\n})\n", "import { type Chain, http } from 'viem';\nimport { anvil, base, baseSepolia, xdc, xdcTestnet } from 'viem/chains';\nimport { type Session, buildApiKeyHeaders } from './session.js';\n\nexport const CHAIN_MAP: Record<string, Chain> = {\n  EthereumAnvil: anvil,\n  BaseSepolia: baseSepolia,\n  BaseMainnet: base,\n  XdcApothem: xdcTestnet,\n  XdcMainnet: xdc,\n};\n\nexport async function fetchRpcUrl(session: Session): Promise<string> {\n  const url = `${session.baseURL}/v1/metadata?network=${encodeURIComponent(session.network)}`;\n  const res = await fetch(url, { headers: buildApiKeyHeaders(session) });\n  if (!res.ok) {\n    const text = await res.text();\n    throw new Error(`metadata request failed (${res.status}): ${text}`);\n  }\n  const json = await res.json();\n  const rpcUrl = json?.network?.rpcUrl;\n  if (!rpcUrl) {\n    throw new Error(`no rpcUrl in metadata response: ${JSON.stringify(json)}`);\n  }\n  return rpcUrl as string;\n}\n\nexport { http };\n", "import { decompressPoint } from '@keyban/agent-wallet-protocol';\nimport { secp256k1 } from '@noble/curves/secp256k1';\nimport {\n  concat,\n  encodeAbiParameters,\n  type Hex,\n  keccak256,\n} from 'viem';\n\n/**\n * Encode a FROST public key as ERC-7913 signer bytes:\n *\n *   frostVerifier (20 bytes) || abi.encode(pkX, pkY) (64 bytes)  =  84 bytes\n *\n * This is the on-chain representation the SchnorrAccount stores in its\n * multi-signer set after registration.\n */\nexport function buildFrostSignerBytes(\n  frostVerifierAddress: `0x${string}`,\n  compressedFrostPubKey: Hex,\n): Hex {\n  const { x: pkX, y: pkY } = decompressPoint(compressedFrostPubKey);\n  return concat([\n    frostVerifierAddress,\n    encodeAbiParameters([{ type: 'uint256' }, { type: 'uint256' }], [pkX, pkY]),\n  ]);\n}\n\n/**\n * ECDSA-sign the registration message with `KEYBAN_INVITE_KEY` so the\n * SchnorrAccount can ecrecover the commitment address on-chain.\n *\n *   msg       = keccak256(abi.encode(uint256 chainId, address walletAddress, bytes signerBytes))\n *   signature = r || s || v   (65 bytes; v = 27 + recovery)\n */\nexport function signRegistration(params: {\n  chainId: bigint;\n  walletAddress: `0x${string}`;\n  frostSignerBytes: Hex;\n  inviteKey: Hex;\n}): Hex {\n  const msg = keccak256(\n    encodeAbiParameters(\n      [{ type: 'uint256' }, { type: 'address' }, { type: 'bytes' }],\n      [params.chainId, params.walletAddress, params.frostSignerBytes],\n    ),\n  );\n  const privKey = params.inviteKey.startsWith('0x')\n    ? params.inviteKey.slice(2)\n    : params.inviteKey;\n  const sig = secp256k1.sign(msg.slice(2), privKey);\n  const r = sig.r.toString(16).padStart(64, '0');\n  const s = sig.s.toString(16).padStart(64, '0');\n  const v = (27 + sig.recovery).toString(16).padStart(2, '0');\n  return `0x${r}${s}${v}` as Hex;\n}\n", "/**\n * SECG secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf).\n *\n * Belongs to Koblitz curves: it has efficiently-computable GLV endomorphism \u03C8,\n * check out {@link EndomorphismOpts}. Seems to be rigid (not backdoored).\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha2.js';\nimport { randomBytes } from '@noble/hashes/utils.js';\nimport { createCurve, type CurveFnWithCreate } from './_shortw_utils.ts';\nimport type { CurveLengths } from './abstract/curve.ts';\nimport {\n  createHasher,\n  type H2CHasher,\n  type H2CMethod,\n  isogenyMap,\n} from './abstract/hash-to-curve.ts';\nimport { Field, mapHashToField, mod, pow2 } from './abstract/modular.ts';\nimport {\n  _normFnElement,\n  type EndomorphismOpts,\n  mapToCurveSimpleSWU,\n  type WeierstrassPoint as PointType,\n  type WeierstrassOpts,\n  type WeierstrassPointCons,\n} from './abstract/weierstrass.ts';\nimport type { Hex, PrivKey } from './utils.ts';\nimport {\n  bytesToNumberBE,\n  concatBytes,\n  ensureBytes,\n  inRange,\n  numberToBytesBE,\n  utf8ToBytes,\n} from './utils.ts';\n\n// Seems like generator was produced from some seed:\n// `Point.BASE.multiply(Point.Fn.inv(2n, N)).toAffine().x`\n// // gives short x 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63n\nconst secp256k1_CURVE: WeierstrassOpts<bigint> = {\n  p: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'),\n  n: BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141'),\n  h: BigInt(1),\n  a: BigInt(0),\n  b: BigInt(7),\n  Gx: BigInt('0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'),\n  Gy: BigInt('0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8'),\n};\n\nconst secp256k1_ENDO: EndomorphismOpts = {\n  beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n  basises: [\n    [BigInt('0x3086d221a7d46bcde86c90e49284eb15'), -BigInt('0xe4437ed6010e88286f547fa90abfe4c3')],\n    [BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8'), BigInt('0x3086d221a7d46bcde86c90e49284eb15')],\n  ],\n};\n\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\n\n/**\n * \u221An = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y: bigint): bigint {\n  const P = secp256k1_CURVE.p;\n  // prettier-ignore\n  const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n  // prettier-ignore\n  const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n  const b2 = (y * y * y) % P; // x^3, 11\n  const b3 = (b2 * b2 * y) % P; // x^7\n  const b6 = (pow2(b3, _3n, P) * b3) % P;\n  const b9 = (pow2(b6, _3n, P) * b3) % P;\n  const b11 = (pow2(b9, _2n, P) * b2) % P;\n  const b22 = (pow2(b11, _11n, P) * b11) % P;\n  const b44 = (pow2(b22, _22n, P) * b22) % P;\n  const b88 = (pow2(b44, _44n, P) * b44) % P;\n  const b176 = (pow2(b88, _88n, P) * b88) % P;\n  const b220 = (pow2(b176, _44n, P) * b44) % P;\n  const b223 = (pow2(b220, _3n, P) * b3) % P;\n  const t1 = (pow2(b223, _23n, P) * b22) % P;\n  const t2 = (pow2(t1, _6n, P) * b2) % P;\n  const root = pow2(t2, _2n, P);\n  if (!Fpk1.eql(Fpk1.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fpk1 = Field(secp256k1_CURVE.p, { sqrt: sqrtMod });\n\n/**\n * secp256k1 curve, ECDSA and ECDH methods.\n *\n * Field: `2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n`\n *\n * @example\n * ```js\n * import { secp256k1 } from '@noble/curves/secp256k1';\n * const { secretKey, publicKey } = secp256k1.keygen();\n * const msg = new TextEncoder().encode('hello');\n * const sig = secp256k1.sign(msg, secretKey);\n * const isValid = secp256k1.verify(sig, msg, publicKey) === true;\n * ```\n */\nexport const secp256k1: CurveFnWithCreate = createCurve(\n  { ...secp256k1_CURVE, Fp: Fpk1, lowS: true, endo: secp256k1_ENDO },\n  sha256\n);\n\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\n  let tagP = TAGGED_HASH_PREFIXES[tag];\n  if (tagP === undefined) {\n    const tagH = sha256(utf8ToBytes(tag));\n    tagP = concatBytes(tagH, tagH);\n    TAGGED_HASH_PREFIXES[tag] = tagP;\n  }\n  return sha256(concatBytes(tagP, ...messages));\n}\n\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toBytes(true).slice(1);\nconst Pointk1 = /* @__PURE__ */ (() => secp256k1.Point)();\nconst hasEven = (y: bigint) => y % _2n === _0n;\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  const { Fn, BASE } = Pointk1;\n  const d_ = _normFnElement(Fn, priv);\n  const p = BASE.multiply(d_); // P = d'\u22C5G; 0 < d' < n check is done inside\n  const scalar = hasEven(p.y) ? d_ : Fn.neg(d_);\n  return { scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x: bigint): PointType<bigint> {\n  const Fp = Fpk1;\n  if (!Fp.isValidNot0(x)) throw new Error('invalid x: Fail if x \u2265 p');\n  const xx = Fp.create(x * x);\n  const c = Fp.create(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = Fp.sqrt(c); // Let y = c^(p+1)/4 mod p. Same as sqrt().\n  // Return the unique point P such that x(P) = x and\n  // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n  if (!hasEven(y)) y = Fp.neg(y);\n  const p = Pointk1.fromAffine({ x, y });\n  p.assertValidity();\n  return p;\n}\nconst num = bytesToNumberBE;\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return Pointk1.Fn.create(num(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(secretKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(secretKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\n\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(message: Hex, secretKey: PrivKey, auxRand: Hex = randomBytes(32)): Uint8Array {\n  const { Fn } = Pointk1;\n  const m = ensureBytes('message', message);\n  const { bytes: px, scalar: d } = schnorrGetExtPubKey(secretKey); // checks for isWithinCurveOrder\n  const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n  const t = Fn.toBytes(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n  const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n  // Let k' = int(rand) mod n. Fail if k' = 0. Let R = k'\u22C5G\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(rand);\n  const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n  const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n  sig.set(rx, 0);\n  sig.set(Fn.toBytes(Fn.create(k + e * d)), 32);\n  // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n  if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\n  const { Fn, BASE } = Pointk1;\n  const sig = ensureBytes('signature', signature, 64);\n  const m = ensureBytes('message', message);\n  const pub = ensureBytes('publicKey', publicKey, 32);\n  try {\n    const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!inRange(r, _1n, secp256k1_CURVE.p)) return false;\n    const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!inRange(s, _1n, secp256k1_CURVE.n)) return false;\n    // int(challenge(bytes(r)||bytes(P)||m))%n\n    const e = challenge(Fn.toBytes(r), pointToBytes(P), m);\n    // R = s\u22C5G - e\u22C5P, where -eP == (n-e)P\n    const R = BASE.multiplyUnsafe(s).add(P.multiplyUnsafe(Fn.neg(e)));\n    const { x, y } = R.toAffine();\n    // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n    if (R.is0() || !hasEven(y) || x !== r) return false;\n    return true;\n  } catch (error) {\n    return false;\n  }\n}\n\nexport type SecpSchnorr = {\n  keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };\n  getPublicKey: typeof schnorrGetPublicKey;\n  sign: typeof schnorrSign;\n  verify: typeof schnorrVerify;\n  Point: WeierstrassPointCons<bigint>;\n  utils: {\n    randomSecretKey: (seed?: Uint8Array) => Uint8Array;\n    pointToBytes: (point: PointType<bigint>) => Uint8Array;\n    lift_x: typeof lift_x;\n    taggedHash: typeof taggedHash;\n\n    /** @deprecated use `randomSecretKey` */\n    randomPrivateKey: (seed?: Uint8Array) => Uint8Array;\n    /** @deprecated use `utils` */\n    numberToBytesBE: typeof numberToBytesBE;\n    /** @deprecated use `utils` */\n    bytesToNumberBE: typeof bytesToNumberBE;\n    /** @deprecated use `modular` */\n    mod: typeof mod;\n  };\n  lengths: CurveLengths;\n};\n/**\n * Schnorr signatures over secp256k1.\n * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n * @example\n * ```js\n * import { schnorr } from '@noble/curves/secp256k1';\n * const { secretKey, publicKey } = schnorr.keygen();\n * // const publicKey = schnorr.getPublicKey(secretKey);\n * const msg = new TextEncoder().encode('hello');\n * const sig = schnorr.sign(msg, secretKey);\n * const isValid = schnorr.verify(sig, msg, publicKey);\n * ```\n */\nexport const schnorr: SecpSchnorr = /* @__PURE__ */ (() => {\n  const size = 32;\n  const seedLength = 48;\n  const randomSecretKey = (seed = randomBytes(seedLength)): Uint8Array => {\n    return mapHashToField(seed, secp256k1_CURVE.n);\n  };\n  // TODO: remove\n  secp256k1.utils.randomSecretKey;\n  function keygen(seed?: Uint8Array) {\n    const secretKey = randomSecretKey(seed);\n    return { secretKey, publicKey: schnorrGetPublicKey(secretKey) };\n  }\n  return {\n    keygen,\n    getPublicKey: schnorrGetPublicKey,\n    sign: schnorrSign,\n    verify: schnorrVerify,\n    Point: Pointk1,\n    utils: {\n      randomSecretKey: randomSecretKey,\n      randomPrivateKey: randomSecretKey,\n      taggedHash,\n\n      // TODO: remove\n      lift_x,\n      pointToBytes,\n      numberToBytesBE,\n      bytesToNumberBE,\n      mod,\n    },\n    lengths: {\n      secretKey: size,\n      publicKey: size,\n      publicKeyHasPrefix: false,\n      signature: size * 2,\n      seed: seedLength,\n    },\n  };\n})();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fpk1,\n    [\n      // xNum\n      [\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n        '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n        '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n      ],\n      // xDen\n      [\n        '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n        '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n      // yNum\n      [\n        '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n        '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n        '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n        '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n      ],\n      // yDen\n      [\n        '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n        '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n        '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n    ].map((i) => i.map((j) => BigInt(j))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fpk1, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fpk1.create(BigInt('-11')),\n  }))();\n\n/** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */\nexport const secp256k1_hasher: H2CHasher<bigint> = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.Point,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fpk1.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fpk1.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  ))();\n\n/** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */\nexport const hashToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() =>\n  secp256k1_hasher.hashToCurve)();\n\n/** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */\nexport const encodeToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() =>\n  secp256k1_hasher.encodeToCurve)();\n", "/**\n * Short Weierstrass curve methods. The formula is: y\u00B2 = x\u00B3 + ax + b.\n *\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance\n * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create\n * unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * @todo https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac as nobleHmac } from '@noble/hashes/hmac.js';\nimport { ahash } from '@noble/hashes/utils';\nimport {\n  _validateObject,\n  _abool2 as abool,\n  _abytes2 as abytes,\n  aInRange,\n  bitLen,\n  bitMask,\n  bytesToHex,\n  bytesToNumberBE,\n  concatBytes,\n  createHmacDrbg,\n  ensureBytes,\n  hexToBytes,\n  inRange,\n  isBytes,\n  memoized,\n  numberToHexUnpadded,\n  randomBytes as randomBytesWeb,\n  type CHash,\n  type Hex,\n  type PrivKey,\n} from '../utils.ts';\nimport {\n  _createCurveFields,\n  mulEndoUnsafe,\n  negateCt,\n  normalizeZ,\n  pippenger,\n  wNAF,\n  type AffinePoint,\n  type BasicCurve,\n  type CurveLengths,\n  type CurvePoint,\n  type CurvePointCons,\n} from './curve.ts';\nimport {\n  Field,\n  FpInvertBatch,\n  getMinHashLength,\n  mapHashToField,\n  nLength,\n  validateField,\n  type IField,\n  type NLength,\n} from './modular.ts';\n\nexport type { AffinePoint };\nexport type HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\n\ntype EndoBasis = [[bigint, bigint], [bigint, bigint]];\n/**\n * When Weierstrass curve has `a=0`, it becomes Koblitz curve.\n * Koblitz curves allow using **efficiently-computable GLV endomorphism \u03C8**.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n *\n * Endomorphism consists of beta, lambda and splitScalar:\n *\n * 1. GLV endomorphism \u03C8 transforms a point: `P = (x, y) \u21A6 \u03C8(P) = (\u03B2\u00B7x mod p, y)`\n * 2. GLV scalar decomposition transforms a scalar: `k \u2261 k\u2081 + k\u2082\u00B7\u03BB (mod n)`\n * 3. Then these are combined: `k\u00B7P = k\u2081\u00B7P + k\u2082\u00B7\u03C8(P)`\n * 4. Two 128-bit point-by-scalar multiplications + one point addition is faster than\n *    one 256-bit multiplication.\n *\n * where\n * * beta: \u03B2 \u2208 F\u209A with \u03B2\u00B3 = 1, \u03B2 \u2260 1\n * * lambda: \u03BB \u2208 F\u2099 with \u03BB\u00B3 = 1, \u03BB \u2260 1\n * * splitScalar decomposes k \u21A6 k\u2081, k\u2082, by using reduced basis vectors.\n *   Gauss lattice reduction calculates them from initial basis vectors `(n, 0), (-\u03BB, 0)`\n *\n * Check out `test/misc/endomorphism.js` and\n * [gist](https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066).\n */\nexport type EndomorphismOpts = {\n  beta: bigint;\n  basises?: EndoBasis;\n  splitScalar?: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\n\n// We construct basis in such way that den is always positive and equals n, but num sign depends on basis (not on secret value)\nconst divNearest = (num: bigint, den: bigint) => (num + (num >= 0 ? den : -den) / _2n) / den;\n\nexport type ScalarEndoParts = { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n\n/**\n * Splits scalar for GLV endomorphism.\n */\nexport function _splitEndoScalar(k: bigint, basis: EndoBasis, n: bigint): ScalarEndoParts {\n  // Split scalar into two such that part is ~half bits: `abs(part) < sqrt(N)`\n  // Since part can be negative, we need to do this on point.\n  // TODO: verifyScalar function which consumes lambda\n  const [[a1, b1], [a2, b2]] = basis;\n  const c1 = divNearest(b2 * k, n);\n  const c2 = divNearest(-b1 * k, n);\n  // |k1|/|k2| is < sqrt(N), but can be negative.\n  // If we do `k1 mod N`, we'll get big scalar (`> sqrt(N)`): so, we do cheaper negation instead.\n  let k1 = k - c1 * a1 - c2 * a2;\n  let k2 = -c1 * b1 - c2 * b2;\n  const k1neg = k1 < _0n;\n  const k2neg = k2 < _0n;\n  if (k1neg) k1 = -k1;\n  if (k2neg) k2 = -k2;\n  // Double check that resulting scalar less than half bits of N: otherwise wNAF will fail.\n  // This should only happen on wrong basises. Also, math inside is too complex and I don't trust it.\n  const MAX_NUM = bitMask(Math.ceil(bitLen(n) / 2)) + _1n; // Half bits of N\n  if (k1 < _0n || k1 >= MAX_NUM || k2 < _0n || k2 >= MAX_NUM) {\n    throw new Error('splitScalar (endomorphism): failed, k=' + k);\n  }\n  return { k1neg, k1, k2neg, k2 };\n}\n\nexport type ECDSASigFormat = 'compact' | 'recovered' | 'der';\nexport type ECDSARecoverOpts = {\n  prehash?: boolean;\n};\nexport type ECDSAVerifyOpts = {\n  prehash?: boolean;\n  lowS?: boolean;\n  format?: ECDSASigFormat;\n};\nexport type ECDSASignOpts = {\n  prehash?: boolean;\n  lowS?: boolean;\n  format?: ECDSASigFormat;\n  extraEntropy?: Uint8Array | boolean;\n};\n\nfunction validateSigFormat(format: string): ECDSASigFormat {\n  if (!['compact', 'recovered', 'der'].includes(format))\n    throw new Error('Signature format must be \"compact\", \"recovered\", or \"der\"');\n  return format as ECDSASigFormat;\n}\n\nfunction validateSigOpts<T extends ECDSASignOpts, D extends Required<ECDSASignOpts>>(\n  opts: T,\n  def: D\n): Required<ECDSASignOpts> {\n  const optsn: ECDSASignOpts = {};\n  for (let optName of Object.keys(def)) {\n    // @ts-ignore\n    optsn[optName] = opts[optName] === undefined ? def[optName] : opts[optName];\n  }\n  abool(optsn.lowS!, 'lowS');\n  abool(optsn.prehash!, 'prehash');\n  if (optsn.format !== undefined) validateSigFormat(optsn.format);\n  return optsn as Required<ECDSASignOpts>;\n}\n\n/** Instance methods for 3D XYZ projective points. */\nexport interface WeierstrassPoint<T> extends CurvePoint<T, WeierstrassPoint<T>> {\n  /** projective X coordinate. Different from affine x. */\n  readonly X: T;\n  /** projective Y coordinate. Different from affine y. */\n  readonly Y: T;\n  /** projective z coordinate */\n  readonly Z: T;\n  /** affine x coordinate. Different from projective X. */\n  get x(): T;\n  /** affine y coordinate. Different from projective Y. */\n  get y(): T;\n  /** Encodes point using IEEE P1363 (DER) encoding. First byte is 2/3/4. Default = isCompressed. */\n  toBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  /** @deprecated use `.X` */\n  readonly px: T;\n  /** @deprecated use `.Y` */\n  readonly py: T;\n  /** @deprecated use `.Z` */\n  readonly pz: T;\n  /** @deprecated use `toBytes` */\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  /** @deprecated use `multiplyUnsafe` */\n  multiplyAndAddUnsafe(\n    Q: WeierstrassPoint<T>,\n    a: bigint,\n    b: bigint\n  ): WeierstrassPoint<T> | undefined;\n  /** @deprecated use `p.y % 2n === 0n` */\n  hasEvenY(): boolean;\n  /** @deprecated use `p.precompute(windowSize)` */\n  _setWindowSize(windowSize: number): void;\n}\n\n/** Static methods for 3D XYZ projective points. */\nexport interface WeierstrassPointCons<T> extends CurvePointCons<WeierstrassPoint<T>> {\n  /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n  new (X: T, Y: T, Z: T): WeierstrassPoint<T>;\n  CURVE(): WeierstrassOpts<T>;\n  /** @deprecated use `Point.BASE.multiply(Point.Fn.fromBytes(privateKey))` */\n  fromPrivateKey(privateKey: PrivKey): WeierstrassPoint<T>;\n  /** @deprecated use `import { normalizeZ } from '@noble/curves/abstract/curve.js';` */\n  normalizeZ(points: WeierstrassPoint<T>[]): WeierstrassPoint<T>[];\n  /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */\n  msm(points: WeierstrassPoint<T>[], scalars: bigint[]): WeierstrassPoint<T>;\n}\n\n/**\n * Weierstrass curve options.\n *\n * * p: prime characteristic (order) of finite field, in which arithmetics is done\n * * n: order of prime subgroup a.k.a total amount of valid curve points\n * * h: cofactor, usually 1. h*n is group order; n is subgroup order\n * * a: formula param, must be in field of p\n * * b: formula param, must be in field of p\n * * Gx: x coordinate of generator point a.k.a. base point\n * * Gy: y coordinate of generator point\n */\nexport type WeierstrassOpts<T> = Readonly<{\n  p: bigint;\n  n: bigint;\n  h: bigint;\n  a: T;\n  b: T;\n  Gx: T;\n  Gy: T;\n}>;\n\n// When a cofactor != 1, there can be an effective methods to:\n// 1. Determine whether a point is torsion-free\n// 2. Clear torsion component\n// wrapPrivateKey: bls12-381 requires mod(n) instead of rejecting keys >= n\nexport type WeierstrassExtraOpts<T> = Partial<{\n  Fp: IField<T>;\n  Fn: IField<bigint>;\n  allowInfinityPoint: boolean;\n  endo: EndomorphismOpts;\n  isTorsionFree: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => boolean;\n  clearCofactor: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => WeierstrassPoint<T>;\n  fromBytes: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes: (\n    c: WeierstrassPointCons<T>,\n    point: WeierstrassPoint<T>,\n    isCompressed: boolean\n  ) => Uint8Array;\n}>;\n\n/**\n * Options for ECDSA signatures over a Weierstrass curve.\n *\n * * lowS: (default: true) whether produced / verified signatures occupy low half of ecdsaOpts.p. Prevents malleability.\n * * hmac: (default: noble-hashes hmac) function, would be used to init hmac-drbg for k generation.\n * * randomBytes: (default: webcrypto os-level CSPRNG) custom method for fetching secure randomness.\n * * bits2int, bits2int_modN: used in sigs, sometimes overridden by curves\n */\nexport type ECDSAOpts = Partial<{\n  lowS: boolean;\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  bits2int: (bytes: Uint8Array) => bigint;\n  bits2int_modN: (bytes: Uint8Array) => bigint;\n}>;\n\n/**\n * Elliptic Curve Diffie-Hellman interface.\n * Provides keygen, secret-to-public conversion, calculating shared secrets.\n */\nexport interface ECDH {\n  keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };\n  getPublicKey: (secretKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (secretKeyA: PrivKey, publicKeyB: Hex, isCompressed?: boolean) => Uint8Array;\n  Point: WeierstrassPointCons<bigint>;\n  utils: {\n    isValidSecretKey: (secretKey: PrivKey) => boolean;\n    isValidPublicKey: (publicKey: Uint8Array, isCompressed?: boolean) => boolean;\n    randomSecretKey: (seed?: Uint8Array) => Uint8Array;\n    /** @deprecated use `randomSecretKey` */\n    randomPrivateKey: (seed?: Uint8Array) => Uint8Array;\n    /** @deprecated use `isValidSecretKey` */\n    isValidPrivateKey: (secretKey: PrivKey) => boolean;\n    /** @deprecated use `Point.Fn.fromBytes()` */\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    /** @deprecated use `point.precompute()` */\n    precompute: (windowSize?: number, point?: WeierstrassPoint<bigint>) => WeierstrassPoint<bigint>;\n  };\n  lengths: CurveLengths;\n}\n\n/**\n * ECDSA interface.\n * Only supported for prime fields, not Fp2 (extension fields).\n */\nexport interface ECDSA extends ECDH {\n  sign: (message: Hex, secretKey: PrivKey, opts?: ECDSASignOpts) => ECDSASigRecovered;\n  verify: (\n    signature: Uint8Array,\n    message: Uint8Array,\n    publicKey: Uint8Array,\n    opts?: ECDSAVerifyOpts\n  ) => boolean;\n  recoverPublicKey(signature: Uint8Array, message: Uint8Array, opts?: ECDSARecoverOpts): Uint8Array;\n  Signature: ECDSASignatureCons;\n}\nexport class DERErr extends Error {\n  constructor(m = '') {\n    super(m);\n  }\n}\nexport type IDER = {\n  // asn.1 DER encoding utils\n  Err: typeof DERErr;\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string) => string;\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array };\n  };\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint): string;\n    decode(data: Uint8Array): bigint;\n  };\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint };\n  hexFromSig(sig: { r: bigint; s: bigint }): string;\n};\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n *     [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexport const DER: IDER = {\n  // asn.1 DER encoding utils\n  Err: DERErr,\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string): string => {\n      const { Err: E } = DER;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length & 1) throw new E('tlv.encode: unpadded data');\n      const dataLen = data.length / 2;\n      const len = numberToHexUnpadded(dataLen);\n      if ((len.length / 2) & 0b1000_0000) throw new E('tlv.encode: long form length too big');\n      // length of length with long form flag\n      const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) | 0b1000_0000) : '';\n      const t = numberToHexUnpadded(tag);\n      return t + lenLen + len + data;\n    },\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array } {\n      const { Err: E } = DER;\n      let pos = 0;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length < 2 || data[pos++] !== tag) throw new E('tlv.decode: wrong tlv');\n      const first = data[pos++];\n      const isLong = !!(first & 0b1000_0000); // First bit of first length byte is flag for short/long form\n      let length = 0;\n      if (!isLong) length = first;\n      else {\n        // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n        const lenLen = first & 0b0111_1111;\n        if (!lenLen) throw new E('tlv.decode(long): indefinite length not supported');\n        if (lenLen > 4) throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n        const lengthBytes = data.subarray(pos, pos + lenLen);\n        if (lengthBytes.length !== lenLen) throw new E('tlv.decode: length bytes not complete');\n        if (lengthBytes[0] === 0) throw new E('tlv.decode(long): zero leftmost byte');\n        for (const b of lengthBytes) length = (length << 8) | b;\n        pos += lenLen;\n        if (length < 128) throw new E('tlv.decode(long): not minimal encoding');\n      }\n      const v = data.subarray(pos, pos + length);\n      if (v.length !== length) throw new E('tlv.decode: wrong value length');\n      return { v, l: data.subarray(pos + length) };\n    },\n  },\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint): string {\n      const { Err: E } = DER;\n      if (num < _0n) throw new E('integer: negative integers are not allowed');\n      let hex = numberToHexUnpadded(num);\n      // Pad with zero byte if negative flag is present\n      if (Number.parseInt(hex[0], 16) & 0b1000) hex = '00' + hex;\n      if (hex.length & 1) throw new E('unexpected DER parsing assertion: unpadded hex');\n      return hex;\n    },\n    decode(data: Uint8Array): bigint {\n      const { Err: E } = DER;\n      if (data[0] & 0b1000_0000) throw new E('invalid signature integer: negative');\n      if (data[0] === 0x00 && !(data[1] & 0b1000_0000))\n        throw new E('invalid signature integer: unnecessary leading zero');\n      return bytesToNumberBE(data);\n    },\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E, _int: int, _tlv: tlv } = DER;\n    const data = ensureBytes('signature', hex);\n    const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n    if (seqLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n    const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n    const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n    if (sLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n    return { r: int.decode(rBytes), s: int.decode(sBytes) };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    const { _tlv: tlv, _int: int } = DER;\n    const rs = tlv.encode(0x02, int.encode(sig.r));\n    const ss = tlv.encode(0x02, int.encode(sig.s));\n    const seq = rs + ss;\n    return tlv.encode(0x30, seq);\n  },\n};\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function _normFnElement(Fn: IField<bigint>, key: PrivKey): bigint {\n  const { BYTES: expected } = Fn;\n  let num: bigint;\n  if (typeof key === 'bigint') {\n    num = key;\n  } else {\n    let bytes = ensureBytes('private key', key);\n    try {\n      num = Fn.fromBytes(bytes);\n    } catch (error) {\n      throw new Error(`invalid private key: expected ui8a of size ${expected}, got ${typeof key}`);\n    }\n  }\n  if (!Fn.isValidNot0(num)) throw new Error('invalid private key: out of range [1..N-1]');\n  return num;\n}\n\n/**\n * Creates weierstrass Point constructor, based on specified curve options.\n *\n * @example\n```js\nconst opts = {\n  p: BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'),\n  n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),\n  h: BigInt(1),\n  a: BigInt('0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc'),\n  b: BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b'),\n  Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),\n  Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),\n};\nconst p256_Point = weierstrass(opts);\n```\n */\nexport function weierstrassN<T>(\n  params: WeierstrassOpts<T>,\n  extraOpts: WeierstrassExtraOpts<T> = {}\n): WeierstrassPointCons<T> {\n  const validated = _createCurveFields('weierstrass', params, extraOpts);\n  const { Fp, Fn } = validated;\n  let CURVE = validated.CURVE as WeierstrassOpts<T>;\n  const { h: cofactor, n: CURVE_ORDER } = CURVE;\n  _validateObject(\n    extraOpts,\n    {},\n    {\n      allowInfinityPoint: 'boolean',\n      clearCofactor: 'function',\n      isTorsionFree: 'function',\n      fromBytes: 'function',\n      toBytes: 'function',\n      endo: 'object',\n      wrapPrivateKey: 'boolean',\n    }\n  );\n\n  const { endo } = extraOpts;\n  if (endo) {\n    // validateObject(endo, { beta: 'bigint', splitScalar: 'function' });\n    if (!Fp.is0(CURVE.a) || typeof endo.beta !== 'bigint' || !Array.isArray(endo.basises)) {\n      throw new Error('invalid endo: expected \"beta\": bigint and \"basises\": array');\n    }\n  }\n\n  const lengths = getWLengths(Fp, Fn);\n\n  function assertCompressionIsSupported() {\n    if (!Fp.isOdd) throw new Error('compression is not supported: Field does not have .isOdd()');\n  }\n\n  // Implements IEEE P1363 point encoding\n  function pointToBytes(\n    _c: WeierstrassPointCons<T>,\n    point: WeierstrassPoint<T>,\n    isCompressed: boolean\n  ): Uint8Array {\n    const { x, y } = point.toAffine();\n    const bx = Fp.toBytes(x);\n    abool(isCompressed, 'isCompressed');\n    if (isCompressed) {\n      assertCompressionIsSupported();\n      const hasEvenY = !Fp.isOdd!(y);\n      return concatBytes(pprefix(hasEvenY), bx);\n    } else {\n      return concatBytes(Uint8Array.of(0x04), bx, Fp.toBytes(y));\n    }\n  }\n  function pointFromBytes(bytes: Uint8Array) {\n    abytes(bytes, undefined, 'Point');\n    const { publicKey: comp, publicKeyUncompressed: uncomp } = lengths; // e.g. for 32-byte: 33, 65\n    const length = bytes.length;\n    const head = bytes[0];\n    const tail = bytes.subarray(1);\n    // No actual validation is done here: use .assertValidity()\n    if (length === comp && (head === 0x02 || head === 0x03)) {\n      const x = Fp.fromBytes(tail);\n      if (!Fp.isValid(x)) throw new Error('bad point: is not on curve, wrong x');\n      const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n      let y: T;\n      try {\n        y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n      } catch (sqrtError) {\n        const err = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n        throw new Error('bad point: is not on curve, sqrt error' + err);\n      }\n      assertCompressionIsSupported();\n      const isYOdd = Fp.isOdd!(y); // (y & _1n) === _1n;\n      const isHeadOdd = (head & 1) === 1; // ECDSA-specific\n      if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n      return { x, y };\n    } else if (length === uncomp && head === 0x04) {\n      // TODO: more checks\n      const L = Fp.BYTES;\n      const x = Fp.fromBytes(tail.subarray(0, L));\n      const y = Fp.fromBytes(tail.subarray(L, L * 2));\n      if (!isValidXY(x, y)) throw new Error('bad point: is not on curve');\n      return { x, y };\n    } else {\n      throw new Error(\n        `bad point: got length ${length}, expected compressed=${comp} or uncompressed=${uncomp}`\n      );\n    }\n  }\n\n  const encodePoint = extraOpts.toBytes || pointToBytes;\n  const decodePoint = extraOpts.fromBytes || pointFromBytes;\n  function weierstrassEquation(x: T): T {\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x\u00B2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, CURVE.a)), CURVE.b); // x\u00B3 + a * x + b\n  }\n\n  // TODO: move top-level\n  /** Checks whether equation holds for given x, y: y\u00B2 == x\u00B3 + ax + b */\n  function isValidXY(x: T, y: T): boolean {\n    const left = Fp.sqr(y); // y\u00B2\n    const right = weierstrassEquation(x); // x\u00B3 + ax + b\n    return Fp.eql(left, right);\n  }\n\n  // Validate whether the passed curve params are valid.\n  // Test 1: equation y\u00B2 = x\u00B3 + ax + b should work for generator point.\n  if (!isValidXY(CURVE.Gx, CURVE.Gy)) throw new Error('bad curve params: generator point');\n\n  // Test 2: discriminant \u0394 part should be non-zero: 4a\u00B3 + 27b\u00B2 != 0.\n  // Guarantees curve is genus-1, smooth (non-singular).\n  const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n), _4n);\n  const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27));\n  if (Fp.is0(Fp.add(_4a3, _27b2))) throw new Error('bad curve params: a or b');\n\n  /** Asserts coordinate is valid: 0 <= n < Fp.ORDER. */\n  function acoord(title: string, n: T, banZero = false) {\n    if (!Fp.isValid(n) || (banZero && Fp.is0(n))) throw new Error(`bad point coordinate ${title}`);\n    return n;\n  }\n\n  function aprjpoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n\n  function splitEndoScalarN(k: bigint) {\n    if (!endo || !endo.basises) throw new Error('no endo');\n    return _splitEndoScalar(k, endo.basises, Fn.ORDER);\n  }\n\n  // Memoized toAffine / validity check. They are heavy. Points are immutable.\n\n  // Converts Projective point to affine (x, y) coordinates.\n  // Can accept precomputed Z^-1 - for example, from invertBatch.\n  // (X, Y, Z) \u220B (x=X/Z, y=Y/Z)\n  const toAffineMemo = memoized((p: Point, iz?: T): AffinePoint<T> => {\n    const { X, Y, Z } = p;\n    // Fast-path for normalized points\n    if (Fp.eql(Z, Fp.ONE)) return { x: X, y: Y };\n    const is0 = p.is0();\n    // If invZ was 0, we return zero point. However we still want to execute\n    // all operations, so we replace invZ with a random number, 1.\n    if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(Z);\n    const x = Fp.mul(X, iz);\n    const y = Fp.mul(Y, iz);\n    const zz = Fp.mul(Z, iz);\n    if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n    if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n    return { x, y };\n  });\n  // NOTE: on exception this will crash 'cached' and no value will be set.\n  // Otherwise true will be return\n  const assertValidMemo = memoized((p: Point) => {\n    if (p.is0()) {\n      // (0, 1, 0) aka ZERO is invalid in most contexts.\n      // In BLS, ZERO can be serialized, so we allow it.\n      // (0, 0, 0) is invalid representation of ZERO.\n      if (extraOpts.allowInfinityPoint && !Fp.is0(p.Y)) return;\n      throw new Error('bad point: ZERO');\n    }\n    // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n    const { x, y } = p.toAffine();\n    if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not field elements');\n    if (!isValidXY(x, y)) throw new Error('bad point: equation left != right');\n    if (!p.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    return true;\n  });\n\n  function finishEndo(\n    endoBeta: EndomorphismOpts['beta'],\n    k1p: Point,\n    k2p: Point,\n    k1neg: boolean,\n    k2neg: boolean\n  ) {\n    k2p = new Point(Fp.mul(k2p.X, endoBeta), k2p.Y, k2p.Z);\n    k1p = negateCt(k1neg, k1p);\n    k2p = negateCt(k2neg, k2p);\n    return k1p.add(k2p);\n  }\n\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates:(X, Y, Z) \u220B (x=X/Z, y=Y/Z).\n   * Default Point works in 2d / affine coordinates: (x, y).\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements WeierstrassPoint<T> {\n    // base / generator point\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    // zero / infinity / identity point\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0\n    // math field\n    static readonly Fp = Fp;\n    // scalar field\n    static readonly Fn = Fn;\n\n    readonly X: T;\n    readonly Y: T;\n    readonly Z: T;\n\n    /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n    constructor(X: T, Y: T, Z: T) {\n      this.X = acoord('x', X);\n      this.Y = acoord('y', Y, true);\n      this.Z = acoord('z', Z);\n      Object.freeze(this);\n    }\n\n    static CURVE(): WeierstrassOpts<T> {\n      return CURVE;\n    }\n\n    /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      // (0, 0) would've produced (0, 0, 1) - instead, we need (0, 1, 0)\n      if (Fp.is0(x) && Fp.is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    static fromBytes(bytes: Uint8Array): Point {\n      const P = Point.fromAffine(decodePoint(abytes(bytes, undefined, 'point')));\n      P.assertValidity();\n      return P;\n    }\n    static fromHex(hex: Hex): Point {\n      return Point.fromBytes(ensureBytes('pointHex', hex));\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     *\n     * @param windowSize\n     * @param isLazy true will defer table computation until the first multiplication\n     * @returns\n     */\n    precompute(windowSize: number = 8, isLazy = true): Point {\n      wnaf.createCache(this, windowSize);\n      if (!isLazy) this.multiply(_3n); // random number\n      return this;\n    }\n\n    // TODO: return `this`\n    /** A point on curve is valid if it conforms to equation. */\n    assertValidity(): void {\n      assertValidMemo(this);\n    }\n\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (!Fp.isOdd) throw new Error(\"Field doesn't support isOdd\");\n      return !Fp.isOdd(y);\n    }\n\n    /** Compare one point to another. */\n    equals(other: Point): boolean {\n      aprjpoint(other);\n      const { X: X1, Y: Y1, Z: Z1 } = this;\n      const { X: X2, Y: Y2, Z: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /** Flips point to one corresponding to (x, -y) in Affine coordinates. */\n    negate(): Point {\n      return new Point(this.X, Fp.neg(this.Y), this.Z);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { X: X1, Y: Y1, Z: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      aprjpoint(other);\n      const { X: X1, Y: Y1, Z: Z1 } = this;\n      const { X: X2, Y: Y2, Z: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    is0(): boolean {\n      return this.equals(Point.ZERO);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      const { endo } = extraOpts;\n      if (!Fn.isValidNot0(scalar)) throw new Error('invalid scalar: out of range'); // 0 is invalid\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const mul = (n: bigint) => wnaf.cached(this, n, (p) => normalizeZ(Point, p));\n      /** See docs for {@link EndomorphismOpts} */\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(scalar);\n        const { p: k1p, f: k1f } = mul(k1);\n        const { p: k2p, f: k2f } = mul(k2);\n        fake = k1f.add(k2f);\n        point = finishEndo(endo.beta, k1p, k2p, k1neg, k2neg);\n      } else {\n        const { p, f } = mul(scalar);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return normalizeZ(Point, [point, fake])[0];\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed secret key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(sc: bigint): Point {\n      const { endo } = extraOpts;\n      const p = this as Point;\n      if (!Fn.isValid(sc)) throw new Error('invalid scalar: out of range'); // 0 is valid\n      if (sc === _0n || p.is0()) return Point.ZERO;\n      if (sc === _1n) return p; // fast-path\n      if (wnaf.hasCache(this)) return this.multiply(sc);\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc);\n        const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2); // 30% faster vs wnaf.unsafe\n        return finishEndo(endo.beta, p1, p2, k1neg, k2neg);\n      } else {\n        return wnaf.unsafe(p, sc);\n      }\n    }\n\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const sum = this.multiplyUnsafe(a).add(Q.multiplyUnsafe(b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    /**\n     * Converts Projective point to affine (x, y) coordinates.\n     * @param invertedZ Z^-1 (inverted zero) - optional, precomputation is useful for invertBatch\n     */\n    toAffine(invertedZ?: T): AffinePoint<T> {\n      return toAffineMemo(this, invertedZ);\n    }\n\n    /**\n     * Checks whether Point is free of torsion elements (is in prime subgroup).\n     * Always torsion-free for cofactor=1 curves.\n     */\n    isTorsionFree(): boolean {\n      const { isTorsionFree } = extraOpts;\n      if (cofactor === _1n) return true;\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      return wnaf.unsafe(this, CURVE_ORDER).is0();\n    }\n\n    clearCofactor(): Point {\n      const { clearCofactor } = extraOpts;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(cofactor);\n    }\n\n    isSmallOrder(): boolean {\n      // can we use this.clearCofactor()?\n      return this.multiplyUnsafe(cofactor).is0();\n    }\n\n    toBytes(isCompressed = true): Uint8Array {\n      abool(isCompressed, 'isCompressed');\n      this.assertValidity();\n      return encodePoint(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return bytesToHex(this.toBytes(isCompressed));\n    }\n\n    toString() {\n      return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`;\n    }\n\n    // TODO: remove\n    get px(): T {\n      return this.X;\n    }\n    get py(): T {\n      return this.X;\n    }\n    get pz(): T {\n      return this.Z;\n    }\n    toRawBytes(isCompressed = true): Uint8Array {\n      return this.toBytes(isCompressed);\n    }\n    _setWindowSize(windowSize: number) {\n      this.precompute(windowSize);\n    }\n    static normalizeZ(points: Point[]): Point[] {\n      return normalizeZ(Point, points);\n    }\n    static msm(points: Point[], scalars: bigint[]): Point {\n      return pippenger(Point, Fn, points, scalars);\n    }\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(_normFnElement(Fn, privateKey));\n    }\n  }\n  const bits = Fn.BITS;\n  const wnaf = new wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits);\n  Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n  return Point;\n}\n\n/** Methods of ECDSA signature instance. */\nexport interface ECDSASignature {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  addRecoveryBit(recovery: number): ECDSASigRecovered;\n  hasHighS(): boolean;\n  toBytes(format?: string): Uint8Array;\n  toHex(format?: string): string;\n\n  /** @deprecated */\n  assertValidity(): void;\n  /** @deprecated */\n  normalizeS(): ECDSASignature;\n  /** @deprecated use standalone method `curve.recoverPublicKey(sig.toBytes('recovered'), msg)` */\n  recoverPublicKey(msgHash: Hex): WeierstrassPoint<bigint>;\n  /** @deprecated use `.toBytes('compact')` */\n  toCompactRawBytes(): Uint8Array;\n  /** @deprecated use `.toBytes('compact')` */\n  toCompactHex(): string;\n  /** @deprecated use `.toBytes('der')` */\n  toDERRawBytes(): Uint8Array;\n  /** @deprecated use `.toBytes('der')` */\n  toDERHex(): string;\n}\nexport type ECDSASigRecovered = ECDSASignature & {\n  readonly recovery: number;\n};\n/** Methods of ECDSA signature constructor. */\nexport type ECDSASignatureCons = {\n  new (r: bigint, s: bigint, recovery?: number): ECDSASignature;\n  fromBytes(bytes: Uint8Array, format?: ECDSASigFormat): ECDSASignature;\n  fromHex(hex: string, format?: ECDSASigFormat): ECDSASignature;\n\n  /** @deprecated use `.fromBytes(bytes, 'compact')` */\n  fromCompact(hex: Hex): ECDSASignature;\n  /** @deprecated use `.fromBytes(bytes, 'der')` */\n  fromDER(hex: Hex): ECDSASignature;\n};\n\n// Points start with byte 0x02 when y is even; otherwise 0x03\nfunction pprefix(hasEvenY: boolean): Uint8Array {\n  return Uint8Array.of(hasEvenY ? 0x02 : 0x03);\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(\n  Fp: IField<T>,\n  Z: T\n): (u: T, v: T) => { isValid: boolean; value: T } {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n): (u: T) => { x: T; y: T } {\n  validateField(Fp);\n  const { A, B, Z } = opts;\n  if (!Fp.isValid(A) || !Fp.isValid(B) || !Fp.isValid(Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, Z);\n  if (!Fp.isOdd) throw new Error('Field does not have .isOdd()');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    const tv4_inv = FpInvertBatch(Fp, [tv4], true)[0];\n    x = Fp.mul(x, tv4_inv); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n\nfunction getWLengths<T>(Fp: IField<T>, Fn: IField<bigint>) {\n  return {\n    secretKey: Fn.BYTES,\n    publicKey: 1 + Fp.BYTES,\n    publicKeyUncompressed: 1 + 2 * Fp.BYTES,\n    publicKeyHasPrefix: true,\n    signature: 2 * Fn.BYTES,\n  };\n}\n\n/**\n * Sometimes users only need getPublicKey, getSharedSecret, and secret key handling.\n * This helper ensures no signature functionality is present. Less code, smaller bundle size.\n */\nexport function ecdh(\n  Point: WeierstrassPointCons<bigint>,\n  ecdhOpts: { randomBytes?: (bytesLength?: number) => Uint8Array } = {}\n): ECDH {\n  const { Fn } = Point;\n  const randomBytes_ = ecdhOpts.randomBytes || randomBytesWeb;\n  const lengths = Object.assign(getWLengths(Point.Fp, Fn), { seed: getMinHashLength(Fn.ORDER) });\n\n  function isValidSecretKey(secretKey: PrivKey) {\n    try {\n      return !!_normFnElement(Fn, secretKey);\n    } catch (error) {\n      return false;\n    }\n  }\n\n  function isValidPublicKey(publicKey: Uint8Array, isCompressed?: boolean): boolean {\n    const { publicKey: comp, publicKeyUncompressed } = lengths;\n    try {\n      const l = publicKey.length;\n      if (isCompressed === true && l !== comp) return false;\n      if (isCompressed === false && l !== publicKeyUncompressed) return false;\n      return !!Point.fromBytes(publicKey);\n    } catch (error) {\n      return false;\n    }\n  }\n\n  /**\n   * Produces cryptographically secure secret key from random of size\n   * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n   */\n  function randomSecretKey(seed = randomBytes_(lengths.seed)): Uint8Array {\n    return mapHashToField(abytes(seed, lengths.seed, 'seed'), Fn.ORDER);\n  }\n\n  /**\n   * Computes public key for a secret key. Checks for validity of the secret key.\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(secretKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.BASE.multiply(_normFnElement(Fn, secretKey)).toBytes(isCompressed);\n  }\n\n  function keygen(seed?: Uint8Array) {\n    const secretKey = randomSecretKey(seed);\n    return { secretKey, publicKey: getPublicKey(secretKey) };\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean | undefined {\n    if (typeof item === 'bigint') return false;\n    if (item instanceof Point) return true;\n    const { secretKey, publicKey, publicKeyUncompressed } = lengths;\n    if (Fn.allowedLengths || secretKey === publicKey) return undefined;\n    const l = ensureBytes('key', item).length;\n    return l === publicKey || l === publicKeyUncompressed;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from secret key A and public key B.\n   * Checks: 1) secret key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(secretKeyA: PrivKey, publicKeyB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(secretKeyA) === true) throw new Error('first arg must be private key');\n    if (isProbPub(publicKeyB) === false) throw new Error('second arg must be public key');\n    const s = _normFnElement(Fn, secretKeyA);\n    const b = Point.fromHex(publicKeyB); // checks for being on-curve\n    return b.multiply(s).toBytes(isCompressed);\n  }\n\n  const utils = {\n    isValidSecretKey,\n    isValidPublicKey,\n    randomSecretKey,\n\n    // TODO: remove\n    isValidPrivateKey: isValidSecretKey,\n    randomPrivateKey: randomSecretKey,\n    normPrivateKeyToScalar: (key: PrivKey) => _normFnElement(Fn, key),\n    precompute(windowSize = 8, point = Point.BASE): WeierstrassPoint<bigint> {\n      return point.precompute(windowSize, false);\n    },\n  };\n\n  return Object.freeze({ getPublicKey, getSharedSecret, keygen, Point, utils, lengths });\n}\n\n/**\n * Creates ECDSA signing interface for given elliptic curve `Point` and `hash` function.\n * We need `hash` for 2 features:\n * 1. Message prehash-ing. NOT used if `sign` / `verify` are called with `prehash: false`\n * 2. k generation in `sign`, using HMAC-drbg(hash)\n *\n * ECDSAOpts are only rarely needed.\n *\n * @example\n * ```js\n * const p256_Point = weierstrass(...);\n * const p256_sha256 = ecdsa(p256_Point, sha256);\n * const p256_sha224 = ecdsa(p256_Point, sha224);\n * const p256_sha224_r = ecdsa(p256_Point, sha224, { randomBytes: (length) => { ... } });\n * ```\n */\nexport function ecdsa(\n  Point: WeierstrassPointCons<bigint>,\n  hash: CHash,\n  ecdsaOpts: ECDSAOpts = {}\n): ECDSA {\n  ahash(hash);\n  _validateObject(\n    ecdsaOpts,\n    {},\n    {\n      hmac: 'function',\n      lowS: 'boolean',\n      randomBytes: 'function',\n      bits2int: 'function',\n      bits2int_modN: 'function',\n    }\n  );\n\n  const randomBytes = ecdsaOpts.randomBytes || randomBytesWeb;\n  const hmac: HmacFnSync =\n    ecdsaOpts.hmac ||\n    (((key, ...msgs) => nobleHmac(hash, key, concatBytes(...msgs))) satisfies HmacFnSync);\n\n  const { Fp, Fn } = Point;\n  const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn;\n  const { keygen, getPublicKey, getSharedSecret, utils, lengths } = ecdh(Point, ecdsaOpts);\n  const defaultSigOpts: Required<ECDSASignOpts> = {\n    prehash: false,\n    lowS: typeof ecdsaOpts.lowS === 'boolean' ? ecdsaOpts.lowS : false,\n    format: undefined as any, //'compact' as ECDSASigFormat,\n    extraEntropy: false,\n  };\n  const defaultSigOpts_format = 'compact';\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n  function validateRS(title: string, num: bigint): bigint {\n    if (!Fn.isValidNot0(num))\n      throw new Error(`invalid signature ${title}: out of range 1..Point.Fn.ORDER`);\n    return num;\n  }\n  function validateSigLength(bytes: Uint8Array, format: ECDSASigFormat) {\n    validateSigFormat(format);\n    const size = lengths.signature!;\n    const sizer = format === 'compact' ? size : format === 'recovered' ? size + 1 : undefined;\n    return abytes(bytes, sizer, `${format} signature`);\n  }\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports compact, recovered & DER representations.\n   */\n  class Signature implements ECDSASignature {\n    readonly r: bigint;\n    readonly s: bigint;\n    readonly recovery?: number;\n    constructor(r: bigint, s: bigint, recovery?: number) {\n      this.r = validateRS('r', r); // r in [1..N-1];\n      this.s = validateRS('s', s); // s in [1..N-1];\n      if (recovery != null) this.recovery = recovery;\n      Object.freeze(this);\n    }\n\n    static fromBytes(bytes: Uint8Array, format: ECDSASigFormat = defaultSigOpts_format): Signature {\n      validateSigLength(bytes, format);\n      let recid: number | undefined;\n      if (format === 'der') {\n        const { r, s } = DER.toSig(abytes(bytes));\n        return new Signature(r, s);\n      }\n      if (format === 'recovered') {\n        recid = bytes[0];\n        format = 'compact';\n        bytes = bytes.subarray(1);\n      }\n      const L = Fn.BYTES;\n      const r = bytes.subarray(0, L);\n      const s = bytes.subarray(L, L * 2);\n      return new Signature(Fn.fromBytes(r), Fn.fromBytes(s), recid);\n    }\n\n    static fromHex(hex: string, format?: ECDSASigFormat) {\n      return this.fromBytes(hexToBytes(hex), format);\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(messageHash: Hex): WeierstrassPoint<bigint> {\n      const FIELD_ORDER = Fp.ORDER;\n      const { r, s, recovery: rec } = this;\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n\n      // ECDSA recovery is hard for cofactor > 1 curves.\n      // In sign, `r = q.x mod n`, and here we recover q.x from r.\n      // While recovering q.x >= n, we need to add r+n for cofactor=1 curves.\n      // However, for cofactor>1, r+n may not get q.x:\n      // r+n*i would need to be done instead where i is unknown.\n      // To easily get i, we either need to:\n      // a. increase amount of valid recid values (4, 5...); OR\n      // b. prohibit non-prime-order signatures (recid > 1).\n      const hasCofactor = CURVE_ORDER * _2n < FIELD_ORDER;\n      if (hasCofactor && rec > 1) throw new Error('recovery id is ambiguous for h>1 curve');\n\n      const radj = rec === 2 || rec === 3 ? r + CURVE_ORDER : r;\n      if (!Fp.isValid(radj)) throw new Error('recovery id 2 or 3 invalid');\n      const x = Fp.toBytes(radj);\n      const R = Point.fromBytes(concatBytes(pprefix((rec & 1) === 0), x));\n      const ir = Fn.inv(radj); // r^-1\n      const h = bits2int_modN(ensureBytes('msgHash', messageHash)); // Truncate hash\n      const u1 = Fn.create(-h * ir); // -hr^-1\n      const u2 = Fn.create(s * ir); // sr^-1\n      // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1). unsafe is fine: there is no private data.\n      const Q = Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2));\n      if (Q.is0()) throw new Error('point at infinify');\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    toBytes(format: ECDSASigFormat = defaultSigOpts_format) {\n      validateSigFormat(format);\n      if (format === 'der') return hexToBytes(DER.hexFromSig(this));\n      const r = Fn.toBytes(this.r);\n      const s = Fn.toBytes(this.s);\n      if (format === 'recovered') {\n        if (this.recovery == null) throw new Error('recovery bit must be present');\n        return concatBytes(Uint8Array.of(this.recovery), r, s);\n      }\n      return concatBytes(r, s);\n    }\n\n    toHex(format?: ECDSASigFormat) {\n      return bytesToHex(this.toBytes(format));\n    }\n\n    // TODO: remove\n    assertValidity(): void {}\n    static fromCompact(hex: Hex) {\n      return Signature.fromBytes(ensureBytes('sig', hex), 'compact');\n    }\n    static fromDER(hex: Hex) {\n      return Signature.fromBytes(ensureBytes('sig', hex), 'der');\n    }\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, Fn.neg(this.s), this.recovery) : this;\n    }\n    toDERRawBytes() {\n      return this.toBytes('der');\n    }\n    toDERHex() {\n      return bytesToHex(this.toBytes('der'));\n    }\n    toCompactRawBytes() {\n      return this.toBytes('compact');\n    }\n    toCompactHex() {\n      return bytesToHex(this.toBytes('compact'));\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    ecdsaOpts.bits2int ||\n    function bits2int_def(bytes: Uint8Array): bigint {\n      // Our custom check \"just in case\", for protection against DoS\n      if (bytes.length > 8192) throw new Error('input is too large');\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - fnBits; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    ecdsaOpts.bits2int_modN ||\n    function bits2int_modN_def(bytes: Uint8Array): bigint {\n      return Fn.create(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // Pads output with zero as per spec\n  const ORDER_MASK = bitMask(fnBits);\n  /** Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`. */\n  function int2octets(num: bigint): Uint8Array {\n    // IMPORTANT: the check ensures working for case `Fn.BYTES != Fn.BITS * 8`\n    aInRange('num < 2^' + fnBits, num, _0n, ORDER_MASK);\n    return Fn.toBytes(num);\n  }\n\n  function validateMsgAndHash(message: Uint8Array, prehash: boolean) {\n    abytes(message, undefined, 'message');\n    return prehash ? abytes(hash(message), undefined, 'prehashed message') : message;\n  }\n\n  /**\n   * Steps A, D of RFC6979 3.2.\n   * Creates RFC6979 seed; converts msg/privKey to numbers.\n   * Used only in sign, not in verify.\n   *\n   * Warning: we cannot assume here that message has same amount of bytes as curve order,\n   * this will be invalid at least for P521. Also it can be bigger for P224 + SHA256.\n   */\n  function prepSig(message: Uint8Array, privateKey: PrivKey, opts: ECDSASignOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { lowS, prehash, extraEntropy } = validateSigOpts(opts, defaultSigOpts);\n    message = validateMsgAndHash(message, prehash); // RFC6979 3.2 A: h1 = H(m)\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with fnBits % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(message);\n    const d = _normFnElement(Fn, privateKey); // validate secret key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (extraEntropy != null && extraEntropy !== false) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      // gen random bytes OR pass as-is\n      const e = extraEntropy === true ? randomBytes(lengths.secretKey) : extraEntropy;\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    // To transform k => Signature:\n    // q = k\u22C5G\n    // r = q.x mod n\n    // s = k^-1(m + rd) mod n\n    // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n    // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n    // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      // Important: all mod() calls here must be done over N\n      const k = bits2int(kBytes); // mod n, not mod p\n      if (!Fn.isValidNot0(k)) return; // Valid scalars (including k) must be in 1..N-1\n      const ik = Fn.inv(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = k\u22C5G\n      const r = Fn.create(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      const s = Fn.create(ik * Fn.create(m + r * d)); // Not using blinding here, see comment above\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = Fn.neg(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n\n  /**\n   * Signs message hash with a secret key.\n   *\n   * ```\n   * sign(m, d) where\n   *   k = rfc6979_hmac_drbg(m, d)\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr) / k mod n\n   * ```\n   */\n  function sign(message: Hex, secretKey: PrivKey, opts: ECDSASignOpts = {}): RecoveredSignature {\n    message = ensureBytes('message', message);\n    const { seed, k2sig } = prepSig(message, secretKey, opts); // Steps A, D of RFC6979 3.2.\n    const drbg = createHmacDrbg<RecoveredSignature>(hash.outputLen, Fn.BYTES, hmac);\n    const sig = drbg(seed, k2sig); // Steps B, C, D, E, F, G\n    return sig;\n  }\n\n  function tryParsingSig(sg: Hex | SignatureLike) {\n    // Try to deduce format\n    let sig: Signature | undefined = undefined;\n    const isHex = typeof sg === 'string' || isBytes(sg);\n    const isObj =\n      !isHex &&\n      sg !== null &&\n      typeof sg === 'object' &&\n      typeof sg.r === 'bigint' &&\n      typeof sg.s === 'bigint';\n    if (!isHex && !isObj)\n      throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance');\n    if (isObj) {\n      sig = new Signature(sg.r, sg.s);\n    } else if (isHex) {\n      try {\n        sig = Signature.fromBytes(ensureBytes('sig', sg), 'der');\n      } catch (derError) {\n        if (!(derError instanceof DER.Err)) throw derError;\n      }\n      if (!sig) {\n        try {\n          sig = Signature.fromBytes(ensureBytes('sig', sg), 'compact');\n        } catch (error) {\n          return false;\n        }\n      }\n    }\n    if (!sig) return false;\n    return sig;\n  }\n\n  /**\n   * Verifies a signature against message and public key.\n   * Rejects lowS signatures by default: see {@link ECDSAVerifyOpts}.\n   * Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   u1 = hs^-1 mod n\n   *   u2 = rs^-1 mod n\n   *   R = u1\u22C5G + u2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    message: Hex,\n    publicKey: Hex,\n    opts: ECDSAVerifyOpts = {}\n  ): boolean {\n    const { lowS, prehash, format } = validateSigOpts(opts, defaultSigOpts);\n    publicKey = ensureBytes('publicKey', publicKey);\n    message = validateMsgAndHash(ensureBytes('message', message), prehash);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    const sig =\n      format === undefined\n        ? tryParsingSig(signature)\n        : Signature.fromBytes(ensureBytes('sig', signature as Hex), format);\n    if (sig === false) return false;\n    try {\n      const P = Point.fromBytes(publicKey);\n      if (lowS && sig.hasHighS()) return false;\n      const { r, s } = sig;\n      const h = bits2int_modN(message); // mod n, not mod p\n      const is = Fn.inv(s); // s^-1 mod n\n      const u1 = Fn.create(h * is); // u1 = hs^-1 mod n\n      const u2 = Fn.create(r * is); // u2 = rs^-1 mod n\n      const R = Point.BASE.multiplyUnsafe(u1).add(P.multiplyUnsafe(u2)); // u1\u22C5G + u2\u22C5P\n      if (R.is0()) return false;\n      const v = Fn.create(R.x); // v = r.x mod n\n      return v === r;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function recoverPublicKey(\n    signature: Uint8Array,\n    message: Uint8Array,\n    opts: ECDSARecoverOpts = {}\n  ): Uint8Array {\n    const { prehash } = validateSigOpts(opts, defaultSigOpts);\n    message = validateMsgAndHash(message, prehash);\n    return Signature.fromBytes(signature, 'recovered').recoverPublicKey(message).toBytes();\n  }\n\n  return Object.freeze({\n    keygen,\n    getPublicKey,\n    getSharedSecret,\n    utils,\n    lengths,\n    Point,\n    sign,\n    verify,\n    recoverPublicKey,\n    Signature,\n    hash,\n  });\n}\n\n// TODO: remove everything below\n/** @deprecated use ECDSASignature */\nexport type SignatureType = ECDSASignature;\n/** @deprecated use ECDSASigRecovered */\nexport type RecoveredSignatureType = ECDSASigRecovered;\n/** @deprecated switch to Uint8Array signatures in format 'compact' */\nexport type SignatureLike = { r: bigint; s: bigint };\nexport type ECDSAExtraEntropy = Hex | boolean;\n/** @deprecated use `ECDSAExtraEntropy` */\nexport type Entropy = Hex | boolean;\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts;\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => WeierstrassPoint<T>;\n};\n/** @deprecated use ECDSASignOpts */\nexport type SignOpts = ECDSASignOpts;\n/** @deprecated use ECDSASignOpts */\nexport type VerOpts = ECDSAVerifyOpts;\n\n/** @deprecated use WeierstrassPoint */\nexport type ProjPointType<T> = WeierstrassPoint<T>;\n/** @deprecated use WeierstrassPointCons */\nexport type ProjConstructor<T> = WeierstrassPointCons<T>;\n/** @deprecated use ECDSASignatureCons */\nexport type SignatureConstructor = ECDSASignatureCons;\n\n// TODO: remove\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (\n    c: WeierstrassPointCons<T>,\n    point: WeierstrassPoint<T>,\n    isCompressed: boolean\n  ) => Uint8Array;\n};\n\n// LegacyWeierstrassOpts\nexport type CurvePointsTypeWithLength<T> = Readonly<CurvePointsType<T> & Partial<NLength>>;\n\n// LegacyWeierstrass\nexport type CurvePointsRes<T> = {\n  Point: WeierstrassPointCons<T>;\n\n  /** @deprecated use `Point.CURVE()` */\n  CURVE: CurvePointsType<T>;\n  /** @deprecated use `Point` */\n  ProjectivePoint: WeierstrassPointCons<T>;\n  /** @deprecated use `Point.Fn.fromBytes(privateKey)` */\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  /** @deprecated */\n  weierstrassEquation: (x: T) => T;\n  /** @deprecated use `Point.Fn.isValidNot0(num)` */\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\n// Aliases to legacy types\n// export type CurveType = LegacyECDSAOpts;\n// export type CurveFn = LegacyECDSA;\n// export type CurvePointsRes<T> = LegacyWeierstrass<T>;\n// export type CurvePointsType<T> = LegacyWeierstrassOpts<T>;\n// export type CurvePointsTypeWithLength<T> = LegacyWeierstrassOpts<T>;\n// export type BasicWCurve<T> = LegacyWeierstrassOpts<T>;\n\n/** @deprecated use `Uint8Array` */\nexport type PubKey = Hex | WeierstrassPoint<bigint>;\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac?: HmacFnSync;\n  randomBytes?: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\nexport type CurveFn = {\n  /** @deprecated use `Point.CURVE()` */\n  CURVE: CurvePointsType<bigint>;\n  keygen: ECDSA['keygen'];\n  getPublicKey: ECDSA['getPublicKey'];\n  getSharedSecret: ECDSA['getSharedSecret'];\n  sign: ECDSA['sign'];\n  verify: ECDSA['verify'];\n  Point: WeierstrassPointCons<bigint>;\n  /** @deprecated use `Point` */\n  ProjectivePoint: WeierstrassPointCons<bigint>;\n  Signature: ECDSASignatureCons;\n  utils: ECDSA['utils'];\n  lengths: ECDSA['lengths'];\n};\n/** @deprecated use `weierstrass` in newer releases */\nexport function weierstrassPoints<T>(c: CurvePointsTypeWithLength<T>): CurvePointsRes<T> {\n  const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c);\n  const Point = weierstrassN(CURVE, curveOpts);\n  return _weierstrass_new_output_to_legacy(c, Point);\n}\nexport type WsPointComposed<T> = {\n  CURVE: WeierstrassOpts<T>;\n  curveOpts: WeierstrassExtraOpts<T>;\n};\nexport type WsComposed = {\n  /** @deprecated use `Point.CURVE()` */\n  CURVE: WeierstrassOpts<bigint>;\n  hash: CHash;\n  curveOpts: WeierstrassExtraOpts<bigint>;\n  ecdsaOpts: ECDSAOpts;\n};\nfunction _weierstrass_legacy_opts_to_new<T>(c: CurvePointsType<T>): WsPointComposed<T> {\n  const CURVE: WeierstrassOpts<T> = {\n    a: c.a,\n    b: c.b,\n    p: c.Fp.ORDER,\n    n: c.n,\n    h: c.h,\n    Gx: c.Gx,\n    Gy: c.Gy,\n  };\n  const Fp = c.Fp;\n  let allowedLengths = c.allowedPrivateKeyLengths\n    ? Array.from(new Set(c.allowedPrivateKeyLengths.map((l) => Math.ceil(l / 2))))\n    : undefined;\n  const Fn = Field(CURVE.n, {\n    BITS: c.nBitLength,\n    allowedLengths: allowedLengths,\n    modFromBytes: c.wrapPrivateKey,\n  });\n  const curveOpts: WeierstrassExtraOpts<T> = {\n    Fp,\n    Fn,\n    allowInfinityPoint: c.allowInfinityPoint,\n    endo: c.endo,\n    isTorsionFree: c.isTorsionFree,\n    clearCofactor: c.clearCofactor,\n    fromBytes: c.fromBytes,\n    toBytes: c.toBytes,\n  };\n  return { CURVE, curveOpts };\n}\nfunction _ecdsa_legacy_opts_to_new(c: CurveType): WsComposed {\n  const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c);\n  const ecdsaOpts: ECDSAOpts = {\n    hmac: c.hmac,\n    randomBytes: c.randomBytes,\n    lowS: c.lowS,\n    bits2int: c.bits2int,\n    bits2int_modN: c.bits2int_modN,\n  };\n  return { CURVE, curveOpts, hash: c.hash, ecdsaOpts };\n}\nexport function _legacyHelperEquat<T>(Fp: IField<T>, a: T, b: T): (x: T) => T {\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula. Takes x, returns y\u00B2.\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x\u00B2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x\u00B3 + a * x + b\n  }\n  return weierstrassEquation;\n}\nfunction _weierstrass_new_output_to_legacy<T>(\n  c: CurvePointsType<T>,\n  Point: WeierstrassPointCons<T>\n): CurvePointsRes<T> {\n  const { Fp, Fn } = Point;\n  function isWithinCurveOrder(num: bigint): boolean {\n    return inRange(num, _1n, Fn.ORDER);\n  }\n  const weierstrassEquation = _legacyHelperEquat(Fp, c.a, c.b);\n  return Object.assign(\n    {},\n    {\n      CURVE: c,\n      Point: Point,\n      ProjectivePoint: Point,\n      normPrivateKeyToScalar: (key: PrivKey) => _normFnElement(Fn, key),\n      weierstrassEquation,\n      isWithinCurveOrder,\n    }\n  );\n}\nfunction _ecdsa_new_output_to_legacy(c: CurveType, _ecdsa: ECDSA): CurveFn {\n  const Point = _ecdsa.Point;\n  return Object.assign({}, _ecdsa, {\n    ProjectivePoint: Point,\n    CURVE: Object.assign({}, c, nLength(Point.Fn.ORDER, Point.Fn.BITS)),\n  });\n}\n\n// _ecdsa_legacy\nexport function weierstrass(c: CurveType): CurveFn {\n  const { CURVE, curveOpts, hash, ecdsaOpts } = _ecdsa_legacy_opts_to_new(c);\n  const Point = weierstrassN(CURVE, curveOpts);\n  const signs = ecdsa(Point, hash, ecdsaOpts);\n  return _ecdsa_new_output_to_legacy(c, signs);\n}\n", "/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n  abytes as abytes_,\n  bytesToHex as bytesToHex_,\n  concatBytes as concatBytes_,\n  hexToBytes as hexToBytes_,\n  isBytes as isBytes_,\n} from '@noble/hashes/utils.js';\nexport {\n  abytes,\n  anumber,\n  bytesToHex,\n  bytesToUtf8,\n  concatBytes,\n  hexToBytes,\n  isBytes,\n  randomBytes,\n  utf8ToBytes,\n} from '@noble/hashes/utils.js';\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function abool(title: string, value: boolean): void {\n  if (typeof value !== 'boolean') throw new Error(title + ' boolean expected, got ' + value);\n}\n\n// tmp name until v2\nexport function _abool2(value: boolean, title: string = ''): boolean {\n  if (typeof value !== 'boolean') {\n    const prefix = title && `\"${title}\"`;\n    throw new Error(prefix + 'expected boolean, got type=' + typeof value);\n  }\n  return value;\n}\n\n// tmp name until v2\n/** Asserts something is Uint8Array. */\nexport function _abytes2(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n  const bytes = isBytes_(value);\n  const len = value?.length;\n  const needsLen = length !== undefined;\n  if (!bytes || (needsLen && len !== length)) {\n    const prefix = title && `\"${title}\" `;\n    const ofLen = needsLen ? ` of length ${length}` : '';\n    const got = bytes ? `length=${len}` : `type=${typeof value}`;\n    throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n  }\n  return value;\n}\n\n// Used in weierstrass, der\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? '0' + hex : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex_(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  abytes_(bytes);\n  return hexToNumber(bytesToHex_(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes_(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes_(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'secret key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes_(hex);\n    } catch (e) {\n      throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);\n    }\n  } else if (isBytes_(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(title + ' must be hex string or Uint8Array');\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);\n  return res;\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n/**\n * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer,\n * and Buffer#slice creates mutable copy. Never use Buffers!\n */\nexport function copyBytes(bytes: Uint8Array): Uint8Array {\n  return Uint8Array.from(bytes);\n}\n\n/**\n * Decodes 7-bit ASCII string to Uint8Array, throws on non-ascii symbols\n * Should be safe to use for things expected to be ASCII.\n * Returns exact same result as utf8ToBytes for ASCII or throws.\n */\nexport function asciiToBytes(ascii: string): Uint8Array {\n  return Uint8Array.from(ascii, (c, i) => {\n    const charCode = c.charCodeAt(0);\n    if (c.length !== 1 || charCode > 127) {\n      throw new Error(\n        `string contains non-ASCII character \"${ascii[i]}\" with code ${charCode} at position ${i}`\n      );\n    }\n    return charCode;\n  });\n}\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\n// export const utf8ToBytes: typeof utf8ToBytes_ = utf8ToBytes_;\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\n// export const bytesToUtf8: typeof bytesToUtf8_ = bytesToUtf8_;\n\n// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint): boolean {\n  return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint): void {\n  // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n  // consider P=256n, min=0n, max=P\n  // - a for min=0 would require -1:          `inRange('x', x, -1n, P)`\n  // - b would commonly require subtraction:  `inRange('x', x, 0n, P - 1n)`\n  // - our way is the cleanest:               `inRange('x', x, 0n, P)\n  if (!inRange(n, min, max))\n    throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nexport function bitLen(n: bigint): number {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number): bigint {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean): bigint {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number): bigint => (_1n << BigInt(n)) - _1n;\n\n// DRBG\n\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  const u8n = (len: number) => new Uint8Array(len); // creates Uint8Array\n  const u8of = (byte: number) => Uint8Array.of(byte); // another shortcut\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n(0)) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8of(0x00), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8of(0x01), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes_(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any): boolean => typeof val === 'bigint',\n  function: (val: any): boolean => typeof val === 'function',\n  boolean: (val: any): boolean => typeof val === 'boolean',\n  string: (val: any): boolean => typeof val === 'string',\n  stringOrUint8Array: (val: any): boolean => typeof val === 'string' || isBytes_(val),\n  isSafeInteger: (val: any): boolean => Number.isSafeInteger(val),\n  array: (val: any): boolean => Array.isArray(val),\n  field: (val: any, object: any): any => (object as any).Fp.isValid(val),\n  hash: (val: any): boolean => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n): T {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function') throw new Error('invalid validator function');\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        'param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n\nexport function isHash(val: CHash): boolean {\n  return typeof val === 'function' && Number.isSafeInteger(val.outputLen);\n}\nexport function _validateObject(\n  object: Record<string, any>,\n  fields: Record<string, string>,\n  optFields: Record<string, string> = {}\n): void {\n  if (!object || typeof object !== 'object') throw new Error('expected valid options object');\n  type Item = keyof typeof object;\n  function checkField(fieldName: Item, expectedType: string, isOpt: boolean) {\n    const val = object[fieldName];\n    if (isOpt && val === undefined) return;\n    const current = typeof val;\n    if (current !== expectedType || val === null)\n      throw new Error(`param \"${fieldName}\" is invalid: expected ${expectedType}, got ${current}`);\n  }\n  Object.entries(fields).forEach(([k, v]) => checkField(k, v, false));\n  Object.entries(optFields).forEach(([k, v]) => checkField(k, v, true));\n}\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = (): never => {\n  throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized<T extends object, R, O extends any[]>(\n  fn: (arg: T, ...args: O) => R\n): (arg: T, ...args: O) => R {\n  const map = new WeakMap<T, R>();\n  return (arg: T, ...args: O): R => {\n    const val = map.get(arg);\n    if (val !== undefined) return val;\n    const computed = fn(arg, ...args);\n    map.set(arg, computed);\n    return computed;\n  };\n}\n", "/**\n * Utils for modular division and fields.\n * Field over 11 is a finite (Galois) field is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n  _validateObject,\n  anumber,\n  bitMask,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  numberToBytesBE,\n  numberToBytesLE,\n} from '../utils.ts';\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3);\n// prettier-ignore\nconst _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _7n = /* @__PURE__ */ BigInt(7);\n// prettier-ignore\nconst _8n = /* @__PURE__ */ BigInt(8), _9n = /* @__PURE__ */ BigInt(9), _16n = /* @__PURE__ */ BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  return FpPow(Field(modulo), num, power);\n}\n\n/** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n/**\n * Inverses number over modulo.\n * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).\n */\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n) throw new Error('invert: expected non-zero number');\n  if (modulo <= _0n) throw new Error('invert: expected positive modulus, got ' + modulo);\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\nfunction assertIsSquare<T>(Fp: IField<T>, root: T, n: T): void {\n  if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n}\n\n// Not all roots are possible! Example which will throw:\n// const NUM =\n// n = 72057594037927816n;\n// Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));\nfunction sqrt3mod4<T>(Fp: IField<T>, n: T) {\n  const p1div4 = (Fp.ORDER + _1n) / _4n;\n  const root = Fp.pow(n, p1div4);\n  assertIsSquare(Fp, root, n);\n  return root;\n}\n\nfunction sqrt5mod8<T>(Fp: IField<T>, n: T) {\n  const p5div8 = (Fp.ORDER - _5n) / _8n;\n  const n2 = Fp.mul(n, _2n);\n  const v = Fp.pow(n2, p5div8);\n  const nv = Fp.mul(n, v);\n  const i = Fp.mul(Fp.mul(nv, _2n), v);\n  const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n  assertIsSquare(Fp, root, n);\n  return root;\n}\n\n// Based on RFC9380, Kong algorithm\n// prettier-ignore\nfunction sqrt9mod16(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  const Fp_ = Field(P);\n  const tn = tonelliShanks(P);\n  const c1 = tn(Fp_, Fp_.neg(Fp_.ONE));//  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n  const c2 = tn(Fp_, c1);              //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n  const c3 = tn(Fp_, Fp_.neg(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n  const c4 = (P + _7n) / _16n;         //  4. c4 = (q + 7) / 16        # Integer arithmetic\n  return <T>(Fp: IField<T>, n: T) => {\n    let tv1 = Fp.pow(n, c4);           //  1. tv1 = x^c4\n    let tv2 = Fp.mul(tv1, c1);         //  2. tv2 = c1 * tv1\n    const tv3 = Fp.mul(tv1, c2);       //  3. tv3 = c2 * tv1\n    const tv4 = Fp.mul(tv1, c3);       //  4. tv4 = c3 * tv1\n    const e1 = Fp.eql(Fp.sqr(tv2), n); //  5.  e1 = (tv2^2) == x\n    const e2 = Fp.eql(Fp.sqr(tv3), n); //  6.  e2 = (tv3^2) == x\n    tv1 = Fp.cmov(tv1, tv2, e1);       //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n    tv2 = Fp.cmov(tv4, tv3, e2);       //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n    const e3 = Fp.eql(Fp.sqr(tv2), n); //  9.  e3 = (tv2^2) == x\n    const root = Fp.cmov(tv1, tv2, e3);// 10.  z = CMOV(tv1, tv2, e3)   # Select sqrt from tv1 & tv2\n    assertIsSquare(Fp, root, n);\n    return root;\n  };\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  // Initialization (precomputation).\n  // Caching initialization could boost perf by 7%.\n  if (P < _3n) throw new Error('sqrt is not defined for small field');\n  // Factor P - 1 = Q * 2^S, where Q is odd\n  let Q = P - _1n;\n  let S = 0;\n  while (Q % _2n === _0n) {\n    Q /= _2n;\n    S++;\n  }\n\n  // Find the first quadratic non-residue Z >= 2\n  let Z = _2n;\n  const _Fp = Field(P);\n  while (FpLegendre(_Fp, Z) === 1) {\n    // Basic primality test for P. After x iterations, chance of\n    // not finding quadratic non-residue is 2^x, so 2^1000.\n    if (Z++ > 1000) throw new Error('Cannot find square root: probably non-prime P');\n  }\n  // Fast-path; usually done before Z, but we do \"primality test\".\n  if (S === 1) return sqrt3mod4;\n\n  // Slow-path\n  // TODO: test on Fp2 and others\n  let cc = _Fp.pow(Z, Q); // c = z^Q\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    if (Fp.is0(n)) return n;\n    // Check if n is a quadratic residue using Legendre symbol\n    if (FpLegendre(Fp, n) !== 1) throw new Error('Cannot find square root');\n\n    // Initialize variables for the main loop\n    let M = S;\n    let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp\n    let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor\n    let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root\n\n    // Main loop\n    // while t != 1\n    while (!Fp.eql(t, Fp.ONE)) {\n      if (Fp.is0(t)) return Fp.ZERO; // if t=0 return R=0\n      let i = 1;\n\n      // Find the smallest i >= 1 such that t^(2^i) \u2261 1 (mod P)\n      let t_tmp = Fp.sqr(t); // t^(2^1)\n      while (!Fp.eql(t_tmp, Fp.ONE)) {\n        i++;\n        t_tmp = Fp.sqr(t_tmp); // t^(2^2)...\n        if (i === M) throw new Error('Cannot find square root');\n      }\n\n      // Calculate the exponent for b: 2^(M - i - 1)\n      const exponent = _1n << BigInt(M - i - 1); // bigint is important\n      const b = Fp.pow(c, exponent); // b = 2^(M - i - 1)\n\n      // Update variables\n      M = i;\n      c = Fp.sqr(b); // c = b^2\n      t = Fp.mul(t, c); // t = (t * b^2)\n      R = Fp.mul(R, b); // R = R*b\n    }\n    return R;\n  };\n}\n\n/**\n * Square root for a finite field. Will try optimized versions first:\n *\n * 1. P \u2261 3 (mod 4)\n * 2. P \u2261 5 (mod 8)\n * 3. P \u2261 9 (mod 16)\n * 4. Tonelli-Shanks algorithm\n *\n * Different algorithms can give different roots, it is up to user to decide which one they want.\n * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n */\nexport function FpSqrt(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  // P \u2261 3 (mod 4) => \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) return sqrt3mod4;\n  // P \u2261 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf\n  if (P % _8n === _5n) return sqrt5mod8;\n  // P \u2261 9 (mod 16) => Kong algorithm, page 11 of https://eprint.iacr.org/2012/685.pdf (algorithm 4)\n  if (P % _16n === _9n) return sqrt9mod16(P);\n  // Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint): boolean =>\n  (mod(num, modulo) & _1n) === _1n;\n\n/** Field is not always over prime: for example, Fp2 has ORDER(q)=p^m. */\nexport interface IField<T> {\n  ORDER: bigint;\n  isLE: boolean;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  isValidNot0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  allowedLengths?: number[];\n  // legendre?(num: T): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array, skipValidation?: boolean): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>): IField<T> {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'number',\n    BITS: 'number',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  _validateObject(field, opts);\n  // const max = 16384;\n  // if (field.BYTES < 1 || field.BYTES > max) throw new Error('invalid field');\n  // if (field.BITS < 1 || field.BITS > 8 * max) throw new Error('invalid field');\n  return field;\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(Fp: IField<T>, num: T, power: bigint): T {\n  if (power < _0n) throw new Error('invalid exponent, negatives unsupported');\n  if (power === _0n) return Fp.ONE;\n  if (power === _1n) return num;\n  let p = Fp.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = Fp.mul(p, d);\n    d = Fp.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * Exception-free. Will return `undefined` for 0 elements.\n * @param passZero map 0 to 0 (instead of undefined)\n */\nexport function FpInvertBatch<T>(Fp: IField<T>, nums: T[], passZero = false): T[] {\n  const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined);\n  // Walk from first to last, multiply them by each other MOD p\n  const multipliedAcc = nums.reduce((acc, num, i) => {\n    if (Fp.is0(num)) return acc;\n    inverted[i] = acc;\n    return Fp.mul(acc, num);\n  }, Fp.ONE);\n  // Invert last element\n  const invertedAcc = Fp.inv(multipliedAcc);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (Fp.is0(num)) return acc;\n    inverted[i] = Fp.mul(acc, inverted[i]);\n    return Fp.mul(acc, num);\n  }, invertedAcc);\n  return inverted;\n}\n\n// TODO: remove\nexport function FpDiv<T>(Fp: IField<T>, lhs: T, rhs: T | bigint): T {\n  return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs));\n}\n\n/**\n * Legendre symbol.\n * Legendre constant is used to calculate Legendre symbol (a | p)\n * which denotes the value of a^((p-1)/2) (mod p).\n *\n * * (a | p) \u2261 1    if a is a square (mod p), quadratic residue\n * * (a | p) \u2261 -1   if a is not a square (mod p), quadratic non residue\n * * (a | p) \u2261 0    if a \u2261 0 (mod p)\n */\nexport function FpLegendre<T>(Fp: IField<T>, n: T): -1 | 0 | 1 {\n  // We can use 3rd argument as optional cache of this value\n  // but seems unneeded for now. The operation is very fast.\n  const p1mod2 = (Fp.ORDER - _1n) / _2n;\n  const powered = Fp.pow(n, p1mod2);\n  const yes = Fp.eql(powered, Fp.ONE);\n  const zero = Fp.eql(powered, Fp.ZERO);\n  const no = Fp.eql(powered, Fp.neg(Fp.ONE));\n  if (!yes && !zero && !no) throw new Error('invalid Legendre symbol result');\n  return yes ? 1 : zero ? 0 : -1;\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(Fp: IField<T>, n: T): boolean {\n  const l = FpLegendre(Fp, n);\n  return l === 1;\n}\n\nexport type NLength = { nByteLength: number; nBitLength: number };\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number): NLength {\n  // Bit size, byte size of CURVE.n\n  if (nBitLength !== undefined) anumber(nBitLength);\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\ntype SqrtFn = (n: bigint) => bigint;\ntype FieldOpts = Partial<{\n  sqrt: SqrtFn;\n  isLE: boolean;\n  BITS: number;\n  modFromBytes: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  allowedLengths?: readonly number[]; // for P521 (adds padding for smaller sizes)\n}>;\n/**\n * Creates a finite field. Major performance optimizations:\n * * 1. Denormalized operations like mulN instead of mul.\n * * 2. Identical object shape: never add or remove keys.\n * * 3. `Object.freeze`.\n * Fragile: always run a benchmark on a change.\n * Security note: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you're doing.\n *\n * Note about field properties:\n * * CHARACTERISTIC p = prime number, number of elements in main subgroup.\n * * ORDER q = similar to cofactor in curves, may be composite `q = p^m`.\n *\n * @param ORDER field order, probably prime, or could be composite\n * @param bitLen how many bits the field consumes\n * @param isLE (default: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLenOrOpts?: number | FieldOpts, // TODO: use opts only in v2?\n  isLE = false,\n  opts: { sqrt?: SqrtFn } = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n  let _nbitLength: number | undefined = undefined;\n  let _sqrt: SqrtFn | undefined = undefined;\n  let modFromBytes: boolean = false;\n  let allowedLengths: undefined | readonly number[] = undefined;\n  if (typeof bitLenOrOpts === 'object' && bitLenOrOpts != null) {\n    if (opts.sqrt || isLE) throw new Error('cannot specify opts in two arguments');\n    const _opts = bitLenOrOpts;\n    if (_opts.BITS) _nbitLength = _opts.BITS;\n    if (_opts.sqrt) _sqrt = _opts.sqrt;\n    if (typeof _opts.isLE === 'boolean') isLE = _opts.isLE;\n    if (typeof _opts.modFromBytes === 'boolean') modFromBytes = _opts.modFromBytes;\n    allowedLengths = _opts.allowedLengths;\n  } else {\n    if (typeof bitLenOrOpts === 'number') _nbitLength = bitLenOrOpts;\n    if (opts.sqrt) _sqrt = opts.sqrt;\n  }\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, _nbitLength);\n  if (BYTES > 2048) throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n  let sqrtP: ReturnType<typeof FpSqrt>; // cached sqrtP\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    isLE,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    allowedLengths: allowedLengths,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error('invalid field element: expected bigint, got ' + typeof num);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    // is valid and invertible\n    isValidNot0: (num: bigint) => !f.is0(num) && f.isValid(num),\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt:\n      _sqrt ||\n      ((n) => {\n        if (!sqrtP) sqrtP = FpSqrt(ORDER);\n        return sqrtP(f, n);\n      }),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes, skipValidation = true) => {\n      if (allowedLengths) {\n        if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) {\n          throw new Error(\n            'Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length\n          );\n        }\n        const padded = new Uint8Array(BYTES);\n        // isLE add 0 to right, !isLE to the left.\n        padded.set(bytes, isLE ? 0 : padded.length - bytes.length);\n        bytes = padded;\n      }\n      if (bytes.length !== BYTES)\n        throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n      let scalar = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n      if (modFromBytes) scalar = mod(scalar, ORDER);\n      if (!skipValidation)\n        if (!f.isValid(scalar)) throw new Error('invalid field element: outside of range 0..ORDER');\n      // NOTE: we don't validate scalar here, please use isValid. This done such way because some\n      // protocol may allow non-reduced scalar that reduced later or changed some other way.\n      return scalar;\n    },\n    // TODO: we don't need it here, move out to separate fn\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // We can't move this out because Fp6, Fp12 implement it\n    // and it's unclear what to return in there.\n    cmov: (a, b, c) => (c ? b : a),\n  } as FpField);\n  return Object.freeze(f);\n}\n\n// Generic random scalar, we can do same for other fields if via Fp2.mul(Fp2.ONE, Fp2.random)?\n// This allows unsafe methods like ignore bias or zero. These unsafe, but often used in different protocols (if deterministic RNG).\n// which mean we cannot force this via opts.\n// Not sure what to do with randomBytes, we can accept it inside opts if wanted.\n// Probably need to export getMinHashLength somewhere?\n// random(bytes?: Uint8Array, unsafeAllowZero = false, unsafeAllowBias = false) {\n//   const LEN = !unsafeAllowBias ? getMinHashLength(ORDER) : BYTES;\n//   if (bytes === undefined) bytes = randomBytes(LEN); // _opts.randomBytes?\n//   const num = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n//   // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n//   const reduced = unsafeAllowZero ? mod(num, ORDER) : mod(num, ORDER - _1n) + _1n;\n//   return reduced;\n// },\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T): T {\n  if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T): T {\n  if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use `mapKeyToField` instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(\n      'hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen\n    );\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n  const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { bitLen, bitMask, validateObject } from '../utils.ts';\nimport { Field, FpInvertBatch, nLength, validateField, type IField } from './modular.ts';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { Z?: never };\n\n// This was initialy do this way to re-use montgomery ladder in field (add->mul,double->sqr), but\n// that didn't happen and there is probably not much reason to have separate Group like this?\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n  toAffine?(invertedZ?: any): AffinePoint<any>;\n}\n\n// We can't \"abstract out\" coordinates (X, Y, Z; and T in Edwards): argument names of constructor\n// are not accessible. See Typescript gh-56093, gh-41594.\n//\n// We have to use recursive types, so it will return actual point, not constained `CurvePoint`.\n// If, at any point, P is `any`, it will erase all types and replace it\n// with `any`, because of recursion, `any implements CurvePoint`,\n// but we lose all constrains on methods.\n\n/** Base interface for all elliptic curve Points. */\nexport interface CurvePoint<F, P extends CurvePoint<F, P>> extends Group<P> {\n  /** Affine x coordinate. Different from projective / extended X coordinate. */\n  x: F;\n  /** Affine y coordinate. Different from projective / extended Y coordinate. */\n  y: F;\n  Z?: F;\n  double(): P;\n  negate(): P;\n  add(other: P): P;\n  subtract(other: P): P;\n  equals(other: P): boolean;\n  multiply(scalar: bigint): P;\n  assertValidity(): void;\n  clearCofactor(): P;\n  is0(): boolean;\n  isTorsionFree(): boolean;\n  isSmallOrder(): boolean;\n  multiplyUnsafe(scalar: bigint): P;\n  /**\n   * Massively speeds up `p.multiply(n)` by using precompute tables (caching). See {@link wNAF}.\n   * @param isLazy calculate cache now. Default (true) ensures it's deferred to first `multiply()`\n   */\n  precompute(windowSize?: number, isLazy?: boolean): P;\n  /** Converts point to 2D xy affine coordinates */\n  toAffine(invertedZ?: F): AffinePoint<F>;\n  toBytes(): Uint8Array;\n  toHex(): string;\n}\n\n/** Base interface for all elliptic curve Point constructors. */\nexport interface CurvePointCons<P extends CurvePoint<any, P>> {\n  [Symbol.hasInstance]: (item: unknown) => boolean;\n  BASE: P;\n  ZERO: P;\n  /** Field for basic curve math */\n  Fp: IField<P_F<P>>;\n  /** Scalar field, for scalars in multiply and others */\n  Fn: IField<bigint>;\n  /** Creates point from x, y. Does NOT validate if the point is valid. Use `.assertValidity()`. */\n  fromAffine(p: AffinePoint<P_F<P>>): P;\n  fromBytes(bytes: Uint8Array): P;\n  fromHex(hex: Uint8Array | string): P;\n}\n\n// Type inference helpers: PC - PointConstructor, P - Point, Fp - Field element\n// Short names, because we use them a lot in result types:\n// * we can't do 'P = GetCurvePoint<PC>': this is default value and doesn't constrain anything\n// * we can't do 'type X = GetCurvePoint<PC>': it won't be accesible for arguments/return types\n// * `CurvePointCons<P extends CurvePoint<any, P>>` constraints from interface definition\n//   won't propagate, if `PC extends CurvePointCons<any>`: the P would be 'any', which is incorrect\n// * PC could be super specific with super specific P, which implements CurvePoint<any, P>.\n//   this means we need to do stuff like\n//   `function test<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(`\n//   if we want type safety around P, otherwise PC_P<PC> will be any\n\n/** Returns Fp type from Point (P_F<P> == P.F) */\nexport type P_F<P extends CurvePoint<any, P>> = P extends CurvePoint<infer F, P> ? F : never;\n/** Returns Fp type from PointCons (PC_F<PC> == PC.P.F) */\nexport type PC_F<PC extends CurvePointCons<CurvePoint<any, any>>> = PC['Fp']['ZERO'];\n/** Returns Point type from PointCons (PC_P<PC> == PC.P) */\nexport type PC_P<PC extends CurvePointCons<CurvePoint<any, any>>> = PC['ZERO'];\n\n// Ugly hack to get proper type inference, because in typescript fails to infer resursively.\n// The hack allows to do up to 10 chained operations without applying type erasure.\n//\n// Types which won't work:\n// * `CurvePointCons<CurvePoint<any, any>>`, will return `any` after 1 operation\n// * `CurvePointCons<any>: WeierstrassPointCons<bigint> extends CurvePointCons<any> = false`\n// * `P extends CurvePoint, PC extends CurvePointCons<P>`\n//     * It can't infer P from PC alone\n//     * Too many relations between F, P & PC\n//     * It will infer P/F if `arg: CurvePointCons<F, P>`, but will fail if PC is generic\n//     * It will work correctly if there is an additional argument of type P\n//     * But generally, we don't want to parametrize `CurvePointCons` over `F`: it will complicate\n//       types, making them un-inferable\n// prettier-ignore\nexport type PC_ANY = CurvePointCons<\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any, any>\n  >>>>>>>>>\n>;\n\nexport interface CurveLengths {\n  secretKey?: number;\n  publicKey?: number;\n  publicKeyUncompressed?: number;\n  publicKeyHasPrefix?: boolean;\n  signature?: number;\n  seed?: number;\n}\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\n/** @deprecated */\nexport type ExtendedGroupConstructor<T> = GroupConstructor<T> & {\n  Fp: IField<any>;\n  Fn: IField<bigint>;\n  fromAffine(ap: AffinePoint<any>): T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\nexport function negateCt<T extends { negate: () => T }>(condition: boolean, item: T): T {\n  const neg = item.negate();\n  return condition ? neg : item;\n}\n\n/**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n */\nexport function normalizeZ<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  c: PC,\n  points: P[]\n): P[] {\n  const invertedZs = FpInvertBatch(\n    c.Fp,\n    points.map((p) => p.Z!)\n  );\n  return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i])));\n}\n\nfunction validateW(W: number, bits: number) {\n  if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n    throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\n\n/** Internal wNAF opts for specific W and scalarBits */\nexport type WOpts = {\n  windows: number;\n  windowSize: number;\n  mask: bigint;\n  maxNumber: number;\n  shiftBy: bigint;\n};\n\nfunction calcWOpts(W: number, scalarBits: number): WOpts {\n  validateW(W, scalarBits);\n  const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero\n  const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero\n  const maxNumber = 2 ** W; // W=8 256\n  const mask = bitMask(W); // W=8 255 == mask 0b11111111\n  const shiftBy = BigInt(W); // W=8 8\n  return { windows, windowSize, mask, maxNumber, shiftBy };\n}\n\nfunction calcOffsets(n: bigint, window: number, wOpts: WOpts) {\n  const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n  let wbits = Number(n & mask); // extract W bits.\n  let nextN = n >> shiftBy; // shift number by W bits.\n\n  // What actually happens here:\n  // const highestBit = Number(mask ^ (mask >> 1n));\n  // let wbits2 = wbits - 1; // skip zero\n  // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~);\n\n  // split if bits > max: +224 => 256-32\n  if (wbits > windowSize) {\n    // we skip zero, which means instead of `>= size-1`, we do `> size`\n    wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here.\n    nextN += _1n; // +256 (carry)\n  }\n  const offsetStart = window * windowSize;\n  const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero\n  const isZero = wbits === 0; // is current window slice a 0?\n  const isNeg = wbits < 0; // is current window slice negative?\n  const isNegF = window % 2 !== 0; // fake random statement for noise\n  const offsetF = offsetStart; // fake offset for noise\n  return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\n\nfunction validateMSMPoints(points: any[], c: any) {\n  if (!Array.isArray(points)) throw new Error('array expected');\n  points.forEach((p, i) => {\n    if (!(p instanceof c)) throw new Error('invalid point at index ' + i);\n  });\n}\nfunction validateMSMScalars(scalars: any[], field: any) {\n  if (!Array.isArray(scalars)) throw new Error('array of scalars expected');\n  scalars.forEach((s, i) => {\n    if (!field.isValid(s)) throw new Error('invalid scalar at index ' + i);\n  });\n}\n\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes.\n// Allows to make points frozen / immutable.\nconst pointPrecomputes = new WeakMap<any, any[]>();\nconst pointWindowSizes = new WeakMap<any, number>();\n\nfunction getW(P: any): number {\n  // To disable precomputes:\n  // return 1;\n  return pointWindowSizes.get(P) || 1;\n}\n\nfunction assert0(n: bigint): void {\n  if (n !== _0n) throw new Error('invalid wNAF');\n}\n\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Table generation takes **30MB of ram and 10ms on high-end CPU**,\n * but may take much longer on slow devices. Actual generation will happen on\n * first call of `multiply()`. By default, `BASE` point is precomputed.\n *\n * Scalars should always be less than curve order: this should be checked inside of a curve itself.\n * Creates precomputation tables for fast multiplication:\n * - private scalar is split by fixed size windows of W bits\n * - every window point is collected from window's table & added to accumulator\n * - since windows are different, same point inside tables won't be accessed more than once per calc\n * - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n * - +1 window is neccessary for wNAF\n * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n *\n * @todo Research returning 2d JS array of windows, instead of a single window.\n * This would allow windows to be in different memory locations\n */\nexport class wNAF<PC extends PC_ANY> {\n  private readonly BASE: PC_P<PC>;\n  private readonly ZERO: PC_P<PC>;\n  private readonly Fn: PC['Fn'];\n  readonly bits: number;\n\n  // Parametrized with a given Point class (not individual point)\n  constructor(Point: PC, bits: number) {\n    this.BASE = Point.BASE;\n    this.ZERO = Point.ZERO;\n    this.Fn = Point.Fn;\n    this.bits = bits;\n  }\n\n  // non-const time multiplication ladder\n  _unsafeLadder(elm: PC_P<PC>, n: bigint, p: PC_P<PC> = this.ZERO): PC_P<PC> {\n    let d: PC_P<PC> = elm;\n    while (n > _0n) {\n      if (n & _1n) p = p.add(d);\n      d = d.double();\n      n >>= _1n;\n    }\n    return p;\n  }\n\n  /**\n   * Creates a wNAF precomputation window. Used for caching.\n   * Default window size is set by `utils.precompute()` and is equal to 8.\n   * Number of precomputed points depends on the curve size:\n   * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n   * - \uD835\uDC4A is the window size\n   * - \uD835\uDC5B is the bitlength of the curve order.\n   * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n   * @param point Point instance\n   * @param W window size\n   * @returns precomputed point tables flattened to a single array\n   */\n  private precomputeWindow(point: PC_P<PC>, W: number): PC_P<PC>[] {\n    const { windows, windowSize } = calcWOpts(W, this.bits);\n    const points: PC_P<PC>[] = [];\n    let p: PC_P<PC> = point;\n    let base = p;\n    for (let window = 0; window < windows; window++) {\n      base = p;\n      points.push(base);\n      // i=1, bc we skip 0\n      for (let i = 1; i < windowSize; i++) {\n        base = base.add(p);\n        points.push(base);\n      }\n      p = base.double();\n    }\n    return points;\n  }\n\n  /**\n   * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n   * More compact implementation:\n   * https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n   * @returns real and fake (for const-time) points\n   */\n  private wNAF(W: number, precomputes: PC_P<PC>[], n: bigint): { p: PC_P<PC>; f: PC_P<PC> } {\n    // Scalar should be smaller than field order\n    if (!this.Fn.isValid(n)) throw new Error('invalid scalar');\n    // Accumulators\n    let p = this.ZERO;\n    let f = this.BASE;\n    // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n    // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n    // there is negate now: it is possible that negated element from low value\n    // would be the same as high element, which will create carry into next window.\n    // It's not obvious how this can fail, but still worth investigating later.\n    const wo = calcWOpts(W, this.bits);\n    for (let window = 0; window < wo.windows; window++) {\n      // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise\n      const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo);\n      n = nextN;\n      if (isZero) {\n        // bits are 0: add garbage to fake point\n        // Important part for const-time getPublicKey: add random \"noise\" point to f.\n        f = f.add(negateCt(isNegF, precomputes[offsetF]));\n      } else {\n        // bits are 1: add to result point\n        p = p.add(negateCt(isNeg, precomputes[offset]));\n      }\n    }\n    assert0(n);\n    // Return both real and fake points: JIT won't eliminate f.\n    // At this point there is a way to F be infinity-point even if p is not,\n    // which makes it less const-time: around 1 bigint multiply.\n    return { p, f };\n  }\n\n  /**\n   * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n   * @param acc accumulator point to add result of multiplication\n   * @returns point\n   */\n  private wNAFUnsafe(\n    W: number,\n    precomputes: PC_P<PC>[],\n    n: bigint,\n    acc: PC_P<PC> = this.ZERO\n  ): PC_P<PC> {\n    const wo = calcWOpts(W, this.bits);\n    for (let window = 0; window < wo.windows; window++) {\n      if (n === _0n) break; // Early-exit, skip 0 value\n      const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo);\n      n = nextN;\n      if (isZero) {\n        // Window bits are 0: skip processing.\n        // Move to next window.\n        continue;\n      } else {\n        const item = precomputes[offset];\n        acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM\n      }\n    }\n    assert0(n);\n    return acc;\n  }\n\n  private getPrecomputes(W: number, point: PC_P<PC>, transform?: Mapper<PC_P<PC>>): PC_P<PC>[] {\n    // Calculate precomputes on a first run, reuse them after\n    let comp = pointPrecomputes.get(point);\n    if (!comp) {\n      comp = this.precomputeWindow(point, W) as PC_P<PC>[];\n      if (W !== 1) {\n        // Doing transform outside of if brings 15% perf hit\n        if (typeof transform === 'function') comp = transform(comp);\n        pointPrecomputes.set(point, comp);\n      }\n    }\n    return comp;\n  }\n\n  cached(\n    point: PC_P<PC>,\n    scalar: bigint,\n    transform?: Mapper<PC_P<PC>>\n  ): { p: PC_P<PC>; f: PC_P<PC> } {\n    const W = getW(point);\n    return this.wNAF(W, this.getPrecomputes(W, point, transform), scalar);\n  }\n\n  unsafe(point: PC_P<PC>, scalar: bigint, transform?: Mapper<PC_P<PC>>, prev?: PC_P<PC>): PC_P<PC> {\n    const W = getW(point);\n    if (W === 1) return this._unsafeLadder(point, scalar, prev); // For W=1 ladder is ~x2 faster\n    return this.wNAFUnsafe(W, this.getPrecomputes(W, point, transform), scalar, prev);\n  }\n\n  // We calculate precomputes for elliptic curve point multiplication\n  // using windowed method. This specifies window size and\n  // stores precomputed values. Usually only base point would be precomputed.\n  createCache(P: PC_P<PC>, W: number): void {\n    validateW(W, this.bits);\n    pointWindowSizes.set(P, W);\n    pointPrecomputes.delete(P);\n  }\n\n  hasCache(elm: PC_P<PC>): boolean {\n    return getW(elm) !== 1;\n  }\n}\n\n/**\n * Endomorphism-specific multiplication for Koblitz curves.\n * Cost: 128 dbl, 0-256 adds.\n */\nexport function mulEndoUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  Point: PC,\n  point: P,\n  k1: bigint,\n  k2: bigint\n): { p1: P; p2: P } {\n  let acc = point;\n  let p1 = Point.ZERO;\n  let p2 = Point.ZERO;\n  while (k1 > _0n || k2 > _0n) {\n    if (k1 & _1n) p1 = p1.add(acc);\n    if (k2 & _1n) p2 = p2.add(acc);\n    acc = acc.double();\n    k1 >>= _1n;\n    k2 >>= _1n;\n  }\n  return { p1, p2 };\n}\n\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster than precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka secret keys / bigints)\n */\nexport function pippenger<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  c: PC,\n  fieldN: IField<bigint>,\n  points: P[],\n  scalars: bigint[]\n): P {\n  // If we split scalars by some window (let's say 8 bits), every chunk will only\n  // take 256 buckets even if there are 4096 scalars, also re-uses double.\n  // TODO:\n  // - https://eprint.iacr.org/2024/750.pdf\n  // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n  // 0 is accepted in scalars\n  validateMSMPoints(points, c);\n  validateMSMScalars(scalars, fieldN);\n  const plength = points.length;\n  const slength = scalars.length;\n  if (plength !== slength) throw new Error('arrays of points and scalars must have equal length');\n  // if (plength === 0) throw new Error('array must be of length >= 2');\n  const zero = c.ZERO;\n  const wbits = bitLen(BigInt(plength));\n  let windowSize = 1; // bits\n  if (wbits > 12) windowSize = wbits - 3;\n  else if (wbits > 4) windowSize = wbits - 2;\n  else if (wbits > 0) windowSize = 2;\n  const MASK = bitMask(windowSize);\n  const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array\n  const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n  let sum = zero;\n  for (let i = lastBits; i >= 0; i -= windowSize) {\n    buckets.fill(zero);\n    for (let j = 0; j < slength; j++) {\n      const scalar = scalars[j];\n      const wbits = Number((scalar >> BigInt(i)) & MASK);\n      buckets[wbits] = buckets[wbits].add(points[j]);\n    }\n    let resI = zero; // not using this will do small speed-up, but will lose ct\n    // Skip first bucket, because it is zero\n    for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n      sumI = sumI.add(buckets[j]);\n      resI = resI.add(sumI);\n    }\n    sum = sum.add(resI);\n    if (i !== 0) for (let j = 0; j < windowSize; j++) sum = sum.double();\n  }\n  return sum as P;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nexport function precomputeMSMUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  c: PC,\n  fieldN: IField<bigint>,\n  points: P[],\n  windowSize: number\n): (scalars: bigint[]) => P {\n  /**\n   * Performance Analysis of Window-based Precomputation\n   *\n   * Base Case (256-bit scalar, 8-bit window):\n   * - Standard precomputation requires:\n   *   - 31 additions per scalar \u00D7 256 scalars = 7,936 ops\n   *   - Plus 255 summary additions = 8,191 total ops\n   *   Note: Summary additions can be optimized via accumulator\n   *\n   * Chunked Precomputation Analysis:\n   * - Using 32 chunks requires:\n   *   - 255 additions per chunk\n   *   - 256 doublings\n   *   - Total: (255 \u00D7 32) + 256 = 8,416 ops\n   *\n   * Memory Usage Comparison:\n   * Window Size | Standard Points | Chunked Points\n   * ------------|-----------------|---------------\n   *     4-bit   |     520         |      15\n   *     8-bit   |    4,224        |     255\n   *    10-bit   |   13,824        |   1,023\n   *    16-bit   |  557,056        |  65,535\n   *\n   * Key Advantages:\n   * 1. Enables larger window sizes due to reduced memory overhead\n   * 2. More efficient for smaller scalar counts:\n   *    - 16 chunks: (16 \u00D7 255) + 256 = 4,336 ops\n   *    - ~2x faster than standard 8,191 ops\n   *\n   * Limitations:\n   * - Not suitable for plain precomputes (requires 256 constant doublings)\n   * - Performance degrades with larger scalar counts:\n   *   - Optimal for ~256 scalars\n   *   - Less efficient for 4096+ scalars (Pippenger preferred)\n   */\n  validateW(windowSize, fieldN.BITS);\n  validateMSMPoints(points, c);\n  const zero = c.ZERO;\n  const tableSize = 2 ** windowSize - 1; // table size (without zero)\n  const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n  const MASK = bitMask(windowSize);\n  const tables = points.map((p: P) => {\n    const res = [];\n    for (let i = 0, acc = p; i < tableSize; i++) {\n      res.push(acc);\n      acc = acc.add(p);\n    }\n    return res;\n  });\n  return (scalars: bigint[]): P => {\n    validateMSMScalars(scalars, fieldN);\n    if (scalars.length > points.length)\n      throw new Error('array of scalars must be smaller than array of points');\n    let res = zero;\n    for (let i = 0; i < chunks; i++) {\n      // No need to double if accumulator is still zero.\n      if (res !== zero) for (let j = 0; j < windowSize; j++) res = res.double();\n      const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n      for (let j = 0; j < scalars.length; j++) {\n        const n = scalars[j];\n        const curr = Number((n >> shiftBy) & MASK);\n        if (!curr) continue; // skip zero scalars chunks\n        res = res.add(tables[j][curr - 1]);\n      }\n    }\n    return res;\n  };\n}\n\n// TODO: remove\n/**\n * Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n * Though generator can be different (Fp2 / Fp6 for BLS).\n */\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\n// TODO: remove\n/** @deprecated */\nexport function validateBasic<FP, T>(\n  curve: BasicCurve<FP> & T\n): Readonly<\n  {\n    readonly nBitLength: number;\n    readonly nByteLength: number;\n  } & BasicCurve<FP> &\n    T & {\n      p: bigint;\n    }\n> {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n\nexport type ValidCurveParams<T> = {\n  p: bigint;\n  n: bigint;\n  h: bigint;\n  a: T;\n  b?: T;\n  d?: T;\n  Gx: T;\n  Gy: T;\n};\n\nfunction createField<T>(order: bigint, field?: IField<T>, isLE?: boolean): IField<T> {\n  if (field) {\n    if (field.ORDER !== order) throw new Error('Field.ORDER must match order: Fp == p, Fn == n');\n    validateField(field);\n    return field;\n  } else {\n    return Field(order, { isLE }) as unknown as IField<T>;\n  }\n}\nexport type FpFn<T> = { Fp: IField<T>; Fn: IField<bigint> };\n\n/** Validates CURVE opts and creates fields */\nexport function _createCurveFields<T>(\n  type: 'weierstrass' | 'edwards',\n  CURVE: ValidCurveParams<T>,\n  curveOpts: Partial<FpFn<T>> = {},\n  FpFnLE?: boolean\n): FpFn<T> & { CURVE: ValidCurveParams<T> } {\n  if (FpFnLE === undefined) FpFnLE = type === 'edwards';\n  if (!CURVE || typeof CURVE !== 'object') throw new Error(`expected valid ${type} CURVE object`);\n  for (const p of ['p', 'n', 'h'] as const) {\n    const val = CURVE[p];\n    if (!(typeof val === 'bigint' && val > _0n))\n      throw new Error(`CURVE.${p} must be positive bigint`);\n  }\n  const Fp = createField(CURVE.p, curveOpts.Fp, FpFnLE);\n  const Fn = createField(CURVE.n, curveOpts.Fn, FpFnLE);\n  const _b: 'b' | 'd' = type === 'weierstrass' ? 'b' : 'd';\n  const params = ['Gx', 'Gy', 'a', _b] as const;\n  for (const p of params) {\n    // @ts-ignore\n    if (!Fp.isValid(CURVE[p]))\n      throw new Error(`CURVE.${p} must be valid field element of CURVE.Fp`);\n  }\n  CURVE = Object.freeze(Object.assign({}, CURVE));\n  return { CURVE, Fp, Fn };\n}\n", "/**\n * Utilities for short weierstrass curves, combined with noble-hashes.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { type CurveFn, type CurveType, weierstrass } from './abstract/weierstrass.ts';\nimport type { CHash } from './utils.ts';\n\n/** connects noble-curves to noble-hashes */\nexport function getHash(hash: CHash): { hash: CHash } {\n  return { hash };\n}\n/** Same API as @noble/hashes, with ability to create curve with custom hash */\nexport type CurveDef = Readonly<Omit<CurveType, 'hash'>>;\nexport type CurveFnWithCreate = CurveFn & { create: (hash: CHash) => CurveFn };\n\n/** @deprecated use new `weierstrass()` and `ecdsa()` methods */\nexport function createCurve(curveDef: CurveDef, defHash: CHash): CurveFnWithCreate {\n  const create = (hash: CHash): CurveFn => weierstrass({ ...curveDef, hash: hash });\n  return { ...create(defHash), create };\n}\n", "import { Entry } from '@napi-rs/keyring';\nimport { execSync } from 'node:child_process';\nimport { condenseFailureBody } from './http-failure.js';\nimport { type Session, buildApiKeyHeaders } from './session.js';\nimport type { NodeApi } from './types.js';\nimport { initEcdsaSchnorrWasm } from './wasm-loader.js';\n\nconst KEYRING_SERVICE = 'keyban-agent-wallet';\n\n/**\n * Backend failures come back as problem-details JSON, whose `title` carries\n * the reason (and, for a schema rejection, the offending field path). Surface\n * that rather than the envelope, so the agent reports `must be an https:// URL`\n * instead of a JSON blob the reader has to decode.\n */\nasync function describeFailure(response: Response): Promise<string> {\n  const body = await response.text();\n  try {\n    const { title } = JSON.parse(body) as { title?: unknown };\n    if (typeof title === 'string' && title.trim() !== '') return title;\n  } catch {\n    // Not JSON \u2014 the raw body is the best we have.\n  }\n  return condenseFailureBody(body);\n}\n\nconst SECRET_SERVICE_MISSING_MSG =\n  'No Secret Service provider (org.freedesktop.secrets) is running.\\n' +\n  'On Linux, @napi-rs/keyring silently falls back to the kernel keyring (keyutils),\\n' +\n  'which is designed for transient kernel credentials, not long-lived user secrets.\\n' +\n  'The client share could expire or be lost \u2014 refusing to initialize.\\n\\n' +\n  'Fix: start a Secret Service provider before using this tool, e.g.:\\n' +\n  '  gnome-keyring-daemon --start --components=secrets\\n' +\n  'Or install and enable gnome-keyring / KDE Wallet in your session.';\n\n/**\n * On Linux, verify that the freedesktop Secret Service API is reachable on\n * the session D-Bus.  Without it, {@link @napi-rs/keyring} falls back to the\n * Linux kernel keyring (keyutils), which is unsuitable for long-lived secret\n * storage: keys may expire, are not encrypted at rest, and cannot be managed\n * through user-facing tools like Seahorse.\n */\nfunction assertSecretServiceAvailable(): void {\n  if (process.platform !== 'linux') return;\n\n  // Try dbus-send first, fall back to busctl\n  const commands = [\n    'dbus-send --session --dest=org.freedesktop.secrets --print-reply /org/freedesktop/secrets org.freedesktop.DBus.Peer.Ping',\n    'busctl --user call org.freedesktop.secrets /org/freedesktop/secrets org.freedesktop.DBus.Peer Ping',\n  ];\n\n  for (const cmd of commands) {\n    try {\n      execSync(cmd, { timeout: 5000, stdio: 'pipe' });\n      return; // Secret Service responded \u2014 we're good\n    } catch {\n      // command not found or service not available \u2014 try next\n    }\n  }\n\n  throw new Error(SECRET_SERVICE_MISSING_MSG);\n}\n\n/**\n * Check whether a probe key ended up in the Linux kernel keyring (keyutils)\n * rather than the Secret Service.  The underlying rust `keyring` crate stores\n * keys as: `keyring-rs:{account}@{service}`.\n */\nfunction isInKernelKeyring(probeKey: string): boolean {\n  if (process.platform !== 'linux') return false;\n  const needle = `keyring-rs:${probeKey}@${KEYRING_SERVICE}`;\n  try {\n    execSync(`keyctl search @s user ${JSON.stringify(needle)}`, {\n      timeout: 5000,\n      stdio: 'pipe',\n    });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Verify that the OS keyring backend can actually persist secrets and that\n * a proper user-centric secret store is being used.\n *\n * Call this before any DKG so we never silently lose a client share.\n */\nexport function assertKeyringFunctional(): void {\n  assertSecretServiceAvailable();\n\n  const probeKey = '__keyring-health-check';\n  const probeValue = `probe-${Date.now()}`;\n  const entry = new Entry(KEYRING_SERVICE, probeKey);\n\n  try {\n    entry.setPassword(probeValue);\n  } catch (err) {\n    throw new Error(\n      'Keyring backend is not functional: failed to write a test secret.\\n' +\n      'The client share cannot be safely persisted \u2014 refusing to initialize to avoid losing key material.',\n      { cause: err },\n    );\n  }\n\n  let readBack: string | null;\n  try {\n    readBack = entry.getPassword();\n  } catch (err) {\n    throw new Error(\n      'Keyring backend is not functional: wrote a test secret but could not read it back.\\n' +\n      'The client share cannot be safely persisted \u2014 refusing to initialize to avoid losing key material.',\n      { cause: err },\n    );\n  }\n\n  // Detect silent fallback to kernel keyring (keyutils)\n  if (isInKernelKeyring(probeKey)) {\n    try {\n      entry.deletePassword();\n    } catch {\n      // best-effort\n    }\n    throw new Error(\n      '@napi-rs/keyring is using the Linux kernel keyring (keyutils) instead of the Secret Service.\\n' +\n      'The kernel keyring is unsuitable for long-lived secrets: keys may expire, are not encrypted\\n' +\n      'at rest, and are not visible in tools like Seahorse.\\n\\n' +\n      SECRET_SERVICE_MISSING_MSG,\n    );\n  }\n\n  // Clean up probe entry\n  try {\n    entry.deletePassword();\n  } catch {\n    // best-effort cleanup\n  }\n\n  if (readBack !== probeValue) {\n    throw new Error(\n      `Keyring backend is not functional: wrote \"${probeValue}\" but read back \"${readBack}\".\\n` +\n      'The client share cannot be safely persisted \u2014 refusing to initialize to avoid losing key material.',\n    );\n  }\n}\n\n/**\n * Windows Credential Manager limits credential blobs to ~2560 bytes.\n * Since @napi-rs/keyring encodes passwords as UTF-16 (2 bytes per char),\n * the effective character limit is ~1280. We use 1200 for safety margin.\n * Client shares from ECDSA DKG can exceed this, so we chunk them across\n * multiple keyring entries.\n */\nconst CHUNK_SIZE = 1200;\n\nfunction chunkedSet(key: string, value: string): void {\n  const totalChunks = Math.ceil(value.length / CHUNK_SIZE);\n  // Store chunk count in a metadata entry\n  new Entry(KEYRING_SERVICE, `${key}#chunks`).setPassword(String(totalChunks));\n  for (let i = 0; i < totalChunks; i++) {\n    const chunkKey = totalChunks === 1 ? key : `${key}#${i}`;\n    new Entry(KEYRING_SERVICE, chunkKey).setPassword(\n      value.slice(i * CHUNK_SIZE, (i + 1) * CHUNK_SIZE),\n    );\n  }\n}\n\nfunction chunkedGet(key: string): string {\n  let totalChunks = 1;\n  try {\n    const raw = new Entry(KEYRING_SERVICE, `${key}#chunks`).getPassword();\n    if (raw == null) throw new Error('no chunks metadata');\n    totalChunks = Number(raw);\n    if (!Number.isFinite(totalChunks) || totalChunks < 1) throw new Error('invalid chunks metadata');\n  } catch {\n    // No chunk metadata \u2014 try reading as a single entry (legacy / short value)\n  }\n  if (totalChunks === 1) {\n    const val = new Entry(KEYRING_SERVICE, key).getPassword();\n    if (val == null) throw new Error(`keyring entry not found: ${key}`);\n    return val;\n  }\n  const parts: string[] = [];\n  for (let i = 0; i < totalChunks; i++) {\n    const part = new Entry(KEYRING_SERVICE, `${key}#${i}`).getPassword();\n    if (part == null) throw new Error(`keyring chunk not found: ${key}#${i}`);\n    parts.push(part);\n  }\n  return parts.join('');\n}\n\n/**\n * The WASM client rejects with a raw `JsValue` (the parsed response body or a\n * synthetic `WasmError`) instead of a proper `Error`. Wrap a WASM call so its\n * rejection becomes a real `Error` whose `.message` is the most informative\n * field we can find \u2014 otherwise the x402 library (and other consumers that\n * read `err.message`) just see `Unknown error`.\n */\n// The WASM client parses the backend's reply as JSON. When the backend is\n// down, a proxy answers with an HTML error page instead, and the resulting\n// parse error (\"Unexpected token '<'\") describes the symptom rather than the\n// cause. Say what actually happened.\nfunction describeWasmFailure(message: string): string {\n  return /Unexpected token '<'|not valid JSON/.test(message)\n    ? 'the Keyban backend returned a non-JSON response, so it is probably ' +\n        'unavailable (an HTML error page came back instead). Retry once it is up.'\n    : message;\n}\n\nasync function wrapWasmCall<T>(promise: Promise<T>): Promise<T> {\n  try {\n    return await promise;\n  } catch (err) {\n    if (err instanceof Error) throw new Error(describeWasmFailure(err.message));\n    if (typeof err === 'string') throw new Error(describeWasmFailure(err));\n    if (err && typeof err === 'object') {\n      const obj = err as Record<string, unknown>;\n      const msg = obj.message ?? obj.detail ?? obj.title ?? obj.error;\n      if (typeof msg === 'string') throw new Error(describeWasmFailure(msg));\n      throw new Error(JSON.stringify(err));\n    }\n    throw new Error(String(err));\n  }\n}\n\n/**\n * Creates a NodeApi implementation for Node.js using WASM for\n * ECDSA-Schnorr (FROST) and OS keyring for client share persistence.\n *\n * The session is captured by reference so that auth changes (token, network)\n * are automatically picked up by subsequent calls.\n */\nexport function createNodeApi(session: Session): NodeApi {\n  return {\n    ecdsaSchnorr: {\n      async dkg() {\n        const wasm = await initEcdsaSchnorrWasm();\n        const result = await wrapWasmCall(\n          wasm.dkg(\n            session.baseURL,\n            `apikey:${session.apiKey}`,\n            session.appId,\n            session.network,\n          ),\n        );\n        return JSON.stringify(result);\n      },\n      async sign(dkgBlob: string, message: string) {\n        const wasm = await initEcdsaSchnorrWasm();\n        const parsed = JSON.parse(dkgBlob);\n        return wrapWasmCall(\n          wasm.sign(\n            session.baseURL,\n            `apikey:${session.apiKey}`,\n            session.appId,\n            session.network,\n            parsed.secret_share,\n            message,\n          ),\n        );\n      },\n      async publicKey(dkgBlob: string) {\n        const wasm = await initEcdsaSchnorrWasm();\n        const parsed = JSON.parse(dkgBlob);\n        return wrapWasmCall(wasm.public_key(parsed.secret_share));\n      },\n      async relay(\n        accountAddress: string,\n        target: string,\n        value: string,\n        data: string,\n        signature: string,\n      ) {\n        const response = await fetch(\n          `${session.baseURL}/v1/signers/ecdsa-schnorr/relay`,\n          {\n            method: 'POST',\n            headers: {\n              'Content-Type': 'application/json',\n              ...buildApiKeyHeaders(session),\n              'X-Keyban-Sdk-Network': session.network,\n            },\n            body: JSON.stringify({\n              accountAddress,\n              target,\n              value,\n              data,\n              signature,\n            }),\n          },\n        );\n        if (!response.ok) {\n          throw new Error(\n            `Relay failed (${response.status}): ${await describeFailure(response)}`,\n          );\n        }\n        const result = (await response.json()) as { txHash: string };\n        return result.txHash;\n      },\n      async evaluateIntent(input) {\n        const response = await fetch(\n          `${session.baseURL}/v1/policy/evaluate-intent`,\n          {\n            method: 'POST',\n            headers: {\n              'Content-Type': 'application/json',\n              ...buildApiKeyHeaders(session),\n              'X-Keyban-Sdk-Network': session.network,\n            },\n            body: JSON.stringify(input),\n          },\n        );\n        if (!response.ok) {\n          throw new Error(\n            `evaluate-intent failed (${response.status}): ${await describeFailure(response)}`,\n          );\n        }\n        return response.json();\n      },\n    },\n\n    dkgStorage: {\n      async get(key: string) {\n        return chunkedGet(key);\n      },\n      async set(key: string, value: string) {\n        chunkedSet(key, value);\n      },\n    },\n\n  };\n}\n", "/**\n * Condense an error response body for display.\n *\n * When a proxy handles a request itself instead of passing it to the API, it\n * answers with an HTML page. Quoting the page drowns the status line, but\n * replacing it with a guess (\"the backend is unreachable\") is worse: the same\n * shape covers a 502 from a dead upstream, a 504 from a slow one, a 404 from a\n * misconfigured base URL and a 401 from an auth proxy. So keep the page's\n * title \u2014 the one line proxies put the actual reason in \u2014 and say only what is\n * certain: the answer did not come from the API.\n */\nexport function condenseFailureBody(body: string): string {\n  if (!/^\\s*</.test(body)) return body;\n  const title = /<title[^>]*>([^<]*)<\\/title>/i.exec(body)?.[1]?.trim();\n  const source = 'the Keyban API did not answer; a proxy replied instead';\n  return title ? `${source}: ${title}` : source;\n}\n", "import { readFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport type WasmExports = {\n  dkg: (\n    apiUrl: string,\n    authToken: string,\n    appId: string,\n    network: string,\n  ) => Promise<{ client_pubkey: string; server_pubkey: string; secret_share: unknown }>;\n  sign: (\n    apiUrl: string,\n    authToken: string,\n    appId: string,\n    network: string,\n    secretShare: unknown,\n    message: string,\n  ) => Promise<string>;\n  public_key: (secretShare: unknown) => Promise<string>;\n};\n\nlet wasmPromise: Promise<WasmExports> | null = null;\n\n/**\n * Initialize the ecdsa-schnorr WASM module for Node.js.\n * Loads the .wasm binary from disk and initializes the wasm-bindgen runtime.\n */\nexport function initEcdsaSchnorrWasm(): Promise<WasmExports> {\n  if (wasmPromise) return wasmPromise;\n\n  wasmPromise = (async () => {\n    const wasmModule = await import('../wasm/ecdsa_schnorr_wasm_client.js');\n    const initWasm = wasmModule.default;\n\n    const __dirname = dirname(fileURLToPath(import.meta.url));\n    const wasmPath = join(\n      __dirname,\n      'wasm',\n      'ecdsa_schnorr_wasm_client_bg.wasm',\n    );\n\n    const wasmBytes = await readFile(wasmPath);\n    await initWasm(wasmBytes);\n\n    return {\n      dkg: wasmModule.dkg,\n      sign: wasmModule.sign,\n      public_key: wasmModule.public_key,\n    };\n  })();\n\n  return wasmPromise;\n}\n", "// AUTO-GENERATED by tools/generate-evm-abis.mjs \u2014 DO NOT EDIT.\n// Source of truth: blockchain/evm/contracts (forge artifacts).\n// Regenerate: earthly +generate-evm-abis\nimport type { Abi } from \"viem\";\n\nexport const schnorrAccountAbi = [\n  {\n    \"type\": \"constructor\",\n    \"inputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"receive\",\n    \"stateMutability\": \"payable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"CONTRACT_ID\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bytes32\",\n        \"internalType\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"CONTRACT_VERSION\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint64\",\n        \"internalType\": \"uint64\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"OPERATOR_ROLE\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint64\",\n        \"internalType\": \"uint64\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"RELAY_HUB_ROLE\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint64\",\n        \"internalType\": \"uint64\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"UPGRADE_INTERFACE_VERSION\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"string\",\n        \"internalType\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"addPendingCommitmentSigner\",\n    \"inputs\": [\n      {\n        \"name\": \"commitmentSigner\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"addSigners\",\n    \"inputs\": [\n      {\n        \"name\": \"signers\",\n        \"type\": \"bytes[]\",\n        \"internalType\": \"bytes[]\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"authority\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"eip712Domain\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"fields\",\n        \"type\": \"bytes1\",\n        \"internalType\": \"bytes1\"\n      },\n      {\n        \"name\": \"name\",\n        \"type\": \"string\",\n        \"internalType\": \"string\"\n      },\n      {\n        \"name\": \"version\",\n        \"type\": \"string\",\n        \"internalType\": \"string\"\n      },\n      {\n        \"name\": \"chainId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"verifyingContract\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"salt\",\n        \"type\": \"bytes32\",\n        \"internalType\": \"bytes32\"\n      },\n      {\n        \"name\": \"extensions\",\n        \"type\": \"uint256[]\",\n        \"internalType\": \"uint256[]\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"entryPoint\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"contract IEntryPoint\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"execute\",\n    \"inputs\": [\n      {\n        \"name\": \"mode\",\n        \"type\": \"bytes32\",\n        \"internalType\": \"bytes32\"\n      },\n      {\n        \"name\": \"executionData\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"payable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"executeRelayed\",\n    \"inputs\": [\n      {\n        \"name\": \"dest\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"value\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"data\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      },\n      {\n        \"name\": \"signature\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getNonce\",\n    \"inputs\": [\n      {\n        \"name\": \"key\",\n        \"type\": \"uint192\",\n        \"internalType\": \"uint192\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getNonce\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getSignerCount\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getSigners\",\n    \"inputs\": [\n      {\n        \"name\": \"start\",\n        \"type\": \"uint64\",\n        \"internalType\": \"uint64\"\n      },\n      {\n        \"name\": \"end\",\n        \"type\": \"uint64\",\n        \"internalType\": \"uint64\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bytes[]\",\n        \"internalType\": \"bytes[]\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"initialize\",\n    \"inputs\": [\n      {\n        \"name\": \"accessManager\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"signers\",\n        \"type\": \"bytes[]\",\n        \"internalType\": \"bytes[]\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"initializeWithCommitment\",\n    \"inputs\": [\n      {\n        \"name\": \"accessManager\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"signers\",\n        \"type\": \"bytes[]\",\n        \"internalType\": \"bytes[]\"\n      },\n      {\n        \"name\": \"commitmentSigner\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"isConsumingScheduledOp\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bytes4\",\n        \"internalType\": \"bytes4\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"isSigner\",\n    \"inputs\": [\n      {\n        \"name\": \"signer\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"isValidSignature\",\n    \"inputs\": [\n      {\n        \"name\": \"hash\",\n        \"type\": \"bytes32\",\n        \"internalType\": \"bytes32\"\n      },\n      {\n        \"name\": \"signature\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"result\",\n        \"type\": \"bytes4\",\n        \"internalType\": \"bytes4\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"onERC1155BatchReceived\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"uint256[]\",\n        \"internalType\": \"uint256[]\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"uint256[]\",\n        \"internalType\": \"uint256[]\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bytes4\",\n        \"internalType\": \"bytes4\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"onERC1155Received\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bytes4\",\n        \"internalType\": \"bytes4\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"onERC721Received\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bytes4\",\n        \"internalType\": \"bytes4\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"pendingCommitmentSigners\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address[]\",\n        \"internalType\": \"address[]\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"proxiableUUID\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bytes32\",\n        \"internalType\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"registerSigner\",\n    \"inputs\": [\n      {\n        \"name\": \"signerBytes\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      },\n      {\n        \"name\": \"signature\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"relayNonce\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"removeSigners\",\n    \"inputs\": [\n      {\n        \"name\": \"signers\",\n        \"type\": \"bytes[]\",\n        \"internalType\": \"bytes[]\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"revokePendingCommitmentSigner\",\n    \"inputs\": [\n      {\n        \"name\": \"commitmentSigner\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setAuthority\",\n    \"inputs\": [\n      {\n        \"name\": \"newAuthority\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setThreshold\",\n    \"inputs\": [\n      {\n        \"name\": \"newThreshold\",\n        \"type\": \"uint64\",\n        \"internalType\": \"uint64\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"supportsExecutionMode\",\n    \"inputs\": [\n      {\n        \"name\": \"mode\",\n        \"type\": \"bytes32\",\n        \"internalType\": \"bytes32\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"result\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"supportsInterface\",\n    \"inputs\": [\n      {\n        \"name\": \"interfaceId\",\n        \"type\": \"bytes4\",\n        \"internalType\": \"bytes4\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"threshold\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint64\",\n        \"internalType\": \"uint64\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"upgradeToAndCall\",\n    \"inputs\": [\n      {\n        \"name\": \"newImplementation\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"data\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"payable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"validateUserOp\",\n    \"inputs\": [\n      {\n        \"name\": \"userOp\",\n        \"type\": \"tuple\",\n        \"internalType\": \"struct PackedUserOperation\",\n        \"components\": [\n          {\n            \"name\": \"sender\",\n            \"type\": \"address\",\n            \"internalType\": \"address\"\n          },\n          {\n            \"name\": \"nonce\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"initCode\",\n            \"type\": \"bytes\",\n            \"internalType\": \"bytes\"\n          },\n          {\n            \"name\": \"callData\",\n            \"type\": \"bytes\",\n            \"internalType\": \"bytes\"\n          },\n          {\n            \"name\": \"accountGasLimits\",\n            \"type\": \"bytes32\",\n            \"internalType\": \"bytes32\"\n          },\n          {\n            \"name\": \"preVerificationGas\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"gasFees\",\n            \"type\": \"bytes32\",\n            \"internalType\": \"bytes32\"\n          },\n          {\n            \"name\": \"paymasterAndData\",\n            \"type\": \"bytes\",\n            \"internalType\": \"bytes\"\n          },\n          {\n            \"name\": \"signature\",\n            \"type\": \"bytes\",\n            \"internalType\": \"bytes\"\n          }\n        ]\n      },\n      {\n        \"name\": \"userOpHash\",\n        \"type\": \"bytes32\",\n        \"internalType\": \"bytes32\"\n      },\n      {\n        \"name\": \"missingAccountFunds\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"AuthorityUpdated\",\n    \"inputs\": [\n      {\n        \"name\": \"authority\",\n        \"type\": \"address\",\n        \"indexed\": false,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"EIP712DomainChanged\",\n    \"inputs\": [],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"ERC7579TryExecuteFail\",\n    \"inputs\": [\n      {\n        \"name\": \"batchExecutionIndex\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"returndata\",\n        \"type\": \"bytes\",\n        \"indexed\": false,\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"ERC7913SignerAdded\",\n    \"inputs\": [\n      {\n        \"name\": \"signers\",\n        \"type\": \"bytes\",\n        \"indexed\": true,\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"ERC7913SignerRemoved\",\n    \"inputs\": [\n      {\n        \"name\": \"signers\",\n        \"type\": \"bytes\",\n        \"indexed\": true,\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"ERC7913ThresholdSet\",\n    \"inputs\": [\n      {\n        \"name\": \"threshold\",\n        \"type\": \"uint64\",\n        \"indexed\": false,\n        \"internalType\": \"uint64\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"Initialized\",\n    \"inputs\": [\n      {\n        \"name\": \"version\",\n        \"type\": \"uint64\",\n        \"indexed\": false,\n        \"internalType\": \"uint64\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"PendingCommitmentSignerAdded\",\n    \"inputs\": [\n      {\n        \"name\": \"commitmentSigner\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"PendingCommitmentSignerRevoked\",\n    \"inputs\": [\n      {\n        \"name\": \"commitmentSigner\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"SignerRegistered\",\n    \"inputs\": [\n      {\n        \"name\": \"commitmentSigner\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"signerBytes\",\n        \"type\": \"bytes\",\n        \"indexed\": false,\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"Upgraded\",\n    \"inputs\": [\n      {\n        \"name\": \"implementation\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"AccessManagedInvalidAuthority\",\n    \"inputs\": [\n      {\n        \"name\": \"authority\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"AccessManagedRequiredDelay\",\n    \"inputs\": [\n      {\n        \"name\": \"caller\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"delay\",\n        \"type\": \"uint32\",\n        \"internalType\": \"uint32\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"AccessManagedUnauthorized\",\n    \"inputs\": [\n      {\n        \"name\": \"caller\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"AccountUnauthorized\",\n    \"inputs\": [\n      {\n        \"name\": \"sender\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"AddressEmptyCode\",\n    \"inputs\": [\n      {\n        \"name\": \"target\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"CommitmentAlreadyPending\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"CommitmentNotPending\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ECDSAInvalidSignature\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ECDSAInvalidSignatureLength\",\n    \"inputs\": [\n      {\n        \"name\": \"length\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ECDSAInvalidSignatureS\",\n    \"inputs\": [\n      {\n        \"name\": \"s\",\n        \"type\": \"bytes32\",\n        \"internalType\": \"bytes32\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC1967InvalidImplementation\",\n    \"inputs\": [\n      {\n        \"name\": \"implementation\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC1967NonPayable\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC7579DecodingError\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC7579UnsupportedExecType\",\n    \"inputs\": [\n      {\n        \"name\": \"execType\",\n        \"type\": \"bytes1\",\n        \"internalType\": \"ExecType\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"FailedCall\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"InvalidCommitmentSigner\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"InvalidInitialization\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"MultiSignerERC7913AlreadyExists\",\n    \"inputs\": [\n      {\n        \"name\": \"signer\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"MultiSignerERC7913InvalidSigner\",\n    \"inputs\": [\n      {\n        \"name\": \"signer\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"MultiSignerERC7913NonexistentSigner\",\n    \"inputs\": [\n      {\n        \"name\": \"signer\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"MultiSignerERC7913UnreachableThreshold\",\n    \"inputs\": [\n      {\n        \"name\": \"signers\",\n        \"type\": \"uint64\",\n        \"internalType\": \"uint64\"\n      },\n      {\n        \"name\": \"threshold\",\n        \"type\": \"uint64\",\n        \"internalType\": \"uint64\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"MultiSignerERC7913ZeroThreshold\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotInitializing\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"OutOfRangeAccess\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ReentrancyGuardReentrantCall\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"UUPSUnauthorizedCallContext\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"UUPSUnsupportedProxiableUUID\",\n    \"inputs\": [\n      {\n        \"name\": \"slot\",\n        \"type\": \"bytes32\",\n        \"internalType\": \"bytes32\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"UnsupportedExecutionMode\",\n    \"inputs\": []\n  }\n] as const satisfies Abi;\n", "import { z } from 'zod';\nimport { ensureAccount } from '../lib/ensure-account.js';\nimport { type Session } from '../lib/session.js';\n\nexport const getAccountInfoSchema = z.object({});\n\nexport function createGetAccountInfoTool(session: Session) {\n  return {\n    name: 'get_account_info',\n    title: 'Get wallet account info',\n    annotations: { readOnlyHint: true, openWorldHint: false },\n    description:\n      'Get the current account address, public key, and network.',\n    inputSchema: getAccountInfoSchema,\n    handler: async (\n      _input: z.infer<typeof getAccountInfoSchema>,\n    ): Promise<string> => {\n      await ensureAccount(session);\n\n      return [\n        `Address: ${session.account!.address}`,\n        `Public Key: ${session.account!.publicKey}`,\n        `Network: ${session.network}`,\n      ].join('\\n');\n    },\n  };\n}\n", "import { z } from 'zod';\nimport { type Session, requireCredentials } from '../lib/session.js';\n\nexport const apiStatusSchema = z.object({});\n\nexport function createApiStatusTool(session: Session) {\n  return {\n    name: 'api_status',\n    title: 'Check Keyban API status',\n    annotations: { readOnlyHint: true, openWorldHint: false },\n    description:\n      'Check the Keyban API health status. Returns \"operational\" or \"down\". Requires an API key.',\n    inputSchema: apiStatusSchema,\n    handler: async (\n      _input: z.infer<typeof apiStatusSchema>,\n    ): Promise<string> => {\n      requireCredentials(session);\n\n      const res = await fetch(`${session.baseURL}/health/ready`);\n      const status = res.ok ? 'operational' : 'down';\n      return `API status: ${status}`;\n    },\n  };\n}\n", "import { hashMessage } from 'viem';\nimport { z } from 'zod';\nimport { ensureAccount } from '../lib/ensure-account.js';\nimport { type Session } from '../lib/session.js';\n\nexport const signMessageSchema = z.object({\n  message: z.string().describe('the message to sign'),\n});\n\nexport function createSignMessageTool(session: Session) {\n  return {\n    name: 'sign_message',\n    title: 'Sign a message',\n    // Not read-only: it uses the wallet key. Not destructive in the spec's\n    // sense either \u2014 it updates no state. That is a hint about display, not a\n    // safety claim: the signature is a bearer artefact that can authorize\n    // something elsewhere later. What guards that is the policy engine, never\n    // these annotations.\n    annotations: {\n      readOnlyHint: false,\n      destructiveHint: false,\n      idempotentHint: true,\n      openWorldHint: false,\n    },\n    description:\n      'Sign an arbitrary message with the account key (EIP-191 personal sign for EVM).',\n    inputSchema: signMessageSchema,\n    handler: async (\n      input: z.infer<typeof signMessageSchema>,\n    ): Promise<string> => {\n      await ensureAccount(session);\n\n      const hash = hashMessage(input.message, 'hex');\n      let signature = await session.signer!.sign(\n        session.account!.dkgBlob,\n        hash,\n      );\n      if (!signature.startsWith('0x')) {\n        signature = `0x${signature}`;\n      }\n      return `Signature: ${signature}`;\n    },\n  };\n}\n", "import { getUsdcChainEntry } from '@keyban/agent-wallet-protocol';\nimport { erc20Abi, encodeFunctionData, getAddress, parseUnits } from 'viem';\nimport { z } from 'zod';\nimport { CHAIN_MAP } from '../lib/evm.js';\nimport { ensureAccount } from '../lib/ensure-account.js';\nimport { executeRelayed } from '../lib/relay.js';\nimport { type Session } from '../lib/session.js';\nimport { describeAccountState } from '../lib/x402-diagnostics.js';\n\n/** USDC base-unit decimals \u2014 matches the canonical Circle USDC in the registry. */\nconst USDC_DECIMALS = 6;\n\nexport const transferUsdcSchema = z.object({\n  to: z.string().describe('recipient address (0x...)'),\n  value: z\n    .string()\n    .regex(\n      /^\\d+(?:\\.\\d{1,6})?$/,\n      'must be a positive decimal with at most 6 fractional digits (USDC precision)',\n    )\n    .describe(\n      'amount of USDC as a human-readable decimal (e.g. \"1.5\" = 1.5 USDC), ' +\n        'NOT base units.',\n    ),\n});\n\nexport function createTransferUsdcTool(session: Session) {\n  return {\n    name: 'transfer_usdc',\n    title: 'Transfer USDC',\n    // Moves value on-chain: irreversible once settled, and never idempotent\n    // (calling it twice sends twice).\n    annotations: {\n      readOnlyHint: false,\n      destructiveHint: true,\n      idempotentHint: false,\n      openWorldHint: true,\n    },\n    description:\n      'Transfer USDC (ERC-20) to an address. Routes through the SchnorrAccount relay as a ' +\n      '`transfer(to,amount)` call, so the same wallet policy applies as for a native transfer ' +\n      '(caps, allow-list, require_human). Requires a network with a ' +\n      'canonical USDC contract (BaseSepolia, BaseMainnet, XdcApothem, XdcMainnet).',\n    inputSchema: transferUsdcSchema,\n    handler: async (\n      input: z.infer<typeof transferUsdcSchema>,\n    ): Promise<string> => {\n      const init = await ensureAccount(session);\n      const { account, signer, frostVerifierAddress } = init;\n\n      const chain = CHAIN_MAP[session.network];\n      if (!chain) {\n        throw new Error(\n          `USDC transfer is not supported for network \"${session.network}\". Supported: ${Object.keys(CHAIN_MAP).join(', ')}`,\n        );\n      }\n\n      const usdc = getUsdcChainEntry(chain.id);\n      if (!usdc) {\n        throw new Error(\n          `No canonical USDC contract registered for network \"${session.network}\" (chainId ${chain.id}).`,\n        );\n      }\n\n      // ERC-20 transfer(to, amount): dest is the USDC contract, native value is\n      // zero. The relay/policy path recognises this exact shape (selector +\n      // registry address + zero value) as a `usdc-transfer`.\n      const amount = parseUnits(input.value as `${number}`, USDC_DECIMALS);\n      const data = encodeFunctionData({\n        abi: erc20Abi,\n        functionName: 'transfer',\n        args: [getAddress(input.to), amount],\n      });\n\n      let txHash: string;\n      try {\n        txHash = await executeRelayed(\n          account.publicClient,\n          signer,\n          account.dkgBlob,\n          account.address,\n          usdc.address,\n          0n,\n          account.publicKey,\n          frostVerifierAddress,\n          data,\n        );\n      } catch (err) {\n        // A reverted relay only ever says \"reverted\": the ERC-20 revert reason\n        // does not survive the hop. The balance it was short of is the answer\n        // most of the time, so read it back and say it.\n        const message = err instanceof Error ? err.message : String(err);\n        if (!/revert/i.test(message)) throw err;\n        const diag = await describeAccountState(\n          account.publicClient,\n          account.address,\n          chain.id,\n          amount,\n        );\n        throw new Error(\n          diag.length > 0\n            ? `${message}\\nsender on-chain state (chainId ${chain.id}):\\n${diag.join('\\n')}`\n            : message,\n        );\n      }\n      return `USDC transfer successful.\\nTransaction hash: ${txHash}`;\n    },\n  };\n}\n", "import {\n  computeRelayHash,\n  encodeMultiSignerSignature,\n  normalizeFrostSig,\n} from '@keyban/agent-wallet-protocol';\nimport type { Chain, PublicClient, Transport } from 'viem';\nimport type { SignerApi } from './types.js';\nimport { schnorrAccountAbi } from '../generated/abis.js';\n\n/**\n * Gas overhead for the SchnorrAccount.executeRelayed() wrapper\n * (Schnorr signature verification + delegatecall dispatch).\n */\nexport const RELAY_GAS_OVERHEAD = 80_000n;\n\n/**\n * Execute a relayed transaction through the SchnorrAccount smart contract.\n * Signs the relay hash via FROST, then sends to the backend relay endpoint.\n */\nexport async function executeRelayed(\n  publicClient: PublicClient<Transport, Chain>,\n  signer: SignerApi,\n  dkgBlob: string,\n  accountAddress: `0x${string}`,\n  dest: `0x${string}`,\n  value: bigint,\n  publicKeyHex: string,\n  frostVerifierAddress: string,\n  data: `0x${string}` = '0x',\n): Promise<string> {\n  const chainId = await publicClient.getChainId();\n\n  // Assert the SchnorrAccount contract is deployed\n  const code = await publicClient.getCode({ address: accountAddress });\n  if (!code || code === '0x') {\n    throw new Error(\n      'SchnorrAccount is not yet deployed \u2014 the account deployment may still be in progress',\n    );\n  }\n\n  // Read relay nonce from on-chain\n  const nonce = await publicClient.readContract({\n    address: accountAddress,\n    abi: schnorrAccountAbi,\n    functionName: 'relayNonce',\n  });\n\n  // Canonical relay hash \u2014 computed via the shared lib so the backend\n  // (which recomputes it from the same pre-image) agrees byte-for-byte.\n  const relayHash = computeRelayHash({\n    chainId,\n    account: accountAddress,\n    nonce,\n    dest,\n    value,\n    data,\n  });\n\n  // ADR-86 approach 3bis: pre-flight the policy engine with the structured\n  // pre-image. The backend derives the hash and the payment from it\n  // server-side and stores the decision keyed by that hash; /sign retrieves\n  // it later. On `require_human`, wait for human approval before retrying;\n  // on `deny`, abort.\n  const policyDecision = await signer.evaluateIntent({\n    channel: 'relay',\n    relay: {\n      chainId,\n      account: accountAddress,\n      nonce: nonce.toString(),\n      dest,\n      value: value.toString(),\n      data,\n    },\n    clientHash: relayHash,\n  });\n  if (policyDecision.decision === 'deny') {\n    throw new Error(policyDecision.reasons.join('; '));\n  }\n  if (policyDecision.decision === 'require_human') {\n    throw new Error(\n      `policy/require_human intentId=${policyDecision.intentId} reasons=${policyDecision.reasons.join('; ')}` +\n        ` \u2014 call wait_for_intent() (no arguments) to await the owner's decision, then, once it reports intent ${policyDecision.intentId} approved, retry the transfer.`,\n    );\n  }\n\n  // Sign via FROST TSS. The hash is the only thing /sign sees \u2014 the\n  // policy engine already stored a decision against it at\n  // pre-flight time.\n  const rawSignature = normalizeFrostSig(\n    await signer.sign(dkgBlob, relayHash),\n  );\n  const multiSignerSig = encodeMultiSignerSignature(\n    rawSignature,\n    normalizeFrostSig(publicKeyHex),\n    frostVerifierAddress as `0x${string}`,\n  );\n\n  // Submit via backend relay\n  return signer.relay(\n    accountAddress,\n    dest,\n    value.toString(),\n    data,\n    multiSignerSig,\n  );\n}\n", "import { erc20Abi, type PublicClient, formatEther, formatUnits } from 'viem';\nimport { getUsdcChainEntry } from '@keyban/agent-wallet-protocol';\nimport { logger } from './logger.js';\n\n/**\n * Human-readable explanation + likely causes for known facilitator settlement\n * error reasons. The facilitator emits opaque snake_case codes (and rarely a\n * useful `errorMessage`); this turns the common ones into something an\n * operator can act on. Unknown reasons return undefined \u2014 the raw code is\n * still surfaced by the caller.\n */\nconst SETTLE_REASON_HINTS: Record<string, string> = {\n  invalid_exact_evm_transaction_failed:\n    'The facilitator could not complete the on-chain settlement transaction (USDC ' +\n    'transferWithAuthorization). If it reverted, common causes: (1) the payer is a smart-contract wallet (e.g. a SchnorrAccount) ' +\n    'and its ERC-1271/ERC-7739 signature was rejected during on-chain verification; ' +\n    '(2) USDC balance < amount at execution time; (3) the authorization nonce was already used; ' +\n    '(4) the authorization expired (validBefore in the past). ' +\n    'Note: the facilitator pays gas, so the payer holding 0 native ETH is NOT the cause.',\n  insufficient_funds:\n    'The payer account does not hold enough of the payment asset to cover the amount.',\n  invalid_exact_evm_payload_authorization_valid_before:\n    'The payment authorization expired (validBefore is in the past) before the facilitator settled it. ' +\n    'Retry to mint a fresh authorization.',\n  invalid_exact_evm_payload_authorization_valid_after:\n    'The payment authorization is not yet valid (validAfter is in the future).',\n  invalid_exact_evm_payload_recipient_mismatch:\n    'The signed recipient does not match the seller\\'s payTo address.',\n};\n\n// A bounced broadcast never reached a block, so the reason code's revert\n// causes (bad signature, low balance, spent nonce) cannot apply.\nconst BROADCAST_FAILURE_MARKERS = [\n  'replacement transaction underpriced',\n  'transaction underpriced',\n  'replacement fee too low',\n  'nonce too low',\n  'already known',\n  // The facilitator itself answered with a gateway error, so it never even\n  // reached the chain \u2014 same story, one hop earlier.\n  'facilitator verify failed (50',\n  'facilitator settle failed (50',\n  'facilitator verify failed (429',\n  'facilitator settle failed (429',\n];\n\n/** True when the settlement transaction never made it into a block. */\nexport function isBroadcastFailure(text: string | undefined): boolean {\n  if (!text) return false;\n  const haystack = text.toLowerCase();\n  return BROADCAST_FAILURE_MARKERS.some((marker) => haystack.includes(marker));\n}\n\nconst BROADCAST_FAILURE_HINT =\n  'The payment never reached a block: either the facilitator itself did not answer (a gateway error), ' +\n  'or it could not broadcast the transaction from the single account it relays every tenant through. ' +\n  'Either way this is infrastructure trouble rather than a problem with this payment \u2014 the authorization ' +\n  'was not spent and nothing was charged. Retrying re-sends the same authorization, which cannot ' +\n  'double-charge.';\n\n/** Human-readable explanation for a known facilitator error reason, if any. */\nexport function explainSettleReason(\n  reason: string | undefined,\n  message?: string,\n): string | undefined {\n  if (isBroadcastFailure(message)) return BROADCAST_FAILURE_HINT;\n  if (!reason) return undefined;\n  return SETTLE_REASON_HINTS[reason];\n}\n\n/** Block-explorer transaction URL for known chains, or undefined (local/unknown). */\nexport function explorerTxUrl(\n  chainId: number,\n  txHash: string,\n): string | undefined {\n  switch (chainId) {\n    case 84532:\n      return `https://sepolia.basescan.org/tx/${txHash}`;\n    case 8453:\n      return `https://basescan.org/tx/${txHash}`;\n    case 1:\n      return `https://etherscan.io/tx/${txHash}`;\n    default:\n      // local (anvil) and unknown chains have no public explorer\n      return undefined;\n  }\n}\n\n/**\n * Best-effort on-chain snapshot at the moment a payment failed: the payer's\n * live native + USDC balance, and how the USDC balance compares to the amount\n * that was required. Never throws \u2014 diagnostics must not mask the original\n * settlement error. Returns formatted lines (empty if everything failed).\n */\nexport async function describeAccountState(\n  publicClient: PublicClient,\n  payer: `0x${string}`,\n  chainId: number,\n  requiredAmount?: bigint,\n): Promise<string[]> {\n  const lines: string[] = [];\n\n  try {\n    const eth = await publicClient.getBalance({ address: payer });\n    lines.push(`  native: ${formatEther(eth)} ETH`);\n  } catch (err) {\n    logger.warn(`diagnostics: failed to read native balance: ${String(err)}`);\n  }\n\n  const usdcEntry = getUsdcChainEntry(chainId);\n  if (usdcEntry) {\n    try {\n      const usdc = (await publicClient.readContract({\n        address: usdcEntry.address,\n        abi: erc20Abi,\n        functionName: 'balanceOf',\n        args: [payer],\n      })) as bigint;\n      let line = `  USDC: ${formatUnits(usdc, 6)} USDC (${usdc} units)`;\n      if (requiredAmount !== undefined) {\n        line +=\n          usdc >= requiredAmount\n            ? ` \u2014 sufficient for required ${formatUnits(requiredAmount, 6)} USDC`\n            : ` \u2014 INSUFFICIENT for required ${formatUnits(requiredAmount, 6)} USDC`;\n      }\n      lines.push(line);\n    } catch (err) {\n      logger.warn(`diagnostics: failed to read USDC balance: ${String(err)}`);\n    }\n  }\n\n  return lines;\n}\n", "import { erc20Abi, formatUnits } from 'viem';\nimport { getUsdcChainEntry } from '@keyban/agent-wallet-protocol';\nimport { CHAIN_MAP } from './evm.js';\nimport { logger } from './logger.js';\nimport { buildApiKeyHeaders, type Session, type InitializedSession } from './session.js';\n\nconst USDC_DECIMALS = 6;\n\nconst DEFAULT_CURRENCY = 'EUR';\n\ntype FiatResult = { formatted: string } | { error: string };\n\nasync function fetchPreferredCurrency(session: Session): Promise<string> {\n  try {\n    const res = await fetch(\n      `${session.baseURL}/v1/applications/${encodeURIComponent(session.appId)}`,\n    );\n    if (!res.ok) return DEFAULT_CURRENCY;\n    const app = (await res.json()) as { preferredCurrency?: string | null };\n    return app?.preferredCurrency ?? DEFAULT_CURRENCY;\n  } catch (err) {\n    logger.warn(`balance: failed to read preferred currency: ${String(err)}`);\n    return DEFAULT_CURRENCY;\n  }\n}\n\nasync function fetchUsdcFiat(\n  session: Session,\n  rawUsdc: bigint,\n  currency: string,\n): Promise<FiatResult> {\n  let res: Response;\n  try {\n    const url = `${session.baseURL}/v1/exchange-rate/convert?asset=USDC&amount=${rawUsdc.toString()}&currency=${encodeURIComponent(currency)}`;\n    res = await fetch(url, { headers: buildApiKeyHeaders(session) });\n  } catch (err) {\n    const msg = err instanceof Error ? err.message : String(err);\n    logger.warn(`balance: exchange-rate convert request failed: ${msg}`);\n    return { error: `convert request failed: ${msg}` };\n  }\n\n  if (!res.ok) {\n    const body = await res.text().catch(() => '');\n    let detail = '';\n    try {\n      const j = JSON.parse(body) as { code?: string; title?: string };\n      detail = j.code ?? j.title ?? '';\n    } catch {\n      detail = body.slice(0, 120);\n    }\n    const suffix = detail ? ` ${detail}` : '';\n    const reason =\n      res.status === 401 || res.status === 403\n        ? `not authorized to read the exchange rate (HTTP ${res.status}${suffix})`\n        : res.status === 503\n          ? `no fresh exchange rate available (HTTP 503${suffix})`\n          : `exchange-rate convert failed (HTTP ${res.status}${suffix})`;\n    logger.warn(`balance: ${reason}`);\n    return { error: reason };\n  }\n\n  const conv = (await res.json()) as { valueRef: string };\n  const major = Number(conv.valueRef) / 100;\n  return {\n    formatted: new Intl.NumberFormat('en-US', {\n      style: 'currency',\n      currency,\n    }).format(major),\n  };\n}\n\nexport async function getAccountBalance(session: InitializedSession): Promise<string> {\n  const chain = CHAIN_MAP[session.network];\n  if (!chain) {\n    throw new Error(\n      `Balance is not supported for network \"${session.network}\". Supported: ${Object.keys(CHAIN_MAP).join(', ')}`,\n    );\n  }\n\n  const address = session.account.address;\n  const publicClient = session.account.publicClient;\n  const usdcEntry = getUsdcChainEntry(chain.id);\n\n  if (!usdcEntry) {\n    const raw = await publicClient.getBalance({ address });\n    const nativeStr = `${formatUnits(raw, chain.nativeCurrency.decimals)} ${chain.nativeCurrency.symbol}`;\n    return ['Address: ' + address, 'Balance: ' + nativeStr].join('\\n');\n  }\n\n  const usdcRaw = await publicClient.readContract({\n    address: usdcEntry.address,\n    abi: erc20Abi,\n    functionName: 'balanceOf',\n    args: [address],\n  });\n\n  const currency = await fetchPreferredCurrency(session);\n  const fiat = await fetchUsdcFiat(session, usdcRaw, currency);\n  const usdc = `${formatUnits(usdcRaw, USDC_DECIMALS)} USDC`;\n\n  const balanceLine =\n    'formatted' in fiat\n      ? `Balance: ${fiat.formatted} (${usdc})`\n      : `Balance: ${usdc} \u2014 fiat value unavailable in ${currency}: ${fiat.error}`;\n\n  return [`Address: ${address}`, balanceLine].join('\\n');\n}\n", "import { z } from 'zod';\nimport { ensureAccount } from '../lib/ensure-account.js';\nimport { getAccountBalance } from '../lib/balance.js';\nimport { type Session } from '../lib/session.js';\n\nexport const balanceSchema = z.object({});\n\nexport function createBalanceTool(session: Session) {\n  return {\n    name: 'balance',\n    title: 'Check wallet balance',\n    annotations: { readOnlyHint: true, openWorldHint: false },\n    description:\n      \"Show the current account balance, led by its value in the application's preferred \" +\n      'fiat currency (quoted from the Keyban backend rate oracle); the USDC amount is ' +\n      'complementary. When reporting the balance to the user, give the fiat value first \u2014 ' +\n      'that is the figure that means something to them. ' +\n      'EVM networks (EthereumAnvil, BaseSepolia, BaseMainnet, XdcApothem, XdcMainnet).',\n    inputSchema: balanceSchema,\n    handler: async (\n      _input: z.infer<typeof balanceSchema>,\n    ): Promise<string> => {\n      const init = await ensureAccount(session);\n      return getAccountBalance(init);\n    },\n  };\n}\n", "import { z } from \"zod\";\n\n// ============================================================================\n// Reusable Primitive Schemas\n// ============================================================================\n\n/**\n * Non-empty string schema - a string with at least one character.\n * Used for required string fields that cannot be empty.\n */\nexport const NonEmptyString = z.string().min(1);\nexport type NonEmptyString = z.infer<typeof NonEmptyString>;\n\n/**\n * Any record schema - an object with unknown keys and values.\n * Used for scheme-specific payloads and other extensible objects.\n */\nexport const Any = z.record(z.unknown());\nexport type Any = z.infer<typeof Any>;\n\n/**\n * Optional any record schema - an optional object with unknown keys and values.\n * Used for optional extension fields like `extra` and `extensions`.\n */\nexport const OptionalAny = z.record(z.unknown()).optional().nullable();\nexport type OptionalAny = z.infer<typeof OptionalAny>;\n\n// ============================================================================\n// Network Schemas\n// ============================================================================\n\n/**\n * Network identifier schema for V1 - loose validation.\n * V1 accepts any non-empty string for backwards compatibility.\n */\nexport const NetworkSchemaV1 = NonEmptyString;\nexport type NetworkV1 = z.infer<typeof NetworkSchemaV1>;\n\n/**\n * Network identifier schema for V2 - CAIP-2 format validation.\n * V2 requires minimum length of 3 and a colon separator (e.g., \"eip155:84532\", \"solana:devnet\").\n */\nexport const NetworkSchemaV2 = z\n  .string()\n  .min(3)\n  .refine(val => val.includes(\":\"), {\n    message: \"Network must be in CAIP-2 format (e.g., 'eip155:84532')\",\n  });\nexport type NetworkV2 = z.infer<typeof NetworkSchemaV2>;\n\n/**\n * Union network schema - accepts either V1 or V2 format.\n */\nexport const NetworkSchema = z.union([NetworkSchemaV1, NetworkSchemaV2]);\nexport type Network = z.infer<typeof NetworkSchema>;\n\n// ============================================================================\n// Shared Schemas\n// ============================================================================\n\n/**\n * ResourceInfo schema for V2 - describes the protected resource.\n */\nexport const ResourceInfoSchema = z.object({\n  url: NonEmptyString,\n  description: z.string().optional(),\n  mimeType: z.string().optional(),\n});\nexport type ResourceInfo = z.infer<typeof ResourceInfoSchema>;\n\n// ============================================================================\n// V1 Schemas\n// ============================================================================\n\n/**\n * PaymentRequirements schema for V1.\n * V1 includes resource info directly in the requirements object.\n */\nexport const PaymentRequirementsV1Schema = z.object({\n  scheme: NonEmptyString,\n  network: NetworkSchemaV1,\n  maxAmountRequired: NonEmptyString,\n  resource: NonEmptyString, // URL string in V1\n  description: z.string(),\n  mimeType: z.string().optional(),\n  outputSchema: Any.optional().nullable(),\n  payTo: NonEmptyString,\n  maxTimeoutSeconds: z.number().positive(),\n  asset: NonEmptyString,\n  extra: OptionalAny,\n});\nexport type PaymentRequirementsV1 = z.infer<typeof PaymentRequirementsV1Schema>;\n\n/**\n * PaymentRequired (402 response) schema for V1.\n * Contains payment requirements when a resource requires payment.\n */\nexport const PaymentRequiredV1Schema = z.object({\n  x402Version: z.literal(1),\n  error: z.string().optional(),\n  accepts: z.array(PaymentRequirementsV1Schema).min(1),\n});\nexport type PaymentRequiredV1 = z.infer<typeof PaymentRequiredV1Schema>;\n\n/**\n * PaymentPayload schema for V1.\n * Contains the payment data sent by the client.\n */\nexport const PaymentPayloadV1Schema = z.object({\n  x402Version: z.literal(1),\n  scheme: NonEmptyString,\n  network: NetworkSchemaV1,\n  payload: Any,\n});\nexport type PaymentPayloadV1 = z.infer<typeof PaymentPayloadV1Schema>;\n\n// ============================================================================\n// V2 Schemas\n// ============================================================================\n\n/**\n * PaymentRequirements schema for V2.\n * V2 uses \"amount\" instead of \"maxAmountRequired\" and doesn't include resource info.\n */\nexport const PaymentRequirementsV2Schema = z.object({\n  scheme: NonEmptyString,\n  network: NetworkSchemaV2,\n  amount: NonEmptyString,\n  asset: NonEmptyString,\n  payTo: NonEmptyString,\n  maxTimeoutSeconds: z.number().positive(),\n  extra: OptionalAny,\n});\nexport type PaymentRequirementsV2 = z.infer<typeof PaymentRequirementsV2Schema>;\n\n/**\n * PaymentRequired (402 response) schema for V2.\n * Contains payment requirements when a resource requires payment.\n */\nexport const PaymentRequiredV2Schema = z.object({\n  x402Version: z.literal(2),\n  error: z.string().optional(),\n  resource: ResourceInfoSchema,\n  accepts: z.array(PaymentRequirementsV2Schema).min(1),\n  extensions: OptionalAny,\n});\nexport type PaymentRequiredV2 = z.infer<typeof PaymentRequiredV2Schema>;\n\n/**\n * PaymentPayload schema for V2.\n * Contains the payment data sent by the client.\n */\nexport const PaymentPayloadV2Schema = z.object({\n  x402Version: z.literal(2),\n  resource: ResourceInfoSchema.optional(),\n  accepted: PaymentRequirementsV2Schema,\n  payload: Any,\n  extensions: OptionalAny,\n});\nexport type PaymentPayloadV2 = z.infer<typeof PaymentPayloadV2Schema>;\n\n// ============================================================================\n// Union Schemas (V1 | V2)\n// ============================================================================\n\n/**\n * PaymentRequirements union schema - accepts either V1 or V2 format.\n * Use this when you need to handle both versions.\n */\nexport const PaymentRequirementsSchema = z.union([\n  PaymentRequirementsV1Schema,\n  PaymentRequirementsV2Schema,\n]);\nexport type PaymentRequirements = z.infer<typeof PaymentRequirementsSchema>;\n\n/**\n * PaymentRequired union schema - accepts either V1 or V2 format.\n * Uses discriminated union on x402Version for efficient parsing.\n */\nexport const PaymentRequiredSchema = z.discriminatedUnion(\"x402Version\", [\n  PaymentRequiredV1Schema,\n  PaymentRequiredV2Schema,\n]);\nexport type PaymentRequired = z.infer<typeof PaymentRequiredSchema>;\n\n/**\n * PaymentPayload union schema - accepts either V1 or V2 format.\n * Uses discriminated union on x402Version for efficient parsing.\n */\nexport const PaymentPayloadSchema = z.discriminatedUnion(\"x402Version\", [\n  PaymentPayloadV1Schema,\n  PaymentPayloadV2Schema,\n]);\nexport type PaymentPayload = z.infer<typeof PaymentPayloadSchema>;\n\n// ============================================================================\n// Validation Functions\n// ============================================================================\n\n/**\n * Validates a PaymentRequired object (V1 or V2).\n *\n * @param value - The value to validate\n * @returns A result object with success status and data or error\n */\nexport function parsePaymentRequired(\n  value: unknown,\n): z.SafeParseReturnType<unknown, PaymentRequired> {\n  return PaymentRequiredSchema.safeParse(value);\n}\n\n/**\n * Validates a PaymentRequired object and throws on error.\n *\n * @param value - The value to validate\n * @returns The validated PaymentRequired\n * @throws ZodError if validation fails\n */\nexport function validatePaymentRequired(value: unknown): PaymentRequired {\n  return PaymentRequiredSchema.parse(value);\n}\n\n/**\n * Type guard for PaymentRequired (V1 or V2).\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequired\n */\nexport function isPaymentRequired(value: unknown): value is PaymentRequired {\n  return PaymentRequiredSchema.safeParse(value).success;\n}\n\n/**\n * Validates a PaymentRequirements object (V1 or V2).\n *\n * @param value - The value to validate\n * @returns A result object with success status and data or error\n */\nexport function parsePaymentRequirements(\n  value: unknown,\n): z.SafeParseReturnType<unknown, PaymentRequirements> {\n  return PaymentRequirementsSchema.safeParse(value);\n}\n\n/**\n * Validates a PaymentRequirements object and throws on error.\n *\n * @param value - The value to validate\n * @returns The validated PaymentRequirements\n * @throws ZodError if validation fails\n */\nexport function validatePaymentRequirements(value: unknown): PaymentRequirements {\n  return PaymentRequirementsSchema.parse(value);\n}\n\n/**\n * Type guard for PaymentRequirements (V1 or V2).\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequirements\n */\nexport function isPaymentRequirements(value: unknown): value is PaymentRequirements {\n  return PaymentRequirementsSchema.safeParse(value).success;\n}\n\n/**\n * Validates a PaymentPayload object (V1 or V2).\n *\n * @param value - The value to validate\n * @returns A result object with success status and data or error\n */\nexport function parsePaymentPayload(\n  value: unknown,\n): z.SafeParseReturnType<unknown, PaymentPayload> {\n  return PaymentPayloadSchema.safeParse(value);\n}\n\n/**\n * Validates a PaymentPayload object and throws on error.\n *\n * @param value - The value to validate\n * @returns The validated PaymentPayload\n * @throws ZodError if validation fails\n */\nexport function validatePaymentPayload(value: unknown): PaymentPayload {\n  return PaymentPayloadSchema.parse(value);\n}\n\n/**\n * Type guard for PaymentPayload (V1 or V2).\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentPayload\n */\nexport function isPaymentPayload(value: unknown): value is PaymentPayload {\n  return PaymentPayloadSchema.safeParse(value).success;\n}\n\n// ============================================================================\n// Version-Specific Type Guards\n// ============================================================================\n\n/**\n * Type guard for PaymentRequiredV1.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequiredV1\n */\nexport function isPaymentRequiredV1(value: unknown): value is PaymentRequiredV1 {\n  return PaymentRequiredV1Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentRequiredV2.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequiredV2\n */\nexport function isPaymentRequiredV2(value: unknown): value is PaymentRequiredV2 {\n  return PaymentRequiredV2Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentRequirementsV1.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequirementsV1\n */\nexport function isPaymentRequirementsV1(value: unknown): value is PaymentRequirementsV1 {\n  return PaymentRequirementsV1Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentRequirementsV2.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentRequirementsV2\n */\nexport function isPaymentRequirementsV2(value: unknown): value is PaymentRequirementsV2 {\n  return PaymentRequirementsV2Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentPayloadV1.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentPayloadV1\n */\nexport function isPaymentPayloadV1(value: unknown): value is PaymentPayloadV1 {\n  return PaymentPayloadV1Schema.safeParse(value).success;\n}\n\n/**\n * Type guard for PaymentPayloadV2.\n *\n * @param value - The value to check\n * @returns True if the value is a valid PaymentPayloadV2\n */\nexport function isPaymentPayloadV2(value: unknown): value is PaymentPayloadV2 {\n  return PaymentPayloadV2Schema.safeParse(value).success;\n}\n\n// ============================================================================\n// Re-export zod for convenience\n// ============================================================================\n\nexport { z } from \"zod\";\n", "import { Network } from \"../types\";\n\n/**\n * Scheme data structure for facilitator storage\n */\nexport interface SchemeData<T> {\n  facilitator: T;\n  networks: Set<Network>;\n  pattern: Network;\n}\n\nexport const findSchemesByNetwork = <T>(\n  map: Map<string, Map<string, T>>,\n  network: Network,\n): Map<string, T> | undefined => {\n  // Direct match first\n  let implementationsByScheme = map.get(network);\n\n  if (!implementationsByScheme) {\n    // Try pattern matching for registered network patterns\n    for (const [registeredNetworkPattern, implementations] of map.entries()) {\n      // Convert the registered network pattern to a regex\n      // e.g., \"eip155:*\" becomes /^eip155:.*$/\n      const pattern = registeredNetworkPattern\n        .replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\") // Escape special regex chars except *\n        .replace(/\\\\\\*/g, \".*\"); // Replace escaped * with .*\n\n      const regex = new RegExp(`^${pattern}$`);\n\n      if (regex.test(network)) {\n        implementationsByScheme = implementations;\n        break;\n      }\n    }\n  }\n\n  return implementationsByScheme;\n};\n\nexport const findByNetworkAndScheme = <T>(\n  map: Map<string, Map<string, T>>,\n  scheme: string,\n  network: Network,\n): T | undefined => {\n  return findSchemesByNetwork(map, network)?.get(scheme);\n};\n\n/**\n * Finds a facilitator by scheme and network using pattern matching.\n * Works with new SchemeData storage structure.\n *\n * @param schemeMap - Map of scheme names to SchemeData\n * @param scheme - The scheme to find\n * @param network - The network to match against\n * @returns The facilitator if found, undefined otherwise\n */\nexport const findFacilitatorBySchemeAndNetwork = <T>(\n  schemeMap: Map<string, SchemeData<T>>,\n  scheme: string,\n  network: Network,\n): T | undefined => {\n  const schemeData = schemeMap.get(scheme);\n  if (!schemeData) return undefined;\n\n  // Check if network is in the stored networks set\n  if (schemeData.networks.has(network)) {\n    return schemeData.facilitator;\n  }\n\n  // Try pattern matching\n  const patternRegex = new RegExp(\"^\" + schemeData.pattern.replace(\"*\", \".*\") + \"$\");\n  if (patternRegex.test(network)) {\n    return schemeData.facilitator;\n  }\n\n  return undefined;\n};\n\nexport const Base64EncodedRegex = /^[A-Za-z0-9+/]*={0,2}$/;\n\n/**\n * Encodes a string to base64 format\n *\n * @param data - The string to be encoded to base64\n * @returns The base64 encoded string\n */\nexport function safeBase64Encode(data: string): string {\n  if (typeof globalThis !== \"undefined\" && typeof globalThis.btoa === \"function\") {\n    const bytes = new TextEncoder().encode(data);\n    const binaryString = Array.from(bytes, byte => String.fromCharCode(byte)).join(\"\");\n    return globalThis.btoa(binaryString);\n  }\n  return Buffer.from(data, \"utf8\").toString(\"base64\");\n}\n\n/**\n * Decodes a base64 string back to its original format\n *\n * @param data - The base64 encoded string to be decoded\n * @returns The decoded string in UTF-8 format\n */\nexport function safeBase64Decode(data: string): string {\n  if (typeof globalThis !== \"undefined\" && typeof globalThis.atob === \"function\") {\n    const binaryString = globalThis.atob(data);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n    const decoder = new TextDecoder(\"utf-8\");\n    return decoder.decode(bytes);\n  }\n  return Buffer.from(data, \"base64\").toString(\"utf-8\");\n}\n\n/**\n * Deep equality comparison for payment requirements\n * Uses a normalized JSON.stringify for consistent comparison\n *\n * @param obj1 - First object to compare\n * @param obj2 - Second object to compare\n * @returns True if objects are deeply equal\n */\nexport function deepEqual(obj1: unknown, obj2: unknown): boolean {\n  // Normalize and stringify both objects for comparison\n  // This handles nested objects, arrays, and different property orders\n  const normalize = (obj: unknown): string => {\n    // Handle primitives and null/undefined\n    if (obj === null || obj === undefined) return JSON.stringify(obj);\n    if (typeof obj !== \"object\") return JSON.stringify(obj);\n\n    // Handle arrays\n    if (Array.isArray(obj)) {\n      return JSON.stringify(\n        obj.map(item =>\n          typeof item === \"object\" && item !== null ? JSON.parse(normalize(item)) : item,\n        ),\n      );\n    }\n\n    // Handle objects - sort keys and recursively normalize values\n    const sorted: Record<string, unknown> = {};\n    Object.keys(obj as Record<string, unknown>)\n      .sort()\n      .forEach(key => {\n        const value = (obj as Record<string, unknown>)[key];\n        sorted[key] =\n          typeof value === \"object\" && value !== null ? JSON.parse(normalize(value)) : value;\n      });\n    return JSON.stringify(sorted);\n  };\n\n  try {\n    return normalize(obj1) === normalize(obj2);\n  } catch {\n    // Fallback to simple comparison if normalization fails\n    return JSON.stringify(obj1) === JSON.stringify(obj2);\n  }\n}\n", "import { x402ResourceServer, SettlementOverrides } from \"../server\";\nimport {\n  decodePaymentSignatureHeader,\n  encodePaymentRequiredHeader,\n  encodePaymentResponseHeader,\n} from \".\";\nimport {\n  PaymentPayload,\n  PaymentRequired,\n  SettleResponse,\n  SettleError,\n  FacilitatorResponseError,\n  Price,\n  Network,\n  PaymentRequirements,\n} from \"../types\";\nimport { x402Version } from \"..\";\n\nexport const SETTLEMENT_OVERRIDES_HEADER = \"Settlement-Overrides\";\n\n/**\n * Framework-agnostic HTTP adapter interface\n * Implementations provide framework-specific HTTP operations\n */\nexport interface HTTPAdapter {\n  getHeader(name: string): string | undefined;\n  getMethod(): string;\n  getPath(): string;\n  getUrl(): string;\n  getAcceptHeader(): string;\n  getUserAgent(): string;\n\n  /**\n   * Get query parameters from the request URL\n   *\n   * @returns Record of query parameter key-value pairs\n   */\n  getQueryParams?(): Record<string, string | string[]>;\n\n  /**\n   * Get a specific query parameter by name\n   *\n   * @param name - The query parameter name\n   * @returns The query parameter value(s) or undefined\n   */\n  getQueryParam?(name: string): string | string[] | undefined;\n\n  /**\n   * Get the parsed request body\n   * Framework adapters should parse JSON/form data appropriately\n   *\n   * @returns The parsed request body\n   */\n  getBody?(): unknown;\n}\n\n/**\n * Paywall configuration for HTML responses\n */\nexport interface PaywallConfig {\n  appName?: string;\n  appLogo?: string;\n  sessionTokenEndpoint?: string;\n  currentUrl?: string;\n  testnet?: boolean;\n}\n\n/**\n * Paywall provider interface for generating HTML\n */\nexport interface PaywallProvider {\n  generateHtml(paymentRequired: PaymentRequired, config?: PaywallConfig): string;\n}\n\n/**\n * Dynamic payTo function that receives HTTP request context\n */\nexport type DynamicPayTo = (context: HTTPRequestContext) => string | Promise<string>;\n\n/**\n * Dynamic price function that receives HTTP request context\n */\nexport type DynamicPrice = (context: HTTPRequestContext) => Price | Promise<Price>;\n\n/**\n * Result of response body callbacks containing content type and body.\n */\nexport interface HTTPResponseBody {\n  /**\n   * The content type for the response (e.g., 'application/json', 'text/plain').\n   */\n  contentType: string;\n\n  /**\n   * The response body to include in the 402 response.\n   */\n  body: unknown;\n}\n\n/**\n * Dynamic function to generate a custom response for unpaid requests.\n * Receives the HTTP request context and returns the content type and body to include in the 402 response.\n */\nexport type UnpaidResponseBody = (\n  context: HTTPRequestContext,\n) => HTTPResponseBody | Promise<HTTPResponseBody>;\n\n/**\n * Dynamic function to generate a custom response for settlement failures.\n * Receives the HTTP request context and settle failure result, returns the content type and body.\n */\nexport type SettlementFailedResponseBody = (\n  context: HTTPRequestContext,\n  settleResult: Omit<ProcessSettleFailureResponse, \"response\">,\n) => HTTPResponseBody | Promise<HTTPResponseBody>;\n\n/**\n * A single payment option for a route\n * Represents one way a client can pay for access to the resource\n */\nexport interface PaymentOption {\n  scheme: string;\n  payTo: string | DynamicPayTo;\n  price: Price | DynamicPrice;\n  network: Network;\n  maxTimeoutSeconds?: number;\n  extra?: Record<string, unknown>;\n}\n\n/**\n * Route configuration for HTTP endpoints\n *\n * The 'accepts' field defines payment options for the route.\n * Can be a single PaymentOption or an array of PaymentOptions for multiple payment methods.\n */\nexport interface RouteConfig {\n  // Payment option(s): single or array\n  accepts: PaymentOption | PaymentOption[];\n\n  // HTTP-specific metadata\n  resource?: string;\n  description?: string;\n  mimeType?: string;\n  customPaywallHtml?: string;\n\n  /**\n   * Optional callback to generate a custom response for unpaid API requests.\n   * This allows servers to return preview data, error messages, or other content\n   * when a request lacks payment.\n   *\n   * For browser requests (Accept: text/html), the paywall HTML takes precedence.\n   * This callback is only used for API clients.\n   *\n   * If not provided, defaults to { contentType: 'application/json', body: {} }.\n   *\n   * @param context - The HTTP request context\n   * @returns An object containing both contentType and body for the 402 response\n   */\n  unpaidResponseBody?: UnpaidResponseBody;\n\n  /**\n   * Optional callback to generate a custom response for settlement failures.\n   * If not provided, defaults to { contentType: 'application/json', body: {} }.\n   *\n   * @param context - The HTTP request context\n   * @param settleResult - The settlement failure result\n   * @returns An object containing both contentType and body for the 402 response\n   */\n  settlementFailedResponseBody?: SettlementFailedResponseBody;\n\n  // Extensions\n  extensions?: Record<string, unknown>;\n}\n\n/**\n * Routes configuration - maps path patterns to route configs\n */\nexport type RoutesConfig = Record<string, RouteConfig> | RouteConfig;\n\n/**\n * Hook that runs on every request to a protected route, before payment processing.\n * Can grant access without payment, deny the request, or continue to payment flow.\n *\n * @returns\n * - `void` - Continue to payment processing (default behavior)\n * - `{ grantAccess: true }` - Grant access without requiring payment\n * - `{ abort: true; reason: string }` - Deny the request (returns 403)\n */\nexport type ProtectedRequestHook = (\n  context: HTTPRequestContext,\n  routeConfig: RouteConfig,\n) => Promise<void | { grantAccess: true } | { abort: true; reason: string }>;\n\n/**\n * Compiled route for efficient matching\n */\nexport interface CompiledRoute {\n  verb: string;\n  regex: RegExp;\n  config: RouteConfig;\n  pattern: string;\n}\n\n/**\n * HTTP request context that encapsulates all request data\n */\nexport interface HTTPRequestContext {\n  adapter: HTTPAdapter;\n  path: string;\n  method: string;\n  paymentHeader?: string;\n  routePattern?: string;\n}\n\n/**\n * HTTP transport context contains both request context and optional response data.\n */\nexport interface HTTPTransportContext {\n  /** The HTTP request context */\n  request: HTTPRequestContext;\n  /** The response body buffer */\n  responseBody?: Buffer;\n  /** Response headers set by the route handler (used for settlement overrides) */\n  responseHeaders?: Record<string, string>;\n}\n\n/**\n * HTTP response instructions for the framework middleware\n */\nexport interface HTTPResponseInstructions {\n  status: number;\n  headers: Record<string, string>;\n  body?: unknown; // e.g. Paywall for web browser requests, but could be any other type\n  isHtml?: boolean; // e.g. if body is a paywall, then isHtml is true\n}\n\n/**\n * Result of processing an HTTP request for payment\n */\nexport type HTTPProcessResult =\n  | { type: \"no-payment-required\" }\n  | {\n      type: \"payment-verified\";\n      paymentPayload: PaymentPayload;\n      paymentRequirements: PaymentRequirements;\n      declaredExtensions?: Record<string, unknown>;\n    }\n  | { type: \"payment-error\"; response: HTTPResponseInstructions };\n\n/**\n * Result of processSettlement\n */\nexport type ProcessSettleSuccessResponse = SettleResponse & {\n  success: true;\n  headers: Record<string, string>;\n  requirements: PaymentRequirements;\n};\n\nexport type ProcessSettleFailureResponse = SettleResponse & {\n  success: false;\n  errorReason: string;\n  errorMessage?: string;\n  headers: Record<string, string>;\n  response: HTTPResponseInstructions;\n};\n\nexport type ProcessSettleResultResponse =\n  | ProcessSettleSuccessResponse\n  | ProcessSettleFailureResponse;\n\n/**\n * Represents a validation error for a specific route's payment configuration.\n */\nexport interface RouteValidationError {\n  /** The route pattern (e.g., \"GET /api/weather\") */\n  routePattern: string;\n  /** The payment scheme that failed validation */\n  scheme: string;\n  /** The network that failed validation */\n  network: Network;\n  /** The type of validation failure */\n  reason: \"missing_scheme\" | \"missing_facilitator\";\n  /** Human-readable error message */\n  message: string;\n}\n\n/**\n * Error thrown when route configuration validation fails.\n */\nexport class RouteConfigurationError extends Error {\n  /** The validation errors that caused this exception */\n  public readonly errors: RouteValidationError[];\n\n  /**\n   * Creates a new RouteConfigurationError with the given validation errors.\n   *\n   * @param errors - The validation errors that caused this exception.\n   */\n  constructor(errors: RouteValidationError[]) {\n    const message = `x402 Route Configuration Errors:\\n${errors.map(e => `  - ${e.message}`).join(\"\\n\")}`;\n    super(message);\n    this.name = \"RouteConfigurationError\";\n    this.errors = errors;\n  }\n}\n\n/**\n * HTTP-enhanced x402 resource server\n * Provides framework-agnostic HTTP protocol handling\n */\nexport class x402HTTPResourceServer {\n  private ResourceServer: x402ResourceServer;\n  private compiledRoutes: CompiledRoute[] = [];\n  private routesConfig: RoutesConfig;\n  private paywallProvider?: PaywallProvider;\n  private protectedRequestHooks: ProtectedRequestHook[] = [];\n\n  /**\n   * Creates a new x402HTTPResourceServer instance.\n   *\n   * @param ResourceServer - The core x402ResourceServer instance to use\n   * @param routes - Route configuration for payment-protected endpoints\n   */\n  constructor(ResourceServer: x402ResourceServer, routes: RoutesConfig) {\n    this.ResourceServer = ResourceServer;\n    this.routesConfig = routes;\n\n    // Handle both single route and multiple routes\n    const normalizedRoutes =\n      typeof routes === \"object\" && !(\"accepts\" in routes)\n        ? (routes as Record<string, RouteConfig>)\n        : { \"*\": routes as RouteConfig };\n\n    for (const [pattern, config] of Object.entries(normalizedRoutes)) {\n      const parsed = this.parseRoutePattern(pattern);\n      this.compiledRoutes.push({\n        verb: parsed.verb,\n        regex: parsed.regex,\n        config,\n        pattern: parsed.path,\n      });\n    }\n  }\n\n  /**\n   * Get the underlying x402ResourceServer instance.\n   *\n   * @returns The underlying x402ResourceServer instance\n   */\n  get server(): x402ResourceServer {\n    return this.ResourceServer;\n  }\n\n  /**\n   * Get the routes configuration.\n   *\n   * @returns The routes configuration\n   */\n  get routes(): RoutesConfig {\n    return this.routesConfig;\n  }\n\n  /**\n   * Initialize the HTTP resource server.\n   *\n   * This method initializes the underlying resource server (fetching facilitator support)\n   * and then validates that all route payment configurations have corresponding\n   * registered schemes and facilitator support.\n   *\n   * @throws RouteConfigurationError if any route's payment options don't have\n   *         corresponding registered schemes or facilitator support\n   *\n   * @example\n   * ```typescript\n   * const httpServer = new x402HTTPResourceServer(server, routes);\n   * await httpServer.initialize();\n   * ```\n   */\n  async initialize(): Promise<void> {\n    // First, initialize the underlying resource server (fetches facilitator support)\n    await this.ResourceServer.initialize();\n\n    // Then validate route configuration\n    const errors = this.validateRouteConfiguration();\n    if (errors.length > 0) {\n      throw new RouteConfigurationError(errors);\n    }\n  }\n\n  /**\n   * Register a custom paywall provider for generating HTML\n   *\n   * @param provider - PaywallProvider instance\n   * @returns This service instance for chaining\n   */\n  registerPaywallProvider(provider: PaywallProvider): this {\n    this.paywallProvider = provider;\n    return this;\n  }\n\n  /**\n   * Register a hook that runs on every request to a protected route, before payment processing.\n   * Hooks are executed in order of registration. The first hook to return a non-void result wins.\n   *\n   * @param hook - The request hook function\n   * @returns The x402HTTPResourceServer instance for chaining\n   */\n  onProtectedRequest(hook: ProtectedRequestHook): this {\n    this.protectedRequestHooks.push(hook);\n    return this;\n  }\n\n  /**\n   * Process HTTP request and return response instructions\n   * This is the main entry point for framework middleware\n   *\n   * @param context - HTTP request context\n   * @param paywallConfig - Optional paywall configuration\n   * @returns Process result indicating next action for middleware\n   */\n  async processHTTPRequest(\n    context: HTTPRequestContext,\n    paywallConfig?: PaywallConfig,\n  ): Promise<HTTPProcessResult> {\n    const method = context.method || context.adapter.getMethod();\n    context = { ...context, method };\n    const { adapter, path } = context;\n\n    // Find matching route\n    const routeMatch = this.getRouteConfig(path, method);\n    if (!routeMatch) {\n      return { type: \"no-payment-required\" }; // No payment required for this route\n    }\n    const { config: routeConfig, pattern: routePattern } = routeMatch;\n    const enrichedContext: HTTPRequestContext = { ...context, routePattern };\n\n    // Execute request hooks before any payment processing\n    for (const hook of this.protectedRequestHooks) {\n      const result = await hook(enrichedContext, routeConfig);\n      if (result && \"grantAccess\" in result) {\n        return { type: \"no-payment-required\" };\n      }\n      if (result && \"abort\" in result) {\n        return {\n          type: \"payment-error\",\n          response: {\n            status: 403,\n            headers: { \"Content-Type\": \"application/json\" },\n            body: { error: result.reason },\n          },\n        };\n      }\n    }\n\n    // Normalize accepts field to array of payment options\n    const paymentOptions = this.normalizePaymentOptions(routeConfig);\n\n    // Check for payment header (v1 or v2)\n    const paymentPayload = this.extractPayment(adapter);\n\n    // Create resource info, using config override if provided\n    const resourceInfo = {\n      url: routeConfig.resource || enrichedContext.adapter.getUrl(),\n      description: routeConfig.description || \"\",\n      mimeType: routeConfig.mimeType || \"\",\n    };\n\n    // Build requirements from all payment options\n    // (this method handles resolving dynamic functions internally)\n    let requirements = await this.ResourceServer.buildPaymentRequirementsFromOptions(\n      paymentOptions,\n      enrichedContext,\n    );\n\n    let extensions = routeConfig.extensions;\n    if (extensions) {\n      extensions = this.ResourceServer.enrichExtensions(extensions, enrichedContext);\n    }\n\n    // createPaymentRequiredResponse already handles extension enrichment in the core layer\n    const transportContext: HTTPTransportContext = { request: enrichedContext };\n    const paymentRequired = await this.ResourceServer.createPaymentRequiredResponse(\n      requirements,\n      resourceInfo,\n      !paymentPayload ? \"Payment required\" : undefined,\n      extensions,\n      transportContext,\n    );\n\n    // If no payment provided\n    if (!paymentPayload) {\n      // Resolve custom unpaid response body if provided\n      const unpaidBody = routeConfig.unpaidResponseBody\n        ? await routeConfig.unpaidResponseBody(enrichedContext)\n        : undefined;\n\n      return {\n        type: \"payment-error\",\n        response: this.createHTTPResponse(\n          paymentRequired,\n          this.isWebBrowser(adapter),\n          paywallConfig,\n          routeConfig.customPaywallHtml,\n          unpaidBody,\n        ),\n      };\n    }\n\n    // Verify payment\n    try {\n      const matchingRequirements = this.ResourceServer.findMatchingRequirements(\n        paymentRequired.accepts,\n        paymentPayload,\n      );\n\n      if (!matchingRequirements) {\n        const errorResponse = await this.ResourceServer.createPaymentRequiredResponse(\n          requirements,\n          resourceInfo,\n          \"No matching payment requirements\",\n          routeConfig.extensions,\n          transportContext,\n        );\n        return {\n          type: \"payment-error\",\n          response: this.createHTTPResponse(errorResponse, false, paywallConfig),\n        };\n      }\n\n      const verifyResult = await this.ResourceServer.verifyPayment(\n        paymentPayload,\n        matchingRequirements,\n      );\n\n      if (!verifyResult.isValid) {\n        const errorResponse = await this.ResourceServer.createPaymentRequiredResponse(\n          requirements,\n          resourceInfo,\n          verifyResult.invalidReason,\n          routeConfig.extensions,\n          transportContext,\n        );\n        return {\n          type: \"payment-error\",\n          response: this.createHTTPResponse(errorResponse, false, paywallConfig),\n        };\n      }\n\n      // Payment is valid, return data needed for settlement\n      return {\n        type: \"payment-verified\",\n        paymentPayload,\n        paymentRequirements: matchingRequirements,\n        declaredExtensions: routeConfig.extensions,\n      };\n    } catch (error) {\n      if (error instanceof FacilitatorResponseError) {\n        throw error;\n      }\n      const errorResponse = await this.ResourceServer.createPaymentRequiredResponse(\n        requirements,\n        resourceInfo,\n        error instanceof Error ? error.message : \"Payment verification failed\",\n        routeConfig.extensions,\n        transportContext,\n      );\n      return {\n        type: \"payment-error\",\n        response: this.createHTTPResponse(errorResponse, false, paywallConfig),\n      };\n    }\n  }\n\n  /**\n   * Process settlement after successful response\n   *\n   * @param paymentPayload - The verified payment payload\n   * @param requirements - The matching payment requirements\n   * @param declaredExtensions - Optional declared extensions (for per-key enrichment)\n   * @param transportContext - Optional HTTP transport context\n   * @param settlementOverrides - Optional settlement overrides (e.g., partial settlement amount)\n   * @returns ProcessSettleResultResponse - SettleResponse with headers if success or errorReason if failure\n   */\n  async processSettlement(\n    paymentPayload: PaymentPayload,\n    requirements: PaymentRequirements,\n    declaredExtensions?: Record<string, unknown>,\n    transportContext?: HTTPTransportContext,\n    settlementOverrides?: SettlementOverrides,\n  ): Promise<ProcessSettleResultResponse> {\n    if (transportContext?.request && !transportContext.request.method) {\n      transportContext = {\n        ...transportContext,\n        request: {\n          ...transportContext.request,\n          method: transportContext.request.adapter.getMethod(),\n        },\n      };\n    }\n    try {\n      // Resolve overrides: explicit param takes precedence, fall back to response header\n      let resolvedOverrides = settlementOverrides;\n      if (!resolvedOverrides && transportContext?.responseHeaders) {\n        const overridesKey = SETTLEMENT_OVERRIDES_HEADER.toLowerCase();\n        const rawValue = Object.entries(transportContext.responseHeaders).find(\n          ([key]) => key.toLowerCase() === overridesKey,\n        )?.[1];\n        if (rawValue) {\n          try {\n            resolvedOverrides = JSON.parse(rawValue);\n          } catch {\n            // Ignore malformed header\n          }\n        }\n      }\n\n      const settleResponse = await this.ResourceServer.settlePayment(\n        paymentPayload,\n        requirements,\n        declaredExtensions,\n        transportContext,\n        resolvedOverrides,\n      );\n\n      if (!settleResponse.success) {\n        const failure = {\n          ...settleResponse,\n          success: false as const,\n          errorReason: settleResponse.errorReason || \"Settlement failed\",\n          errorMessage:\n            settleResponse.errorMessage || settleResponse.errorReason || \"Settlement failed\",\n          headers: this.createSettlementHeaders(settleResponse),\n        };\n        const response = await this.buildSettlementFailureResponse(failure, transportContext);\n        return { ...failure, response };\n      }\n\n      return {\n        ...settleResponse,\n        success: true,\n        headers: this.createSettlementHeaders(settleResponse),\n        requirements,\n      };\n    } catch (error) {\n      if (error instanceof FacilitatorResponseError) {\n        throw error;\n      }\n      if (error instanceof SettleError) {\n        const errorReason = error.errorReason || error.message;\n        const settleResponse: SettleResponse = {\n          success: false,\n          errorReason,\n          errorMessage: error.errorMessage || errorReason,\n          payer: error.payer,\n          network: error.network,\n          transaction: error.transaction,\n        };\n        const failure = {\n          ...settleResponse,\n          success: false as const,\n          errorReason,\n          headers: this.createSettlementHeaders(settleResponse),\n        };\n        const response = await this.buildSettlementFailureResponse(failure, transportContext);\n        return { ...failure, response };\n      }\n      const errorReason = error instanceof Error ? error.message : \"Settlement failed\";\n      const settleResponse: SettleResponse = {\n        success: false,\n        errorReason,\n        errorMessage: errorReason,\n        network: requirements.network as Network,\n        transaction: \"\",\n      };\n      const failure = {\n        ...settleResponse,\n        success: false as const,\n        errorReason,\n        headers: this.createSettlementHeaders(settleResponse),\n      };\n      const response = await this.buildSettlementFailureResponse(failure, transportContext);\n      return { ...failure, response };\n    }\n  }\n\n  /**\n   * Check if a request requires payment based on route configuration\n   *\n   * @param context - HTTP request context\n   * @returns True if the route requires payment, false otherwise\n   */\n  requiresPayment(context: HTTPRequestContext): boolean {\n    const method = context.method || context.adapter.getMethod();\n    return this.getRouteConfig(context.path, method) !== undefined;\n  }\n\n  /**\n   * Build HTTPResponseInstructions for settlement failure.\n   * Uses settlementFailedResponseBody hook if configured, otherwise defaults to empty body.\n   *\n   * @param failure - Settlement failure result with headers\n   * @param transportContext - Optional HTTP transport context for the request\n   * @returns HTTP response instructions for the 402 settlement failure response\n   */\n  private async buildSettlementFailureResponse(\n    failure: Omit<ProcessSettleFailureResponse, \"response\">,\n    transportContext?: HTTPTransportContext,\n  ): Promise<HTTPResponseInstructions> {\n    const settlementHeaders = failure.headers;\n    const routeConfig = transportContext\n      ? this.getRouteConfig(transportContext.request.path, transportContext.request.method)\n      : undefined;\n\n    const customBody = routeConfig?.config.settlementFailedResponseBody\n      ? await routeConfig.config.settlementFailedResponseBody(transportContext!.request, failure)\n      : undefined;\n\n    const contentType = customBody ? customBody.contentType : \"application/json\";\n    const body = customBody ? customBody.body : {};\n\n    return {\n      status: 402,\n      headers: {\n        \"Content-Type\": contentType,\n        ...settlementHeaders,\n      },\n      body,\n      isHtml: contentType.includes(\"text/html\"),\n    };\n  }\n\n  /**\n   * Normalizes a RouteConfig's accepts field into an array of PaymentOptions\n   * Handles both single PaymentOption and array formats\n   *\n   * @param routeConfig - Route configuration\n   * @returns Array of payment options\n   */\n  private normalizePaymentOptions(routeConfig: RouteConfig): PaymentOption[] {\n    return Array.isArray(routeConfig.accepts) ? routeConfig.accepts : [routeConfig.accepts];\n  }\n\n  /**\n   * Validates that all payment options in routes have corresponding registered schemes\n   * and facilitator support.\n   *\n   * @returns Array of validation errors (empty if all routes are valid)\n   */\n  private validateRouteConfiguration(): RouteValidationError[] {\n    const errors: RouteValidationError[] = [];\n\n    // Normalize routes to array of [pattern, config] pairs\n    const normalizedRoutes =\n      typeof this.routesConfig === \"object\" && !(\"accepts\" in this.routesConfig)\n        ? Object.entries(this.routesConfig as Record<string, RouteConfig>)\n        : [[\"*\", this.routesConfig as RouteConfig] as [string, RouteConfig]];\n\n    for (const [pattern, config] of normalizedRoutes) {\n      // Warn if wildcard routes are used with discovery extensions\n      const pathPart = pattern.includes(\" \") ? pattern.split(/\\s+/)[1] : pattern;\n      if (\n        pathPart &&\n        pathPart.includes(\"*\") &&\n        config.extensions &&\n        \"bazaar\" in config.extensions\n      ) {\n        console.warn(\n          `[x402] Route \"${pattern}\": Wildcard (*) patterns with bazaar discovery extensions ` +\n            `will auto-generate parameter names (var1, var2, ...). ` +\n            `Consider using named parameters instead (e.g. /weather/:city) for better discovery metadata.`,\n        );\n      }\n\n      const paymentOptions = this.normalizePaymentOptions(config);\n\n      for (const option of paymentOptions) {\n        // Check 1: Is scheme registered?\n        if (!this.ResourceServer.hasRegisteredScheme(option.network, option.scheme)) {\n          errors.push({\n            routePattern: pattern,\n            scheme: option.scheme,\n            network: option.network,\n            reason: \"missing_scheme\",\n            message: `Route \"${pattern}\": No scheme implementation registered for \"${option.scheme}\" on network \"${option.network}\"`,\n          });\n          // Skip facilitator check if scheme isn't registered\n          continue;\n        }\n\n        // Check 2: Does facilitator support this scheme/network combination?\n        const supportedKind = this.ResourceServer.getSupportedKind(\n          x402Version,\n          option.network,\n          option.scheme,\n        );\n\n        if (!supportedKind) {\n          errors.push({\n            routePattern: pattern,\n            scheme: option.scheme,\n            network: option.network,\n            reason: \"missing_facilitator\",\n            message: `Route \"${pattern}\": Facilitator does not support scheme \"${option.scheme}\" on network \"${option.network}\"`,\n          });\n        }\n      }\n    }\n\n    return errors;\n  }\n\n  /**\n   * Get route configuration for a request\n   *\n   * @param path - Request path\n   * @param method - HTTP method\n   * @returns Route configuration and pattern, or undefined if no match\n   */\n  private getRouteConfig(\n    path: string,\n    method: string,\n  ): { config: RouteConfig; pattern: string } | undefined {\n    const normalizedPath = this.normalizePath(path);\n    const upperMethod = method.toUpperCase();\n\n    const matchingRoute = this.compiledRoutes.find(\n      route =>\n        route.regex.test(normalizedPath) && (route.verb === \"*\" || route.verb === upperMethod),\n    );\n\n    if (!matchingRoute) return undefined;\n    return { config: matchingRoute.config, pattern: matchingRoute.pattern };\n  }\n\n  /**\n   * Extract payment from HTTP headers (handles v1 and v2)\n   *\n   * @param adapter - HTTP adapter\n   * @returns Decoded payment payload or null\n   */\n  private extractPayment(adapter: HTTPAdapter): PaymentPayload | null {\n    // Check v2 header first (PAYMENT-SIGNATURE)\n    const header = adapter.getHeader(\"payment-signature\") || adapter.getHeader(\"PAYMENT-SIGNATURE\");\n\n    if (header) {\n      try {\n        return decodePaymentSignatureHeader(header);\n      } catch (error) {\n        console.warn(\"Failed to decode PAYMENT-SIGNATURE header:\", error);\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Check if request is from a web browser\n   *\n   * @param adapter - HTTP adapter\n   * @returns True if request appears to be from a browser\n   */\n  private isWebBrowser(adapter: HTTPAdapter): boolean {\n    const accept = adapter.getAcceptHeader();\n    const userAgent = adapter.getUserAgent();\n    return accept.includes(\"text/html\") && userAgent.includes(\"Mozilla\");\n  }\n\n  /**\n   * Create HTTP response instructions from payment required\n   *\n   * @param paymentRequired - Payment requirements\n   * @param isWebBrowser - Whether request is from browser\n   * @param paywallConfig - Paywall configuration\n   * @param customHtml - Custom HTML template\n   * @param unpaidResponse - Optional custom response (content type and body) for unpaid API requests\n   * @returns Response instructions\n   */\n  private createHTTPResponse(\n    paymentRequired: PaymentRequired,\n    isWebBrowser: boolean,\n    paywallConfig?: PaywallConfig,\n    customHtml?: string,\n    unpaidResponse?: HTTPResponseBody,\n  ): HTTPResponseInstructions {\n    // Use 412 Precondition Failed for permit2_allowance_required error\n    // This signals client needs to approve Permit2 before retrying\n    const status = paymentRequired.error === \"permit2_allowance_required\" ? 412 : 402;\n\n    if (isWebBrowser) {\n      const html = this.generatePaywallHTML(paymentRequired, paywallConfig, customHtml);\n      return {\n        status,\n        headers: { \"Content-Type\": \"text/html\" },\n        body: html,\n        isHtml: true,\n      };\n    }\n\n    const response = this.createHTTPPaymentRequiredResponse(paymentRequired);\n\n    // Use callback result if provided, otherwise default to JSON with empty object\n    const contentType = unpaidResponse ? unpaidResponse.contentType : \"application/json\";\n    const body = unpaidResponse ? unpaidResponse.body : {};\n\n    return {\n      status,\n      headers: {\n        \"Content-Type\": contentType,\n        ...response.headers,\n      },\n      body,\n    };\n  }\n\n  /**\n   * Create HTTP payment required response (v1 puts in body, v2 puts in header)\n   *\n   * @param paymentRequired - Payment required object\n   * @returns Headers and body for the HTTP response\n   */\n  private createHTTPPaymentRequiredResponse(paymentRequired: PaymentRequired): {\n    headers: Record<string, string>;\n  } {\n    return {\n      headers: {\n        \"PAYMENT-REQUIRED\": encodePaymentRequiredHeader(paymentRequired),\n      },\n    };\n  }\n\n  /**\n   * Create settlement response headers\n   *\n   * @param settleResponse - Settlement response\n   * @returns Headers to add to response\n   */\n  private createSettlementHeaders(settleResponse: SettleResponse): Record<string, string> {\n    const encoded = encodePaymentResponseHeader(settleResponse);\n    return { \"PAYMENT-RESPONSE\": encoded };\n  }\n\n  /**\n   * Parse route pattern into verb and regex\n   *\n   * @param pattern - Route pattern like \"GET /api/*\", \"/api/[id]\", or \"/api/:id\"\n   * @returns Parsed pattern with verb and regex\n   */\n  private parseRoutePattern(pattern: string): { verb: string; regex: RegExp; path: string } {\n    const [verb, path] = pattern.includes(\" \") ? pattern.split(/\\s+/) : [\"*\", pattern];\n\n    const regex = new RegExp(\n      `^${\n        path\n          .replace(/\\\\/g, \"\\\\\\\\\") // Escape backslashes first\n          .replace(/[$()+.?^{|}]/g, \"\\\\$&\") // Escape regex special chars\n          .replace(/\\*/g, \".*?\") // Wildcards\n          .replace(/\\[([^\\]]+)\\]/g, \"[^/]+\") // Parameters (Next.js style [param])\n          .replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, \"[^/]+\") // Parameters (Express style :param)\n          .replace(/\\//g, \"\\\\/\") // Escape slashes\n      }$`,\n      \"i\",\n    );\n\n    return { verb: verb.toUpperCase(), regex, path };\n  }\n\n  /**\n   * Normalize path for matching\n   *\n   * @param path - Raw path from request\n   * @returns Normalized path\n   */\n  private normalizePath(path: string): string {\n    const pathWithoutQuery = path.split(/[?#]/)[0];\n\n    let decodedOrRawPath: string;\n    try {\n      decodedOrRawPath = decodeURIComponent(pathWithoutQuery);\n    } catch {\n      decodedOrRawPath = pathWithoutQuery;\n    }\n\n    return decodedOrRawPath\n      .replace(/\\\\/g, \"/\")\n      .replace(/\\/+/g, \"/\")\n      .replace(/(.+?)\\/+$/, \"$1\");\n  }\n\n  /**\n   * Generate paywall HTML for browser requests\n   *\n   * @param paymentRequired - Payment required response\n   * @param paywallConfig - Optional paywall configuration\n   * @param customHtml - Optional custom HTML template\n   * @returns HTML string\n   */\n  private generatePaywallHTML(\n    paymentRequired: PaymentRequired,\n    paywallConfig?: PaywallConfig,\n    customHtml?: string,\n  ): string {\n    if (customHtml) {\n      return customHtml;\n    }\n\n    // Use custom paywall provider if set\n    if (this.paywallProvider) {\n      return this.paywallProvider.generateHtml(paymentRequired, paywallConfig);\n    }\n\n    // Try to use @x402/paywall if available (optional dependency)\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-require-imports\n      const paywall = require(\"@x402/paywall\");\n      const displayAmount = this.getDisplayAmount(paymentRequired);\n      const resource = paymentRequired.resource;\n\n      return paywall.getPaywallHtml({\n        amount: displayAmount,\n        paymentRequired,\n        currentUrl: resource?.url || paywallConfig?.currentUrl || \"\",\n        testnet: paywallConfig?.testnet ?? true,\n        appName: paywallConfig?.appName,\n        appLogo: paywallConfig?.appLogo,\n        sessionTokenEndpoint: paywallConfig?.sessionTokenEndpoint,\n      });\n    } catch {\n      // @x402/paywall not installed, fall back to basic HTML\n    }\n\n    // Fallback: Basic HTML paywall\n    const resource = paymentRequired.resource;\n    const displayAmount = this.getDisplayAmount(paymentRequired);\n\n    return `\n      <!DOCTYPE html>\n      <html>\n        <head>\n          <title>Payment Required</title>\n          <meta charset=\"UTF-8\">\n          <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n        </head>\n        <body>\n          <div style=\"max-width: 600px; margin: 50px auto; padding: 20px; font-family: system-ui, -apple-system, sans-serif;\">\n            ${paywallConfig?.appLogo ? `<img src=\"${paywallConfig.appLogo}\" alt=\"${paywallConfig.appName || \"App\"}\" style=\"max-width: 200px; margin-bottom: 20px;\">` : \"\"}\n            <h1>Payment Required</h1>\n            ${resource ? `<p><strong>Resource:</strong> ${resource.description || resource.url}</p>` : \"\"}\n            <p><strong>Amount:</strong> $${displayAmount.toFixed(2)} USDC</p>\n            <div id=\"payment-widget\" \n                 data-requirements='${JSON.stringify(paymentRequired)}'\n                 data-app-name=\"${paywallConfig?.appName || \"\"}\"\n                 data-testnet=\"${paywallConfig?.testnet || false}\">\n              <!-- Install @x402/paywall for full wallet integration -->\n              <p style=\"margin-top: 2rem; padding: 1rem; background: #fef3c7; border-radius: 0.5rem;\">\n                <strong>Note:</strong> Install <code>@x402/paywall</code> for full wallet connection and payment UI.\n              </p>\n            </div>\n          </div>\n        </body>\n      </html>\n    `;\n  }\n\n  /**\n   * Extract display amount from payment requirements.\n   *\n   * @param paymentRequired - The payment required object\n   * @returns The display amount in decimal format\n   */\n  private getDisplayAmount(paymentRequired: PaymentRequired): number {\n    const accepts = paymentRequired.accepts;\n    if (accepts && accepts.length > 0) {\n      const firstReq = accepts[0];\n      if (\"amount\" in firstReq) {\n        // V2 format\n        return parseFloat(firstReq.amount) / 1000000; // Assuming USDC with 6 decimals\n      }\n    }\n    return 0;\n  }\n}\n", "import { PaymentPayload, PaymentRequirements } from \"../types/payments\";\nimport {\n  VerifyResponse,\n  SettleResponse,\n  SupportedResponse,\n  VerifyError,\n  SettleError,\n  FacilitatorResponseError,\n} from \"../types/facilitator\";\nimport { z } from \"../schemas\";\n\nconst DEFAULT_FACILITATOR_URL = \"https://x402.org/facilitator\";\n\nexport interface FacilitatorConfig {\n  url?: string;\n  createAuthHeaders?: () => Promise<{\n    verify: Record<string, string>;\n    settle: Record<string, string>;\n    supported: Record<string, string>;\n  }>;\n}\n\n/**\n * Interface for facilitator clients\n * Can be implemented for HTTP-based or local facilitators\n */\nexport interface FacilitatorClient {\n  /**\n   * Verify a payment with the facilitator\n   *\n   * @param paymentPayload - The payment to verify\n   * @param paymentRequirements - The requirements to verify against\n   * @returns Verification response\n   */\n  verify(\n    paymentPayload: PaymentPayload,\n    paymentRequirements: PaymentRequirements,\n  ): Promise<VerifyResponse>;\n\n  /**\n   * Settle a payment with the facilitator\n   *\n   * @param paymentPayload - The payment to settle\n   * @param paymentRequirements - The requirements for settlement\n   * @returns Settlement response\n   */\n  settle(\n    paymentPayload: PaymentPayload,\n    paymentRequirements: PaymentRequirements,\n  ): Promise<SettleResponse>;\n\n  /**\n   * Get supported payment kinds and extensions from the facilitator\n   *\n   * @returns Supported payment kinds and extensions\n   */\n  getSupported(): Promise<SupportedResponse>;\n}\n\n/** Number of retries for getSupported() on 429 rate limit errors */\nconst GET_SUPPORTED_RETRIES = 3;\n/** Base delay in ms for exponential backoff on retries */\nconst GET_SUPPORTED_RETRY_DELAY_MS = 1000;\n\nconst verifyResponseSchema: z.ZodType<VerifyResponse, z.ZodTypeDef, unknown> = z.object({\n  isValid: z.boolean(),\n  invalidReason: z\n    .string()\n    .nullish()\n    .transform(v => v ?? undefined),\n  invalidMessage: z\n    .string()\n    .nullish()\n    .transform(v => v ?? undefined),\n  payer: z\n    .string()\n    .nullish()\n    .transform(v => v ?? undefined),\n  extensions: z\n    .record(z.string(), z.unknown())\n    .nullish()\n    .transform(v => v ?? undefined),\n});\n\nconst settleResponseSchema: z.ZodType<SettleResponse, z.ZodTypeDef, unknown> = z.object({\n  success: z.boolean(),\n  errorReason: z\n    .string()\n    .nullish()\n    .transform(v => v ?? undefined),\n  errorMessage: z\n    .string()\n    .nullish()\n    .transform(v => v ?? undefined),\n  payer: z\n    .string()\n    .nullish()\n    .transform(v => v ?? undefined),\n  transaction: z.string(),\n  network: z.custom<SettleResponse[\"network\"]>(value => typeof value === \"string\"),\n  extensions: z\n    .record(z.string(), z.unknown())\n    .nullish()\n    .transform(v => v ?? undefined),\n});\n\nconst supportedKindSchema: z.ZodType<SupportedResponse[\"kinds\"][number], z.ZodTypeDef, unknown> =\n  z.object({\n    x402Version: z.number(),\n    scheme: z.string(),\n    network: z.custom<SupportedResponse[\"kinds\"][number][\"network\"]>(\n      value => typeof value === \"string\",\n    ),\n    extra: z\n      .record(z.string(), z.unknown())\n      .nullish()\n      .transform(v => v ?? undefined),\n  });\n\nconst supportedResponseSchema: z.ZodType<SupportedResponse, z.ZodTypeDef, unknown> = z.object({\n  kinds: z.array(supportedKindSchema),\n  extensions: z.array(z.string()).default([]),\n  signers: z.record(z.string(), z.array(z.string())).default({}),\n});\n\n/**\n * Produces a compact excerpt of a facilitator response body for error messages.\n *\n * @param text - The raw response body text\n * @param limit - The maximum number of characters to include\n * @returns A normalized excerpt suitable for logs and thrown errors\n */\nfunction responseExcerpt(text: string, limit: number = 200): string {\n  const compact = text.trim().replace(/\\s+/g, \" \");\n  if (!compact) {\n    return \"<empty response>\";\n  }\n\n  if (compact.length <= limit) {\n    return compact;\n  }\n\n  return `${compact.slice(0, limit - 3)}...`;\n}\n\n/**\n * Parses and validates a successful facilitator response body.\n *\n * @param response - The HTTP response returned by the facilitator\n * @param schema - The schema used to validate the response payload\n * @param operation - The facilitator operation name for error reporting\n * @returns The validated facilitator payload\n */\nasync function parseSuccessResponse<T>(\n  response: Response,\n  schema: z.ZodType<T, z.ZodTypeDef, unknown>,\n  operation: string,\n): Promise<T> {\n  const text = await response.text();\n\n  let data: unknown;\n  try {\n    data = JSON.parse(text);\n  } catch {\n    throw new FacilitatorResponseError(\n      `Facilitator ${operation} returned invalid JSON: ${responseExcerpt(text)}`,\n    );\n  }\n\n  const parsed = schema.safeParse(data);\n  if (!parsed.success) {\n    throw new FacilitatorResponseError(\n      `Facilitator ${operation} returned invalid data: ${responseExcerpt(text)}`,\n    );\n  }\n\n  return parsed.data;\n}\n\n/**\n * HTTP-based client for interacting with x402 facilitator services\n * Handles HTTP communication with facilitator endpoints\n */\nexport class HTTPFacilitatorClient implements FacilitatorClient {\n  readonly url: string;\n  private readonly _createAuthHeaders?: FacilitatorConfig[\"createAuthHeaders\"];\n\n  /**\n   * Creates a new HTTPFacilitatorClient instance.\n   *\n   * @param config - Configuration options for the facilitator client\n   */\n  constructor(config?: FacilitatorConfig) {\n    // Normalize URL: strip trailing slashes to prevent redirect loops (e.g. 308)\n    // when constructing endpoint paths like `${url}/supported`\n    this.url = (config?.url || DEFAULT_FACILITATOR_URL).replace(/\\/+$/, \"\");\n    this._createAuthHeaders = config?.createAuthHeaders;\n  }\n\n  /**\n   * Verify a payment with the facilitator\n   *\n   * @param paymentPayload - The payment to verify\n   * @param paymentRequirements - The requirements to verify against\n   * @returns Verification response\n   */\n  async verify(\n    paymentPayload: PaymentPayload,\n    paymentRequirements: PaymentRequirements,\n  ): Promise<VerifyResponse> {\n    let headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n\n    if (this._createAuthHeaders) {\n      const authHeaders = await this.createAuthHeaders(\"verify\");\n      headers = { ...headers, ...authHeaders.headers };\n    }\n\n    const response = await fetch(`${this.url}/verify`, {\n      method: \"POST\",\n      headers,\n      redirect: \"follow\",\n      body: JSON.stringify({\n        x402Version: paymentPayload.x402Version,\n        paymentPayload: this.toJsonSafe(paymentPayload),\n        paymentRequirements: this.toJsonSafe(paymentRequirements),\n      }),\n    });\n\n    if (!response.ok) {\n      const text = await response.text();\n      let data: unknown;\n      try {\n        data = JSON.parse(text);\n      } catch {\n        throw new Error(`Facilitator verify failed (${response.status}): ${responseExcerpt(text)}`);\n      }\n\n      if (typeof data === \"object\" && data !== null && \"isValid\" in data) {\n        throw new VerifyError(response.status, data as VerifyResponse);\n      }\n\n      throw new Error(\n        `Facilitator verify failed (${response.status}): ${responseExcerpt(JSON.stringify(data))}`,\n      );\n    }\n\n    return parseSuccessResponse(response, verifyResponseSchema, \"verify\");\n  }\n\n  /**\n   * Settle a payment with the facilitator\n   *\n   * @param paymentPayload - The payment to settle\n   * @param paymentRequirements - The requirements for settlement\n   * @returns Settlement response\n   */\n  async settle(\n    paymentPayload: PaymentPayload,\n    paymentRequirements: PaymentRequirements,\n  ): Promise<SettleResponse> {\n    let headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n\n    if (this._createAuthHeaders) {\n      const authHeaders = await this.createAuthHeaders(\"settle\");\n      headers = { ...headers, ...authHeaders.headers };\n    }\n\n    const response = await fetch(`${this.url}/settle`, {\n      method: \"POST\",\n      headers,\n      redirect: \"follow\",\n      body: JSON.stringify({\n        x402Version: paymentPayload.x402Version,\n        paymentPayload: this.toJsonSafe(paymentPayload),\n        paymentRequirements: this.toJsonSafe(paymentRequirements),\n      }),\n    });\n\n    if (!response.ok) {\n      const text = await response.text();\n      let data: unknown;\n      try {\n        data = JSON.parse(text);\n      } catch {\n        throw new Error(`Facilitator settle failed (${response.status}): ${responseExcerpt(text)}`);\n      }\n\n      if (typeof data === \"object\" && data !== null && \"success\" in data) {\n        throw new SettleError(response.status, data as SettleResponse);\n      }\n\n      throw new Error(\n        `Facilitator settle failed (${response.status}): ${responseExcerpt(JSON.stringify(data))}`,\n      );\n    }\n\n    return parseSuccessResponse(response, settleResponseSchema, \"settle\");\n  }\n\n  /**\n   * Get supported payment kinds and extensions from the facilitator.\n   * Retries with exponential backoff on 429 rate limit errors.\n   *\n   * @returns Supported payment kinds and extensions\n   */\n  async getSupported(): Promise<SupportedResponse> {\n    let headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n\n    if (this._createAuthHeaders) {\n      const authHeaders = await this.createAuthHeaders(\"supported\");\n      headers = { ...headers, ...authHeaders.headers };\n    }\n\n    let lastError: Error | null = null;\n    for (let attempt = 0; attempt < GET_SUPPORTED_RETRIES; attempt++) {\n      const response = await fetch(`${this.url}/supported`, {\n        method: \"GET\",\n        headers,\n        redirect: \"follow\",\n      });\n\n      if (response.ok) {\n        return parseSuccessResponse(response, supportedResponseSchema, \"supported\");\n      }\n\n      const errorText = await response.text().catch(() => response.statusText);\n      lastError = new Error(\n        `Facilitator getSupported failed (${response.status}): ${responseExcerpt(errorText)}`,\n      );\n\n      // Retry on 429 rate limit errors with exponential backoff\n      if (response.status === 429 && attempt < GET_SUPPORTED_RETRIES - 1) {\n        const delay = GET_SUPPORTED_RETRY_DELAY_MS * Math.pow(2, attempt);\n        await new Promise(resolve => setTimeout(resolve, delay));\n        continue;\n      }\n\n      throw lastError;\n    }\n\n    throw lastError ?? new Error(\"Facilitator getSupported failed after retries\");\n  }\n\n  /**\n   * Creates authentication headers for a specific path.\n   *\n   * @param path - The path to create authentication headers for (e.g., \"verify\", \"settle\", \"supported\")\n   * @returns An object containing the authentication headers for the specified path\n   */\n  async createAuthHeaders(path: string): Promise<{\n    headers: Record<string, string>;\n  }> {\n    if (this._createAuthHeaders) {\n      const authHeaders = (await this._createAuthHeaders()) as Record<\n        string,\n        Record<string, string>\n      >;\n      return {\n        headers: authHeaders[path] ?? {},\n      };\n    }\n    return {\n      headers: {},\n    };\n  }\n\n  /**\n   * Helper to convert objects to JSON-safe format.\n   * Handles BigInt and other non-JSON types.\n   *\n   * @param obj - The object to convert\n   * @returns The JSON-safe representation of the object\n   */\n  private toJsonSafe(obj: unknown): unknown {\n    return JSON.parse(\n      JSON.stringify(obj, (_, value) => (typeof value === \"bigint\" ? value.toString() : value)),\n    );\n  }\n}\n", "import {\n  decodePaymentRequiredHeader,\n  decodePaymentResponseHeader,\n  encodePaymentSignatureHeader,\n} from \".\";\nimport { SettleResponse } from \"../types\";\nimport { PaymentPayload, PaymentRequired } from \"../types/payments\";\nimport { x402Client } from \"../client/x402Client\";\n\n/**\n * Context provided to onPaymentRequired hooks.\n */\nexport interface PaymentRequiredContext {\n  paymentRequired: PaymentRequired;\n}\n\n/**\n * Hook called when a 402 response is received, before payment processing.\n * Return headers to try before payment, or void to proceed directly to payment.\n */\nexport type PaymentRequiredHook = (\n  context: PaymentRequiredContext,\n) => Promise<{ headers: Record<string, string> } | void>;\n\n/**\n * HTTP-specific client for handling x402 payment protocol over HTTP.\n *\n * Wraps a x402Client to provide HTTP-specific encoding/decoding functionality\n * for payment headers and responses while maintaining the builder pattern.\n */\nexport class x402HTTPClient {\n  private paymentRequiredHooks: PaymentRequiredHook[] = [];\n\n  /**\n   * Creates a new x402HTTPClient instance.\n   *\n   * @param client - The underlying x402Client for payment logic\n   */\n  constructor(private readonly client: x402Client) {}\n\n  /**\n   * Register a hook to handle 402 responses before payment.\n   * Hooks run in order; first to return headers wins.\n   *\n   * @param hook - The hook function to register\n   * @returns This instance for chaining\n   */\n  onPaymentRequired(hook: PaymentRequiredHook): this {\n    this.paymentRequiredHooks.push(hook);\n    return this;\n  }\n\n  /**\n   * Run hooks and return headers if any hook provides them.\n   *\n   * @param paymentRequired - The payment required response from the server\n   * @returns Headers to use for retry, or null to proceed to payment\n   */\n  async handlePaymentRequired(\n    paymentRequired: PaymentRequired,\n  ): Promise<Record<string, string> | null> {\n    for (const hook of this.paymentRequiredHooks) {\n      const result = await hook({ paymentRequired });\n      if (result?.headers) {\n        return result.headers;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Encodes a payment payload into appropriate HTTP headers based on version.\n   *\n   * @param paymentPayload - The payment payload to encode\n   * @returns HTTP headers containing the encoded payment signature\n   */\n  encodePaymentSignatureHeader(paymentPayload: PaymentPayload): Record<string, string> {\n    switch (paymentPayload.x402Version) {\n      case 2:\n        return {\n          \"PAYMENT-SIGNATURE\": encodePaymentSignatureHeader(paymentPayload),\n        };\n      case 1:\n        return {\n          \"X-PAYMENT\": encodePaymentSignatureHeader(paymentPayload),\n        };\n      default:\n        throw new Error(\n          `Unsupported x402 version: ${(paymentPayload as PaymentPayload).x402Version}`,\n        );\n    }\n  }\n\n  /**\n   * Extracts payment required information from HTTP response.\n   *\n   * @param getHeader - Function to retrieve header value by name (case-insensitive)\n   * @param body - Optional response body for v1 compatibility\n   * @returns The payment required object\n   */\n  getPaymentRequiredResponse(\n    getHeader: (name: string) => string | null | undefined,\n    body?: unknown,\n  ): PaymentRequired {\n    // v2\n    const paymentRequired = getHeader(\"PAYMENT-REQUIRED\");\n    if (paymentRequired) {\n      return decodePaymentRequiredHeader(paymentRequired);\n    }\n\n    // v1\n    if (\n      body &&\n      body instanceof Object &&\n      \"x402Version\" in body &&\n      (body as PaymentRequired).x402Version === 1\n    ) {\n      return body as PaymentRequired;\n    }\n\n    throw new Error(\"Invalid payment required response\");\n  }\n\n  /**\n   * Extracts payment settlement response from HTTP headers.\n   *\n   * @param getHeader - Function to retrieve header value by name (case-insensitive)\n   * @returns The settlement response object\n   */\n  getPaymentSettleResponse(getHeader: (name: string) => string | null | undefined): SettleResponse {\n    // v2\n    const paymentResponse = getHeader(\"PAYMENT-RESPONSE\");\n    if (paymentResponse) {\n      return decodePaymentResponseHeader(paymentResponse);\n    }\n\n    // v1\n    const xPaymentResponse = getHeader(\"X-PAYMENT-RESPONSE\");\n    if (xPaymentResponse) {\n      return decodePaymentResponseHeader(xPaymentResponse);\n    }\n\n    throw new Error(\"Payment response header not found\");\n  }\n\n  /**\n   * Creates a payment payload for the given payment requirements.\n   * Delegates to the underlying x402Client.\n   *\n   * @param paymentRequired - The payment required response from the server\n   * @returns Promise resolving to the payment payload\n   */\n  async createPaymentPayload(paymentRequired: PaymentRequired): Promise<PaymentPayload> {\n    return this.client.createPaymentPayload(paymentRequired);\n  }\n}\n", "import { SettleResponse } from \"../types\";\nimport { PaymentPayload, PaymentRequired } from \"../types/payments\";\nimport { Base64EncodedRegex, safeBase64Decode, safeBase64Encode } from \"../utils\";\n\n// HTTP Methods that typically use query parameters\nexport type QueryParamMethods = \"GET\" | \"HEAD\" | \"DELETE\";\n\n// HTTP Methods that typically use request body\nexport type BodyMethods = \"POST\" | \"PUT\" | \"PATCH\";\n\n/**\n * Encodes a payment payload as a base64 header value.\n *\n * @param paymentPayload - The payment payload to encode\n * @returns Base64 encoded string representation of the payment payload\n */\nexport function encodePaymentSignatureHeader(paymentPayload: PaymentPayload): string {\n  return safeBase64Encode(JSON.stringify(paymentPayload));\n}\n\n/**\n * Decodes a base64 payment signature header into a payment payload.\n *\n * @param paymentSignatureHeader - The base64 encoded payment signature header\n * @returns The decoded payment payload\n */\nexport function decodePaymentSignatureHeader(paymentSignatureHeader: string): PaymentPayload {\n  if (!Base64EncodedRegex.test(paymentSignatureHeader)) {\n    throw new Error(\"Invalid payment signature header\");\n  }\n  return JSON.parse(safeBase64Decode(paymentSignatureHeader)) as PaymentPayload;\n}\n\n/**\n * Encodes a payment required object as a base64 header value.\n *\n * @param paymentRequired - The payment required object to encode\n * @returns Base64 encoded string representation of the payment required object\n */\nexport function encodePaymentRequiredHeader(paymentRequired: PaymentRequired): string {\n  return safeBase64Encode(JSON.stringify(paymentRequired));\n}\n\n/**\n * Decodes a base64 payment required header into a payment required object.\n *\n * @param paymentRequiredHeader - The base64 encoded payment required header\n * @returns The decoded payment required object\n */\nexport function decodePaymentRequiredHeader(paymentRequiredHeader: string): PaymentRequired {\n  if (!Base64EncodedRegex.test(paymentRequiredHeader)) {\n    throw new Error(\"Invalid payment required header\");\n  }\n  return JSON.parse(safeBase64Decode(paymentRequiredHeader)) as PaymentRequired;\n}\n\n/**\n * Encodes a payment response as a base64 header value.\n *\n * @param paymentResponse - The payment response to encode\n * @returns Base64 encoded string representation of the payment response\n */\nexport function encodePaymentResponseHeader(paymentResponse: SettleResponse): string {\n  return safeBase64Encode(JSON.stringify(paymentResponse));\n}\n\n/**\n * Decodes a base64 payment response header into a settle response.\n *\n * @param paymentResponseHeader - The base64 encoded payment response header\n * @returns The decoded settle response\n */\nexport function decodePaymentResponseHeader(paymentResponseHeader: string): SettleResponse {\n  if (!Base64EncodedRegex.test(paymentResponseHeader)) {\n    throw new Error(\"Invalid payment response header\");\n  }\n  return JSON.parse(safeBase64Decode(paymentResponseHeader)) as SettleResponse;\n}\n\n// Export HTTP service and types\nexport {\n  x402HTTPResourceServer,\n  HTTPAdapter,\n  HTTPRequestContext,\n  HTTPTransportContext,\n  HTTPResponseInstructions,\n  HTTPProcessResult,\n  PaywallConfig,\n  PaywallProvider,\n  PaymentOption,\n  RouteConfig,\n  RoutesConfig,\n  CompiledRoute,\n  DynamicPayTo,\n  DynamicPrice,\n  UnpaidResponseBody,\n  HTTPResponseBody,\n  SettlementFailedResponseBody,\n  ProcessSettleResultResponse,\n  ProcessSettleSuccessResponse,\n  ProcessSettleFailureResponse,\n  RouteValidationError,\n  RouteConfigurationError,\n  ProtectedRequestHook,\n} from \"./x402HTTPResourceServer\";\nexport {\n  HTTPFacilitatorClient,\n  FacilitatorClient,\n  FacilitatorConfig,\n} from \"./httpFacilitatorClient\";\nexport { FacilitatorResponseError, getFacilitatorResponseError } from \"../types\";\nexport { x402HTTPClient, PaymentRequiredContext, PaymentRequiredHook } from \"./x402HTTPClient\";\n", "import type { X402Authorization } from '@keyban/agent-wallet-protocol';\nimport type { Hex } from 'viem';\n\n/**\n * Build the x402 request header carrying the signed payment for the `exact`\n * EVM scheme. The value is `base64(JSON(PaymentPayload))`, which the seller's\n * `@x402` middleware base64-decodes and JSON-parses; `payload.signature` is the\n * ERC-7739-wrapped TSS signature and `payload.authorization` is the backend's\n * EIP-3009 envelope verbatim, so the settled transfer is exactly the one the\n * policy engine bound the intent to.\n *\n * The header *name* is version-specific: x402 v2 carries it in\n * `PAYMENT-SIGNATURE`, while v1 used `X-PAYMENT`. (Sending v1's name to a v2\n * seller is silently ignored \u2014 it just re-issues the 402.) We build the header\n * ourselves rather than going through `@x402/fetch`'s auto-pay because\n * discovery is done server-side: the agent never fetches the seller's 402, it\n * just settles with the envelope the backend already resolved and we signed.\n */\nexport function buildPaymentHeader(\n  auth: X402Authorization,\n  signature: Hex,\n): { name: string; value: string } {\n  // Scheme-specific payload (identical across versions for `exact` EVM).\n  const payload = {\n    signature,\n    authorization: {\n      from: auth.authorization.from,\n      to: auth.authorization.to,\n      value: auth.authorization.value,\n      validAfter: auth.authorization.validAfter,\n      validBefore: auth.authorization.validBefore,\n      nonce: auth.authorization.nonce,\n    },\n  };\n\n  // The envelope shape AND the header name are version-specific. v2 carries the\n  // full chosen requirement under `accepted` (the seller matches it against its\n  // `accepts[]`) in the `PAYMENT-SIGNATURE` header; v1 puts `scheme`/`network`\n  // at the top level in `X-PAYMENT`. Sending the v1 shape/name to a v2 seller\n  // is silently ignored (it just re-issues the 402).\n  if (auth.x402Version >= 2) {\n    const paymentPayload = {\n      x402Version: auth.x402Version,\n      accepted: auth.accepted,\n      payload,\n    };\n    return {\n      name: 'PAYMENT-SIGNATURE',\n      value: Buffer.from(JSON.stringify(paymentPayload), 'utf8').toString(\n        'base64',\n      ),\n    };\n  }\n\n  const paymentPayload = {\n    x402Version: auth.x402Version,\n    scheme: auth.scheme,\n    network: auth.network,\n    payload,\n  };\n  return {\n    name: 'X-PAYMENT',\n    value: Buffer.from(JSON.stringify(paymentPayload), 'utf8').toString(\n      'base64',\n    ),\n  };\n}\n", "import {\n  buildEip3009TypedData,\n  EIP3009_PRIMARY_TYPES,\n  type Eip3009Payment,\n  encodeMultiSignerSignature,\n  getUsdcChainEntry,\n  normalizeFrostSig,\n  recomputeErc7739Hash,\n  type X402Authorization,\n} from '@keyban/agent-wallet-protocol';\nimport type { Hex } from 'viem';\nimport { wrapTypedDataSignature } from 'viem/experimental/erc7739';\n\nimport { logger } from './logger.js';\nimport type { InitializedSession } from './session.js';\n\nfunction isSupportedPrimaryType(\n  value: string,\n): value is (typeof EIP3009_PRIMARY_TYPES)[number] {\n  return (EIP3009_PRIMARY_TYPES as readonly string[]).includes(value);\n}\n\n/**\n * Sign the backend-resolved x402 authorization with the wallet's TSS Schnorr\n * key wrapped in an ERC-7739 envelope, and return the wrapped signature ready\n * to drop into the X-PAYMENT header.\n *\n * The backend already did the x402 discovery, picked the recipient/amount, and\n * fixed the EIP-3009 nonce + validity window \u2014 so this only reconstructs the\n * canonical typed-data from that envelope, asserts its ERC-7739 hash matches\n * the backend's (refusing to sign on any drift), TSS-signs that hash, and wraps\n * it. The agent contributes nothing to what gets signed.\n *\n * The TSS sign call routes through `/sign`, which re-runs the policy at\n * authorization time: a `require_human` intent still awaiting approval is\n * denied there, surfacing as a thrown error the caller relays to the agent.\n */\nexport async function signX402Authorization(\n  session: InitializedSession,\n  auth: X402Authorization,\n): Promise<Hex> {\n  const { account, frostVerifierAddress } = session;\n\n  if (!isSupportedPrimaryType(auth.primaryType)) {\n    throw new Error(\n      `Unsupported x402 scheme: ${auth.primaryType}. Only EIP-3009 ` +\n        `(TransferWithAuthorization / ReceiveWithAuthorization) is supported today.`,\n    );\n  }\n\n  const chainId = Number(auth.chainId);\n  const registryEntry = getUsdcChainEntry(chainId);\n  if (!registryEntry) {\n    throw new Error(\n      `Unsupported chain for x402 USDC payment: chainId=${chainId}.`,\n    );\n  }\n\n  const payment: Eip3009Payment = {\n    primaryType: auth.primaryType,\n    chainId: BigInt(chainId),\n    from: auth.authorization.from as Hex,\n    to: auth.authorization.to as Hex,\n    value: BigInt(auth.authorization.value),\n    validAfter: BigInt(auth.authorization.validAfter),\n    validBefore: BigInt(auth.authorization.validBefore),\n    nonce: auth.authorization.nonce as Hex,\n  };\n\n  // Reconstruct the canonical typed-data the same way the backend did (shared\n  // `buildEip3009TypedData` + `recomputeErc7739Hash`), and assert the hash\n  // agrees byte-for-byte before signing. A mismatch means the backend and\n  // client disagree on what's being authorized \u2014 fail loudly, never sign it.\n  const typedData = buildEip3009TypedData(payment, registryEntry);\n  const hash = recomputeErc7739Hash({\n    accountAddress: account.address,\n    typedData,\n  });\n  if (hash.toLowerCase() !== auth.hash.toLowerCase()) {\n    throw new Error(\n      `x402/hash-mismatch: backend=${auth.hash} client=${hash}. Refusing to sign.`,\n    );\n  }\n\n  logger.info('Signing x402 EIP-3009 envelope (TSS Schnorr)...');\n  const rawSig = normalizeFrostSig(\n    await session.signer.sign(account.dkgBlob, hash),\n  );\n  const multiSig = encodeMultiSignerSignature(\n    rawSig,\n    normalizeFrostSig(account.publicKey),\n    frostVerifierAddress as Hex,\n  );\n\n  return wrapTypedDataSignature({\n    domain: typedData.domain,\n    types: typedData.types,\n    primaryType: typedData.primaryType,\n    message: typedData.message,\n    signature: multiSig,\n  });\n}\n", "import type { TypedData } from 'abitype'\nimport { serializeSignature } from '../../../accounts/index.js'\nimport type { ByteArray, Hex, Signature } from '../../../types/misc.js'\nimport type { TypedDataDefinition } from '../../../types/typedData.js'\nimport { encodePacked } from '../../../utils/abi/encodePacked.js'\nimport { type IsHexErrorType, isHex } from '../../../utils/data/isHex.js'\nimport { size } from '../../../utils/data/size.js'\nimport { bytesToHex, stringToHex } from '../../../utils/encoding/toHex.js'\nimport {\n  encodeType,\n  hashStruct,\n} from '../../../utils/signature/hashTypedData.js'\nimport { getTypesForEIP712Domain } from '../../../utils/typedData.js'\n\nexport type WrapTypedDataSignatureParameters<\n  typedData extends TypedData | Record<string, unknown> = TypedData,\n  primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n  ///\n  primaryTypes = typedData extends TypedData ? keyof typedData : string,\n> = TypedDataDefinition<typedData, primaryType, primaryTypes> & {\n  signature: Hex | ByteArray | Signature\n}\n\nexport type WrapTypedDataSignatureReturnType = Hex\n\nexport type WrapTypedDataSignatureErrorType = IsHexErrorType\n\n/**\n * Wraps a typed data signature for ERC-7739.\n *\n * @example\n * ```ts\n * const signature = wrapTypedDataSignature({\n *   domain: {\n *     name: 'Ether Mail',\n *     version: '1',\n *     chainId: 1,\n *     verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n *   },\n *   types: {\n *     Person: [\n *       { name: 'name', type: 'string' },\n *       { name: 'wallet', type: 'address' },\n *     ],\n *     Mail: [\n *       { name: 'from', type: 'Person' },\n *       { name: 'to', type: 'Person' },\n *       { name: 'contents', type: 'string' },\n *     ],\n *   },\n *   primaryType: 'Mail',\n *   message: {\n *     from: {\n *       name: 'Cow',\n *       wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n *     },\n *     to: {\n *       name: 'Bob',\n *       wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n *     },\n *     contents: 'Hello, Bob!',\n *   },\n *   signature: '0x...',\n * })\n * ```\n */\nexport function wrapTypedDataSignature(\n  parameters: WrapTypedDataSignatureParameters,\n): WrapTypedDataSignatureReturnType {\n  const { domain, message, primaryType, signature, types } = parameters\n\n  const signatureHex = (() => {\n    if (isHex(signature)) return signature\n    if (typeof signature === 'object' && 'r' in signature && 's' in signature)\n      return serializeSignature(signature)\n    return bytesToHex(signature)\n  })()\n\n  // Compute dependencies for wrapped signature.\n  const hashedDomain = hashStruct({\n    data: domain ?? {},\n    types: {\n      EIP712Domain: getTypesForEIP712Domain({ domain }),\n    },\n    primaryType: 'EIP712Domain',\n  })\n  const hashedContents = hashStruct({\n    data: message,\n    types: types as any,\n    primaryType,\n  })\n  const encodedType = encodeType({\n    primaryType,\n    types: types as any,\n  })\n\n  // Construct wrapped signature.\n  return encodePacked(\n    ['bytes', 'bytes32', 'bytes32', 'bytes', 'uint16'],\n    [\n      signatureHex,\n      hashedDomain,\n      hashedContents,\n      stringToHex(encodedType),\n      size(stringToHex(encodedType)),\n    ],\n  )\n}\n", "import type { X402Authorization } from '@keyban/agent-wallet-protocol';\nimport { decodePaymentResponseHeader } from '@x402/core/http';\nimport type { SettleResponse } from '@x402/core/types';\nimport { formatUnits, parseUnits, type Hex } from 'viem';\nimport { z } from 'zod';\nimport { ensureAccount } from '../lib/ensure-account.js';\nimport { logger } from '../lib/logger.js';\nimport { type Session } from '../lib/session.js';\nimport { buildPaymentHeader } from '../lib/x402-payment-header.js';\nimport { signX402Authorization } from '../lib/x402-signer.js';\nimport {\n  describeAccountState,\n  explainSettleReason,\n  explorerTxUrl,\n  isBroadcastFailure,\n} from '../lib/x402-diagnostics.js';\n\n/** USDC base-unit decimals \u2014 the only x402 asset the backend settles today. */\nconst USDC_DECIMALS = 6;\n\nconst SETTLE_ATTEMPTS = 3;\nconst SETTLE_RETRY_DELAY_MS = 1_000;\n\nfunction isTransientSettleFailure(\n  settle: SettleResponse | undefined,\n  response: Response,\n): boolean {\n  if (response.status === 429 || response.status >= 500) return true;\n  return isBroadcastFailure(\n    `${settle?.errorReason ?? ''} ${settle?.errorMessage ?? ''} ${\n      readChallengeError(response) ?? ''\n    }`,\n  );\n}\n\n/**\n * The backend mints a random 32-byte EIP-3009 nonce per intent, so a nonce is\n * spent only by the authorization that owns it: this refusal proves that this\n * exact payment already executed on-chain. It is what a re-send meets after a\n * settlement the facilitator completed but reported as a gateway error.\n */\nfunction isNonceAlreadySpent(\n  settle: SettleResponse | undefined,\n  response: Response,\n): boolean {\n  const haystack = `${settle?.errorReason ?? ''} ${\n    readChallengeError(response) ?? ''\n  }`;\n  return haystack.includes('nonce_already_used');\n}\n\nexport const x402PaySchema = z.object({\n  url: z.string().describe('The URL of the x402-protected resource to fetch'),\n  method: z\n    .string()\n    .optional()\n    .default('GET')\n    .describe('HTTP method (default: GET)'),\n  headers: z.record(z.string()).optional().describe('Additional HTTP headers'),\n  body: z.string().optional().describe('Request body (for POST/PUT)'),\n  maxAmount: z\n    .string()\n    .optional()\n    .describe(\n      'Optional spend ceiling in USDC (human-readable, e.g. \"0.001\"). The ' +\n        'backend rejects the payment if the seller asks for more \u2014 you never ' +\n        'overpay a price you did not anticipate.',\n    ),\n  intentId: z\n    .string()\n    .optional()\n    .describe(\n      'Resume a specific payment that already exists \u2014 pass the intentId the ' +\n        'tool returned when it asked for human approval, to sign and settle ' +\n        'that exact intent once approved. Omit it to start a new payment. ' +\n        'Concurrent payments to the same URL each have their own intentId.',\n    ),\n});\n\n// The settlement/verification result rides in the `payment-response` header\n// (the body is typically empty \u2014 a 402 settlement failure has a `{}` body but\n// the reason in this header). Decode it so both the success and failure paths\n// can surface what actually happened.\nfunction readSettleResponse(response: Response): SettleResponse | undefined {\n  const header =\n    response.headers.get('payment-response') ??\n    response.headers.get('x-payment-response');\n  if (!header) return undefined;\n  try {\n    return decodePaymentResponseHeader(header);\n  } catch {\n    return undefined;\n  }\n}\n\n// A failure BEFORE settlement (the facilitator's verify step) is reported as a\n// fresh 402 challenge rather than a settlement result, so its reason rides in\n// `payment-required` instead. Decode it too, or the caller sees only\n// \"402 Payment Required\" with an empty body and a base64 blob.\nfunction readChallengeError(response: Response): string | undefined {\n  const header =\n    response.headers.get('payment-required') ??\n    response.headers.get('x-payment-required');\n  if (!header) return undefined;\n  try {\n    const decoded = JSON.parse(\n      Buffer.from(header, 'base64').toString('utf8'),\n    ) as { error?: unknown };\n    return typeof decoded.error === 'string' ? decoded.error : undefined;\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * A facilitator relaying through viem reports a rejection as a multi-kilobyte\n * dump: raw transaction, encoded call data, ABI, docs link. The cause is one\n * `Details:` line buried in the middle. Keep the opening summary and that line\n * so the reason is readable; the full text goes to the log file.\n */\nfunction condenseSettleMessage(message: string): string {\n  // A gateway in front of the facilitator answers with an HTML page. It says\n  // nothing the status code has not already said, and quoting it hides the one\n  // fact that matters: the facilitator itself never answered.\n  const html = message.search(/<!DOCTYPE html|<html[\\s>]/i);\n  if (html >= 0) {\n    const prefix = message.slice(0, html).replace(/[\\s:]+$/, '');\n    return `${prefix} \u2014 the facilitator did not answer; a gateway error page came back instead`;\n  }\n  const lines = message.split('\\n').map((line) => line.trim());\n  const summary = lines.find((line) => line !== '');\n  const details = lines.find((line) => line.startsWith('Details:'));\n  const kept = [summary, details].filter(Boolean).join(' ');\n  return kept.length > 0 && kept.length < message.length ? kept : message;\n}\n\nexport function createX402PayTool(session: Session) {\n  return {\n    name: 'x402_pay',\n    title: 'Pay for an x402 resource',\n    // Spends real money against a third-party seller: irreversible, not\n    // idempotent, and it reaches outside our own systems.\n    annotations: {\n      readOnlyHint: false,\n      destructiveHint: true,\n      idempotentHint: false,\n      openWorldHint: true,\n    },\n    description:\n      'Fetch an x402-protected HTTP resource, automatically handling payment. ' +\n      'You provide the resource URL (and optionally a max spend); the Keyban ' +\n      'backend resolves the payment from the URL \u2014 it gates the URL host against ' +\n      \"the wallet's domain allow-list, fetches the seller to read its recipient \" +\n      'and price, and returns a signed-ready EIP-3009 envelope. The tool then ' +\n      \"signs it with the wallet's TSS Schnorr key (ERC-7739 + ERC-1271) and \" +\n      'settles by sending the X-PAYMENT request. If the backend policy requires ' +\n      'human approval, the tool FAILS with the intentId \u2014 call wait_for_intent ' +\n      '(no arguments; it wakes when any pending approval is decided), then retry ' +\n      'x402_pay for the same URL passing that intentId once it reports approved. ' +\n      'Concurrent payments to the same URL each get their own intent. Returns ' +\n      'the response body. Requires USDC balance.',\n    inputSchema: x402PaySchema,\n    handler: async (\n      input: z.infer<typeof x402PaySchema>,\n    ): Promise<string> => {\n      const init = await ensureAccount(session);\n      const account = init.account;\n\n      // Chain id for the ERC-7739 verifier domain and for failure diagnostics\n      // (explorer link + on-chain balance lookup).\n      const chainId = account.publicClient.chain?.id ?? 1;\n\n      // 1. Get the signed-ready envelope, in one of two modes:\n      //    - resume: an `intentId` was given (e.g. retry after a human approved,\n      //      or after a transient sign failure) \u2014 reuse the envelope cached\n      //      under that id so we sign the exact hash the intent was created\n      //      under;\n      //    - fresh: no `intentId` \u2014 ask the backend to resolve, decide, and\n      //      build a new envelope, minting a new intent.\n      // The cache is keyed by intent id (not URL), so concurrent payments to the\n      // same resource each keep their own envelope and settle independently.\n      const nowSec = Math.floor(Date.now() / 1000);\n      let auth: X402Authorization | undefined;\n      let intentId = input.intentId;\n\n      if (intentId) {\n        auth = session.pendingX402.get(intentId);\n        if (auth && Number(auth.authorization.validBefore) <= nowSec) {\n          session.pendingX402.delete(intentId); // window lapsed\n          auth = undefined;\n        }\n        if (!auth) {\n          throw new Error(\n            `No live payment envelope for intent ${intentId} \u2014 its approval ` +\n              `window may have lapsed. Start a fresh x402_pay for ${input.url}.`,\n          );\n        }\n      } else {\n        // 2. Backend resolves the payment, decides, and builds the envelope.\n        const maxValue = input.maxAmount\n          ? parseUnits(input.maxAmount as `${number}`, USDC_DECIMALS).toString()\n          : undefined;\n        const decision = await init.signer.evaluateIntent({\n          channel: 'x402',\n          x402: {\n            url: input.url,\n            accountAddress: account.address,\n            ...(maxValue ? { maxValue } : {}),\n            // Forward the eventual paid request's shape so the backend's\n            // discovery fetch replays it \u2014 POST-only resources (Exa/Firecrawl\n            // search) only 402 on a matching POST, not on a GET probe.\n            method: input.method,\n            ...(input.body != null ? { body: input.body } : {}),\n            ...(input.headers ? { headers: input.headers } : {}),\n          },\n        });\n\n        if (decision.decision === 'deny') {\n          throw new Error(\n            `Policy denied this payment:\\n  ${decision.reasons.join('\\n  ')}`,\n          );\n        }\n        if (!decision.x402Authorization) {\n          throw new Error(\n            'Backend allowed the payment but returned no x402 authorization envelope.',\n          );\n        }\n        auth = decision.x402Authorization;\n        intentId = decision.intentId;\n\n        // Cache the envelope keyed by intent id whenever the backend created an\n        // intent (always on require_human; on allow when a policy check ran), so\n        // a retry \u2014 after approval or a transient sign failure \u2014 reuses this same\n        // hash instead of minting a new intent, and concurrent same-URL payments\n        // stay independent. A policy-free allow has no intent to cache; it just\n        // signs and settles. Cleared on a successful settle.\n        if (intentId) session.pendingX402.set(intentId, auth);\n\n        if (decision.decision === 'require_human') {\n          const human = formatUnits(\n            BigInt(auth.authorization.value),\n            USDC_DECIMALS,\n          );\n          throw new Error([\n            'Payment requires human approval before it can be signed.',\n            `  Intent:    ${intentId}`,\n            `  You will send ${human} USDC to ${auth.authorization.to}`,\n            '',\n            'Do this WITHOUT ending your turn \u2014 both steps, in order:',\n            `  1. Tell the user a payment of ${human} USDC to ${auth.authorization.to} needs their approval, and that they must approve intent ${intentId} in the wallet.`,\n            `  2. In the SAME turn, call wait_for_intent (no arguments). It blocks until the owner decides on a pending intent, so do not poll and do not wait for the user to reply here.`,\n            `As soon as its result shows intent ${intentId} approved (in \\`changed\\` or \\`pendingToApprove\\`), immediately call x402_pay again for ${input.url} with intentId=${intentId} to sign and settle.`,\n            'If intent ' + intentId + ' comes back declined/expired, or it times out, stop and report that outcome.',\n          ].join('\\n'));\n        }\n      }\n\n      // 3. Sign (TSS). `/sign` re-checks the intent at authorization time, so a\n      // not-yet-approved `require_human` is denied here and surfaces as an error\n      // (the cached envelope is kept for a later retry after approval).\n      let signature: Hex;\n      try {\n        signature = await signX402Authorization(init, auth);\n      } catch (err) {\n        const base = err instanceof Error ? err.message : String(err);\n        // When the intent was cached, its envelope stays put so this exact\n        // payment can be retried by id without minting a new intent \u2014 but only\n        // until its authorization lapses. A denial that clears with time (a\n        // budget window rolling over) outlives the envelope, so the agent has to\n        // know the deadline or it will replay a dead authorization.\n        const lapsesAt = new Date(\n          Number(auth.authorization.validBefore) * 1000,\n        ).toISOString();\n        throw new Error(\n          intentId\n            ? `${base}\\nTo retry this exact payment, call x402_pay for ${input.url} with intentId=${intentId} \u2014 its authorization lapses at ${lapsesAt}. Once it has lapsed, retrying by intentId fails; start a fresh x402_pay for ${input.url} instead.`\n            : base,\n        );\n      }\n\n      // 4. Settle: a single paid request \u2014 the seller's middleware verifies the\n      // X-PAYMENT and settles on-chain. No client-side discovery roundtrip.\n      // Re-sending the same envelope replays the same authorization nonce, so a\n      // retry cannot charge twice \u2014 it comes back refused instead, and that\n      // refusal is how a settlement lost to a gateway error is recognised.\n      const payment = buildPaymentHeader(auth, signature);\n      let response: Response;\n      let responseBody: string;\n      let settle: SettleResponse | undefined;\n      for (let attempt = 1; ; attempt++) {\n        logger.info(\n          `x402_pay: ${input.method} ${input.url} (settling, attempt ${attempt})`,\n        );\n        response = await fetch(input.url, {\n          method: input.method,\n          headers: { ...input.headers, [payment.name]: payment.value },\n          body: input.body,\n        });\n        responseBody = await response.text();\n        if (response.ok) break;\n\n        settle = readSettleResponse(response);\n        if (\n          attempt >= SETTLE_ATTEMPTS ||\n          !isTransientSettleFailure(settle, response)\n        ) {\n          break;\n        }\n        logger.info(\n          `x402_pay: transient settlement failure (${settle?.errorReason ?? response.status}) \u2014 retrying`,\n        );\n        await new Promise((resolve) =>\n          setTimeout(resolve, SETTLE_RETRY_DELAY_MS * attempt),\n        );\n      }\n\n      // A spent nonce is the receipt for a settlement whose confirmation was\n      // lost \u2014 reporting it as a failure would send the agent chasing a payment\n      // it has already made. The resource itself is gone: the seller serves it\n      // once, against a payment it will not accept a second time.\n      if (!response.ok && isNonceAlreadySpent(settle, response)) {\n        if (intentId) session.pendingX402.delete(intentId);\n        logger.info('x402_pay: nonce already spent \u2014 the payment had settled');\n        return [\n          `Already paid: this payment settled on-chain earlier; the seller ` +\n            `refused this attempt because its authorization was already spent.`,\n          `You were charged once, not twice.`,\n          ...(intentId\n            ? [\n                `  Intent: ${intentId}`,\n                `Call list_expense_transactions for the transaction hash.`,\n              ]\n            : []),\n          `The response body is NOT available \u2014 the seller answers a spent ` +\n            `authorization with a refusal, not with the resource. Paying again ` +\n            `for ${input.url} would charge you a second time; only do it if you ` +\n            `genuinely need the content again.`,\n        ].join('\\n');\n      }\n\n      if (!response.ok) {\n        const parts = [\n          `Request failed: ${response.status} ${response.statusText}`,\n        ];\n\n        // A verify-phase refusal answers with a challenge, not a settlement\n        // result, so its reason would otherwise be lost in the base64 header.\n        const challenge = readChallengeError(response);\n        if (challenge) {\n          parts.push(`verification refused \u2014 ${condenseSettleMessage(challenge)}`);\n          const hint = explainSettleReason(undefined, challenge);\n          if (hint) parts.push(`hint: ${hint}`);\n        }\n\n        // The real settlement/verification reason lives in the payment-response\n        // header, not the (usually empty) body \u2014 surface it first.\n        if (settle) {\n          parts.push(\n            `payment ${settle.success ? 'settled' : 'rejected'}` +\n              (settle.errorReason ? ` \u2014 ${settle.errorReason}` : '') +\n              (settle.errorMessage && settle.errorMessage !== settle.errorReason\n                ? `: ${condenseSettleMessage(settle.errorMessage)}`\n                : ''),\n          );\n\n          // The facilitator's reason codes are opaque \u2014 map known ones to a\n          // plain-language explanation with likely causes and remediation.\n          const hint = explainSettleReason(\n            settle.errorReason,\n            settle.errorMessage,\n          );\n          if (hint) parts.push(`hint: ${hint}`);\n\n          if (settle.payer) parts.push(`payer: ${settle.payer}`);\n          if (settle.transaction) {\n            const url = explorerTxUrl(chainId, settle.transaction);\n            parts.push(`tx: ${settle.transaction}${url ? ` (${url})` : ''}`);\n          }\n          if (settle.network) parts.push(`network: ${settle.network}`);\n          if (settle.amount) parts.push(`amount settled: ${settle.amount}`);\n          // Scheme-specific diagnostics (e.g. revert details) ride here.\n          if (settle.extensions && Object.keys(settle.extensions).length > 0) {\n            parts.push(`extensions: ${JSON.stringify(settle.extensions)}`);\n          }\n\n          // Best-effort on-chain snapshot of the payer at failure time, so the\n          // operator can see balance vs. required amount without a separate\n          // balance call. Never throws.\n          const payer = (settle.payer ??\n            auth.authorization.from ??\n            account.address) as `0x${string}`;\n          const diag = await describeAccountState(\n            account.publicClient,\n            payer,\n            chainId,\n            BigInt(auth.authorization.value),\n          );\n          if (diag.length > 0) {\n            parts.push(`payer on-chain state (chainId ${chainId}):`);\n            parts.push(...diag);\n          }\n        }\n        if (responseBody.trim()) parts.push(`body: ${responseBody}`);\n\n        // The body of a rejected payment is typically empty \u2014 the reason rides\n        // in the response headers (e.g. payment-response / www-authenticate).\n        // Dump them so a reason the typed decode above didn't capture is never\n        // swallowed, minus the payment-response one whose decoded contents are\n        // already spelled out above.\n        const decoded = [\n          ...(settle ? ['payment-response', 'x-payment-response'] : []),\n          ...(challenge ? ['payment-required', 'x-payment-required'] : []),\n        ];\n        const headerDump = [...response.headers.entries()]\n          .filter(([k]) => !decoded.includes(k.toLowerCase()))\n          .map(([k, v]) => `  ${k}: ${v}`)\n          .join('\\n');\n        if (headerDump) parts.push(`response headers:\\n${headerDump}`);\n\n        // A failed/timed-out settle response does NOT mean the payment didn't\n        // land \u2014 a gateway 502 or dropped connection can hide an on-chain\n        // settlement. Starting a fresh x402_pay would mint a new nonce and can\n        // charge a SECOND time. Retrying by intentId re-sends the SAME nonce,\n        // which reverts on replay if it already settled \u2014 so it can never\n        // double-charge. The envelope is kept cached (not cleared) for exactly\n        // this retry.\n        if (intentId) {\n          parts.push(\n            `This payment may already have settled on-chain despite the error. ` +\n              `Do NOT start a fresh x402_pay for ${input.url} \u2014 that can charge ` +\n              `again. To safely re-check/settle this exact payment, retry ` +\n              `x402_pay for ${input.url} with intentId=${intentId}.`,\n          );\n        }\n\n        if (settle?.errorMessage) {\n          logger.info(`x402_pay: settlement failed \u2014 ${settle.errorMessage}`);\n        }\n        throw new Error(parts.join('\\n'));\n      }\n\n      // Settled successfully \u2014 only now drop the cached envelope, so its nonce\n      // can't be reused. Keeping it until a confirmed success is what makes a\n      // retry after a failed/timed-out settle safe: it replays the SAME nonce\n      // (reverts if already on-chain) instead of minting a new one that would\n      // charge twice.\n      if (intentId) session.pendingX402.delete(intentId);\n\n      // Extract payment info from the settlement result header.\n      let paymentInfo = '';\n      settle = readSettleResponse(response);\n      if (settle) {\n        paymentInfo = `\\nPayment tx: ${settle.transaction || '(no hash)'}`;\n      }\n\n      return `${response.status} ${response.statusText}${paymentInfo}\\n\\n${responseBody}`;\n    },\n  };\n}\n", "import type { Network } from \"@x402/core/types\";\n\n/**\n * Base stablecoin asset configuration shared across all EVM payment schemes.\n * Contains the core fields needed to identify and convert tokens.\n */\nexport type DefaultAssetInfo = {\n  /** Token contract address */\n  address: string;\n  /** EIP-712 domain name (must match the token's domain separator) */\n  name: string;\n  /** EIP-712 domain version (must match the token's domain separator) */\n  version: string;\n  /** Token decimal places (typically 6 for USDC) */\n  decimals: number;\n};\n\n/**\n * Extended asset configuration for the exact scheme.\n * Includes transfer method hints that control client-side behaviour.\n */\nexport type ExactDefaultAssetInfo = DefaultAssetInfo & {\n  /**\n   * Transfer method override: `\"permit2\"` for tokens that don't support EIP-3009.\n   * Omit for EIP-3009 tokens (default behaviour).\n   */\n  assetTransferMethod?: string;\n  /**\n   * Set to `true` for permit2 tokens that implement EIP-2612 `permit()`.\n   * Controls whether name/version are included in `extra` so the client can\n   * sign a gasless EIP-2612 permit for Permit2 approval.\n   */\n  supportsEip2612?: boolean;\n};\n\n/**\n * Default stablecoins indexed by CAIP-2 network identifier.\n *\n * Each network has the right to determine its own default stablecoin that can\n * be expressed as a USD string by calling servers. See DEFAULT_ASSET.md in\n * exact/server/ for how to add new chains.\n */\nexport const DEFAULT_STABLECOINS: Record<string, ExactDefaultAssetInfo> = {\n  \"eip155:8453\": {\n    address: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n    name: \"USD Coin\",\n    version: \"2\",\n    decimals: 6,\n  }, // Base mainnet USDC\n  \"eip155:84532\": {\n    address: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n    name: \"USDC\",\n    version: \"2\",\n    decimals: 6,\n  }, // Base Sepolia USDC\n  \"eip155:4326\": {\n    address: \"0xFAfDdbb3FC7688494971a79cc65DCa3EF82079E7\",\n    name: \"MegaUSD\",\n    version: \"1\",\n    decimals: 18,\n    assetTransferMethod: \"permit2\",\n    supportsEip2612: true,\n  }, // MegaETH mainnet MegaUSD (no EIP-3009, supports EIP-2612)\n  \"eip155:143\": {\n    address: \"0x754704Bc059F8C67012fEd69BC8A327a5aafb603\",\n    name: \"USD Coin\",\n    version: \"2\",\n    decimals: 6,\n  }, // Monad mainnet USDC\n  \"eip155:988\": {\n    address: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n    name: \"USDT0\",\n    version: \"1\",\n    decimals: 6,\n  }, // Stable mainnet USDT0\n  \"eip155:2201\": {\n    address: \"0x78Cf24370174180738C5B8E352B6D14c83a6c9A9\",\n    name: \"USDT0\",\n    version: \"1\",\n    decimals: 6,\n  }, // Stable testnet USDT0\n  \"eip155:137\": {\n    address: \"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\n    name: \"USD Coin\",\n    version: \"2\",\n    decimals: 6,\n  }, // Polygon mainnet USDC\n  \"eip155:42161\": {\n    address: \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n    name: \"USD Coin\",\n    version: \"2\",\n    decimals: 6,\n  }, // Arbitrum One USDC\n  \"eip155:421614\": {\n    address: \"0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d\",\n    name: \"USD Coin\",\n    version: \"2\",\n    decimals: 6,\n  }, // Arbitrum Sepolia USDC\n};\n\n/**\n * Look up the default stablecoin for a network.\n *\n * @param network - CAIP-2 network identifier (e.g. \"eip155:8453\")\n * @returns The default asset info\n * @throws If no default asset is configured for the network\n */\nexport function getDefaultAsset(network: Network): ExactDefaultAssetInfo {\n  const info = DEFAULT_STABLECOINS[network];\n  if (!info) {\n    throw new Error(`No default asset configured for network ${network}`);\n  }\n  return info;\n}\n", "import {\n  AssetAmount,\n  Network,\n  PaymentRequirements,\n  Price,\n  SchemeNetworkServer,\n  MoneyParser,\n} from \"@x402/core/types\";\nimport { getDefaultAsset, type ExactDefaultAssetInfo } from \"../../shared/defaultAssets\";\n\n/**\n * EVM server implementation for the Exact payment scheme.\n */\nexport class ExactEvmScheme implements SchemeNetworkServer {\n  readonly scheme = \"exact\";\n  private moneyParsers: MoneyParser[] = [];\n\n  /**\n   * Register a custom money parser in the parser chain.\n   * Multiple parsers can be registered - they will be tried in registration order.\n   * Each parser receives a decimal amount (e.g., 1.50 for $1.50).\n   * If a parser returns null, the next parser in the chain will be tried.\n   * The default parser is always the final fallback.\n   *\n   * @param parser - Custom function to convert amount to AssetAmount (or null to skip)\n   * @returns The server instance for chaining\n   *\n   * @example\n   * evmServer.registerMoneyParser(async (amount, network) => {\n   *   // Custom conversion logic\n   *   if (amount > 100) {\n   *     // Use different token for large amounts\n   *     return { amount: (amount * 1e18).toString(), asset: \"0xCustomToken\" };\n   *   }\n   *   return null; // Use next parser\n   * });\n   */\n  registerMoneyParser(parser: MoneyParser): ExactEvmScheme {\n    this.moneyParsers.push(parser);\n    return this;\n  }\n\n  /**\n   * Returns the decimal precision of the default stablecoin for the given network.\n   * Implements the optional AssetDecimalsProvider interface used by resolveSettlementOverrideAmount.\n   *\n   * @param _asset - The asset symbol (unused; defaults to the network's default stablecoin)\n   * @param network - The network to look up the default asset for\n   * @returns The number of decimal places for the asset\n   */\n  getAssetDecimals(_asset: string, network: Network): number {\n    try {\n      return getDefaultAsset(network).decimals;\n    } catch {\n      return 6;\n    }\n  }\n\n  /**\n   * Parses a price into an asset amount.\n   * If price is already an AssetAmount, returns it directly.\n   * If price is Money (string | number), parses to decimal and tries custom parsers.\n   * Falls back to default conversion if all custom parsers return null.\n   *\n   * @param price - The price to parse\n   * @param network - The network to use\n   * @returns Promise that resolves to the parsed asset amount\n   */\n  async parsePrice(price: Price, network: Network): Promise<AssetAmount> {\n    // If already an AssetAmount, return it directly\n    if (typeof price === \"object\" && price !== null && \"amount\" in price) {\n      if (!price.asset) {\n        throw new Error(`Asset address must be specified for AssetAmount on network ${network}`);\n      }\n      return {\n        amount: price.amount,\n        asset: price.asset,\n        extra: price.extra || {},\n      };\n    }\n\n    // Parse Money to decimal number\n    const amount = this.parseMoneyToDecimal(price);\n\n    // Try each custom money parser in order\n    for (const parser of this.moneyParsers) {\n      const result = await parser(amount, network);\n      if (result !== null) {\n        return result;\n      }\n    }\n\n    // All custom parsers returned null, use default conversion\n    return this.defaultMoneyConversion(amount, network);\n  }\n\n  /**\n   * Build payment requirements for this scheme/network combination\n   *\n   * @param paymentRequirements - The base payment requirements\n   * @param supportedKind - The supported kind from facilitator (unused)\n   * @param supportedKind.x402Version - The x402 version\n   * @param supportedKind.scheme - The logical payment scheme\n   * @param supportedKind.network - The network identifier in CAIP-2 format\n   * @param supportedKind.extra - Optional extra metadata regarding scheme/network implementation details\n   * @param extensionKeys - Extension keys supported by the facilitator (unused)\n   * @returns Payment requirements ready to be sent to clients\n   */\n  enhancePaymentRequirements(\n    paymentRequirements: PaymentRequirements,\n    supportedKind: {\n      x402Version: number;\n      scheme: string;\n      network: Network;\n      extra?: Record<string, unknown>;\n    },\n    extensionKeys: string[],\n  ): Promise<PaymentRequirements> {\n    // Mark unused parameters to satisfy linter\n    void supportedKind;\n    void extensionKeys;\n    return Promise.resolve(paymentRequirements);\n  }\n\n  /**\n   * Parse Money (string | number) to a decimal number.\n   * Handles formats like \"$1.50\", \"1.50\", 1.50, etc.\n   *\n   * @param money - The money value to parse\n   * @returns Decimal number\n   */\n  private parseMoneyToDecimal(money: string | number): number {\n    if (typeof money === \"number\") {\n      return money;\n    }\n\n    // Remove $ sign and whitespace, then parse\n    const cleanMoney = money.replace(/^\\$/, \"\").trim();\n    const amount = parseFloat(cleanMoney);\n\n    if (isNaN(amount)) {\n      throw new Error(`Invalid money format: ${money}`);\n    }\n\n    return amount;\n  }\n\n  /**\n   * Converts a numeric dollar amount to an AssetAmount using the default token for the network.\n   *\n   * @param amount - The dollar amount as a number\n   * @param network - The target network\n   * @returns The converted asset amount with token metadata\n   */\n  private defaultMoneyConversion(amount: number, network: Network): AssetAmount {\n    const assetInfo: ExactDefaultAssetInfo = getDefaultAsset(network);\n    const tokenAmount = this.convertToTokenAmount(amount.toString(), assetInfo.decimals);\n\n    // EIP-3009 tokens always need name/version for their transferWithAuthorization domain.\n    // Permit2 tokens only need them if the token supports EIP-2612 (for gasless permit signing).\n    // Omitting name/version for permit2 tokens signals the client to skip EIP-2612 and use\n    // ERC-20 approval gas sponsoring instead.\n    const includeEip712Domain = !assetInfo.assetTransferMethod || assetInfo.supportsEip2612;\n\n    return {\n      amount: tokenAmount,\n      asset: assetInfo.address,\n      extra: {\n        ...(includeEip712Domain && {\n          name: assetInfo.name,\n          version: assetInfo.version,\n        }),\n        ...(assetInfo.assetTransferMethod && {\n          assetTransferMethod: assetInfo.assetTransferMethod,\n        }),\n      },\n    };\n  }\n\n  /**\n   * Converts a decimal string amount to an integer token amount using the given decimals.\n   *\n   * @param decimalAmount - The amount as a decimal string (e.g. \"1.5\")\n   * @param decimals - The number of decimal places for the token\n   * @returns The token amount as an integer string in smallest units\n   */\n  private convertToTokenAmount(decimalAmount: string, decimals: number): string {\n    const amount = parseFloat(decimalAmount);\n    if (isNaN(amount)) {\n      throw new Error(`Invalid amount: ${decimalAmount}`);\n    }\n    const [intPart, decPart = \"\"] = String(amount).split(\".\");\n    const paddedDec = decPart.padEnd(decimals, \"0\").slice(0, decimals);\n    const tokenAmount = (intPart + paddedDec).replace(/^0+/, \"\") || \"0\";\n    return tokenAmount;\n  }\n}\n", "import { x402ResourceServer } from \"@x402/core/server\";\nimport { Network } from \"@x402/core/types\";\nimport { ExactEvmScheme } from \"./scheme\";\n\n/**\n * Configuration options for registering EVM schemes to an x402ResourceServer\n */\nexport interface EvmResourceServerConfig {\n  /**\n   * Optional specific networks to register\n   * If not provided, registers wildcard support (eip155:*)\n   */\n  networks?: Network[];\n}\n\n/**\n * Registers EVM exact payment schemes to an x402ResourceServer instance.\n *\n * This function registers:\n * - V2: eip155:* wildcard scheme with ExactEvmScheme (or specific networks if provided)\n *\n * @param server - The x402ResourceServer instance to register schemes to\n * @param config - Configuration for EVM resource server registration\n * @returns The server instance for chaining\n *\n * @example\n * ```typescript\n * import { registerExactEvmScheme } from \"@x402/evm/exact/server/register\";\n * import { x402ResourceServer } from \"@x402/core/server\";\n *\n * const server = new x402ResourceServer(facilitatorClient);\n * registerExactEvmScheme(server, {});\n * ```\n */\nexport function registerExactEvmScheme(\n  server: x402ResourceServer,\n  config: EvmResourceServerConfig = {},\n): x402ResourceServer {\n  // Register V2 scheme\n  if (config.networks && config.networks.length > 0) {\n    // Register specific networks\n    config.networks.forEach(network => {\n      server.register(network, new ExactEvmScheme());\n    });\n  } else {\n    // Register wildcard for all EVM chains\n    server.register(\"eip155:*\", new ExactEvmScheme());\n  }\n\n  return server;\n}\n", "import { z } from 'zod';\nimport { formatUnits } from 'viem';\nimport { ExactEvmScheme } from '@x402/evm/exact/server';\nimport type { Network, PaymentRequirements } from '@x402/core/types';\nimport { decodeX402 } from '@keyban/agent-wallet-protocol';\nimport { type Session } from '../lib/session.js';\nimport { ensureAccount } from '../lib/ensure-account.js';\nimport { getAccountBalance } from '../lib/balance.js';\nimport { logger } from '../lib/logger.js';\n\nexport const x402InfoSchema = z.object({\n  url: z.string().describe('The URL to probe for x402 support'),\n  timeoutMs: z\n    .number()\n    .int()\n    .positive()\n    .optional()\n    .default(10_000)\n    .describe('Request timeout in milliseconds (default: 10000)'),\n});\n\nconst evmScheme = new ExactEvmScheme();\n\nfunction formatAmount(\n  amount: string | undefined,\n  network: Network | undefined,\n  asset: string | undefined,\n): string {\n  if (!amount) return '(unspecified)';\n  if (!network || !asset) return `${amount} (raw base units)`;\n  try {\n    const decimals = evmScheme.getAssetDecimals(asset, network);\n    if (decimals === undefined) return `${amount} (raw base units)`;\n    return formatUnits(BigInt(amount), decimals);\n  } catch {\n    return `${amount} (raw base units)`;\n  }\n}\n\nfunction formatRequirement(req: PaymentRequirements, index: number): string[] {\n  const lines = [\n    `  [${index + 1}] scheme=${req.scheme} network=${req.network}`,\n    `      price: ${formatAmount(req.amount, req.network, req.asset)}`,\n    `      asset: ${req.asset}`,\n    `      payTo: ${req.payTo}`,\n    `      maxTimeoutSeconds: ${req.maxTimeoutSeconds}`,\n  ];\n  const facilitator = (req.extra as { facilitator?: string }).facilitator;\n  if (facilitator) lines.push(`      facilitator: ${facilitator}`);\n  return lines;\n}\n\nexport function createX402InfoTool(session: Session) {\n  return {\n    name: 'x402_info',\n    title: 'Inspect x402 price of a URL',\n    annotations: { readOnlyHint: true, openWorldHint: true },\n    description:\n      'Check whether a URL supports the x402 payment protocol without initiating any payment. ' +\n      'Performs a GET request (following redirects), and if a 402 Payment Required response is ' +\n      'returned, parses the x402 payment requirements (scheme, network, price, asset, payTo, ' +\n      'expiration). Use this before x402_pay to inform the user about the cost of a resource and your current wallet balance.',\n    inputSchema: x402InfoSchema,\n    handler: async (input: z.infer<typeof x402InfoSchema>): Promise<string> => {\n      const timeoutMs = input.timeoutMs ?? 10_000;\n      const controller = new AbortController();\n      const timer = setTimeout(() => controller.abort(), timeoutMs);\n\n      logger.info(`x402_info: GET ${input.url} (timeout ${timeoutMs}ms)`);\n\n      let response: Response;\n      try {\n        response = await fetch(input.url, {\n          method: 'GET',\n          redirect: 'follow',\n          signal: controller.signal,\n        });\n      } catch (err) {\n        const msg = err instanceof Error ? err.message : String(err);\n        logger.info(`x402_info: fetch failed for ${input.url}: ${msg}`);\n        return `URL unreachable \u2014 check the URL and try again (${msg})`;\n      } finally {\n        clearTimeout(timer);\n      }\n\n      if (response.status === 200) {\n        return `No x402 payment required \u2014 resource is freely accessible (URL: ${response.url})`;\n      }\n\n      if (response.status !== 402) {\n        const body = await response.text().catch(() => '');\n        return `Unexpected status ${response.status} ${response.statusText} for ${response.url}${\n          body ? `\\n${body}` : ''\n        }`;\n      }\n\n      // x402 v2 carries the metadata in a base64 `payment-required` header;\n      // older variants used the JSON body. The shared decoder tries the header\n      // first, then the body, and tells malformed metadata apart from none.\n      const body = await response.text().catch(() => '');\n      const result = decodeX402(response.headers.get('payment-required'), body);\n      if (!result.ok) {\n        return result.reason === 'malformed'\n          ? `402 received with malformed x402 payment metadata (URL: ${response.url})`\n          : `402 received but no x402 headers \u2014 standard payment wall (URL: ${response.url})`;\n      }\n      const decoded = result.data;\n      if (decoded.accepts.length === 0) {\n        return `402 received but no x402 payment options (URL: ${response.url})`;\n      }\n\n      const { resource } = decoded;\n      const lines: string[] = [\n        `x402 payment required for ${response.url}`,\n        `x402Version: ${decoded.x402Version ?? 'unspecified'}`,\n      ];\n      if (resource.description) lines.push(`description: ${resource.description}`);\n      if (resource.mimeType) lines.push(`mimeType: ${resource.mimeType}`);\n      if (resource.url) lines.push(`resource: ${resource.url}`);\n      lines.push(`${decoded.accepts.length} payment option(s):`);\n      decoded.accepts.forEach((req, idx) =>\n        lines.push(...formatRequirement(req, idx)),\n      );\n      if (decoded.error) lines.push(`error: ${decoded.error}`);\n\n      const init = await ensureAccount(session);\n      lines.push('', 'Current wallet balance:', await getAccountBalance(init));\n\n      return lines.join('\\n');\n    },\n  };\n}\n", "import { z } from 'zod';\nimport { buildApiKeyHeaders, type Session, requireCredentials } from '../lib/session.js';\n\nexport const cancelIntentSchema = z.object({\n  intentId: z\n    .string()\n    .uuid()\n    .describe(\n      'The intentId surfaced by a prior `policy/require_human` or ' +\n        '`policy/intent-in-flight` error.',\n    ),\n});\n\nexport function createCancelIntentTool(session: Session) {\n  return {\n    name: 'cancel_intent',\n    title: 'Cancel a pending payment intent',\n    // Changes state but withdraws rather than authorizes: nothing is spent,\n    // and cancelling twice is the same as cancelling once.\n    annotations: {\n      readOnlyHint: false,\n      destructiveHint: false,\n      idempotentHint: true,\n      openWorldHint: false,\n    },\n    description:\n      'Withdraw your own in-flight policy intent \u2014 it moves to `abandoned`, ' +\n      'releasing any budget it holds. Call this with the intentId from a ' +\n      '`policy/require_human` or `policy/intent-in-flight` error. Cancelling ' +\n      'never authorizes a payment; it only withdraws a pending request. ' +\n      \"Requires the agent's API key.\",\n    inputSchema: cancelIntentSchema,\n    handler: async (\n      input: z.infer<typeof cancelIntentSchema>,\n    ): Promise<string> => {\n      requireCredentials(session);\n\n      const res = await fetch(`${session.baseURL}/v1/policy/cancel-intent`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          ...buildApiKeyHeaders(session),\n          'X-Keyban-Sdk-Network': session.network,\n        },\n        body: JSON.stringify({ intentId: input.intentId }),\n      });\n      if (!res.ok) {\n        const body = await res.text().catch(() => '');\n        throw new Error(`cancel-intent failed (${res.status}): ${body}`);\n      }\n      const result = (await res.json()) as { intentId: string; state: string };\n\n      // Drop this intent's cached x402 envelope (if any) so a follow-up\n      // x402_pay re-resolves cleanly instead of replaying the now-abandoned\n      // envelope (which would fail `/sign` with intent-abandoned). Keyed by\n      // intent id, so other concurrent payments' envelopes are left intact.\n      session.pendingX402.delete(input.intentId);\n\n      return (\n        `Intent ${result.intentId} cancelled (state: ${result.state}). ` +\n        'The wallet is no longer blocked by an in-flight intent \u2014 you can start a new payment.'\n      );\n    },\n  };\n}\n", "import { z } from 'zod';\nimport { condenseFailureBody } from '../lib/http-failure.js';\nimport { buildApiKeyHeaders, type Session, requireCredentials } from '../lib/session.js';\n\n/** The one state that keeps the wait alive \u2014 an intent awaiting a human decision. */\nconst PENDING = 'pending_human_approval';\n\nexport const waitForIntentSchema = z.object({\n  timeoutMs: z\n    .number()\n    .int()\n    .positive()\n    .optional()\n    .default(120000)\n    .describe(\n      'How long to block before returning still-waiting (default 120 s). Call wait_for_intent ' +\n        'again to keep waiting if it returns while intents are still awaiting approval.',\n    ),\n});\n\nconst isTimeoutErr = (err: unknown): boolean =>\n  err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError');\n\n/**\n * A wallet intent as carried by the SSE `intents-snapshot` event (full state)\n * or reconstructed from a live `intent` event (id + state only, when the intent\n * appeared after we connected).\n */\ninterface IntentState {\n  intentId: string;\n  state: string;\n  kind?: string;\n  recipient?: string;\n  resource?: string | null;\n  payTo?: string | null;\n  asset?: string;\n  amountNative?: string;\n  amountRef?: string;\n  expiresAt?: string | null;\n}\n\n/** Structured tool result: the intent that changed (if any) + the approval queue. */\ninterface WaitResult {\n  changed: IntentState | null;\n  pendingToApprove: IntentState[];\n  summary: string;\n}\n\nconst asIntentState = (v: unknown): IntentState | null => {\n  if (typeof v !== 'object' || v === null) return null;\n  const o = v as Record<string, unknown>;\n  if (typeof o.intentId !== 'string' || typeof o.state !== 'string') return null;\n  return o as unknown as IntentState;\n};\n\nconst render = (r: WaitResult): string => JSON.stringify(r, null, 2);\n\nconst nothingToApprove: WaitResult = {\n  changed: null,\n  pendingToApprove: [],\n  summary: 'No intents are awaiting approval \u2014 nothing to wait for.',\n};\n\nfunction decidedResult(changed: IntentState, pendingToApprove: IntentState[]): WaitResult {\n  const rest = pendingToApprove.length\n    ? `${pendingToApprove.length} intent(s) still awaiting approval.`\n    : 'No other intents are awaiting approval.';\n  return {\n    changed,\n    pendingToApprove,\n    summary: `Intent ${changed.intentId} is now ${changed.state}. ${rest}`,\n  };\n}\n\nfunction timeoutResult(pending: Map<string, IntentState>, timeoutMs: number): WaitResult {\n  const pendingToApprove = [...pending.values()];\n  return {\n    changed: null,\n    pendingToApprove,\n    summary:\n      `No approval decision within ${timeoutMs}ms. ${pendingToApprove.length} intent(s) ` +\n      'still awaiting approval \u2014 call wait_for_intent again to keep waiting.',\n  };\n}\n\n/**\n * Drain the SSE stream, tracking the wallet's approval queue.\n *\n * - `intents-snapshot` resets `pending` to the intents awaiting approval. On a\n *   reconnect it also closes the SSE-drop gap: an intent we had seen pending\n *   that is now carried with a resolved state was decided while we were\n *   disconnected (its live event was lost) \u2192 resolve with it. Otherwise, if\n *   nothing is awaiting approval there is nothing to wait for \u2192 resolve `'empty'`.\n * - a live `intent` event for a still-pending id that leaves the pending state\n *   (approved / declined / expired / abandoned) is the change we waited for \u2192\n *   resolve with it plus the remaining queue.\n * - a live `intent` entering the pending state joins the queue (so the queue we\n *   report on the next decision or on timeout stays current).\n *\n * Resolves `null` when the stream closes cleanly without either (reconnect).\n * `pending` and `seenPending` are owned by the caller so they survive across\n * reconnects (gap detection) and a timeout can still report the queue.\n */\nasync function readApprovalChange(\n  body: ReadableStream<Uint8Array>,\n  pending: Map<string, IntentState>,\n  seenPending: Set<string>,\n): Promise<'empty' | WaitResult | null> {\n  const decoder = new TextDecoder();\n  let buffer = '';\n\n  for await (const chunk of body as AsyncIterable<Uint8Array>) {\n    buffer += decoder.decode(chunk, { stream: true });\n\n    const frames = buffer.split(/\\r?\\n\\r?\\n/);\n    buffer = frames.pop() ?? '';\n\n    for (const frame of frames) {\n      for (const line of frame.split(/\\r?\\n/)) {\n        if (!line.startsWith('data:')) continue;\n        const raw = line.slice('data:'.length).trim();\n        let payload: unknown;\n        try {\n          payload = JSON.parse(raw);\n        } catch {\n          continue;\n        }\n        if (typeof payload !== 'object' || payload === null) continue;\n        const p = payload as Record<string, unknown>;\n\n        if (p.type === 'intents-snapshot' && Array.isArray(p.intents)) {\n          const entries = p.intents\n            .map(asIntentState)\n            .filter((e): e is IntentState => e !== null);\n\n          // Gap detection: an intent we had seen pending that this fresh\n          // snapshot now reports resolved was decided during a reconnect gap \u2014\n          // its live event was lost, so surface it as the change.\n          const gapChange = entries.find(\n            (e) => e.state !== PENDING && seenPending.has(e.intentId),\n          );\n\n          pending.clear();\n          for (const e of entries) {\n            if (e.state === PENDING) {\n              pending.set(e.intentId, e);\n              seenPending.add(e.intentId);\n            }\n          }\n\n          if (gapChange) {\n            seenPending.delete(gapChange.intentId);\n            return decidedResult(gapChange, [...pending.values()]);\n          }\n          if (pending.size === 0) return 'empty';\n          continue;\n        }\n\n        if (p.type === 'intent' && typeof p.intentId === 'string') {\n          const id = p.intentId;\n          const state = String(p.state ?? '');\n          if (state === PENDING) {\n            if (!pending.has(id)) pending.set(id, { intentId: id, state });\n            seenPending.add(id);\n            continue;\n          }\n          // A resolution \u2014 only the change we're after if this intent was one\n          // of the ones awaiting approval.\n          const prev = pending.get(id);\n          if (prev) {\n            pending.delete(id);\n            seenPending.delete(id);\n            return decidedResult({ ...prev, state }, [...pending.values()]);\n          }\n        }\n        // wallet-status / disconnect / untracked intents \u2192 ignore\n      }\n    }\n  }\n\n  return null;\n}\n\nexport function createWaitForIntentTool(session: Session) {\n  return {\n    name: 'wait_for_intent',\n    title: 'Wait for approval decisions',\n    annotations: { readOnlyHint: true, openWorldHint: false },\n    description:\n      'Block until something happens to the wallet\\'s human-approval queue, then return the ' +\n      'current picture. Takes no target: it watches ALL of the wallet\\'s intents at once. Call ' +\n      'it after a require_human response (from x402_pay or a relay transfer), and whenever you ' +\n      'have payments awaiting approval \u2014 it returns as soon as either (a) nothing is awaiting ' +\n      'approval, or (b) an intent that WAS awaiting approval is decided (approved / declined / ' +\n      'expired / abandoned). The result is JSON: `changed` (the full state of the intent that ' +\n      'just changed, or null) and `pendingToApprove` (every intent still awaiting a decision). ' +\n      'Loop it: wait, act on `changed` (retry x402_pay / transfer for an approved intent), wait ' +\n      'again \u2014 in whatever order the owner approves them. Returns still-waiting on timeout; call ' +\n      'again to keep waiting.',\n    inputSchema: waitForIntentSchema,\n    handler: async (input: z.infer<typeof waitForIntentSchema>): Promise<string> => {\n      requireCredentials(session);\n\n      const url = `${session.baseURL}/v1/policy/intents/sse`;\n      const deadline = Date.now() + input.timeoutMs;\n      // Owned here (not in the reader) so they survive reconnects: `pending` is\n      // the live queue (reported on timeout), `seenPending` is every id we ever\n      // saw awaiting approval, which lets a reconnect detect a decision that\n      // landed during the drop gap.\n      const pending = new Map<string, IntentState>();\n      const seenPending = new Set<string>();\n\n      while (Date.now() < deadline) {\n        const remaining = deadline - Date.now();\n        if (remaining <= 0) break;\n\n        let res: Response;\n        try {\n          res = await fetch(url, {\n            headers: {\n              ...buildApiKeyHeaders(session),\n              Accept: 'text/event-stream',\n            },\n            signal: AbortSignal.timeout(remaining),\n          });\n        } catch (err) {\n          if (isTimeoutErr(err)) return render(timeoutResult(pending, input.timeoutMs));\n          // transient connection failure \u2014 reconnect if budget remains\n          const sleepMs = Math.min(1000, deadline - Date.now());\n          if (sleepMs > 0) await new Promise((r) => setTimeout(r, sleepMs));\n          continue;\n        }\n\n        if (!res.ok) {\n          const body = await res.text().catch(() => '');\n          const detail = body ? `: ${condenseFailureBody(body)}` : '';\n          throw new Error(`intents/sse failed (${res.status})${detail}`);\n        }\n        if (!res.body) {\n          throw new Error('intents/sse: response body is null');\n        }\n\n        let result: 'empty' | WaitResult | null;\n        try {\n          result = await readApprovalChange(res.body, pending, seenPending);\n        } catch (err) {\n          if (isTimeoutErr(err)) return render(timeoutResult(pending, input.timeoutMs));\n          // socket dropped mid-read \u2014 reconnect\n          const sleepMs = Math.min(1000, deadline - Date.now());\n          if (sleepMs > 0) await new Promise((r) => setTimeout(r, sleepMs));\n          continue;\n        }\n\n        if (result === null) {\n          // stream closed cleanly without a decision \u2014 reconnect if budget remains\n          const sleepMs = Math.min(1000, deadline - Date.now());\n          if (sleepMs > 0) await new Promise((r) => setTimeout(r, sleepMs));\n          continue;\n        }\n\n        if (result === 'empty') return render(nothingToApprove);\n        return render(result);\n      }\n\n      return render(timeoutResult(pending, input.timeoutMs));\n    },\n  };\n}\n", "import { z } from 'zod';\n\nimport { buildApiKeyHeaders, requireCredentials, type Session } from '../lib/session.js';\nimport { logger } from '../lib/logger.js';\n\nexport const discoverX402ServicesSchema = z.object({\n  query: z\n    .string()\n    .optional()\n    .describe('Full-text search over service name, description and tags. Omit to list popular services.'),\n  network: z\n    .string()\n    .optional()\n    .describe('Filter to services accepting payment on this CAIP-2 chain id, e.g. \"eip155:8453\".'),\n  tag: z.string().optional().describe('Filter to services carrying this exact tag.'),\n  limit: z\n    .number()\n    .int()\n    .positive()\n    .max(50)\n    .optional()\n    .default(10)\n    .describe('Max number of services to return (default 10, max 50).'),\n});\n\ninterface X402ResourceLite {\n  resource: string;\n  serviceName?: string | null;\n  description?: string | null;\n  tags?: string[];\n  networks?: string[];\n  accepts?: { network: string; amount: string; asset: string }[];\n}\n\nexport function createDiscoverX402ServicesTool(session: Session) {\n  return {\n    name: 'discover_x402_services',\n    title: 'Search x402 service directory',\n    annotations: { readOnlyHint: true, openWorldHint: false },\n    description:\n      'Discover online services that accept x402 payments, from the Keyban x402 ' +\n      'service directory (mirrored from Coinbase). Full-text search by query and ' +\n      'optional network/tag filters. Use this to find a service, then x402_info ' +\n      'to inspect its price, then x402_pay to pay.',\n    inputSchema: discoverX402ServicesSchema,\n    handler: async (\n      input: z.infer<typeof discoverX402ServicesSchema>,\n    ): Promise<string> => {\n      requireCredentials(session);\n\n      const params = new URLSearchParams();\n      if (input.query) params.set('search', input.query);\n      if (input.network) params.set('network', input.network);\n      if (input.tag) params.set('tag', input.tag);\n      params.set('pageSize', String(input.limit ?? 10));\n\n      const url = `${session.baseURL}/v1/x402/resources?${params.toString()}`;\n      logger.info(`discover_x402_services: GET ${url}`);\n\n      const res = await fetch(url, { headers: buildApiKeyHeaders(session) });\n      if (!res.ok) {\n        const body = await res.text().catch(() => '');\n        throw new Error(`Directory query failed: ${res.status} ${body}`);\n      }\n\n      const { data, total } = (await res.json()) as {\n        data: X402ResourceLite[];\n        total: number;\n      };\n      if (data.length === 0) return 'No x402 services matched your query.';\n\n      const lines = [`${data.length} of ${total} x402 service(s):`];\n      for (const svc of data) {\n        lines.push(`\\n\u2022 ${svc.serviceName ?? svc.resource}`);\n        lines.push(`  url: ${svc.resource}`);\n        if (svc.description) lines.push(`  ${svc.description}`);\n        if (svc.networks?.length) lines.push(`  networks: ${svc.networks.join(', ')}`);\n        if (svc.accepts?.length) {\n          const prices = svc.accepts\n            .map((a) => `${a.amount} (${a.network})`)\n            .join(', ');\n          lines.push(`  price options: ${prices}`);\n        }\n        if (svc.tags?.length) lines.push(`  tags: ${svc.tags.join(', ')}`);\n      }\n      return lines.join('\\n');\n    },\n  };\n}\n", "import { z } from 'zod';\n\nimport { logger } from '../lib/logger.js';\nimport {\n  buildApiKeyHeaders,\n  requireCredentials,\n  type Session,\n} from '../lib/session.js';\n\nexport const expenseStatsSchema = z.object({\n  applicationId: z\n    .string()\n    .optional()\n    .describe(\n      'Application UUID to scope the stats to. Defaults to this wallet ' +\n        \"server's configured KEYBAN_APP_ID.\",\n    ),\n  agentId: z\n    .string()\n    .optional()\n    .describe('Optional agent-wallet UUID to narrow the stats to one wallet.'),\n  ownerId: z\n    .string()\n    .optional()\n    .describe('Optional owner (responsable) UUID to narrow the stats.'),\n});\n\nexport function createExpenseStatsTool(session: Session) {\n  return {\n    name: 'expense_stats',\n    title: 'Get spending statistics',\n    annotations: { readOnlyHint: true, openWorldHint: false },\n    description:\n      \"Read-only current-month spend summary for the application's agent \" +\n      'wallets: total spent, transaction count, average ticket, display ' +\n      'currency and excluded assets. Returns JSON. Cannot move funds.',\n    inputSchema: expenseStatsSchema,\n    handler: async (\n      input: z.infer<typeof expenseStatsSchema>,\n    ): Promise<string> => {\n      requireCredentials(session);\n\n      const qs = new URLSearchParams({\n        applicationId: input.applicationId ?? session.appId,\n      });\n      if (input.agentId) qs.set('agentId', input.agentId);\n      if (input.ownerId) qs.set('ownerId', input.ownerId);\n\n      const url = `${session.baseURL}/v1/agent-wallets/expenses/stats?${qs}`;\n      logger.info(`expense_stats: GET ${url}`);\n\n      const res = await fetch(url, { headers: { ...buildApiKeyHeaders(session) } });\n      if (!res.ok) {\n        const body = await res.text().catch(() => '');\n        throw new Error(`expense stats failed: ${res.status} ${body}`);\n      }\n\n      return JSON.stringify(await res.json());\n    },\n  };\n}\n", "import { z } from 'zod';\n\nimport { logger } from '../lib/logger.js';\nimport {\n  buildApiKeyHeaders,\n  requireCredentials,\n  type Session,\n} from '../lib/session.js';\n\nexport const listExpenseTransactionsSchema = z.object({\n  applicationId: z\n    .string()\n    .optional()\n    .describe(\n      'Application UUID to scope the transactions to. Defaults to this wallet ' +\n        \"server's configured KEYBAN_APP_ID.\",\n    ),\n  agentId: z\n    .string()\n    .optional()\n    .describe('Optional agent-wallet UUID to narrow the list to one wallet.'),\n  ownerId: z\n    .string()\n    .optional()\n    .describe('Optional owner (responsable) UUID to narrow the list.'),\n  currentPage: z\n    .number()\n    .int()\n    .min(1)\n    .optional()\n    .describe('1-based page number (default 1).'),\n  pageSize: z\n    .number()\n    .int()\n    .min(1)\n    .max(100)\n    .optional()\n    .describe('Rows per page, 1-100 (default 20).'),\n});\n\nexport function createListExpenseTransactionsTool(session: Session) {\n  return {\n    name: 'list_expense_transactions',\n    title: 'List wallet transactions',\n    annotations: { readOnlyHint: true, openWorldHint: false },\n    description:\n      \"Read-only aggregated on-chain transfers across the application's agent \" +\n      'wallets, newest first, offset-paginated. Returns JSON `{ data, total }`. ' +\n      'Cannot move funds.',\n    inputSchema: listExpenseTransactionsSchema,\n    handler: async (\n      input: z.infer<typeof listExpenseTransactionsSchema>,\n    ): Promise<string> => {\n      requireCredentials(session);\n\n      const qs = new URLSearchParams({\n        applicationId: input.applicationId ?? session.appId,\n      });\n      if (input.agentId) qs.set('agentId', input.agentId);\n      if (input.ownerId) qs.set('ownerId', input.ownerId);\n      if (input.currentPage) qs.set('currentPage', String(input.currentPage));\n      if (input.pageSize) qs.set('pageSize', String(input.pageSize));\n\n      const url = `${session.baseURL}/v1/agent-wallets/expenses/transactions?${qs}`;\n      logger.info(`list_expense_transactions: GET ${url}`);\n\n      const res = await fetch(url, { headers: { ...buildApiKeyHeaders(session) } });\n      if (!res.ok) {\n        const body = await res.text().catch(() => '');\n        throw new Error(`expense transactions failed: ${res.status} ${body}`);\n      }\n\n      return JSON.stringify(await res.json());\n    },\n  };\n}\n", "import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\n\nimport { resolveURL } from './lib/env-urls.js';\nimport { logger } from './lib/logger.js';\nimport { createSession } from './lib/session.js';\nimport { registerTool } from './lib/tool-registry.js';\nimport {\n  createGetAccountInfoTool,\n  createApiStatusTool,\n  createSignMessageTool,\n  createTransferUsdcTool,\n  createBalanceTool,\n  createX402PayTool,\n  createX402InfoTool,\n  createCancelIntentTool,\n  createWaitForIntentTool,\n  createDiscoverX402ServicesTool,\n  createExpenseStatsTool,\n  createListExpenseTransactionsTool,\n} from './tools/index.js';\n\nconst SERVER_NAME = 'agent-wallet-mcp';\nconst SERVER_VERSION = '0.0.0';\n\nasync function main(): Promise<void> {\n  logger.info(`Starting ${SERVER_NAME} v${SERVER_VERSION}`);\n\n  const session = createSession();\n\n  // Configure API key from environment variables (the key never reaches the LLM)\n  const envApiKey = process.env.KEYBAN_API_KEY;\n  if (envApiKey) {\n    session.apiKey = envApiKey;\n    if (process.env.KEYBAN_APP_ID) session.appId = process.env.KEYBAN_APP_ID;\n    if (process.env.KEYBAN_BASE_URL) session.baseURL = resolveURL(process.env.KEYBAN_BASE_URL);\n    if (process.env.KEYBAN_NETWORK) session.network = process.env.KEYBAN_NETWORK;\n    logger.info('API key configured from environment');\n  }\n\n  // This MCP serves admin-provisioned agent wallets. KEYBAN_WALLET_ADDRESS and\n  // KEYBAN_INVITE_KEY are always required: the invite key authorizes the one-time\n  // on-chain FROST-signer registration performed on first boot.\n  // KEYBAN_DKG_BLOB is an optional, pre-generated client share: when present the\n  // agent uses it directly instead of running its own DKG and skips the OS keyring\n  // (for hosted runtimes like n8n that have no keyring). It does NOT replace the\n  // invite key.\n  const envInviteKey = process.env.KEYBAN_INVITE_KEY;\n  const envWalletAddress = process.env.KEYBAN_WALLET_ADDRESS;\n  if (!envInviteKey) {\n    throw new Error(\n      'KEYBAN_INVITE_KEY is required (one-shot ECDSA private key, 0x + 64 hex).',\n    );\n  }\n  if (!envWalletAddress) {\n    throw new Error(\n      'KEYBAN_WALLET_ADDRESS is required (deployed SchnorrAccount address, 0x + 40 hex).',\n    );\n  }\n  if (!/^0x[a-fA-F0-9]{64}$/.test(envInviteKey)) {\n    throw new Error('KEYBAN_INVITE_KEY must be 0x followed by 64 hex characters.');\n  }\n  if (!/^0x[a-fA-F0-9]{40}$/.test(envWalletAddress)) {\n    throw new Error('KEYBAN_WALLET_ADDRESS must be 0x followed by 40 hex characters.');\n  }\n  session.inviteKey = envInviteKey;\n  session.walletAddress = envWalletAddress;\n  logger.info('Agent-wallet credentials configured');\n\n  // Optional pre-generated client share from the admin \"Initialize signer\"\n  // action. When present, initialization uses it directly instead of running a\n  // DKG on first boot. Stored base64 to stay a single-line env var value.\n  const envDkgBlob = process.env.KEYBAN_DKG_BLOB;\n  if (envDkgBlob) {\n    try {\n      session.seededDkgBlob = Buffer.from(envDkgBlob, 'base64').toString('utf8');\n      // Fail fast on a malformed blob \u2014 must be a JSON object (a primitive like\n      // `null`/`123` would only blow up later when `secret_share` is read).\n      const parsed = JSON.parse(session.seededDkgBlob);\n      if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n        throw new Error('decoded value is not a JSON object');\n      }\n      logger.info('Pre-generated client share loaded from KEYBAN_DKG_BLOB');\n    } catch (err) {\n      throw new Error('KEYBAN_DKG_BLOB is not valid base64-encoded JSON.', {\n        cause: err,\n      });\n    }\n  }\n\n  const server = new McpServer(\n    {\n      name: SERVER_NAME,\n      version: SERVER_VERSION,\n    },\n    {\n      instructions:\n        'Keyban agent wallet MCP server. Provides tools to manage blockchain wallets: check balances, transfer USDC, sign messages, fetch x402 payment metadata and x402 payment..',\n    },\n  );\n\n  const tools = [\n    createGetAccountInfoTool(session),\n    createApiStatusTool(session),\n    createSignMessageTool(session),\n    createTransferUsdcTool(session),\n    createBalanceTool(session),\n    createX402PayTool(session),\n    createX402InfoTool(session),\n    createCancelIntentTool(session),\n    createWaitForIntentTool(session),\n    createDiscoverX402ServicesTool(session),\n    createExpenseStatsTool(session),\n    createListExpenseTransactionsTool(session),\n  ];\n\n  for (const tool of tools) registerTool(server, tool);\n\n  logger.info(`Registered ${tools.length} tools`);\n\n  const transport = new StdioServerTransport();\n  await server.connect(transport);\n\n  logger.info('MCP server connected via stdio transport');\n\n  process.on('SIGINT', async () => {\n    logger.info('Received SIGINT, shutting down...');\n    await server.close();\n    process.exit(0);\n  });\n\n  process.on('SIGTERM', async () => {\n    logger.info('Received SIGTERM, shutting down...');\n    await server.close();\n    process.exit(0);\n  });\n}\n\nmain().catch((error) => {\n  logger.error('Fatal error', error);\n  process.exit(1);\n});\n"],
  "mappings": "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iB,OAAO;AAC1B,YAAM,IAAI,0BAA0B,EAAE,QAAgB,CAAE;AAC1D,qBAAiB,OAAO,IAAI,8BAA8B,YAAY;EACxE;AACA,SAAO;AACT;AApGA,IAAAC,sBAAA;;;AAIA;AAIA;AAYA;AACA;;;;;ACrBA,IAAa,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAEA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAEA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA;AAjGb;;AAAO,IAAM,UAAU,OAAO,KAAK,MAAM;AAClC,IAAM,WAAW,OAAO,MAAM,MAAM;AACpC,IAAM,WAAW,OAAO,MAAM,MAAM;AACpC,IAAM,WAAW,OAAO,MAAM,MAAM;AACpC,IAAM,WAAW,OAAO,MAAM,MAAM;AACpC,IAAM,WAAW,OAAO,MAAM,MAAM;AACpC,IAAM,WAAW,OAAO,MAAM,MAAM;AACpC,IAAM,WAAW,OAAO,MAAM,MAAM;AACpC,IAAM,WAAW,OAAO,MAAM,MAAM;AACpC,IAAM,WAAW,OAAO,MAAM,MAAM;AACpC,IAAM,WAAW,OAAO,MAAM,MAAM;AACpC,IAAM,WAAW,OAAO,MAAM,MAAM;AACpC,IAAM,YAAY,OAAO,OAAO,MAAM;AACtC,IAAM,YAAY,OAAO,OAAO,MAAM;AACtC,IAAM,YAAY,OAAO,OAAO,MAAM;AACtC,IAAM,YAAY,OAAO,OAAO,MAAM;AACtC,IAAM,YAAY,OAAO,OAAO,MAAM;AACtC,IAAM,YAAY,OAAO,OAAO,MAAM;AAC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UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,MAAM;;MAER;QACE,QAAQ;UACN;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,MAAM;;MAER;QACE,QAAQ;UACN;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,MAAM;;MAER;QACE,QAAQ;UACN;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,MAAM;;MAER;QACE,QAAQ;UACN;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,MAAM;;MAER;QACE,QAAQ;UACN;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,MAAM;;MAER;QACE,QAAQ;UACN;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,MAAM;;MAER;QACE,WAAW;QACX,QAAQ;UACN;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,MAAM;;MAER;QACE,WAAW;QACX,QAAQ;UACN;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,MAAM;;MAER;QACE,WAAW;QACX,QAAQ;UACN;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,MAAM;;MAER;QACE,WAAW;QACX,QAAQ;UACN;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,MAAM;;MAER;QACE,QAAQ;UACN;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,SAAS;UACP;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,iBAAiB;QACjB,MAAM;;MAER;QACE,QAAQ;UACN;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,SAAS;UACP;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,iBAAiB;QACjB,MAAM;;MAER;QACE,QAAQ;UACN;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,SAAS;UACP;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,iBAAiB;QACjB,MAAM;;MAER;QACE,QAAQ;UACN;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;;QAGV,MAAM;QACN,SAAS,CAAA;QACT,iBAAiB;QACjB,MAAM;;MAER;QACE,QAAQ;UACN;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YACE,cAAc;YACd,MAAM;YACN,MAAM;;UAER;YA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA+/Db,MAAM,IAAI;AAAA;AAAA;;;AClgEhB;AAAA;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,YAAQ,WAAW;AACnB,YAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KA+/Dd,MAAM,IAAI;AAAA;AAAA;;;AClgEf;AAAA;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,YAAQ,WAAW;AACnB,YAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UA+/DT,MAAM,IAAI;AAAA;AAAA;;;AClgEpB;AAAA;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,YAAQ,WAAW;AACnB,YAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OA+/DZ,MAAM,IAAI;AAAA;AAAA;;;AClgEjB;AAAA;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,YAAQ,WAAW;AACnB,YAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA+/Dd,MAAM,IAAI;AAAA;AAAA;;;AClgEf;AAAA;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,YAAQ,WAAW;AACnB,YAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCA+/DX,MAAM,IAAI;AAAA;AAAA;;;AClgElB;AAAA;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,YAAQ,WAAW;AACnB,YAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA+/DV,MAAM,IAAI;AAAA;AAAA;;;AClgEnB;AAAA;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,YAAQ,WAAW;AACnB,YAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QA+/DhB,MAAM,IAAI;AAAA;AAAA;;;AClgEb;AAAA;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,YAAQ,WAAW;AACnB,YAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OA+/DZ,MAAM,IAAI;AAAA;AAAA;;;AClgEjB;AAAA;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,YAAQ,WAAW;AACnB,YAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QA+/DhB,MAAM,IAAI;AAAA;AAAA;;;;;;;;ACjg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",
  "names": ["stringify", "UsedValueState", "getCode", "error", "from", "hash", "self", "mergeValues", "gen", "from", "Type", "error", "gen", "gen", "self", "DataType", "gen", "gen", "gen", "gen", "validate", "_a", "self", "gen", "gen", "self", "gen", "validate", "buffer", "ipv6", "esc", "http", "parse", "base", "Ajv", "cacheKey", "logger", "gen", "self", "error", "error", "gen", "error", "error", "gen", "error", "error", "gen", "error", "error", "gen", "error", "gen", "error", "gen", "error", "gen", "gen", "error", "error", "gen", "gen", "error", "gen", "error", "gen", "gen", "gen", "gen", "error", "gen", "gen", "error", "gen", "error", "gen", "self", "DiscrError", "error", "gen", "required", "Ajv", "validate", "date", "time", "error", "gen", "self", "version", "docsPath", "version", "string", "array", "abi", "length", "formatAbiItem", "init_formatAbiItem", "version", "init_version", "BaseError", "init_version", "docsPath", "version", "init_formatAbiItem", "BaseError", "docsPath", "size", "formatAbiItem", "BaseError", "size", "size", "BaseError", "size", "size", "number", "string", "size", "index", "BaseError", "encoder", "crypto", "bytesToHex", "hexes", "hexToBytes", "array", "toBytes", "pad", "crypto", "init_utils", "init_utils", "toBytes", "BaseError", "BaseError", "size", "hash", "cacheKey", "concatBytes", "bytesRegex", "integerRegex", "init_regex", "size", "integerRegex", "length", "BaseError", "index", "init_regex", "abi", "index", "abi", "docsPath", "formatAbiItem", "init_formatAbiItem", "abi", "BaseError", "init_cursor", "size", "data", "length", "consumed", "value", "size", "init_cursor", "abi", "formatAbiItem", "init_formatAbiItem", "value", "integer", "BaseError", "BaseError", "docsPath", "hash", "index", "init_utils", "init_formatAbiItem", "init_utils", "BaseError", "docsPath", "abi", "formatAbiItem", "error", "init_utils", "BaseError", "error", "BaseError", "docsPath", "isLE", "_32n", "init_utils", "toBytes", "buffer", "init_utils", "init_utils", "hash", "toBytes", "pad", "isBytes", "abytes", "num", "hexToNumber", "_0n", "bytesToHex", "hasHexBuiltin", "hexes", "asciiToBase16", "asciis", "hexToBytes", "array", "concatBytes", "pad", "utf8ToBytes", "_1n", "gen", "object", "init_utils", "_0n", "number", "_1n", "_2n", "num", "bitLen", "isLE", "init_utils", "window", "_1n", "_0n", "base", "transform", "wbits", "init_utils", "num", "size", "bytesToHex", "toBytes", "concatBytes", "fromBytes", "_3n", "_4n", "_1n", "isBytes", "error", "Point", "z", "endo", "_0n", "a", "modN", "number", "from", "hexToBytes", "hash", "randomBytes", "isHex", "_2n", "tv5", "c1", "c2", "isValid", "init_utils", "int", "hash", "create", "init_utils", "abytes", "concatBytes", "utf8ToBytes", "hash", "createHasher", "Point", "num", "init_utils", "_3n", "_2n", "concatBytes", "_1n", "_0n", "error", "init_utils", "createHasher", "BaseError", "BaseError", "formatted", "init_stateOverride", "abi", "docsPath", "version", "init_version", "version", "init_errors", "init_version", "walk", "BaseError", "init_errors", "docsPath", "version", "assertSize", "size", "SizeOverflowError", "assertStartOffset", "SliceOffsetOutOfBoundsError", "assertEndOffset", "charCodeToBase16", "charCodeMap", "pad", "SizeExceedsPaddingSizeError", "trim", "assertSize", "size", "SizeOverflowError", "assertStartOffset", "SliceOffsetOutOfBoundsError", "assertEndOffset", "pad", "SizeExceedsPaddingSizeError", "trim", "stringify", "value", "assert", "size", "assertSize", "index", "charCodeToBase16", "BaseError", "encoder", "padRight", "pad", "slice", "assertStartOffset", "assertEndOffset", "toBigInt", "InvalidBytesBooleanError", "toNumber", "trim", "SizeOverflowError", "SliceOffsetOutOfBoundsError", "SizeExceedsPaddingSizeError", "stringify", "assert", "concat", "from", "assertSize", "string", "hexes", "size", "IntegerOutOfRangeError", "fromString", "encoder", "pad", "slice", "assertStartOffset", "assertEndOffset", "trimLeft", "trim", "validate", "SizeOverflowError", "SliceOffsetOutOfBoundsError", "SizeExceedsPaddingSizeError", "BaseError", "stringify", "toRpc", "init_contract", "BaseError", "abi", "docsPath", "docsPath", "cause", "wait", "args", "split", "init_utils", "BaseError", "abi", "formatAbiItem", "init_formatAbiItem", "abi", "docsPath", "formatAbiItem", "init_formatAbiItem", "abi", "docsPath", "ccipRequest", "error", "error", "init_ccip", "BaseError", "toRpc", "base", "data", "offchainLookup", "offchainLookupSignature", "wait", "args", "size", "error", "init_contract", "init_stateOverride", "getUsdcChainEntry", "BaseError", "docsPath", "execTyped", "string", "formatAbiParameter", "tupleRegex", "formatAbiParameters", "formatAbiItem", "abi", "isErrorSignature", "execErrorSignature", "isEventSignature", "execEventSignature", "isFunctionSignature", "execFunctionSignature", "isStructSignature", "execStructSignature", "isConstructorSignature", "execConstructorSignature", "isFallbackSignature", "execFallbackSignature", "isReceiveSignature", "errorSignatureRegex", "eventSignatureRegex", "functionSignatureRegex", "structSignatureRegex", "constructorSignatureRegex", "fallbackSignatureRegex", "receiveSignatureRegex", "InvalidAbiItemError", "UnknownTypeError", "UnknownSolidityTypeError", "InvalidAbiParametersError", "InvalidParameterError", "SolidityProtectedKeywordError", "InvalidModifierError", "InvalidFunctionModifierError", "InvalidAbiTypeParameterError", "InvalidSignatureError", "UnknownSignatureError", "InvalidStructSignatureError", "CircularReferenceError", "InvalidParenthesisError", "getParameterCacheKey", "parseSignature", "parseFunctionSignature", "parseEventSignature", "parseErrorSignature", "parseConstructorSignature", "parseFallbackSignature", "parseAbiParameter", "splitParameters", "isSolidityType", "isSolidityKeyword", "isValidDataLocation", "abiParameterWithoutTupleRegex", "abiParameterWithTupleRegex", "dynamicIntegerRegex", "protectedKeywordsRegex", "parseStructs", "resolveStructs", "typeWithoutTupleRegex", "array", "parseAbi", "abi", "parseAbiItem", "parseAbiParameter", "parseAbiParameters", "length", "getAction", "formatAbiItem", "formatAbiParams", "formatAbiParam", "isHex", "size", "errorConfig", "docsPath", "config", "BaseError", "walk", "AbiConstructorNotFoundError", "docsPath", "AbiConstructorParamsNotFoundError", "size", "AbiDecodingDataSizeTooSmallError", "AbiDecodingZeroDataError", "AbiEncodingArrayLengthMismatchError", "AbiEncodingBytesSizeMismatchError", "AbiEncodingLengthMismatchError", "AbiErrorInputsNotFoundError", "AbiErrorNotFoundError", "AbiErrorSignatureNotFoundError", "AbiEventSignatureEmptyTopicsError", "AbiEventSignatureNotFoundError", "AbiEventNotFoundError", "AbiFunctionNotFoundError", "AbiFunctionOutputsNotFoundError", "AbiFunctionSignatureNotFoundError", "AbiItemAmbiguityError", "BytesSizeMismatchError", "DecodeLogDataMismatch", "DecodeLogTopicsMismatch", "InvalidAbiEncodingTypeError", "InvalidAbiDecodingTypeError", "InvalidArrayError", "InvalidDefinitionTypeError", "UnsupportedPackedAbiType", "FilterTypeNotSupportedError", "SliceOffsetOutOfBoundsError", "size", "SizeExceedsPaddingSizeError", "InvalidBytesLengthError", "pad", "padHex", "padBytes", "size", "IntegerOutOfRangeError", "size", "InvalidBytesBooleanError", "InvalidHexBooleanError", "InvalidHexValueError", "SizeOverflowError", "trim", "assertSize", "fromHex", "hexToBigInt", "hexToBool", "hexToNumber", "hexToString", "size", "number", "toHex", "boolToHex", "bytesToHex", "numberToHex", "stringToHex", "hexes", "string", "size", "encoder", "toBytes", "boolToBytes", "hexToBytes", "numberToBytes", "stringToBytes", "encoder", "charCodeMap", "charCodeToBase16", "index", "add", "fromBig", "split", "U32_MASK64", "_32n", "shrSH", "shrSL", "rotrSH", "rotrSL", "rotrBH", "rotrBL", "rotlSH", "rotlSL", "rotlBH", "rotlBL", "add3L", "add3H", "add4L", "add4H", "add5L", "add5H", "nc", "isBytes", "anumber", "abytes", "ahash", "aexists", "aoutput", "u32", "clean", "createView", "rotr", "byteSwap", "byteSwap32", "bytesToHex", "hexToBytes", "utf8ToBytes", "bytesToUtf8", "toBytes", "concatBytes", "createHasher", "createXOFer", "randomBytes", "hasHexBuiltin", "hexes", "asciis", "asciiToBase16", "array", "pad", "Hash", "keccakP", "_0n", "_1n", "_2n", "_7n", "_256n", "_0x71n", "SHA3_PI", "SHA3_ROTL", "_SHA3_IOTA", "IOTAS", "SHA3_IOTA_H", "SHA3_IOTA_L", "rotlH", "rotlL", "Keccak", "gen", "keccak256", "hashSignature", "hash", "normalizeSignature", "toSignature", "toSignatureHash", "InvalidAddressError", "LruMap", "size", "checksumAddress", "getAddress", "checksumAddressCache", "hash", "isAddress", "addressRegex", "cacheKey", "concat", "concatBytes", "concatHex", "slice", "sliceBytes", "sliceHex", "assertStartOffset", "assertEndOffset", "encodeAbiParameters", "getArrayComponents", "prepareParams", "encodeParams", "prepareParam", "encodeArray", "encodeTuple", "encodeAddress", "encodeBool", "size", "encodeNumber", "encodeBytes", "encodeString", "length", "index", "toFunctionSelector", "getAbiItem", "isArgOfType", "getAmbiguousTypes", "abi", "index", "encodeEventTopics", "docsPath", "abi", "encodeArg", "createFilterRequestScope", "createContractEventFilter", "abi", "parseAccount", "prepareEncodeFunctionData", "docsPath", "abi", "encodeFunctionData", "abi", "NegativeOffsetError", "PositionOutOfBoundsError", "RecursiveReadLimitExceededError", "createCursor", "staticCursor", "size", "fromBytes", "bytesToBigInt", "bytesToBool", "bytesToNumber", "bytesToString", "decodeAbiParameters", "data", "decodeParameter", "decodeArray", "decodeTuple", "decodeAddress", "decodeBool", "decodeBytes", "decodeNumber", "decodeString", "sizeOfLength", "sizeOfOffset", "length", "hasDynamicChild", "consumed", "value", "size", "decodeErrorResult", "abi", "stringify", "value", "formatAbiItemWithArgs", "formatUnits", "integer", "formatEther", "formatGwei", "prettyStateMapping", "prettyStateOverride", "AccountStateConflictError", "StateAssignmentConflictError", "prettyPrint", "InvalidLegacyVError", "InvalidSerializableTransactionError", "InvalidStorageKeySizeError", "TransactionExecutionError", "docsPath", "TransactionNotFoundError", "hash", "index", "TransactionReceiptNotFoundError", "TransactionReceiptRevertedError", "WaitForTransactionReceiptTimeoutError", "getContractAddress", "getUrl", "CallExecutionError", "docsPath", "ContractFunctionExecutionError", "abi", "ContractFunctionRevertedError", "error", "ContractFunctionZeroDataError", "CounterfactualDeploymentFailedError", "RawContractError", "HttpRequestError", "RpcRequestError", "error", "TimeoutError", "unknownErrorCode", "RpcError", "docsPath", "ProviderRpcError", "ParseRpcError", "InvalidRequestRpcError", "MethodNotFoundRpcError", "InvalidParamsRpcError", "InternalRpcError", "InvalidInputRpcError", "ResourceNotFoundRpcError", "ResourceUnavailableRpcError", "TransactionRejectedRpcError", "MethodNotSupportedRpcError", "LimitExceededRpcError", "JsonRpcVersionUnsupportedError", "UserRejectedRequestError", "UnauthorizedProviderError", "UnsupportedProviderMethodError", "ProviderDisconnectedError", "ChainDisconnectedError", "SwitchChainError", "UnsupportedNonOptionalCapabilityError", "UnsupportedChainIdError", "DuplicateIdError", "UnknownBundleIdError", "BundleTooLargeError", "AtomicReadyWalletRejectedUpgradeError", "AtomicityNotSupportedError", "WalletConnectSessionSettlementError", "UnknownRpcError", "getContractError", "EXECUTION_REVERTED_ERROR_CODE", "abi", "docsPath", "error", "err", "publicKeyToAddress", "setBigUint64", "Chi", "Maj", "isLE", "_32n", "HashMD", "buffer", "SHA256_K", "SHA256_W", "SHA256", "SHA224", "K512", "SHA512_Kh", "SHA512_Kl", "SHA512_W_H", "SHA512_W_L", "HMAC", "hash", "pad", "hmac", "isBytes", "abytes", "abool", "numberToHexUnpadded", "hexToNumber", "bytesToHex", "hexToBytes", "bytesToNumberBE", "bytesToNumberLE", "numberToBytesBE", "numberToBytesLE", "ensureBytes", "concatBytes", "utf8ToBytes", "inRange", "aInRange", "bitLen", "createHmacDrbg", "validateObject", "memoized", "_0n", "_1n", "num", "hasHexBuiltin", "hexes", "asciis", "asciiToBase16", "array", "pad", "isPosBig", "bitMask", "u8n", "u8fr", "gen", "validatorFns", "object", "mod", "pow2", "invert", "tonelliShanks", "FpSqrt", "validateField", "FpPow", "FpInvertBatch", "FpLegendre", "FpIsSquare", "nLength", "Field", "getFieldBytesLength", "getMinHashLength", "mapHashToField", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_8n", "num", "number", "sqrt3mod4", "sqrt5mod8", "FIELD_FIELDS", "bitLen", "isLE", "hash", "wNAF", "pippenger", "validateBasic", "_0n", "_1n", "constTimeNegate", "validateW", "calcWOpts", "calcOffsets", "window", "validateMSMPoints", "validateMSMScalars", "pointPrecomputes", "pointWindowSizes", "getW", "base", "transform", "wbits", "weierstrassPoints", "weierstrass", "SWUFpSqrtRatio", "mapToCurveSimpleSWU", "validateSigVerOpts", "validatePointOpts", "DERErr", "num", "_0n", "int", "numToSizedHex", "size", "_1n", "_2n", "_3n", "_4n", "toBytes", "fromBytes", "error", "Point", "z", "endo", "a", "validateOpts", "modN", "number", "from", "hash", "randomBytes", "isHex", "tv5", "c1", "c2", "isValid", "getHash", "createCurve", "hash", "create", "expand_message_xmd", "expand_message_xof", "hash_to_field", "isogenyMap", "createHasher", "os2ip", "i2osp", "anum", "strxor", "hash", "Point", "num", "secp256k1P", "secp256k1N", "_0n", "_1n", "_2n", "divNearest", "sqrtMod", "_3n", "Fpk1", "TAGGED_HASH_PREFIXES", "taggedHash", "pointToBytes", "numTo32b", "modP", "modN", "Point", "GmulAdd", "schnorrGetExtPubKey", "lift_x", "num", "challenge", "schnorrGetPublicKey", "schnorrSign", "schnorrVerify", "error", "isoMap", "mapSWU", "recoverPublicKey", "hash", "secp256k1", "yParityOrV", "recoveryBit", "toRecoveryBit", "recoverAddress", "hash", "toRlp", "getEncodable", "getEncodableList", "getEncodableBytes", "getSizeOfLength", "encode", "hashAuthorization", "hash", "recoverAuthorizationAddress", "EstimateGasExecutionError", "docsPath", "ExecutionRevertedError", "FeeCapTooHighError", "FeeCapTooLowError", "NonceTooHighError", "NonceTooLowError", "NonceMaxValueError", "InsufficientFundsError", "IntrinsicGasTooHighError", "IntrinsicGasTooLowError", "TransactionTypeNotSupportedError", "TipAboveFeeCapError", "UnknownNodeError", "getNodeError", "getEstimateGasError", "docsPath", "cause", "extract", "formatted", "defineFormatter", "formatTransactionRequest", "formatAuthorizationList", "serializeStateMapping", "serializeAccountStateOverride", "serializeStateOverride", "assertRequest", "BaseFeeScalarError", "Eip1559FeesNotSupportedError", "MaxFeePerGasTooLowError", "BlockNotFoundError", "formatTransaction", "formatAuthorizationList", "formatBlock", "getBlock", "getGasPrice", "estimateMaxPriorityFeePerGas", "internal_estimateMaxPriorityFeePerGas", "estimateFeesPerGas", "internal_estimateFeesPerGas", "base", "getTransactionCount", "blobsToCommitments", "blobsToProofs", "sha256", "commitmentToVersionedHash", "version", "commitmentsToVersionedHashes", "version", "blobsPerTransaction", "BlobSizeTooLargeError", "size", "EmptyBlobError", "InvalidVersionedHashSizeError", "hash", "InvalidVersionedHashVersionError", "version", "toBlobs", "size", "toBlobSidecars", "getTransactionType", "getTransactionError", "docsPath", "cause", "getChainId", "fillTransaction", "format", "base", "prepareTransactionRequest", "getChainId", "chainId", "from", "gas", "nonce", "type", "error", "e", "getBlock", "block", "estimateGas", "estimateContractGas", "abi", "error", "isAddressEqual", "formatLog", "decodeEventLog", "docsPath", "abi", "decodeTopic", "parseEventLogs", "abi", "includesArgs", "isEqual", "index", "value", "input", "getLogs", "event", "getContractEvents", "abi", "decodeFunctionResult", "docsPath", "abi", "getUrl", "getVersion", "prettyPrint", "BaseError", "docsPath", "version", "walk", "assertSize", "assertStartOffset", "assertEndOffset", "charCodeToBase16", "pad", "trim", "size", "assertSize", "assertStartOffset", "assertEndOffset", "pad", "trim", "size", "parse", "stringify", "bigIntSuffix", "string", "value", "assert", "concat", "from", "fromArray", "fromBoolean", "fromHex", "fromNumber", "fromString", "isEqual", "padLeft", "padRight", "size", "slice", "toBigInt", "toBoolean", "toHex", "toNumber", "toString", "trimLeft", "trimRight", "validate", "decoder", "encoder", "InvalidBytesTypeError", "index", "InvalidBytesBooleanError", "SizeOverflowError", "SliceOffsetOutOfBoundsError", "SizeExceedsPaddingSizeError", "assert", "concat", "from", "fromBoolean", "fromBytes", "fromNumber", "fromString", "isEqual", "padLeft", "padRight", "slice", "size", "trimLeft", "trimRight", "toBigInt", "toBoolean", "toBytes", "toNumber", "toString", "validate", "encoder", "hexes", "InvalidHexTypeError", "InvalidHexValueError", "string", "IntegerOutOfRangeError", "InvalidHexBooleanError", "InvalidLengthError", "SizeOverflowError", "SliceOffsetOutOfBoundsError", "SizeExceedsPaddingSizeError", "fromRpc", "toRpc", "fromRpc", "toRpc", "universalResolverErrors", "ChainDoesNotSupportContract", "ClientChainNotConfiguredError", "InvalidChainIdError", "encodeDeployData", "docsPath", "abi", "getChainContractAddress", "getCallError", "docsPath", "cause", "withResolvers", "createBatchScheduler", "schedulerCache", "wait", "args", "split", "OffchainLookupError", "OffchainLookupResponseMalformedError", "OffchainLookupSenderMismatchError", "decodeFunctionData", "abi", "encodeErrorResult", "docsPath", "abi", "encodeFunctionResult", "docsPath", "abi", "localBatchGatewayRequest", "ccipRequest", "encodeError", "error", "offchainLookup", "ccipRequest", "error", "call", "getRevertErrorData", "toDeploylessCallViaBytecodeData", "toDeploylessCallViaFactoryData", "shouldPerformMulticall", "scheduleMulticall", "base", "data", "offchainLookup", "offchainLookupSignature", "wait", "args", "size", "error", "readContract", "abi", "error", "simulateContract", "abi", "error", "observe", "callbackCount", "listeners", "cleanup", "wait", "time", "poll", "getCache", "withCache", "cacheKey", "getBlockNumber", "cacheKey", "getFilterChanges", "uninstallFilter", "watchContractEvent", "abi", "transport", "eventName", "args", "error", "docsPath", "sendRawTransaction", "error", "hash", "e", "writeContract", "abi", "error", "abi", "client", "withRetry", "shouldRetry", "error", "formatTransactionReceipt", "version", "call", "error", "chainId", "receipts", "hash", "status", "version", "statusCode", "result", "error", "uid", "size", "index", "buffer", "createClient", "config", "extend", "base", "key", "isNullUniversalResolverError", "encodedLabelToLabelhash", "hash", "namehash", "encodeLabelhash", "hash", "labelhash", "packetToBytes", "getEnsAddress", "EnsAvatarInvalidMetadataError", "EnsAvatarInvalidNftUriError", "EnsAvatarUriResolutionError", "EnsAvatarUnsupportedNamespaceError", "isImageUri", "getGateway", "resolveAvatarUri", "getJsonImage", "getMetadataAvatarUri", "parseAvatarUri", "parseNftUri", "getNftTokenUri", "networkRegex", "ipfsHashRegex", "base64Regex", "dataURIRegex", "error", "custom", "res", "parseAvatarRecord", "record", "parseNftAvatarUri", "getEnsText", "record", "getEnsAvatar", "record", "getEnsName", "getEnsResolver", "createAccessList", "createBlockFilter", "createEventFilter", "event", "createPendingTransactionFilter", "getBalance", "getBlobBaseFee", "getBlockTransactionCount", "getCode", "getDelegation", "Eip712DomainNotFoundError", "getEip712Domain", "version", "abi", "error", "formatFeeHistory", "getFeeHistory", "getFilterLogs", "encodePacked", "encode", "size", "isBytes", "getContractAddress", "from", "assertTransactionEIP7702", "assertTransactionEIP4844", "assertTransactionEIP1559", "assertTransactionEIP2930", "assertTransactionLegacy", "hash", "version", "serializeAccessList", "serializeTransaction", "toYParitySignatureArray", "serializeTransactionEIP1559", "serializeTransactionEIP2930", "serializeTransactionEIP4844", "serializeTransactionEIP7702", "serializeTransactionLegacy", "blobs", "commitments", "proofs", "v", "serializeAuthorizationList", "verifyAuthorization", "withDedupe", "buildRequest", "shouldRetry", "uid", "error", "defineChain", "extend", "base", "length", "hash", "K", "z", "withTimeout", "createIdStore", "getHttpRpcClient", "parseUrl", "body", "response", "error", "id", "key", "WebSocket", "module", "error", "toPrefixedMessage", "hashMessage", "InvalidDomainError", "InvalidPrimaryTypeError", "InvalidStructTypeError", "validateTypedData", "getTypesForEIP712Domain", "base", "struct", "validateReference", "hashTypedData", "hashDomain", "hashStruct", "encodeType", "encodeData", "hashType", "encodeField", "findTypeDependencies", "parsedType", "LruMap", "size", "caches", "keccak256", "sha256", "validate", "assert", "from", "fromBytes", "fromHex", "toBytes", "toHex", "validate", "InvalidPrefixError", "InvalidUncompressedPrefixError", "InvalidCompressedPrefixError", "InvalidError", "InvalidSerializedSizeError", "x", "prefix", "assert", "checksum", "from", "fromPublicKey", "isEqual", "validate", "Hash", "addressRegex", "InvalidAddressError", "InvalidInputError", "InvalidChecksumError", "hash", "decodeParameter", "decodeAddress", "decodeArray", "decodeBool", "decodeBytes", "decodeNumber", "decodeTuple", "decodeString", "prepareParameters", "prepareParameter", "encode", "encodeAddress", "encodeArray", "encodeBytes", "encodeBoolean", "encodeNumber", "encodeString", "encodeTuple", "getArrayComponents", "hasDynamicChild", "checksumAddress", "sizeOfLength", "sizeOfOffset", "checksum", "wrap", "length", "consumed", "value", "size", "index", "create", "staticCursor", "RecursiveReadLimitExceededError", "PositionOutOfBoundsError", "NegativeOffsetError", "size", "decode", "encode", "encodePacked", "from", "checksumAddress", "ZeroDataError", "DataSizeTooSmallError", "data", "LengthMismatchError", "size", "BytesSizeMismatchError", "InvalidTypeError", "ArrayLengthMismatchError", "InvalidArrayError", "toBytes", "toHex", "from", "fromBytes", "fromHex", "to", "length", "getEncodable", "getEncodableList", "getEncodableBytes", "getSizeOfLength", "encode", "assert", "fromBytes", "fromHex", "extract", "from", "fromLegacy", "fromRpc", "fromTuple", "toBytes", "toHex", "toRpc", "toTuple", "validate", "vToYParity", "MissingPropertiesError", "InvalidRError", "InvalidSError", "InvalidYParityError", "InvalidSerializedSizeError", "yParity", "InvalidVError", "from", "fromRpc", "fromTuple", "getSignPayload", "hash", "toRpc", "toTuple", "Hash", "recoverAddress", "recoverPublicKey", "hash", "assert", "from", "unwrap", "wrap", "validate", "InvalidWrappedSignatureError", "self", "verifyHash", "hash", "verifyMessage", "verifyTypedData", "InvalidDecimalNumberError", "parseUnits", "integer", "formatProof", "formatStorageProof", "getProof", "getStorageAt", "getTransaction", "hash", "index", "getTransactionConfirmations", "hash", "getTransactionReceipt", "hash", "multicall", "contracts", "abi", "error", "result", "simulateBlocks", "block", "call", "abi", "result", "error", "normalizeSignature", "isArgOfType", "getAmbiguousTypes", "index", "from", "fromAbi", "getSelector", "getSignature", "getSignatureHash", "Hash", "abi", "abiItem", "NotFoundError", "index", "AmbiguityError", "InvalidSelectorSizeError", "decode", "encode", "from", "fromAbi", "abi", "options", "item", "encodeData", "from", "fromAbi", "getSelector", "abi", "data", "options", "args", "abiFunction", "output", "simulateCalls", "getBalanceCode", "call", "assert", "from", "unwrap", "wrap", "validate", "InvalidWrappedSignatureError", "serializeSignature", "verifyHash", "verifyErc8010", "verifyErc1271", "hash", "signature", "verifyErc6492", "error", "VerificationError", "verifyMessage", "hash", "verifyTypedData", "hash", "watchBlockNumber", "transport", "error", "waitForTransactionReceipt", "hash", "error", "from", "watchBlocks", "block", "transport", "error", "watchEvent", "transport", "event", "args", "error", "watchPendingTransactions", "hash", "error", "parseSiweMessage", "prefixRegex", "suffixRegex", "validateSiweMessage", "time", "verifySiweMessage", "time", "isValid", "hash", "sendRawTransactionSync", "publicActions", "createPublicClient", "hash", "from", "hash", "index", "config", "abi", "chainId", "hash", "error", "e", "formatters", "createTransport", "uid", "custom", "config", "config", "fetch", "transport", "transports_", "error", "sample", "UrlRequiredError", "http", "config", "wait", "body", "error", "config", "error", "ProviderRpcError", "docsPath", "abi", "length", "version", "error", "parseSignature", "isBytes", "anumber", "abytes", "ahash", "aexists", "aoutput", "clean", "createView", "rotr", "bytesToHex", "hasHexBuiltin", "hexes", "asciiToBase16", "asciis", "hexToBytes", "error", "array", "utf8ToBytes", "concatBytes", "pad", "createHasher", "randomBytes", "init_utils", "Chi", "Maj", "HashMD", "SHA256_IV", "SHA384_IV", "SHA512_IV", "init_md", "init_utils", "isLE", "createView", "aexists", "abytes", "buffer", "aoutput", "clean", "fromBig", "U32_MASK64", "_32n", "split", "init_u64", "SHA256_K", "SHA256_W", "sha256", "init_sha2", "init_md", "init_u64", "init_utils", "HashMD", "rotr", "Chi", "Maj", "clean", "SHA256_IV", "split", "SHA512_IV", "SHA384_IV", "createHasher", "abool", "isPosBig", "anumber", "numberToHexUnpadded", "num", "hexToNumber", "_0n", "bytesToNumberBE", "bytesToHex", "bytesToNumberLE", "abytes", "numberToBytesBE", "hexToBytes", "numberToBytesLE", "inRange", "aInRange", "bitLen", "_1n", "createHmacDrbg", "u8n", "concatBytes", "gen", "validateObject", "object", "isBytes", "randomBytes", "bitMask", "init_utils", "mod", "_0n", "pow2", "invert", "number", "_1n", "sqrt3mod4", "_4n", "sqrt5mod8", "_5n", "_8n", "_2n", "Field", "tonelliShanks", "_7n", "_3n", "FpLegendre", "FpSqrt", "validateField", "FIELD_FIELDS", "validateObject", "FpPow", "num", "FpInvertBatch", "nLength", "anumber", "bitLen", "getFieldBytesLength", "getMinHashLength", "mapHashToField", "isLE", "abytes", "bytesToNumberLE", "bytesToNumberBE", "numberToBytesLE", "numberToBytesBE", "init_modular", "init_utils", "abool", "Point", "validateObject", "validateField", "FpInvertBatch", "validateW", "calcWOpts", "bitMask", "calcOffsets", "window", "_1n", "validateMSMPoints", "validateMSMScalars", "getW", "pointWindowSizes", "_0n", "pippenger", "bitLen", "wbits", "isLE", "Field", "pointPrecomputes", "wNAF", "init_curve", "init_utils", "init_modular", "base", "transform", "create", "roots", "i2osp", "strxor", "isBytes", "expand_message_xmd", "abytes", "concatBytes", "expand_message_xof", "hash_to_field", "validateObject", "hash", "mod", "os2ip", "isogenyMap", "FpInvertBatch", "createHasher", "Point", "num", "init_hash_to_curve", "init_utils", "init_modular", "bytesToNumberBE", "validateObject", "Point", "opts", "concatBytes", "bytesToNumberLE", "bytesToNumberBE", "utf8ToBytes", "randomBytes", "mapHashToField", "getMinHashLength", "bytesToHex", "hexToBytes", "z", "pippenger", "num", "check", "challenge", "init_utils", "init_curve", "init_modular", "validateObject", "Point", "hash", "concatBytes", "randomBytes", "mapHashToField", "getMinHashLength", "bytesToNumberLE", "bytesToNumberBE", "pippenger", "encode", "res", "numberToBytesBE", "abytes", "blind", "init_utils", "init_curve", "init_hash_to_curve", "init_modular", "hmac", "init_hmac", "init_utils", "hash", "ahash", "abytes", "pad", "clean", "aexists", "aoutput", "aInRange", "_0n", "divNearest", "bitMask", "bitLen", "_1n", "validateObject", "abool", "weierstrass", "pointToBytes", "concatBytes", "abytes", "_3n", "_4n", "Point", "hexToBytes", "endo", "bytesToHex", "wNAF", "SWUFpSqrtRatio", "validateField", "_2n", "tv5", "c1", "c2", "mapToCurveSimpleSWU", "x", "isValid", "FpInvertBatch", "randomBytes", "getMinHashLength", "num", "error", "mapHashToField", "isBytes", "hash", "ahash", "hmac", "number", "size", "r", "s", "DER", "bytesToNumberBE", "createHmacDrbg", "recoverPublicKey", "DERErr", "init_weierstrass", "init_hmac", "init_utils", "init_curve", "init_modular", "numberToHexUnpadded", "int", "Point", "mapToCurveSimpleSWU", "init_sha2", "init_hash_to_curve", "init_weierstrass", "weierstrass", "sha256", "createHasher", "buffer", "index", "hash", "challenge", "slice", "base64url", "buildEip3009TypedData", "domain", "abool", "_abool2", "_abytes2", "numberToHexUnpadded", "hexToNumber", "bytesToNumberBE", "bytesToNumberLE", "numberToBytesBE", "numberToBytesLE", "ensureBytes", "copyBytes", "asciiToBytes", "inRange", "aInRange", "bitLen", "createHmacDrbg", "validateObject", "_validateObject", "memoized", "_0n", "_1n", "num", "isPosBig", "bitMask", "u8n", "gen", "validatorFns", "object", "mod", "pow2", "invert", "tonelliShanks", "FpSqrt", "validateField", "FpPow", "FpInvertBatch", "FpLegendre", "FpIsSquare", "nLength", "Field", "getFieldBytesLength", "getMinHashLength", "mapHashToField", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_7n", "_8n", "_9n", "_16n", "num", "number", "assertIsSquare", "sqrt3mod4", "sqrt5mod8", "sqrt9mod16", "FIELD_FIELDS", "isLE", "hash", "negateCt", "normalizeZ", "mulEndoUnsafe", "pippenger", "validateBasic", "_createCurveFields", "_0n", "_1n", "validateW", "calcWOpts", "calcOffsets", "window", "validateMSMPoints", "validateMSMScalars", "pointPrecomputes", "pointWindowSizes", "getW", "assert0", "wNAF", "Point", "base", "transform", "wbits", "createField", "isLE", "_splitEndoScalar", "_normFnElement", "weierstrassN", "SWUFpSqrtRatio", "mapToCurveSimpleSWU", "ecdh", "ecdsa", "weierstrassPoints", "weierstrass", "divNearest", "num", "_2n", "_0n", "_1n", "validateSigFormat", "validateSigOpts", "DERErr", "int", "_3n", "_4n", "error", "getWLengths", "pointToBytes", "pprefix", "Point", "endo", "tv5", "c1", "c2", "isValid", "hash", "randomBytes", "hmac", "number", "size", "r", "s", "isHex", "recoverPublicKey", "_weierstrass_legacy_opts_to_new", "_ecdsa_legacy_opts_to_new", "_ecdsa_new_output_to_legacy", "getHash", "createCurve", "hash", "create", "expand_message_xmd", "expand_message_xof", "hash_to_field", "isogenyMap", "createHasher", "os2ip", "i2osp", "anum", "strxor", "normDST", "hash", "Point", "num", "secp256k1_CURVE", "secp256k1_ENDO", "_0n", "_1n", "_2n", "sqrtMod", "_3n", "Fpk1", "TAGGED_HASH_PREFIXES", "taggedHash", "pointToBytes", "Pointk1", "hasEven", "schnorrGetExtPubKey", "lift_x", "num", "challenge", "schnorrGetPublicKey", "schnorrSign", "schnorrVerify", "error", "size", "isoMap", "mapSWU", "isBytes", "abytes", "anumber", "wrap", "encode", "decode", "join", "from", "padding", "num", "checksum", "alphabet", "slice", "sha256", "hasHexBuiltin", "bytesToString", "stringToBytes", "Point", "bytesToNumber", "numberToBytes", "num", "version", "index", "hash", "error", "hash", "hash", "hash", "wrapTypedDataSignature", "parameters", "hashMessage", "hashTypedData", "recomputeErc7739Hash", "computeRelayHash", "require_util", "util", "assertIs", "assertNever", "object", "joinValues", "array", "objectUtil", "getParsedType", "quotelessJson", "ZodError", "issue", "error", "errorMap", "issue", "require_errors", "mod", "setErrorMap", "getErrorMap", "overrideErrorMap", "mod", "addIssueToContext", "makeIssue", "issue", "ParseStatus", "DIRTY", "OK", "isAborted", "isDirty", "isValid", "isAsync", "errorUtil", "require_types", "datetimeRegex", "custom", "ParseInputLazyPath", "handleResult", "error", "processCreateParams", "errorMap", "ZodType", "check", "ZodEffects", "ZodFirstPartyTypeKind", "ZodOptional", "ZodNullable", "ZodArray", "ZodPromise", "ZodUnion", "ZodIntersection", "transform", "ZodDefault", "ZodBranded", "ZodCatch", "ZodPipeline", "ZodReadonly", "cuidRegex", "cuid2Regex", "ulidRegex", "uuidRegex", "nanoidRegex", "jwtRegex", "durationRegex", "emailRegex", "_emojiRegex", "emojiRegex", "ipv4Regex", "ipv4CidrRegex", "ipv6Regex", "ipv6CidrRegex", "base64Regex", "base64urlRegex", "dateRegexSource", "dateRegex", "timeRegexSource", "timeRegex", "isValidIP", "version", "isValidJWT", "base64", "isValidCidr", "ZodString", "_ZodString", "parsedType", "ctx", "floatSafeRemainder", "ZodNumber", "ZodBigInt", "ZodBoolean", "ZodDate", "ZodSymbol", "ZodUndefined", "ZodNull", "ZodAny", "ZodUnknown", "ZodNever", "ZodVoid", "result", "deepPartialify", "ZodObject", "ZodTuple", "issue", "index", "createZodEnum", "issues", "getDiscriminator", "ZodLazy", "ZodLiteral", "ZodEnum", "ZodNativeEnum", "ZodDiscriminatedUnion", "mergeValues", "ZodRecord", "ZodMap", "ZodSet", "elements", "size", "ZodFunction", "processed", "base", "preprocess", "ZodNaN", "cleanParams", "r", "instanceOfType", "stringType", "numberType", "nanType", "bigIntType", "booleanType", "dateType", "symbolType", "undefinedType", "nullType", "anyType", "unknownType", "neverType", "voidType", "arrayType", "objectType", "strictObjectType", "unionType", "discriminatedUnionType", "intersectionType", "tupleType", "recordType", "mapType", "setType", "functionType", "lazyType", "literalType", "enumType", "nativeEnumType", "promiseType", "effectsType", "optionalType", "nullableType", "preprocessType", "pipelineType", "ostring", "onumber", "oboolean", "exports", "mod", "exports", "z", "__export", "FacilitatorResponseError", "HTTPFacilitatorClient", "RouteConfigurationError", "decodePaymentRequiredHeader", "decodePaymentResponseHeader", "decodePaymentSignatureHeader", "encodePaymentRequiredHeader", "encodePaymentResponseHeader", "encodePaymentSignatureHeader", "getFacilitatorResponseError", "x402HTTPClient", "x402HTTPResourceServer", "__toCommonJS", "Base64EncodedRegex", "safeBase64Encode", "safeBase64Decode", "decoder", "VerifyError", "SettleError", "error", "x402Version", "config", "errorReason", "settleResponse", "failure", "response", "displayAmount", "resource", "import_zod", "NonEmptyString", "Any", "OptionalAny", "NetworkSchemaV1", "NetworkSchemaV2", "NetworkSchema", "ResourceInfoSchema", "PaymentRequirementsV1Schema", "PaymentRequiredV1Schema", "PaymentPayloadV1Schema", "PaymentRequirementsV2Schema", "PaymentRequiredV2Schema", "PaymentPayloadV2Schema", "PaymentRequirementsSchema", "PaymentRequiredSchema", "PaymentPayloadSchema", "verifyResponseSchema", "import_zod2", "settleResponseSchema", "supportedKindSchema", "supportedResponseSchema", "schemas_exports", "__export", "Any", "NetworkSchema", "NetworkSchemaV1", "NetworkSchemaV2", "NonEmptyString", "OptionalAny", "PaymentPayloadSchema", "PaymentPayloadV1Schema", "PaymentPayloadV2Schema", "PaymentRequiredSchema", "PaymentRequiredV1Schema", "PaymentRequiredV2Schema", "PaymentRequirementsSchema", "PaymentRequirementsV1Schema", "PaymentRequirementsV2Schema", "ResourceInfoSchema", "import_zod2", "__toCommonJS", "import_zod", "decodeX402", "secp256k1_exports", "schnorr", "secp256k1", "secp256k1_hasher", "sqrtMod", "_3n", "pow2", "_2n", "Fpk1", "taggedHash", "TAGGED_HASH_PREFIXES", "sha256", "concatBytes", "schnorrGetExtPubKey", "pointToBytes", "lift_x", "challenge", "num", "schnorrGetPublicKey", "schnorrSign", "randomBytes", "abytes", "schnorrVerify", "error", "_0n", "bytesToNumberBE", "isoMap", "mapSWU", "init_secp256k1", "init_sha2", "init_utils", "init_curve", "init_hash_to_curve", "init_modular", "init_weierstrass", "Field", "weierstrass", "size", "mapHashToField", "isogenyMap", "mapToCurveSimpleSWU", "createHasher", "decompressPoint", "normalizeFrostSig", "encodeMultiSignerSignature", "z", "require_core", "$constructor", "config", "initializer", "$ZodAsyncError", "require_util", "assertEqual", "assertNotEqual", "assertIs", "assertNever", "assert", "getEnumValues", "joinValues", "jsonStringifyReplacer", "cached", "nullish", "cleanRegex", "floatSafeRemainder", "defineLazy", "assignProp", "getElementAtPath", "promiseAllObject", "randomString", "esc", "isObject", "isPlainObject", "numKeys", "escapeRegex", "clone", "normalizeParams", "createTransparentProxy", "stringifyPrimitive", "optionalKeys", "pick", "omit", "extend", "merge", "partial", "required", "aborted", "prefixIssues", "unwrapMessage", "finalizeIssue", "getSizableOrigin", "getLengthableOrigin", "parsedType", "issue", "cleanEnum", "array", "object", "getParsedType", "Class", "config", "base64", "base64url", "require_errors", "mod", "flattenError", "formatError", "treeifyError", "prettifyError", "util", "initializer", "error", "issue", "mod", "util", "_parse", "_parseAsync", "_safeParse", "_safeParseAsync", "mod", "emoji", "time", "datetime", "util", "uuid", "version", "_emoji", "dateSource", "timeSource", "timeRegex", "string", "_null", "_undefined", "mod", "util", "numericOriginMap", "inst", "size", "result", "Doc", "require_schemas", "mod", "isValidBase64", "isValidBase64URL", "isValidJWT", "util", "checks", "isAborted", "checkResult", "canary", "result", "_", "base64", "handleArrayResult", "index", "r", "isObject", "allowsEval", "handleUnionResults", "results", "left", "right", "handleIntersectionResults", "mergeValues", "keyResult", "valueResult", "output", "handleDefaultResult", "handleNonOptionalResult", "handlePipeResult", "handleReadonlyResult", "handleRefineResult", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "require_en", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "require_id", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "mod", "util", "error", "issue", "mod", "util", "number", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "util", "error", "issue", "mod", "registry", "$ZodRegistry", "mod", "_string", "_email", "_guid", "_uuid", "_uuidv4", "_uuidv6", "_uuidv7", "_url", "_emoji", "_nanoid", "_cuid", "_cuid2", "_ulid", "_xid", "_ksuid", "_ipv4", "_ipv6", "_cidrv4", "_cidrv6", "_base64", "_base64url", "_e164", "_jwt", "_isoDateTime", "_isoDate", "_isoTime", "_isoDuration", "_number", "_int", "_float32", "_float64", "_int32", "_uint32", "_boolean", "_bigint", "_int64", "_uint64", "_symbol", "_undefined", "_null", "_any", "_unknown", "_never", "_void", "_date", "_nan", "_lt", "_lte", "_gt", "_gte", "_positive", "_negative", "_nonpositive", "_nonnegative", "_multipleOf", "_maxSize", "_minSize", "_size", "_maxLength", "_minLength", "_length", "_regex", "_lowercase", "_uppercase", "_includes", "_startsWith", "_endsWith", "_property", "_mime", "_overwrite", "_normalize", "_trim", "_toLowerCase", "_toUpperCase", "_array", "_enum", "_file", "_default", "_catch", "_custom", "_refine", "_stringbool", "_stringFormat", "util", "Class", "size", "issue", "process", "isTransforming", "id", "schema", "toJSONSchema", "registry", "ctx", "JSONSchemaGenerator", "require_core", "exports", "mod", "require_checks", "mod", "datetime", "date", "time", "duration", "require_errors", "mod", "util", "initializer", "issue", "issues", "require_parse", "mod", "require_schemas", "mod", "string", "email", "guid", "uuid", "emoji", "nanoid", "cuid", "cuid2", "ulid", "xid", "ksuid", "ipv4", "ipv6", "cidrv4", "cidrv6", "base64", "base64url", "e164", "hostname", "hash", "number", "int", "boolean", "bigint", "_undefined", "_null", "unknown", "never", "_void", "date", "array", "object", "looseObject", "union", "discriminatedUnion", "intersection", "record", "_enum", "literal", "transform", "optional", "nullable", "nullish", "_default", "prefault", "nonoptional", "_catch", "pipe", "readonly", "_function", "check", "custom", "refine", "superRefine", "preprocess", "parse", "checks", "def", "json", "size", "issue", "output", "require_compat", "mod", "setErrorMap", "getErrorMap", "ZodFirstPartyTypeKind", "mod", "z", "zodSchema", "objectSchema", "version", "mod", "string", "number", "boolean", "bigint", "date", "require_external", "mod", "exports", "require_zod", "mod", "exports", "z", "util", "assertIs", "assertNever", "object", "joinValues", "array", "objectUtil", "issue", "error", "issue", "issue", "errorUtil", "error", "errorMap", "check", "transform", "version", "base64", "_ZodString", "parsedType", "ctx", "result", "issue", "index", "issues", "elements", "size", "processed", "base", "preprocess", "parsedType", "result", "check", "r", "ZodFirstPartyTypeKind", "NEVER", "initializer", "floatSafeRemainder", "getParsedType", "array", "object", "Class", "config", "error", "issue", "version", "time", "timeRegex", "inst", "floatSafeRemainder", "inst", "checks", "isAborted", "result", "_", "inst", "base64", "isValidJWT", "index", "result", "isObject", "allowsEval", "r", "results", "left", "right", "mergeValues", "result", "output", "result", "result", "left", "r", "issue", "en_default", "Class", "Class", "_emoji", "Class", "Class", "Class", "_null", "Class", "Class", "Class", "Class", "id", "schema", "params", "gen", "safeParse", "result", "safeParseAsync", "error", "def", "iso_exports", "date", "datetime", "duration", "time", "datetime", "date", "time", "duration", "initializer", "issue", "issues", "ZodError", "parse", "parseAsync", "safeParse", "safeParseAsync", "ZodType", "def", "parse", "safeParse", "parseAsync", "safeParseAsync", "check", "ZodString", "_emoji", "datetime", "date", "time", "duration", "string", "ZodNumber", "ZodType", "number", "ZodBoolean", "ZodType", "boolean", "ZodNull", "ZodType", "_null", "ZodUnknown", "ZodType", "ZodNever", "ZodArray", "ZodType", "ZodObject", "ZodType", "ZodOptional", "object", "ZodObject", "ZodUnion", "ZodType", "ZodDiscriminatedUnion", "ZodIntersection", "ZodRecord", "ZodType", "ZodEnum", "ZodType", "ZodLiteral", "ZodType", "ZodType", "issue", "output", "ZodOptional", "ZodNullable", "ZodDefault", "ZodType", "ZodCatch", "ZodType", "ZodType", "ZodReadonly", "ZodType", "custom", "issue", "en_default", "custom", "string", "number", "object", "ErrorCode", "object", "number", "string", "string", "object", "boolean", "object", "string", "boolean", "object", "number", "string", "_null", "iso_exports", "boolean", "object", "string", "number", "boolean", "check", "check", "parsedType", "emojiRegex", "check", "literal", "object", "types", "x", "base", "check", "required", "index", "name", "schema", "main", "safeParse", "error", "task", "safeParse", "jsonrpcNotification", "isPlainObject", "base", "Ajv", "_addFormats", "index", "safeParse", "error", "McpZodTypeKind", "index", "config", "error", "safeParseAsync", "config", "process", "index", "process", "error", "error", "error", "BaseError", "init_formatAbiItem", "abi", "formatAbiItem", "abi", "abi", "docsPath", "error", "BaseError", "err", "hash", "secp256k1", "yParityOrV", "recoveryBit", "hash", "init_cursor", "encode", "BaseError", "hash", "BaseError", "docsPath", "docsPath", "cause", "init_stateOverride", "BaseError", "BaseError", "formatAuthorizationList", "base", "sha256", "sha256", "version", "sha256", "version", "BaseError", "size", "hash", "version", "init_cursor", "size", "docsPath", "cause", "format", "base", "prepareTransactionRequest", "getChainId", "chainId", "from", "gas", "nonce", "type", "error", "e", "getBlock", "block", "BaseError", "abi", "error", "init_formatAbiItem", "docsPath", "abi", "formatAbiItem", "abi", "isEqual", "index", "value", "input", "event", "abi", "abi", "error", "abi", "error", "listeners", "cleanup", "time", "poll", "cacheKey", "abi", "transport", "eventName", "args", "error", "shouldRetry", "error", "size", "config", "extend", "base", "key", "BaseError", "hash", "hash", "BaseError", "base64Regex", "error", "custom", "res", "record", "record", "record", "event", "BaseError", "version", "error", "init_regex", "integerRegex", "size", "bytesRegex", "hash", "version", "BaseError", "blobs", "commitments", "proofs", "v", "promiseCache", "uid", "BaseError", "error", "extend", "base", "body", "response", "BaseError", "init_regex", "integerRegex", "base", "bytesRegex", "struct", "parsedType", "assert", "from", "validate", "LruMap", "size", "LruMap", "keccak256", "assert", "from", "validate", "fromHex", "fromBytes", "assert", "x", "slice", "prefix", "toHex", "assert", "concat", "BaseError", "stringify", "size", "from", "addressRegex", "assert", "InvalidAddressError", "checksum", "hash", "keccak256", "from", "toHex", "validate", "assert", "InvalidAddressError", "BaseError", "arrayRegex", "bytesRegex", "integerRegex", "maxInt8", "maxInt16", "maxInt24", "maxInt32", "maxInt40", "maxInt48", "maxInt56", "maxInt64", "maxInt72", "maxInt80", "maxInt88", "maxInt96", "maxInt104", "maxInt112", "maxInt120", "maxInt128", "maxInt136", "maxInt144", "maxInt152", "maxInt160", "maxInt168", "maxInt176", "maxInt184", "maxInt192", "maxInt200", "maxInt208", "maxInt216", "maxInt224", "maxInt232", "maxInt240", "maxInt248", "maxInt256", "minInt8", "minInt16", "minInt24", "minInt32", "minInt40", "minInt48", "minInt56", "minInt64", "minInt72", "minInt80", "minInt88", "minInt96", "minInt104", "minInt112", "minInt120", "minInt128", "minInt136", "minInt144", "minInt152", "minInt160", "minInt168", "minInt176", "minInt184", "minInt192", "minInt200", "minInt208", "minInt216", "minInt224", "minInt232", "minInt240", "minInt248", "minInt256", "maxUint8", "maxUint16", "maxUint24", "maxUint32", "maxUint40", "maxUint48", "maxUint56", "maxUint64", "maxUint72", "maxUint80", "maxUint88", "maxUint96", "maxUint104", "maxUint112", "maxUint120", "maxUint128", "maxUint136", "maxUint144", "maxUint152", "maxUint160", "maxUint168", "maxUint176", "maxUint184", "maxUint192", "maxUint200", "maxUint208", "maxUint216", "maxUint224", "maxUint232", "maxUint240", "maxUint248", "maxUint256", "decodeParameter", "checksumAddress", "getArrayComponents", "decodeArray", "decodeTuple", "decodeAddress", "decodeBool", "decodeBytes", "decodeNumber", "decodeString", "sizeOfLength", "sizeOfOffset", "checksum", "wrap", "slice", "toNumber", "length", "hasDynamicChild", "consumed", "value", "size", "toBigInt", "encodeArray", "encodeTuple", "encodeAddress", "integerRegex", "encodeNumber", "encodeBytes", "encodeString", "encode", "concat", "assert", "InvalidArrayError", "BytesSizeMismatchError", "BaseError", "IntegerOutOfRangeError", "fromString", "index", "staticCursor", "RecursiveReadLimitExceededError", "PositionOutOfBoundsError", "NegativeOffsetError", "size", "BaseError", "checksumAddress", "size", "data", "decodeParameter", "encode", "encodePacked", "concat", "assert", "fromString", "integerRegex", "bytesRegex", "BytesSizeMismatchError", "arrayRegex", "from", "BaseError", "size", "BytesSizeMismatchError", "InvalidArrayError", "from", "getEncodable", "fromHex", "from", "getEncodable", "getEncodableList", "getEncodableBytes", "getSizeOfLength", "encode", "BaseError", "assert", "maxUint256", "fromBytes", "fromHex", "InvalidSerializedSizeError", "slice", "yParity", "extract", "from", "fromRpc", "fromRpc", "yParity", "trimLeft", "InvalidSerializedSizeError", "BaseError", "size", "from", "stringify", "from", "fromRpc", "extract", "hash", "keccak256", "concat", "fromHex", "toTuple", "toTuple", "extract", "recoverAddress", "recoverPublicKey", "from", "from", "assert", "slice", "self", "recoverAddress", "encode", "size", "concat", "validate", "BaseError", "BaseError", "integer", "hash", "index", "hash", "hash", "contracts", "abi", "error", "result", "BaseError", "init_stateOverride", "block", "toRpc", "call", "abi", "result", "error", "normalizeSignature", "BaseError", "isArgOfType", "validate", "index", "getAmbiguousTypes", "from", "abi", "validate", "abiItem", "slice", "index", "isArgOfType", "getAmbiguousTypes", "normalizeSignature", "keccak256", "fromString", "BaseError", "encode", "abi", "options", "fromAbi", "concat", "from", "fromAbi", "abi", "item", "encodeData", "abi", "args", "fromAbi", "abiFunction", "getSelector", "encode", "concat", "from", "fromAbi", "abi", "getSelector", "BaseError", "encode", "from", "encodeData", "call", "InvalidWrappedSignatureError", "assert", "from", "magicBytes", "unwrap", "validate", "wrap", "magicBytes", "assert", "slice", "InvalidWrappedSignatureError", "from", "unwrap", "wrap", "concat", "encode", "validate", "BaseError", "hash", "signature", "error", "hash", "hash", "transport", "error", "hash", "error", "from", "block", "transport", "error", "transport", "event", "args", "error", "hash", "error", "time", "time", "isValid", "hash", "uid", "BaseError", "config", "wait", "body", "error", "serializeTransaction", "from", "sourceId", "init_utils", "init_utils", "_0n", "_1n", "numberToHexUnpadded", "num", "hexToNumber", "_0n", "bytesToNumberBE", "bytesToHex", "bytesToNumberLE", "numberToBytesBE", "hexToBytes", "numberToBytesLE", "ensureBytes", "hexToBytes", "isPosBig", "_0n", "inRange", "aInRange", "bitLen", "_1n", "bitMask", "_1n", "createHmacDrbg", "u8n", "gen", "object", "memoized", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_7n", "_8n", "_9n", "_16n", "mod", "pow2", "_0n", "invert", "number", "mod", "_1n", "assertIsSquare", "sqrt3mod4", "_4n", "sqrt5mod8", "_5n", "_8n", "_2n", "sqrt9mod16", "Field", "tonelliShanks", "_7n", "_16n", "_3n", "FpLegendre", "FpSqrt", "_9n", "FIELD_FIELDS", "validateField", "FpPow", "num", "_0n", "_1n", "FpInvertBatch", "FpLegendre", "_1n", "_2n", "nLength", "Field", "isLE", "_0n", "bitMask", "_1n", "num", "mod", "FpPow", "invert", "FpSqrt", "numberToBytesLE", "numberToBytesBE", "bytesToNumberLE", "bytesToNumberBE", "FpInvertBatch", "getFieldBytesLength", "getMinHashLength", "mapHashToField", "isLE", "num", "bytesToNumberLE", "bytesToNumberBE", "mod", "_1n", "numberToBytesLE", "numberToBytesBE", "_0n", "_1n", "negateCt", "normalizeZ", "FpInvertBatch", "validateW", "calcWOpts", "bitMask", "calcOffsets", "window", "validateMSMPoints", "validateMSMScalars", "pointPrecomputes", "pointWindowSizes", "getW", "assert0", "wNAF", "Point", "base", "transform", "mulEndoUnsafe", "pippenger", "bitLen", "wbits", "createField", "isLE", "validateField", "Field", "_0n", "divNearest", "num", "_2n", "_splitEndoScalar", "_0n", "bitMask", "bitLen", "_1n", "validateSigFormat", "validateSigOpts", "DERErr", "DER", "numberToHexUnpadded", "bytesToNumberBE", "int", "ensureBytes", "_3n", "_4n", "error", "getWLengths", "pointToBytes", "pprefix", "Point", "memoized", "negateCt", "endo", "normalizeZ", "mulEndoUnsafe", "bytesToHex", "pippenger", "wNAF", "getWLengths", "ecdh", "Point", "getMinHashLength", "error", "mapHashToField", "ensureBytes", "ecdsa", "hash", "randomBytes", "hmac", "number", "_1n", "num", "validateSigFormat", "size", "r", "s", "DER", "hexToBytes", "_2n", "pprefix", "bytesToHex", "bytesToNumberBE", "bitMask", "aInRange", "_0n", "validateSigOpts", "createHmacDrbg", "isHex", "recoverPublicKey", "Field", "Point", "nLength", "weierstrass", "hash", "ecdsa", "createCurve", "create", "hash", "weierstrass", "secp256k1_CURVE", "secp256k1_ENDO", "_2n", "sqrtMod", "secp256k1_CURVE", "_3n", "pow2", "Fpk1", "Field", "secp256k1", "createCurve", "secp256k1_ENDO", "secp256k1", "hash", "import_agent_wallet_protocol", "import_agent_wallet_protocol", "import_agent_wallet_protocol", "import_agent_wallet_protocol", "USDC_DECIMALS", "decoder", "paymentPayload", "import_agent_wallet_protocol", "hash", "USDC_DECIMALS", "base", "challenge", "import_agent_wallet_protocol", "index", "body", "decoder", "buffer", "error"]
}
