From a59b6468c86efcca8f01d36fa2700ec7c2952e36 Mon Sep 17 00:00:00 2001 From: Mark Grothe Date: Tue, 2 Jan 2024 21:28:31 -0600 Subject: [PATCH] fix: staked token types --- .../src/governance-v3/aave-token-v3/index.ts | 14 +- .../src/staking-contract/index.ts | 22 +- .../src/staking-contract/staking.test.ts | 124 +- .../typechain/IStakedAaveV3.d.ts | 4 +- .../typechain/IStakedAaveV3__factory.ts | 1609 +++++++++++++++-- 5 files changed, 1546 insertions(+), 227 deletions(-) diff --git a/packages/contract-helpers/src/governance-v3/aave-token-v3/index.ts b/packages/contract-helpers/src/governance-v3/aave-token-v3/index.ts index 49049ad1..396aac38 100644 --- a/packages/contract-helpers/src/governance-v3/aave-token-v3/index.ts +++ b/packages/contract-helpers/src/governance-v3/aave-token-v3/index.ts @@ -37,24 +37,20 @@ export class AaveTokenV3Service { }); } - public async getPowers( - user: string, - ) { + public async getPowers(user: string) { const powers = await this._contract.getPowersCurrent(user); return { votingPower: powers[0], - propositionPower: powers[1] - } + propositionPower: powers[1], + }; } - public async getDelegateeData( - user: string, - ) { + public async getDelegateeData(user: string) { const data = await this._contract.getDelegates(user); return { votingDelegatee: data[0], propositionDelegatee: data[1], - } + }; } public getDelegateTxData( diff --git a/packages/contract-helpers/src/staking-contract/index.ts b/packages/contract-helpers/src/staking-contract/index.ts index 2fa44b77..0e00e7ac 100644 --- a/packages/contract-helpers/src/staking-contract/index.ts +++ b/packages/contract-helpers/src/staking-contract/index.ts @@ -20,8 +20,8 @@ import { } from '../commons/validators/paramValidators'; import { ERC20_2612Interface, ERC20_2612Service } from '../erc20-2612'; import { ERC20Service, IERC20ServiceInterface } from '../erc20-contract'; -import { IStakedAaveV3 } from './typechain/IStakedAaveV3'; -import { IStakedAaveV3__factory } from './typechain/IStakedAaveV3__factory'; +import { StakedAaveV3 } from './typechain/IStakedAaveV3'; +import { StakedAaveV3__factory } from './typechain/IStakedAaveV3__factory'; export interface StakingInterface { stakingContractAddress: tEthereumAddress; @@ -62,7 +62,7 @@ type StakingServiceConfig = { }; export class StakingService - extends BaseService + extends BaseService implements StakingInterface { public readonly stakingContractAddress: tEthereumAddress; @@ -75,7 +75,7 @@ export class StakingService provider: providers.Provider, stakingServiceConfig: StakingServiceConfig, ) { - super(provider, IStakedAaveV3__factory); + super(provider, StakedAaveV3__factory); this.erc20Service = new ERC20Service(provider); @@ -91,7 +91,7 @@ export class StakingService deadline: string, ): Promise { const { getTokenData } = this.erc20Service; - const stakingContract: IStakedAaveV3 = this.getContractInstance( + const stakingContract: StakedAaveV3 = this.getContractInstance( this.stakingContractAddress, ); // eslint-disable-next-line new-cap @@ -153,7 +153,7 @@ export class StakingService ): Promise { const txs: EthereumTransactionTypeExtended[] = []; const { decimalsOf } = this.erc20Service; - const stakingContract: IStakedAaveV3 = this.getContractInstance( + const stakingContract: StakedAaveV3 = this.getContractInstance( this.stakingContractAddress, ); // eslint-disable-next-line new-cap @@ -195,7 +195,7 @@ export class StakingService ): Promise { const txs: EthereumTransactionTypeExtended[] = []; const { decimalsOf, isApproved, approve } = this.erc20Service; - const stakingContract: IStakedAaveV3 = this.getContractInstance( + const stakingContract: StakedAaveV3 = this.getContractInstance( this.stakingContractAddress, ); // eslint-disable-next-line new-cap @@ -247,7 +247,7 @@ export class StakingService @isPositiveOrMinusOneAmount() amount: string, ): Promise { let convertedAmount: string; - const stakingContract: IStakedAaveV3 = this.getContractInstance( + const stakingContract: StakedAaveV3 = this.getContractInstance( this.stakingContractAddress, ); if (amount === '-1') { @@ -281,7 +281,7 @@ export class StakingService public cooldown( @isEthAddress() user: tEthereumAddress, ): EthereumTransactionTypeExtended[] { - const stakingContract: IStakedAaveV3 = this.getContractInstance( + const stakingContract: StakedAaveV3 = this.getContractInstance( this.stakingContractAddress, ); @@ -305,7 +305,7 @@ export class StakingService @isPositiveOrMinusOneAmount() amount: string, ): Promise { let convertedAmount: string; - const stakingContract: IStakedAaveV3 = this.getContractInstance( + const stakingContract: StakedAaveV3 = this.getContractInstance( this.stakingContractAddress, ); if (amount === '-1') { @@ -345,7 +345,7 @@ export class StakingService @isPositiveOrMinusOneAmount() amount: string, ): Promise { let convertedAmount: string; - const stakingContract: IStakedAaveV3 = this.getContractInstance( + const stakingContract: StakedAaveV3 = this.getContractInstance( this.stakingContractAddress, ); if (amount === '-1') { diff --git a/packages/contract-helpers/src/staking-contract/staking.test.ts b/packages/contract-helpers/src/staking-contract/staking.test.ts index d13ef420..0ef10792 100644 --- a/packages/contract-helpers/src/staking-contract/staking.test.ts +++ b/packages/contract-helpers/src/staking-contract/staking.test.ts @@ -6,8 +6,8 @@ import { transactionType, } from '../commons/types'; import { gasLimitRecommendations, valueToWei } from '../commons/utils'; -import { IStakedAaveV3 } from './typechain/IStakedAaveV3'; -import { IStakedAaveV3__factory } from './typechain/IStakedAaveV3__factory'; +import { StakedAaveV3 } from './typechain/IStakedAaveV3'; +import { StakedAaveV3__factory } from './typechain/IStakedAaveV3__factory'; import { StakingService } from './index'; jest.mock('../commons/gasStation', () => { @@ -70,12 +70,10 @@ describe('StakingService', () => { address: '0x0000000000000000000000000000000000000006', }), ); - const spy = jest - .spyOn(IStakedAaveV3__factory, 'connect') - .mockReturnValue({ - STAKED_TOKEN: async () => - Promise.resolve('0x0000000000000000000000000000000000000006'), - } as unknown as IStakedAaveV3); + const spy = jest.spyOn(StakedAaveV3__factory, 'connect').mockReturnValue({ + STAKED_TOKEN: async () => + Promise.resolve('0x0000000000000000000000000000000000000006'), + } as unknown as StakedAaveV3); const nonce = 1; @@ -155,10 +153,10 @@ describe('StakingService', () => { address: '0x0000000000000000000000000000000000000006', }), ); - jest.spyOn(IStakedAaveV3__factory, 'connect').mockReturnValue({ + jest.spyOn(StakedAaveV3__factory, 'connect').mockReturnValue({ STAKED_TOKEN: async () => Promise.resolve('0x0000000000000000000000000000000000000006'), - } as unknown as IStakedAaveV3); + } as unknown as StakedAaveV3); jest .spyOn(instance.erc20_2612Service, 'getNonce') @@ -178,7 +176,7 @@ describe('StakingService', () => { const signature = '0x532f8df4e2502bd869fb35e9301156f9b307380afdcc25cfbc87b2e939f16f7e47c326dc26eb918d327358797ee67ad7415d871ef7eaf0d4f6352d3ad021fbb41c'; - const { populateTransaction } = IStakedAaveV3__factory.connect( + const { populateTransaction } = StakedAaveV3__factory.connect( TOKEN_STAKING_ADDRESS, provider, ); @@ -195,13 +193,11 @@ describe('StakingService', () => { .spyOn(instance.erc20Service, 'decimalsOf') .mockReturnValue(Promise.resolve(decimals)); - const spy = jest - .spyOn(IStakedAaveV3__factory, 'connect') - .mockReturnValue({ - populateTransaction, - STAKED_TOKEN: async () => - Promise.resolve('0x0000000000000000000000000000000000000006'), - } as unknown as IStakedAaveV3); + const spy = jest.spyOn(StakedAaveV3__factory, 'connect').mockReturnValue({ + populateTransaction, + STAKED_TOKEN: async () => + Promise.resolve('0x0000000000000000000000000000000000000006'), + } as unknown as StakedAaveV3); const stakeTxObj = await instance.stakeWithPermit( user, @@ -287,18 +283,16 @@ describe('StakingService', () => { jest.clearAllMocks(); }); - const { populateTransaction } = IStakedAaveV3__factory.connect( + const { populateTransaction } = StakedAaveV3__factory.connect( TOKEN_STAKING_ADDRESS, provider, ); it('Expects the tx object when all params passed with no approval needed', async () => { - const spy = jest - .spyOn(IStakedAaveV3__factory, 'connect') - .mockReturnValue({ - populateTransaction, - STAKED_TOKEN: async () => - Promise.resolve('0x0000000000000000000000000000000000000006'), - } as unknown as IStakedAaveV3); + const spy = jest.spyOn(StakedAaveV3__factory, 'connect').mockReturnValue({ + populateTransaction, + STAKED_TOKEN: async () => + Promise.resolve('0x0000000000000000000000000000000000000006'), + } as unknown as StakedAaveV3); const instance = new StakingService(provider, { TOKEN_STAKING_ADDRESS }); jest @@ -339,13 +333,11 @@ describe('StakingService', () => { expect(gasPrice?.gasPrice).toEqual('1'); }); it('Expects the tx object when all params passed and no onBehalfOf with approval needed', async () => { - const spy = jest - .spyOn(IStakedAaveV3__factory, 'connect') - .mockReturnValue({ - populateTransaction, - STAKED_TOKEN: async () => - Promise.resolve('0x0000000000000000000000000000000000000006'), - } as unknown as IStakedAaveV3); + const spy = jest.spyOn(StakedAaveV3__factory, 'connect').mockReturnValue({ + populateTransaction, + STAKED_TOKEN: async () => + Promise.resolve('0x0000000000000000000000000000000000000006'), + } as unknown as StakedAaveV3); const instance = new StakingService(provider, { TOKEN_STAKING_ADDRESS }); jest @@ -441,18 +433,16 @@ describe('StakingService', () => { jest.clearAllMocks(); }); - const { populateTransaction } = IStakedAaveV3__factory.connect( + const { populateTransaction } = StakedAaveV3__factory.connect( TOKEN_STAKING_ADDRESS, provider, ); it('Expects the tx object when all params passed and specific amount', async () => { - const spy = jest - .spyOn(IStakedAaveV3__factory, 'connect') - .mockReturnValue({ - populateTransaction, - STAKED_TOKEN: async () => - Promise.resolve('0x0000000000000000000000000000000000000006'), - } as unknown as IStakedAaveV3); + const spy = jest.spyOn(StakedAaveV3__factory, 'connect').mockReturnValue({ + populateTransaction, + STAKED_TOKEN: async () => + Promise.resolve('0x0000000000000000000000000000000000000006'), + } as unknown as StakedAaveV3); const instance = new StakingService(provider, { TOKEN_STAKING_ADDRESS }); jest @@ -485,13 +475,11 @@ describe('StakingService', () => { expect(gasPrice?.gasPrice).toEqual('1'); }); it('Expects the tx object when all params passed and -1 amount', async () => { - const spy = jest - .spyOn(IStakedAaveV3__factory, 'connect') - .mockReturnValue({ - populateTransaction, - STAKED_TOKEN: async () => - Promise.resolve('0x0000000000000000000000000000000000000006'), - } as unknown as IStakedAaveV3); + const spy = jest.spyOn(StakedAaveV3__factory, 'connect').mockReturnValue({ + populateTransaction, + STAKED_TOKEN: async () => + Promise.resolve('0x0000000000000000000000000000000000000006'), + } as unknown as StakedAaveV3); const instance = new StakingService(provider, { TOKEN_STAKING_ADDRESS }); const amount = '-1'; @@ -556,18 +544,16 @@ describe('StakingService', () => { jest.clearAllMocks(); }); - const { populateTransaction } = IStakedAaveV3__factory.connect( + const { populateTransaction } = StakedAaveV3__factory.connect( TOKEN_STAKING_ADDRESS, provider, ); it('Expects the tx object when all params passed and specific amount', async () => { - const spy = jest - .spyOn(IStakedAaveV3__factory, 'connect') - .mockReturnValue({ - populateTransaction, - STAKED_TOKEN: async () => - Promise.resolve('0x0000000000000000000000000000000000000006'), - } as unknown as IStakedAaveV3); + const spy = jest.spyOn(StakedAaveV3__factory, 'connect').mockReturnValue({ + populateTransaction, + STAKED_TOKEN: async () => + Promise.resolve('0x0000000000000000000000000000000000000006'), + } as unknown as StakedAaveV3); const instance = new StakingService(provider, { TOKEN_STAKING_ADDRESS, }); @@ -608,13 +594,11 @@ describe('StakingService', () => { expect(gasPrice?.gasPrice).toEqual('1'); }); it('Expects the tx object when all params passed and -1 amount', async () => { - const spy = jest - .spyOn(IStakedAaveV3__factory, 'connect') - .mockReturnValue({ - populateTransaction, - STAKED_TOKEN: async () => - Promise.resolve('0x0000000000000000000000000000000000000006'), - } as unknown as IStakedAaveV3); + const spy = jest.spyOn(StakedAaveV3__factory, 'connect').mockReturnValue({ + populateTransaction, + STAKED_TOKEN: async () => + Promise.resolve('0x0000000000000000000000000000000000000006'), + } as unknown as StakedAaveV3); const instance = new StakingService(provider, { TOKEN_STAKING_ADDRESS, }); @@ -744,18 +728,16 @@ describe('StakingService', () => { jest.clearAllMocks(); }); - const { populateTransaction } = IStakedAaveV3__factory.connect( + const { populateTransaction } = StakedAaveV3__factory.connect( TOKEN_STAKING_ADDRESS, provider, ); it('Expects the tx object when all params passed with specific amount', async () => { - const spy = jest - .spyOn(IStakedAaveV3__factory, 'connect') - .mockReturnValue({ - populateTransaction, - REWARD_TOKEN: async () => - Promise.resolve('0x0000000000000000000000000000000000000006'), - } as unknown as IStakedAaveV3); + const spy = jest.spyOn(StakedAaveV3__factory, 'connect').mockReturnValue({ + populateTransaction, + REWARD_TOKEN: async () => + Promise.resolve('0x0000000000000000000000000000000000000006'), + } as unknown as StakedAaveV3); const instance = new StakingService(provider, { TOKEN_STAKING_ADDRESS }); jest diff --git a/packages/contract-helpers/src/staking-contract/typechain/IStakedAaveV3.d.ts b/packages/contract-helpers/src/staking-contract/typechain/IStakedAaveV3.d.ts index 35a56125..29c62a72 100644 --- a/packages/contract-helpers/src/staking-contract/typechain/IStakedAaveV3.d.ts +++ b/packages/contract-helpers/src/staking-contract/typechain/IStakedAaveV3.d.ts @@ -39,7 +39,7 @@ export declare namespace DistributionTypes { }; } -export interface IStakedAaveV3Interface extends utils.Interface { +export interface StakedAaveV3Interface extends utils.Interface { functions: { 'CLAIM_HELPER_ROLE()': FunctionFragment; 'COOLDOWN_ADMIN_ROLE()': FunctionFragment; @@ -1041,7 +1041,7 @@ export type UserIndexUpdatedEvent = TypedEvent< export type UserIndexUpdatedEventFilter = TypedEventFilter; -export interface IStakedAaveV3 extends BaseContract { +export interface StakedAaveV3 extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; diff --git a/packages/contract-helpers/src/staking-contract/typechain/IStakedAaveV3__factory.ts b/packages/contract-helpers/src/staking-contract/typechain/IStakedAaveV3__factory.ts index 724b4d2a..1d42d31e 100644 --- a/packages/contract-helpers/src/staking-contract/typechain/IStakedAaveV3__factory.ts +++ b/packages/contract-helpers/src/staking-contract/typechain/IStakedAaveV3__factory.ts @@ -1,11 +1,159 @@ /* Autogenerated file. Do not edit manually. */ /* eslint-disable */ - -import { Contract, Signer, utils } from 'ethers'; -import type { Provider } from '@ethersproject/providers'; -import type { IStakedAaveV3, IStakedAaveV3Interface } from './IStakedAaveV3'; +import { + Signer, + utils, + Contract, + ContractFactory, + BigNumberish, + Overrides, +} from 'ethers'; +import type { Provider, TransactionRequest } from '@ethersproject/providers'; +import type { StakedAaveV3, StakedAaveV3Interface } from './IStakedAaveV3'; const _abi = [ + { + inputs: [ + { + internalType: 'contract IERC20', + name: 'stakedToken', + type: 'address', + }, + { + internalType: 'contract IERC20', + name: 'rewardToken', + type: 'address', + }, + { + internalType: 'uint256', + name: 'unstakeWindow', + type: 'uint256', + }, + { + internalType: 'address', + name: 'rewardsVault', + type: 'address', + }, + { + internalType: 'address', + name: 'emissionManager', + type: 'address', + }, + { + internalType: 'uint128', + name: 'distributionDuration', + type: 'uint128', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + inputs: [], + name: 'ECDSAInvalidSignature', + type: 'error', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'length', + type: 'uint256', + }, + ], + name: 'ECDSAInvalidSignatureLength', + type: 'error', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, + ], + name: 'ECDSAInvalidSignatureS', + type: 'error', + }, + { + inputs: [], + name: 'InvalidShortString', + type: 'error', + }, + { + inputs: [ + { + internalType: 'string', + name: 'str', + type: 'string', + }, + ], + name: 'StringTooLong', + type: 'error', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'asset', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'emission', + type: 'uint256', + }, + ], + name: 'AssetConfigUpdated', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'asset', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + ], + name: 'AssetIndexUpdated', + type: 'event', + }, { anonymous: false, inputs: [ @@ -38,6 +186,38 @@ const _abi = [ name: 'CooldownSecondsChanged', type: 'event', }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'delegator', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'delegatee', + type: 'address', + }, + { + indexed: false, + internalType: + 'enum IGovernancePowerDelegationToken.GovernancePowerType', + name: 'delegationType', + type: 'uint8', + }, + ], + name: 'DelegateChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [], + name: 'EIP712DomainChanged', + type: 'event', + }, { anonymous: false, inputs: [ @@ -64,6 +244,19 @@ const _abi = [ name: 'FundsReturned', type: 'event', }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'newDebtToken', + type: 'address', + }, + ], + name: 'GHODebtTokenChanged', + type: 'event', + }, { anonymous: false, inputs: [ @@ -77,6 +270,25 @@ const _abi = [ name: 'MaxSlashablePercentageChanged', type: 'event', }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'newPendingAdmin', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'role', + type: 'uint256', + }, + ], + name: 'PendingAdminChanged', + type: 'event', + }, { anonymous: false, inputs: [ @@ -152,6 +364,25 @@ const _abi = [ name: 'RewardsClaimed', type: 'event', }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'newAdmin', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'role', + type: 'uint256', + }, + ], + name: 'RoleClaimed', + type: 'event', + }, { anonymous: false, inputs: [ @@ -222,172 +453,1078 @@ const _abi = [ type: 'event', }, { - inputs: [], - name: 'COOLDOWN_SECONDS', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { + anonymous: false, inputs: [ { + indexed: true, internalType: 'address', - name: 'to', + name: 'from', type: 'address', }, { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'claimRewards', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { + indexed: true, internalType: 'address', name: 'to', type: 'address', }, { + indexed: false, internalType: 'uint256', - name: 'claimAmount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'redeemAmount', + name: 'value', type: 'uint256', }, ], - name: 'claimRewardsAndRedeem', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', + name: 'Transfer', + type: 'event', }, { + anonymous: false, inputs: [ { + indexed: true, internalType: 'address', - name: 'from', + name: 'user', type: 'address', }, { + indexed: true, internalType: 'address', - name: 'to', + name: 'asset', type: 'address', }, { + indexed: false, internalType: 'uint256', - name: 'claimAmount', + name: 'index', type: 'uint256', }, + ], + name: 'UserIndexUpdated', + type: 'event', + }, + { + inputs: [], + name: 'CLAIM_HELPER_ROLE', + outputs: [ { internalType: 'uint256', - name: 'redeemAmount', + name: '', type: 'uint256', }, ], - name: 'claimRewardsAndRedeemOnBehalf', - outputs: [], - stateMutability: 'nonpayable', + stateMutability: 'view', type: 'function', }, { - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, + inputs: [], + name: 'COOLDOWN_ADMIN_ROLE', + outputs: [ { internalType: 'uint256', - name: 'amount', + name: '', type: 'uint256', }, ], - name: 'claimRewardsAndStake', - outputs: [ - { + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'COOLDOWN_SECONDS', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'DELEGATE_BY_TYPE_TYPEHASH', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'DELEGATE_TYPEHASH', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'DISTRIBUTION_END', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'DOMAIN_SEPARATOR', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'EIP712_REVISION', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'EMISSION_MANAGER', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'EXCHANGE_RATE_UNIT', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'INITIAL_EXCHANGE_RATE', + outputs: [ + { + internalType: 'uint216', + name: '', + type: 'uint216', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'LOWER_BOUND', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'PERMIT_TYPEHASH', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'POWER_SCALE_FACTOR', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'PRECISION', + outputs: [ + { + internalType: 'uint8', + name: '', + type: 'uint8', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'REVISION', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [], + name: 'REWARDS_VAULT', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'REWARD_TOKEN', + outputs: [ + { + internalType: 'contract IERC20', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'SLASH_ADMIN_ROLE', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'STAKED_TOKEN', + outputs: [ + { + internalType: 'contract IERC20', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'UNSTAKE_WINDOW', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: '_nonces', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'assets', + outputs: [ + { + internalType: 'uint128', + name: 'emissionPerSecond', + type: 'uint128', + }, + { + internalType: 'uint128', + name: 'lastUpdateTimestamp', + type: 'uint128', + }, + { + internalType: 'uint256', + name: 'index', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'account', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'claimRewards', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'claimAmount', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'redeemAmount', + type: 'uint256', + }, + ], + name: 'claimRewardsAndRedeem', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'from', + type: 'address', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'claimAmount', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'redeemAmount', + type: 'uint256', + }, + ], + name: 'claimRewardsAndRedeemOnBehalf', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'claimRewardsAndStake', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'from', + type: 'address', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'claimRewardsAndStakeOnBehalf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'from', + type: 'address', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'claimRewardsOnBehalf', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'role', + type: 'uint256', + }, + ], + name: 'claimRoleAdmin', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + components: [ + { + internalType: 'uint128', + name: 'emissionPerSecond', + type: 'uint128', + }, + { + internalType: 'uint256', + name: 'totalStaked', + type: 'uint256', + }, + { + internalType: 'address', + name: 'underlyingAsset', + type: 'address', + }, + ], + internalType: 'struct DistributionTypes.AssetConfigInput[]', + name: 'assetsConfigInput', + type: 'tuple[]', + }, + ], + name: 'configureAssets', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'cooldown', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'from', + type: 'address', + }, + ], + name: 'cooldownOnBehalfOf', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'decimals', + outputs: [ + { + internalType: 'uint8', + name: '', + type: 'uint8', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'spender', + type: 'address', + }, + { + internalType: 'uint256', + name: 'subtractedValue', + type: 'uint256', + }, + ], + name: 'decreaseAllowance', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'delegatee', + type: 'address', + }, + ], + name: 'delegate', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'delegatee', + type: 'address', + }, + { + internalType: + 'enum IGovernancePowerDelegationToken.GovernancePowerType', + name: 'delegationType', + type: 'uint8', + }, + ], + name: 'delegateByType', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'eip712Domain', + outputs: [ + { + internalType: 'bytes1', + name: 'fields', + type: 'bytes1', + }, + { + internalType: 'string', + name: 'name', + type: 'string', + }, + { + internalType: 'string', + name: 'version', + type: 'string', + }, + { + internalType: 'uint256', + name: 'chainId', + type: 'uint256', + }, + { + internalType: 'address', + name: 'verifyingContract', + type: 'address', + }, + { + internalType: 'bytes32', + name: 'salt', + type: 'bytes32', + }, + { + internalType: 'uint256[]', + name: 'extensions', + type: 'uint256[]', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'role', + type: 'uint256', + }, + ], + name: 'getAdmin', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'getCooldownSeconds', + outputs: [ + { internalType: 'uint256', name: '', type: 'uint256', }, ], - stateMutability: 'nonpayable', + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'delegator', + type: 'address', + }, + { + internalType: + 'enum IGovernancePowerDelegationToken.GovernancePowerType', + name: 'delegationType', + type: 'uint8', + }, + ], + name: 'getDelegateeByType', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'delegator', + type: 'address', + }, + ], + name: 'getDelegates', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'getExchangeRate', + outputs: [ + { + internalType: 'uint216', + name: '', + type: 'uint216', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'getMaxSlashablePercentage', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'role', + type: 'uint256', + }, + ], + name: 'getPendingAdmin', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'user', + type: 'address', + }, + { + internalType: + 'enum IGovernancePowerDelegationToken.GovernancePowerType', + name: 'delegationType', + type: 'uint8', + }, + ], + name: 'getPowerCurrent', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'user', + type: 'address', + }, + ], + name: 'getPowersCurrent', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'staker', + type: 'address', + }, + ], + name: 'getTotalRewardsBalance', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'user', + type: 'address', + }, + { + internalType: 'address', + name: 'asset', + type: 'address', + }, + ], + name: 'getUserAssetData', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'ghoDebtToken', + outputs: [ + { + internalType: 'contract IGhoVariableDebtTokenTransferHook', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'inPostSlashingPeriod', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', type: 'function', }, { inputs: [ { internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', + name: 'spender', type: 'address', }, { internalType: 'uint256', - name: 'amount', + name: 'addedValue', type: 'uint256', }, ], - name: 'claimRewardsAndStakeOnBehalf', + name: 'increaseAllowance', outputs: [ { - internalType: 'uint256', + internalType: 'bool', name: '', - type: 'uint256', + type: 'bool', }, ], stateMutability: 'nonpayable', type: 'function', }, + { + inputs: [], + name: 'initialize', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, { inputs: [ { internalType: 'address', - name: 'from', + name: 'delegator', type: 'address', }, { internalType: 'address', - name: 'to', + name: 'delegatee', type: 'address', }, { internalType: 'uint256', - name: 'amount', + name: 'deadline', type: 'uint256', }, - ], - name: 'claimRewardsOnBehalf', - outputs: [ { - internalType: 'uint256', - name: '', - type: 'uint256', + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', }, ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'cooldown', + name: 'metaDelegate', outputs: [], stateMutability: 'nonpayable', type: 'function', @@ -396,68 +1533,54 @@ const _abi = [ inputs: [ { internalType: 'address', - name: 'from', + name: 'delegator', type: 'address', }, - ], - name: 'cooldownOnBehalfOf', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'getCooldownSeconds', - outputs: [ { - internalType: 'uint256', - name: '', - type: 'uint256', + internalType: 'address', + name: 'delegatee', + type: 'address', }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getExchangeRate', - outputs: [ { - internalType: 'uint216', - name: '', - type: 'uint216', + internalType: + 'enum IGovernancePowerDelegationToken.GovernancePowerType', + name: 'delegationType', + type: 'uint8', }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getMaxSlashablePercentage', - outputs: [ { internalType: 'uint256', - name: '', + name: 'deadline', type: 'uint256', }, + { + internalType: 'uint8', + name: 'v', + type: 'uint8', + }, + { + internalType: 'bytes32', + name: 'r', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 's', + type: 'bytes32', + }, ], - stateMutability: 'view', + name: 'metaDelegateByType', + outputs: [], + stateMutability: 'nonpayable', type: 'function', }, { - inputs: [ - { - internalType: 'address', - name: 'staker', - type: 'address', - }, - ], - name: 'getTotalRewardsBalance', + inputs: [], + name: 'name', outputs: [ { - internalType: 'uint256', + internalType: 'string', name: '', - type: 'uint256', + type: 'string', }, ], stateMutability: 'view', @@ -611,6 +1734,19 @@ const _abi = [ stateMutability: 'nonpayable', type: 'function', }, + { + inputs: [ + { + internalType: 'contract IGhoVariableDebtTokenTransferHook', + name: 'newGHODebtToken', + type: 'address', + }, + ], + name: 'setGHODebtToken', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, { inputs: [ { @@ -624,6 +1760,24 @@ const _abi = [ stateMutability: 'nonpayable', type: 'function', }, + { + inputs: [ + { + internalType: 'uint256', + name: 'role', + type: 'uint256', + }, + { + internalType: 'address', + name: 'newPendingAdmin', + type: 'address', + }, + ], + name: 'setPendingAdmin', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, { inputs: [], name: 'settleSlashing', @@ -706,17 +1860,204 @@ const _abi = [ stateMutability: 'nonpayable', type: 'function', }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'stakerRewardsToClaim', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'stakersCooldowns', + outputs: [ + { + internalType: 'uint40', + name: 'timestamp', + type: 'uint40', + }, + { + internalType: 'uint216', + name: 'amount', + type: 'uint216', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'symbol', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'totalSupply', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'from', + type: 'address', + }, + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, ] as const; -export class IStakedAaveV3__factory { +const _bytecode = + '0x61024060405260006009553480156200001757600080fd5b50604051620058a5380380620058a58339810160408190526200003a9162000294565b8585858585858585858585856040518060400160405280600b81526020016a5374616b6564204161766560a81b815250604051806040016040528060018152602001601960f91b81525083836001600160801b031680426200009d91906200033d565b608052506001600160a01b031660a052620000b8826200022a565b61016052620000c7816200022a565b61018052815160208084019190912061012052815190820120610140524660e052620001576101205161014051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60c0525050306101005250506001600160a01b039384166101a0529183166101c0526101e052166102005260066009819055506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f1919062000359565b60ff1690506200020381600a62000482565b61022052506200021a955050620002769350505050565b6009555062000508945050505050565b600080829050601f8151111562000261578260405163305a27a960e01b815260040162000258919062000490565b60405180910390fd5b80516200026e82620004e0565b179392505050565b600690565b6001600160a01b03811681146200029157600080fd5b50565b60008060008060008060c08789031215620002ae57600080fd5b8651620002bb816200027b565b6020880151909650620002ce816200027b565b604088015160608901519196509450620002e8816200027b565b6080880151909350620002fb816200027b565b60a08801519092506001600160801b03811681146200031957600080fd5b809150509295509295509295565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000353576200035362000327565b92915050565b6000602082840312156200036c57600080fd5b815160ff811681146200037e57600080fd5b9392505050565b600181815b80851115620003c6578160001904821115620003aa57620003aa62000327565b80851615620003b857918102915b93841c93908002906200038a565b509250929050565b600082620003df5750600162000353565b81620003ee5750600062000353565b8160018114620004075760028114620004125762000432565b600191505062000353565b60ff84111562000426576200042662000327565b50506001821b62000353565b5060208310610133831016604e8410600b841016171562000457575081810a62000353565b62000463838362000385565b80600019048211156200047a576200047a62000327565b029392505050565b60006200037e8383620003ce565b600060208083528351808285015260005b81811015620004bf57858101830151858201604001528201620004a1565b506000604082860101526040601f19601f8301168501019250505092915050565b8051602080830151919081101562000502576000198160200360031b1b821691505b50919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161527e62000627600039600081816107f701528181610d30015281816110d80152611149015260008181610934015261283f0152600081816106de01526123100152600081816109760152818161281d015261306d01526000818161066401528181610dd9015281816111db01528181611d610152818161254c01528181613043015261326001526000612ead01526000612f0d01526000612c3501526000612c0d01526000612b6801526000612b9201526000612bbc015260008181610aba0152611a7a01526000818161090d015281816140440152818161408001526140ad015261527e6000f3fe608060405234801561001057600080fd5b50600436106104755760003560e01c80637b5b115711610257578063ab406fe611610146578063dc937e1c116100c3578063ecd9ba8211610087578063ecd9ba8214610b6e578063f036bc6814610b81578063f11b818814610b95578063f34d96da14610bf7578063fde9eb6914610bff57600080fd5b8063dc937e1c14610af7578063dd62ed3e14610b0a578063dde43cba14610b43578063e6aa216c14610b4a578063eab5231814610b5b57600080fd5b8063b9844d8d1161010a578063b9844d8d14610a82578063c18f539a14610aa2578063cbcbb50714610ab5578063d505accf14610adc578063dbc0ed8a14610aef57600080fd5b8063ab406fe614610a2e578063adc9772e14610a41578063aff05aa914610a54578063b2a5dbfa14610a5c578063b2f4201d14610a6f57600080fd5b806395d89b41116101d4578063a095ac1911610198578063a095ac19146109c6578063a457c2d7146109d9578063a9059cbb146109ec578063aa9fbe02146109ff578063aaf5eb6814610a2657600080fd5b806395d89b411461096957806399248ea7146109715780639a99b4f0146109985780639c9b5154146109ab5780639e3ffce0146109be57600080fd5b80638dbefee21161021b5780638dbefee2146108e65780638e9b2ca4146108f9578063919cd40f14610908578063946776cd1461092f578063955e18af1461095657600080fd5b80637b5b1157146108885780637e90d7ef1461089b5780638129fc1c146108bb57806384b0196e146108c35780638c9a281d146108de57600080fd5b80633644e51511610373578063616e0bf9116102f0578063727a5d57116102b4578063727a5d571461085257806372b49d63146107ea57806374011f56146108655780637816037614610878578063787a08a61461088057600080fd5b8063616e0bf9146107ea5780636198e135146107f2578063657f0cde146108195780636f50458d1461082c57806370a082311461083f57600080fd5b80634998fffd116103375780634998fffd1461077e5780634cdad50614610791578063570a9714146107a457806358146d17146107b05780635c19a95c146107d757600080fd5b80633644e51514610700578063395093511461070857806341cbf54a1461071b57806345755dd6146107425780634575e69b1461075557600080fd5b80631e9a69501161040157806330adf81f116103c557806330adf81f14610638578063312f6b831461065f578063313ce567146106865780633373ee4c1461069b578063359c4a96146106d957600080fd5b80631e9a6950146105c457806320fb80b5146105d757806323b872dd146105ea578063250201db146105fd5780632a8b36681461061057600080fd5b8063111fd88b11610448578063111fd88b14610536578063112d037c14610561578063169db77d14610576578063174ed542146105a957806318160ddd146105bc57600080fd5b806302fb4d851461047a57806306fdde03146104a0578063091030c3146104b5578063095ea7b314610513575b600080fd5b61048d610488366004614867565b610c12565b6040519081526020015b60405180910390f35b6104a8610e50565b60405161049791906148e3565b6104ee6104c33660046148f6565b603e6020526000908152604090205464ffffffffff811690600160281b90046001600160d81b031682565b6040805164ffffffffff90931683526001600160d81b03909116602083015201610497565b610526610521366004614867565b610ee2565b6040519015158152602001610497565b610549610544366004614913565b610efa565b6040516001600160a01b039091168152602001610497565b61057461056f36600461492c565b610f15565b005b6105896105843660046148f6565b610f67565b604080516001600160a01b03938416815292909116602083015201610497565b605354610549906001600160a01b031681565b60025461048d565b6105746105d2366004614867565b610f99565b61048d6105e536600461492c565b610fab565b6105266105f836600461492c565b610ffc565b61057461060b3660046148f6565b611020565b61062361061e3660046148f6565b611066565b60408051928352602083019190915201610497565b61048d7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6105497f000000000000000000000000000000000000000000000000000000000000000081565b60125b60405160ff9091168152602001610497565b61048d6106a936600461496d565b6001600160a01b038082166000908152603c60209081526040808320938616835260029093019052205492915050565b61048d7f000000000000000000000000000000000000000000000000000000000000000081565b61048d611088565b610526610716366004614867565b611097565b61048d7fd46e8b93b5190df6403875402a5c13897b72d2a576da5d1bfea20a63638d216e81565b610574610750366004614913565b6110d6565b610549610763366004614913565b6000908152604660205260409020546001600160a01b031690565b61057461078c3660046148f6565b61123b565b61048d61079f366004614913565b6112a5565b61048d6402540be40081565b6107bf670de0b6b3a764000081565b6040516001600160d81b039091168152602001610497565b6105746107e53660046148f6565b6112d0565b604f5461048d565b61048d7f000000000000000000000000000000000000000000000000000000000000000081565b6105746108273660046149cb565b6112e8565b61054961083a366004614a40565b611424565b61048d61084d3660046148f6565b611439565b61048d610860366004614913565b61145d565b610574610873366004614913565b611480565b6104a86114c3565b6105746114cd565b610574610896366004614913565b6114d8565b61048d6108a93660046148f6565b603d6020526000908152604090205481565b61057461154b565b6108cb6115bb565b6040516104979796959493929190614a75565b61048d600081565b61048d6108f43660046148f6565b611601565b61048d670de0b6b3a764000081565b61048d7f000000000000000000000000000000000000000000000000000000000000000081565b6105497f000000000000000000000000000000000000000000000000000000000000000081565b61048d610964366004614867565b6116dc565b6104a86116e9565b6105497f000000000000000000000000000000000000000000000000000000000000000081565b6105746109a6366004614867565b6116f8565b6105746109b9366004614b0b565b611703565b61048d600181565b6105746109d4366004614b51565b61175d565b6105266109e7366004614867565b61188f565b6105266109fa366004614867565b611921565b61048d7f6e77642f8f60cdece0498bfeeb2f06ccfef0e8f86d28a1b6255c5e48f1d72a0381565b610689601281565b610574610a3c366004614bb4565b61192f565b610574610a4f366004614867565b6119f2565b6105746119fd565b610574610a6a366004614c49565b611a6f565b61048d610a7d366004614a40565b611b2a565b61048d610a903660046148f6565b60446020526000908152604090205481565b61048d610ab036600461492c565b611b6e565b6105497f000000000000000000000000000000000000000000000000000000000000000081565b610574610aea366004614d30565b611bb5565b61048d600281565b610574610b05366004614a40565b611cfc565b61048d610b1836600461496d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600661048d565b6051546001600160d81b03166107bf565b610574610b69366004614d82565b611d07565b610574610b7c366004614db7565b611d21565b60515461052690600160d81b900460ff1681565b610bd1610ba33660046148f6565b603c60205260009081526040902080546001909101546001600160801b0380831692600160801b9004169083565b604080516001600160801b03948516815293909216602084015290820152606001610497565b60505461048d565b610574610c0d366004614913565b611e06565b6000610c1e6000610efa565b6001600160a01b0316336001600160a01b031614610c575760405162461bcd60e51b8152600401610c4e90614dfe565b60405180910390fd5b605154600160d81b900460ff1615610cb15760405162461bcd60e51b815260206004820152601d60248201527f50524556494f55535f534c415348494e475f4e4f545f534554544c45440000006044820152606401610c4e565b60008211610cef5760405162461bcd60e51b815260206004820152600b60248201526a16915493d7d05353d5539560aa1b6044820152606401610c4e565b6000610cfa60025490565b90506000610d07826112a5565b90506000610d2060505483611ed790919063ffffffff16565b905080851115610d2e578094505b7f0000000000000000000000000000000000000000000000000000000000000000610d598684614e4b565b1015610d9e5760405162461bcd60e51b815260206004820152601460248201527352454d41494e494e475f4c545f4d494e494d554d60601b6044820152606401610c4e565b6051805460ff60d81b1916600160d81b179055610dcc610dc7610dc18785614e4b565b85611f59565b611f97565b610e006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016878761203a565b856001600160a01b03167f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd86604051610e3b91815260200190565b60405180910390a28493505050505b92915050565b606060038054610e5f90614e5e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8b90614e5e565b8015610ed85780601f10610ead57610100808354040283529160200191610ed8565b820191906000526020600020905b815481529060010190602001808311610ebb57829003601f168201915b5050505050905090565b600033610ef081858561209d565b5060019392505050565b6000908152604560205260409020546001600160a01b031690565b610f1f6002610efa565b6001600160a01b0316336001600160a01b031614610f4f5760405162461bcd60e51b8152600401610c4e90614e98565b610f628383610f5d846121c2565b61222f565b505050565b6000806000610f75846125d3565b9050610f83848260006126d6565b610f8f858360016126d6565b9250925050915091565b610fa73383610f5d846121c2565b5050565b6000610fb76002610efa565b6001600160a01b0316336001600160a01b031614610fe75760405162461bcd60e51b8152600401610c4e90614e98565b610ff2848484612783565b90505b9392505050565b60003361100a8582856128bb565b611015858585612947565b506001949350505050565b61102a6002610efa565b6001600160a01b0316336001600160a01b03161461105a5760405162461bcd60e51b8152600401610c4e90614e98565b61106381612a78565b50565b600080611074836000611b2a565b61107f846001611b2a565b91509150915091565b6000611092612b5b565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610ef090829086906110d1908790614ecf565b61209d565b7f000000000000000000000000000000000000000000000000000000000000000081101561113a5760405162461bcd60e51b8152602060048201526011602482015270414d4f554e545f4c545f4d494e494d554d60781b6044820152606401610c4e565b600061114560025490565b90507f00000000000000000000000000000000000000000000000000000000000000008110156111ab5760405162461bcd60e51b81526020600482015260116024820152705348415245535f4c545f4d494e494d554d60781b6044820152606401610c4e565b60006111b6826112a5565b90506111ce610dc76111c88584614ecf565b84611f59565b6112036001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086612c86565b6040518381527f278e51d3323fbf18b9fb8df3f8b97e31b145bc1146c52e764cf4aa1bfc4ba17d9060200160405180910390a1505050565b73ee56e2b3d491590b5b31738cc34d5232f378a8d5331461125b57600080fd5b605380546001600160a01b0319166001600160a01b0383169081179091556040517f62bbced765bccc9ed93d0bae1b2a8c86e13b4663f8bf27d5936d9d619194c8a990600090a250565b6051546000906001600160d81b03166112c683670de0b6b3a7640000614ee2565b610e4a9190614ef9565b6112dc33826000612cbe565b61106333826001612cbe565b6001600160a01b03871661130e5760405162461bcd60e51b8152600401610c4e90614f1b565b8342111561132e5760405162461bcd60e51b8152600401610c4e90614f42565b60006113d161133b612de6565b7f6e77642f8f60cdece0498bfeeb2f06ccfef0e8f86d28a1b6255c5e48f1d72a038a8a8a6113868e6001600160a01b0316600090815260446020526040902080546001810190915590565b8b60405160200161139c96959493929190614fa6565b6040516020818303038152906040528051906020012060405161190160f01b8152600281019290925260228201526042902090565b90506113df81858585612df0565b6001600160a01b0316886001600160a01b03161461140f5760405162461bcd60e51b8152600401610c4e90614fe5565b61141a888888612cbe565b5050505050505050565b6000610ff583611433856125d3565b846126d6565b6001600160a01b03166000908152602081905260409020546001600160681b031690565b605154600090670de0b6b3a7640000906112c6906001600160d81b031684614ee2565b61148a6000610efa565b6001600160a01b0316336001600160a01b0316146114ba5760405162461bcd60e51b8152600401610c4e90614dfe565b61106381612e20565b6060611092612ea6565b6114d633612a78565b565b6114e26001610efa565b6001600160a01b0316336001600160a01b0316146115425760405162461bcd60e51b815260206004820152601960248201527f43414c4c45525f4e4f545f434f4f4c444f574e5f41444d494e000000000000006044820152606401610c4e565b61106381612ed1565b60095460069081116115b65760405162461bcd60e51b815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201526d195b881a5b9a5d1a585b1a5e995960921b6064820152608401610c4e565b600955565b6000606080600080600060606115cf612f06565b6115d7612ea6565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b604080516001808252818301909252600091829190816020015b611648604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b81526020019060019003908161161b5790505090506040518060600160405280306001600160a01b0316815260200161168085611439565b815260200161168e60025490565b815250816000815181106116a4576116a4615010565b60200260200101819052506116b98382612f31565b6001600160a01b0384166000908152603d6020526040902054610ff59190614ecf565b6000610ff533848461303f565b606060048054610e5f90614e5e565b610f62338383612783565b61170d6002610efa565b6001600160a01b0316336001600160a01b03161461173d5760405162461bcd60e51b8152600401610c4e90614e98565b611748848484612783565b506117578484610f5d846121c2565b50505050565b6001600160a01b0386166117835760405162461bcd60e51b8152600401610c4e90614f1b565b834211156117a35760405162461bcd60e51b8152600401610c4e90614f42565b60006118306117b0612de6565b7fd46e8b93b5190df6403875402a5c13897b72d2a576da5d1bfea20a63638d216e89896117fa8c6001600160a01b0316600090815260446020526040902080546001810190915590565b6040805160208101959095526001600160a01b039384169085015291166060830152608082015260a0810188905260c00161139c565b905061183e81858585612df0565b6001600160a01b0316876001600160a01b03161461186e5760405162461bcd60e51b8152600401610c4e90614fe5565b61187a87876000612cbe565b61188687876001612cbe565b50505050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156119145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c4e565b611015828686840361209d565b600033610ef0818585612947565b60008281526045602052604090205482906001600160a01b0316331461198f5760405162461bcd60e51b815260206004820152601560248201527421a0a62622a92fa727aa2fa927a622afa0a226a4a760591b6044820152606401610c4e565b60008381526046602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915591518581527fc3d1bf52795a20771ee6de3e59948fd83e10db956122d4709a3b86c512963855910160405180910390a2505050565b610fa7338383613133565b611a076000610efa565b6001600160a01b0316336001600160a01b031614611a375760405162461bcd60e51b8152600401610c4e90614dfe565b6051805460ff60d81b191690556040517fcdee157e87ba915be681d4fa3f3d511afe7348eca06448a3accd6ac227fa40af90600090a1565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611adf5760405162461bcd60e51b815260206004820152601560248201527427a7262cafa2a6a4a9a9a4a7a72fa6a0a720a3a2a960591b6044820152606401610c4e565b60005b8151811015611b2057600254828281518110611b0057611b00615010565b602090810291909101810151015280611b1881615026565b915050611ae2565b50611063816132f8565b6000611b3e6051546001600160d81b031690565b6001600160d81b0316670de0b6b3a7640000611b5a8585613466565b611b649190614ee2565b610ff59190614ef9565b6000611b7a6002610efa565b6001600160a01b0316336001600160a01b031614611baa5760405162461bcd60e51b8152600401610c4e90614e98565b610ff284848461303f565b6001600160a01b038716611bdb5760405162461bcd60e51b8152600401610c4e90614f1b565b83421115611bfb5760405162461bcd60e51b8152600401610c4e90614f42565b6001600160a01b0387811660008181526044602090815260408083205481517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9938101939093529082019390935292891660608401526080830188905260a0830182905260c083018790529091611c8a9060e001604051602081830303815290604052805190602001206134e8565b9050611c9881868686612df0565b6001600160a01b0316896001600160a01b031614611cc85760405162461bcd60e51b8152600401610c4e90614fe5565b6001600160a01b0389166000908152604460205260409020600183019055611cf189898961209d565b505050505050505050565b610fa7338383612cbe565b611d12338484612783565b50610f623384610f5d846121c2565b60405163d505accf60e01b8152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d505accf9060e401600060405180830381600087803b158015611dad57600080fd5b505af1925050508015611dbe575060015b611df4573d808015611dec576040519150601f19603f3d011682016040523d82523d6000602084013e611df1565b606091505b50505b611dff333387613133565b5050505050565b60008181526046602052604090205481906001600160a01b03163314611e6e5760405162461bcd60e51b815260206004820152601d60248201527f43414c4c45525f4e4f545f50454e44494e475f524f4c455f41444d494e0000006044820152606401610c4e565b60008281526045602090815260408083208054336001600160a01b0319918216811790925560468452938290208054909416909355518481527f83a9ddad961dcb7c6894c9585a16ff7792c2ec8281256a3cc7303ae830152dcf91015b60405180910390a25050565b6000821580611ee4575081155b15611ef157506000610e4a565b611efd82600019614ef9565b831115611f4c5760405162461bcd60e51b815260206004820152601c60248201527f4d4154485f4d554c5449504c49434154494f4e5f4f564552464c4f57000000006044820152606401610c4e565b612710611b648385614ee2565b6000610ff583600181611f74670de0b6b3a764000087614ee2565b611f7e9190614ecf565b611f889190614e4b565b611f929190614ef9565b613515565b806001600160d81b0316600003611fe55760405162461bcd60e51b81526020600482015260126024820152715a45524f5f45584348414e47455f5241544560701b6044820152606401610c4e565b605180546001600160d81b0319166001600160d81b0383169081179091556040519081527fa9c433f9734baa3cf48b209454bb0ace054e191f677ba50e74b696c0d35ef262906020015b60405180910390a150565b6040516001600160a01b038316602482015260448101829052610f6290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261357e565b6001600160a01b0383166120ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c4e565b6001600160a01b0382166121605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c4e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006001600160681b0382111561222b5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663034206269747360c81b6064820152608401610c4e565b5090565b806001600160681b03166000036122585760405162461bcd60e51b8152600401610c4e9061503f565b6001600160a01b0383166000908152603e602090815260409182902082518084019093525464ffffffffff81168352600160281b90046001600160d81b031690820152605154600160d81b900460ff1661239857604f5481516122c2919064ffffffffff16614ecf565b4210156123095760405162461bcd60e51b815260206004820152601560248201527424a729aaa32324a1a4a2a72a2fa1a7a7a62227aba760591b6044820152606401610c4e565b604f5481517f0000000000000000000000000000000000000000000000000000000000000000916123409164ffffffffff16614ecf565b61234a9042614e4b565b11156123985760405162461bcd60e51b815260206004820152601760248201527f554e5354414b455f57494e444f575f46494e49534845440000000000000000006044820152606401610c4e565b60006123a385611439565b605154909150600090600160d81b900460ff166123cd5782602001516001600160d81b03166123cf565b815b9050806000036124215760405162461bcd60e51b815260206004820152601b60248201527f494e56414c49445f5a45524f5f4d41585f52454445454d41424c4500000000006044820152606401610c4e565b600081856001600160681b03161161244257846001600160681b0316612444565b815b905061245287846001613650565b50600061245e826112a5565b90506124728861246d846121c2565b6136ff565b845164ffffffffff161561253f578185602001516001600160d81b03166124999190614e4b565b6000036124be576001600160a01b0388166000908152603e602052604081205561253f565b6124c78261387b565b6001600160a01b0389166000908152603e6020526040902054612503916001600160b81b031690600160281b90046001600160d81b031661506c565b6001600160a01b0389166000908152603e6020526040902080546001600160d81b0392909216600160281b0264ffffffffff9092169190911790555b6125736001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016888361203a565b866001600160a01b0316886001600160a01b03167f3f693fff038bb8a046aa76d9516190ac7444f7d69cf952c4cbdc086fdef2d6fc83856040516125c1929190918252602082015260400190565b60405180910390a35050505050505050565b6125f460408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260208181526040808320815160808101835281546001600160681b03811682526001600160481b03600160681b8204811695830195909552600160b01b8104909416928101929092529091606083019060ff600160f81b90910416600381111561266f5761266f614f6e565b600381111561268057612680614f6e565b815250509050604051806060016040528082602001516001600160481b0316815260200182604001516001600160481b03168152602001826060015160038111156126cd576126cd614f6e565b90529392505050565b6000808260018111156126eb576126eb614f6e565b0361273d5760018360400151600381111561270857612708614f6e565b1660ff1660000361271a576000612736565b6001600160a01b03808516600090815260476020526040902054165b9050610ff5565b60028360400151600381111561275557612755614f6e565b1015612762576000610ff2565b5050506001600160a01b039081166000908152604860205260409020541690565b6000816000036127a55760405162461bcd60e51b8152600401610c4e9061503f565b60006127bb856127b487611439565b6000613650565b905060008184116127cc57836127ce565b815b9050806000036127f05760405162461bcd60e51b8152600401610c4e9061503f565b6127fa8183614e4b565b6001600160a01b038088166000908152603d6020526040902091909155612865907f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008784612c86565b846001600160a01b0316866001600160a01b03167f9310ccfcb8de723f578a9e4282ea9f521f05ae40dc08f3068dfad528a65ee3c7836040516128aa91815260200190565b60405180910390a395945050505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611757578181101561293a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c4e565b611757848484840361209d565b600061295284611439565b905061296084826001613650565b50826001600160a01b0316846001600160a01b031614612a6d57600061298584611439565b905061299384826001613650565b506001600160a01b0385166000908152603e602090815260409182902082518084019093525464ffffffffff8116808452600160281b9091046001600160d81b03169183019190915215612a6a57838303612a06576001600160a01b0386166000908152603e6020526040812055612a6a565b60208101516001600160d81b0316612a1e8585614e4b565b1015612a6a57612a2e8484614e4b565b6001600160a01b0387166000908152603e6020526040902080546001600160d81b0392909216600160281b0264ffffffffff9092169190911790555b50505b6117578484846138e4565b6000612a8382611439565b905080600003612ad55760405162461bcd60e51b815260206004820152601b60248201527f494e56414c49445f42414c414e43455f4f4e5f434f4f4c444f574e00000000006044820152606401610c4e565b60408051808201825264ffffffffff42811682526001600160d81b0380851660208085019182526001600160a01b0388166000818152603e9092529086902094519151909216600160281b0292169190911790915590517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d6590611ecb9084815260200190565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612bb457507f000000000000000000000000000000000000000000000000000000000000000046145b15612bde57507f000000000000000000000000000000000000000000000000000000000000000090565b611092604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6040516001600160a01b03808516602483015283166044820152606481018290526117579085906323b872dd60e01b90608401612066565b6000836001600160a01b0316836001600160a01b031614612cdf5782612ce2565b60005b90506000612cef856125d3565b90506000612cfe8683866126d6565b9050806001600160a01b0316836001600160a01b031603612d2157505050505050565b6001600160a01b03818116151590841615156000612d3e89613b1d565b90508215612d5357612d53816000868a613b28565b8115612d6657612d66600082888a613b28565b612d71898888613bf2565b82151582151514612d9057612d9089612d8b878a86613c95565b613db5565b856001600160a01b0316896001600160a01b03167fe8d51c8e11bd570db1734c8ec775785330e77007feed45c43b608ef33ff914bd89604051612dd39190615093565b60405180910390a3505050505050505050565b6000611092611088565b600080600080612e0288888888613e55565b925092509250612e128282613f24565b50909150505b949350505050565b6127108110612e715760405162461bcd60e51b815260206004820152601b60248201527f494e56414c49445f534c415348494e475f50455243454e5441474500000000006044820152606401610c4e565b60508190556040518181527fb79c2d6c7f5c95eec9dc05affc0ed002620a4ec6d72b7b0744cc8638168c600a9060200161202f565b60606110927f0000000000000000000000000000000000000000000000000000000000000000613fdd565b604f8190556040518181527fbbf67247b5c97564e30ffc0a355e71c006836de7b9149e09e3d5d6054cb033559060200161202f565b60606110927f0000000000000000000000000000000000000000000000000000000000000000613fdd565b600080805b8351811015613037576000603c6000868481518110612f5757612f57615010565b602090810291909101810151516001600160a01b031682528101919091526040016000908120600181015481548851929450612fc5926001600160801b0380831692600160801b900416908a9088908110612fb457612fb4615010565b60200260200101516040015161401c565b9050613016868481518110612fdc57612fdc615010565b602002602001015160200151828460020160008b6001600160a01b03166001600160a01b0316815260200190815260200160002054614127565b6130209085614ecf565b93505050808061302f90615026565b915050612f36565b509392505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146130e25760405162461bcd60e51b815260206004820181905260248201527f5245574152445f544f4b454e5f49535f4e4f545f5354414b45445f544f4b454e6044820152606401610c4e565b60006130f8856130f187611439565b6001613650565b90506000818411613109578361310b565b815b9050801561312a5761311e863083612783565b5061312a308683613133565b95945050505050565b605154600160d81b900460ff16156131805760405162461bcd60e51b815260206004820152601060248201526f534c415348494e475f4f4e474f494e4760801b6044820152606401610c4e565b806000036131a05760405162461bcd60e51b8152600401610c4e9061503f565b60006131ab83611439565b905060006131c38430846131be60025490565b614153565b90508015613246576001600160a01b0384166000908152603d60205260409020546131ef908290614ecf565b6001600160a01b0385166000818152603d60209081526040918290209390935580519182529181018390527f2468f9268c60ad90e2d49edb0032c8a001e733ae888b3ab8e982edf535be1a76910160405180910390a15b60006132518461145d565b90506132886001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016873087612c86565b61329a85613295836121c2565b614214565b846001600160a01b0316866001600160a01b03167f6c86f3fd5118b3aa8bb4f389a617046de0a3d3d477de1a1673d227f802f616dc86846040516132e8929190918252602082015260400190565b60405180910390a3505050505050565b60005b8151811015610fa7576000603c600084848151811061331c5761331c615010565b6020026020010151604001516001600160a01b03166001600160a01b03168152602001908152602001600020905061338f83838151811061335f5761335f615010565b6020026020010151604001518285858151811061337e5761337e615010565b602002602001015160200151614379565b508282815181106133a2576133a2615010565b60209081029190910101515181546fffffffffffffffffffffffffffffffff19166001600160801b0390911617815582518390839081106133e5576133e5615010565b6020026020010151604001516001600160a01b03167f87fa03892a0556cb6b8f97e6d533a150d4d55fcbf275fff5fa003fa636bcc7fa84848151811061342d5761342d615010565b602090810291909101810151516040516001600160801b0390911681520160405180910390a2508061345e81615026565b9150506132fb565b600080613472846125d3565b9050600083600181111561348857613488614f6e565b6134939060016150a1565b826040015160038111156134a9576134a9614f6e565b1660ff166000146134bb5760006134c4565b6134c485613b1d565b905060006134d28386614431565b90506134de8183614ecf565b9695505050505050565b6000610e4a6134f5612b5b565b8360405161190160f01b8152600281019290925260228201526042902090565b60006001600160d81b0382111561222b5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663136206269747360c81b6064820152608401610c4e565b60006135d3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166144709092919063ffffffff16565b805190915015610f6257808060200190518101906135f191906150ba565b610f625760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c4e565b6000806136628530866131be60025490565b6001600160a01b0386166000908152603d60205260408120549192509061368a908390614ecf565b9050811561312a5783156136b4576001600160a01b0386166000908152603d602052604090208190555b604080516001600160a01b0388168152602081018490527f2468f9268c60ad90e2d49edb0032c8a001e733ae888b3ab8e982edf535be1a76910160405180910390a195945050505050565b6001600160a01b03821661375f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c4e565b6001600160a01b0382166000908152602081905260409020546001600160681b039081169082168110156137e05760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c4e565b6001600160a01b03831660008181526020818152604080832080546001600160681b0319168787036001600160681b03908116919091179091556002805491881691829003905590519081529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610f62836000836001600160681b03166000866001600160681b031661447f565b60006001600160b81b0382111561222b5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663834206269747360c81b6064820152608401610c4e565b6001600160a01b0383166139485760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c4e565b6001600160a01b0382166139aa5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c4e565b816001600160a01b0316836001600160a01b031614613ad8576001600160a01b038084166000908152602081905260408082205492851682529020546001600160681b03918216911682821015613a525760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c4e565b6001600160a01b038516600090815260208190526040902080546001600160681b0319168484036001600160681b0316179055613a8f83826150dc565b6001600160a01b038516600090815260208190526040902080546001600160681b0319166001600160681b03928316179055613ad590869086908581169085168761447f565b50505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121b591815260200190565b6000610e4a82611439565b6001600160a01b0382161561175757838314611757576000613b57613b526402540be40087614ef9565b614545565b90506000613b6d613b526402540be40087614ef9565b90506000613b7a856125d3565b90506000846001811115613b9057613b90614f6e565b03613bc35781838260200151613ba691906150fc565b613bb0919061511c565b6001600160481b03166020820152613be8565b80518290613bd29085906150fc565b613bdc919061511c565b6001600160481b031681525b6118868582613db5565b6000836001600160a01b0316826001600160a01b031614613c135781613c16565b60005b90506000836001811115613c2c57613c2c614f6e565b03613c64576001600160a01b03848116600090815260476020526040902080546001600160a01b031916918316919091179055611757565b6001600160a01b03938416600090815260486020526040902080546001600160a01b03191691909416179092555050565b613cb660408051606081018252600080825260208201819052909182015290565b8115613d3557826001811115613cce57613cce614f6e565b613cd99060016150a1565b84604001516003811115613cef57613cef614f6e565b1760ff166003811115613d0457613d04614f6e565b84604001906003811115613d1a57613d1a614f6e565b90816003811115613d2d57613d2d614f6e565b905250613dad565b6003836001811115613d4957613d49614f6e565b613d549060016150a1565b1884604001516003811115613d6b57613d6b614f6e565b1660ff166003811115613d8057613d80614f6e565b84604001906003811115613d9657613d96614f6e565b90816003811115613da957613da9614f6e565b9052505b509192915050565b6001600160a01b03821660009081526020818152604091829020835181549285015171ffffffffffffffffffffffffffffffffffff60681b19909316600160681b6001600160481b039283160268ffffffffffffffffff60b01b191617600160b01b91909316029190911780825591830151909182906001600160f81b0316600160f81b836003811115613e4b57613e4b614f6e565b0217905550505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613e905750600091506003905082613f1a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613ee4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613f1057506000925060019150829050613f1a565b9250600091508190505b9450945094915050565b6000826003811115613f3857613f38614f6e565b03613f41575050565b6001826003811115613f5557613f55614f6e565b03613f735760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115613f8757613f87614f6e565b03613fa85760405163fce698f760e01b815260048101829052602401610c4e565b6003826003811115613fbc57613fbc614f6e565b03610fa7576040516335e2f38360e21b815260048101829052602401610c4e565b60606000613fea836145ad565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000831580614029575081155b8061403c575042836001600160801b0316145b8061407057507f0000000000000000000000000000000000000000000000000000000000000000836001600160801b031610155b1561407c575083612e18565b60007f000000000000000000000000000000000000000000000000000000000000000042116140ab57426140cd565b7f00000000000000000000000000000000000000000000000000000000000000005b905060006140e46001600160801b03861683614e4b565b905086846140f46012600a615220565b6140fe848a614ee2565b6141089190614ee2565b6141129190614ef9565b61411c9190614ecf565b979650505050505050565b60006141356012600a615220565b61413f8385614e4b565b6141499086614ee2565b610ff29190614ef9565b6001600160a01b038084166000908152603c60209081526040808320938816835260028401909152812054909190828061418e888588614379565b90508083146142085786156141ab576141a8878285614127565b91505b6001600160a01b03808a1660008181526002870160205260409081902084905551918a16917fbb123b5c06d5408bbea3c4fef481578175cfb432e3b482c6186f02ed9086585b906141ff9085815260200190565b60405180910390a35b50979650505050505050565b6001600160a01b03821661426a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610c4e565b6001600160a01b038216600090815260208190526040812054600280546001600160681b039283169392851692906142a3908490614ecf565b90915550506001600160a01b038316600090815260208190526040812080548492906142d99084906001600160681b03166150dc565b92506101000a8154816001600160681b0302191690836001600160681b03160217905550826001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161435091906001600160681b0391909116815260200190565b60405180910390a3610f626000846000846001600160681b0316866001600160681b031661447f565b6001820154825460009190600160801b90046001600160801b0316428190036143a457509050610ff5565b84546000906143bf9084906001600160801b0316848861401c565b905082811461440e57600186018190556040518181526001600160a01b038816907f5777ca300dfe5bead41006fbce4389794dbc0ed8d6cccebfaf94630aa04184bc9060200160405180910390a25b85546001600160801b03428116600160801b029116178655925050509392505050565b60008082600181111561444657614446614f6e565b14614452578251614458565b82602001515b610ff5906001600160481b03166402540be400614ee2565b6060610ff284846000856145d5565b61448c85858585856146a5565b6053546001600160a01b0316801561453d57604051635b9c4cf160e01b81526001600160a01b0387811660048301528681166024830152604482018690526064820185905260848201849052821690635b9c4cf19060a401600060405180830381600087803b1580156144fe57600080fd5b505af192505050801561450f575060015b61453d573d80801561141a576040519150601f19603f3d011682016040523d82523d6000602084013e61141a565b505050505050565b60006001600160481b0382111561222b5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203760448201526532206269747360d01b6064820152608401610c4e565b600060ff8216601f811115610e4a57604051632cd44ac360e21b815260040160405180910390fd5b6060824710156146365760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c4e565b600080866001600160a01b03168587604051614652919061522c565b60006040518083038185875af1925050503d806000811461468f576040519150601f19603f3d011682016040523d82523d6000602084013e614694565b606091505b509150915061411c878383876146b2565b611dff858585858561472b565b6060831561472157825160000361471a576001600160a01b0385163b61471a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c4e565b5081612e18565b612e188383614828565b836001600160a01b0316856001600160a01b03160315611dff576001600160a01b038516156147bf57600061475f866125d3565b9050600061476d8386614e4b565b905060008260400151600381111561478757614787614f6e565b146147bc576147a4858261479d8a8660006126d6565b6000613b28565b6147bc85826147b58a8660016126d6565b6001613b28565b50505b6001600160a01b03841615611dff5760006147d9856125d3565b905060006147e78385614ecf565b905060008260400151600381111561480157614801614f6e565b1461188657614817848261479d898660006126d6565b61188684826147b5898660016126d6565b8151156148385781518083602001fd5b8060405162461bcd60e51b8152600401610c4e91906148e3565b6001600160a01b038116811461106357600080fd5b6000806040838503121561487a57600080fd5b823561488581614852565b946020939093013593505050565b60005b838110156148ae578181015183820152602001614896565b50506000910152565b600081518084526148cf816020860160208601614893565b601f01601f19169290920160200192915050565b602081526000610ff560208301846148b7565b60006020828403121561490857600080fd5b8135610ff581614852565b60006020828403121561492557600080fd5b5035919050565b60008060006060848603121561494157600080fd5b833561494c81614852565b9250602084013561495c81614852565b929592945050506040919091013590565b6000806040838503121561498057600080fd5b823561498b81614852565b9150602083013561499b81614852565b809150509250929050565b8035600281106149b557600080fd5b919050565b803560ff811681146149b557600080fd5b600080600080600080600060e0888a0312156149e657600080fd5b87356149f181614852565b96506020880135614a0181614852565b9550614a0f604089016149a6565b945060608801359350614a24608089016149ba565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215614a5357600080fd5b8235614a5e81614852565b9150614a6c602084016149a6565b90509250929050565b60ff60f81b881681526000602060e081840152614a9560e084018a6148b7565b8381036040850152614aa7818a6148b7565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015614af957835183529284019291840191600101614add565b50909c9b505050505050505050505050565b60008060008060808587031215614b2157600080fd5b8435614b2c81614852565b93506020850135614b3c81614852565b93969395505050506040820135916060013590565b60008060008060008060c08789031215614b6a57600080fd5b8635614b7581614852565b95506020870135614b8581614852565b945060408701359350614b9a606088016149ba565b92506080870135915060a087013590509295509295509295565b60008060408385031215614bc757600080fd5b82359150602083013561499b81614852565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715614c1257614c12614bd9565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614c4157614c41614bd9565b604052919050565b60006020808385031215614c5c57600080fd5b823567ffffffffffffffff80821115614c7457600080fd5b818501915085601f830112614c8857600080fd5b813581811115614c9a57614c9a614bd9565b614ca8848260051b01614c18565b81815284810192506060918202840185019188831115614cc757600080fd5b938501935b828510156142085780858a031215614ce45760008081fd5b614cec614bef565b85356001600160801b0381168114614d045760008081fd5b81528587013587820152604080870135614d1d81614852565b9082015284529384019392850192614ccc565b600080600080600080600060e0888a031215614d4b57600080fd5b8735614d5681614852565b96506020880135614d6681614852565b95506040880135945060608801359350614a24608089016149ba565b600080600060608486031215614d9757600080fd5b8335614da281614852565b95602085013595506040909401359392505050565b600080600080600060a08688031215614dcf57600080fd5b8535945060208601359350614de6604087016149ba565b94979396509394606081013594506080013592915050565b60208082526019908201527f43414c4c45525f4e4f545f534c415348494e475f41444d494e00000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e4a57610e4a614e35565b600181811c90821680614e7257607f821691505b602082108103614e9257634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526017908201527f43414c4c45525f4e4f545f434c41494d5f48454c504552000000000000000000604082015260600190565b80820180821115610e4a57610e4a614e35565b8082028115828204841417610e4a57610e4a614e35565b600082614f1657634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600d908201526c24a72b20a624a22fa7aba722a960991b604082015260600190565b60208082526012908201527124a72b20a624a22fa2ac2824a920aa24a7a760711b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b60028110614fa257634e487b7160e01b600052602160045260246000fd5b9052565b8681526001600160a01b0386811660208301528516604082015260c08101614fd16060830186614f84565b608082019390935260a00152949350505050565b602080825260119082015270494e56414c49445f5349474e415455524560781b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161503857615038614e35565b5060010190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b6001600160d81b0382811682821603908082111561508c5761508c614e35565b5092915050565b60208101610e4a8284614f84565b60ff8181168382160190811115610e4a57610e4a614e35565b6000602082840312156150cc57600080fd5b81518015158114610ff557600080fd5b6001600160681b0381811683821601908082111561508c5761508c614e35565b6001600160481b0382811682821603908082111561508c5761508c614e35565b6001600160481b0381811683821601908082111561508c5761508c614e35565b600181815b8085111561517757816000190482111561515d5761515d614e35565b8085161561516a57918102915b93841c9390800290615141565b509250929050565b60008261518e57506001610e4a565b8161519b57506000610e4a565b81600181146151b157600281146151bb576151d7565b6001915050610e4a565b60ff8411156151cc576151cc614e35565b50506001821b610e4a565b5060208310610133831016604e8410600b84101617156151fa575081810a610e4a565b615204838361513c565b806000190482111561521857615218614e35565b029392505050565b6000610ff5838361517f565b6000825161523e818460208701614893565b919091019291505056fea2646970667358221220be3d771064e3a0027aba2c79bae3548c5f3ac357436fd2fbac6a583d43ad28f264736f6c63430008140033'; + +type StakedAaveV3ConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: StakedAaveV3ConstructorParams, +): xs is ConstructorParameters => xs.length > 1; + +export class StakedAaveV3__factory extends ContractFactory { + constructor(...args: StakedAaveV3ConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + stakedToken: string, + rewardToken: string, + unstakeWindow: BigNumberish, + rewardsVault: string, + emissionManager: string, + distributionDuration: BigNumberish, + overrides?: Overrides & { from?: string }, + ): Promise { + return super.deploy( + stakedToken, + rewardToken, + unstakeWindow, + rewardsVault, + emissionManager, + distributionDuration, + overrides || {}, + ) as Promise; + } + override getDeployTransaction( + stakedToken: string, + rewardToken: string, + unstakeWindow: BigNumberish, + rewardsVault: string, + emissionManager: string, + distributionDuration: BigNumberish, + overrides?: Overrides & { from?: string }, + ): TransactionRequest { + return super.getDeployTransaction( + stakedToken, + rewardToken, + unstakeWindow, + rewardsVault, + emissionManager, + distributionDuration, + overrides || {}, + ); + } + override attach(address: string): StakedAaveV3 { + return super.attach(address) as StakedAaveV3; + } + override connect(signer: Signer): StakedAaveV3__factory { + return super.connect(signer) as StakedAaveV3__factory; + } + + static readonly bytecode = _bytecode; static readonly abi = _abi; - static createInterface(): IStakedAaveV3Interface { - return new utils.Interface(_abi) as IStakedAaveV3Interface; + static createInterface(): StakedAaveV3Interface { + return new utils.Interface(_abi) as StakedAaveV3Interface; } static connect( address: string, signerOrProvider: Signer | Provider, - ): IStakedAaveV3 { - return new Contract(address, _abi, signerOrProvider) as IStakedAaveV3; + ): StakedAaveV3 { + return new Contract(address, _abi, signerOrProvider) as StakedAaveV3; } }