S Price: $0.81061 (+13.79%)
    /

    Contract

    0xf9395736aB156F1A26e1bEd881ffB6956868AA8b

    Overview

    S Balance

    Sonic LogoSonic LogoSonic Logo0 S

    S Value

    $0.00

    Multichain Info

    No addresses found
    Transaction Hash
    Method
    Block
    Age
    From
    To

    There are no matching entries

    Please try again later

    Parent Transaction Hash Block Age From To Amount
    View All Internal Transactions
    Loading...
    Loading

    Similar Match Source Code
    This contract matches the deployed Bytecode of the Source Code for Contract 0x00d85Ee4...D941a2eae
    The constructor portion of the code might be different and could alter the actual behaviour of the contract

    Contract Name:
    UiPoolDataProviderV3

    Compiler Version
    v0.8.10+commit.fc410830

    Optimization Enabled:
    Yes with 100000 runs

    Other Settings:
    berlin EvmVersion
    File 1 of 28 : UiPoolDataProviderV3.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.10;
    import {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';
    import {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';
    import {IPool} from '@aave/core-v3/contracts/interfaces/IPool.sol';
    import {IAaveOracle} from '@aave/core-v3/contracts/interfaces/IAaveOracle.sol';
    import {IAToken} from '@aave/core-v3/contracts/interfaces/IAToken.sol';
    import {IVariableDebtToken} from '@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol';
    import {IStableDebtToken} from '@aave/core-v3/contracts/interfaces/IStableDebtToken.sol';
    import {DefaultReserveInterestRateStrategy} from '@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol';
    import {AaveProtocolDataProvider} from '@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol';
    import {WadRayMath} from '@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol';
    import {ReserveConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol';
    import {UserConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol';
    import {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';
    import {IEACAggregatorProxy} from './interfaces/IEACAggregatorProxy.sol';
    import {IERC20DetailedBytes} from './interfaces/IERC20DetailedBytes.sol';
    import {IUiPoolDataProviderV3} from './interfaces/IUiPoolDataProviderV3.sol';
    contract UiPoolDataProviderV3 is IUiPoolDataProviderV3 {
    using WadRayMath for uint256;
    using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
    using UserConfiguration for DataTypes.UserConfigurationMap;
    IEACAggregatorProxy public immutable networkBaseTokenPriceInUsdProxyAggregator;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 28 : IERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    /**
    * @dev Interface of the ERC20 standard as defined in the EIP.
    */
    interface IERC20 {
    /**
    * @dev Returns the amount of tokens in existence.
    */
    function totalSupply() external view returns (uint256);
    /**
    * @dev Returns the amount of tokens owned by `account`.
    */
    function balanceOf(address account) external view returns (uint256);
    /**
    * @dev Moves `amount` tokens from the caller's account to `recipient`.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transfer(address recipient, uint256 amount) external returns (bool);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 28 : IERC20Detailed.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    import {IERC20} from './IERC20.sol';
    interface IERC20Detailed is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 28 : IAaveIncentivesController.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    /**
    * @title IAaveIncentivesController
    * @author Aave
    * @notice Defines the basic interface for an Aave Incentives Controller.
    * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.
    */
    interface IAaveIncentivesController {
    /**
    * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.
    * @dev The units of `totalSupply` and `userBalance` should be the same.
    * @param user The address of the user whose asset balance has changed
    * @param totalSupply The total supply of the asset prior to user balance change
    * @param userBalance The previous user balance prior to balance change
    */
    function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 28 : IAaveOracle.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    import {IPriceOracleGetter} from './IPriceOracleGetter.sol';
    import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';
    /**
    * @title IAaveOracle
    * @author Aave
    * @notice Defines the basic interface for the Aave Oracle
    */
    interface IAaveOracle is IPriceOracleGetter {
    /**
    * @dev Emitted after the base currency is set
    * @param baseCurrency The base currency of used for price quotes
    * @param baseCurrencyUnit The unit of the base currency
    */
    event BaseCurrencySet(address indexed baseCurrency, uint256 baseCurrencyUnit);
    /**
    * @dev Emitted after the price source of an asset is updated
    * @param asset The address of the asset
    * @param source The price source of the asset
    */
    event AssetSourceUpdated(address indexed asset, address indexed source);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 28 : IAToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';
    import {IScaledBalanceToken} from './IScaledBalanceToken.sol';
    import {IInitializableAToken} from './IInitializableAToken.sol';
    /**
    * @title IAToken
    * @author Aave
    * @notice Defines the basic interface for an AToken.
    */
    interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {
    /**
    * @dev Emitted during the transfer action
    * @param from The user whose tokens are being transferred
    * @param to The recipient
    * @param value The scaled amount being transferred
    * @param index The next liquidity index of the reserve
    */
    event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);
    /**
    * @notice Mints `amount` aTokens to `user`
    * @param caller The address performing the mint
    * @param onBehalfOf The address of the user that will receive the minted aTokens
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 28 : IDefaultInterestRateStrategy.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    import {IReserveInterestRateStrategy} from './IReserveInterestRateStrategy.sol';
    import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';
    /**
    * @title IDefaultInterestRateStrategy
    * @author Aave
    * @notice Defines the basic interface of the DefaultReserveInterestRateStrategy
    */
    interface IDefaultInterestRateStrategy is IReserveInterestRateStrategy {
    /**
    * @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.
    * @return The optimal usage ratio, expressed in ray.
    */
    function OPTIMAL_USAGE_RATIO() external view returns (uint256);
    /**
    * @notice Returns the optimal stable to total debt ratio of the reserve.
    * @return The optimal stable to total debt ratio, expressed in ray.
    */
    function OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);
    /**
    * @notice Returns the excess usage ratio above the optimal.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 28 : IInitializableAToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    import {IAaveIncentivesController} from './IAaveIncentivesController.sol';
    import {IPool} from './IPool.sol';
    /**
    * @title IInitializableAToken
    * @author Aave
    * @notice Interface for the initialize function on AToken
    */
    interface IInitializableAToken {
    /**
    * @dev Emitted when an aToken is initialized
    * @param underlyingAsset The address of the underlying asset
    * @param pool The address of the associated pool
    * @param treasury The address of the treasury
    * @param incentivesController The address of the incentives controller for this aToken
    * @param aTokenDecimals The decimals of the underlying
    * @param aTokenName The name of the aToken
    * @param aTokenSymbol The symbol of the aToken
    * @param params A set of encoded parameters for additional initialization
    */
    event Initialized(
    address indexed underlyingAsset,
    address indexed pool,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 28 : IInitializableDebtToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    import {IAaveIncentivesController} from './IAaveIncentivesController.sol';
    import {IPool} from './IPool.sol';
    /**
    * @title IInitializableDebtToken
    * @author Aave
    * @notice Interface for the initialize function common between debt tokens
    */
    interface IInitializableDebtToken {
    /**
    * @dev Emitted when a debt token is initialized
    * @param underlyingAsset The address of the underlying asset
    * @param pool The address of the associated pool
    * @param incentivesController The address of the incentives controller for this aToken
    * @param debtTokenDecimals The decimals of the debt token
    * @param debtTokenName The name of the debt token
    * @param debtTokenSymbol The symbol of the debt token
    * @param params A set of encoded parameters for additional initialization
    */
    event Initialized(
    address indexed underlyingAsset,
    address indexed pool,
    address incentivesController,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 28 : IPool.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';
    import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';
    /**
    * @title IPool
    * @author Aave
    * @notice Defines the basic interface for an Aave Pool.
    */
    interface IPool {
    /**
    * @dev Emitted on mintUnbacked()
    * @param reserve The address of the underlying asset of the reserve
    * @param user The address initiating the supply
    * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens
    * @param amount The amount of supplied assets
    * @param referralCode The referral code used
    */
    event MintUnbacked(
    address indexed reserve,
    address user,
    address indexed onBehalfOf,
    uint256 amount,
    uint16 indexed referralCode
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 28 : IPoolAddressesProvider.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    /**
    * @title IPoolAddressesProvider
    * @author Aave
    * @notice Defines the basic interface for a Pool Addresses Provider.
    */
    interface IPoolAddressesProvider {
    /**
    * @dev Emitted when the market identifier is updated.
    * @param oldMarketId The old id of the market
    * @param newMarketId The new id of the market
    */
    event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);
    /**
    * @dev Emitted when the pool is updated.
    * @param oldAddress The old address of the Pool
    * @param newAddress The new address of the Pool
    */
    event PoolUpdated(address indexed oldAddress, address indexed newAddress);
    /**
    * @dev Emitted when the pool configurator is updated.
    * @param oldAddress The old address of the PoolConfigurator
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 28 : IPoolDataProvider.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';
    /**
    * @title IPoolDataProvider
    * @author Aave
    * @notice Defines the basic interface of a PoolDataProvider
    */
    interface IPoolDataProvider {
    struct TokenData {
    string symbol;
    address tokenAddress;
    }
    /**
    * @notice Returns the address for the PoolAddressesProvider contract.
    * @return The address for the PoolAddressesProvider contract
    */
    function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);
    /**
    * @notice Returns the list of the existing reserves in the pool.
    * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.
    * @return The list of reserves, pairs of symbols and addresses
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 28 : IPriceOracleGetter.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    /**
    * @title IPriceOracleGetter
    * @author Aave
    * @notice Interface for the Aave price oracle.
    */
    interface IPriceOracleGetter {
    /**
    * @notice Returns the base currency address
    * @dev Address 0x0 is reserved for USD as base currency.
    * @return Returns the base currency address.
    */
    function BASE_CURRENCY() external view returns (address);
    /**
    * @notice Returns the base currency unit
    * @dev 1 ether for ETH, 1e8 for USD.
    * @return Returns the base currency unit.
    */
    function BASE_CURRENCY_UNIT() external view returns (uint256);
    /**
    * @notice Returns the asset price in the base currency
    * @param asset The address of the asset
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 28 : IReserveInterestRateStrategy.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';
    /**
    * @title IReserveInterestRateStrategy
    * @author Aave
    * @notice Interface for the calculation of the interest rates
    */
    interface IReserveInterestRateStrategy {
    /**
    * @notice Calculates the interest rates depending on the reserve's state and configurations
    * @param params The parameters needed to calculate interest rates
    * @return liquidityRate The liquidity rate expressed in rays
    * @return stableBorrowRate The stable borrow rate expressed in rays
    * @return variableBorrowRate The variable borrow rate expressed in rays
    */
    function calculateInterestRates(
    DataTypes.CalculateInterestRatesParams memory params
    ) external view returns (uint256, uint256, uint256);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 28 : IScaledBalanceToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    /**
    * @title IScaledBalanceToken
    * @author Aave
    * @notice Defines the basic interface for a scaled-balance token.
    */
    interface IScaledBalanceToken {
    /**
    * @dev Emitted after the mint action
    * @param caller The address performing the mint
    * @param onBehalfOf The address of the user that will receive the minted tokens
    * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)
    * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'
    * @param index The next liquidity index of the reserve
    */
    event Mint(
    address indexed caller,
    address indexed onBehalfOf,
    uint256 value,
    uint256 balanceIncrease,
    uint256 index
    );
    /**
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 28 : IStableDebtToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    import {IInitializableDebtToken} from './IInitializableDebtToken.sol';
    /**
    * @title IStableDebtToken
    * @author Aave
    * @notice Defines the interface for the stable debt token
    * @dev It does not inherit from IERC20 to save in code size
    */
    interface IStableDebtToken is IInitializableDebtToken {
    /**
    * @dev Emitted when new stable debt is minted
    * @param user The address of the user who triggered the minting
    * @param onBehalfOf The recipient of stable debt tokens
    * @param amount The amount minted (user entered amount + balance increase from interest)
    * @param currentBalance The balance of the user based on the previous balance and balance increase from interest
    * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'
    * @param newRate The rate of the debt after the minting
    * @param avgStableRate The next average stable rate after the minting
    * @param newTotalSupply The next total supply of the stable debt token after the action
    */
    event Mint(
    address indexed user,
    address indexed onBehalfOf,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 28 : IVariableDebtToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.0;
    import {IScaledBalanceToken} from './IScaledBalanceToken.sol';
    import {IInitializableDebtToken} from './IInitializableDebtToken.sol';
    /**
    * @title IVariableDebtToken
    * @author Aave
    * @notice Defines the basic interface for a variable debt token.
    */
    interface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {
    /**
    * @notice Mints debt token to the `onBehalfOf` address
    * @param user The address receiving the borrowed underlying, being the delegatee in case
    * of credit delegate, or same as `onBehalfOf` otherwise
    * @param onBehalfOf The address receiving the debt tokens
    * @param amount The amount of debt being minted
    * @param index The variable debt index of the reserve
    * @return True if the previous balance of the user is 0, false otherwise
    * @return The scaled total debt of the reserve
    */
    function mint(
    address user,
    address onBehalfOf,
    uint256 amount,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 28 : AaveProtocolDataProvider.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity ^0.8.10;
    import {IERC20Detailed} from '../dependencies/openzeppelin/contracts/IERC20Detailed.sol';
    import {ReserveConfiguration} from '../protocol/libraries/configuration/ReserveConfiguration.sol';
    import {UserConfiguration} from '../protocol/libraries/configuration/UserConfiguration.sol';
    import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';
    import {WadRayMath} from '../protocol/libraries/math/WadRayMath.sol';
    import {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';
    import {IStableDebtToken} from '../interfaces/IStableDebtToken.sol';
    import {IVariableDebtToken} from '../interfaces/IVariableDebtToken.sol';
    import {IPool} from '../interfaces/IPool.sol';
    import {IPoolDataProvider} from '../interfaces/IPoolDataProvider.sol';
    /**
    * @title AaveProtocolDataProvider
    * @author Aave
    * @notice Peripheral contract to collect and pre-process information from the Pool.
    */
    contract AaveProtocolDataProvider is IPoolDataProvider {
    using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
    using UserConfiguration for DataTypes.UserConfigurationMap;
    using WadRayMath for uint256;
    address constant MKR = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2;
    address constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 28 : ReserveConfiguration.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity ^0.8.0;
    import {Errors} from '../helpers/Errors.sol';
    import {DataTypes} from '../types/DataTypes.sol';
    /**
    * @title ReserveConfiguration library
    * @author Aave
    * @notice Implements the bitmap logic to handle the reserve configuration
    */
    library ReserveConfiguration {
    uint256 internal constant LTV_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore
    uint256 internal constant LIQUIDATION_THRESHOLD_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore
    uint256 internal constant LIQUIDATION_BONUS_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore
    uint256 internal constant DECIMALS_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore
    uint256 internal constant ACTIVE_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore
    uint256 internal constant FROZEN_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore
    uint256 internal constant BORROWING_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore
    uint256 internal constant STABLE_BORROWING_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore
    uint256 internal constant PAUSED_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore
    uint256 internal constant BORROWABLE_IN_ISOLATION_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore
    uint256 internal constant SILOED_BORROWING_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore
    uint256 internal constant FLASHLOAN_ENABLED_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore
    uint256 internal constant RESERVE_FACTOR_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore
    uint256 internal constant BORROW_CAP_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 28 : UserConfiguration.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity ^0.8.0;
    import {Errors} from '../helpers/Errors.sol';
    import {DataTypes} from '../types/DataTypes.sol';
    import {ReserveConfiguration} from './ReserveConfiguration.sol';
    /**
    * @title UserConfiguration library
    * @author Aave
    * @notice Implements the bitmap logic to handle the user configuration
    */
    library UserConfiguration {
    using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
    uint256 internal constant BORROWING_MASK =
    0x5555555555555555555555555555555555555555555555555555555555555555;
    uint256 internal constant COLLATERAL_MASK =
    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;
    /**
    * @notice Sets if the user is borrowing the reserve identified by reserveIndex
    * @param self The configuration object
    * @param reserveIndex The index of the reserve in the bitmap
    * @param borrowing True if the user is borrowing the reserve, false otherwise
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 28 : Errors.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity ^0.8.0;
    /**
    * @title Errors library
    * @author Aave
    * @notice Defines the error messages emitted by the different contracts of the Aave protocol
    */
    library Errors {
    string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'
    string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'
    string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'
    string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'
    string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'
    string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'
    string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'
    string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'
    string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'
    string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'
    string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'
    string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'
    string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'
    string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'
    string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'
    string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'
    string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 28 : PercentageMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity ^0.8.0;
    /**
    * @title PercentageMath library
    * @author Aave
    * @notice Provides functions to perform percentage calculations
    * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR
    * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.
    */
    library PercentageMath {
    // Maximum percentage factor (100.00%)
    uint256 internal constant PERCENTAGE_FACTOR = 1e4;
    // Half percentage factor (50.00%)
    uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;
    /**
    * @notice Executes a percentage multiplication
    * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328
    * @param value The value of which the percentage needs to be calculated
    * @param percentage The percentage of the value to be calculated
    * @return result value percentmul percentage
    */
    function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {
    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 23 of 28 : WadRayMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity ^0.8.0;
    /**
    * @title WadRayMath library
    * @author Aave
    * @notice Provides functions to perform calculations with Wad and Ray units
    * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers
    * with 27 digits of precision)
    * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.
    */
    library WadRayMath {
    // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly
    uint256 internal constant WAD = 1e18;
    uint256 internal constant HALF_WAD = 0.5e18;
    uint256 internal constant RAY = 1e27;
    uint256 internal constant HALF_RAY = 0.5e27;
    uint256 internal constant WAD_RAY_RATIO = 1e9;
    /**
    * @dev Multiplies two wad, rounding half up to the nearest wad
    * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328
    * @param a Wad
    * @param b Wad
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 24 of 28 : DataTypes.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity ^0.8.0;
    library DataTypes {
    struct ReserveData {
    //stores the reserve configuration
    ReserveConfigurationMap configuration;
    //the liquidity index. Expressed in ray
    uint128 liquidityIndex;
    //the current supply rate. Expressed in ray
    uint128 currentLiquidityRate;
    //variable borrow index. Expressed in ray
    uint128 variableBorrowIndex;
    //the current variable borrow rate. Expressed in ray
    uint128 currentVariableBorrowRate;
    //the current stable borrow rate. Expressed in ray
    uint128 currentStableBorrowRate;
    //timestamp of last update
    uint40 lastUpdateTimestamp;
    //the id of the reserve. Represents the position in the list of the active reserves
    uint16 id;
    //aToken address
    address aTokenAddress;
    //stableDebtToken address
    address stableDebtTokenAddress;
    //variableDebtToken address
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 25 of 28 : DefaultReserveInterestRateStrategy.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity ^0.8.10;
    import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
    import {WadRayMath} from '../libraries/math/WadRayMath.sol';
    import {PercentageMath} from '../libraries/math/PercentageMath.sol';
    import {DataTypes} from '../libraries/types/DataTypes.sol';
    import {Errors} from '../libraries/helpers/Errors.sol';
    import {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol';
    import {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol';
    import {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';
    /**
    * @title DefaultReserveInterestRateStrategy contract
    * @author Aave
    * @notice Implements the calculation of the interest rates depending on the reserve state
    * @dev The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO`
    * point of usage and another from that one to 100%.
    * - An instance of this same contract, can't be used across different Aave markets, due to the caching
    * of the PoolAddressesProvider
    */
    contract DefaultReserveInterestRateStrategy is IDefaultInterestRateStrategy {
    using WadRayMath for uint256;
    using PercentageMath for uint256;
    /// @inheritdoc IDefaultInterestRateStrategy
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 26 of 28 : IEACAggregatorProxy.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.10;
    interface IEACAggregatorProxy {
    function decimals() external view returns (uint8);
    function latestAnswer() external view returns (int256);
    function latestTimestamp() external view returns (uint256);
    function latestRound() external view returns (uint256);
    function getAnswer(uint256 roundId) external view returns (int256);
    function getTimestamp(uint256 roundId) external view returns (uint256);
    event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);
    event NewRound(uint256 indexed roundId, address indexed startedBy);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 27 of 28 : IERC20DetailedBytes.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.10;
    import {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';
    interface IERC20DetailedBytes is IERC20 {
    function name() external view returns (bytes32);
    function symbol() external view returns (bytes32);
    function decimals() external view returns (uint8);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 28 of 28 : IUiPoolDataProviderV3.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0
    pragma solidity ^0.8.10;
    import {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';
    interface IUiPoolDataProviderV3 {
    struct InterestRates {
    uint256 variableRateSlope1;
    uint256 variableRateSlope2;
    uint256 stableRateSlope1;
    uint256 stableRateSlope2;
    uint256 baseStableBorrowRate;
    uint256 baseVariableBorrowRate;
    uint256 optimalUsageRatio;
    }
    struct AggregatedReserveData {
    address underlyingAsset;
    string name;
    string symbol;
    uint256 decimals;
    uint256 baseLTVasCollateral;
    uint256 reserveLiquidationThreshold;
    uint256 reserveLiquidationBonus;
    uint256 reserveFactor;
    bool usageAsCollateralEnabled;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    {
    "optimizer": {
    "enabled": true,
    "runs": 100000
    },
    "evmVersion": "berlin",
    "outputSelection": {
    "*": {
    "*": [
    "evm.bytecode",
    "evm.deployedBytecode",
    "devdoc",
    "userdoc",
    "metadata",
    "abi"
    ]
    }
    },
    "metadata": {
    "useLiteralContent": true
    },
    "libraries": {}
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    [{"inputs":[{"internalType":"contract IEACAggregatorProxy","name":"_networkBaseTokenPriceInUsdProxyAggregator","type":"address"},{"internalType":"contract IEACAggregatorProxy","name":"_marketReferenceCurrencyPriceInUsdProxyAggregator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ETH_CURRENCY_UNIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MKR_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_bytes32","type":"bytes32"}],"name":"bytes32ToString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"getReservesData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256","name":"baseLTVasCollateral","type":"uint256"},{"internalType":"uint256","name":"reserveLiquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"reserveLiquidationBonus","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"bool","name":"usageAsCollateralEnabled","type":"bool"},{"internalType":"bool","name":"borrowingEnabled","type":"bool"},{"internalType":"bool","name":"stableBorrowRateEnabled","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"bool","name":"isFrozen","type":"bool"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"liquidityRate","type":"uint128"},{"internalType":"uint128","name":"variableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"stableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint256","name":"availableLiquidity","type":"uint256"},{"internalType":"uint256","name":"totalPrincipalStableDebt","type":"uint256"},{"internalType":"uint256","name":"averageStableRate","type":"uint256"},{"internalType":"uint256","name":"stableDebtLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalScaledVariableDebt","type":"uint256"},{"internalType":"uint256","name":"priceInMarketReferenceCurrency","type":"uint256"},{"internalType":"address","name":"priceOracle","type":"address"},{"internalType":"uint256","name":"variableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"variableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"baseStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"baseVariableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"optimalUsageRatio","type":"uint256"},{"internalType":"bool","name":"isPaused","type":"bool"},{"internalType":"bool","name":"isSiloedBorrowing","type":"bool"},{"internalType":"uint128","name":"accruedToTreasury","type":"uint128"},{"internalType":"uint128","name":"unbacked","type":"uint128"},{"internalType":"uint128","name":"isolationModeTotalDebt","type":"uint128"},{"internalType":"bool","name":"flashLoanEnabled","type":"bool"},{"internalType":"uint256","name":"debtCeiling","type":"uint256"},{"internalType":"uint256","name":"debtCeilingDecimals","type":"uint256"},{"internalType":"uint8","name":"eModeCategoryId","type":"uint8"},{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"supplyCap","type":"uint256"},{"internalType":"uint16","name":"eModeLtv","type":"uint16"},{"internalType":"uint16","name":"eModeLiquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"eModeLiquidationBonus","type":"uint16"},{"internalType":"address","name":"eModePriceSource","type":"address"},{"internalType":"string","name":"eModeLabel","type":"string"},{"internalType":"bool","name":"borrowableInIsolation","type":"bool"}],"internalType":"struct IUiPoolDataProviderV3.AggregatedReserveData[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"marketReferenceCurrencyUnit","type":"uint256"},{"internalType":"int256","name":"marketReferenceCurrencyPriceInUsd","type":"int256"},{"internalType":"int256","name":"networkBaseTokenPriceInUsd","type":"int256"},{"internalType":"uint8","name":"networkBaseTokenPriceDecimals","type":"uint8"}],"internalType":"struct IUiPoolDataProviderV3.BaseCurrencyInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserReservesData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"uint256","name":"scaledATokenBalance","type":"uint256"},{"internalType":"bool","name":"usageAsCollateralEnabledOnUser","type":"bool"},{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"scaledVariableDebt","type":"uint256"},{"internalType":"uint256","name":"principalStableDebt","type":"uint256"},{"internalType":"uint256","name":"stableBorrowLastUpdateTimestamp","type":"uint256"}],"internalType":"struct IUiPoolDataProviderV3.UserReserveData[]","name":"","type":"tuple[]"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketReferenceCurrencyPriceInUsdProxyAggregator","outputs":[{"internalType":"contract IEACAggregatorProxy","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"networkBaseTokenPriceInUsdProxyAggregator","outputs":[{"internalType":"contract IEACAggregatorProxy","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

    Deployed Bytecode

    0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063825ffd921161005b578063825ffd921461013c5780639201de5514610157578063d22cf68a14610177578063ec489c211461019e57600080fd5b80630496f53a1461008d5780633c1740ed146100af57806351974cc0146100fb578063586c14421461011c575b600080fd5b61009c670de0b6b3a764000081565b6040519081526020015b60405180910390f35b6100d67f0000000000000000000000008406acc976137499e6893ece38ce9656ab9801fd81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a6565b61010e61010936600461241c565b6101bf565b6040516100a6929190612455565b61012f61012a366004612501565b6109e2565b6040516100a6919061251e565b6100d6739f8f72aa9304c8b593d555f12ef6589cc3a579a281565b61016a610165366004612578565b610aef565b6040516100a6919061260b565b6100d67f0000000000000000000000008406acc976137499e6893ece38ce9656ab9801fd81565b6101b16101ac366004612501565b610c67565b6040516100a692919061261e565b60606000808473ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023391906129ec565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610282573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526102c89190810190612ad4565b6040517f4417a58300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152919250600091841690634417a58390602401602060405180830381865afa15801561033a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035e9190612bc8565b6040517feddf1b7900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015291925060009185169063eddf1b7990602401602060405180830381865afa1580156103d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f49190612be4565b9050600073ffffffffffffffffffffffffffffffffffffffff881661041a57600061041d565b83515b67ffffffffffffffff81111561043557610435612a09565b6040519080825280602002602001820160405280156104be57816020015b6104ab6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816104535790505b50905060005b84518110156109d45760008673ffffffffffffffffffffffffffffffffffffffff166335ea6a758784815181106104fd576104fd612bfd565b60200260200101516040518263ffffffff1660e01b815260040161053d919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190612c73565b905085828151811061059357610593612bfd565b60200260200101518383815181106105ad576105ad612bfd565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff91821690526101008201516040517f1da24f3e0000000000000000000000000000000000000000000000000000000081528c83166004820152911690631da24f3e90602401602060405180830381865afa15801561062f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106539190612be4565b83838151811061066557610665612bfd565b602090810291909101810151015261067d85836122e8565b83838151811061068f5761068f612bfd565b60209081029190910101519015156040909101526106ad8583612375565b156109c1576101408101516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015290911690631da24f3e90602401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107499190612be4565b83838151811061075b5761075b612bfd565b6020908102919091010151608001526101208101516040517fc634dfaa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301529091169063c634dfaa90602401602060405180830381865afa1580156107dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108019190612be4565b83838151811061081357610813612bfd565b602002602001015160a001818152505082828151811061083557610835612bfd565b602002602001015160a001516000146109c1576101208101516040517fe78c9b3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301529091169063e78c9b3b90602401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190612be4565b8383815181106108f1576108f1612bfd565b6020908102919091010151606001526101208101516040517f79ce6b8c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152909116906379ce6b8c90602401602060405180830381865afa158015610973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109979190612d96565b64ffffffffff168383815181106109b0576109b0612bfd565b602002602001015160c00181815250505b50806109cc81612de0565b9150506104c4565b509890975095505050505050565b606060008273ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5591906129ec565b90508073ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610aa2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610ae89190810190612ad4565b9392505050565b606060005b60208160ff16108015610b405750828160ff1660208110610b1757610b17612bfd565b1a60f81b7fff000000000000000000000000000000000000000000000000000000000000001615155b15610b575780610b4f81612e19565b915050610af4565b60008160ff1667ffffffffffffffff811115610b7557610b75612a09565b6040519080825280601f01601f191660200182016040528015610b9f576020820181803683370190505b509050600091505b60208260ff16108015610bf35750838260ff1660208110610bca57610bca612bfd565b1a60f81b7fff000000000000000000000000000000000000000000000000000000000000001615155b15610ae857838260ff1660208110610c0d57610c0d612bfd565b1a60f81b818360ff1681518110610c2657610c26612bfd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081610c5f81612e19565b925050610ba7565b6060610c976040518060800160405280600081526020016000815260200160008152602001600060ff1681525090565b60008373ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0891906129ec565b905060008473ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7b91906129ec565b905060008573ffffffffffffffffffffffffffffffffffffffff1663e860accb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee91906129ec565b905060008273ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e3d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610e839190810190612ad4565b90506000815167ffffffffffffffff811115610ea157610ea1612a09565b60405190808252806020026020018201604052801561109d57816020015b604080516106c0810182526000808252606060208084018290529383018190528083018290526080830182905260a0830182905260c0830182905260e08301829052610100830182905261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c083018290526101e08301829052610200830182905261022083018290526102408301829052610260830182905261028083018290526102a083018290526102c083018290526102e08301829052610300830182905261032083018290526103408301829052610360830182905261038083018290526103a083018290526103c083018290526103e08301829052610400830182905261042083018290526104408301829052610460830182905261048083018290526104a083018290526104c083018290526104e08301829052610500830182905261052083018290526105408301829052610560830182905261058083018290526105a083018290526105c083018290526105e0830182905261060083018290526106208301829052610640830182905261066083018290526106808301526106a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610ebf5790505b50905060005b8251811015611fee5760008282815181106110c0576110c0612bfd565b602002602001015190508382815181106110dc576110dc612bfd565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff9081168083526040517f35ea6a7500000000000000000000000000000000000000000000000000000000815260048101919091526000918816906335ea6a75906024016101e060405180830381865afa15801561115d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111819190612c73565b60208101516fffffffffffffffffffffffffffffffff9081166101a0850152606082015181166101c085015260408083015182166101e08601526080830151821661020086015260a083015190911661022085015260c082015164ffffffffff1661024085015261010082015173ffffffffffffffffffffffffffffffffffffffff908116610260860152610120830151811661028086015261014083015181166102a086015261016083015181166102c0860152845191517fb3596f0700000000000000000000000000000000000000000000000000000000815291811660048301529192509089169063b3596f0790602401602060405180830381865afa158015611292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b69190612be4565b61038083015281516040517f92bf2be000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908916906392bf2be090602401602060405180830381865afa15801561132b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134f91906129ec565b73ffffffffffffffffffffffffffffffffffffffff9081166103a084015282516102608401516040517f70a0823100000000000000000000000000000000000000000000000000000000815290831660048201529116906370a0823190602401602060405180830381865afa1580156113cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f09190612be4565b826102e001818152505081610280015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa15801561144a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146e9190612e39565b64ffffffffff16610340860152610320850152506103008301526102a0820151604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169163b1bf962d916004808201926020929091908290030181865afa1580156114fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151f9190612be4565b610360830152815173ffffffffffffffffffffffffffffffffffffffff16739f8f72aa9304c8b593d555f12ef6589cc3a579a2141561166a576000826000015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cd9190612be4565b90506000836000015173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116449190612be4565b905061164f82610aef565b604085015261165d81610aef565b6020850152506117a29050565b816000015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116b9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116ff9190810190612f02565b8260400181905250816000015173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611756573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261179c9190810190612f02565b60208301525b8051805161ffff604082811c821660e087015260ff603084901c81166060880152602084811c841660c0890152601085901c841660a08901529284166080880181905215156101008801528451671000000000000000811615156104a08901526708000000000000008116151561014089015267040000000000000081161515610120890152670200000000000000811615156101808901526701000000000000001615156101608801526102c087015182517f0b3429a2000000000000000000000000000000000000000000000000000000008152925160a89590951c9091169373ffffffffffffffffffffffffffffffffffffffff90911692630b3429a292600480820193918290030181865afa9250505080156118fd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526118fa91810190612be4565b60015b6119065761190d565b6103c08501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff1663f42024096040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611997575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261199491810190612be4565b60015b6119a0576119a7565b6103e08501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff1663d5cd73916040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a31575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611a2e91810190612be4565b60015b611a3a57611a41565b6104008501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff166314e32da46040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611acb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611ac891810190612be4565b60015b611ad457611adb565b6104208501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff1663acd786866040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b65575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611b6291810190612be4565b60015b611b6e57611b75565b6104408501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff166334762ca56040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bff575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bfc91810190612be4565b60015b611c0857611c0f565b6104608501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff166354c365c66040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611c99575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c9691810190612be4565b60015b611ca257611ca9565b6104808501525b60ff81166105a0850152815160d41c64ffffffffff16846105600181815250508773ffffffffffffffffffffffffffffffffffffffff166369b169e16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d389190612be4565b6105808501528151640fffffffff605082901c81169160741c166105e08601526105c085015283516040517fd7ed3ef400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063d7ed3ef490602401602060405180830381865afa925050508015611e07575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e0491810190612f37565b60015b611e49573d808015611e35576040519150601f19603f3d011682016040523d82523d6000602084013e611e3a565b606091505b50506001610540850152611e52565b15156105408501525b815167400000000000000016151515156104c08501526101a08301516fffffffffffffffffffffffffffffffff9081166105008601526101c08401518116610520860152610180840151166104e08501526105a08401516040517f6c6f6ae100000000000000000000000000000000000000000000000000000000815260ff909116600482015260009073ffffffffffffffffffffffffffffffffffffffff8b1690636c6f6ae190602401600060405180830381865afa158015611f1a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f609190810190612f59565b805161ffff90811661060088015260208201518116610620880152604082015116610640870152606081015173ffffffffffffffffffffffffffffffffffffffff1661066087015260808101516106808701529050611fc9835167200000000000000016151590565b15156106a09095019490945250839250611fe69150829050612de0565b9150506110a3565b5061201d6040518060800160405280600081526020016000815260200160008152602001600060ff1681525090565b7f0000000000000000000000008406acc976137499e6893ece38ce9656ab9801fd73ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ac9190612be4565b8160400181815250507f0000000000000000000000008406acc976137499e6893ece38ce9656ab9801fd73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612120573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612144919061300c565b60ff166060820152604080517f8c89b64f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691638c89b64f9160048083019260209291908290030181865afa9250505080156121f1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526121ee91810190612be4565b60015b6122d1573d80801561221f576040519150601f19603f3d011682016040523d82523d6000602084013e612224565b606091505b50670de0b6b3a76400008260000181815250507f0000000000000000000000008406acc976137499e6893ece38ce9656ab9801fd73ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c69190612be4565b6020830152506122da565b80825260208201525b909890975095505050505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235a919061260b565b60405180910390fd5b50509051600191821b82011c16151590565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106123e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235a919061260b565b50509051600191821b1c16151590565b73ffffffffffffffffffffffffffffffffffffffff8116811461241957600080fd5b50565b6000806040838503121561242f57600080fd5b823561243a816123f7565b9150602083013561244a816123f7565b809150509250929050565b6040808252835182820181905260009190606090818501906020808901865b838110156124e2578151805173ffffffffffffffffffffffffffffffffffffffff16865283810151848701528781015115158887015286810151878701526080808201519087015260a0808201519087015260c0908101519086015260e09094019390820190600101612474565b50508295506124f58188018960ff169052565b50505050509392505050565b60006020828403121561251357600080fd5b8135610ae8816123f7565b6020808252825182820181905260009190848201906040850190845b8181101561256c57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161253a565b50909695505050505050565b60006020828403121561258a57600080fd5b5035919050565b60005b838110156125ac578181015183820152602001612594565b838111156125bb576000848401525b50505050565b600081518084526125d9816020860160208601612591565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ae860208301846125c1565b600060a080830181845280865180835260c092508286019150828160051b8701016020808a0160005b8481101561299a578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400186528151805173ffffffffffffffffffffffffffffffffffffffff1685526106c08482015181868801526126aa828801826125c1565b915050604080830151878303828901526126c483826125c1565b606085810151908a0152608080860151908a01528c8501518d8a01528b8501518c8a015260e080860151908a0152610100808601511515908a0152610120808601511515908a0152610140808601511515908a0152610160808601511515908a0152610180808601511515908a01526101a0808601516fffffffffffffffffffffffffffffffff908116918b01919091526101c0808701518216908b01526101e0808701518216908b0152610200808701518216908b0152610220808701518216908b01526102408087015164ffffffffff16908b01526102608087015173ffffffffffffffffffffffffffffffffffffffff908116918c0191909152610280808801518216908c01526102a0808801518216908c01526102c0808801518216908c01526102e080880151908c015261030080880151908c015261032080880151908c015261034080880151908c015261036080880151908c015261038080880151908c01526103a0808801518216908c01526103c080880151908c01526103e080880151908c015261040080880151908c015261042080880151908c015261044080880151908c015261046080880151908c015261048080880151908c01526104a0808801511515908c01526104c0808801511515908c01526104e0808801518316908c0152610500808801518316908c015261052080880151909216918b0191909152610540808701511515908b015261056080870151908b015261058080870151908b01526105a08087015160ff16908b01526105c080870151908b01526105e080870151908b01526106008087015161ffff908116918c0191909152610620808801518216908c015261064080880151909116908b015261066080870151909116908a0152610680808601518a8303828c01529194509250905061296c83826125c1565b925050506106a08083015192506129868188018415159052565b509684019694505090820190600101612647565b50508196506129cf8189018a80518252602081015160208301526040810151604083015260ff60608201511660608301525050565b5050505050509392505050565b80516129e7816123f7565b919050565b6000602082840312156129fe57600080fd5b8151610ae8816123f7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715612a5c57612a5c612a09565b60405290565b60405160a0810167ffffffffffffffff81118282101715612a5c57612a5c612a09565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612acc57612acc612a09565b604052919050565b60006020808385031215612ae757600080fd5b825167ffffffffffffffff80821115612aff57600080fd5b818501915085601f830112612b1357600080fd5b815181811115612b2557612b25612a09565b8060051b9150612b36848301612a85565b8181529183018401918481019088841115612b5057600080fd5b938501935b83851015612b7a5784519250612b6a836123f7565b8282529385019390850190612b55565b98975050505050505050565b600060208284031215612b9857600080fd5b6040516020810181811067ffffffffffffffff82111715612bbb57612bbb612a09565b6040529151825250919050565b600060208284031215612bda57600080fd5b610ae88383612b86565b600060208284031215612bf657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516fffffffffffffffffffffffffffffffff811681146129e757600080fd5b805164ffffffffff811681146129e757600080fd5b805161ffff811681146129e757600080fd5b60006101e08284031215612c8657600080fd5b612c8e612a38565b612c988484612b86565b8152612ca660208401612c2c565b6020820152612cb760408401612c2c565b6040820152612cc860608401612c2c565b6060820152612cd960808401612c2c565b6080820152612cea60a08401612c2c565b60a0820152612cfb60c08401612c4c565b60c0820152612d0c60e08401612c61565b60e0820152610100612d1f8185016129dc565b90820152610120612d318482016129dc565b90820152610140612d438482016129dc565b90820152610160612d558482016129dc565b90820152610180612d67848201612c2c565b908201526101a0612d79848201612c2c565b908201526101c0612d8b848201612c2c565b908201529392505050565b600060208284031215612da857600080fd5b610ae882612c4c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e1257612e12612db1565b5060010190565b600060ff821660ff811415612e3057612e30612db1565b60010192915050565b60008060008060808587031215612e4f57600080fd5b845193506020850151925060408501519150612e6d60608601612c4c565b905092959194509250565b600082601f830112612e8957600080fd5b815167ffffffffffffffff811115612ea357612ea3612a09565b612ed460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612a85565b818152846020838601011115612ee957600080fd5b612efa826020830160208701612591565b949350505050565b600060208284031215612f1457600080fd5b815167ffffffffffffffff811115612f2b57600080fd5b612efa84828501612e78565b600060208284031215612f4957600080fd5b81518015158114610ae857600080fd5b600060208284031215612f6b57600080fd5b815167ffffffffffffffff80821115612f8357600080fd5b9083019060a08286031215612f9757600080fd5b612f9f612a62565b612fa883612c61565b8152612fb660208401612c61565b6020820152612fc760408401612c61565b60408201526060830151612fda816123f7565b6060820152608083015182811115612ff157600080fd5b612ffd87828601612e78565b60808301525095945050505050565b60006020828403121561301e57600080fd5b815160ff81168114610ae857600080fdfea2646970667358221220807347ae25df538c9b56db5fc6af2928f1e02e6b2e9be45747c789115d4f049964736f6c634300080a0033

    Block Age Transaction Gas Used Reward
    view all blocks produced

    Block Age Uncle Number Difficulty Gas Used Reward
    View All Uncles
    Loading...
    Loading
    Loading...
    Loading

    Validator Index Block Age Amount
    View All Withdrawals

    Transaction Hash Block Age Value Eth2 PubKey Valid
    View All Deposits

    A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.