import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PopulatedTransaction, Signer, utils } from 'ethers';
import type { FunctionFragment, Result, EventFragment } from '@ethersproject/abi';
import type { Listener, Provider } from '@ethersproject/providers';
import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from './common';
export interface PoolTogetherV3PrizePoolInterface extends utils.Interface {
    functions: {
        'accountedBalance()': FunctionFragment;
        'addControlledToken(address)': FunctionFragment;
        'award(address,uint256,address)': FunctionFragment;
        'awardBalance()': FunctionFragment;
        'awardExternalERC20(address,address,uint256)': FunctionFragment;
        'awardExternalERC721(address,address,uint256[])': FunctionFragment;
        'balance()': FunctionFragment;
        'balanceOfCredit(address,address)': FunctionFragment;
        'beforeTokenTransfer(address,address,uint256)': FunctionFragment;
        'cToken()': FunctionFragment;
        'calculateEarlyExitFee(address,address,uint256)': FunctionFragment;
        'calculateReserveFee(uint256)': FunctionFragment;
        'calculateTimelockDuration(address,address,uint256)': FunctionFragment;
        'canAwardExternal(address)': FunctionFragment;
        'captureAwardBalance()': FunctionFragment;
        'creditPlanOf(address)': FunctionFragment;
        'depositTo(address,uint256,address,address)': FunctionFragment;
        'estimateCreditAccrualTime(address,uint256,uint256)': FunctionFragment;
        'initialize(address,address,address[],uint256,uint256)': FunctionFragment;
        'initialize(address,address,address[],uint256,uint256,address)': FunctionFragment;
        'isTrustedForwarder(address)': FunctionFragment;
        'liquidityCap()': FunctionFragment;
        'maxExitFeeMantissa()': FunctionFragment;
        'maxTimelockDuration()': FunctionFragment;
        'owner()': FunctionFragment;
        'prizeStrategy()': FunctionFragment;
        'renounceOwnership()': FunctionFragment;
        'reserveRegistry()': FunctionFragment;
        'reserveTotalSupply()': FunctionFragment;
        'setCreditPlanOf(address,uint128,uint128)': FunctionFragment;
        'setLiquidityCap(uint256)': FunctionFragment;
        'setPrizeStrategy(address)': FunctionFragment;
        'sweepTimelockBalances(address[])': FunctionFragment;
        'timelockBalanceAvailableAt(address)': FunctionFragment;
        'timelockBalanceOf(address)': FunctionFragment;
        'timelockDepositTo(address,uint256,address)': FunctionFragment;
        'timelockTotalSupply()': FunctionFragment;
        'token()': FunctionFragment;
        'tokens()': FunctionFragment;
        'transferExternalERC20(address,address,uint256)': FunctionFragment;
        'transferOwnership(address)': FunctionFragment;
        'trustedForwarder()': FunctionFragment;
        'versionRecipient()': FunctionFragment;
        'withdrawInstantlyFrom(address,uint256,address,uint256)': FunctionFragment;
        'withdrawReserve(address)': FunctionFragment;
        'withdrawWithTimelockFrom(address,uint256,address)': FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: 'accountedBalance' | 'addControlledToken' | 'award' | 'awardBalance' | 'awardExternalERC20' | 'awardExternalERC721' | 'balance' | 'balanceOfCredit' | 'beforeTokenTransfer' | 'cToken' | 'calculateEarlyExitFee' | 'calculateReserveFee' | 'calculateTimelockDuration' | 'canAwardExternal' | 'captureAwardBalance' | 'creditPlanOf' | 'depositTo' | 'estimateCreditAccrualTime' | 'initialize(address,address,address[],uint256,uint256)' | 'initialize(address,address,address[],uint256,uint256,address)' | 'isTrustedForwarder' | 'liquidityCap' | 'maxExitFeeMantissa' | 'maxTimelockDuration' | 'owner' | 'prizeStrategy' | 'renounceOwnership' | 'reserveRegistry' | 'reserveTotalSupply' | 'setCreditPlanOf' | 'setLiquidityCap' | 'setPrizeStrategy' | 'sweepTimelockBalances' | 'timelockBalanceAvailableAt' | 'timelockBalanceOf' | 'timelockDepositTo' | 'timelockTotalSupply' | 'token' | 'tokens' | 'transferExternalERC20' | 'transferOwnership' | 'trustedForwarder' | 'versionRecipient' | 'withdrawInstantlyFrom' | 'withdrawReserve' | 'withdrawWithTimelockFrom'): FunctionFragment;
    encodeFunctionData(functionFragment: 'accountedBalance', values?: undefined): string;
    encodeFunctionData(functionFragment: 'addControlledToken', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'award', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'awardBalance', values?: undefined): string;
    encodeFunctionData(functionFragment: 'awardExternalERC20', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'awardExternalERC721', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>[]]): string;
    encodeFunctionData(functionFragment: 'balance', values?: undefined): string;
    encodeFunctionData(functionFragment: 'balanceOfCredit', values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'beforeTokenTransfer', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'cToken', values?: undefined): string;
    encodeFunctionData(functionFragment: 'calculateEarlyExitFee', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'calculateReserveFee', values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'calculateTimelockDuration', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'canAwardExternal', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'captureAwardBalance', values?: undefined): string;
    encodeFunctionData(functionFragment: 'creditPlanOf', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'depositTo', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'estimateCreditAccrualTime', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'initialize(address,address,address[],uint256,uint256)', values: [
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<string>[],
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BigNumberish>
    ]): string;
    encodeFunctionData(functionFragment: 'initialize(address,address,address[],uint256,uint256,address)', values: [
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<string>[],
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<string>
    ]): string;
    encodeFunctionData(functionFragment: 'isTrustedForwarder', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'liquidityCap', values?: undefined): string;
    encodeFunctionData(functionFragment: 'maxExitFeeMantissa', values?: undefined): string;
    encodeFunctionData(functionFragment: 'maxTimelockDuration', values?: undefined): string;
    encodeFunctionData(functionFragment: 'owner', values?: undefined): string;
    encodeFunctionData(functionFragment: 'prizeStrategy', values?: undefined): string;
    encodeFunctionData(functionFragment: 'renounceOwnership', values?: undefined): string;
    encodeFunctionData(functionFragment: 'reserveRegistry', values?: undefined): string;
    encodeFunctionData(functionFragment: 'reserveTotalSupply', values?: undefined): string;
    encodeFunctionData(functionFragment: 'setCreditPlanOf', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'setLiquidityCap', values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'setPrizeStrategy', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'sweepTimelockBalances', values: [PromiseOrValue<string>[]]): string;
    encodeFunctionData(functionFragment: 'timelockBalanceAvailableAt', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'timelockBalanceOf', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'timelockDepositTo', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'timelockTotalSupply', values?: undefined): string;
    encodeFunctionData(functionFragment: 'token', values?: undefined): string;
    encodeFunctionData(functionFragment: 'tokens', values?: undefined): string;
    encodeFunctionData(functionFragment: 'transferExternalERC20', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'transferOwnership', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'trustedForwarder', values?: undefined): string;
    encodeFunctionData(functionFragment: 'versionRecipient', values?: undefined): string;
    encodeFunctionData(functionFragment: 'withdrawInstantlyFrom', values: [
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>
    ]): string;
    encodeFunctionData(functionFragment: 'withdrawReserve', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'withdrawWithTimelockFrom', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<string>]): string;
    decodeFunctionResult(functionFragment: 'accountedBalance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'addControlledToken', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'award', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'awardBalance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'awardExternalERC20', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'awardExternalERC721', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'balance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'balanceOfCredit', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'beforeTokenTransfer', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'cToken', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'calculateEarlyExitFee', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'calculateReserveFee', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'calculateTimelockDuration', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'canAwardExternal', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'captureAwardBalance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'creditPlanOf', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'depositTo', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'estimateCreditAccrualTime', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'initialize(address,address,address[],uint256,uint256)', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'initialize(address,address,address[],uint256,uint256,address)', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'isTrustedForwarder', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'liquidityCap', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'maxExitFeeMantissa', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'maxTimelockDuration', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'prizeStrategy', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'renounceOwnership', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'reserveRegistry', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'reserveTotalSupply', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setCreditPlanOf', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setLiquidityCap', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setPrizeStrategy', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'sweepTimelockBalances', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'timelockBalanceAvailableAt', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'timelockBalanceOf', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'timelockDepositTo', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'timelockTotalSupply', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'token', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'tokens', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'transferExternalERC20', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'transferOwnership', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'trustedForwarder', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'versionRecipient', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'withdrawInstantlyFrom', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'withdrawReserve', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'withdrawWithTimelockFrom', data: BytesLike): Result;
    events: {
        'AwardCaptured(uint256)': EventFragment;
        'Awarded(address,address,uint256)': EventFragment;
        'AwardedExternalERC20(address,address,uint256)': EventFragment;
        'AwardedExternalERC721(address,address,uint256[])': EventFragment;
        'CompoundPrizePoolInitialized(address)': EventFragment;
        'ControlledTokenAdded(address)': EventFragment;
        'CreditBurned(address,address,uint256)': EventFragment;
        'CreditMinted(address,address,uint256)': EventFragment;
        'CreditPlanSet(address,uint128,uint128)': EventFragment;
        'Deposited(address,address,address,uint256,address)': EventFragment;
        'Initialized(address,address,uint256,uint256)': EventFragment;
        'InstantWithdrawal(address,address,address,uint256,uint256,uint256)': EventFragment;
        'LiquidityCapSet(uint256)': EventFragment;
        'OwnershipTransferred(address,address)': EventFragment;
        'PrizeStrategySet(address)': EventFragment;
        'ReserveFeeCaptured(uint256)': EventFragment;
        'ReserveWithdrawal(address,uint256)': EventFragment;
        'TimelockDeposited(address,address,address,uint256)': EventFragment;
        'TimelockedWithdrawal(address,address,address,uint256,uint256)': EventFragment;
        'TimelockedWithdrawalSwept(address,address,uint256,uint256)': EventFragment;
        'TransferredExternalERC20(address,address,uint256)': EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: 'AwardCaptured'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Awarded'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'AwardedExternalERC20'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'AwardedExternalERC721'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'CompoundPrizePoolInitialized'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'ControlledTokenAdded'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'CreditBurned'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'CreditMinted'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'CreditPlanSet'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Deposited'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Initialized'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'InstantWithdrawal'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'LiquidityCapSet'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'PrizeStrategySet'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'ReserveFeeCaptured'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'ReserveWithdrawal'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'TimelockDeposited'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'TimelockedWithdrawal'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'TimelockedWithdrawalSwept'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'TransferredExternalERC20'): EventFragment;
}
export interface AwardCapturedEventObject {
    amount: BigNumber;
}
export declare type AwardCapturedEvent = TypedEvent<[BigNumber], AwardCapturedEventObject>;
export declare type AwardCapturedEventFilter = TypedEventFilter<AwardCapturedEvent>;
export interface AwardedEventObject {
    winner: string;
    token: string;
    amount: BigNumber;
}
export declare type AwardedEvent = TypedEvent<[string, string, BigNumber], AwardedEventObject>;
export declare type AwardedEventFilter = TypedEventFilter<AwardedEvent>;
export interface AwardedExternalERC20EventObject {
    winner: string;
    token: string;
    amount: BigNumber;
}
export declare type AwardedExternalERC20Event = TypedEvent<[string, string, BigNumber], AwardedExternalERC20EventObject>;
export declare type AwardedExternalERC20EventFilter = TypedEventFilter<AwardedExternalERC20Event>;
export interface AwardedExternalERC721EventObject {
    winner: string;
    token: string;
    tokenIds: BigNumber[];
}
export declare type AwardedExternalERC721Event = TypedEvent<[string, string, BigNumber[]], AwardedExternalERC721EventObject>;
export declare type AwardedExternalERC721EventFilter = TypedEventFilter<AwardedExternalERC721Event>;
export interface CompoundPrizePoolInitializedEventObject {
    cToken: string;
}
export declare type CompoundPrizePoolInitializedEvent = TypedEvent<[string], CompoundPrizePoolInitializedEventObject>;
export declare type CompoundPrizePoolInitializedEventFilter = TypedEventFilter<CompoundPrizePoolInitializedEvent>;
export interface ControlledTokenAddedEventObject {
    token: string;
}
export declare type ControlledTokenAddedEvent = TypedEvent<[string], ControlledTokenAddedEventObject>;
export declare type ControlledTokenAddedEventFilter = TypedEventFilter<ControlledTokenAddedEvent>;
export interface CreditBurnedEventObject {
    user: string;
    token: string;
    amount: BigNumber;
}
export declare type CreditBurnedEvent = TypedEvent<[string, string, BigNumber], CreditBurnedEventObject>;
export declare type CreditBurnedEventFilter = TypedEventFilter<CreditBurnedEvent>;
export interface CreditMintedEventObject {
    user: string;
    token: string;
    amount: BigNumber;
}
export declare type CreditMintedEvent = TypedEvent<[string, string, BigNumber], CreditMintedEventObject>;
export declare type CreditMintedEventFilter = TypedEventFilter<CreditMintedEvent>;
export interface CreditPlanSetEventObject {
    token: string;
    creditLimitMantissa: BigNumber;
    creditRateMantissa: BigNumber;
}
export declare type CreditPlanSetEvent = TypedEvent<[string, BigNumber, BigNumber], CreditPlanSetEventObject>;
export declare type CreditPlanSetEventFilter = TypedEventFilter<CreditPlanSetEvent>;
export interface DepositedEventObject {
    operator: string;
    to: string;
    token: string;
    amount: BigNumber;
    referrer: string;
}
export declare type DepositedEvent = TypedEvent<[string, string, string, BigNumber, string], DepositedEventObject>;
export declare type DepositedEventFilter = TypedEventFilter<DepositedEvent>;
export interface InitializedEventObject {
    trustedForwarder: string;
    reserveRegistry: string;
    maxExitFeeMantissa: BigNumber;
    maxTimelockDuration: BigNumber;
}
export declare type InitializedEvent = TypedEvent<[string, string, BigNumber, BigNumber], InitializedEventObject>;
export declare type InitializedEventFilter = TypedEventFilter<InitializedEvent>;
export interface InstantWithdrawalEventObject {
    operator: string;
    from: string;
    token: string;
    amount: BigNumber;
    redeemed: BigNumber;
    exitFee: BigNumber;
}
export declare type InstantWithdrawalEvent = TypedEvent<[
    string,
    string,
    string,
    BigNumber,
    BigNumber,
    BigNumber
], InstantWithdrawalEventObject>;
export declare type InstantWithdrawalEventFilter = TypedEventFilter<InstantWithdrawalEvent>;
export interface LiquidityCapSetEventObject {
    liquidityCap: BigNumber;
}
export declare type LiquidityCapSetEvent = TypedEvent<[BigNumber], LiquidityCapSetEventObject>;
export declare type LiquidityCapSetEventFilter = TypedEventFilter<LiquidityCapSetEvent>;
export interface OwnershipTransferredEventObject {
    previousOwner: string;
    newOwner: string;
}
export declare type OwnershipTransferredEvent = TypedEvent<[string, string], OwnershipTransferredEventObject>;
export declare type OwnershipTransferredEventFilter = TypedEventFilter<OwnershipTransferredEvent>;
export interface PrizeStrategySetEventObject {
    prizeStrategy: string;
}
export declare type PrizeStrategySetEvent = TypedEvent<[string], PrizeStrategySetEventObject>;
export declare type PrizeStrategySetEventFilter = TypedEventFilter<PrizeStrategySetEvent>;
export interface ReserveFeeCapturedEventObject {
    amount: BigNumber;
}
export declare type ReserveFeeCapturedEvent = TypedEvent<[BigNumber], ReserveFeeCapturedEventObject>;
export declare type ReserveFeeCapturedEventFilter = TypedEventFilter<ReserveFeeCapturedEvent>;
export interface ReserveWithdrawalEventObject {
    to: string;
    amount: BigNumber;
}
export declare type ReserveWithdrawalEvent = TypedEvent<[string, BigNumber], ReserveWithdrawalEventObject>;
export declare type ReserveWithdrawalEventFilter = TypedEventFilter<ReserveWithdrawalEvent>;
export interface TimelockDepositedEventObject {
    operator: string;
    to: string;
    token: string;
    amount: BigNumber;
}
export declare type TimelockDepositedEvent = TypedEvent<[string, string, string, BigNumber], TimelockDepositedEventObject>;
export declare type TimelockDepositedEventFilter = TypedEventFilter<TimelockDepositedEvent>;
export interface TimelockedWithdrawalEventObject {
    operator: string;
    from: string;
    token: string;
    amount: BigNumber;
    unlockTimestamp: BigNumber;
}
export declare type TimelockedWithdrawalEvent = TypedEvent<[
    string,
    string,
    string,
    BigNumber,
    BigNumber
], TimelockedWithdrawalEventObject>;
export declare type TimelockedWithdrawalEventFilter = TypedEventFilter<TimelockedWithdrawalEvent>;
export interface TimelockedWithdrawalSweptEventObject {
    operator: string;
    from: string;
    amount: BigNumber;
    redeemed: BigNumber;
}
export declare type TimelockedWithdrawalSweptEvent = TypedEvent<[
    string,
    string,
    BigNumber,
    BigNumber
], TimelockedWithdrawalSweptEventObject>;
export declare type TimelockedWithdrawalSweptEventFilter = TypedEventFilter<TimelockedWithdrawalSweptEvent>;
export interface TransferredExternalERC20EventObject {
    to: string;
    token: string;
    amount: BigNumber;
}
export declare type TransferredExternalERC20Event = TypedEvent<[
    string,
    string,
    BigNumber
], TransferredExternalERC20EventObject>;
export declare type TransferredExternalERC20EventFilter = TypedEventFilter<TransferredExternalERC20Event>;
export interface PoolTogetherV3PrizePool extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: PoolTogetherV3PrizePoolInterface;
    queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>;
    listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>;
    listeners(eventName?: string): Array<Listener>;
    removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this;
    removeAllListeners(eventName?: string): this;
    off: OnEvent<this>;
    on: OnEvent<this>;
    once: OnEvent<this>;
    removeListener: OnEvent<this>;
    functions: {
        accountedBalance(overrides?: CallOverrides): Promise<[BigNumber]>;
        addControlledToken(_controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        award(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        awardBalance(overrides?: CallOverrides): Promise<[BigNumber]>;
        awardExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        awardExternalERC721(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, tokenIds: PromiseOrValue<BigNumberish>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        balance(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        balanceOfCredit(user: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        cToken(overrides?: CallOverrides): Promise<[string]>;
        calculateEarlyExitFee(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        calculateReserveFee(amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber]>;
        calculateTimelockDuration(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        canAwardExternal(_externalToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        captureAwardBalance(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        creditPlanOf(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber
        ] & {
            creditLimitMantissa: BigNumber;
            creditRateMantissa: BigNumber;
        }>;
        depositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        estimateCreditAccrualTime(_controlledToken: PromiseOrValue<string>, _principal: PromiseOrValue<BigNumberish>, _interest: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber] & {
            durationSeconds: BigNumber;
        }>;
        'initialize(address,address,address[],uint256,uint256)'(_trustedForwarder: PromiseOrValue<string>, _reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, _maxTimelockDuration: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        'initialize(address,address,address[],uint256,uint256,address)'(_trustedForwarder: PromiseOrValue<string>, _reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, _maxTimelockDuration: PromiseOrValue<BigNumberish>, _cToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        isTrustedForwarder(forwarder: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        liquidityCap(overrides?: CallOverrides): Promise<[BigNumber]>;
        maxExitFeeMantissa(overrides?: CallOverrides): Promise<[BigNumber]>;
        maxTimelockDuration(overrides?: CallOverrides): Promise<[BigNumber]>;
        owner(overrides?: CallOverrides): Promise<[string]>;
        prizeStrategy(overrides?: CallOverrides): Promise<[string]>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        reserveRegistry(overrides?: CallOverrides): Promise<[string]>;
        reserveTotalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
        setCreditPlanOf(_controlledToken: PromiseOrValue<string>, _creditRateMantissa: PromiseOrValue<BigNumberish>, _creditLimitMantissa: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setLiquidityCap(_liquidityCap: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setPrizeStrategy(_prizeStrategy: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        sweepTimelockBalances(users: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        timelockBalanceAvailableAt(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber]>;
        timelockBalanceOf(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber]>;
        timelockDepositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        timelockTotalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
        token(overrides?: CallOverrides): Promise<[string]>;
        tokens(overrides?: CallOverrides): Promise<[string[]]>;
        transferExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        trustedForwarder(overrides?: CallOverrides): Promise<[string]>;
        versionRecipient(overrides?: CallOverrides): Promise<[string]>;
        withdrawInstantlyFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, maximumExitFee: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        withdrawReserve(to: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        withdrawWithTimelockFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
    };
    accountedBalance(overrides?: CallOverrides): Promise<BigNumber>;
    addControlledToken(_controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    award(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    awardBalance(overrides?: CallOverrides): Promise<BigNumber>;
    awardExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    awardExternalERC721(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, tokenIds: PromiseOrValue<BigNumberish>[], overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    balance(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    balanceOfCredit(user: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    cToken(overrides?: CallOverrides): Promise<string>;
    calculateEarlyExitFee(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    calculateReserveFee(amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    calculateTimelockDuration(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    canAwardExternal(_externalToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    captureAwardBalance(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    creditPlanOf(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
        BigNumber,
        BigNumber
    ] & {
        creditLimitMantissa: BigNumber;
        creditRateMantissa: BigNumber;
    }>;
    depositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    estimateCreditAccrualTime(_controlledToken: PromiseOrValue<string>, _principal: PromiseOrValue<BigNumberish>, _interest: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    'initialize(address,address,address[],uint256,uint256)'(_trustedForwarder: PromiseOrValue<string>, _reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, _maxTimelockDuration: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    'initialize(address,address,address[],uint256,uint256,address)'(_trustedForwarder: PromiseOrValue<string>, _reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, _maxTimelockDuration: PromiseOrValue<BigNumberish>, _cToken: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    isTrustedForwarder(forwarder: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    liquidityCap(overrides?: CallOverrides): Promise<BigNumber>;
    maxExitFeeMantissa(overrides?: CallOverrides): Promise<BigNumber>;
    maxTimelockDuration(overrides?: CallOverrides): Promise<BigNumber>;
    owner(overrides?: CallOverrides): Promise<string>;
    prizeStrategy(overrides?: CallOverrides): Promise<string>;
    renounceOwnership(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    reserveRegistry(overrides?: CallOverrides): Promise<string>;
    reserveTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;
    setCreditPlanOf(_controlledToken: PromiseOrValue<string>, _creditRateMantissa: PromiseOrValue<BigNumberish>, _creditLimitMantissa: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setLiquidityCap(_liquidityCap: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setPrizeStrategy(_prizeStrategy: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    sweepTimelockBalances(users: PromiseOrValue<string>[], overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    timelockBalanceAvailableAt(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    timelockBalanceOf(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    timelockDepositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    timelockTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;
    token(overrides?: CallOverrides): Promise<string>;
    tokens(overrides?: CallOverrides): Promise<string[]>;
    transferExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    trustedForwarder(overrides?: CallOverrides): Promise<string>;
    versionRecipient(overrides?: CallOverrides): Promise<string>;
    withdrawInstantlyFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, maximumExitFee: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    withdrawReserve(to: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    withdrawWithTimelockFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    callStatic: {
        accountedBalance(overrides?: CallOverrides): Promise<BigNumber>;
        addControlledToken(_controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        award(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        awardBalance(overrides?: CallOverrides): Promise<BigNumber>;
        awardExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        awardExternalERC721(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, tokenIds: PromiseOrValue<BigNumberish>[], overrides?: CallOverrides): Promise<void>;
        balance(overrides?: CallOverrides): Promise<BigNumber>;
        balanceOfCredit(user: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        cToken(overrides?: CallOverrides): Promise<string>;
        calculateEarlyExitFee(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            exitFee: BigNumber;
            burnedCredit: BigNumber;
        }>;
        calculateReserveFee(amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        calculateTimelockDuration(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber
        ] & {
            durationSeconds: BigNumber;
            burnedCredit: BigNumber;
        }>;
        canAwardExternal(_externalToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        captureAwardBalance(overrides?: CallOverrides): Promise<BigNumber>;
        creditPlanOf(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber
        ] & {
            creditLimitMantissa: BigNumber;
            creditRateMantissa: BigNumber;
        }>;
        depositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        estimateCreditAccrualTime(_controlledToken: PromiseOrValue<string>, _principal: PromiseOrValue<BigNumberish>, _interest: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        'initialize(address,address,address[],uint256,uint256)'(_trustedForwarder: PromiseOrValue<string>, _reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, _maxTimelockDuration: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        'initialize(address,address,address[],uint256,uint256,address)'(_trustedForwarder: PromiseOrValue<string>, _reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, _maxTimelockDuration: PromiseOrValue<BigNumberish>, _cToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        isTrustedForwarder(forwarder: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        liquidityCap(overrides?: CallOverrides): Promise<BigNumber>;
        maxExitFeeMantissa(overrides?: CallOverrides): Promise<BigNumber>;
        maxTimelockDuration(overrides?: CallOverrides): Promise<BigNumber>;
        owner(overrides?: CallOverrides): Promise<string>;
        prizeStrategy(overrides?: CallOverrides): Promise<string>;
        renounceOwnership(overrides?: CallOverrides): Promise<void>;
        reserveRegistry(overrides?: CallOverrides): Promise<string>;
        reserveTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;
        setCreditPlanOf(_controlledToken: PromiseOrValue<string>, _creditRateMantissa: PromiseOrValue<BigNumberish>, _creditLimitMantissa: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        setLiquidityCap(_liquidityCap: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        setPrizeStrategy(_prizeStrategy: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        sweepTimelockBalances(users: PromiseOrValue<string>[], overrides?: CallOverrides): Promise<BigNumber>;
        timelockBalanceAvailableAt(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        timelockBalanceOf(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        timelockDepositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        timelockTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;
        token(overrides?: CallOverrides): Promise<string>;
        tokens(overrides?: CallOverrides): Promise<string[]>;
        transferExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        trustedForwarder(overrides?: CallOverrides): Promise<string>;
        versionRecipient(overrides?: CallOverrides): Promise<string>;
        withdrawInstantlyFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, maximumExitFee: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        withdrawReserve(to: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        withdrawWithTimelockFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    };
    filters: {
        'AwardCaptured(uint256)'(amount?: null): AwardCapturedEventFilter;
        AwardCaptured(amount?: null): AwardCapturedEventFilter;
        'Awarded(address,address,uint256)'(winner?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): AwardedEventFilter;
        Awarded(winner?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): AwardedEventFilter;
        'AwardedExternalERC20(address,address,uint256)'(winner?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): AwardedExternalERC20EventFilter;
        AwardedExternalERC20(winner?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): AwardedExternalERC20EventFilter;
        'AwardedExternalERC721(address,address,uint256[])'(winner?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, tokenIds?: null): AwardedExternalERC721EventFilter;
        AwardedExternalERC721(winner?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, tokenIds?: null): AwardedExternalERC721EventFilter;
        'CompoundPrizePoolInitialized(address)'(cToken?: PromiseOrValue<string> | null): CompoundPrizePoolInitializedEventFilter;
        CompoundPrizePoolInitialized(cToken?: PromiseOrValue<string> | null): CompoundPrizePoolInitializedEventFilter;
        'ControlledTokenAdded(address)'(token?: PromiseOrValue<string> | null): ControlledTokenAddedEventFilter;
        ControlledTokenAdded(token?: PromiseOrValue<string> | null): ControlledTokenAddedEventFilter;
        'CreditBurned(address,address,uint256)'(user?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): CreditBurnedEventFilter;
        CreditBurned(user?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): CreditBurnedEventFilter;
        'CreditMinted(address,address,uint256)'(user?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): CreditMintedEventFilter;
        CreditMinted(user?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): CreditMintedEventFilter;
        'CreditPlanSet(address,uint128,uint128)'(token?: null, creditLimitMantissa?: null, creditRateMantissa?: null): CreditPlanSetEventFilter;
        CreditPlanSet(token?: null, creditLimitMantissa?: null, creditRateMantissa?: null): CreditPlanSetEventFilter;
        'Deposited(address,address,address,uint256,address)'(operator?: PromiseOrValue<string> | null, to?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null, referrer?: null): DepositedEventFilter;
        Deposited(operator?: PromiseOrValue<string> | null, to?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null, referrer?: null): DepositedEventFilter;
        'Initialized(address,address,uint256,uint256)'(trustedForwarder?: null, reserveRegistry?: null, maxExitFeeMantissa?: null, maxTimelockDuration?: null): InitializedEventFilter;
        Initialized(trustedForwarder?: null, reserveRegistry?: null, maxExitFeeMantissa?: null, maxTimelockDuration?: null): InitializedEventFilter;
        'InstantWithdrawal(address,address,address,uint256,uint256,uint256)'(operator?: PromiseOrValue<string> | null, from?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null, redeemed?: null, exitFee?: null): InstantWithdrawalEventFilter;
        InstantWithdrawal(operator?: PromiseOrValue<string> | null, from?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null, redeemed?: null, exitFee?: null): InstantWithdrawalEventFilter;
        'LiquidityCapSet(uint256)'(liquidityCap?: null): LiquidityCapSetEventFilter;
        LiquidityCapSet(liquidityCap?: null): LiquidityCapSetEventFilter;
        'OwnershipTransferred(address,address)'(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
        OwnershipTransferred(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
        'PrizeStrategySet(address)'(prizeStrategy?: PromiseOrValue<string> | null): PrizeStrategySetEventFilter;
        PrizeStrategySet(prizeStrategy?: PromiseOrValue<string> | null): PrizeStrategySetEventFilter;
        'ReserveFeeCaptured(uint256)'(amount?: null): ReserveFeeCapturedEventFilter;
        ReserveFeeCaptured(amount?: null): ReserveFeeCapturedEventFilter;
        'ReserveWithdrawal(address,uint256)'(to?: PromiseOrValue<string> | null, amount?: null): ReserveWithdrawalEventFilter;
        ReserveWithdrawal(to?: PromiseOrValue<string> | null, amount?: null): ReserveWithdrawalEventFilter;
        'TimelockDeposited(address,address,address,uint256)'(operator?: PromiseOrValue<string> | null, to?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): TimelockDepositedEventFilter;
        TimelockDeposited(operator?: PromiseOrValue<string> | null, to?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): TimelockDepositedEventFilter;
        'TimelockedWithdrawal(address,address,address,uint256,uint256)'(operator?: PromiseOrValue<string> | null, from?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null, unlockTimestamp?: null): TimelockedWithdrawalEventFilter;
        TimelockedWithdrawal(operator?: PromiseOrValue<string> | null, from?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null, unlockTimestamp?: null): TimelockedWithdrawalEventFilter;
        'TimelockedWithdrawalSwept(address,address,uint256,uint256)'(operator?: PromiseOrValue<string> | null, from?: PromiseOrValue<string> | null, amount?: null, redeemed?: null): TimelockedWithdrawalSweptEventFilter;
        TimelockedWithdrawalSwept(operator?: PromiseOrValue<string> | null, from?: PromiseOrValue<string> | null, amount?: null, redeemed?: null): TimelockedWithdrawalSweptEventFilter;
        'TransferredExternalERC20(address,address,uint256)'(to?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): TransferredExternalERC20EventFilter;
        TransferredExternalERC20(to?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): TransferredExternalERC20EventFilter;
    };
    estimateGas: {
        accountedBalance(overrides?: CallOverrides): Promise<BigNumber>;
        addControlledToken(_controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        award(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        awardBalance(overrides?: CallOverrides): Promise<BigNumber>;
        awardExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        awardExternalERC721(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, tokenIds: PromiseOrValue<BigNumberish>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        balance(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        balanceOfCredit(user: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        cToken(overrides?: CallOverrides): Promise<BigNumber>;
        calculateEarlyExitFee(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        calculateReserveFee(amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        calculateTimelockDuration(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        canAwardExternal(_externalToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        captureAwardBalance(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        creditPlanOf(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        depositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        estimateCreditAccrualTime(_controlledToken: PromiseOrValue<string>, _principal: PromiseOrValue<BigNumberish>, _interest: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        'initialize(address,address,address[],uint256,uint256)'(_trustedForwarder: PromiseOrValue<string>, _reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, _maxTimelockDuration: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        'initialize(address,address,address[],uint256,uint256,address)'(_trustedForwarder: PromiseOrValue<string>, _reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, _maxTimelockDuration: PromiseOrValue<BigNumberish>, _cToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        isTrustedForwarder(forwarder: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        liquidityCap(overrides?: CallOverrides): Promise<BigNumber>;
        maxExitFeeMantissa(overrides?: CallOverrides): Promise<BigNumber>;
        maxTimelockDuration(overrides?: CallOverrides): Promise<BigNumber>;
        owner(overrides?: CallOverrides): Promise<BigNumber>;
        prizeStrategy(overrides?: CallOverrides): Promise<BigNumber>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        reserveRegistry(overrides?: CallOverrides): Promise<BigNumber>;
        reserveTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;
        setCreditPlanOf(_controlledToken: PromiseOrValue<string>, _creditRateMantissa: PromiseOrValue<BigNumberish>, _creditLimitMantissa: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setLiquidityCap(_liquidityCap: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setPrizeStrategy(_prizeStrategy: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        sweepTimelockBalances(users: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        timelockBalanceAvailableAt(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        timelockBalanceOf(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        timelockDepositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        timelockTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;
        token(overrides?: CallOverrides): Promise<BigNumber>;
        tokens(overrides?: CallOverrides): Promise<BigNumber>;
        transferExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        trustedForwarder(overrides?: CallOverrides): Promise<BigNumber>;
        versionRecipient(overrides?: CallOverrides): Promise<BigNumber>;
        withdrawInstantlyFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, maximumExitFee: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        withdrawReserve(to: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        withdrawWithTimelockFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        accountedBalance(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        addControlledToken(_controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        award(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        awardBalance(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        awardExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        awardExternalERC721(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, tokenIds: PromiseOrValue<BigNumberish>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        balance(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        balanceOfCredit(user: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        cToken(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        calculateEarlyExitFee(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        calculateReserveFee(amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        calculateTimelockDuration(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        canAwardExternal(_externalToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        captureAwardBalance(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        creditPlanOf(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        depositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        estimateCreditAccrualTime(_controlledToken: PromiseOrValue<string>, _principal: PromiseOrValue<BigNumberish>, _interest: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        'initialize(address,address,address[],uint256,uint256)'(_trustedForwarder: PromiseOrValue<string>, _reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, _maxTimelockDuration: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        'initialize(address,address,address[],uint256,uint256,address)'(_trustedForwarder: PromiseOrValue<string>, _reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, _maxTimelockDuration: PromiseOrValue<BigNumberish>, _cToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        isTrustedForwarder(forwarder: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        liquidityCap(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        maxExitFeeMantissa(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        maxTimelockDuration(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        prizeStrategy(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        reserveRegistry(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        reserveTotalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        setCreditPlanOf(_controlledToken: PromiseOrValue<string>, _creditRateMantissa: PromiseOrValue<BigNumberish>, _creditLimitMantissa: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setLiquidityCap(_liquidityCap: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setPrizeStrategy(_prizeStrategy: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        sweepTimelockBalances(users: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        timelockBalanceAvailableAt(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        timelockBalanceOf(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        timelockDepositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        timelockTotalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        token(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        tokens(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        transferExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        trustedForwarder(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        versionRecipient(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        withdrawInstantlyFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, maximumExitFee: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        withdrawReserve(to: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        withdrawWithTimelockFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
    };
}
