import { type FieldsOf } from '@aztec/foundation/array'; import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types'; import { SchnorrSignature } from '@aztec/foundation/crypto/schnorr'; import { Fr } from '@aztec/foundation/curves/bn254'; import { GrumpkinScalar, Point } from '@aztec/foundation/curves/grumpkin'; import { EthAddress } from '@aztec/foundation/eth-address'; import type { Bufferable } from '@aztec/foundation/serialize'; import { MembershipWitness } from '@aztec/foundation/trees'; import { FunctionSelector } from '../abi/function_selector.js'; import { ContractStorageRead } from '../avm/contract_storage_read.js'; import { ContractStorageUpdateRequest } from '../avm/contract_storage_update_request.js'; import { AvmAppendLeavesHint, AvmBytecodeCommitmentHint, AvmCircuitInputs, AvmCommitCheckpointHint, AvmContractClassHint, AvmContractDbCommitCheckpointHint, AvmContractDbCreateCheckpointHint, AvmContractDbRevertCheckpointHint, AvmContractInstanceHint, AvmCreateCheckpointHint, AvmDebugFunctionNameHint, AvmExecutionHints, AvmGetLeafPreimageHintNullifierTree, AvmGetLeafPreimageHintPublicDataTree, AvmGetLeafValueHint, AvmGetPreviousValueIndexHint, AvmGetSiblingPathHint, AvmRevertCheckpointHint, AvmSequentialInsertHintNullifierTree, AvmSequentialInsertHintPublicDataTree, AvmTxHint } from '../avm/index.js'; import { PublicDataRead } from '../avm/public_data_read.js'; import { PublicDataWrite } from '../avm/public_data_write.js'; import { AztecAddress } from '../aztec-address/index.js'; import type { L2Tips } from '../block/l2_block_source.js'; import { type ContractClassPublic, ContractDeploymentData, type ContractInstanceWithAddress, type ExecutablePrivateFunctionWithMembershipProof, type UtilityFunctionWithMembershipProof } from '../contract/index.js'; import { Gas, GasSettings } from '../gas/index.js'; import { PrivateKernelTailCircuitPublicInputs, PrivateToPublicAccumulatedData, PrivateToPublicKernelCircuitPublicInputs, PrivateToRollupAccumulatedData } from '../kernel/index.js'; import { PrivateCircuitPublicInputs } from '../kernel/private_circuit_public_inputs.js'; import { PrivateToRollupKernelCircuitPublicInputs } from '../kernel/private_to_rollup_kernel_circuit_public_inputs.js'; import { PublicCallRequest, PublicCallRequestArrayLengths } from '../kernel/public_call_request.js'; import { PublicKeys } from '../keys/index.js'; import { ExtendedDirectionalAppTaggingSecret } from '../logs/extended_directional_app_tagging_secret.js'; import { ContractClassLog } from '../logs/index.js'; import { TxScopedL2Log } from '../logs/tx_scoped_l2_log.js'; import { L2ToL1Message, ScopedL2ToL1Message } from '../messaging/l2_to_l1_message.js'; import { ParityBasePrivateInputs } from '../parity/parity_base_private_inputs.js'; import { ParityPublicInputs } from '../parity/parity_public_inputs.js'; import { ParityRootPrivateInputs } from '../parity/parity_root_private_inputs.js'; import { ProofData } from '../proofs/index.js'; import { Proof } from '../proofs/proof.js'; import { BlockMergeRollupPrivateInputs } from '../rollup/block_merge_rollup_private_inputs.js'; import { BlockRollupPublicInputs } from '../rollup/block_rollup_public_inputs.js'; import { BlockRootFirstRollupPrivateInputs, BlockRootSingleTxRollupPrivateInputs } from '../rollup/block_root_rollup_private_inputs.js'; import { CheckpointHeader } from '../rollup/checkpoint_header.js'; import { CheckpointRollupPublicInputs } from '../rollup/checkpoint_rollup_public_inputs.js'; import { PrivateTxBaseRollupPrivateInputs } from '../rollup/private_tx_base_rollup_private_inputs.js'; import { PublicChonkVerifierPublicInputs } from '../rollup/public_chonk_verifier_public_inputs.js'; import { PublicTxBaseRollupPrivateInputs } from '../rollup/public_tx_base_rollup_private_inputs.js'; import { RootRollupPublicInputs } from '../rollup/root_rollup_public_inputs.js'; import { TreeSnapshotDiffHints } from '../rollup/tree_snapshot_diff_hints.js'; import { TxMergeRollupPrivateInputs } from '../rollup/tx_merge_rollup_private_inputs.js'; import { TxRollupPublicInputs } from '../rollup/tx_rollup_public_inputs.js'; import { AppendOnlyTreeSnapshot } from '../trees/append_only_tree_snapshot.js'; import { NullifierLeaf, NullifierLeafPreimage } from '../trees/nullifier_leaf.js'; import { PublicDataTreeLeaf, PublicDataTreeLeafPreimage } from '../trees/public_data_leaf.js'; import { BlockHeader } from '../tx/block_header.js'; import { CallContext } from '../tx/call_context.js'; import { GlobalVariables } from '../tx/global_variables.js'; import { PartialStateReference } from '../tx/partial_state_reference.js'; import { ProtocolContracts } from '../tx/protocol_contracts.js'; import { PublicCallRequestWithCalldata } from '../tx/public_call_request_with_calldata.js'; import { StateReference } from '../tx/state_reference.js'; import { TxContext } from '../tx/tx_context.js'; import { TxHash } from '../tx/tx_hash.js'; import { TxRequest } from '../tx/tx_request.js'; import { Vector } from '../types/index.js'; import { VerificationKey, VerificationKeyAsFields } from '../vks/verification_key.js'; /** * Creates an arbitrary tx context with the given seed. * @param seed - The seed to use for generating the tx context. * @returns A tx context. */ export declare function makeTxContext(seed?: number): TxContext; /** * Creates a default instance of gas settings. No seed value is used to ensure we allocate a sensible amount of gas for testing. */ export declare function makeGasSettings(): GasSettings; /** * Creates arbitrary selector from the given seed. * @param seed - The seed to use for generating the selector. * @returns A selector. */ export declare function makeSelector(seed: number): FunctionSelector; export declare function makePublicDataWrite(seed?: number): PublicDataWrite; /** * Creates arbitrary public data read. * @param seed - The seed to use for generating the public data read. * @returns A public data read. */ export declare function makePublicDataRead(seed?: number): PublicDataRead; /** * Creates empty public data read. * @returns An empty public data read. */ export declare function makeEmptyPublicDataRead(): PublicDataRead; /** * Creates arbitrary contract storage update request. * @param seed - The seed to use for generating the contract storage update request. * @returns A contract storage update request. */ export declare function makeContractStorageUpdateRequest(seed?: number): ContractStorageUpdateRequest; /** * Creates arbitrary contract storage read. * @param seed - The seed to use for generating the contract storage read. * @returns A contract storage read. */ export declare function makeContractStorageRead(seed?: number): ContractStorageRead; /** * Creates arbitrary accumulated data. * @param seed - The seed to use for generating the accumulated data. * @returns An accumulated data. */ export declare function makePrivateToRollupAccumulatedData(seed?: number, { numNoteHashes, numNullifiers, numL2ToL1Messages, numPrivateLogs, numContractClassLogs }?: { numNoteHashes?: number; numNullifiers?: number; numL2ToL1Messages?: number; numPrivateLogs?: number; numContractClassLogs?: number; }): PrivateToRollupAccumulatedData; export declare function makePrivateToPublicAccumulatedData(seed?: number, { numNoteHashes, numNullifiers, numL2ToL1Messages, numPrivateLogs, numContractClassLogs, numEnqueuedCalls }?: { numNoteHashes?: number; numNullifiers?: number; numL2ToL1Messages?: number; numPrivateLogs?: number; numContractClassLogs?: number; numEnqueuedCalls?: number; }): PrivateToPublicAccumulatedData; export declare function makeGas(seed?: number): Gas; /** * Creates arbitrary call context. * @param seed - The seed to use for generating the call context. * @returns A call context. */ export declare function makeCallContext(seed?: number, overrides?: Partial>): CallContext; /** * Creates arbitrary private kernel tail circuit public inputs. * @param seed - The seed to use for generating the kernel circuit public inputs. * @returns Private kernel tail circuit public inputs. */ export declare function makePrivateKernelTailCircuitPublicInputs(seed?: number, isForPublic?: boolean): PrivateKernelTailCircuitPublicInputs; export declare function makePrivateToPublicKernelCircuitPublicInputs(seed?: number): PrivateToPublicKernelCircuitPublicInputs; export declare function makePublicChonkVerifierPublicInputs(seed?: number): PublicChonkVerifierPublicInputs; export declare function makeProtocolContracts(seed?: number): ProtocolContracts; /** * Creates arbitrary public kernel circuit public inputs. * @param seed - The seed to use for generating the kernel circuit public inputs. * @returns Public kernel circuit public inputs. */ export declare function makePrivateToRollupKernelCircuitPublicInputs(seed?: number): PrivateToRollupKernelCircuitPublicInputs; /** * Creates arbitrary/mocked membership witness where the sibling paths is an array of fields in an ascending order starting from `start`. * @param size - The size of the membership witness. * @param start - The start of the membership witness. * @returns A membership witness. */ export declare function makeMembershipWitness(size: N, start: number): MembershipWitness; /** * Creates arbitrary/mocked verification key in fields format. * @returns A verification key as fields object */ export declare function makeVerificationKeyAsFields(size: number): VerificationKeyAsFields; /** * Creates arbitrary/mocked verification key. * @returns A verification key object */ export declare function makeVerificationKey(): VerificationKey; /** * Creates an arbitrary point in a curve. * @param seed - Seed to generate the point values. * @returns A point. */ export declare function makePoint(seed?: number): Point; /** * Creates an arbitrary grumpkin scalar. * @param seed - Seed to generate the values. * @returns A GrumpkinScalar. */ export declare function makeGrumpkinScalar(seed?: number): GrumpkinScalar; /** * Makes arbitrary proof. * @param seed - The seed to use for generating/mocking the proof. * @returns A proof. */ export declare function makeProof(seed?: number): Proof; export declare function makePublicCallRequest(seed?: number): PublicCallRequest; export declare function makePublicCallRequestArrayLengths(seed?: number): PublicCallRequestArrayLengths; /** * Makes arbitrary tx request. * @param seed - The seed to use for generating the tx request. * @returns A tx request. */ export declare function makeTxRequest(seed?: number): TxRequest; /** * Makes arbitrary private circuit public inputs. * @param seed - The seed to use for generating the private circuit public inputs. * @returns A private circuit public inputs. */ export declare function makePrivateCircuitPublicInputs(seed?: number): PrivateCircuitPublicInputs; export declare function makeGlobalVariables(seed?: number, overrides?: Partial>): GlobalVariables; /** * Makes arbitrary append only tree snapshot. * @param seed - The seed to use for generating the append only tree snapshot. * @returns An append only tree snapshot. */ export declare function makeAppendOnlyTreeSnapshot(seed?: number): AppendOnlyTreeSnapshot; /** * Makes arbitrary eth address. * @param seed - The seed to use for generating the eth address. * @returns An eth address. */ export declare function makeEthAddress(seed?: number): EthAddress; /** * Creates a buffer of a given size filled with a given value. * @param size - The size of the buffer to create. * @param fill - The value to fill the buffer with. * @returns A buffer of a given size filled with a given value. */ export declare function makeBytes(size?: number, fill?: number): Buffer; /** * Makes arbitrary aztec address. * @param seed - The seed to use for generating the aztec address. * @returns An aztec address. */ export declare function makeAztecAddress(seed?: number): AztecAddress; /** * Makes arbitrary Schnorr signature. * @param seed - The seed to use for generating the Schnorr signature. * @returns A Schnorr signature. */ export declare function makeSchnorrSignature(seed?: number): SchnorrSignature; /** * Makes arbitrary base or merge rollup circuit public inputs. * @param seed - The seed to use for generating the base rollup circuit public inputs. * @param blockNumber - The block number to use for generating the base rollup circuit public inputs. * @returns A base or merge rollup circuit public inputs. */ export declare function makeTxRollupPublicInputs(seed?: number, globalVariables?: GlobalVariables | undefined): TxRollupPublicInputs; /** * Makes arbitrary block merge or block root rollup circuit public inputs. * @param seed - The seed to use for generating the block merge or block root rollup circuit public inputs. * @param blockNumber - The block number to use for generating the block merge or block root rollup circuit public inputs. * @returns A block merge or block root rollup circuit public inputs. */ export declare function makeBlockRollupPublicInputs(seed?: number): BlockRollupPublicInputs; export declare function makeCheckpointRollupPublicInputs(seed?: number): CheckpointRollupPublicInputs; export declare function makeParityPublicInputs(seed?: number): ParityPublicInputs; export declare function makeParityBasePrivateInputs(seed?: number): ParityBasePrivateInputs; export declare function makeParityRootPrivateInputs(seed?: number): ParityRootPrivateInputs; /** * Makes root rollup public inputs. * @param seed - The seed to use for generating the root rollup public inputs. * @param blockNumber - The block number to use in the global variables of a header. * @returns A root rollup public inputs. */ export declare function makeRootRollupPublicInputs(seed?: number): RootRollupPublicInputs; export declare function makeBlockHeader(seed?: number, overrides?: Partial>> & Partial>): BlockHeader; export declare function makeCheckpointHeader(seed?: number, overrides?: Partial>): CheckpointHeader; /** * Makes arbitrary state reference. * @param seed - The seed to use for generating the state reference. * @returns A state reference. */ export declare function makeStateReference(seed?: number): StateReference; /** * Makes arbitrary L2 to L1 message. * @param seed - The seed to use for generating the state reference. * @returns L2 to L1 message. */ export declare function makeL2ToL1Message(seed?: number): L2ToL1Message; export declare function makeScopedL2ToL1Message(seed?: number): ScopedL2ToL1Message; /** * Makes arbitrary partial state reference. * @param seed - The seed to use for generating the partial state reference. * @returns A partial state reference. */ export declare function makePartialStateReference(seed?: number): PartialStateReference; export declare function makeTxMergeRollupPrivateInputs(seed?: number): TxMergeRollupPrivateInputs; export declare function makeBlockRootFirstRollupPrivateInputs(seed?: number): BlockRootFirstRollupPrivateInputs; export declare function makeBlockRootSingleTxRollupPrivateInputs(seed?: number): BlockRootSingleTxRollupPrivateInputs; /** * Makes arbitrary block merge rollup inputs. * @param seed - The seed to use for generating the merge rollup inputs. * @returns A block merge rollup inputs. */ export declare function makeBlockMergeRollupPrivateInputs(seed?: number): BlockMergeRollupPrivateInputs; /** * Makes arbitrary public data tree leaves. * @param seed - The seed to use for generating the public data tree leaf. * @returns A public data tree leaf. */ export declare function makePublicDataTreeLeaf(seed?: number): PublicDataTreeLeaf; /** * Makes arbitrary nullifier leaf. * @param seed - The seed to use for generating the nullifier leaf. * @returns A nullifier leaf. */ export declare function makeNullifierLeaf(seed?: number): NullifierLeaf; /** * Makes arbitrary nullifier leaf preimages. * @param seed - The seed to use for generating the nullifier leaf preimage. * @returns A nullifier leaf preimage. */ export declare function makeNullifierLeafPreimage(seed?: number): NullifierLeafPreimage; /** * Makes arbitrary public data tree leaf preimages. * @param seed - The seed to use for generating the public data tree leaf preimage. * @returns A public data tree leaf preimage. */ export declare function makePublicDataTreeLeafPreimage(seed?: number): PublicDataTreeLeafPreimage; /** * Creates an instance of TreeSnapshotDiffHints with arbitrary values based on the provided seed. * @param seed - The seed to use for generating the hints. * @returns A TreeSnapshotDiffHints object. */ export declare function makeTreeSnapshotDiffHints(seed?: number): TreeSnapshotDiffHints; export declare function makeProofData(seed: number | undefined, makePublicInputs: (seed: number) => T, proofSize?: PROOF_LENGTH): ProofData; export declare function makePrivateTxBaseRollupPrivateInputs(seed?: number): PrivateTxBaseRollupPrivateInputs; export declare function makePublicTxBaseRollupPrivateInputs(seed?: number): PublicTxBaseRollupPrivateInputs; export declare function makeExecutablePrivateFunctionWithMembershipProof(seed?: number): ExecutablePrivateFunctionWithMembershipProof; export declare function makeUtilityFunctionWithMembershipProof(seed?: number): UtilityFunctionWithMembershipProof; export declare function makeContractClassPublic(seed?: number, publicBytecode?: Buffer): Promise; export declare function makeArray(length: number, fn: (i: number) => T, offset?: number): T[]; export declare function makeArrayAsync(length: number, fn: (i: number) => Promise, offset?: number): Promise[]>; export declare function makeVector(length: number, fn: (i: number) => T, offset?: number): Vector; export declare function makeVectorAsync(length: number, fn: (i: number) => Promise, offset?: number): Promise>>; export declare function makeMap(size: number, fn: (i: number) => [string, T], offset?: number): Map; export declare function makeMapAsync(size: number, fn: (i: number) => Promise<[string, T]>, offset?: number): Promise>; export declare function makePublicKeys(seed?: number): Promise; export declare function makeContractInstanceFromClassId(classId: Fr, seed?: number, overrides?: { deployer?: AztecAddress; initializationHash?: Fr; publicKeys?: PublicKeys; currentClassId?: Fr; }): Promise; export declare function makeAvmGetSiblingPathHint(seed?: number): AvmGetSiblingPathHint; export declare function makeAvmGetPreviousValueIndexHint(seed?: number): AvmGetPreviousValueIndexHint; export declare function makeAvmGetLeafPreimageHintPublicDataTree(seed?: number): AvmGetLeafPreimageHintPublicDataTree; export declare function makeAvmGetLeafPreimageHintNullifierTree(seed?: number): AvmGetLeafPreimageHintNullifierTree; export declare function makeAvmGetLeafValueHint(seed?: number): AvmGetLeafValueHint; export declare function makeAvmSequentialInsertHintPublicDataTree(seed?: number): AvmSequentialInsertHintPublicDataTree; export declare function makeAvmSequentialInsertHintNullifierTree(seed?: number): AvmSequentialInsertHintNullifierTree; export declare function makeAvmAppendLeavesHint(seed?: number): AvmAppendLeavesHint; export declare function makeAvmCheckpointActionCreateCheckpointHint(seed?: number): AvmCreateCheckpointHint; export declare function makeAvmCheckpointActionCommitCheckpointHint(seed?: number): AvmCommitCheckpointHint; export declare function makeAvmCheckpointActionRevertCheckpointHint(seed?: number): AvmRevertCheckpointHint; export declare function makeAvmContractDbCheckpointActionCreateCheckpointHint(seed?: number): AvmContractDbCreateCheckpointHint; export declare function makeAvmContractDbCheckpointActionCommitCheckpointHint(seed?: number): AvmContractDbCommitCheckpointHint; export declare function makeAvmContractDbCheckpointActionRevertCheckpointHint(seed?: number): AvmContractDbRevertCheckpointHint; /** * Makes arbitrary AvmContractInstanceHint. * @param seed - The seed to use for generating the state reference. * @returns AvmContractInstanceHint. */ export declare function makeAvmContractInstanceHint(seed?: number): AvmContractInstanceHint; /** * Makes arbitrary AvmDebugFunctionNameHint. * @param seed - The seed to use for generating the hint. * @returns AvmDebugFunctionNameHint. */ export declare function makeAvmDebugFunctionNameHint(seed?: number): AvmDebugFunctionNameHint; export declare function makeAvmContractClassHint(seed?: number): AvmContractClassHint; export declare function makeAvmBytecodeCommitmentHint(seed?: number): Promise; export declare function makePublicCallRequestWithCalldata(seed?: number): Promise; export declare function makeContractClassLog(seed?: number): ContractClassLog; export declare function makeContractDeploymentData(seed?: number): ContractDeploymentData; export declare function makeAvmTxHint(seed?: number): Promise; /** * Creates arbitrary AvmExecutionHints. * @param seed - The seed to use for generating the hints. * @returns the execution hints. */ export declare function makeAvmExecutionHints(seed?: number, overrides?: Partial>): Promise; /** * Creates arbitrary AvmCircuitInputs. * @param seed - The seed to use for generating the hints. * @returns the execution hints. */ export declare function makeAvmCircuitInputs(seed?: number, overrides?: Partial>): Promise; /** * TODO: Since the max value check is currently disabled this function is pointless. Should it be removed? * Test only. Easy to identify big endian field serialize. * @param n - The number. * @returns The field. */ export declare function fr(n: number): Fr; /** * Creates a random TxScopedL2Log with private log data. */ export declare function randomTxScopedPrivateL2Log(opts?: { tag?: Fr; txHash?: TxHash; blockNumber?: number; blockTimestamp?: bigint; noteHashes?: Fr[]; firstNullifier?: Fr; }): TxScopedL2Log; /** * Creates a random TxScopedL2Log with public log data. */ export declare function randomTxScopedPublicL2Log(opts?: { txHash?: TxHash; blockNumber?: number; blockTimestamp?: bigint; noteHashes?: Fr[]; firstNullifier?: Fr; }): Promise; /** * Creates L2Tips with all tips pointing to the same block number. * Useful for mocking aztecNode.getL2Tips() in tests. * @param blockNumber - The block number to use for all tips. * @param hash - Optional hash for the block (defaults to empty string). * @param checkpointNumber - Optional checkpoint number (defaults to blockNumber). * @param checkpointHash - Optional checkpoint hash (defaults to block hash). * @returns L2Tips object with all tips at the same block. */ export declare function makeL2Tips(blockNumber: number | BlockNumber, hash?: string, checkpointNumber?: number | CheckpointNumber, checkpointHash?: string): L2Tips; export declare function randomExtendedDirectionalAppTaggingSecret(): Promise; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yaWVzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdHMvZmFjdG9yaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRDQSxPQUFPLEVBQUUsS0FBSyxRQUFRLEVBQWEsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFjLE1BQU0saUNBQWlDLENBQUM7QUFJNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUFNLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RixPQUFPLEVBR0wsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFFaEIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixpQ0FBaUMsRUFDakMsaUNBQWlDLEVBQ2pDLGlDQUFpQyxFQUNqQyx1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QixpQkFBaUIsRUFDakIsbUNBQW1DLEVBQ25DLG9DQUFvQyxFQUNwQyxtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsb0NBQW9DLEVBQ3BDLHFD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