ETH Price: $2,113.58 (+2.37%)
Gas: 0.15 Gwei

Contract

0x92a27C4e5e35cFEa112ACaB53851Ec70e2D99a8D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

1 Internal Transaction found.

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x61012060184359722023-10-26 17:47:23860 days ago1698342443  Contract Creation0 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

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

Contract Name:
TopUpAllowedRecipients

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity Multiple files format)

File 1 of 8: TopUpAllowedRecipients.sol
// SPDX-FileCopyrightText: 2022 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.4;

import "TrustedCaller.sol";
import "IAllowedRecipientsRegistry.sol";
import "IAllowedTokensRegistry.sol";
import "IFinance.sol";
import "EVMScriptCreator.sol";
import "IEVMScriptFactory.sol";
import "IEasyTrack.sol";

/// @notice Creates EVMScript to top up allowed recipients addresses within the current spendable balance
contract TopUpAllowedRecipients is TrustedCaller, IEVMScriptFactory {
    // -------------
    // ERRORS
    // -------------
    string private constant ERROR_LENGTH_MISMATCH = "LENGTH_MISMATCH";
    string private constant ERROR_EMPTY_DATA = "EMPTY_DATA";
    string private constant ERROR_ZERO_AMOUNT = "ZERO_AMOUNT";
    string private constant ERROR_TOKEN_NOT_ALLOWED = "TOKEN_NOT_ALLOWED";
    string private constant ERROR_RECIPIENT_NOT_ALLOWED = "RECIPIENT_NOT_ALLOWED";
    string private constant ERROR_ZERO_RECIPIENT = "ZERO_RECIPIENT";
    string private constant ERROR_SUM_EXCEEDS_SPENDABLE_BALANCE = "SUM_EXCEEDS_SPENDABLE_BALANCE";

    // -------------
    // VARIABLES
    // -------------

    /// @notice Address of EasyTrack contract
    IEasyTrack public immutable easyTrack;

    /// @notice Address of Aragon's Finance contract
    IFinance public immutable finance;

    /// @notice Address of AllowedRecipientsRegistry contract
    IAllowedRecipientsRegistry public immutable allowedRecipientsRegistry;

    /// @notice Address of AllowedTokensRegistry contract
    IAllowedTokensRegistry public immutable allowedTokensRegistry;

    // -------------
    // CONSTRUCTOR
    // -------------

    /// @param _trustedCaller Address that has access to certain methods.
    ///     Set once on deployment and can't be changed.
    /// @param _allowedRecipientsRegistry Address of AllowedRecipientsRegistry contract
    /// @param _allowedTokensRegistry Address of AllowedTokensRegistry contract
    /// @param _finance Address of Aragon's Finance contract
    /// @param _easyTrack Address of EasyTrack contract
    constructor(
        address _trustedCaller,
        address _allowedRecipientsRegistry,
        address _allowedTokensRegistry,
        address _finance,
        address _easyTrack
    ) TrustedCaller(_trustedCaller) {
        finance = IFinance(_finance);
        allowedRecipientsRegistry = IAllowedRecipientsRegistry(_allowedRecipientsRegistry);
        allowedTokensRegistry = IAllowedTokensRegistry(_allowedTokensRegistry);
        easyTrack = IEasyTrack(_easyTrack);
    }

    // -------------
    // EXTERNAL METHODS
    // -------------

    /// @notice Creates EVMScript to top up allowed recipients addresses
    /// @param _creator Address who creates EVMScript
    /// @param _evmScriptCallData Encoded tuple: (address token, address[] recipients, uint256[] amounts) where
    /// token - address of token to top up
    /// recipients - addresses of recipients to top up
    /// amounts - corresponding amounts of token to transfer
    /// @dev note that the arrays below has one extra element to store limit enforcement calls
    function createEVMScript(address _creator, bytes calldata _evmScriptCallData)
        external
        view
        override
        onlyTrustedCaller(_creator)
        returns (bytes memory)
    {
        (address token, address[] memory recipients, uint256[] memory amounts) =
            _decodeEVMScriptCallData(_evmScriptCallData);
        uint256 normalizedAmount = _validateEVMScriptCallData(token, recipients, amounts);

        address[] memory to = new address[](recipients.length + 1);
        bytes4[] memory methodIds = new bytes4[](recipients.length + 1);
        bytes[] memory evmScriptsCalldata = new bytes[](recipients.length + 1);

        to[0] = address(allowedRecipientsRegistry);
        methodIds[0] = allowedRecipientsRegistry.updateSpentAmount.selector;
        evmScriptsCalldata[0] = abi.encode(normalizedAmount);

        for (uint256 i = 0; i < recipients.length; ++i) {
            to[i + 1] = address(finance);
            methodIds[i + 1] = finance.newImmediatePayment.selector;
            evmScriptsCalldata[i + 1] = abi.encode(token, recipients[i], amounts[i], "Easy Track: top up recipient");
        }

        return EVMScriptCreator.createEVMScript(to, methodIds, evmScriptsCalldata);
    }

    /// @notice Decodes call data used by createEVMScript method
    /// @param _evmScriptCallData Encoded tuple: (address[] recipients, uint256[] amounts) where
    /// recipients - addresses of recipients to top up
    /// amounts - corresponding amounts of token to transfer
    /// @return token Address of payout token
    /// @return recipients Addresses of recipients to top up
    /// @return amounts Amounts of token to transfer
    function decodeEVMScriptCallData(bytes calldata _evmScriptCallData)
        external
        pure
        returns (address token, address[] memory recipients, uint256[] memory amounts)
    {
        return _decodeEVMScriptCallData(_evmScriptCallData);
    }

    // ------------------
    // PRIVATE METHODS
    // ------------------

    function _validateEVMScriptCallData(address token, address[] memory _recipients, uint256[] memory _amounts)
        private
        view
        returns (uint256 normalizedAmount)
    {
        require(_amounts.length == _recipients.length, ERROR_LENGTH_MISMATCH);
        require(_recipients.length > 0, ERROR_EMPTY_DATA);
        require(allowedTokensRegistry.isTokenAllowed(token), ERROR_TOKEN_NOT_ALLOWED);

        uint256 totalAmount;

        for (uint256 i = 0; i < _recipients.length; ++i) {
            require(_amounts[i] > 0, ERROR_ZERO_AMOUNT);
            require(_recipients[i] != address(0), ERROR_ZERO_RECIPIENT);
            require(allowedRecipientsRegistry.isRecipientAllowed(_recipients[i]), ERROR_RECIPIENT_NOT_ALLOWED);
            totalAmount += _amounts[i];
        }

        normalizedAmount = allowedTokensRegistry.normalizeAmount(totalAmount, token);

        _validateSpendableBalance(normalizedAmount);
    }

    function _decodeEVMScriptCallData(bytes calldata _evmScriptCallData)
        private
        pure
        returns (address token, address[] memory recipients, uint256[] memory amounts)
    {
        return abi.decode(_evmScriptCallData, (address, address[], uint256[]));
    }

    function _validateSpendableBalance(uint256 _amount) private view {
        require(
            allowedRecipientsRegistry.isUnderSpendableBalance(_amount, easyTrack.motionDuration()),
            ERROR_SUM_EXCEEDS_SPENDABLE_BALANCE
        );
    }
}

File 2 of 8: EVMScriptCreator.sol
// SPDX-FileCopyrightText: 2021 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.4;

/// @author psirex
/// @notice Contains methods for convenient creation
/// of EVMScripts in EVMScript factories contracts
library EVMScriptCreator {
    // Id of default CallsScript Aragon's executor.
    bytes4 private constant SPEC_ID = hex"00000001";

    /// @notice Encodes one method call as EVMScript
    function createEVMScript(
        address _to,
        bytes4 _methodId,
        bytes memory _evmScriptCallData
    ) internal pure returns (bytes memory _commands) {
        return
            abi.encodePacked(
                SPEC_ID,
                _to,
                uint32(_evmScriptCallData.length) + 4,
                _methodId,
                _evmScriptCallData
            );
    }

    /// @notice Encodes multiple calls of the same method on one contract as EVMScript
    function createEVMScript(
        address _to,
        bytes4 _methodId,
        bytes[] memory _evmScriptCallData
    ) internal pure returns (bytes memory _evmScript) {
        for (uint256 i = 0; i < _evmScriptCallData.length; ++i) {
            _evmScript = bytes.concat(
                _evmScript,
                abi.encodePacked(
                    _to,
                    uint32(_evmScriptCallData[i].length) + 4,
                    _methodId,
                    _evmScriptCallData[i]
                )
            );
        }
        _evmScript = bytes.concat(SPEC_ID, _evmScript);
    }

    /// @notice Encodes multiple calls to different methods within the same contract as EVMScript
    function createEVMScript(
        address _to,
        bytes4[] memory _methodIds,
        bytes[] memory _evmScriptCallData
    ) internal pure returns (bytes memory _evmScript) {
        require(_methodIds.length == _evmScriptCallData.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < _methodIds.length; ++i) {
            _evmScript = bytes.concat(
                _evmScript,
                abi.encodePacked(
                    _to,
                    uint32(_evmScriptCallData[i].length) + 4,
                    _methodIds[i],
                    _evmScriptCallData[i]
                )
            );
        }
        _evmScript = bytes.concat(SPEC_ID, _evmScript);
    }

    /// @notice Encodes multiple calls to different contracts as EVMScript
    function createEVMScript(
        address[] memory _to,
        bytes4[] memory _methodIds,
        bytes[] memory _evmScriptCallData
    ) internal pure returns (bytes memory _evmScript) {
        require(_to.length == _methodIds.length, "LENGTH_MISMATCH");
        require(_to.length == _evmScriptCallData.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < _to.length; ++i) {
            _evmScript = bytes.concat(
                _evmScript,
                abi.encodePacked(
                    _to[i],
                    uint32(_evmScriptCallData[i].length) + 4,
                    _methodIds[i],
                    _evmScriptCallData[i]
                )
            );
        }
        _evmScript = bytes.concat(SPEC_ID, _evmScript);
    }
}

File 3 of 8: IAllowedRecipientsRegistry.sol
// SPDX-FileCopyrightText: 2022 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.4;

interface IAllowedRecipientsRegistry {
    function addRecipient(address _recipient, string memory _title) external;

    function renounceRole(bytes32 role, address account) external;

    function isRecipientAllowed(address _recipient) external view returns (bool);

    function setLimitParameters(uint256 _limit, uint256 _periodDurationMonths) external;

    function getLimitParameters() external view returns (uint256, uint256);

    function updateSpentAmount(uint256 _payoutAmount) external;

    function spendableBalance() external view returns (uint256);

    function hasRole(bytes32 role, address account) external view returns (bool);

    function getAllowedRecipients() external view returns (address[] memory);

    function bokkyPooBahsDateTimeContract() external view returns (address);

    function isUnderSpendableBalance(uint256 _amount, uint256 _motionDuration) external view returns (bool);
}

File 4 of 8: IAllowedTokensRegistry.sol
// SPDX-FileCopyrightText: 2022 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.4;

interface IAllowedTokensRegistry {
    function addToken(address _token) external;
    
    function removeToken(address _token) external;

    function renounceRole(bytes32 role, address account) external;

    function isTokenAllowed(address _token) external view returns (bool);

    function hasRole(bytes32 role, address account) external view returns (bool);

    function getAllowedTokens() external view returns (address[] memory);

    function decimals() external view returns (uint8);

    function normalizeAmount(uint256 _amount, address _token) external view returns (uint256);
}

File 5 of 8: IEasyTrack.sol
// SPDX-FileCopyrightText: 2022 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.4;

interface IEasyTrack {
    function motionDuration() external view returns (uint256);
    function evmScriptExecutor() external view returns (address);
}

File 6 of 8: IEVMScriptFactory.sol
// SPDX-FileCopyrightText: 2021 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.4;

/// @author psirex
/// @notice Interface which every EVMScript factory used in EasyTrack contract has to implement
interface IEVMScriptFactory {
    function createEVMScript(address _creator, bytes memory _evmScriptCallData)
        external
        returns (bytes memory);
}

File 7 of 8: IFinance.sol
// SPDX-FileCopyrightText: 2021 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.4;

/// @author psirex
/// @notice Interface of method from Aragon's Finance contract to create a new payment
interface IFinance {
    function newImmediatePayment(
        address _token,
        address _receiver,
        uint256 _amount,
        string memory _reference
    ) external;
}

File 8 of 8: TrustedCaller.sol
// SPDX-FileCopyrightText: 2021 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.4;

/// @author psirex
/// @notice A helper contract contains logic to validate that only a trusted caller has access to certain methods.
/// @dev Trusted caller set once on deployment and can't be changed.
contract TrustedCaller {
    string private constant ERROR_TRUSTED_CALLER_IS_ZERO_ADDRESS = "TRUSTED_CALLER_IS_ZERO_ADDRESS";
    string private constant ERROR_CALLER_IS_FORBIDDEN = "CALLER_IS_FORBIDDEN";

    address public immutable trustedCaller;

    constructor(address _trustedCaller) {
        require(_trustedCaller != address(0), ERROR_TRUSTED_CALLER_IS_ZERO_ADDRESS);
        trustedCaller = _trustedCaller;
    }

    modifier onlyTrustedCaller(address _caller) {
        require(_caller == trustedCaller, ERROR_CALLER_IS_FORBIDDEN);
        _;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_trustedCaller","type":"address"},{"internalType":"address","name":"_allowedRecipientsRegistry","type":"address"},{"internalType":"address","name":"_allowedTokensRegistry","type":"address"},{"internalType":"address","name":"_finance","type":"address"},{"internalType":"address","name":"_easyTrack","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"allowedRecipientsRegistry","outputs":[{"internalType":"contract IAllowedRecipientsRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowedTokensRegistry","outputs":[{"internalType":"contract IAllowedTokensRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_creator","type":"address"},{"internalType":"bytes","name":"_evmScriptCallData","type":"bytes"}],"name":"createEVMScript","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_evmScriptCallData","type":"bytes"}],"name":"decodeEVMScriptCallData","outputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"easyTrack","outputs":[{"internalType":"contract IEasyTrack","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finance","outputs":[{"internalType":"contract IFinance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedCaller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

0x6101206040523480156200001257600080fd5b5060405162001500380380620015008339810160408190526200003591620000f5565b60408051808201909152601e81527f545255535445445f43414c4c45525f49535f5a45524f5f414444524553530000602082015285906001600160a01b0382166200009e5760405162461bcd60e51b815260040162000095919062000165565b60405180910390fd5b506001600160601b0319606091821b811660805292811b831660c05293841b821660e05291831b811661010052911b1660a05250620001bd565b80516001600160a01b0381168114620000f057600080fd5b919050565b600080600080600060a086880312156200010e57600080fd5b6200011986620000d8565b94506200012960208701620000d8565b93506200013960408701620000d8565b92506200014960608701620000d8565b91506200015960808701620000d8565b90509295509295909350565b600060208083528351808285015260005b81811015620001945785810183015185820160400152820162000176565b81811115620001a7576000604083870101525b50601f01601f1916929092016040019392505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6112ba62000246600039600081816087015281816106a301526109b8015260008181610162015281816103780152818161084b0152610bcc01526000818160f201526104440152600081816101190152610bfc01526000818160cb01526101c501526112ba6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c368df7e1161005b578063c368df7e14610114578063ecf7c6901461013b578063fdcceb141461015d578063fea21c9c1461018457600080fd5b80630db94bba14610082578063268f0760146100c6578063313b7b19146100ed575b600080fd5b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b61014e610149366004610f6d565b6101a4565b6040516100bd939291906110ac565b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b610197610192366004610eef565b6101c0565b6040516100bd9190611140565b60006060806101b385856105de565b9250925092509250925092565b6060837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316146040518060400160405280601381526020017221a0a62622a92fa4a9afa327a92124a22222a760691b8152509061024b5760405162461bcd60e51b81526004016102429190611140565b60405180910390fd5b50600080600061025b87876105de565b925092509250600061026e8484846105ef565b905060008351600161028091906111a8565b67ffffffffffffffff81111561029857610298611256565b6040519080825280602002602001820160405280156102c1578160200160208202803683370190505b5090506000845160016102d491906111a8565b67ffffffffffffffff8111156102ec576102ec611256565b604051908082528060200260200182016040528015610315578160200160208202803683370190505b50905060008551600161032891906111a8565b67ffffffffffffffff81111561034057610340611256565b60405190808252806020026020018201604052801561037357816020015b606081526020019060019003908161035e5790505b5090507f0000000000000000000000000000000000000000000000000000000000000000836000815181106103aa576103aa611240565b60200260200101906001600160a01b031690816001600160a01b031681525050636667122960e01b826000815181106103e5576103e5611240565b6001600160e01b03199290921660209283029190910182015260408051918201869052016040516020818303038152906040528160008151811061042b5761042b611240565b602002602001018190525060005b86518110156105c0577f00000000000000000000000000000000000000000000000000000000000000008461046f8360016111a8565b8151811061047f5761047f611240565b6001600160a01b0390921660209283029190910190910152637b1b242360e11b836104ab8360016111a8565b815181106104bb576104bb611240565b60200260200101906001600160e01b03191690816001600160e01b03191681525050878782815181106104f0576104f0611240565b602002602001015187838151811061050a5761050a611240565b6020026020010151604051602001610578939291906001600160a01b0393841681529190921660208201526040810191909152608060608201819052601c908201527f4561737920547261636b3a20746f7020757020726563697069656e740000000060a082015260c00190565b60408051601f19818403018152919052826105948360016111a8565b815181106105a4576105a4611240565b6020026020010181905250806105b99061120f565b9050610439565b506105cc838383610a3d565b9850505050505050505b509392505050565b60006060806101b384860186610e12565b600082518251146040518060400160405280600f81526020016e0988a9c8ea890be9a92a69a82a8869608b1b8152509061063c5760405162461bcd60e51b81526004016102429190611140565b5060008351116040518060400160405280600a815260200169454d5054595f4441544160b01b815250906106835760405162461bcd60e51b81526004016102429190611140565b5060405163f9eaee0d60e01b81526001600160a01b0385811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063f9eaee0d9060240160206040518083038186803b1580156106e557600080fd5b505afa1580156106f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071d9190610f44565b604051806040016040528060118152602001701513d2d15397d393d517d0531313d5d151607a1b815250906107655760405162461bcd60e51b81526004016102429190611140565b506000805b845181101561099157600084828151811061078757610787611240565b6020026020010151116040518060400160405280600b81526020016a16915493d7d05353d5539560aa1b815250906107d25760405162461bcd60e51b81526004016102429190611140565b5060006001600160a01b03168582815181106107f0576107f0611240565b60200260200101516001600160a01b031614156040518060400160405280600e81526020016d16915493d7d49150d2541251539560921b815250906108485760405162461bcd60e51b81526004016102429190611140565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638400c30786838151811061088a5761088a611240565b60200260200101516040518263ffffffff1660e01b81526004016108bd91906001600160a01b0391909116815260200190565b60206040518083038186803b1580156108d557600080fd5b505afa1580156108e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090d9190610f44565b60405180604001604052806015815260200174149150d2541251539517d393d517d0531313d5d151605a1b815250906109595760405162461bcd60e51b81526004016102429190611140565b5083818151811061096c5761096c611240565b60200260200101518261097f91906111a8565b915061098a8161120f565b905061076a565b50604051630d03d2a760e11b8152600481018290526001600160a01b0386811660248301527f00000000000000000000000000000000000000000000000000000000000000001690631a07a54e9060440160206040518083038186803b1580156109fa57600080fd5b505afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a329190610faf565b91506105d682610bca565b60608251845114610a825760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610242565b8151845114610ac55760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610242565b60005b8451811015610b9a5781858281518110610ae457610ae4611240565b6020026020010151848381518110610afe57610afe611240565b6020026020010151516004610b1391906111c0565b868481518110610b2557610b25611240565b6020026020010151868581518110610b3f57610b3f611240565b6020026020010151604051602001610b5a9493929190610ff4565b60408051601f1981840301815290829052610b78929160200161107d565b604051602081830303815290604052915080610b939061120f565b9050610ac8565b50600160e01b81604051602001610bb292919061104c565b60405160208183030381529060405290509392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ba578ab827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166364993a736040518163ffffffff1660e01b815260040160206040518083038186803b158015610c5357600080fd5b505afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b9190610faf565b6040516001600160e01b031960e085901b1681526004810192909252602482015260440160206040518083038186803b158015610cc757600080fd5b505afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff9190610f44565b6040518060400160405280601d81526020017f53554d5f455843454544535f5350454e4441424c455f42414c414e434500000081525090610d535760405162461bcd60e51b81526004016102429190611140565b5050565b600082601f830112610d6857600080fd5b81356020610d7d610d7883611184565b611153565b80838252828201915082860187848660051b8901011115610d9d57600080fd5b60005b85811015610dbc57813584529284019290840190600101610da0565b5090979650505050505050565b60008083601f840112610ddb57600080fd5b50813567ffffffffffffffff811115610df357600080fd5b602083019150836020828501011115610e0b57600080fd5b9250929050565b600080600060608486031215610e2757600080fd5b8335610e328161126c565b925060208481013567ffffffffffffffff80821115610e5057600080fd5b818701915087601f830112610e6457600080fd5b8135610e72610d7882611184565b8082825285820191508585018b878560051b8801011115610e9257600080fd5b600095505b83861015610ebe578035610eaa8161126c565b835260019590950194918601918601610e97565b50965050506040870135925080831115610ed757600080fd5b5050610ee586828701610d57565b9150509250925092565b600080600060408486031215610f0457600080fd5b8335610f0f8161126c565b9250602084013567ffffffffffffffff811115610f2b57600080fd5b610f3786828701610dc9565b9497909650939450505050565b600060208284031215610f5657600080fd5b81518015158114610f6657600080fd5b9392505050565b60008060208385031215610f8057600080fd5b823567ffffffffffffffff811115610f9757600080fd5b610fa385828601610dc9565b90969095509350505050565b600060208284031215610fc157600080fd5b5051919050565b60008151808452610fe08160208601602086016111df565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606086901b1681526001600160e01b031960e085901b8116601483015283166018820152815160009061103c81601c8501602087016111df565b91909101601c0195945050505050565b6001600160e01b031983168152815160009061106f8160048501602087016111df565b919091016004019392505050565b6000835161108f8184602088016111df565b8351908301906110a38183602088016111df565b01949350505050565b6001600160a01b038481168252606060208084018290528551918401829052600092868201929091906080860190855b818110156110fa5785518516835294830194918301916001016110dc565b5050858103604087015286518082529082019350915080860160005b8381101561113257815185529382019390820190600101611116565b509298975050505050505050565b602081526000610f666020830184610fc8565b604051601f8201601f1916810167ffffffffffffffff8111828210171561117c5761117c611256565b604052919050565b600067ffffffffffffffff82111561119e5761119e611256565b5060051b60200190565b600082198211156111bb576111bb61122a565b500190565b600063ffffffff8083168185168083038211156110a3576110a361122a565b60005b838110156111fa5781810151838201526020016111e2565b83811115611209576000848401525b50505050565b60006000198214156112235761122361122a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461128157600080fd5b5056fea2646970667358221220dc7c1789f4d68a3117744d9b666c30aed4662d0626395f66b8e95c67f46d3e8c64736f6c6343000806003300000000000000000000000017f6b2c738a63a8d3a113a228cfd0b373244633d000000000000000000000000dffcd3bf14796a62a804c1b16f877cf7120379db0000000000000000000000004ac40c34f8992bb1e5e856a448792158022551ca000000000000000000000000b9e5cbb9ca5b0d659238807e84d0176930753d86000000000000000000000000f0211b7660680b49de1a7e9f25c65660f0a13fea

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c368df7e1161005b578063c368df7e14610114578063ecf7c6901461013b578063fdcceb141461015d578063fea21c9c1461018457600080fd5b80630db94bba14610082578063268f0760146100c6578063313b7b19146100ed575b600080fd5b6100a97f0000000000000000000000004ac40c34f8992bb1e5e856a448792158022551ca81565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a97f00000000000000000000000017f6b2c738a63a8d3a113a228cfd0b373244633d81565b6100a97f000000000000000000000000b9e5cbb9ca5b0d659238807e84d0176930753d8681565b6100a97f000000000000000000000000f0211b7660680b49de1a7e9f25c65660f0a13fea81565b61014e610149366004610f6d565b6101a4565b6040516100bd939291906110ac565b6100a97f000000000000000000000000dffcd3bf14796a62a804c1b16f877cf7120379db81565b610197610192366004610eef565b6101c0565b6040516100bd9190611140565b60006060806101b385856105de565b9250925092509250925092565b6060837f00000000000000000000000017f6b2c738a63a8d3a113a228cfd0b373244633d6001600160a01b0316816001600160a01b0316146040518060400160405280601381526020017221a0a62622a92fa4a9afa327a92124a22222a760691b8152509061024b5760405162461bcd60e51b81526004016102429190611140565b60405180910390fd5b50600080600061025b87876105de565b925092509250600061026e8484846105ef565b905060008351600161028091906111a8565b67ffffffffffffffff81111561029857610298611256565b6040519080825280602002602001820160405280156102c1578160200160208202803683370190505b5090506000845160016102d491906111a8565b67ffffffffffffffff8111156102ec576102ec611256565b604051908082528060200260200182016040528015610315578160200160208202803683370190505b50905060008551600161032891906111a8565b67ffffffffffffffff81111561034057610340611256565b60405190808252806020026020018201604052801561037357816020015b606081526020019060019003908161035e5790505b5090507f000000000000000000000000dffcd3bf14796a62a804c1b16f877cf7120379db836000815181106103aa576103aa611240565b60200260200101906001600160a01b031690816001600160a01b031681525050636667122960e01b826000815181106103e5576103e5611240565b6001600160e01b03199290921660209283029190910182015260408051918201869052016040516020818303038152906040528160008151811061042b5761042b611240565b602002602001018190525060005b86518110156105c0577f000000000000000000000000b9e5cbb9ca5b0d659238807e84d0176930753d868461046f8360016111a8565b8151811061047f5761047f611240565b6001600160a01b0390921660209283029190910190910152637b1b242360e11b836104ab8360016111a8565b815181106104bb576104bb611240565b60200260200101906001600160e01b03191690816001600160e01b03191681525050878782815181106104f0576104f0611240565b602002602001015187838151811061050a5761050a611240565b6020026020010151604051602001610578939291906001600160a01b0393841681529190921660208201526040810191909152608060608201819052601c908201527f4561737920547261636b3a20746f7020757020726563697069656e740000000060a082015260c00190565b60408051601f19818403018152919052826105948360016111a8565b815181106105a4576105a4611240565b6020026020010181905250806105b99061120f565b9050610439565b506105cc838383610a3d565b9850505050505050505b509392505050565b60006060806101b384860186610e12565b600082518251146040518060400160405280600f81526020016e0988a9c8ea890be9a92a69a82a8869608b1b8152509061063c5760405162461bcd60e51b81526004016102429190611140565b5060008351116040518060400160405280600a815260200169454d5054595f4441544160b01b815250906106835760405162461bcd60e51b81526004016102429190611140565b5060405163f9eaee0d60e01b81526001600160a01b0385811660048301527f0000000000000000000000004ac40c34f8992bb1e5e856a448792158022551ca169063f9eaee0d9060240160206040518083038186803b1580156106e557600080fd5b505afa1580156106f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071d9190610f44565b604051806040016040528060118152602001701513d2d15397d393d517d0531313d5d151607a1b815250906107655760405162461bcd60e51b81526004016102429190611140565b506000805b845181101561099157600084828151811061078757610787611240565b6020026020010151116040518060400160405280600b81526020016a16915493d7d05353d5539560aa1b815250906107d25760405162461bcd60e51b81526004016102429190611140565b5060006001600160a01b03168582815181106107f0576107f0611240565b60200260200101516001600160a01b031614156040518060400160405280600e81526020016d16915493d7d49150d2541251539560921b815250906108485760405162461bcd60e51b81526004016102429190611140565b507f000000000000000000000000dffcd3bf14796a62a804c1b16f877cf7120379db6001600160a01b0316638400c30786838151811061088a5761088a611240565b60200260200101516040518263ffffffff1660e01b81526004016108bd91906001600160a01b0391909116815260200190565b60206040518083038186803b1580156108d557600080fd5b505afa1580156108e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090d9190610f44565b60405180604001604052806015815260200174149150d2541251539517d393d517d0531313d5d151605a1b815250906109595760405162461bcd60e51b81526004016102429190611140565b5083818151811061096c5761096c611240565b60200260200101518261097f91906111a8565b915061098a8161120f565b905061076a565b50604051630d03d2a760e11b8152600481018290526001600160a01b0386811660248301527f0000000000000000000000004ac40c34f8992bb1e5e856a448792158022551ca1690631a07a54e9060440160206040518083038186803b1580156109fa57600080fd5b505afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a329190610faf565b91506105d682610bca565b60608251845114610a825760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610242565b8151845114610ac55760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610242565b60005b8451811015610b9a5781858281518110610ae457610ae4611240565b6020026020010151848381518110610afe57610afe611240565b6020026020010151516004610b1391906111c0565b868481518110610b2557610b25611240565b6020026020010151868581518110610b3f57610b3f611240565b6020026020010151604051602001610b5a9493929190610ff4565b60408051601f1981840301815290829052610b78929160200161107d565b604051602081830303815290604052915080610b939061120f565b9050610ac8565b50600160e01b81604051602001610bb292919061104c565b60405160208183030381529060405290509392505050565b7f000000000000000000000000dffcd3bf14796a62a804c1b16f877cf7120379db6001600160a01b0316634ba578ab827f000000000000000000000000f0211b7660680b49de1a7e9f25c65660f0a13fea6001600160a01b03166364993a736040518163ffffffff1660e01b815260040160206040518083038186803b158015610c5357600080fd5b505afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b9190610faf565b6040516001600160e01b031960e085901b1681526004810192909252602482015260440160206040518083038186803b158015610cc757600080fd5b505afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff9190610f44565b6040518060400160405280601d81526020017f53554d5f455843454544535f5350454e4441424c455f42414c414e434500000081525090610d535760405162461bcd60e51b81526004016102429190611140565b5050565b600082601f830112610d6857600080fd5b81356020610d7d610d7883611184565b611153565b80838252828201915082860187848660051b8901011115610d9d57600080fd5b60005b85811015610dbc57813584529284019290840190600101610da0565b5090979650505050505050565b60008083601f840112610ddb57600080fd5b50813567ffffffffffffffff811115610df357600080fd5b602083019150836020828501011115610e0b57600080fd5b9250929050565b600080600060608486031215610e2757600080fd5b8335610e328161126c565b925060208481013567ffffffffffffffff80821115610e5057600080fd5b818701915087601f830112610e6457600080fd5b8135610e72610d7882611184565b8082825285820191508585018b878560051b8801011115610e9257600080fd5b600095505b83861015610ebe578035610eaa8161126c565b835260019590950194918601918601610e97565b50965050506040870135925080831115610ed757600080fd5b5050610ee586828701610d57565b9150509250925092565b600080600060408486031215610f0457600080fd5b8335610f0f8161126c565b9250602084013567ffffffffffffffff811115610f2b57600080fd5b610f3786828701610dc9565b9497909650939450505050565b600060208284031215610f5657600080fd5b81518015158114610f6657600080fd5b9392505050565b60008060208385031215610f8057600080fd5b823567ffffffffffffffff811115610f9757600080fd5b610fa385828601610dc9565b90969095509350505050565b600060208284031215610fc157600080fd5b5051919050565b60008151808452610fe08160208601602086016111df565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606086901b1681526001600160e01b031960e085901b8116601483015283166018820152815160009061103c81601c8501602087016111df565b91909101601c0195945050505050565b6001600160e01b031983168152815160009061106f8160048501602087016111df565b919091016004019392505050565b6000835161108f8184602088016111df565b8351908301906110a38183602088016111df565b01949350505050565b6001600160a01b038481168252606060208084018290528551918401829052600092868201929091906080860190855b818110156110fa5785518516835294830194918301916001016110dc565b5050858103604087015286518082529082019350915080860160005b8381101561113257815185529382019390820190600101611116565b509298975050505050505050565b602081526000610f666020830184610fc8565b604051601f8201601f1916810167ffffffffffffffff8111828210171561117c5761117c611256565b604052919050565b600067ffffffffffffffff82111561119e5761119e611256565b5060051b60200190565b600082198211156111bb576111bb61122a565b500190565b600063ffffffff8083168185168083038211156110a3576110a361122a565b60005b838110156111fa5781810151838201526020016111e2565b83811115611209576000848401525b50505050565b60006000198214156112235761122361122a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461128157600080fd5b5056fea2646970667358221220dc7c1789f4d68a3117744d9b666c30aed4662d0626395f66b8e95c67f46d3e8c64736f6c63430008060033

Deployed Bytecode Sourcemap

438:6172:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1529:61;;;;;;;;-1:-1:-1;;;;;5722:32:8;;;5704:51;;5692:2;5677:18;1529:61:6;;;;;;;;527:38:7;;;;;1293:33:6;;;;;1196:37;;;;;4794:257;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;1395:69::-;;;;;3120:1230;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4794:257::-;4909:13;4924:27;4953:24;5000:44;5025:18;;5000:24;:44::i;:::-;4993:51;;;;;;4794:257;;;;;:::o;3120:1230::-;3298:12;3271:8;819:13:7;-1:-1:-1;;;;;808:24:7;:7;-1:-1:-1;;;;;808:24:7;;834:25;;;;;;;;;;;;;-1:-1:-1;;;834:25:7;;;800:60;;;;;-1:-1:-1;;;800:60:7;;;;;;;;:::i;:::-;;;;;;;;;;3327:13:6::1;3342:27:::0;3371:24:::1;3411:44;3436:18;;3411:24;:44::i;:::-;3326:129;;;;;;3465:24;3492:54;3519:5;3526:10;3538:7;3492:26;:54::i;:::-;3465:81;;3557:19;3593:10;:17;3613:1;3593:21;;;;:::i;:::-;3579:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;3579:36:6::1;;3557:58;;3625:25;3666:10;:17;3686:1;3666:21;;;;:::i;:::-;3653:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;3653:35:6::1;;3625:63;;3698:33;3746:10;:17;3766:1;3746:21;;;;:::i;:::-;3734:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3698:70;;3795:25;3779:2;3782:1;3779:5;;;;;;;;:::i;:::-;;;;;;:42;-1:-1:-1::0;;;;;3779:42:6::1;;;-1:-1:-1::0;;;;;3779:42:6::1;;;::::0;::::1;3846:52;;;3831:9;3841:1;3831:12;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;3831:67:6;;;::::1;:12;::::0;;::::1;::::0;;;;;;:67;3932:28:::1;::::0;;;;::::1;9545:25:8::0;;;9518:18;3932:28:6::1;;;;;;;;;;;;3908:18;3927:1;3908:21;;;;;;;;:::i;:::-;;;;;;:52;;;;3976:9;3971:288;3995:10;:17;3991:1;:21;3971:288;;;4053:7;4033:2:::0;4036:5:::1;:1:::0;4040::::1;4036:5;:::i;:::-;4033:9;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;4033:28:6;;::::1;:9;::::0;;::::1;::::0;;;;;;;:28;-1:-1:-1;;;4075:9:6;4085:5:::1;:1:::0;4089::::1;4085:5;:::i;:::-;4075:16;;;;;;;;:::i;:::-;;;;;;:55;-1:-1:-1::0;;;;;4075:55:6::1;;;;-1:-1:-1::0;;;;;4075:55:6::1;;;;::::0;::::1;4183:5;4190:10;4201:1;4190:13;;;;;;;;:::i;:::-;;;;;;;4205:7;4213:1;4205:10;;;;;;;;:::i;:::-;;;;;;;4172:76;;;;;;;;;-1:-1:-1::0;;;;;6090:15:8;;;6072:34;;6142:15;;;;6137:2;6122:18;;6115:43;6189:2;6174:18;;6167:34;;;;6237:3;6232:2;6217:18;;6210:31;;;6278:2;6257:19;;;6250:31;6318:30;6052:3;6297:19;;6290:59;6381:3;6366:19;;6024:367;4172:76:6::1;;::::0;;-1:-1:-1;;4172:76:6;;::::1;::::0;;;;;;4144:18;4163:5:::1;:1:::0;4167::::1;4163:5;:::i;:::-;4144:25;;;;;;;;:::i;:::-;;;;;;:104;;;;4014:3;;;;:::i;:::-;;;3971:288;;;;4276:67;4309:2;4313:9;4324:18;4276:32;:67::i;:::-;4269:74;;;;;;;;;870:1:7;3120:1230:6::0;;;;;;:::o;6078:276::-;6193:13;6208:27;;6284:63;;;;6295:18;6284:63;:::i;5133:939::-;5287:24;5354:11;:18;5335:8;:15;:37;5374:21;;;;;;;;;;;;;-1:-1:-1;;;5374:21:6;;;5327:69;;;;;-1:-1:-1;;;5327:69:6;;;;;;;;:::i;:::-;;5435:1;5414:11;:18;:22;5438:16;;;;;;;;;;;;;-1:-1:-1;;;5438:16:6;;;5406:49;;;;;-1:-1:-1;;;5406:49:6;;;;;;;;:::i;:::-;-1:-1:-1;5473:43:6;;-1:-1:-1;;;5473:43:6;;-1:-1:-1;;;;;5722:32:8;;;5473:43:6;;;5704:51:8;5473:21:6;:36;;;;5677:18:8;;5473:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5518:23;;;;;;;;;;;;;-1:-1:-1;;;5518:23:6;;;5465:77;;;;;-1:-1:-1;;;5465:77:6;;;;;;;;:::i;:::-;-1:-1:-1;5553:19:6;;5583:342;5607:11;:18;5603:1;:22;5583:342;;;5668:1;5654:8;5663:1;5654:11;;;;;;;;:::i;:::-;;;;;;;:15;5671:17;;;;;;;;;;;;;-1:-1:-1;;;5671:17:6;;;5646:43;;;;;-1:-1:-1;;;5646:43:6;;;;;;;;:::i;:::-;;5737:1;-1:-1:-1;;;;;5711:28:6;:11;5723:1;5711:14;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;5711:28:6;;;5741:20;;;;;;;;;;;;;-1:-1:-1;;;5741:20:6;;;5703:59;;;;;-1:-1:-1;;;5703:59:6;;;;;;;;:::i;:::-;;5784:25;-1:-1:-1;;;;;5784:44:6;;5829:11;5841:1;5829:14;;;;;;;;:::i;:::-;;;;;;;5784:60;;;;;;;;;;;;;;-1:-1:-1;;;;;5722:32:8;;;;5704:51;;5692:2;5677:18;;5659:102;5784:60:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5846:27;;;;;;;;;;;;;-1:-1:-1;;;5846:27:6;;;5776:98;;;;;-1:-1:-1;;;5776:98:6;;;;;;;;:::i;:::-;;5903:8;5912:1;5903:11;;;;;;;;:::i;:::-;;;;;;;5888:26;;;;;:::i;:::-;;-1:-1:-1;5627:3:6;;;:::i;:::-;;;5583:342;;;-1:-1:-1;5954:57:6;;-1:-1:-1;;;5954:57:6;;;;;9755:25:8;;;-1:-1:-1;;;;;9816:32:8;;;9796:18;;;9789:60;5954:21:6;:37;;;;9728:18:8;;5954:57:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5935:76;;6022:43;6048:16;6022:25;:43::i;2396:760:0:-;2559:23;2616:10;:17;2602:3;:10;:31;2594:59;;;;-1:-1:-1;;;2594:59:0;;9257:2:8;2594:59:0;;;9239:21:8;9296:2;9276:18;;;9269:30;-1:-1:-1;;;9315:18:8;;;9308:45;9370:18;;2594:59:0;9229:165:8;2594:59:0;2685:18;:25;2671:3;:10;:39;2663:67;;;;-1:-1:-1;;;2663:67:0;;9257:2:8;2663:67:0;;;9239:21:8;9296:2;9276:18;;;9269:30;-1:-1:-1;;;9315:18:8;;;9308:45;9370:18;;2663:67:0;9229:165:8;2663:67:0;2746:9;2741:353;2765:3;:10;2761:1;:14;2741:353;;;2839:10;2905:3;2909:1;2905:6;;;;;;;;:::i;:::-;;;;;;;2940:18;2959:1;2940:21;;;;;;;;:::i;:::-;;;;;;;:28;2972:1;2933:40;;;;:::i;:::-;2995:10;3006:1;2995:13;;;;;;;;:::i;:::-;;;;;;;3030:18;3049:1;3030:21;;;;;;;;:::i;:::-;;;;;;;2867:202;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2867:202:0;;;;;;;;;;2809:274;;;2867:202;2809:274;;:::i;:::-;;;;;;;;;;;;;2796:287;;2777:3;;;;:::i;:::-;;;2741:353;;;;-1:-1:-1;;;3138:10:0;3116:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3103:46;;2396:760;;;;;:::o;6360:248:6:-;6456:25;-1:-1:-1;;;;;6456:49:6;;6506:7;6515:9;-1:-1:-1;;;;;6515:24:6;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6456:86;;-1:-1:-1;;;;;;6456:86:6;;;;;;;;;;10034:25:8;;;;10075:18;;;10068:34;10007:18;;6456:86:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6556:35;;;;;;;;;;;;;;;;;6435:166;;;;;-1:-1:-1;;;6435:166:6;;;;;;;;:::i;:::-;;6360:248;:::o;14:673:8:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;139:1;136;129:12;88:2;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:2;;;463:1;460;453:12;406:2;485:1;495:163;509:2;506:1;503:9;495:163;;;566:17;;554:30;;604:12;;;;636;;;;527:1;520:9;495:163;;;-1:-1:-1;676:5:8;;78:609;-1:-1:-1;;;;;;;78:609:8:o;692:347::-;743:8;753:6;807:3;800:4;792:6;788:17;784:27;774:2;;825:1;822;815:12;774:2;-1:-1:-1;848:20:8;;891:18;880:30;;877:2;;;923:1;920;913:12;877:2;960:4;952:6;948:17;936:29;;1012:3;1005:4;996:6;988;984:19;980:30;977:39;974:2;;;1029:1;1026;1019:12;974:2;764:275;;;;;:::o;1044:1373::-;1179:6;1187;1195;1248:2;1236:9;1227:7;1223:23;1219:32;1216:2;;;1264:1;1261;1254:12;1216:2;1303:9;1290:23;1322:31;1347:5;1322:31;:::i;:::-;1372:5;-1:-1:-1;1396:2:8;1434:18;;;1421:32;1472:18;1502:14;;;1499:2;;;1529:1;1526;1519:12;1499:2;1567:6;1556:9;1552:22;1542:32;;1612:7;1605:4;1601:2;1597:13;1593:27;1583:2;;1634:1;1631;1624:12;1583:2;1670;1657:16;1693:60;1709:43;1749:2;1709:43;:::i;1693:60::-;1775:3;1799:2;1794:3;1787:15;1827:2;1822:3;1818:12;1811:19;;1858:2;1854;1850:11;1906:7;1901:2;1895;1892:1;1888:10;1884:2;1880:19;1876:28;1873:41;1870:2;;;1927:1;1924;1917:12;1870:2;1949:1;1940:10;;1959:244;1973:2;1970:1;1967:9;1959:244;;;2046:3;2033:17;2063:33;2088:7;2063:33;:::i;:::-;2109:20;;1991:1;1984:9;;;;;2149:12;;;;2181;;1959:244;;;-1:-1:-1;2222:5:8;-1:-1:-1;;;2280:2:8;2265:18;;2252:32;;-1:-1:-1;2296:16:8;;;2293:2;;;2325:1;2322;2315:12;2293:2;;;2348:63;2403:7;2392:8;2381:9;2377:24;2348:63;:::i;:::-;2338:73;;;1206:1211;;;;;:::o;2422:544::-;2501:6;2509;2517;2570:2;2558:9;2549:7;2545:23;2541:32;2538:2;;;2586:1;2583;2576:12;2538:2;2625:9;2612:23;2644:31;2669:5;2644:31;:::i;:::-;2694:5;-1:-1:-1;2750:2:8;2735:18;;2722:32;2777:18;2766:30;;2763:2;;;2809:1;2806;2799:12;2763:2;2848:58;2898:7;2889:6;2878:9;2874:22;2848:58;:::i;:::-;2528:438;;2925:8;;-1:-1:-1;2822:84:8;;-1:-1:-1;;;;2528:438:8:o;2971:277::-;3038:6;3091:2;3079:9;3070:7;3066:23;3062:32;3059:2;;;3107:1;3104;3097:12;3059:2;3139:9;3133:16;3192:5;3185:13;3178:21;3171:5;3168:32;3158:2;;3214:1;3211;3204:12;3158:2;3237:5;3049:199;-1:-1:-1;;;3049:199:8:o;3253:409::-;3323:6;3331;3384:2;3372:9;3363:7;3359:23;3355:32;3352:2;;;3400:1;3397;3390:12;3352:2;3440:9;3427:23;3473:18;3465:6;3462:30;3459:2;;;3505:1;3502;3495:12;3459:2;3544:58;3594:7;3585:6;3574:9;3570:22;3544:58;:::i;:::-;3621:8;;3518:84;;-1:-1:-1;3342:320:8;-1:-1:-1;;;;3342:320:8:o;3667:184::-;3737:6;3790:2;3778:9;3769:7;3765:23;3761:32;3758:2;;;3806:1;3803;3796:12;3758:2;-1:-1:-1;3829:16:8;;3748:103;-1:-1:-1;3748:103:8:o;3856:257::-;3897:3;3935:5;3929:12;3962:6;3957:3;3950:19;3978:63;4034:6;4027:4;4022:3;4018:14;4011:4;4004:5;4000:16;3978:63;:::i;:::-;4095:2;4074:15;-1:-1:-1;;4070:29:8;4061:39;;;;4102:4;4057:50;;3905:208;-1:-1:-1;;3905:208:8:o;4118:588::-;-1:-1:-1;;4365:2:8;4361:15;;;4357:53;4345:66;;-1:-1:-1;;;;;;4434:3:8;4484:16;;;4480:25;;4475:2;4466:12;;4459:47;4536:15;;4531:2;4522:12;;4515:37;4575:13;;-1:-1:-1;;4597:62:8;4575:13;4647:2;4638:12;;4631:4;4619:17;;4597:62;:::i;:::-;4679:16;;;;4697:2;4675:25;;4335:371;-1:-1:-1;;;;;4335:371:8:o;4711:::-;-1:-1:-1;;;;;;4896:33:8;;4884:46;;4953:13;;4866:3;;4975:61;4953:13;5025:1;5016:11;;5009:4;4997:17;;4975:61;:::i;:::-;5056:16;;;;5074:1;5052:24;;4874:208;-1:-1:-1;;;4874:208:8:o;5087:466::-;5262:3;5300:6;5294:13;5316:53;5362:6;5357:3;5350:4;5342:6;5338:17;5316:53;:::i;:::-;5432:13;;5391:16;;;;5454:57;5432:13;5391:16;5488:4;5476:17;;5454:57;:::i;:::-;5527:20;;5270:283;-1:-1:-1;;;;5270:283:8:o;6396:1278::-;-1:-1:-1;;;;;6760:15:8;;;6742:34;;6692:2;6795;6813:18;;;6806:30;;;6885:13;;6677:18;;;6907:22;;;6644:4;;6987:15;;;;6714:19;;6795:2;6960:3;6945:19;;;6644:4;7030:178;7044:6;7041:1;7038:13;7030:178;;;7109:13;;7105:22;;7093:35;;7183:15;;;;7148:12;;;;7066:1;7059:9;7030:178;;;-1:-1:-1;;7244:19:8;;;7239:2;7224:18;;7217:47;7314:13;;7336:21;;;7375:12;;;;-1:-1:-1;7314:13:8;-1:-1:-1;7412:15:8;;;7447:1;7457:189;7473:8;7468:3;7465:17;7457:189;;;7542:15;;7528:30;;7580:14;;;;7619:17;;;;7501:1;7492:11;7457:189;;;-1:-1:-1;7663:5:8;;6653:1021;-1:-1:-1;;;;;;;;6653:1021:8:o;7679:217::-;7826:2;7815:9;7808:21;7789:4;7846:44;7886:2;7875:9;7871:18;7863:6;7846:44;:::i;10113:275::-;10184:2;10178:9;10249:2;10230:13;;-1:-1:-1;;10226:27:8;10214:40;;10284:18;10269:34;;10305:22;;;10266:62;10263:2;;;10331:18;;:::i;:::-;10367:2;10360:22;10158:230;;-1:-1:-1;10158:230:8:o;10393:183::-;10453:4;10486:18;10478:6;10475:30;10472:2;;;10508:18;;:::i;:::-;-1:-1:-1;10553:1:8;10549:14;10565:4;10545:25;;10462:114::o;10581:128::-;10621:3;10652:1;10648:6;10645:1;10642:13;10639:2;;;10658:18;;:::i;:::-;-1:-1:-1;10694:9:8;;10629:80::o;10714:228::-;10753:3;10781:10;10818:2;10815:1;10811:10;10848:2;10845:1;10841:10;10879:3;10875:2;10871:12;10866:3;10863:21;10860:2;;;10887:18;;:::i;10947:258::-;11019:1;11029:113;11043:6;11040:1;11037:13;11029:113;;;11119:11;;;11113:18;11100:11;;;11093:39;11065:2;11058:10;11029:113;;;11160:6;11157:1;11154:13;11151:2;;;11195:1;11186:6;11181:3;11177:16;11170:27;11151:2;;11000:205;;;:::o;11210:135::-;11249:3;-1:-1:-1;;11270:17:8;;11267:2;;;11290:18;;:::i;:::-;-1:-1:-1;11337:1:8;11326:13;;11257:88::o;11350:127::-;11411:10;11406:3;11402:20;11399:1;11392:31;11442:4;11439:1;11432:15;11466:4;11463:1;11456:15;11482:127;11543:10;11538:3;11534:20;11531:1;11524:31;11574:4;11571:1;11564:15;11598:4;11595:1;11588:15;11614:127;11675:10;11670:3;11666:20;11663:1;11656:31;11706:4;11703:1;11696:15;11730:4;11727:1;11720:15;11746:131;-1:-1:-1;;;;;11821:31:8;;11811:42;;11801:2;;11867:1;11864;11857:12;11801:2;11791:86;:::o

Swarm Source

ipfs://dc7c1789f4d68a3117744d9b666c30aed4662d0626395f66b8e95c67f46d3e8c

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.