S Price: $0.603704 (-0.43%)

Contract

0x0c59d36b23f809f8b6C7cb4c8C590a0AC103baEf

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

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

Contract Source Code Verified (Exact Match)

Contract Name:
CurveStableswapFactoryNGHandler

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
default evmVersion, None license

Contract Source Code (Vyper language format)

# pragma version 0.3.10
# pragma evm-version paris
"""
@title CurveStableswapFactoryNGHandler
@custom:version 1.1.0
@author Curve.Fi
@license Copyright (c) Curve.Fi, 2020-2024 - all rights reserved
@notice Stableswap Factory handler for the Metaregistry
"""

version: public(constant(String[8])) = "1.1.0"


# ---- interfaces ---- #
interface BaseRegistry:
    def find_pool_for_coins(_from: address, _to: address, i: uint256 = 0) -> address: view
    def get_admin_balances(_pool: address) -> DynArray[uint256, MAX_METAREGISTRY_COINS]: view
    def get_A(_pool: address) -> uint256: view
    def get_balances(_pool: address) -> DynArray[uint256, MAX_METAREGISTRY_COINS]: view
    def get_coins(_pool: address) -> DynArray[address, MAX_METAREGISTRY_COINS]: view
    def get_coin_indices(_pool: address, _from: address, _to: address) -> (int128, int128): view
    def get_decimals(_pool: address) -> DynArray[uint256, MAX_METAREGISTRY_COINS]: view
    def get_fees(_pool: address) -> uint256[2]: view
    def get_gauge(_pool: address) -> address: view
    def get_lp_token(_pool: address) -> address: view
    def get_meta_n_coins(_pool: address) -> (uint256, uint256): view
    def get_n_coins(_pool: address) -> uint256: view
    def get_pool_asset_type(_pool: address) -> uint256: view
    def get_underlying_balances(_pool: address) -> DynArray[uint256, MAX_METAREGISTRY_COINS]: view
    def get_underlying_coins(_pool: address) -> DynArray[address, MAX_METAREGISTRY_COINS]: view
    def get_underlying_decimals(_pool: address) -> DynArray[uint256, MAX_METAREGISTRY_COINS]: view
    def is_meta(_pool: address) -> bool: view
    def pool_count() -> uint256: view
    def pool_list(pool_id: uint256) -> address: view
    def base_pool_data(_pool: address) -> BasePoolArray: view
    def base_pool_count() -> uint256: view
    def get_base_pool(_pool: address) -> address: view
    def base_pool_list(i: uint256) -> address: view

interface CurvePool:
    def admin_balances(i: uint256) -> uint256: view
    def balances(i: uint256) -> uint256: view
    def get_virtual_price() -> uint256: view
    def fee() -> uint256: view
    def admin_fee() -> uint256: view
    def offpeg_fee_multiplier() -> uint256: view
    def coins(i: uint256) -> address: view

interface ERC20:
    def balanceOf(_addr: address) -> uint256: view
    def decimals() -> uint256: view
    def name() -> String[64]: view
    def totalSupply() -> uint256: view

interface Gauge:
    def is_killed() -> bool: view


struct BasePoolArray:
    lp_token: address
    coins: DynArray[address, MAX_METAREGISTRY_COINS]
    decimals: uint256
    n_coins: uint256
    asset_types: DynArray[uint8, MAX_METAREGISTRY_COINS]


# ---- constants ---- #
MAX_METAREGISTRY_COINS: constant(uint256) = 8

# ---- storage variables ---- #
base_registry: public(BaseRegistry)


# ---- constructor ---- #
@external
def __init__(_registry_address: address):
    self.base_registry = BaseRegistry(_registry_address)


# ---- internal methods ---- #
@internal
@view
def _get_base_pool_lp_token(_lp_token: address) -> address:
    for i in range(self.base_registry.base_pool_count(), bound=10000):
        base_pool: address = self.base_registry.base_pool_list(i)
        if self.base_registry.base_pool_data(base_pool).lp_token == _lp_token:
            return base_pool
    return empty(address)


@internal
@view
def _get_coins(_pool: address) -> address[MAX_METAREGISTRY_COINS]:
    _coins: DynArray[address, MAX_METAREGISTRY_COINS] = self.base_registry.get_coins(_pool)
    _padded_coins: address[MAX_METAREGISTRY_COINS] = empty(address[MAX_METAREGISTRY_COINS])
    for i in range(MAX_METAREGISTRY_COINS):
        if i == len(_coins):
            break
        _padded_coins[i] = _coins[i]
    return _padded_coins


@internal
@view
def _get_underlying_coins(_pool: address) -> address[MAX_METAREGISTRY_COINS]:
    _coins: DynArray[address, MAX_METAREGISTRY_COINS] = self.base_registry.get_underlying_coins(_pool)
    _padded_coins: address[MAX_METAREGISTRY_COINS] = empty(address[MAX_METAREGISTRY_COINS])
    for i in range(MAX_METAREGISTRY_COINS):
        if i == len(_coins):
            break
        _padded_coins[i] = _coins[i]
    return _padded_coins


@view
@internal
def _get_meta_underlying_balances(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    base_coin_idx: uint256 = self.base_registry.get_n_coins(_pool) - 1
    base_pool: address = self.base_registry.get_base_pool(_pool)

    # base pool lp token is at index 1:
    base_total_supply: uint256 = ERC20(CurvePool(_pool).coins(1)).totalSupply()

    ul_balance: uint256 = 0
    underlying_pct: uint256 = 0
    if base_total_supply > 0:
        underlying_pct = CurvePool(_pool).balances(base_coin_idx) * 10**36 / base_total_supply

    underlying_balances: uint256[MAX_METAREGISTRY_COINS] = empty(uint256[MAX_METAREGISTRY_COINS])
    ul_coins: address[MAX_METAREGISTRY_COINS] = self._get_underlying_coins(_pool)

    for i in range(MAX_METAREGISTRY_COINS):

        if ul_coins[i] == empty(address):
            break

        if i < base_coin_idx:
            ul_balance = CurvePool(_pool).balances(i)

        else:
            ul_balance = CurvePool(base_pool).balances(i - base_coin_idx)
            ul_balance = ul_balance * underlying_pct / 10**36
        underlying_balances[i] = ul_balance

    return underlying_balances


@internal
@view
def _pad_uint_dynarray(
    _array: DynArray[uint256, MAX_METAREGISTRY_COINS]
) -> uint256[MAX_METAREGISTRY_COINS]:
    _padded_array: uint256[MAX_METAREGISTRY_COINS] = empty(uint256[MAX_METAREGISTRY_COINS])
    array_len: uint256 = len(_array)
    for i in range(MAX_METAREGISTRY_COINS):
        if i == array_len:
            break
        _padded_array[i] = _array[i]
    return _padded_array


@internal
@view
def _pad_addr_dynarray(_array: DynArray[address, MAX_METAREGISTRY_COINS]) -> address[MAX_METAREGISTRY_COINS]:
    _padded_array: address[MAX_METAREGISTRY_COINS] = empty(address[MAX_METAREGISTRY_COINS])
    array_len: uint256 = len(_array)
    for i in range(MAX_METAREGISTRY_COINS):
        if i == array_len:
            break
        _padded_array[i] = _array[i]
    return _padded_array


# ---- view methods (API) of the contract ---- #
@external
@view
def find_pool_for_coins(_from: address, _to: address, i: uint256 = 0) -> address:
    return self.base_registry.find_pool_for_coins(_from, _to, i)


@external
@view
def get_admin_balances(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    """
    @notice Get the balances of the admin of the pool
    @dev does not use base registry admin_balances because that has errors
         in the getter for n_coins (some pools show zero, so admin balances is zero)
    @param _pool address of the pool
    @return balances of the admin of the pool
    """
    n_coins: uint256 = self.base_registry.get_n_coins(_pool)
    admin_balances: uint256[MAX_METAREGISTRY_COINS] = empty(uint256[MAX_METAREGISTRY_COINS])
    for i in range(MAX_METAREGISTRY_COINS):
        if i == n_coins:
            break
        admin_balances[i] = CurvePool(_pool).admin_balances(i)
    return admin_balances


@external
@view
def get_balances(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    """
    @notice Get the balances of the pool
    @param _pool address of the pool
    @return balances of the pool
    """
    return self._pad_uint_dynarray(self.base_registry.get_balances(_pool))


@external
@view
def get_base_pool(_pool: address) -> address:
    """
    @notice Get the base pool of the pool
    @param _pool address of the pool
    @return base pool of the pool
    """
    return self.base_registry.get_base_pool(_pool)


@view
@external
def get_coin_indices(_pool: address, _from: address, _to: address) -> (int128, int128, bool):
    """
    @notice Get the indices of the coins in the pool
    @param _pool address of the pool
    @param _from address of the coin
    @param _to address of the coin
    @return coin indices and whether the coin swap involves an underlying market or not
    """
    coin1: int128 = 0
    coin2: int128 = 0
    is_underlying: bool = False

    (coin1, coin2) = self.base_registry.get_coin_indices(_pool, _from, _to)

    # due to a bug in original factory contract, `is_underlying`` is always True
    # to fix this, we first check if it is a metapool, and if not then we return
    # False. If so, then we check if basepool lp token is one of the two coins,
    # in which case `is_underlying` would be False
    if self.base_registry.is_meta(_pool):
        base_pool_lp_token: address = self.base_registry.get_coins(_pool)[1]
        if base_pool_lp_token not in [_from, _to]:
            is_underlying = True

    return (coin1, coin2, is_underlying)


@external
@view
def get_coins(_pool: address) -> address[MAX_METAREGISTRY_COINS]:
    """
    @notice Get the coins of the pool
    @param _pool address of the pool
    @return coins of the pool
    """
    return self._get_coins(_pool)


@external
@view
def get_decimals(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    """
    @notice Get the decimals of coins in the pool
    @param _pool address of the pool
    @return decimals of coins in the pool
    """
    return self._pad_uint_dynarray(self.base_registry.get_decimals(_pool))


@external
@view
def get_fees(_pool: address) -> uint256[10]:
    """
    @notice Get the fees of the pool
    @param _pool address of the pool
    @return fees of the pool
    """
    fees: uint256[10] = empty(uint256[10])
    fees[0] = CurvePool(_pool).fee()
    fees[1] = CurvePool(_pool).admin_fee()
    fees[2] = CurvePool(_pool).offpeg_fee_multiplier()
    return fees


@external
@view
def get_virtual_price_from_lp_token(_pool: address) -> uint256:
    """
    @notice Get the virtual price of the pool
    @param _pool address of the pool
    @return virtual price of the pool
    """
    return CurvePool(_pool).get_virtual_price()


@external
@view
def get_lp_token(_pool: address) -> address:
    """
    @notice Get the lp token of the pool
    @dev for stableswap factory pools, the pool is the lp token itself
    @param _pool address of the pool
    @return lp token of the pool
    """
    return _pool


@external
@view
def get_n_coins(_pool: address) -> uint256:
    """
    @notice Get the number of coins in the pool
    @param _pool address of the pool
    @return number of coins in the pool
    """
    return self.base_registry.get_n_coins(_pool)


@external
@view
def get_n_underlying_coins(_pool: address) -> uint256:
    """
    @notice Get the number of underlying coins in the pool
    @param _pool address of the pool
    @return number of underlying coins in the pool
    """
    # need to check if any of the token is a base pool LP token
    # since a metapool can be lptoken:lptoken, and it would count
    # underlying coins as 1 + base_pool_n_coins instead of 2 x base_pool_n_coins
    coins: address[MAX_METAREGISTRY_COINS] = self._get_coins(_pool)
    base_pool: address = empty(address)
    num_coins: uint256 = 0
    for i in range(MAX_METAREGISTRY_COINS):

        if coins[i] == empty(address):
            break

        base_pool = self.base_registry.get_base_pool(coins[i])
        if base_pool == empty(address) and coins[i] != empty(address):
            num_coins += 1
        else:
            num_coins += self.base_registry.base_pool_data(base_pool).n_coins

    return num_coins


@external
@view
def get_pool_asset_type(_pool: address) -> uint256:
    """
    @notice Get the asset type of the coins in the pool
    @dev 0 = USD, 1 = ETH, 2 = BTC, 3 = Other
    @param _pool address of the pool
    @return pool asset type of the pool
    """
    return self.base_registry.get_pool_asset_type(_pool)


@external
@view
def get_pool_from_lp_token(_lp_token: address) -> address:
    """
    @notice Get the pool of the lp token
    @dev This is more or less like a pass through method. Can be ignored but
         We leave it in for consistency across registry handlers.
    @param _lp_token address of the lp token (which is also the pool)
    @return pool of the lp token
    """
    if self.base_registry.get_n_coins(_lp_token) > 0:
        return _lp_token
    return empty(address)


@external
@view
def get_pool_name(_pool: address) -> String[64]:
    """
    @notice Get the name of the pool
    @dev stable factory pools are ERC20 tokenized
    @return name of the pool
    """
    if self.base_registry.get_n_coins(_pool) == 0:
        # _pool is not in base registry, so we ignore:
        return ""
    return ERC20(_pool).name()


@external
@view
def get_pool_params(_pool: address) -> uint256[20]:
    """
    @notice Get the parameters of the pool
    @param _pool address of the pool
    @return parameters of the pool
    """
    stableswap_pool_params: uint256[20] = empty(uint256[20])
    stableswap_pool_params[0] = self.base_registry.get_A(_pool)
    return stableswap_pool_params


@external
@view
def get_underlying_balances(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    """
    @notice Get the underlying balances of the pool
    @param _pool address of the pool
    @return underlying balances of the pool
    """
    if not self.base_registry.is_meta(_pool):
        return self._pad_uint_dynarray(self.base_registry.get_balances(_pool))
    return self._get_meta_underlying_balances(_pool)


@external
@view
def get_underlying_coins(_pool: address) -> address[MAX_METAREGISTRY_COINS]:
    """
    @notice Get the underlying coins of the pool
    @param _pool address of the pool
    @return underlying coins of the pool
    """
    if not self.base_registry.is_meta(_pool):
        return self._get_coins(_pool)
    return self._get_underlying_coins(_pool)


@external
@view
def get_underlying_decimals(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    """
    @notice Get the underlying decimals of the pool
    @dev If it is a metapool, method uses the base registry. Else it uses a
         custom getter. This is because the base registry cannot unpack decimals
         (stored as a bitmap) if there is no metapool. So it returns the decimals of
         only the first coin.
    @param _pool Address of the pool
    @return underlying decimals of the pool
    """
    if not self.base_registry.is_meta(_pool):
        return self._pad_uint_dynarray(self.base_registry.get_decimals(_pool))
    return self._pad_uint_dynarray(self.base_registry.get_underlying_decimals(_pool))


@external
@view
def is_meta(_pool: address) -> bool:
    """
    @notice Check if the pool is a metapool
    @param _pool address of the pool
    @return True if the pool is a metapool
    """
    return self.base_registry.is_meta(_pool)


@external
@view
def is_registered(_pool: address) -> bool:
    """
    @notice Check if a pool belongs to the registry using get_n_coins
    @param _pool The address of the pool
    @return A bool corresponding to whether the pool belongs or not
    """
    return self.base_registry.get_n_coins(_pool) > 0


@external
@view
def pool_count() -> uint256:
    """
    @notice Get the number of pools in the registry
    @return number of pools in the registry
    """
    return self.base_registry.pool_count()


@external
@view
def pool_list(_index: uint256) -> address:
    """
    @notice Get the address of the pool at the given index
    @param _index The index of the pool
    @return The address of the pool
    """
    return self.base_registry.pool_list(_index)

Contract Security Audit

Contract ABI

API
[{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_registry_address","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"find_pool_for_coins","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"find_pool_for_coins","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"i","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_admin_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_base_pool","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_coin_indices","inputs":[{"name":"_pool","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"outputs":[{"name":"","type":"int128"},{"name":"","type":"int128"},{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"get_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[8]"}]},{"stateMutability":"view","type":"function","name":"get_decimals","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_fees","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[10]"}]},{"stateMutability":"view","type":"function","name":"get_virtual_price_from_lp_token","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_lp_token","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_n_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_n_underlying_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_pool_asset_type","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_pool_from_lp_token","inputs":[{"name":"_lp_token","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_pool_name","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"get_pool_params","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[20]"}]},{"stateMutability":"view","type":"function","name":"get_underlying_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_underlying_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[8]"}]},{"stateMutability":"view","type":"function","name":"get_underlying_decimals","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"is_meta","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"is_registered","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"pool_count","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"pool_list","inputs":[{"name":"_index","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"base_registry","inputs":[],"outputs":[{"name":"","type":"address"}]}]

34610032576020611a736000396000518060a01c61003257604052604051600055611a2761003761000039611a27610000f35b600080fd60003560e01c60026018820660011b6119f701601e39600051565b6354fd4d50811861009957346119f25760208060805260056040527f312e312e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b63c11e45b8811861121f576024361034176119f2576004358060a01c6119f25760405260005463940494f160805260405160a052602060806024609c845afa6100e7573d600060003e3d6000fd5b60203d106119f25760809050516060526101003660803760006008905b8061018052606051610180511861011a57610176565b60405163e2e7d2646101a052610180516101c05260206101a060246101bc845afa61014a573d600060003e3d6000fd5b60203d106119f2576101a090505161018051600781116119f25760051b60800152600101818118610104575b50506101006080f361121f565b63b229777c811861121f57346119f25760005460405260206040f361121f565b63a87df06c811861121f576044361034176119f25760006080526101e25661121f565b636982eb0b8118610256576064361034176119f2576044356080525b6004358060a01c6119f2576040526024358060a01c6119f2576060526020600054636982eb0b60a05260405160c05260605160e05260805161010052602060a0606460bc845afa610238573d600060003e3d6000fd5b60203d106119f25760a0518060a01c6119f257610120526101209050f35b63bdf475c3811861121f576024361034176119f2576004358060a01c6119f25760405260005463940494f1606052604051608052602060606024607c845afa6102a4573d600060003e3d6000fd5b60203d106119f2576060905051156102bf57602060406102c9565b6000606052602060605bf361121f565b6392e3cc2d8118610382576024361034176119f2576004358060a01c6119f2576102a0526101006000546392e3cc2d6102c0526102a0516102e0526101406102c060246102dc845afa610327573d600060003e3d6000fd5b60403d106119f2576102c0516102c00160088151116119f257805160208160051b0180610420828560045afa505050506104209050805160208160051b01806040828560045afa5050505061037d61054061191f565b610540f35b63eb85226d811861121f576064361034176119f2576004358060a01c6119f2576040526024358060a01c6119f2576060526044358060a01c6119f25760805260603660a03760005463eb85226d610100526040516101205260605161014052608051610160526040610100606461011c845afa610404573d600060003e3d6000fd5b60403d106119f2576101005180600f0b81186119f257610180526101205180600f0b81186119f2576101a0526101809050805160a052602081015160c0525060005463e4d332a961010052604051610120526020610100602461011c845afa610472573d600060003e3d6000fd5b60203d106119f257610100518060011c6119f257610140526101409050511561056957600054639ac90d3d610180526040516101a052610140610180602461019c845afa6104c5573d600060003e3d6000fd5b60403d106119f257610180516101800160088151116119f2578051600081600881116119f257801561051957905b8060051b6020850101518060a01c6119f2578160051b61030001526001018181186104f3575b5050806102e05250506102e0905060028151106119f257600160051b6020820101905051610160526101605160605181146105595760805181141561055c565b60005b90501561056957600160e0525b60a0516101005260c0516101205260e051610140526060610100f361121f565b636f20d6dd811861121f576024361034176119f2576004358060a01c6119f2576040526020600054636f20d6dd606052604051608052602060606024607c845afa6105d9573d600060003e3d6000fd5b60203d106119f2576060518060a01c6119f25760a05260a09050f361121f565b639ac90d3d8118610637576024361034176119f2576004358060a01c6119f25761040052610100610400516040526106326104206113d6565b610420f35b6352b51555811861121f576024361034176119f2576004358060a01c6119f2576102a0526101006000546352b515556102c0526102a0516102e0526101406102c060246102dc845afa61068f573d600060003e3d6000fd5b60403d106119f2576102c0516102c00160088151116119f257805160208160051b0180610420828560045afa505050506104209050805160208160051b01806040828560045afa505050506106e561054061191f565b610540f361121f565b637cdb72b0811861121f576024361034176119f2576004358060a01c6119f2576040526101403660603760405163ddca3f436101a05260206101a060046101bc845afa610740573d600060003e3d6000fd5b60203d106119f2576101a090505160605260405163fee3f7f96101a05260206101a060046101bc845afa610779573d600060003e3d6000fd5b60203d106119f2576101a0905051608052604051638edfdd5f6101a05260206101a060046101bc845afa6107b2573d600060003e3d6000fd5b60203d106119f2576101a090505160a0526101406060f361121f565b63c5b7074a811861121f576024361034176119f2576004358060a01c6119f257604052602060405163bb7b8b80606052602060606004607c845afa610818573d600060003e3d6000fd5b60203d106119f25760609050f361121f565b63379510498118610853576024361034176119f2576004358060a01c6119f25760405260206040f35b634cb088f1811861121f576024361034176119f2576004358060a01c6119f2576102a05260005463e4d332a96102c0526102a0516102e05260206102c060246102dc845afa6108a7573d600060003e3d6000fd5b60203d106119f2576102c0518060011c6119f2576103005261030090505161095b576101006000546352b51555610320526102a05161034052610140610320602461033c845afa6108fd573d600060003e3d6000fd5b60403d106119f257610320516103200160088151116119f257805160208160051b0180610480828560045afa505050506104809050805160208160051b01806040828560045afa505050506109536105a061191f565b6105a06109e9565b610100600054634cb088f16102c0526102a0516102e0526101406102c060246102dc845afa61098f573d600060003e3d6000fd5b60403d106119f2576102c0516102c00160088151116119f257805160208160051b0180610420828560045afa505050506104209050805160208160051b01806040828560045afa505050506109e561054061191f565b6105405bf361121f565b63940494f18118610a4d576024361034176119f2576004358060a01c6119f257604052602060005463940494f1606052604051608052602060606024607c845afa610a3f573d600060003e3d6000fd5b60203d106119f25760609050f35b635c9117418118610b8c576024361034176119f2576004358060a01c6119f25760405260005463940494f1606052604051608052602060606024607c845afa610a9b573d600060003e3d6000fd5b60203d106119f2576060905051610af05760208060c052600060a05260a08160c001600081528051806020830101601f82600003163682375050601f19601f82516020010116905090508101905060c0610b8a565b602080610160526040516306fdde03606052608060606004607c845afa610b1c573d600060003e3d6000fd5b60403d106119f25760605160600160408151116119f257602081510180610100828460045afa5050506101009050816101600160208251018082828560045afa50508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506101605bf35b63e4d332a9811861121f576024361034176119f2576004358060a01c6119f257604052602060005463e4d332a9606052604051608052602060606024607c845afa610bdc573d600060003e3d6000fd5b60203d106119f2576060518060011c6119f25760a05260a09050f361121f565b630a700c08811861121f576024361034176119f2576004358060a01c6119f2576104005261040051604052610c326105206113d6565b6105206101006104206101008360045afa50506040366105203760006008905b806105605261056051600781116119f25760051b6104200151610c7457610e54565b600054636f20d6dd6105805261056051600781116119f25760051b61042001516105a0526020610580602461059c845afa610cb4573d600060003e3d6000fd5b60203d106119f257610580518060a01c6119f2576105c0526105c09050516105205261052051610cf95761056051600781116119f25760051b61042001511515610cfc565b60005b610e33576105405160005463ed87494061058052610520516105a052610300610580602461059c845afa610d35573d600060003e3d6000fd5b6101003d106119f257610580516105800180518060a01c6119f2576108a0526020810151810160088151116119f2578051600081600881116119f2578015610d9f57905b8060051b6020850101518060a01c6119f2578160051b6108e00152600101818118610d79575b5050806108c052505060408101516109e0526060810151610a00526080810151810160088151116119f2578051600081600881116119f2578015610e0557905b8060051b6020850101518060081c6119f2578160051b610a400152600101818118610ddf575b505080610a20525050506108a0905061016081019050518082018281106119f2579050905061054052610e49565b61054051600181018181106119f2579050610540525b600101818118610c52575b50506020610540f361121f565b6366d3966c811861121f576024361034176119f2576004358060a01c6119f25760405260206000546366d3966c606052604051608052602060606024607c845afa610eb1573d600060003e3d6000fd5b60203d106119f25760609050f361121f565b63688532aa8118610f34576024361034176119f2576004358060a01c6119f257604052610280366060376000546355b30b196102e0526040516103005260206102e060246102fc845afa610f1c573d600060003e3d6000fd5b60203d106119f2576102e09050516060526102806060f35b63956aae3a811861121f57346119f257602060005463956aae3a604052602060406004605c845afa610f6b573d600060003e3d6000fd5b60203d106119f25760409050f361121f565b6359f4f351811861121f576024361034176119f2576004358060a01c6119f2576107c05260005463e4d332a96107e0526107c0516108005260206107e060246107fc845afa610fd1573d600060003e3d6000fd5b60203d106119f2576107e0518060011c6119f25761082052610820905051611085576101006000546392e3cc2d610840526107c05161086052610140610840602461085c845afa611027573d600060003e3d6000fd5b60403d106119f257610840516108400160088151116119f257805160208160051b01806109a0828560045afa505050506109a09050805160208160051b01806040828560045afa5050505061107d610ac061191f565b610ac061109f565b6101006107c0516104005261109b6107e06115fe565b6107e05bf361121f565b63a77576ef811861121f576024361034176119f2576004358060a01c6119f2576104005260005463e4d332a96104205261040051610440526020610420602461043c845afa6110f9573d600060003e3d6000fd5b60203d106119f257610420518060011c6119f2576104605261046090505161113857610100610400516040526111306104806113d6565b610480611151565b6101006104005160405261114d6104206114ea565b6104205bf361121f565b63619ea806811861121f576024361034176119f2576004358060a01c6119f25760405260005463940494f1606052604051608052602060606024607c845afa6111a5573d600060003e3d6000fd5b60203d106119f2576060905051151560a052602060a0f361121f565b633a1d5d8e811861121f576024361034176119f2576020600054633a1d5d8e604052600435606052602060406024605c845afa611203573d600060003e3d6000fd5b60203d106119f2576040518060a01c6119f25760805260809050f35b60006000fd611233573d600060003e3d6000fd5b60203d106119f257606090505161271081116119f25780156113cc57905b8060a0526000546322fe567160e05260a05161010052602060e0602460fc845afa611281573d600060003e3d6000fd5b60203d106119f25760e0518060a01c6119f2576101205261012090505160c05260405160005463ed87494060e05260c0516101005261030060e0602460fc845afa6112d1573d600060003e3d6000fd5b6101003d106119f25760e05160e00180518060a01c6119f257610400526020810151810160088151116119f2578051600081600881116119f257801561133957905b8060051b6020850101518060a01c6119f2578160051b6104400152600101818118611313575b5050806104205250506040810151610540526060810151610560526080810151810160088151116119f2578051600081600881116119f257801561139f57905b8060051b6020850101518060081c6119f2578160051b6105a00152600101818118611379575b50508061058052505050610400905051186113c15760c05183525050506113d4565b600101818118611251575b505060008152505b565b600054639ac90d3d610180526040516101a052610140610180602461019c845afa611406573d600060003e3d6000fd5b60403d106119f257610180516101800160088151116119f2578051600081600881116119f257801561145a57905b8060051b6020850101518060a01c6119f2578160051b6103000152600101818118611434575b5050806102e05250506102e09050805160208160051b01806060828560045afa50505050610100366101803760006008905b806102805260605161028051186114a2576114d6565b610280516060518110156119f25760051b6080015161028051600781116119f25760051b610180015260010181811861148c575b50506101008161010061018060045afa5050565b60005463a77576ef610180526040516101a052610140610180602461019c845afa61151a573d600060003e3d6000fd5b60403d106119f257610180516101800160088151116119f2578051600081600881116119f257801561156e57905b8060051b6020850101518060a01c6119f2578160051b6103000152600101818118611548575b5050806102e05250506102e09050805160208160051b01806060828560045afa50505050610100366101803760006008905b806102805260605161028051186115b6576115ea565b610280516060518110156119f25760051b6080015161028051600781116119f25760051b61018001526001018181186115a0575b50506101008161010061018060045afa5050565b60005463940494f16104405261040051610460526020610440602461045c845afa61162e573d600060003e3d6000fd5b60203d106119f257610440905051600181038181116119f257905061042052600054636f20d6dd6104605261040051610480526020610460602461047c845afa61167d573d600060003e3d6000fd5b60203d106119f257610460518060a01c6119f2576104a0526104a0905051610440526104005163c66106576104805260016104a0526020610480602461049c845afa6116ce573d600060003e3d6000fd5b60203d106119f257610480518060a01c6119f2576104c0526104c09050516318160ddd6104e05260206104e060046104fc845afa611711573d600060003e3d6000fd5b60203d106119f2576104e0905051610460526040366104803761046051156117b45761040051634903b0d16104c052610420516104e05260206104c060246104dc845afa611764573d600060003e3d6000fd5b60203d106119f2576104c09050516ec097ce7bc90715b34b9f10000000008102816ec097ce7bc90715b34b9f10000000008204186119f25790506104605180156119f257808204905090506104a0525b610100366104c037610400516040526117ce6106c06114ea565b6106c06101006105c06101008360045afa505060006008905b806106c0526106c051600781116119f25760051b6105c001516118095761190b565b610420516106c051106118a45761044051634903b0d16106e0526106c051610420518082038281116119f257905090506107005260206106e060246106fc845afa611859573d600060003e3d6000fd5b60203d106119f2576106e090505161048052610480516104a0518082028115838383041417156119f257905090506ec097ce7bc90715b34b9f100000000081049050610480526118e8565b61040051634903b0d16106e0526106c0516107005260206106e060246106fc845afa6118d5573d600060003e3d6000fd5b60203d106119f2576106e0905051610480525b610480516106c051600781116119f25760051b6104c001526001018181186117e7575b5050610100816101006104c060045afa5050565b61010036610160376040516102605260006008905b806102805261026051610280511861194b5761197f565b610280516040518110156119f25760051b6060015161028051600781116119f25760051b6101600152600101818118611934575b50506101008161010061016060045afa5050565b80610280526102605161028051186119aa576119de565b610280516040518110156119f25760051b6060015161028051600781116119f25760051b6101600152600101818118611993575b50506101008161010061016060045afa5050565b600080fd06ee09ef07ce121f0e6105891157121f001a0f7d0ec3121f018302cf121f121f0bfc082a121f01c601a305f911c110a584191a2781183000a16576797065728300030a00150000000000000000000000007c2085419be6a04f4ad88ea91bc9f5c6e6c463d8

Deployed Bytecode

0x60003560e01c60026018820660011b6119f701601e39600051565b6354fd4d50811861009957346119f25760208060805260056040527f312e312e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b63c11e45b8811861121f576024361034176119f2576004358060a01c6119f25760405260005463940494f160805260405160a052602060806024609c845afa6100e7573d600060003e3d6000fd5b60203d106119f25760809050516060526101003660803760006008905b8061018052606051610180511861011a57610176565b60405163e2e7d2646101a052610180516101c05260206101a060246101bc845afa61014a573d600060003e3d6000fd5b60203d106119f2576101a090505161018051600781116119f25760051b60800152600101818118610104575b50506101006080f361121f565b63b229777c811861121f57346119f25760005460405260206040f361121f565b63a87df06c811861121f576044361034176119f25760006080526101e25661121f565b636982eb0b8118610256576064361034176119f2576044356080525b6004358060a01c6119f2576040526024358060a01c6119f2576060526020600054636982eb0b60a05260405160c05260605160e05260805161010052602060a0606460bc845afa610238573d600060003e3d6000fd5b60203d106119f25760a0518060a01c6119f257610120526101209050f35b63bdf475c3811861121f576024361034176119f2576004358060a01c6119f25760405260005463940494f1606052604051608052602060606024607c845afa6102a4573d600060003e3d6000fd5b60203d106119f2576060905051156102bf57602060406102c9565b6000606052602060605bf361121f565b6392e3cc2d8118610382576024361034176119f2576004358060a01c6119f2576102a0526101006000546392e3cc2d6102c0526102a0516102e0526101406102c060246102dc845afa610327573d600060003e3d6000fd5b60403d106119f2576102c0516102c00160088151116119f257805160208160051b0180610420828560045afa505050506104209050805160208160051b01806040828560045afa5050505061037d61054061191f565b610540f35b63eb85226d811861121f576064361034176119f2576004358060a01c6119f2576040526024358060a01c6119f2576060526044358060a01c6119f25760805260603660a03760005463eb85226d610100526040516101205260605161014052608051610160526040610100606461011c845afa610404573d600060003e3d6000fd5b60403d106119f2576101005180600f0b81186119f257610180526101205180600f0b81186119f2576101a0526101809050805160a052602081015160c0525060005463e4d332a961010052604051610120526020610100602461011c845afa610472573d600060003e3d6000fd5b60203d106119f257610100518060011c6119f257610140526101409050511561056957600054639ac90d3d610180526040516101a052610140610180602461019c845afa6104c5573d600060003e3d6000fd5b60403d106119f257610180516101800160088151116119f2578051600081600881116119f257801561051957905b8060051b6020850101518060a01c6119f2578160051b61030001526001018181186104f3575b5050806102e05250506102e0905060028151106119f257600160051b6020820101905051610160526101605160605181146105595760805181141561055c565b60005b90501561056957600160e0525b60a0516101005260c0516101205260e051610140526060610100f361121f565b636f20d6dd811861121f576024361034176119f2576004358060a01c6119f2576040526020600054636f20d6dd606052604051608052602060606024607c845afa6105d9573d600060003e3d6000fd5b60203d106119f2576060518060a01c6119f25760a05260a09050f361121f565b639ac90d3d8118610637576024361034176119f2576004358060a01c6119f25761040052610100610400516040526106326104206113d6565b610420f35b6352b51555811861121f576024361034176119f2576004358060a01c6119f2576102a0526101006000546352b515556102c0526102a0516102e0526101406102c060246102dc845afa61068f573d600060003e3d6000fd5b60403d106119f2576102c0516102c00160088151116119f257805160208160051b0180610420828560045afa505050506104209050805160208160051b01806040828560045afa505050506106e561054061191f565b610540f361121f565b637cdb72b0811861121f576024361034176119f2576004358060a01c6119f2576040526101403660603760405163ddca3f436101a05260206101a060046101bc845afa610740573d600060003e3d6000fd5b60203d106119f2576101a090505160605260405163fee3f7f96101a05260206101a060046101bc845afa610779573d600060003e3d6000fd5b60203d106119f2576101a0905051608052604051638edfdd5f6101a05260206101a060046101bc845afa6107b2573d600060003e3d6000fd5b60203d106119f2576101a090505160a0526101406060f361121f565b63c5b7074a811861121f576024361034176119f2576004358060a01c6119f257604052602060405163bb7b8b80606052602060606004607c845afa610818573d600060003e3d6000fd5b60203d106119f25760609050f361121f565b63379510498118610853576024361034176119f2576004358060a01c6119f25760405260206040f35b634cb088f1811861121f576024361034176119f2576004358060a01c6119f2576102a05260005463e4d332a96102c0526102a0516102e05260206102c060246102dc845afa6108a7573d600060003e3d6000fd5b60203d106119f2576102c0518060011c6119f2576103005261030090505161095b576101006000546352b51555610320526102a05161034052610140610320602461033c845afa6108fd573d600060003e3d6000fd5b60403d106119f257610320516103200160088151116119f257805160208160051b0180610480828560045afa505050506104809050805160208160051b01806040828560045afa505050506109536105a061191f565b6105a06109e9565b610100600054634cb088f16102c0526102a0516102e0526101406102c060246102dc845afa61098f573d600060003e3d6000fd5b60403d106119f2576102c0516102c00160088151116119f257805160208160051b0180610420828560045afa505050506104209050805160208160051b01806040828560045afa505050506109e561054061191f565b6105405bf361121f565b63940494f18118610a4d576024361034176119f2576004358060a01c6119f257604052602060005463940494f1606052604051608052602060606024607c845afa610a3f573d600060003e3d6000fd5b60203d106119f25760609050f35b635c9117418118610b8c576024361034176119f2576004358060a01c6119f25760405260005463940494f1606052604051608052602060606024607c845afa610a9b573d600060003e3d6000fd5b60203d106119f2576060905051610af05760208060c052600060a05260a08160c001600081528051806020830101601f82600003163682375050601f19601f82516020010116905090508101905060c0610b8a565b602080610160526040516306fdde03606052608060606004607c845afa610b1c573d600060003e3d6000fd5b60403d106119f25760605160600160408151116119f257602081510180610100828460045afa5050506101009050816101600160208251018082828560045afa50508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506101605bf35b63e4d332a9811861121f576024361034176119f2576004358060a01c6119f257604052602060005463e4d332a9606052604051608052602060606024607c845afa610bdc573d600060003e3d6000fd5b60203d106119f2576060518060011c6119f25760a05260a09050f361121f565b630a700c08811861121f576024361034176119f2576004358060a01c6119f2576104005261040051604052610c326105206113d6565b6105206101006104206101008360045afa50506040366105203760006008905b806105605261056051600781116119f25760051b6104200151610c7457610e54565b600054636f20d6dd6105805261056051600781116119f25760051b61042001516105a0526020610580602461059c845afa610cb4573d600060003e3d6000fd5b60203d106119f257610580518060a01c6119f2576105c0526105c09050516105205261052051610cf95761056051600781116119f25760051b61042001511515610cfc565b60005b610e33576105405160005463ed87494061058052610520516105a052610300610580602461059c845afa610d35573d600060003e3d6000fd5b6101003d106119f257610580516105800180518060a01c6119f2576108a0526020810151810160088151116119f2578051600081600881116119f2578015610d9f57905b8060051b6020850101518060a01c6119f2578160051b6108e00152600101818118610d79575b5050806108c052505060408101516109e0526060810151610a00526080810151810160088151116119f2578051600081600881116119f2578015610e0557905b8060051b6020850101518060081c6119f2578160051b610a400152600101818118610ddf575b505080610a20525050506108a0905061016081019050518082018281106119f2579050905061054052610e49565b61054051600181018181106119f2579050610540525b600101818118610c52575b50506020610540f361121f565b6366d3966c811861121f576024361034176119f2576004358060a01c6119f25760405260206000546366d3966c606052604051608052602060606024607c845afa610eb1573d600060003e3d6000fd5b60203d106119f25760609050f361121f565b63688532aa8118610f34576024361034176119f2576004358060a01c6119f257604052610280366060376000546355b30b196102e0526040516103005260206102e060246102fc845afa610f1c573d600060003e3d6000fd5b60203d106119f2576102e09050516060526102806060f35b63956aae3a811861121f57346119f257602060005463956aae3a604052602060406004605c845afa610f6b573d600060003e3d6000fd5b60203d106119f25760409050f361121f565b6359f4f351811861121f576024361034176119f2576004358060a01c6119f2576107c05260005463e4d332a96107e0526107c0516108005260206107e060246107fc845afa610fd1573d600060003e3d6000fd5b60203d106119f2576107e0518060011c6119f25761082052610820905051611085576101006000546392e3cc2d610840526107c05161086052610140610840602461085c845afa611027573d600060003e3d6000fd5b60403d106119f257610840516108400160088151116119f257805160208160051b01806109a0828560045afa505050506109a09050805160208160051b01806040828560045afa5050505061107d610ac061191f565b610ac061109f565b6101006107c0516104005261109b6107e06115fe565b6107e05bf361121f565b63a77576ef811861121f576024361034176119f2576004358060a01c6119f2576104005260005463e4d332a96104205261040051610440526020610420602461043c845afa6110f9573d600060003e3d6000fd5b60203d106119f257610420518060011c6119f2576104605261046090505161113857610100610400516040526111306104806113d6565b610480611151565b6101006104005160405261114d6104206114ea565b6104205bf361121f565b63619ea806811861121f576024361034176119f2576004358060a01c6119f25760405260005463940494f1606052604051608052602060606024607c845afa6111a5573d600060003e3d6000fd5b60203d106119f2576060905051151560a052602060a0f361121f565b633a1d5d8e811861121f576024361034176119f2576020600054633a1d5d8e604052600435606052602060406024605c845afa611203573d600060003e3d6000fd5b60203d106119f2576040518060a01c6119f25760805260809050f35b60006000fd611233573d600060003e3d6000fd5b60203d106119f257606090505161271081116119f25780156113cc57905b8060a0526000546322fe567160e05260a05161010052602060e0602460fc845afa611281573d600060003e3d6000fd5b60203d106119f25760e0518060a01c6119f2576101205261012090505160c05260405160005463ed87494060e05260c0516101005261030060e0602460fc845afa6112d1573d600060003e3d6000fd5b6101003d106119f25760e05160e00180518060a01c6119f257610400526020810151810160088151116119f2578051600081600881116119f257801561133957905b8060051b6020850101518060a01c6119f2578160051b6104400152600101818118611313575b5050806104205250506040810151610540526060810151610560526080810151810160088151116119f2578051600081600881116119f257801561139f57905b8060051b6020850101518060081c6119f2578160051b6105a00152600101818118611379575b50508061058052505050610400905051186113c15760c05183525050506113d4565b600101818118611251575b505060008152505b565b600054639ac90d3d610180526040516101a052610140610180602461019c845afa611406573d600060003e3d6000fd5b60403d106119f257610180516101800160088151116119f2578051600081600881116119f257801561145a57905b8060051b6020850101518060a01c6119f2578160051b6103000152600101818118611434575b5050806102e05250506102e09050805160208160051b01806060828560045afa50505050610100366101803760006008905b806102805260605161028051186114a2576114d6565b610280516060518110156119f25760051b6080015161028051600781116119f25760051b610180015260010181811861148c575b50506101008161010061018060045afa5050565b60005463a77576ef610180526040516101a052610140610180602461019c845afa61151a573d600060003e3d6000fd5b60403d106119f257610180516101800160088151116119f2578051600081600881116119f257801561156e57905b8060051b6020850101518060a01c6119f2578160051b6103000152600101818118611548575b5050806102e05250506102e09050805160208160051b01806060828560045afa50505050610100366101803760006008905b806102805260605161028051186115b6576115ea565b610280516060518110156119f25760051b6080015161028051600781116119f25760051b61018001526001018181186115a0575b50506101008161010061018060045afa5050565b60005463940494f16104405261040051610460526020610440602461045c845afa61162e573d600060003e3d6000fd5b60203d106119f257610440905051600181038181116119f257905061042052600054636f20d6dd6104605261040051610480526020610460602461047c845afa61167d573d600060003e3d6000fd5b60203d106119f257610460518060a01c6119f2576104a0526104a0905051610440526104005163c66106576104805260016104a0526020610480602461049c845afa6116ce573d600060003e3d6000fd5b60203d106119f257610480518060a01c6119f2576104c0526104c09050516318160ddd6104e05260206104e060046104fc845afa611711573d600060003e3d6000fd5b60203d106119f2576104e0905051610460526040366104803761046051156117b45761040051634903b0d16104c052610420516104e05260206104c060246104dc845afa611764573d600060003e3d6000fd5b60203d106119f2576104c09050516ec097ce7bc90715b34b9f10000000008102816ec097ce7bc90715b34b9f10000000008204186119f25790506104605180156119f257808204905090506104a0525b610100366104c037610400516040526117ce6106c06114ea565b6106c06101006105c06101008360045afa505060006008905b806106c0526106c051600781116119f25760051b6105c001516118095761190b565b610420516106c051106118a45761044051634903b0d16106e0526106c051610420518082038281116119f257905090506107005260206106e060246106fc845afa611859573d600060003e3d6000fd5b60203d106119f2576106e090505161048052610480516104a0518082028115838383041417156119f257905090506ec097ce7bc90715b34b9f100000000081049050610480526118e8565b61040051634903b0d16106e0526106c0516107005260206106e060246106fc845afa6118d5573d600060003e3d6000fd5b60203d106119f2576106e0905051610480525b610480516106c051600781116119f25760051b6104c001526001018181186117e7575b5050610100816101006104c060045afa5050565b61010036610160376040516102605260006008905b806102805261026051610280511861194b5761197f565b610280516040518110156119f25760051b6060015161028051600781116119f25760051b6101600152600101818118611934575b50506101008161010061016060045afa5050565b80610280526102605161028051186119aa576119de565b610280516040518110156119f25760051b6060015161028051600781116119f25760051b6101600152600101818118611993575b50506101008161010061016060045afa5050565b600080fd06ee09ef07ce121f0e6105891157121f001a0f7d0ec3121f018302cf121f121f0bfc082a121f01c601a305f911c110a5

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007c2085419be6a04f4ad88ea91bc9f5c6e6c463d8

-----Decoded View---------------
Arg [0] : _registry_address (address): 0x7C2085419BE6a04f4ad88ea91bC9F5C6E6C463D8

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007c2085419be6a04f4ad88ea91bc9f5c6e6c463d8


Block Transaction Gas Used Reward
view all blocks ##produced##

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block 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.