ETH Price: $2,352.08 (-1.25%)

Contract

0x79286Dd38C9017E5423073bAc11F53357Fc5C128

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

Sponsored

Transaction Hash
Method
Block
From
To
Transfer Ownersh...272168102022-10-03 22:19:37731 days ago1664835577IN
Yearn: Vault Registry
0 ETH0.0000643502370.001
0x60a06040224511522022-09-09 2:34:14755 days ago1662690854IN
 Create: VaultRegistry
0 ETH0.001321936530.001

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
1075160692023-07-29 11:41:55432 days ago1690630915
Yearn: Vault Registry
0 ETH
1075160692023-07-29 11:41:55432 days ago1690630915
Yearn: Vault Registry
0 ETH
1075160692023-07-29 11:41:55432 days ago1690630915
Yearn: Vault Registry
0 ETH
1074421602023-07-27 18:38:17434 days ago1690483097
Yearn: Vault Registry
0 ETH
1074421602023-07-27 18:38:17434 days ago1690483097
Yearn: Vault Registry
0 ETH
1074421602023-07-27 18:38:17434 days ago1690483097
Yearn: Vault Registry
0 ETH
1074421602023-07-27 18:38:17434 days ago1690483097
Yearn: Vault Registry
0 ETH
1074421602023-07-27 18:38:17434 days ago1690483097
Yearn: Vault Registry
0 ETH
1074421602023-07-27 18:38:17434 days ago1690483097
Yearn: Vault Registry
0 ETH
1074421602023-07-27 18:38:17434 days ago1690483097
Yearn: Vault Registry
0 ETH
1074421602023-07-27 18:38:17434 days ago1690483097
Yearn: Vault Registry
0 ETH
1074421602023-07-27 18:38:17434 days ago1690483097
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
1067830322023-07-12 12:27:21449 days ago1689164841
Yearn: Vault Registry
0 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VaultRegistry

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at optimistic.etherscan.io on 2022-09-09
*/

// File: github/pandadefi/registry/contracts/IVault.sol


pragma solidity ^0.8.15;

interface IVault {
    function token() external view returns (address);

    function apiVersion() external view returns (string memory);

    function governance() external view returns (address);

    function initialize(
        address _token,
        address _governance,
        address _rewards,
        string calldata _name,
        string calldata _symbol,
        address _guardian
    ) external;
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: github/pandadefi/registry/contracts/VaultRegistry.sol


pragma solidity ^0.8.15;



interface IReleaseRegistry {
    function numReleases() external view returns (uint256);

    function releases(uint256 _version) external view returns (address);

    function newVault(
        address _token,
        address _governance,
        address _guardian,
        address _rewards,
        string calldata _name,
        string calldata _symbol,
        uint256 _releaseDelta
    ) external returns (address);
}

contract VaultRegistry is Ownable {
    uint256 constant DEFAULT_TYPE = 1;
    address immutable LEGACY_REGISTRY;

    address public releaseRegistry;
    // token => vaults
    mapping(address => address[]) public vaults;
    address[] public tokens;
    mapping(address => bool) public isRegistered;
    mapping(address => uint256) public vaultType;
    mapping(address => bool) public approvedVaultsOwner;
    mapping(address => bool) public isVaultEndorsed;
    mapping(address => bool) public vaultEndorsers;

    event NewVault(
        address indexed token,
        uint256 indexed vaultId,
        uint256 vaultType,
        address vault,
        string apiVersion
    );

    event ApprovedVaultOwnerUpdated(address governance, bool approved);

    event ApprovedVaultEndorser(address account, bool canEndorse);
    event ReleaseRegistryUpdated(address newRegistry);

    error GovernanceMismatch(address vault);
    error NotAllowedToEndorse();
    error VersionMissmatch(string v1, string v2);
    error EndorseVaultWithSameVersion(address existingVault, address newVault);
    error VaultAlreadyEndorsed(address vault, uint256 vaultType);
    error InvalidVaultType();

    constructor(address _releaseRegistry, address _legacyRegistry) {
        releaseRegistry = _releaseRegistry;
        LEGACY_REGISTRY = _legacyRegistry;
        emit ReleaseRegistryUpdated(_releaseRegistry);
    }

    function numTokens() external view returns (uint256) {
        return tokens.length;
    }

    function numVaults(address _token) external view returns (uint256) {
        return _numVaults(_token);
    }

    function _numVaults(address _token) internal view returns (uint256) {
        return vaults[_token].length;
    }

    function _latestVault(address _token) internal view returns (address) {
        uint256 length = _numVaults(_token);
        if (length == 0) {
            return _fetchFromLegacy(_token);
        }
        return vaults[_token][length - 1];
    }

    function _latestVaultOfType(address _token, uint256 _type)
        internal
        view
        returns (address)
    {
        uint256 length = _numVaults(_token);
        if (length == 0) {
            return address(0);
        }
        uint256 i = length - 1;
        while (true) {
            address vault = vaults[_token][i];
            if (vaultType[vault] == _type) {
                return vault;
            }
            if (i == 0) {
                break;
            }
            unchecked {
                i--;
            }
        }
        return address(0);
    }

    function _fetchFromLegacy(address _token) internal view returns (address) {
        bytes memory data = abi.encodeWithSignature(
            "latestVault(address)",
            _token
        );
        (bool success, bytes memory returnBytes) = address(LEGACY_REGISTRY)
            .staticcall(data);
        if (success) {
            return abi.decode(returnBytes, (address));
        }
        return address(0);
    }

    /**
     @notice Returns the latest deployed vault for the given token.
     @dev Return zero if no vault is associated with the token
     @param _token The token address to find the latest vault for.
     @return The address of the latest vault for the given token.
     */
    function latestVault(address _token) external view returns (address) {
        return _latestVault(_token);
    }

    /**
     @notice Returns the latest deployed vault for the given token and type.
     @dev Return zero if no vault exists for both token and type.
     @param _token The token address to find the latest vault for.
     @param _type The vault type to find the latest vault for.
     @return The address of the latest vault found matching both token and type.
     */
    function latestVaultOfType(address _token, uint256 _type)
        external
        view
        returns (address)
    {
        return _latestVaultOfType(_token, _type);
    }

    function _registerVault(
        address _token,
        address _vault,
        uint256 _type
    ) internal {
        // Check if there is an existing deployment for this token + type combination at the particular api version
        // NOTE: This doesn't check for strict semver-style linearly increasing release versions
        if (vaultType[_vault] != 0) {
            revert VaultAlreadyEndorsed(_vault, vaultType[_vault]);
        }

        if (_type == 0) {
            revert InvalidVaultType();
        }

        address latest = _latestVaultOfType(_token, _type);
        if (latest != address(0)) {
            if (
                keccak256(bytes(IVault(latest).apiVersion())) ==
                keccak256(bytes(IVault(_vault).apiVersion()))
            ) {
                revert EndorseVaultWithSameVersion(latest, _vault);
            }
        }
        uint256 id = _numVaults(_token);
        // Update the latest deployment
        vaults[_token].push(_vault);
        vaultType[_vault] = _type;

        // Register tokens for endorsed vaults
        if (isRegistered[_token] == false) {
            isRegistered[_token] = true;
            tokens.push(_token);
        }
        isVaultEndorsed[_vault] = true;
        emit NewVault(_token, id, _type, _vault, IVault(_vault).apiVersion());
    }

    /**
     @notice
         Adds an existing vault to the list of "endorsed" vaults for that token.
     @dev
         `governance` is set in the new vault as `governance`, with no ability to override.
         Throws if caller isn't `governance`.
         Throws if `vault`'s governance isn't `governance`.
         Throws if no releases are registered yet.
         Throws if `vault`'s api version does not match latest release.
         Throws if there already is a deployment for the vault's token with the latest api version.
         Emits a `NewVault` event.
     @param _vault The vault that will be endorsed by the Registry.
     @param _releaseDelta Specify the number of releases prior to the latest to use as a target. DEFAULT_TYPE is latest.
     @param _type Vault type
    */
    function endorseVault(
        address _vault,
        uint256 _releaseDelta,
        uint256 _type
    ) public {
        if (vaultEndorsers[msg.sender] == false) {
            revert NotAllowedToEndorse();
        }

        if (approvedVaultsOwner[IVault(_vault).governance()] == false) {
            revert GovernanceMismatch(_vault);
        }

        // NOTE: Underflow if no releases created yet, or targeting prior to release history
        uint256 releaseTarget = IReleaseRegistry(releaseRegistry)
            .numReleases() -
            1 -
            _releaseDelta; // dev: no releases
        string memory apiVersion = IVault(
            IReleaseRegistry(releaseRegistry).releases(releaseTarget)
        ).apiVersion();
        if (
            keccak256(bytes((IVault(_vault).apiVersion()))) !=
            keccak256(bytes((apiVersion)))
        ) {
            revert VersionMissmatch(IVault(_vault).apiVersion(), apiVersion);
        }
        // Add to the end of the list of vaults for token
        _registerVault(IVault(_vault).token(), _vault, _type);
    }

    function endorseVault(address _vault, uint256 _releaseDelta) external {
        endorseVault(_vault, _releaseDelta, DEFAULT_TYPE);
    }

    function endorseVault(address _vault) external {
        endorseVault(_vault, 0, DEFAULT_TYPE);
    }

    function newVault(
        address _token,
        address _guardian,
        address _rewards,
        string calldata _name,
        string calldata _symbol,
        uint256 _releaseDelta
    ) external returns (address) {
        return
            newVault(
                _token,
                msg.sender,
                _guardian,
                _rewards,
                _name,
                _symbol,
                _releaseDelta,
                DEFAULT_TYPE
            );
    }

    /**
    @notice
        Create a new vault for the given token using the latest release in the registry,
        as a simple "forwarder-style" delegatecall proxy to the latest release.
    @dev
        `governance` is set in the new vault as `governance`, with no ability to override.
        Throws if caller isn't `governance`.
        Throws if no releases are registered yet.
        Throws if there already is a registered vault for the given token with the latest api version.
        Emits a `NewVault` event.
    @param _token The token that may be deposited into the new Vault.
    @param _guardian The address authorized for guardian interactions in the new Vault.
    @param _rewards The address to use for collecting rewards in the new Vault
    @param _name Specify a custom Vault name. Set to empty string for DEFAULT_TYPE choice.
    @param _symbol Specify a custom Vault symbol name. Set to empty string for DEFAULT_TYPE choice.
    @param _releaseDelta Specify the number of releases prior to the latest to use as a target. DEFAULT_TYPE is latest.
    @param _type Vault type
    @return The address of the newly-deployed vault
     */
    function newVault(
        address _token,
        address _governance,
        address _guardian,
        address _rewards,
        string calldata _name,
        string calldata _symbol,
        uint256 _releaseDelta,
        uint256 _type
    ) public returns (address) {
        require(vaultEndorsers[msg.sender], "unauthorized");
        require(approvedVaultsOwner[_governance], "not allowed vault owner");
        address vault = IReleaseRegistry(releaseRegistry).newVault(
            _token,
            _governance,
            _guardian,
            _rewards,
            _name,
            _symbol,
            _releaseDelta
        );
        _registerVault(_token, vault, _type);
        return vault;
    }

    /**
    @notice Set the ability of a particular tagger to tag current vaults.
    @dev Throws if caller is not `governance`.
    @param _addr The address to approve or deny access.
    @param _approved Allowed to endorse
     */
    function setVaultEndorsers(address _addr, bool _approved)
        external
        onlyOwner
    {
        vaultEndorsers[_addr] = _approved;
        emit ApprovedVaultEndorser(_addr, _approved);
    }

    /**
    @notice Set the vaults owners
    @dev Throws if caller is not `governance`.
    @param _addr The address to approve or deny access.
    @param _approved Allowed to own vault
     */
    function setApprovedVaultsOwner(address _addr, bool _approved)
        external
        onlyOwner
    {
        approvedVaultsOwner[_addr] = _approved;
        emit ApprovedVaultOwnerUpdated(_addr, _approved);
    }

    function updateReleaseRegistry(address _newRegistry) external onlyOwner {
        releaseRegistry = _newRegistry;
        emit ReleaseRegistryUpdated(_newRegistry);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_releaseRegistry","type":"address"},{"internalType":"address","name":"_legacyRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"existingVault","type":"address"},{"internalType":"address","name":"newVault","type":"address"}],"name":"EndorseVaultWithSameVersion","type":"error"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"GovernanceMismatch","type":"error"},{"inputs":[],"name":"InvalidVaultType","type":"error"},{"inputs":[],"name":"NotAllowedToEndorse","type":"error"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"vaultType","type":"uint256"}],"name":"VaultAlreadyEndorsed","type":"error"},{"inputs":[{"internalType":"string","name":"v1","type":"string"},{"internalType":"string","name":"v2","type":"string"}],"name":"VersionMissmatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"canEndorse","type":"bool"}],"name":"ApprovedVaultEndorser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"governance","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovedVaultOwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"vaultId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"vaultType","type":"uint256"},{"indexed":false,"internalType":"address","name":"vault","type":"address"},{"indexed":false,"internalType":"string","name":"apiVersion","type":"string"}],"name":"NewVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRegistry","type":"address"}],"name":"ReleaseRegistryUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedVaultsOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"endorseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_releaseDelta","type":"uint256"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"endorseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_releaseDelta","type":"uint256"}],"name":"endorseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isVaultEndorsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"latestVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"latestVaultOfType","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"address","name":"_rewards","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_releaseDelta","type":"uint256"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"newVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"address","name":"_rewards","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_releaseDelta","type":"uint256"}],"name":"newVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"numTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"numVaults","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovedVaultsOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setVaultEndorsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRegistry","type":"address"}],"name":"updateReleaseRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vaultEndorsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vaultType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"vaults","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60a06040523480156200001157600080fd5b50604051620018033803806200180383398101604081905262000034916200010c565b6200003f336200009f565b600180546001600160a01b0319166001600160a01b038481169182179092559082166080526040519081527f65104c4699f20a240a0ce199d616669f9518c0469b60b2a8c904f7cd4eb471fd9060200160405180910390a1505062000144565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200010757600080fd5b919050565b600080604083850312156200012057600080fd5b6200012b83620000ef565b91506200013b60208401620000ef565b90509250929050565b6080516116a362000160600039600061109f01526116a36000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80638e499bcf116100c3578063c3c5a5471161007c578063c3c5a547146102e6578063c9b8f05514610309578063dbf4246114610329578063e177dc701461033c578063f2fde38b1461034f578063f9c7bba51461036257600080fd5b80638e499bcf14610265578063931074ba146102775780639de312f01461028a578063a0dd0bcf1461029d578063b0b40fce146102c0578063b366a35c146102d357600080fd5b806351f69a6e1161011557806351f69a6e146101f05780636fc74f9e14610203578063715018a6146102265780637bbfc69e1461022e5780638cd473c2146102415780638da5cb5b1461025457600080fd5b8063125d43361461015257806319ee073e1461018257806329b2e0c6146101955780632b017c8b146101aa5780634f64b2be146101dd575b600080fd5b610165610160366004611191565b610375565b6040516001600160a01b0390911681526020015b60405180910390f35b600154610165906001600160a01b031681565b6101a86101a336600461125e565b6104d0565b005b6101cd6101b836600461125e565b60066020526000908152604090205460ff1681565b6040519015158152602001610179565b6101656101eb36600461127b565b6104e0565b6101a86101fe366004611294565b61050a565b6101cd61021136600461125e565b60086020526000908152604090205460ff1681565b6101a8610576565b61016561023c3660046112d2565b61058a565b6101a861024f36600461125e565b6105c2565b6000546001600160a01b0316610165565b6003545b604051908152602001610179565b6101a86102853660046112fe565b61061e565b6101656102983660046112d2565b6109db565b6101cd6102ab36600461125e565b60076020526000908152604090205460ff1681565b6101656102ce366004611333565b6109f0565b6101a86102e13660046112d2565b610a12565b6101cd6102f436600461125e565b60046020526000908152604090205460ff1681565b61026961031736600461125e565b60056020526000908152604090205481565b6101a8610337366004611294565b610a22565b61016561034a36600461125e565b610a86565b6101a861035d36600461125e565b610a91565b61026961037036600461125e565b610b07565b3360009081526008602052604081205460ff166103c85760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b60448201526064015b60405180910390fd5b6001600160a01b038a1660009081526006602052604090205460ff166104305760405162461bcd60e51b815260206004820152601760248201527f6e6f7420616c6c6f776564207661756c74206f776e657200000000000000000060448201526064016103bf565b60015460405163e1c6ba5d60e01b81526000916001600160a01b03169063e1c6ba5d90610471908f908f908f908f908f908f908f908f908f9060040161140b565b6020604051808303816000875af1158015610490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b49190611472565b90506104c18c8285610b25565b9b9a5050505050505050505050565b6104dd816000600161061e565b50565b600381815481106104f057600080fd5b6000918252602090912001546001600160a01b0316905081565b610512610e5d565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527fc9219e6871f1efb578009a697784e88c6375187771bda2c8899b8ead4bbea82291015b60405180910390a15050565b61057e610e5d565b6105886000610eb7565b565b600260205281600052604060002081815481106105a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6105ca610e5d565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f65104c4699f20a240a0ce199d616669f9518c0469b60b2a8c904f7cd4eb471fd9060200160405180910390a150565b3360009081526008602052604081205460ff161515900361065257604051632e1027db60e11b815260040160405180910390fd5b60066000846001600160a01b0316635aa6e6756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b89190611472565b6001600160a01b03168152602081019190915260400160009081205460ff16151590036107035760405163d0c41e7960e01b81526001600160a01b03841660048201526024016103bf565b60008260018060009054906101000a90046001600160a01b03166001600160a01b03166356e0a94b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e919061148f565b61078891906114a8565b61079291906114a8565b60015460405163b6a9f40f60e01b8152600481018390529192506000916001600160a01b039091169063b6a9f40f90602401602060405180830381865afa1580156107e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108059190611472565b6001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261086a9190810190611513565b90508080519060200120856001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108da9190810190611513565b805190602001201461096857846001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610924573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261094c9190810190611513565b81604051639102966160e01b81526004016103bf9291906115ec565b6109d4856001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cd9190611472565b8685610b25565b5050505050565b60006109e78383610f07565b90505b92915050565b6000610a0589338a8a8a8a8a8a8a6001610375565b9998505050505050505050565b610a1e8282600161061e565b5050565b610a2a610e5d565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f0432d20aa3457fdf75aad100b0473a9a5a3f29275b066abbeb243dc7e0db4a48910161056a565b60006109ea82610fc8565b610a99610e5d565b6001600160a01b038116610afe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103bf565b6104dd81610eb7565b6001600160a01b0381166000908152600260205260408120546109ea565b6001600160a01b03821660009081526005602052604090205415610b7f576001600160a01b038216600081815260056020526040908190205490516314e3ee7560e01b8152600481019290925260248201526044016103bf565b80600003610ba05760405163031366db60e01b815260040160405180910390fd5b6000610bac8483610f07565b90506001600160a01b03811615610cc857826001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610bfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c239190810190611513565b80519060200120816001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c909190810190611513565b8051906020012003610cc8576040516318aec0af60e01b81526001600160a01b038083166004830152841660248201526044016103bf565b6001600160a01b0384811660008181526002602090815260408083208054600181018255908452828420810180546001600160a01b031916968a16968717905594835260058252808320879055928252600490529081205460ff1615159003610d91576001600160a01b0385166000818152600460205260408120805460ff191660019081179091556003805491820181559091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b03191690911790555b6001600160a01b03808516600081815260076020526040808220805460ff191660011790558051630258294160e41b8152905185948a16937f665814fc0711cd098dc48648ad2f63460a3cb758a6aca058c168d7a9067d9f389389938b936325829410926004808401939192918290030181865afa158015610e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e3f9190810190611513565b604051610e4e93929190611611565b60405180910390a35050505050565b6000546001600160a01b031633146105885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bf565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03821660009081526002602052604081205480600003610f325760009150506109ea565b6000610f3f6001836114a8565b90505b6001600160a01b0385166000908152600260205260408120805483908110610f6c57610f6c61163b565b60009182526020808320909101546001600160a01b03168083526005909152604090912054909150859003610fa55792506109ea915050565b81600003610fb35750610fbd565b5060001901610f42565b506000949350505050565b6001600160a01b03811660009081526002602052604081205480600003610ff957610ff283611048565b9392505050565b6001600160a01b038316600090815260026020526040902061101c6001836114a8565b8154811061102c5761102c61163b565b6000918252602090912001546001600160a01b03169392505050565b6040516001600160a01b0382166024820152600090819060440160408051601f198184030181529181526020820180516001600160e01b0316630e177dc760e41b1790525190915060009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906110cb908590611651565b600060405180830381855afa9150503d8060008114611106576040519150601f19603f3d011682016040523d82523d6000602084013e61110b565b606091505b50915091508115610fbd578080602001905181019061112a9190611472565b95945050505050565b6001600160a01b03811681146104dd57600080fd5b60008083601f84011261115a57600080fd5b50813567ffffffffffffffff81111561117257600080fd5b60208301915083602082850101111561118a57600080fd5b9250929050565b6000806000806000806000806000806101008b8d0312156111b157600080fd5b8a356111bc81611133565b995060208b01356111cc81611133565b985060408b01356111dc81611133565b975060608b01356111ec81611133565b965060808b013567ffffffffffffffff8082111561120957600080fd5b6112158e838f01611148565b909850965060a08d013591508082111561122e57600080fd5b5061123b8d828e01611148565b9b9e9a9d50989b979a969995989760c08101359660e09091013595509350505050565b60006020828403121561127057600080fd5b8135610ff281611133565b60006020828403121561128d57600080fd5b5035919050565b600080604083850312156112a757600080fd5b82356112b281611133565b9150602083013580151581146112c757600080fd5b809150509250929050565b600080604083850312156112e557600080fd5b82356112f081611133565b946020939093013593505050565b60008060006060848603121561131357600080fd5b833561131e81611133565b95602085013595506040909401359392505050565b60008060008060008060008060c0898b03121561134f57600080fd5b883561135a81611133565b9750602089013561136a81611133565b9650604089013561137a81611133565b9550606089013567ffffffffffffffff8082111561139757600080fd5b6113a38c838d01611148565b909750955060808b01359150808211156113bc57600080fd5b506113c98b828c01611148565b999c989b50969995989497949560a00135949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038a81168252898116602083015288811660408301528716606082015260e06080820181905260009061144890830187896113e2565b82810360a084015261145b8186886113e2565b9150508260c08301529a9950505050505050505050565b60006020828403121561148457600080fd5b8151610ff281611133565b6000602082840312156114a157600080fd5b5051919050565b6000828210156114c857634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052604160045260246000fd5b60005b838110156114fe5781810151838201526020016114e6565b8381111561150d576000848401525b50505050565b60006020828403121561152557600080fd5b815167ffffffffffffffff8082111561153d57600080fd5b818401915084601f83011261155157600080fd5b815181811115611563576115636114cd565b604051601f8201601f19908116603f0116810190838211818310171561158b5761158b6114cd565b816040528281528760208487010111156115a457600080fd5b6115b58360208301602088016114e3565b979650505050505050565b600081518084526115d88160208601602086016114e3565b601f01601f19169290920160200192915050565b6040815260006115ff60408301856115c0565b828103602084015261112a81856115c0565b8381526001600160a01b038316602082015260606040820181905260009061112a908301846115c0565b634e487b7160e01b600052603260045260246000fd5b600082516116638184602087016114e3565b919091019291505056fea26469706673582212204bbd9b31e5cb45a46b0ec6b42ef775db826e44a3e26253f3600ce3c6ac807aff64736f6c634300080f003300000000000000000000000081291ceb9bb265185a9d07b91b5b50df94f005bf0000000000000000000000001ba4eb0f44ab82541e56669e18972b0d6037dfe0

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80638e499bcf116100c3578063c3c5a5471161007c578063c3c5a547146102e6578063c9b8f05514610309578063dbf4246114610329578063e177dc701461033c578063f2fde38b1461034f578063f9c7bba51461036257600080fd5b80638e499bcf14610265578063931074ba146102775780639de312f01461028a578063a0dd0bcf1461029d578063b0b40fce146102c0578063b366a35c146102d357600080fd5b806351f69a6e1161011557806351f69a6e146101f05780636fc74f9e14610203578063715018a6146102265780637bbfc69e1461022e5780638cd473c2146102415780638da5cb5b1461025457600080fd5b8063125d43361461015257806319ee073e1461018257806329b2e0c6146101955780632b017c8b146101aa5780634f64b2be146101dd575b600080fd5b610165610160366004611191565b610375565b6040516001600160a01b0390911681526020015b60405180910390f35b600154610165906001600160a01b031681565b6101a86101a336600461125e565b6104d0565b005b6101cd6101b836600461125e565b60066020526000908152604090205460ff1681565b6040519015158152602001610179565b6101656101eb36600461127b565b6104e0565b6101a86101fe366004611294565b61050a565b6101cd61021136600461125e565b60086020526000908152604090205460ff1681565b6101a8610576565b61016561023c3660046112d2565b61058a565b6101a861024f36600461125e565b6105c2565b6000546001600160a01b0316610165565b6003545b604051908152602001610179565b6101a86102853660046112fe565b61061e565b6101656102983660046112d2565b6109db565b6101cd6102ab36600461125e565b60076020526000908152604090205460ff1681565b6101656102ce366004611333565b6109f0565b6101a86102e13660046112d2565b610a12565b6101cd6102f436600461125e565b60046020526000908152604090205460ff1681565b61026961031736600461125e565b60056020526000908152604090205481565b6101a8610337366004611294565b610a22565b61016561034a36600461125e565b610a86565b6101a861035d36600461125e565b610a91565b61026961037036600461125e565b610b07565b3360009081526008602052604081205460ff166103c85760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b60448201526064015b60405180910390fd5b6001600160a01b038a1660009081526006602052604090205460ff166104305760405162461bcd60e51b815260206004820152601760248201527f6e6f7420616c6c6f776564207661756c74206f776e657200000000000000000060448201526064016103bf565b60015460405163e1c6ba5d60e01b81526000916001600160a01b03169063e1c6ba5d90610471908f908f908f908f908f908f908f908f908f9060040161140b565b6020604051808303816000875af1158015610490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b49190611472565b90506104c18c8285610b25565b9b9a5050505050505050505050565b6104dd816000600161061e565b50565b600381815481106104f057600080fd5b6000918252602090912001546001600160a01b0316905081565b610512610e5d565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527fc9219e6871f1efb578009a697784e88c6375187771bda2c8899b8ead4bbea82291015b60405180910390a15050565b61057e610e5d565b6105886000610eb7565b565b600260205281600052604060002081815481106105a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6105ca610e5d565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f65104c4699f20a240a0ce199d616669f9518c0469b60b2a8c904f7cd4eb471fd9060200160405180910390a150565b3360009081526008602052604081205460ff161515900361065257604051632e1027db60e11b815260040160405180910390fd5b60066000846001600160a01b0316635aa6e6756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b89190611472565b6001600160a01b03168152602081019190915260400160009081205460ff16151590036107035760405163d0c41e7960e01b81526001600160a01b03841660048201526024016103bf565b60008260018060009054906101000a90046001600160a01b03166001600160a01b03166356e0a94b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e919061148f565b61078891906114a8565b61079291906114a8565b60015460405163b6a9f40f60e01b8152600481018390529192506000916001600160a01b039091169063b6a9f40f90602401602060405180830381865afa1580156107e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108059190611472565b6001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261086a9190810190611513565b90508080519060200120856001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108da9190810190611513565b805190602001201461096857846001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610924573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261094c9190810190611513565b81604051639102966160e01b81526004016103bf9291906115ec565b6109d4856001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cd9190611472565b8685610b25565b5050505050565b60006109e78383610f07565b90505b92915050565b6000610a0589338a8a8a8a8a8a8a6001610375565b9998505050505050505050565b610a1e8282600161061e565b5050565b610a2a610e5d565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f0432d20aa3457fdf75aad100b0473a9a5a3f29275b066abbeb243dc7e0db4a48910161056a565b60006109ea82610fc8565b610a99610e5d565b6001600160a01b038116610afe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103bf565b6104dd81610eb7565b6001600160a01b0381166000908152600260205260408120546109ea565b6001600160a01b03821660009081526005602052604090205415610b7f576001600160a01b038216600081815260056020526040908190205490516314e3ee7560e01b8152600481019290925260248201526044016103bf565b80600003610ba05760405163031366db60e01b815260040160405180910390fd5b6000610bac8483610f07565b90506001600160a01b03811615610cc857826001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610bfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c239190810190611513565b80519060200120816001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c909190810190611513565b8051906020012003610cc8576040516318aec0af60e01b81526001600160a01b038083166004830152841660248201526044016103bf565b6001600160a01b0384811660008181526002602090815260408083208054600181018255908452828420810180546001600160a01b031916968a16968717905594835260058252808320879055928252600490529081205460ff1615159003610d91576001600160a01b0385166000818152600460205260408120805460ff191660019081179091556003805491820181559091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b03191690911790555b6001600160a01b03808516600081815260076020526040808220805460ff191660011790558051630258294160e41b8152905185948a16937f665814fc0711cd098dc48648ad2f63460a3cb758a6aca058c168d7a9067d9f389389938b936325829410926004808401939192918290030181865afa158015610e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e3f9190810190611513565b604051610e4e93929190611611565b60405180910390a35050505050565b6000546001600160a01b031633146105885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bf565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03821660009081526002602052604081205480600003610f325760009150506109ea565b6000610f3f6001836114a8565b90505b6001600160a01b0385166000908152600260205260408120805483908110610f6c57610f6c61163b565b60009182526020808320909101546001600160a01b03168083526005909152604090912054909150859003610fa55792506109ea915050565b81600003610fb35750610fbd565b5060001901610f42565b506000949350505050565b6001600160a01b03811660009081526002602052604081205480600003610ff957610ff283611048565b9392505050565b6001600160a01b038316600090815260026020526040902061101c6001836114a8565b8154811061102c5761102c61163b565b6000918252602090912001546001600160a01b03169392505050565b6040516001600160a01b0382166024820152600090819060440160408051601f198184030181529181526020820180516001600160e01b0316630e177dc760e41b1790525190915060009081906001600160a01b037f0000000000000000000000001ba4eb0f44ab82541e56669e18972b0d6037dfe016906110cb908590611651565b600060405180830381855afa9150503d8060008114611106576040519150601f19603f3d011682016040523d82523d6000602084013e61110b565b606091505b50915091508115610fbd578080602001905181019061112a9190611472565b95945050505050565b6001600160a01b03811681146104dd57600080fd5b60008083601f84011261115a57600080fd5b50813567ffffffffffffffff81111561117257600080fd5b60208301915083602082850101111561118a57600080fd5b9250929050565b6000806000806000806000806000806101008b8d0312156111b157600080fd5b8a356111bc81611133565b995060208b01356111cc81611133565b985060408b01356111dc81611133565b975060608b01356111ec81611133565b965060808b013567ffffffffffffffff8082111561120957600080fd5b6112158e838f01611148565b909850965060a08d013591508082111561122e57600080fd5b5061123b8d828e01611148565b9b9e9a9d50989b979a969995989760c08101359660e09091013595509350505050565b60006020828403121561127057600080fd5b8135610ff281611133565b60006020828403121561128d57600080fd5b5035919050565b600080604083850312156112a757600080fd5b82356112b281611133565b9150602083013580151581146112c757600080fd5b809150509250929050565b600080604083850312156112e557600080fd5b82356112f081611133565b946020939093013593505050565b60008060006060848603121561131357600080fd5b833561131e81611133565b95602085013595506040909401359392505050565b60008060008060008060008060c0898b03121561134f57600080fd5b883561135a81611133565b9750602089013561136a81611133565b9650604089013561137a81611133565b9550606089013567ffffffffffffffff8082111561139757600080fd5b6113a38c838d01611148565b909750955060808b01359150808211156113bc57600080fd5b506113c98b828c01611148565b999c989b50969995989497949560a00135949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038a81168252898116602083015288811660408301528716606082015260e06080820181905260009061144890830187896113e2565b82810360a084015261145b8186886113e2565b9150508260c08301529a9950505050505050505050565b60006020828403121561148457600080fd5b8151610ff281611133565b6000602082840312156114a157600080fd5b5051919050565b6000828210156114c857634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052604160045260246000fd5b60005b838110156114fe5781810151838201526020016114e6565b8381111561150d576000848401525b50505050565b60006020828403121561152557600080fd5b815167ffffffffffffffff8082111561153d57600080fd5b818401915084601f83011261155157600080fd5b815181811115611563576115636114cd565b604051601f8201601f19908116603f0116810190838211818310171561158b5761158b6114cd565b816040528281528760208487010111156115a457600080fd5b6115b58360208301602088016114e3565b979650505050505050565b600081518084526115d88160208601602086016114e3565b601f01601f19169290920160200192915050565b6040815260006115ff60408301856115c0565b828103602084015261112a81856115c0565b8381526001600160a01b038316602082015260606040820181905260009061112a908301846115c0565b634e487b7160e01b600052603260045260246000fd5b600082516116638184602087016114e3565b919091019291505056fea26469706673582212204bbd9b31e5cb45a46b0ec6b42ef775db826e44a3e26253f3600ce3c6ac807aff64736f6c634300080f0033

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

00000000000000000000000081291ceb9bb265185a9d07b91b5b50df94f005bf0000000000000000000000001ba4eb0f44ab82541e56669e18972b0d6037dfe0

-----Decoded View---------------
Arg [0] : _releaseRegistry (address): 0x81291ceb9bB265185A9D07b91B5b50Df94f005BF
Arg [1] : _legacyRegistry (address): 0x1ba4eB0F44AB82541E56669e18972b0d6037dfE0

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000081291ceb9bb265185a9d07b91b5b50df94f005bf
Arg [1] : 0000000000000000000000001ba4eb0f44ab82541e56669e18972b0d6037dfe0


Deployed Bytecode Sourcemap

4652:11145:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13984:745;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2092:32:1;;;2074:51;;2062:2;2047:18;13984:745:0;;;;;;;;4775:30;;;;;-1:-1:-1;;;;;4775:30:0;;;12175:103;;;;;;:::i;:::-;;:::i;:::-;;5018:51;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2553:14:1;;2546:22;2528:41;;2516:2;2501:18;5018:51:0;2388:187:1;4886:23:0;;;;;;:::i;:::-;;:::i;15392:221::-;;;;;;:::i;:::-;;:::i;5130:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3295:103;;;:::i;4836:43::-;;;;;;:::i;:::-;;:::i;15621:173::-;;;;;;:::i;:::-;;:::i;2647:87::-;2693:7;2720:6;-1:-1:-1;;;;;2720:6:0;2647:87;;6098:92;6169:6;:13;6098:92;;;3652:25:1;;;3640:2;3625:18;6098:92:0;3506:177:1;10909:1112:0;;;;;;:::i;:::-;;:::i;8548:181::-;;;;;;:::i;:::-;;:::i;5076:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12286:514;;;;;;:::i;:::-;;:::i;12029:138::-;;;;;;:::i;:::-;;:::i;4916:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4967;;;;;;:::i;:::-;;;;;;;;;;;;;;14976:207;;;;;;:::i;:::-;;:::i;8048:115::-;;;;;;:::i;:::-;;:::i;3553:201::-;;;;;;:::i;:::-;;:::i;6198:111::-;;;;;;:::i;:::-;;:::i;13984:745::-;14300:10;14257:7;14285:26;;;:14;:26;;;;;;;;14277:51;;;;-1:-1:-1;;;14277:51:0;;5492:2:1;14277:51:0;;;5474:21:1;5531:2;5511:18;;;5504:30;-1:-1:-1;;;5550:18:1;;;5543:42;5602:18;;14277:51:0;;;;;;;;;-1:-1:-1;;;;;14347:32:0;;;;;;:19;:32;;;;;;;;14339:68;;;;-1:-1:-1;;;14339:68:0;;5833:2:1;14339:68:0;;;5815:21:1;5872:2;5852:18;;;5845:30;5911:25;5891:18;;;5884:53;5954:18;;14339:68:0;5631:347:1;14339:68:0;14451:15;;14434:217;;-1:-1:-1;;;14434:217:0;;14418:13;;-1:-1:-1;;;;;14451:15:0;;14434:42;;:217;;14491:6;;14512:11;;14538:9;;14562:8;;14585:5;;;;14605:7;;;;14627:13;;14434:217;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14418:233;;14662:36;14677:6;14685:5;14692;14662:14;:36::i;:::-;14716:5;13984:745;-1:-1:-1;;;;;;;;;;;13984:745:0:o;12175:103::-;12233:37;12246:6;12254:1;4725;12233:12;:37::i;:::-;12175:103;:::o;4886:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4886:23:0;;-1:-1:-1;4886:23:0;:::o;15392:221::-;2533:13;:11;:13::i;:::-;-1:-1:-1;;;;;15508:26:0;::::1;;::::0;;;:19:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;15508:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15562:43;;7555:51:1;;;7622:18;;;7615:50;15562:43:0::1;::::0;7528:18:1;15562:43:0::1;;;;;;;;15392:221:::0;;:::o;3295:103::-;2533:13;:11;:13::i;:::-;3360:30:::1;3387:1;3360:18;:30::i;:::-;3295:103::o:0;4836:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4836:43:0;;-1:-1:-1;4836:43:0;;-1:-1:-1;4836:43:0:o;15621:173::-;2533:13;:11;:13::i;:::-;15704:15:::1;:30:::0;;-1:-1:-1;;;;;;15704:30:0::1;-1:-1:-1::0;;;;;15704:30:0;::::1;::::0;;::::1;::::0;;;15750:36:::1;::::0;2074:51:1;;;15750:36:0::1;::::0;2062:2:1;2047:18;15750:36:0::1;;;;;;;15621:173:::0;:::o;10909:1112::-;11056:10;11041:26;;;;:14;:26;;;;;;;;:35;;;;11037:96;;11100:21;;-1:-1:-1;;;11100:21:0;;;;;;;;;;;11037:96;11149:19;:48;11176:6;-1:-1:-1;;;;;11169:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11149:48:0;;;;;;;;;;;;-1:-1:-1;11149:48:0;;;;;;:57;;;;11145:123;;11230:26;;-1:-1:-1;;;11230:26:0;;-1:-1:-1;;;;;2092:32:1;;11230:26:0;;;2074:51:1;2047:18;;11230:26:0;1928:203:1;11145:123:0;11374:21;11492:13;11475:1;11415:15;;;;;;;;;-1:-1:-1;;;;;11415:15:0;-1:-1:-1;;;;;11398:59:0;;:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:78;;;;:::i;:::-;:107;;;;:::i;:::-;11601:15;;11584:57;;-1:-1:-1;;;11584:57:0;;;;;3652:25:1;;;11374:131:0;;-1:-1:-1;11536:24:0;;-1:-1:-1;;;;;11601:15:0;;;;11584:42;;3625:18:1;;11584:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11563:100:0;;:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11563:102:0;;;;;;;;;;;;:::i;:::-;11536:129;;11775:10;11758:30;;;;;;11718:6;-1:-1:-1;;;;;11711:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11711:27:0;;;;;;;;;;;;:::i;:::-;11694:47;;;;;;:94;11676:215;;11846:6;-1:-1:-1;;;;;11839:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11839:27:0;;;;;;;;;;;;:::i;:::-;11868:10;11822:57;;-1:-1:-1;;;11822:57:0;;;;;;;;;:::i;11676:215::-;11960:53;11982:6;-1:-1:-1;;;;;11975:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11999:6;12007:5;11960:14;:53::i;:::-;11026:995;;10909:1112;;;:::o;8548:181::-;8656:7;8688:33;8707:6;8715:5;8688:18;:33::i;:::-;8681:40;;8548:181;;;;;:::o;12286:514::-;12507:7;12547:245;12574:6;12599:10;12628:9;12656:8;12683:5;;12707:7;;12733:13;4725:1;12547:8;:245::i;:::-;12527:265;12286:514;-1:-1:-1;;;;;;;;;12286:514:0:o;12029:138::-;12110:49;12123:6;12131:13;4725:1;12110:12;:49::i;:::-;12029:138;;:::o;14976:207::-;2533:13;:11;:13::i;:::-;-1:-1:-1;;;;;15087:21:0;::::1;;::::0;;;:14:::1;:21;::::0;;;;;;;;:33;;-1:-1:-1;;15087:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15136:39;;7555:51:1;;;7622:18;;;7615:50;15136:39:0::1;::::0;7528:18:1;15136:39:0::1;7387:284:1::0;8048:115:0;8108:7;8135:20;8148:6;8135:12;:20::i;3553:201::-;2533:13;:11;:13::i;:::-;-1:-1:-1;;;;;3642:22:0;::::1;3634:73;;;::::0;-1:-1:-1;;;3634:73:0;;10229:2:1;3634:73:0::1;::::0;::::1;10211:21:1::0;10268:2;10248:18;;;10241:30;10307:34;10287:18;;;10280:62;-1:-1:-1;;;10358:18:1;;;10351:36;10404:19;;3634:73:0::1;10027:402:1::0;3634:73:0::1;3718:28;3737:8;3718:18;:28::i;6198:111::-:0;-1:-1:-1;;;;;6403:14:0;;6256:7;6403:14;;;:6;:14;;;;;:21;6283:18;6317:115;8737:1356;-1:-1:-1;;;;;9081:17:0;;;;;;:9;:17;;;;;;:22;9077:109;;-1:-1:-1;;;;;9156:17:0;;;;;;:9;:17;;;;;;;;9127:47;;-1:-1:-1;;;9127:47:0;;;;;10608:51:1;;;;10675:18;;;10668:34;10581:18;;9127:47:0;10434:274:1;9077:109:0;9202:5;9211:1;9202:10;9198:68;;9236:18;;-1:-1:-1;;;9236:18:0;;;;;;;;;;;9198:68;9278:14;9295:33;9314:6;9322:5;9295:18;:33::i;:::-;9278:50;-1:-1:-1;;;;;;9343:20:0;;;9339:286;;9491:6;-1:-1:-1;;;;;9484:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9484:27:0;;;;;;;;;;;;:::i;:::-;9468:45;;;;;;9425:6;-1:-1:-1;;;;;9418:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9418:27:0;;;;;;;;;;;;:::i;:::-;9402:45;;;;;;:111;9380:234;;9555:43;;-1:-1:-1;;;9555:43:0;;-1:-1:-1;;;;;10943:15:1;;;9555:43:0;;;10925:34:1;10995:15;;10975:18;;;10968:43;10860:18;;9555:43:0;10713:304:1;9380:234:0;-1:-1:-1;;;;;6403:14:0;;;9635:10;6403:14;;;:6;:14;;;;;;;;:21;;9718:27;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9718:27:0;;;;;;;;;9756:17;;;:9;:17;;;;;:25;;;9846:20;;;:12;:20;;;;;;;;:29;;;;9842:123;;-1:-1:-1;;;;;9892:20:0;;;;;;:12;:20;;;;;:27;;-1:-1:-1;;9892:27:0;9915:4;9892:27;;;;;;9934:6;:19;;;;;;;;;;;;;;-1:-1:-1;;;;;;9934:19:0;;;;;;9842:123;-1:-1:-1;;;;;9975:23:0;;;;;;;:15;:23;;;;;;:30;;-1:-1:-1;;9975:30:0;10001:4;9975:30;;;10057:27;;-1:-1:-1;;;10057:27:0;;;;10038:2;;10021:64;;;;;10042:5;;9991:6;;10057:25;;:27;;;;;9975:23;;10057:27;;;;;;9975:23;10057:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10057:27:0;;;;;;;;;;;;:::i;:::-;10021:64;;;;;;;;:::i;:::-;;;;;;;;8851:1242;;8737:1356;;;:::o;2812:132::-;2693:7;2720:6;-1:-1:-1;;;;;2720:6:0;1278:10;2876:23;2868:68;;;;-1:-1:-1;;;2868:68:0;;11617:2:1;2868:68:0;;;11599:21:1;;;11636:18;;;11629:30;11695:34;11675:18;;;11668:62;11747:18;;2868:68:0;11415:356:1;3914:191:0;3988:16;4007:6;;-1:-1:-1;;;;;4024:17:0;;;-1:-1:-1;;;;;;4024:17:0;;;;;;4057:40;;4007:6;;;;;;;4057:40;;3988:16;4057:40;3977:128;3914:191;:::o;6701:612::-;-1:-1:-1;;;;;6403:14:0;;6810:7;6403:14;;;:6;:14;;;;;:21;6885:6;6895:1;6885:11;6881:61;;6928:1;6913:17;;;;;6881:61;6952:9;6964:10;6973:1;6964:6;:10;:::i;:::-;6952:22;;6985:293;-1:-1:-1;;;;;7029:14:0;;7013:13;7029:14;;;:6;:14;;;;;:17;;7044:1;;7029:17;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;7029:17:0;7065:16;;;:9;:16;;;;;;;;7029:17;;-1:-1:-1;7065:25:0;;;7061:78;;7118:5;-1:-1:-1;7111:12:0;;-1:-1:-1;;7111:12:0;7061:78;7157:1;7162;7157:6;7153:52;;7184:5;;;7153:52;-1:-1:-1;;;7248:3:0;6985:293;;;-1:-1:-1;7303:1:0;;6701:612;-1:-1:-1;;;;6701:612:0:o;6440:253::-;-1:-1:-1;;;;;6403:14:0;;6501:7;6403:14;;;:6;:14;;;;;:21;6571:6;6581:1;6571:11;6567:75;;6606:24;6623:6;6606:16;:24::i;:::-;6599:31;6440:253;-1:-1:-1;;;6440:253:0:o;6567:75::-;-1:-1:-1;;;;;6659:14:0;;;;;;:6;:14;;;;;6674:10;6683:1;6674:6;:10;:::i;:::-;6659:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6659:26:0;;6440:253;-1:-1:-1;;;6440:253:0:o;7321:433::-;7426:92;;-1:-1:-1;;;;;2092:32:1;;7426:92:0;;;2074:51:1;7386:7:0;;;;2047:18:1;;7426:92:0;;;-1:-1:-1;;7426:92:0;;;;;;;;;;;;;;-1:-1:-1;;;;;7426:92:0;-1:-1:-1;;;7426:92:0;;;7572:55;7426:92;;-1:-1:-1;;;;;;;;;;7580:15:0;7572:49;;:55;;7426:92;;7572:55;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7529:98;;;;7642:7;7638:81;;;7684:11;7673:34;;;;;;;;;;;;:::i;:::-;7666:41;7321:433;-1:-1:-1;;;;;7321:433:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:348;202:8;212:6;266:3;259:4;251:6;247:17;243:27;233:55;;284:1;281;274:12;233:55;-1:-1:-1;307:20:1;;350:18;339:30;;336:50;;;382:1;379;372:12;336:50;419:4;411:6;407:17;395:29;;471:3;464:4;455:6;447;443:19;439:30;436:39;433:59;;;488:1;485;478:12;433:59;150:348;;;;;:::o;503:1420::-;649:6;657;665;673;681;689;697;705;713;721;774:3;762:9;753:7;749:23;745:33;742:53;;;791:1;788;781:12;742:53;830:9;817:23;849:31;874:5;849:31;:::i;:::-;899:5;-1:-1:-1;956:2:1;941:18;;928:32;969:33;928:32;969:33;:::i;:::-;1021:7;-1:-1:-1;1080:2:1;1065:18;;1052:32;1093:33;1052:32;1093:33;:::i;:::-;1145:7;-1:-1:-1;1204:2:1;1189:18;;1176:32;1217:33;1176:32;1217:33;:::i;:::-;1269:7;-1:-1:-1;1327:3:1;1312:19;;1299:33;1351:18;1381:14;;;1378:34;;;1408:1;1405;1398:12;1378:34;1447:59;1498:7;1489:6;1478:9;1474:22;1447:59;:::i;:::-;1525:8;;-1:-1:-1;1421:85:1;-1:-1:-1;1613:3:1;1598:19;;1585:33;;-1:-1:-1;1630:16:1;;;1627:36;;;1659:1;1656;1649:12;1627:36;;1698:61;1751:7;1740:8;1729:9;1725:24;1698:61;:::i;:::-;503:1420;;;;-1:-1:-1;503:1420:1;;;;;;;;1778:8;1860:3;1845:19;;1832:33;;1912:3;1897:19;;;1884:33;;-1:-1:-1;503:1420:1;-1:-1:-1;;;;503:1420:1:o;2136:247::-;2195:6;2248:2;2236:9;2227:7;2223:23;2219:32;2216:52;;;2264:1;2261;2254:12;2216:52;2303:9;2290:23;2322:31;2347:5;2322:31;:::i;2580:180::-;2639:6;2692:2;2680:9;2671:7;2667:23;2663:32;2660:52;;;2708:1;2705;2698:12;2660:52;-1:-1:-1;2731:23:1;;2580:180;-1:-1:-1;2580:180:1:o;2765:416::-;2830:6;2838;2891:2;2879:9;2870:7;2866:23;2862:32;2859:52;;;2907:1;2904;2897:12;2859:52;2946:9;2933:23;2965:31;2990:5;2965:31;:::i;:::-;3015:5;-1:-1:-1;3072:2:1;3057:18;;3044:32;3114:15;;3107:23;3095:36;;3085:64;;3145:1;3142;3135:12;3085:64;3168:7;3158:17;;;2765:416;;;;;:::o;3186:315::-;3254:6;3262;3315:2;3303:9;3294:7;3290:23;3286:32;3283:52;;;3331:1;3328;3321:12;3283:52;3370:9;3357:23;3389:31;3414:5;3389:31;:::i;:::-;3439:5;3491:2;3476:18;;;;3463:32;;-1:-1:-1;;;3186:315:1:o;3688:383::-;3765:6;3773;3781;3834:2;3822:9;3813:7;3809:23;3805:32;3802:52;;;3850:1;3847;3840:12;3802:52;3889:9;3876:23;3908:31;3933:5;3908:31;:::i;:::-;3958:5;4010:2;3995:18;;3982:32;;-1:-1:-1;4061:2:1;4046:18;;;4033:32;;3688:383;-1:-1:-1;;;3688:383:1:o;4076:1209::-;4204:6;4212;4220;4228;4236;4244;4252;4260;4313:3;4301:9;4292:7;4288:23;4284:33;4281:53;;;4330:1;4327;4320:12;4281:53;4369:9;4356:23;4388:31;4413:5;4388:31;:::i;:::-;4438:5;-1:-1:-1;4495:2:1;4480:18;;4467:32;4508:33;4467:32;4508:33;:::i;:::-;4560:7;-1:-1:-1;4619:2:1;4604:18;;4591:32;4632:33;4591:32;4632:33;:::i;:::-;4684:7;-1:-1:-1;4742:2:1;4727:18;;4714:32;4765:18;4795:14;;;4792:34;;;4822:1;4819;4812:12;4792:34;4861:59;4912:7;4903:6;4892:9;4888:22;4861:59;:::i;:::-;4939:8;;-1:-1:-1;4835:85:1;-1:-1:-1;5027:3:1;5012:19;;4999:33;;-1:-1:-1;5044:16:1;;;5041:36;;;5073:1;5070;5063:12;5041:36;;5112:61;5165:7;5154:8;5143:9;5139:24;5112:61;:::i;:::-;4076:1209;;;;-1:-1:-1;4076:1209:1;;;;;;5086:87;;5274:3;5259:19;5246:33;;4076:1209;-1:-1:-1;;;;4076:1209:1:o;5983:267::-;6072:6;6067:3;6060:19;6124:6;6117:5;6110:4;6105:3;6101:14;6088:43;-1:-1:-1;6176:1:1;6151:16;;;6169:4;6147:27;;;6140:38;;;;6232:2;6211:15;;;-1:-1:-1;;6207:29:1;6198:39;;;6194:50;;5983:267::o;6255:871::-;-1:-1:-1;;;;;6650:15:1;;;6632:34;;6702:15;;;6697:2;6682:18;;6675:43;6754:15;;;6749:2;6734:18;;6727:43;6806:15;;6801:2;6786:18;;6779:43;6859:3;6853;6838:19;;6831:32;;;6575:4;;6886:63;;6929:19;;6921:6;6913;6886:63;:::i;:::-;6998:9;6990:6;6986:22;6980:3;6969:9;6965:19;6958:51;7026:50;7069:6;7061;7053;7026:50;:::i;:::-;7018:58;;;7113:6;7107:3;7096:9;7092:19;7085:35;6255:871;;;;;;;;;;;;:::o;7131:251::-;7201:6;7254:2;7242:9;7233:7;7229:23;7225:32;7222:52;;;7270:1;7267;7260:12;7222:52;7302:9;7296:16;7321:31;7346:5;7321:31;:::i;7676:184::-;7746:6;7799:2;7787:9;7778:7;7774:23;7770:32;7767:52;;;7815:1;7812;7805:12;7767:52;-1:-1:-1;7838:16:1;;7676:184;-1:-1:-1;7676:184:1:o;7865:222::-;7905:4;7933:1;7930;7927:8;7924:131;;;7977:10;7972:3;7968:20;7965:1;7958:31;8012:4;8009:1;8002:15;8040:4;8037:1;8030:15;7924:131;-1:-1:-1;8072:9:1;;7865:222::o;8092:127::-;8153:10;8148:3;8144:20;8141:1;8134:31;8184:4;8181:1;8174:15;8208:4;8205:1;8198:15;8224:258;8296:1;8306:113;8320:6;8317:1;8314:13;8306:113;;;8396:11;;;8390:18;8377:11;;;8370:39;8342:2;8335:10;8306:113;;;8437:6;8434:1;8431:13;8428:48;;;8472:1;8463:6;8458:3;8454:16;8447:27;8428:48;;8224:258;;;:::o;8487:884::-;8567:6;8620:2;8608:9;8599:7;8595:23;8591:32;8588:52;;;8636:1;8633;8626:12;8588:52;8669:9;8663:16;8698:18;8739:2;8731:6;8728:14;8725:34;;;8755:1;8752;8745:12;8725:34;8793:6;8782:9;8778:22;8768:32;;8838:7;8831:4;8827:2;8823:13;8819:27;8809:55;;8860:1;8857;8850:12;8809:55;8889:2;8883:9;8911:2;8907;8904:10;8901:36;;;8917:18;;:::i;:::-;8992:2;8986:9;8960:2;9046:13;;-1:-1:-1;;9042:22:1;;;9066:2;9038:31;9034:40;9022:53;;;9090:18;;;9110:22;;;9087:46;9084:72;;;9136:18;;:::i;:::-;9176:10;9172:2;9165:22;9211:2;9203:6;9196:18;9251:7;9246:2;9241;9237;9233:11;9229:20;9226:33;9223:53;;;9272:1;9269;9262:12;9223:53;9285:55;9337:2;9332;9324:6;9320:15;9315:2;9311;9307:11;9285:55;:::i;:::-;9359:6;8487:884;-1:-1:-1;;;;;;;8487:884:1:o;9376:258::-;9418:3;9456:5;9450:12;9483:6;9478:3;9471:19;9499:63;9555:6;9548:4;9543:3;9539:14;9532:4;9525:5;9521:16;9499:63;:::i;:::-;9616:2;9595:15;-1:-1:-1;;9591:29:1;9582:39;;;;9623:4;9578:50;;9376:258;-1:-1:-1;;9376:258:1:o;9639:383::-;9836:2;9825:9;9818:21;9799:4;9862:45;9903:2;9892:9;9888:18;9880:6;9862:45;:::i;:::-;9955:9;9947:6;9943:22;9938:2;9927:9;9923:18;9916:50;9983:33;10009:6;10001;9983:33;:::i;11022:388::-;11209:25;;;-1:-1:-1;;;;;11270:32:1;;11265:2;11250:18;;11243:60;11339:2;11334;11319:18;;11312:30;;;-1:-1:-1;;11359:45:1;;11385:18;;11377:6;11359:45;:::i;11776:127::-;11837:10;11832:3;11828:20;11825:1;11818:31;11868:4;11865:1;11858:15;11892:4;11889:1;11882:15;11908:274;12037:3;12075:6;12069:13;12091:53;12137:6;12132:3;12125:4;12117:6;12113:17;12091:53;:::i;:::-;12160:16;;;;;11908:274;-1:-1:-1;;11908:274:1:o

Swarm Source

ipfs://4bbd9b31e5cb45a46b0ec6b42ef775db826e44a3e26253f3600ce3c6ac807aff

Block Transaction Difficulty 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
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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.