ETH Price: $2,685.33 (+2.42%)

Contract

0xDCaed0C3feA30E3EdCB1d48f1380aEA167E366E2
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Schedule213255642024-12-04 0:29:5970 days ago1733272199IN
0xDCaed0C3...167E366E2
0 ETH0.002410124.71292725
Schedule213242992024-12-03 20:15:1171 days ago1733256911IN
0xDCaed0C3...167E366E2
0 ETH0.0027027127.71329344
Enable Address213242542024-12-03 20:06:1171 days ago1733256371IN
0xDCaed0C3...167E366E2
0 ETH0.0020258229.07954053

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

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

Contract Name:
TimelockedCall

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, BSL 1.1 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-11-27
*/

// SPDX-License-Identifier: BUSL-1.1
pragma solidity >= 0.8.26;




interface ITimelockedCall {
    function initScheduler(address addr, uint256 newTimeLockDuration) external;
    function enableScheduler(address addr) external;
    function disableScheduler(address addr) external;

    function schedule(bytes32 h, address consumerAddr) external;
    function consume(bytes32 h) external;
    function consumeOwnership(bytes32 h, address prevOwnerAddr, address newOwnerAddr) external;
}







/**
 * @notice Defines the interface for whitelisting addresses.
 */
interface IAddressWhitelist {
    /**
     * @notice Whitelists the address specified.
     * @param addr The address to enable
     */
    function enableAddress (address addr) external;

    /**
     * @notice Whitelists the addresses specified.
     * @param arr The addresses to enable
     */
    function enableAddresses (address[] calldata arr) external;

    /**
     * @notice Disables the address specified.
     * @param addr The address to disable
     */
    function disableAddress (address addr) external;

    /**
     * @notice Disables the addresses specified.
     * @param arr The addresses to disable
     */
    function disableAddresses (address[] calldata arr) external;

    /**
     * @notice Indicates if the address is whitelisted or not.
     * @param addr The address to disable
     * @return Returns 1 if the address is whitelisted
     */
    function isWhitelistedAddress (address addr) external view returns (bool);

    /**
     * This event is triggered when a new address is whitelisted.
     * @param addr The address that was whitelisted
     */
    event OnAddressEnabled(address addr);

    /**
     * This event is triggered when an address is disabled.
     * @param addr The address that was disabled
     */
    event OnAddressDisabled(address addr);
}







/**
 * @title Base reentrancy guard. This is constructor-less implementation for both proxies and standalone contracts.
 */
abstract contract BaseReentrancyGuard {
    uint256 internal constant _REENTRANCY_NOT_ENTERED = 1;
    uint256 internal constant _REENTRANCY_ENTERED = 2;

    uint256 internal _reentrancyStatus;

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_reentrancyStatus != _REENTRANCY_ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _reentrancyStatus = _REENTRANCY_ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _reentrancyStatus = _REENTRANCY_NOT_ENTERED;
    }

    /*
    /// @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a `nonReentrant` function in the call stack.
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _reentrancyStatus == _REENTRANCY_ENTERED;
    }
    */
}




abstract contract BaseOwnable {
    error OwnerOnly();

    address internal _owner;

    /**
     * @notice Triggers when contract ownership changes.
     * @param previousOwner The previous owner of the contract.
     * @param newOwner The new owner of the contract.
     */
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        if (msg.sender != _owner) revert OwnerOnly();
        _;
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


/**
 * @title Lightweight version of the ownership contract. This contract has a reentrancy guard.
 */
abstract contract LightweightOwnable is BaseReentrancyGuard, BaseOwnable {
    /**
     * @notice Transfers ownership of the contract to the account specified.
     * @param newOwner The address of the new owner.
     */
    function transferOwnership(address newOwner) external virtual nonReentrant onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @notice Gets the owner of the contract.
     * @return address The address who owns the contract.
     */
    function owner() external view virtual returns (address) {
        return _owner;
    }    
}


/**
 * @title Standalone contract for whitelisting addresses.
 */
contract AddressWhitelist is IAddressWhitelist, LightweightOwnable {
    mapping (address => bool) internal _whitelistedAddresses;

    constructor(address ownerAddr) {
        require(ownerAddr != address(0), "Owner required");
        _owner = ownerAddr;
    }

    /**
     * @notice Whitelists the address specified.
     * @param addr The address to enable
     */
    function enableAddress (address addr) external override nonReentrant onlyOwner {
        require(!_whitelistedAddresses[addr], "Already enabled");
        _whitelistedAddresses[addr] = true;
        emit OnAddressEnabled(addr);
    }

    /**
     * @notice Whitelists the addresses specified.
     * @param arr The addresses to enable
     */
    function enableAddresses (address[] calldata arr) external override nonReentrant onlyOwner {
        require(arr.length > 0, "Addresses required");

        for (uint256 i; i < arr.length; i++) {
            require(arr[i] != address(0), "Invalid address");
            require(!_whitelistedAddresses[arr[i]], "Already enabled");
            _whitelistedAddresses[arr[i]] = true;
            emit OnAddressEnabled(arr[i]);
        }
    }

    /**
     * @notice Disables the address specified.
     * @param addr The address to disable
     */
    function disableAddress (address addr) external override nonReentrant onlyOwner {
        require(_whitelistedAddresses[addr], "Already disabled");
        _whitelistedAddresses[addr] = false;
        emit OnAddressDisabled(addr);
    }

    /**
     * @notice Disables the addresses specified.
     * @param arr The addresses to disable
     */
    function disableAddresses (address[] calldata arr) external override nonReentrant onlyOwner {
        for (uint256 i; i < arr.length; i++) {
            require(_whitelistedAddresses[arr[i]], "Already disabled");
            _whitelistedAddresses[arr[i]] = false;
            emit OnAddressDisabled(arr[i]);
        }
    }

    /**
     * @notice Indicates if the address is whitelisted or not.
     * @param addr The address to evaluate.
     * @return Returns true if the address is whitelisted.
     */
    function isWhitelistedAddress (address addr) external view override returns (bool) {
        return _whitelistedAddresses[addr];
    }
}


/**
 * @title Contract for managing time-locked function calls.
 */
contract TimelockedCall is ITimelockedCall, AddressWhitelist {
    struct TimelockedCallInfo {
        uint256 targetEpoch;     // The unix epoch at which the hash can be consumed
        address createdBy;       // The address of the scheduler
        address consumerAddress; // The address of the consumer
    }

    /// @notice The schedulers authorized for a given sender. (sender => scheduler => enabled/disabled)
    mapping (address => mapping(address => bool)) private whitelistedSchedulers;

    /// @notice The time-lock info of a given hash.
    mapping (bytes32 => TimelockedCallInfo) public queue;

    /// @notice The time-lock duration of every consumer address.
    mapping (address => uint256) public timeLockDuration;

    /// @notice Triggers when a hash is scheduled for the address specified.
    event HashScheduled(bytes32 h, address consumerAddress);

    /// @notice Triggers when a hash is consumed by the address specified.
    event HashConsumed(bytes32 h, address consumerAddress);

    /// @notice Triggers when a new scheduler is enabled for the consumer address specified.
    event SchedulerEnabled(address consumerAddress, address schedulerAddress);

    /// @notice Triggers when an existing scheduler is disabled for the consumer address specified.
    event SchedulerDisabled(address consumerAddress, address schedulerAddress);

    constructor(address ownerAddr) AddressWhitelist(ownerAddr) {
    }

    modifier ifSenderWhitelisted() {
        require(_whitelistedAddresses[msg.sender], "Unauthorized sender");
        _;
    }

    modifier ifTimeLockConfigured() {
        require(timeLockDuration[msg.sender] > 0, "Not configured");
        _;
    }

    /**
     * @notice Sets the initial scheduler and time-lock duration for the current message sender.
     * @param addr The address of the initial scheduler. You can add more addresses later.
     * @param newTimeLockDuration The duration of the time-lock for the current message sender.
     */
    function initScheduler(address addr, uint256 newTimeLockDuration) external override nonReentrant ifSenderWhitelisted {
        require(addr != address(0), "Address required");
        require(newTimeLockDuration > 0, "Duration required");
        require(timeLockDuration[msg.sender] == 0, "Already initialized");

        whitelistedSchedulers[msg.sender][addr] = true;
        timeLockDuration[msg.sender] = newTimeLockDuration;

        emit SchedulerEnabled(msg.sender, addr);
    }

    /**
     * @notice Authorizes the address specified to schedule calls. The calls will be consumed by the current message sender.
     * @param addr Specifies the address of the scheduler to authorize.
     */
    function enableScheduler(address addr) external override nonReentrant ifTimeLockConfigured {
        _enableScheduler(addr);
    }

    /**
     * @notice Revokes the address specified from scheduling calls for the current message sender.
     * @param addr Specifies the address of the scheduler to revoke.
     */
    function disableScheduler(address addr) external override nonReentrant ifTimeLockConfigured {
        _disableScheduler(addr);
    }

    /**
     * @notice Schedules a hash to be consumed by the address specified.
     * @param h Specifies the hash.
     * @param consumerAddr Specifies the address of the consumer.
     */
    function schedule(bytes32 h, address consumerAddr) external override nonReentrant {
        require(h != bytes32(0), "Hash required");
        require(whitelistedSchedulers[consumerAddr][msg.sender], "Unauthorized sender");
        require(timeLockDuration[consumerAddr] > 0, "Not configured");
        require(queue[h].targetEpoch == 0, "Already enqueued");
        
        queue[h] = TimelockedCallInfo({
            createdBy: msg.sender,
            consumerAddress: consumerAddr,
            targetEpoch: block.timestamp + timeLockDuration[consumerAddr]
        });

        emit HashScheduled(h, consumerAddr);
    }

    /**
     * @notice Consumes the hash specified.
     * @param h Specifies the hash.
     */
    function consume(bytes32 h) external override nonReentrant ifTimeLockConfigured {
        _consume(h);
    }

    /**
     * @notice Consumes the hash specified. The hash represents the transferOwnership function.
     * @param h Specifies the hash.
     * @param prevOwnerAddr The current owner of the contract at hand.
     * @param newOwnerAddr The address of the new owner.
     */
    function consumeOwnership(
        bytes32 h,
        address prevOwnerAddr,
        address newOwnerAddr
    ) external override nonReentrant ifTimeLockConfigured {
        _disableScheduler(prevOwnerAddr);
        _consume(h);
        _enableScheduler(newOwnerAddr);
    }

    function _consume(bytes32 h) internal {
        require(queue[h].targetEpoch > 0, "Hash not enqueued");
        require(msg.sender == queue[h].consumerAddress, "Unauthorized consumer");
        require(block.timestamp > queue[h].targetEpoch, "Timelock in place");

        delete queue[h];

        emit HashConsumed(h, msg.sender);
    }

    function _enableScheduler(address addr) internal {
        require(addr != address(0), "Address required");
        require(!whitelistedSchedulers[msg.sender][addr], "Already enabled");
        whitelistedSchedulers[msg.sender][addr] = true;
        emit SchedulerEnabled(msg.sender, addr);
    }

    function _disableScheduler(address addr) internal {
        require(addr != address(0), "Address required");
        require(whitelistedSchedulers[msg.sender][addr], "Already disabled");
        whitelistedSchedulers[msg.sender][addr] = false;
        emit SchedulerDisabled(msg.sender, addr);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"ownerAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"OwnerOnly","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"h","type":"bytes32"},{"indexed":false,"internalType":"address","name":"consumerAddress","type":"address"}],"name":"HashConsumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"h","type":"bytes32"},{"indexed":false,"internalType":"address","name":"consumerAddress","type":"address"}],"name":"HashScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"OnAddressDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"OnAddressEnabled","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":"consumerAddress","type":"address"},{"indexed":false,"internalType":"address","name":"schedulerAddress","type":"address"}],"name":"SchedulerDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"consumerAddress","type":"address"},{"indexed":false,"internalType":"address","name":"schedulerAddress","type":"address"}],"name":"SchedulerEnabled","type":"event"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"consume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"},{"internalType":"address","name":"prevOwnerAddr","type":"address"},{"internalType":"address","name":"newOwnerAddr","type":"address"}],"name":"consumeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"disableAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"arr","type":"address[]"}],"name":"disableAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"disableScheduler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"enableAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"arr","type":"address[]"}],"name":"enableAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"enableScheduler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"newTimeLockDuration","type":"uint256"}],"name":"initScheduler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelistedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"queue","outputs":[{"internalType":"uint256","name":"targetEpoch","type":"uint256"},{"internalType":"address","name":"createdBy","type":"address"},{"internalType":"address","name":"consumerAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"},{"internalType":"address","name":"consumerAddr","type":"address"}],"name":"schedule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"timeLockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100f0575f3560e01c80639eefdd8711610093578063f6fd7c8d11610063578063f6fd7c8d14610248578063f832e2151461025b578063f914d17814610288578063fcc91b341461029b575f80fd5b80639eefdd87146101fc578063af6f8c1b1461020f578063dd331c2e14610222578063f2fde38b14610235575f80fd5b80636bf85c43116100ce5780636bf85c431461015c57806377dfbea21461016f5780637c10dea6146101825780638da5cb5b146101e1575f80fd5b8063044b42e1146100f45780635036258b146101095780635fae05761461011c575b5f80fd5b61010761010236600461106d565b6102ae565b005b61010761011736600461106d565b6102ff565b61014761012a36600461106d565b6001600160a01b03165f9081526002602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61010761016a36600461108d565b6103c6565b61010761017d3660046110fe565b6105e4565b6101bc610190366004611128565b60046020525f908152604090208054600182015460029092015490916001600160a01b03908116911683565b604080519384526001600160a01b039283166020850152911690820152606001610153565b6001546040516001600160a01b039091168152602001610153565b61010761020a36600461106d565b6107f3565b61010761021d366004611128565b6108b1565b61010761023036600461113f565b6108ed565b61010761024336600461106d565b610a75565b61010761025636600461106d565b610ab1565b61027a61026936600461106d565b60056020525f908152604090205481565b604051908152602001610153565b610107610296366004611167565b610aed565b6101076102a936600461108d565b610b49565b6102b6610ca5565b335f908152600560205260409020546102ea5760405162461bcd60e51b81526004016102e1906111a0565b60405180910390fd5b6102f381610cfc565b6102fc60015f55565b50565b610307610ca5565b6001546001600160a01b0316331461033257604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b0381165f9081526002602052604090205460ff166103695760405162461bcd60e51b81526004016102e1906111c8565b6001600160a01b0381165f81815260026020908152604091829020805460ff1916905590519182527f817a22f8606c1982bfadd76a8d2f2356335b22f6731f0d5cdfdef6f033b14dc391015b60405180910390a16102fc60015f55565b6103ce610ca5565b6001546001600160a01b031633146103f957604051630b2db9b760e31b815260040160405180910390fd5b8061043b5760405162461bcd60e51b81526020600482015260126024820152711059191c995cdcd95cc81c995c5d5a5c995960721b60448201526064016102e1565b5f5b818110156105d6575f838383818110610458576104586111f2565b905060200201602081019061046d919061106d565b6001600160a01b0316036104b55760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016102e1565b60025f8484848181106104ca576104ca6111f2565b90506020020160208101906104df919061106d565b6001600160a01b0316815260208101919091526040015f205460ff16156105185760405162461bcd60e51b81526004016102e190611206565b600160025f85858581811061052f5761052f6111f2565b9050602002016020810190610544919061106d565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f36eb734aedf7abf48fbef350f1aa23aa2cf37b6ea7d7fc668e15dca0e9bb72af83838381811061059e5761059e6111f2565b90506020020160208101906105b3919061106d565b6040516001600160a01b03909116815260200160405180910390a160010161043d565b506105e060015f55565b5050565b6105ec610ca5565b816106295760405162461bcd60e51b815260206004820152600d60248201526c12185cda081c995c5d5a5c9959609a1b60448201526064016102e1565b6001600160a01b0381165f90815260036020908152604080832033845290915290205460ff166106915760405162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21039b2b73232b960691b60448201526064016102e1565b6001600160a01b0381165f908152600560205260409020546106c55760405162461bcd60e51b81526004016102e1906111a0565b5f82815260046020526040902054156107135760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195b9c5d595d595960821b60448201526064016102e1565b604080516060810182526001600160a01b0383165f908152600560205291909120548190610741904261122f565b8152336020808301919091526001600160a01b038481166040938401525f8681526004835283902084518155918401516001830180549183166001600160a01b03199283161790559383015160029092018054929091169190931617909155517f6ef595d41bb19bf4009067ebfca1e965c782641ffd735166641d1832d9955ca5906107e290849084909182526001600160a01b0316602082015260400190565b60405180910390a16105e060015f55565b6107fb610ca5565b6001546001600160a01b0316331461082657604051630b2db9b760e31b815260040160405180910390fd5b6001600160a01b0381165f9081526002602052604090205460ff161561085e5760405162461bcd60e51b81526004016102e190611206565b6001600160a01b0381165f81815260026020908152604091829020805460ff1916600117905590519182527f36eb734aedf7abf48fbef350f1aa23aa2cf37b6ea7d7fc668e15dca0e9bb72af91016103b5565b6108b9610ca5565b335f908152600560205260409020546108e45760405162461bcd60e51b81526004016102e1906111a0565b6102f381610dd0565b6108f5610ca5565b335f9081526002602052604090205460ff166109495760405162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21039b2b73232b960691b60448201526064016102e1565b6001600160a01b03821661096f5760405162461bcd60e51b81526004016102e190611254565b5f81116109b25760405162461bcd60e51b8152602060048201526011602482015270111d5c985d1a5bdb881c995c5d5a5c9959607a1b60448201526064016102e1565b335f9081526005602052604090205415610a045760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016102e1565b335f8181526003602090815260408083206001600160a01b038716808552908352818420805460ff1916600117905584845260058352928190208590558051938452908301919091527f2e1532fab4575bbd4b71ca99084eba74c2dc594c534a46ea4d8271ba87686dbb91016107e2565b610a7d610ca5565b6001546001600160a01b03163314610aa857604051630b2db9b760e31b815260040160405180910390fd5b6102f381610f38565b610ab9610ca5565b335f90815260056020526040902054610ae45760405162461bcd60e51b81526004016102e1906111a0565b6102f381610f89565b610af5610ca5565b335f90815260056020526040902054610b205760405162461bcd60e51b81526004016102e1906111a0565b610b2982610f89565b610b3283610dd0565b610b3b81610cfc565b610b4460015f55565b505050565b610b51610ca5565b6001546001600160a01b03163314610b7c57604051630b2db9b760e31b815260040160405180910390fd5b5f5b818110156105d65760025f848484818110610b9b57610b9b6111f2565b9050602002016020810190610bb0919061106d565b6001600160a01b0316815260208101919091526040015f205460ff16610be85760405162461bcd60e51b81526004016102e1906111c8565b5f60025f858585818110610bfe57610bfe6111f2565b9050602002016020810190610c13919061106d565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f817a22f8606c1982bfadd76a8d2f2356335b22f6731f0d5cdfdef6f033b14dc3838383818110610c6d57610c6d6111f2565b9050602002016020810190610c82919061106d565b6040516001600160a01b03909116815260200160405180910390a1600101610b7e565b60025f5403610cf65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102e1565b60025f55565b6001600160a01b038116610d225760405162461bcd60e51b81526004016102e190611254565b335f9081526003602090815260408083206001600160a01b038516845290915290205460ff1615610d655760405162461bcd60e51b81526004016102e190611206565b335f8181526003602090815260408083206001600160a01b03861680855290835292819020805460ff191660011790558051938452908301919091527f2e1532fab4575bbd4b71ca99084eba74c2dc594c534a46ea4d8271ba87686dbb91015b60405180910390a150565b5f81815260046020526040902054610e1e5760405162461bcd60e51b815260206004820152601160248201527012185cda081b9bdd08195b9c5d595d5959607a1b60448201526064016102e1565b5f818152600460205260409020600201546001600160a01b03163314610e7e5760405162461bcd60e51b81526020600482015260156024820152742ab730baba3437b934bd32b21031b7b739bab6b2b960591b60448201526064016102e1565b5f818152600460205260409020544211610ece5760405162461bcd60e51b815260206004820152601160248201527054696d656c6f636b20696e20706c61636560781b60448201526064016102e1565b5f8181526004602090815260408083209283556001830180546001600160a01b031990811690915560029093018054909316909255815183815233918101919091527fc0c97b5bfc2b0d319a6dadd3efddd19273d76957d4cf2c1f72697f8b589dea059101610dc5565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038116610faf5760405162461bcd60e51b81526004016102e190611254565b335f9081526003602090815260408083206001600160a01b038516845290915290205460ff16610ff15760405162461bcd60e51b81526004016102e1906111c8565b335f8181526003602090815260408083206001600160a01b03861680855290835292819020805460ff191690558051938452908301919091527f07afcfd70ee49c21e69bef23484ab1dfaba225d7d1c87fcbad238e86590972879101610dc5565b80356001600160a01b0381168114611068575f80fd5b919050565b5f6020828403121561107d575f80fd5b61108682611052565b9392505050565b5f806020838503121561109e575f80fd5b823567ffffffffffffffff8111156110b4575f80fd5b8301601f810185136110c4575f80fd5b803567ffffffffffffffff8111156110da575f80fd5b8560208260051b84010111156110ee575f80fd5b6020919091019590945092505050565b5f806040838503121561110f575f80fd5b8235915061111f60208401611052565b90509250929050565b5f60208284031215611138575f80fd5b5035919050565b5f8060408385031215611150575f80fd5b61115983611052565b946020939093013593505050565b5f805f60608486031215611179575f80fd5b8335925061118960208501611052565b915061119760408501611052565b90509250925092565b6020808252600e908201526d139bdd0818dbdb999a59dd5c995960921b604082015260600190565b60208082526010908201526f105b1c9958591e48191a5cd8589b195960821b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b6020808252600f908201526e105b1c9958591e48195b98589b1959608a1b604082015260600190565b8082018082111561124e57634e487b7160e01b5f52601160045260245ffd5b92915050565b60208082526010908201526f1059191c995cdcc81c995c5d5a5c995960821b60408201526060019056fea2646970667358221220b502bf6b4f608850a057596a716afd3824e208c5cf9e846087f8e6e2c3c5133664736f6c634300081a0033

Deployed Bytecode Sourcemap

7621:5834:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10385:132;;;;;;:::i;:::-;;:::i;:::-;;6521:240;;;;;;:::i;:::-;;:::i;7405:136::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7506:27:0;7482:4;7506:27;;;:21;:27;;;;;;;;;7405:136;;;;548:14:1;;541:22;523:41;;511:2;496:18;7405:136:0;;;;;;;;5957:447;;;;;;:::i;:::-;;:::i;11051:636::-;;;;;;:::i;:::-;;:::i;8190:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8190:52:0;;;;;;;;;;;1928:25:1;;;-1:-1:-1;;;;;1989:32:1;;;1984:2;1969:18;;1962:60;2058:32;;2038:18;;;2031:60;1916:2;1901:18;8190:52:0;1726:371:1;5042:89:0;5117:6;;5042:89;;-1:-1:-1;;;;;5117:6:0;;;2248:51:1;;2236:2;2221:18;5042:89:0;2102:203:1;5599:237:0;;;;;;:::i;:::-;;:::i;11795:110::-;;;;;;:::i;:::-;;:::i;9665:495::-;;;;;;:::i;:::-;;:::i;4777:132::-;;;;;;:::i;:::-;;:::i;10713:134::-;;;;;;:::i;:::-;;:::i;8318:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2715:25:1;;;2703:2;2688:18;8318:52:0;2569:177:1;12195:282:0;;;;;;:::i;:::-;;:::i;6881:329::-;;;;;;:::i;:::-;;:::i;10385:132::-;2693:21;:19;:21::i;:::-;9298:10:::1;9312:1;9281:28:::0;;;:16:::1;:28;::::0;;;;;9273:59:::1;;;;-1:-1:-1::0;;;9273:59:0::1;;;;;;;:::i;:::-;;;;;;;;;10487:22:::2;10504:4;10487:16;:22::i;:::-;2737:20:::0;2171:1;3299:17;:43;3116:234;2737:20;10385:132;:::o;6521:240::-;2693:21;:19;:21::i;:::-;4187:6:::1;::::0;-1:-1:-1;;;;;4187:6:0::1;4173:10;:20;4169:44;;4202:11;;-1:-1:-1::0;;;4202:11:0::1;;;;;;;;;;;4169:44;-1:-1:-1::0;;;;;6620:27:0;::::2;;::::0;;;:21:::2;:27;::::0;;;;;::::2;;6612:56;;;;-1:-1:-1::0;;;6612:56:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6679:27:0;::::2;6709:5;6679:27:::0;;;:21:::2;:27;::::0;;;;;;;;:35;;-1:-1:-1;;6679:35:0::2;::::0;;6730:23;;2248:51:1;;;6730:23:0::2;::::0;2221:18:1;6730:23:0::2;;;;;;;;2737:20:::0;2171:1;3299:17;:43;3116:234;5957:447;2693:21;:19;:21::i;:::-;4187:6:::1;::::0;-1:-1:-1;;;;;4187:6:0::1;4173:10;:20;4169:44;;4202:11;;-1:-1:-1::0;;;4202:11:0::1;;;;;;;;;;;4169:44;6067:14:::0;6059:45:::2;;;::::0;-1:-1:-1;;;6059:45:0;;4020:2:1;6059:45:0::2;::::0;::::2;4002:21:1::0;4059:2;4039:18;;;4032:30;-1:-1:-1;;;4078:18:1;;;4071:48;4136:18;;6059:45:0::2;3818:342:1::0;6059:45:0::2;6122:9;6117:280;6133:14:::0;;::::2;6117:280;;;6195:1;6177:3:::0;;6181:1;6177:6;;::::2;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6177:20:0::2;::::0;6169:48:::2;;;::::0;-1:-1:-1;;;6169:48:0;;4499:2:1;6169:48:0::2;::::0;::::2;4481:21:1::0;4538:2;4518:18;;;4511:30;-1:-1:-1;;;4557:18:1;;;4550:45;4612:18;;6169:48:0::2;4297:339:1::0;6169:48:0::2;6241:21;:29;6263:3;;6267:1;6263:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6241:29:0::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;6241:29:0;;::::2;;6240:30;6232:58;;;;-1:-1:-1::0;;;6232:58:0::2;;;;;;;:::i;:::-;6337:4;6305:21;:29;6327:3;;6331:1;6327:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6305:29:0::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;6305:29:0;:36;;-1:-1:-1;;6305:36:0::2;::::0;::::2;;::::0;;;::::2;::::0;;6361:24:::2;6378:3:::0;;6382:1;6378:6;;::::2;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6361:24;::::0;-1:-1:-1;;;;;2266:32:1;;;2248:51;;2236:2;2221:18;6361:24:0::2;;;;;;;6149:3;;6117:280;;;;2737:20:::0;2171:1;3299:17;:43;3116:234;2737:20;5957:447;;:::o;11051:636::-;2693:21;:19;:21::i;:::-;11152:1;11144:41:::1;;;::::0;-1:-1:-1;;;11144:41:0;;5187:2:1;11144:41:0::1;::::0;::::1;5169:21:1::0;5226:2;5206:18;;;5199:30;-1:-1:-1;;;5245:18:1;;;5238:43;5298:18;;11144:41:0::1;4985:337:1::0;11144:41:0::1;-1:-1:-1::0;;;;;11204:35:0;::::1;;::::0;;;:21:::1;:35;::::0;;;;;;;11240:10:::1;11204:47:::0;;;;;;;;::::1;;11196:79;;;::::0;-1:-1:-1;;;11196:79:0;;5529:2:1;11196:79:0::1;::::0;::::1;5511:21:1::0;5568:2;5548:18;;;5541:30;-1:-1:-1;;;5587:18:1;;;5580:49;5646:18;;11196:79:0::1;5327:343:1::0;11196:79:0::1;-1:-1:-1::0;;;;;11294:30:0;::::1;11327:1;11294:30:::0;;;:16:::1;:30;::::0;;;;;11286:61:::1;;;;-1:-1:-1::0;;;11286:61:0::1;;;;;;;:::i;:::-;11366:8;::::0;;;:5:::1;:8;::::0;;;;:20;:25;11358:54:::1;;;::::0;-1:-1:-1;;;11358:54:0;;5877:2:1;11358:54:0::1;::::0;::::1;5859:21:1::0;5916:2;5896:18;;;5889:30;-1:-1:-1;;;5935:18:1;;;5928:46;5991:18;;11358:54:0::1;5675:340:1::0;11358:54:0::1;11444:187;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;11589:30:0;::::1;-1:-1:-1::0;11589:30:0;;;:16:::1;:30;::::0;;;;;;11444:187;;11571:48:::1;::::0;:15:::1;:48;:::i;:::-;11444:187:::0;;11489:10:::1;11444:187;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;11444:187:0;;::::1;::::0;;;;;-1:-1:-1;11433:8:0;;;:5:::1;:8:::0;;;;;:198;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;;11433:198:0;;::::1;;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;;::::1;;::::0;;;11649:30;::::1;::::0;::::1;::::0;11439:1;;11531:12;;6421:25:1;;;-1:-1:-1;;;;;6482:32:1;6477:2;6462:18;;6455:60;6409:2;6394:18;;6247:274;11649:30:0::1;;;;;;;;2737:20:::0;2171:1;3299:17;:43;3116:234;5599:237;2693:21;:19;:21::i;:::-;4187:6:::1;::::0;-1:-1:-1;;;;;4187:6:0::1;4173:10;:20;4169:44;;4202:11;;-1:-1:-1::0;;;4202:11:0::1;;;;;;;;;;;4169:44;-1:-1:-1::0;;;;;5698:27:0;::::2;;::::0;;;:21:::2;:27;::::0;;;;;::::2;;5697:28;5689:56;;;;-1:-1:-1::0;;;5689:56:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5756:27:0;::::2;;::::0;;;:21:::2;:27;::::0;;;;;;;;:34;;-1:-1:-1;;5756:34:0::2;5786:4;5756:34;::::0;;5806:22;;2248:51:1;;;5806:22:0::2;::::0;2221:18:1;5806:22:0::2;2102:203:1::0;11795:110:0;2693:21;:19;:21::i;:::-;9298:10:::1;9312:1;9281:28:::0;;;:16:::1;:28;::::0;;;;;9273:59:::1;;;;-1:-1:-1::0;;;9273:59:0::1;;;;;;;:::i;:::-;11886:11:::2;11895:1;11886:8;:11::i;9665:495::-:0;2693:21;:19;:21::i;:::-;9167:10:::1;9145:33;::::0;;;:21:::1;:33;::::0;;;;;::::1;;9137:65;;;::::0;-1:-1:-1;;;9137:65:0;;5529:2:1;9137:65:0::1;::::0;::::1;5511:21:1::0;5568:2;5548:18;;;5541:30;-1:-1:-1;;;5587:18:1;;;5580:49;5646:18;;9137:65:0::1;5327:343:1::0;9137:65:0::1;-1:-1:-1::0;;;;;9801:18:0;::::2;9793:47;;;;-1:-1:-1::0;;;9793:47:0::2;;;;;;;:::i;:::-;9881:1;9859:19;:23;9851:53;;;::::0;-1:-1:-1;;;9851:53:0;;7073:2:1;9851:53:0::2;::::0;::::2;7055:21:1::0;7112:2;7092:18;;;7085:30;-1:-1:-1;;;7131:18:1;;;7124:47;7188:18;;9851:53:0::2;6871:341:1::0;9851:53:0::2;9940:10;9923:28;::::0;;;:16:::2;:28;::::0;;;;;:33;9915:65:::2;;;::::0;-1:-1:-1;;;9915:65:0;;7419:2:1;9915:65:0::2;::::0;::::2;7401:21:1::0;7458:2;7438:18;;;7431:30;-1:-1:-1;;;7477:18:1;;;7470:49;7536:18;;9915:65:0::2;7217:343:1::0;9915:65:0::2;10015:10;9993:33;::::0;;;:21:::2;:33;::::0;;;;;;;-1:-1:-1;;;;;9993:39:0;::::2;::::0;;;;;;;;;:46;;-1:-1:-1;;9993:46:0::2;10035:4;9993:46;::::0;;10050:28;;;:16:::2;:28:::0;;;;;;:50;;;10118:34;;7739:51:1;;;7806:18;;;7799:60;;;;10118:34:0::2;::::0;7712:18:1;10118:34:0::2;7565:300:1::0;4777:132:0;2693:21;:19;:21::i;:::-;4187:6:::1;::::0;-1:-1:-1;;;;;4187:6:0::1;4173:10;:20;4169:44;;4202:11;;-1:-1:-1::0;;;4202:11:0::1;;;;;;;;;;;4169:44;4873:28:::2;4892:8;4873:18;:28::i;10713:134::-:0;2693:21;:19;:21::i;:::-;9298:10:::1;9312:1;9281:28:::0;;;:16:::1;:28;::::0;;;;;9273:59:::1;;;;-1:-1:-1::0;;;9273:59:0::1;;;;;;;:::i;:::-;10816:23:::2;10834:4;10816:17;:23::i;12195:282::-:0;2693:21;:19;:21::i;:::-;9298:10:::1;9312:1;9281:28:::0;;;:16:::1;:28;::::0;;;;;9273:59:::1;;;;-1:-1:-1::0;;;9273:59:0::1;;;;;;;:::i;:::-;12374:32:::2;12392:13;12374:17;:32::i;:::-;12417:11;12426:1;12417:8;:11::i;:::-;12439:30;12456:12;12439:16;:30::i;:::-;2737:20:::0;2171:1;3299:17;:43;3116:234;2737:20;12195:282;;;:::o;6881:329::-;2693:21;:19;:21::i;:::-;4187:6:::1;::::0;-1:-1:-1;;;;;4187:6:0::1;4173:10;:20;4169:44;;4202:11;;-1:-1:-1::0;;;4202:11:0::1;;;;;;;;;;;4169:44;6989:9:::2;6984:219;7000:14:::0;;::::2;6984:219;;;7044:21;:29;7066:3;;7070:1;7066:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7044:29:0::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;7044:29:0;;::::2;;7036:58;;;;-1:-1:-1::0;;;7036:58:0::2;;;;;;;:::i;:::-;7141:5;7109:21;:29;7131:3;;7135:1;7131:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7109:29:0::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;7109:29:0;:37;;-1:-1:-1;;7109:37:0::2;::::0;::::2;;::::0;;;::::2;::::0;;7166:25:::2;7184:3:::0;;7188:1;7184:6;;::::2;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;7166:25;::::0;-1:-1:-1;;;;;2266:32:1;;;2248:51;;2236:2;2221:18;7166:25:0::2;;;;;;;7016:3;;6984:219;;2773:335:::0;2227:1;2907:17;;:40;2899:84;;;;-1:-1:-1;;;2899:84:0;;8072:2:1;2899:84:0;;;8054:21:1;8111:2;8091:18;;;8084:30;8150:33;8130:18;;;8123:61;8201:18;;2899:84:0;7870:355:1;2899:84:0;2227:1;3061:17;:39;2773:335::o;12839:301::-;-1:-1:-1;;;;;12907:18:0;;12899:47;;;;-1:-1:-1;;;12899:47:0;;;;;;;:::i;:::-;12988:10;12966:33;;;;:21;:33;;;;;;;;-1:-1:-1;;;;;12966:39:0;;;;;;;;;;;;12965:40;12957:68;;;;-1:-1:-1;;;12957:68:0;;;;;;;:::i;:::-;13058:10;13036:33;;;;:21;:33;;;;;;;;-1:-1:-1;;;;;13036:39:0;;;;;;;;;;;;:46;;-1:-1:-1;;13036:46:0;13078:4;13036:46;;;13098:34;;7739:51:1;;;7806:18;;;7799:60;;;;13098:34:0;;7712:18:1;13098:34:0;;;;;;;;12839:301;:::o;12485:346::-;12565:1;12542:8;;;:5;:8;;;;;:20;12534:54;;;;-1:-1:-1;;;12534:54:0;;8432:2:1;12534:54:0;;;8414:21:1;8471:2;8451:18;;;8444:30;-1:-1:-1;;;8490:18:1;;;8483:47;8547:18;;12534:54:0;8230:341:1;12534:54:0;12621:8;;;;:5;:8;;;;;:24;;;-1:-1:-1;;;;;12621:24:0;12607:10;:38;12599:72;;;;-1:-1:-1;;;12599:72:0;;8778:2:1;12599:72:0;;;8760:21:1;8817:2;8797:18;;;8790:30;-1:-1:-1;;;8836:18:1;;;8829:51;8897:18;;12599:72:0;8576:345:1;12599:72:0;12708:8;;;;:5;:8;;;;;:20;12690:15;:38;12682:68;;;;-1:-1:-1;;;12682:68:0;;9128:2:1;12682:68:0;;;9110:21:1;9167:2;9147:18;;;9140:30;-1:-1:-1;;;9186:18:1;;;9179:47;9243:18;;12682:68:0;8926:341:1;12682:68:0;12770:8;;;;:5;:8;;;;;;;;12763:15;;;;;;;;-1:-1:-1;;;;;;12763:15:0;;;;;;;;;;;;;;;;;;12796:27;;6421:25:1;;;12812:10:0;6462:18:1;;;6455:60;;;;12796:27:0;;6394:18:1;12796:27:0;6247:274:1;4241:191:0;4334:6;;;-1:-1:-1;;;;;4351:17:0;;;-1:-1:-1;;;;;;4351:17:0;;;;;;;4384:40;;4334:6;;;4351:17;4334:6;;4384:40;;4315:16;;4384:40;4304:128;4241:191;:::o;13148:304::-;-1:-1:-1;;;;;13217:18:0;;13209:47;;;;-1:-1:-1;;;13209:47:0;;;;;;;:::i;:::-;13297:10;13275:33;;;;:21;:33;;;;;;;;-1:-1:-1;;;;;13275:39:0;;;;;;;;;;;;13267:68;;;;-1:-1:-1;;;13267:68:0;;;;;;;:::i;:::-;13368:10;13388:5;13346:33;;;:21;:33;;;;;;;;-1:-1:-1;;;;;13346:39:0;;;;;;;;;;;;:47;;-1:-1:-1;;13346:47:0;;;13409:35;;7739:51:1;;;7806:18;;;7799:60;;;;13409:35:0;;7712:18:1;13409:35:0;7565:300:1;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;575:610::-;661:6;669;722:2;710:9;701:7;697:23;693:32;690:52;;;738:1;735;728:12;690:52;778:9;765:23;811:18;803:6;800:30;797:50;;;843:1;840;833:12;797:50;866:22;;919:4;911:13;;907:27;-1:-1:-1;897:55:1;;948:1;945;938:12;897:55;988:2;975:16;1014:18;1006:6;1003:30;1000:50;;;1046:1;1043;1036:12;1000:50;1099:7;1094:2;1084:6;1081:1;1077:14;1073:2;1069:23;1065:32;1062:45;1059:65;;;1120:1;1117;1110:12;1059:65;1151:2;1143:11;;;;;1173:6;;-1:-1:-1;575:610:1;-1:-1:-1;;;575:610:1:o;1190:300::-;1258:6;1266;1319:2;1307:9;1298:7;1294:23;1290:32;1287:52;;;1335:1;1332;1325:12;1287:52;1380:23;;;-1:-1:-1;1446:38:1;1480:2;1465:18;;1446:38;:::i;:::-;1436:48;;1190:300;;;;;:::o;1495:226::-;1554:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:52;;;1623:1;1620;1613:12;1575:52;-1:-1:-1;1668:23:1;;1495:226;-1:-1:-1;1495:226:1:o;2310:254::-;2378:6;2386;2439:2;2427:9;2418:7;2414:23;2410:32;2407:52;;;2455:1;2452;2445:12;2407:52;2478:29;2497:9;2478:29;:::i;:::-;2468:39;2554:2;2539:18;;;;2526:32;;-1:-1:-1;;;2310:254:1:o;2751:374::-;2828:6;2836;2844;2897:2;2885:9;2876:7;2872:23;2868:32;2865:52;;;2913:1;2910;2903:12;2865:52;2958:23;;;-1:-1:-1;3024:38:1;3058:2;3043:18;;3024:38;:::i;:::-;3014:48;;3081:38;3115:2;3104:9;3100:18;3081:38;:::i;:::-;3071:48;;2751:374;;;;;:::o;3130:338::-;3332:2;3314:21;;;3371:2;3351:18;;;3344:30;-1:-1:-1;;;3405:2:1;3390:18;;3383:44;3459:2;3444:18;;3130:338::o;3473:340::-;3675:2;3657:21;;;3714:2;3694:18;;;3687:30;-1:-1:-1;;;3748:2:1;3733:18;;3726:46;3804:2;3789:18;;3473:340::o;4165:127::-;4226:10;4221:3;4217:20;4214:1;4207:31;4257:4;4254:1;4247:15;4281:4;4278:1;4271:15;4641:339;4843:2;4825:21;;;4882:2;4862:18;;;4855:30;-1:-1:-1;;;4916:2:1;4901:18;;4894:45;4971:2;4956:18;;4641:339::o;6020:222::-;6085:9;;;6106:10;;;6103:133;;;6158:10;6153:3;6149:20;6146:1;6139:31;6193:4;6190:1;6183:15;6221:4;6218:1;6211:15;6103:133;6020:222;;;;:::o;6526:340::-;6728:2;6710:21;;;6767:2;6747:18;;;6740:30;-1:-1:-1;;;6801:2:1;6786:18;;6779:46;6857:2;6842:18;;6526:340::o

Swarm Source

ipfs://b502bf6b4f608850a057596a716afd3824e208c5cf9e846087f8e6e2c3c51336

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
Loading...
Loading
[ 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.