MATIC Price: $1.00 (-0.04%)
Gas: 68 GWei
 

Sponsored

Transaction Hash
Method
Block
From
To
Value
Withdraw Game To...255540142022-03-04 2:15:20755 days ago1646360120IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0012353630.06999911
Withdraw Game To...255540052022-03-04 2:15:02755 days ago1646360102IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.001220930.06999911
Withdraw Game To...255539722022-03-04 2:13:52755 days ago1646360032IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0013655930.06999911
Withdraw Game To...255539622022-03-04 2:13:32755 days ago1646360012IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.001379730.06999911
Execute Meta Tra...255443732022-03-03 20:06:43755 days ago1646338003IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0031096363.1
Execute Meta Tra...255414922022-03-03 18:24:30756 days ago1646331870IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0033598832.5
Execute Meta Tra...255401262022-03-03 17:31:34756 days ago1646328694IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0019732240.05
Execute Meta Tra...255392952022-03-03 17:02:56756 days ago1646326976IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0019786340.15
Execute Meta Tra...255387052022-03-03 16:42:08756 days ago1646325728IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0017983136.5
Execute Meta Tra...255381092022-03-03 16:21:16756 days ago1646324476IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0019835640.25
Execute Meta Tra...255379372022-03-03 16:15:24756 days ago1646324124IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0015326331.1
Execute Meta Tra...255373932022-03-03 15:56:40756 days ago1646323000IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0018307837.15
Execute Meta Tra...255359762022-03-03 15:06:29756 days ago1646319989IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0016402533.29999999
Execute Meta Tra...255359762022-03-03 15:06:29756 days ago1646319989IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0016410533.29999999
Execute Meta Tra...255346312022-03-03 14:13:24756 days ago1646316804IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0009931130.35
Execute Meta Tra...255346302022-03-03 14:13:22756 days ago1646316802IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0014932130.3
Execute Meta Tra...255339172022-03-03 13:47:44756 days ago1646315264IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0019835640.25
Execute Meta Tra...255316182022-03-03 12:19:58756 days ago1646309998IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.001973740.05
Execute Meta Tra...255308442022-03-03 11:51:14756 days ago1646308274IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0020303741.2
Execute Meta Tra...255299732022-03-03 11:17:11756 days ago1646306231IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0017490435.5
Execute Meta Tra...255203992022-03-03 5:11:11756 days ago1646284271IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0016152332.8
Execute Meta Tra...255168732022-03-03 2:59:00756 days ago1646276340IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.001754435.6
Execute Meta Tra...255161652022-03-03 2:32:12756 days ago1646274732IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0020254441.1
Execute Meta Tra...255129122022-03-03 0:25:50756 days ago1646267150IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0033236932.15
Withdraw Game To...255121322022-03-02 23:56:09756 days ago1646265369IN
0xBF79cE2f...0255B7Cb3
0 MATIC0.0013838630.12989955
View all transactions

Parent Txn Hash Block From To Value
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
dgTreasury

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-06-10
*/

// SPDX-License-Identifier: -- 🎲 --

pragma solidity ^0.7.4;

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, 'SafeMath: addition overflow');
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, 'SafeMath: subtraction overflow');
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, 'SafeMath: multiplication overflow');
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, 'SafeMath: division by zero');
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, 'SafeMath: modulo by zero');
        return a % b;
    }
}

interface ERC20Token {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 value
    );

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

contract HashChain {
    bytes32 public tail;

    function _setTail(bytes32 _tail) internal {
        tail = _tail;
    }

    function _consume(bytes32 _parent) internal {
        require(
            keccak256(
                abi.encodePacked(_parent)
            ) == tail,
            'hash-chain: wrong parent'
        );
        tail = _parent;
    }
}

contract AccessController {

    address public ceoAddress;
    address public workerAddress;

    bool public paused = false;

    // mapping (address => enumRoles) accessRoles; // multiple operators idea

    event CEOSet(address newCEO);
    event WorkerSet(address newWorker);

    event Paused();
    event Unpaused();

    constructor() {
        ceoAddress = msg.sender;
        workerAddress = msg.sender;
        emit CEOSet(ceoAddress);
        emit WorkerSet(workerAddress);
    }

    modifier onlyCEO() {
        require(
            msg.sender == ceoAddress,
            'AccessControl: CEO access denied'
        );
        _;
    }

    modifier onlyWorker() {
        require(
            msg.sender == workerAddress,
            'AccessControl: worker access denied'
        );
        _;
    }

    modifier whenNotPaused() {
        require(
            !paused,
            'AccessControl: currently paused'
        );
        _;
    }

    modifier whenPaused {
        require(
            paused,
            'AccessControl: currenlty not paused'
        );
        _;
    }

    function setCEO(address _newCEO) public onlyCEO {
        require(
            _newCEO != address(0x0),
            'AccessControl: invalid CEO address'
        );
        ceoAddress = _newCEO;
        emit CEOSet(ceoAddress);
    }

    function setWorker(address _newWorker) external {
        require(
            _newWorker != address(0x0),
            'AccessControl: invalid worker address'
        );
        require(
            msg.sender == ceoAddress || msg.sender == workerAddress,
            'AccessControl: invalid worker address'
        );
        workerAddress = _newWorker;
        emit WorkerSet(workerAddress);
    }

    function pause() external onlyWorker whenNotPaused {
        paused = true;
        emit Paused();
    }

    function unpause() external onlyCEO whenPaused {
        paused = false;
        emit Unpaused();
    }
}

contract EIP712Base {

    struct EIP712Domain {
        string name;
        string version;
        uint256 chainId;
        address verifyingContract;
    }

    bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(bytes("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"));

    bytes32 internal domainSeperator;

    constructor(string memory name, string memory version) {
      domainSeperator = keccak256(abi.encode(
			EIP712_DOMAIN_TYPEHASH,
			keccak256(bytes(name)),
			keccak256(bytes(version)),
			getChainID(),
			address(this)
		));
    }

    function getChainID() internal pure returns (uint256 id) {
		assembly {
			id := 1 // set to Goerli for now, Mainnet later
		}
	}

    function getDomainSeperator() private view returns(bytes32) {
		return domainSeperator;
	}

    /**
    * Accept message hash and returns hash message in EIP712 compatible form
    * So that it can be used to recover signer from signature signed using EIP712 formatted data
    * https://eips.ethereum.org/EIPS/eip-712
    * "\\x19" makes the encoding deterministic
    * "\\x01" is the version byte to make it compatible to EIP-191
    */
    function toTypedMessageHash(bytes32 messageHash) internal view returns(bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash));
    }

}

abstract contract EIP712MetaTransaction is EIP712Base {

    using SafeMath for uint256;

    bytes32 private constant META_TRANSACTION_TYPEHASH =
        keccak256(
            bytes(
                "MetaTransaction(uint256 nonce,address from,bytes functionSignature)"
            )
        );

    event MetaTransactionExecuted(
        address userAddress,
        address payable relayerAddress,
        bytes functionSignature
    );

    mapping(address => uint256) internal nonces;

    /*
     * Meta transaction structure.
     * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas
     * He should call the desired function directly in that case.
     */
    struct MetaTransaction {
		uint256 nonce;
		address from;
        bytes functionSignature;
	}

    function executeMetaTransaction(
        address userAddress,
        bytes memory functionSignature,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    )
        public
        payable
        returns(bytes memory)
    {
        MetaTransaction memory metaTx = MetaTransaction(
            {
                nonce: nonces[userAddress],
                from: userAddress,
                functionSignature: functionSignature
            }
        );

        require(
            verify(
                userAddress,
                metaTx,
                sigR,
                sigS,
                sigV
            ), "Signer and signature do not match"
        );

	    nonces[userAddress] =
	    nonces[userAddress].add(1);

        // Append userAddress at the end to extract it from calling context
        (bool success, bytes memory returnData) = address(this).call(
            abi.encodePacked(
                functionSignature,
                userAddress
            )
        );

        require(
            success,
            'Function call not successful'
        );

        emit MetaTransactionExecuted(
            userAddress,
            msg.sender,
            functionSignature
        );

        return returnData;
    }

    function hashMetaTransaction(
        MetaTransaction memory metaTx
    )
        internal
        pure
        returns (bytes32)
    {
		return keccak256(
		    abi.encode(
                META_TRANSACTION_TYPEHASH,
                metaTx.nonce,
                metaTx.from,
                keccak256(metaTx.functionSignature)
            )
        );
	}

    uint256 constant defaultTimeFrame = 12 hours;

    mapping(address => uint256) public enabledTill;
    mapping(address => uint256) public timeFrame;

    modifier onlyEnabledOrNewAccount(address _account) {
        require(
            isEnabled(_account) ||
            enabledTill[_account] == 0,
            'Treasury: disabled account!'
        );
        _;
    }

    modifier onlyEnabledAccountStrict(address _account) {
        require(
            isEnabled(_account),
            'Treasury: disabled account!'
        );
        _;
    }


    function enableAccount(
        uint256 _sessionDuration
    )
        external
    {
        _enableAccount(
            msgSender(),
            _sessionDuration
        );
    }

    event AccountEnabled(
        address _user,
        uint256 _sessionDuration
    );

    function _enableAccount(
        address _user,
        uint256 _sessionDuration
    )
        internal
    {
        emit AccountEnabled(
            _user,
            _sessionDuration
        );

        timeFrame[_user] = _sessionDuration;
        enabledTill[_user] = block.timestamp.add(timeFrame[_user]);
    }

    function getTimeFrame(
        address _account
    )
        internal
        view
        returns (uint256)
    {
        return
            timeFrame[_account] > 0 ?
            timeFrame[_account] : defaultTimeFrame;
    }

    function isEnabled(
        address _account
    )
        public
        view
        returns (bool)
    {
        return enabledTill[_account] > block.timestamp;
    }

    function getNonce(
        address user
    )
        external
        view
        returns(uint256 nonce)
    {
        nonce = nonces[user];
    }

    function verify(
        address user,
        MetaTransaction memory metaTx,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    )
        internal
        view
        returns (bool)
    {
        address signer = ecrecover(
            toTypedMessageHash(
                hashMetaTransaction(metaTx)
            ),
            sigV,
            sigR,
            sigS
        );

        require(
            signer != address(0x0),
            'Invalid signature'
        );
		return signer == user;
	}

    function msgSender() internal view returns(address sender) {
        if(msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)
            }
        } else {
            sender = msg.sender;
        }
        return sender;
    }
}

contract TransferHelper {

    bytes4 private constant TRANSFER = bytes4(
        keccak256(
            bytes(
                'transfer(address,uint256)' // 0xa9059cbb
            )
        )
    );

    bytes4 private constant TRANSFER_FROM = bytes4(
        keccak256(
            bytes(
                'transferFrom(address,address,uint256)' // 0x23b872dd
            )
        )
    );

    function safeTransfer(
        address _token,
        address _to,
        uint256 _value
    )
        internal
    {
        (bool success, bytes memory data) = _token.call(
            abi.encodeWithSelector(
                TRANSFER, // 0xa9059cbb
                _to,
                _value
            )
        );

        require(
            success && (
                data.length == 0 || abi.decode(
                    data, (bool)
                )
            ),
            'TransferHelper: TRANSFER_FAILED'
        );
    }

    function safeTransferFrom(
        address _token,
        address _from,
        address _to,
        uint _value
    )
        internal
    {
        (bool success, bytes memory data) = _token.call(
            abi.encodeWithSelector(
                TRANSFER_FROM,
                _from,
                _to,
                _value
            )
        );

        require(
            success && (
                data.length == 0 || abi.decode(
                    data, (bool)
                )
            ),
            'TransferHelper: TRANSFER_FROM_FAILED'
        );
    }

}

contract GameController is AccessController {

    using SafeMath for uint256;

    enum GameStatus { Empty, Enabled, Disabled }

    struct Game {
        address gameAddress;
        string gameName;
    }

    struct GameSettings {
        uint8 index;
        GameStatus status;
    }

    Game[] public treasuryGames;
    mapping(address => GameSettings) public settings;
    mapping(uint8 => mapping(uint8 => uint256)) gameTokens;
    mapping(uint8 => mapping(uint8 => uint128)) maximumBet;

    modifier onlyDeclaredGame(uint8 _gameIndex) {
        require(
            settings[
                treasuryGames[_gameIndex].gameAddress
            ].status != GameStatus.Empty,
            "Treasury: game is not declared!"
        );
        _;
    }

    modifier onlyEnabledGame(uint8 _gameIndex) {
        require(
            settings[
                treasuryGames[_gameIndex].gameAddress
            ].status == GameStatus.Enabled,
            "Treasury: game must be enabled!"
        );
        _;
    }

    modifier onlyDisabledGame(uint8 _gameIndex) {
        require(
            settings[
                treasuryGames[_gameIndex].gameAddress
            ].status == GameStatus.Disabled,
            "Treasury: game must be disabled!"
        );
        _;
    }

   function addGame(
        address _newGameAddress,
        string calldata _newGameName,
        bool _isActive
    )
        external
        onlyCEO
    {
        require(
            settings[_newGameAddress].status == GameStatus.Empty,
            'Treasury: game already declared!'
        );

        treasuryGames.push(
            Game(
                {
                    gameAddress: _newGameAddress,
                    gameName: _newGameName
                }
            )
        );
        settings[_newGameAddress].index = uint8(treasuryGames.length - 1);
        settings[_newGameAddress].status = _isActive == true
            ? GameStatus.Enabled
            : GameStatus.Disabled;
    }

    function getGameIndex(
        address _gameAddress
    )
        internal
        view
        returns (uint8)
    {
        require(
            settings[_gameAddress].status != GameStatus.Empty,
            'Treasury: game is not declared!'
        );
        return settings[_gameAddress].index;
    }

    function updateGameAddress(
        uint8 _gameIndex,
        address _newGameAddress
    )
        external
        onlyCEO
        onlyDeclaredGame(_gameIndex)
    {
        require(
            settings[_newGameAddress].status == GameStatus.Empty,
            'Treasury: game with new address already declared!'
        );

        settings[_newGameAddress] = settings[treasuryGames[_gameIndex].gameAddress];
        delete settings[treasuryGames[_gameIndex].gameAddress];
        treasuryGames[_gameIndex].gameAddress = _newGameAddress;
    }

    function updateGameName(
        uint8 _gameIndex,
        string calldata _newGameName
    )
        external
        onlyCEO
    {
        treasuryGames[_gameIndex].gameName = _newGameName;
    }

    function enableGame(
        uint8 _gameIndex
    )
        external
        onlyCEO
        onlyDisabledGame(_gameIndex)
    {
        settings[treasuryGames[_gameIndex].gameAddress].status = GameStatus.Enabled;
    }

    function disableGame(
        uint8 _gameIndex
    )
        external
        onlyCEO
        onlyEnabledGame(_gameIndex)
    {
        settings[treasuryGames[_gameIndex].gameAddress].status = GameStatus.Disabled;
    }

    function addGameTokens(
        uint8 _gameIndex,
        uint8 _tokenIndex,
        uint256 _amount
    )
        internal
    {
        gameTokens[_gameIndex][_tokenIndex] =
        gameTokens[_gameIndex][_tokenIndex].add(_amount);
    }

    function subGameTokens(
        uint8 _gameIndex,
        uint8 _tokenIndex,
        uint256 _amount
    )
        internal
    {
        gameTokens[_gameIndex][_tokenIndex] =
        gameTokens[_gameIndex][_tokenIndex].sub(_amount);
    }
}

contract TokenController is AccessController {

    struct Token {
        address tokenAddress;
        string tokenName;
    }

    Token[] public treasuryTokens;

    function addToken(
        address _tokenAddress,
        string memory _tokenName
    )
        public
        onlyCEO
    {
        treasuryTokens.push(
            Token(
                {
                    tokenAddress: _tokenAddress,
                    tokenName: _tokenName
                }
            )
        );
    }

    function getTokenInstance(
        uint8 _tokenIndex
    )
        internal
        view
        returns (ERC20Token)
    {
        return ERC20Token(treasuryTokens[_tokenIndex].tokenAddress);
    }

    function getTokenAddress(
        uint8 _tokenIndex
    )
        public
        view
        returns (address)
    {
        return treasuryTokens[_tokenIndex].tokenAddress;
    }

    function getTokenName(
        uint8 _tokenIndex
    )
        external
        view
        returns (string memory)
    {
        return treasuryTokens[_tokenIndex].tokenName;
    }

    function updateTokenAddress(
        uint8 _tokenIndex,
        address _newTokenAddress
    )
        external
        onlyCEO
    {
        treasuryTokens[_tokenIndex].tokenAddress = _newTokenAddress;
    }

    function updateTokenName(
        uint8 _tokenIndex,
        string calldata _newTokenName
    )
        external
        onlyCEO
    {
        treasuryTokens[_tokenIndex].tokenName = _newTokenName;
    }

    function deleteToken(
        uint8 _tokenIndex
    )
        external
        onlyCEO
    {
        ERC20Token token = getTokenInstance(
            _tokenIndex
        );

        require(
            token.balanceOf(address(this)) == 0,
            'TokenController: balance detected'
        );

        delete treasuryTokens[_tokenIndex];
    }
}

contract dgTreasury is GameController, TokenController, HashChain, TransferHelper, EIP712MetaTransaction {

    using SafeMath for uint256;

    constructor(
        address _defaultTokenAddress,
        string memory _defaultTokenName
    )
        EIP712Base('Treasury', 'v4.0')
    {
        addToken(
            _defaultTokenAddress,
            _defaultTokenName
        );
    }

    function disableAccount(
        address _account
    )
        external
        onlyWorker
    {
        enabledTill[_account] = block.timestamp;
    }

    function tokenInboundTransfer(
        uint8 _tokenIndex,
        address _from,
        uint256 _amount
    )
        external
        onlyEnabledOrNewAccount(_from)
        returns (bool)
    {
        uint8 _gameIndex = getGameIndex(msg.sender);
        address _token = getTokenAddress(_tokenIndex);

        addGameTokens(
            _gameIndex,
            _tokenIndex,
            _amount
        );

        safeTransferFrom(
            _token,
            _from,
            address(this), _amount
        );

        enabledTill[_from] = block.timestamp.add(getTimeFrame(msg.sender));

        return true;
    }

    function tokenOutboundTransfer(
        uint8 _tokenIndex,
        address _to,
        uint256 _amount
    )
        external
        onlyEnabledAccountStrict(_to)
        returns (bool)
    {
        uint8 _gameIndex = getGameIndex(msg.sender);
        address _token = getTokenAddress(_tokenIndex);

        subGameTokens(
            _gameIndex,
            _tokenIndex,
            _amount
        );

        safeTransfer(
            _token,
            _to,
            _amount
        );

        return true;
    }

    function setMaximumBet(
        uint8 _gameIndex,
        uint8 _tokenIndex,
        uint128 _maximumBet
    )
        external
        onlyCEO
        onlyDeclaredGame(_gameIndex)
    {
        maximumBet[_gameIndex][_tokenIndex] = _maximumBet;
    }

    function gameMaximumBet(
        uint8 _gameIndex,
        uint8 _tokenIndex
    )
        external
        view
        onlyDeclaredGame(_gameIndex)
        returns (uint256)
    {
        return maximumBet[_gameIndex][_tokenIndex];
    }

    function getMaximumBet(
        uint8 _tokenIndex
    )
        external
        view
        returns (uint128)
    {
        uint8 _gameIndex = getGameIndex(msg.sender);
        return maximumBet[_gameIndex][_tokenIndex];
    }

    function deleteGame(
        uint8 _gameIndex
    )
        public
        onlyCEO
    {
        for (uint8 _tokenIndex = 0; _tokenIndex < treasuryTokens.length; _tokenIndex++) {
            _withdrawGameTokens(
                _gameIndex,
                _tokenIndex,
                gameTokens[_gameIndex][_tokenIndex]
            );
            gameTokens[_gameIndex][_tokenIndex] = 0;
            maximumBet[_gameIndex][_tokenIndex] = 0;
        }
        delete treasuryGames[_gameIndex];
    }

    function checkApproval(
        address _userAddress,
        uint8 _tokenIndex
    )
        external
        view
        returns (uint256)
    {
        return getTokenInstance(_tokenIndex).allowance(
            _userAddress,
            address(this)
        );
    }

    receive() external payable {
        revert();
    }

    function addFunds(
        uint8 _gameIndex,
        uint8 _tokenIndex,
        uint256 _tokenAmount
    )
        external
    {
        require(
            _gameIndex < treasuryGames.length,
            'Treasury: unregistered gameIndex'
        );

        require(
            _tokenIndex < treasuryTokens.length,
            'Treasury: unregistered tokenIndex'
        );

        ERC20Token token = getTokenInstance(
            _tokenIndex
        );

        addGameTokens(
            _gameIndex,
            _tokenIndex,
            _tokenAmount
        );

        token.transferFrom(
            msg.sender,
            address(this),
            _tokenAmount
        );
    }

    function checkAllocatedTokens(
        uint8 _tokenIndex
    )
        external
        view
        returns (uint256)
    {
        uint8 _gameIndex = getGameIndex(msg.sender);

        return _checkAllocatedTokens(
            _gameIndex,
            _tokenIndex
        );
    }

    function _checkAllocatedTokens(
        uint8 _gameIndex,
        uint8 _tokenIndex
    ) internal view returns (uint256) {
        return gameTokens[_gameIndex][_tokenIndex];
    }

    function checkGameTokens(
        uint8 _gameIndex,
        uint8 _tokenIndex
    )
        external
        view
        returns (uint256)
    {
        return _checkAllocatedTokens(
            _gameIndex,
            _tokenIndex
        );
    }

    function _withdrawGameTokens(
        uint8 _gameIndex,
        uint8 _tokenIndex,
        uint256 _amount
    )
        internal
    {
        ERC20Token token = getTokenInstance(
            _tokenIndex
        );

        subGameTokens(
            _gameIndex,
            _tokenIndex,
            _amount
        );

        token.transfer(
            ceoAddress,
            _amount
        );
    }

    function withdrawGameTokens(
        uint8 _gameIndex,
        uint8 _tokenIndex,
        uint256 _amount
    )
        external
        onlyCEO
    {
        _withdrawGameTokens(
            _gameIndex,
            _tokenIndex,
            _amount
        );
    }

    function withdrawTreasuryTokens(
        uint8 _tokenIndex
    ) public onlyCEO {

        ERC20Token token = getTokenInstance(
            _tokenIndex
        );

        uint256 amount = token.balanceOf(
            address(this)
        );

        for (uint256 i = 0; i < treasuryGames.length; i++) {
            uint8 _gameIndex = settings[treasuryGames[i].gameAddress].index;
            gameTokens[_gameIndex][_tokenIndex] = 0;
        }

        token.transfer(
            ceoAddress,
            amount
        );
    }

    function setTail(
        bytes32 _tail
    )
        external
        onlyCEO
    {
        _setTail(_tail);
    }

    function consumeHash(
        bytes32 _localhash
    )
        external
        returns (bool)
    {
        require(
            settings[msg.sender].status == GameStatus.Enabled,
            'Treasury: active-game not present'
        );

        _consume(_localhash);

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_defaultTokenAddress","type":"address"},{"internalType":"string","name":"_defaultTokenName","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_sessionDuration","type":"uint256"}],"name":"AccountEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newCEO","type":"address"}],"name":"CEOSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWorker","type":"address"}],"name":"WorkerSet","type":"event"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"addFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGameAddress","type":"address"},{"internalType":"string","name":"_newGameName","type":"string"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"addGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"string","name":"_tokenName","type":"string"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ceoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"checkAllocatedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"},{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"checkApproval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"checkGameTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_localhash","type":"bytes32"}],"name":"consumeHash","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"}],"name":"deleteGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"deleteToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"disableAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"}],"name":"disableGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sessionDuration","type":"uint256"}],"name":"enableAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"}],"name":"enableGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"enabledTill","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"gameMaximumBet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"getMaximumBet","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"getTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"getTokenName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"uint128","name":"_maximumBet","type":"uint128"}],"name":"setMaximumBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_tail","type":"bytes32"}],"name":"setTail","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWorker","type":"address"}],"name":"setWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"settings","outputs":[{"internalType":"uint8","name":"index","type":"uint8"},{"internalType":"enum GameController.GameStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tail","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"timeFrame","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"tokenInboundTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"tokenOutboundTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"treasuryGames","outputs":[{"internalType":"address","name":"gameAddress","type":"address"},{"internalType":"string","name":"gameName","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"treasuryTokens","outputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"string","name":"tokenName","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"address","name":"_newGameAddress","type":"address"}],"name":"updateGameAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"string","name":"_newGameName","type":"string"}],"name":"updateGameName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"address","name":"_newTokenAddress","type":"address"}],"name":"updateTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"string","name":"_newTokenName","type":"string"}],"name":"updateTokenName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawGameTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"withdrawTreasuryTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"workerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001805460ff60a01b191690553480156200001e57600080fd5b5060405162003cc538038062003cc5833981810160405260408110156200004457600080fd5b8151602083018051604051929492938301929190846401000000008211156200006c57600080fd5b9083019060208201858111156200008257600080fd5b82516401000000008111828201881017156200009d57600080fd5b82525081516020918201929091019080838360005b83811015620000cc578181015183820152602001620000b2565b50505050905090810190601f168015620000fa5780820380516001836020036101000a031916815260200191505b50604081810181526008825267547265617375727960c01b602080840191909152815180830183526004815263076342e360e41b8183015260008054336001600160a01b03199182168117928390556001805490921617905583516001600160a01b039091168152925193965094507ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc09350908290030190a1600154604080516001600160a01b039092168252517f54841e992da2f7bcaa3127409f02e1849c79072740593c398d6670f65f995fa79181900360200190a160405180608001604052806052815260200162003c73605291398051906020012082805190602001208280519060200120620002136200026e60201b60201c565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c09092019052805191012060085550620002669050828262000273565b50506200042c565b600190565b6000546001600160a01b03163314620002d3576040805162461bcd60e51b815260206004820181905260248201527f416363657373436f6e74726f6c3a2043454f206163636573732064656e696564604482015290519081900360640190fd5b604080518082019091526001600160a01b03838116825260208083018481526006805460018101825560009190915284517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600290920291820180546001600160a01b031916919095161784559051805162000379937ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090930192919091019062000380565b5050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003b8576000855562000403565b82601f10620003d357805160ff191683800117855562000403565b8280016001018555821562000403579182015b8281111562000403578251825591602001919060010190620003e6565b506200041192915062000415565b5090565b5b8082111562000411576000815560010162000416565b613837806200043c6000396000f3fe6080604052600436106102605760003560e01c806370b5e63611610144578063c2c9a884116100b6578063e2373ab31161007a578063e2373ab314610c8b578063e99405cc14610ce9578063f010b54114610d16578063f342336f14610d43578063f887cf0014610d80578063f8ce7b4b14610dbc5761026a565b8063c2c9a88414610b98578063c70620b514610bc5578063c7646ebb14610bf2578063cbd88f4814610c39578063d845317214610c4e5761026a565b80638c79ba3a116101085780638c79ba3a14610a615780639015d37114610a945780639122c23914610ac7578063a3a8df9514610af4578063ae260ac014610b30578063c26f6d4414610b655761026a565b806370b5e6361461092257806371da23e9146109af5780637749bc11146109f85780637cb8e8cd14610a225780638456cb5914610a4c5761026a565b806331297992116101dd5780635ad3f918116101a15780635ad3f918146108235780635c975abb146108505780636431930f1461086557806365afb44f1461089857806365f6517a146108c25780636ca489fb146108f55761026a565b806331297992146106b557806332b4a5941461070b5780633de6f379146107905780633f4ba83a146107cc57806341d4c74f146107e15761026a565b806313d8c8401161022457806313d8c8401461053d57806327d7874c146105645780632c613a14146105975780632c8da560146105c15780632d0335ab146106825761026a565b8063082622171461026f5780630a0f8168146103215780630c53c51c146103525780630e363e3b146104895780630ea4a4fa146105105761026a565b3661026a57600080fd5b600080fd5b34801561027b57600080fd5b506102996004803603602081101561029257600080fd5b5035610df1565b60405180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156102e55781810151838201526020016102cd565b50505050905090810190601f1680156103125780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561032d57600080fd5b50610336610eb6565b604080516001600160a01b039092168252519081900360200190f35b610414600480360360a081101561036857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561039257600080fd5b8201836020820111156103a457600080fd5b803590602001918460018302840111600160201b831117156103c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550508235935050506020810135906040013560ff16610ec5565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561044e578181015183820152602001610436565b50505050905090810190601f16801561047b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049557600080fd5b5061050e600480360360408110156104ac57600080fd5b60ff8235169190810190604081016020820135600160201b8111156104d057600080fd5b8201836020820111156104e257600080fd5b803590602001918460018302840111600160201b8311171561050357600080fd5b5090925090506111d2565b005b34801561051c57600080fd5b5061050e6004803603602081101561053357600080fd5b503560ff16611255565b34801561054957600080fd5b5061055261139f565b60408051918252519081900360200190f35b34801561057057600080fd5b5061050e6004803603602081101561058757600080fd5b50356001600160a01b03166113a5565b3480156105a357600080fd5b50610299600480360360208110156105ba57600080fd5b5035611491565b3480156105cd57600080fd5b5061050e600480360360408110156105e457600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561060e57600080fd5b82018360208201111561062057600080fd5b803590602001918460018302840111600160201b8311171561064157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506114a1945050505050565b34801561068e57600080fd5b50610552600480360360208110156106a557600080fd5b50356001600160a01b0316611599565b3480156106c157600080fd5b506106f7600480360360608110156106d857600080fd5b5060ff813516906001600160a01b0360208201351690604001356115b4565b604080519115158252519081900360200190f35b34801561071757600080fd5b5061050e6004803603604081101561072e57600080fd5b60ff8235169190810190604081016020820135600160201b81111561075257600080fd5b82018360208201111561076457600080fd5b803590602001918460018302840111600160201b8311171561078557600080fd5b50909250905061164e565b34801561079c57600080fd5b5061050e600480360360408110156107b357600080fd5b50803560ff1690602001356001600160a01b03166116ad565b3480156107d857600080fd5b5061050e61173d565b3480156107ed57600080fd5b506106f76004803603606081101561080457600080fd5b5060ff813516906001600160a01b03602082013516906040013561180a565b34801561082f57600080fd5b506103366004803603602081101561084657600080fd5b503560ff166118f3565b34801561085c57600080fd5b506106f7611925565b34801561087157600080fd5b506105526004803603602081101561088857600080fd5b50356001600160a01b0316611935565b3480156108a457600080fd5b506106f7600480360360208110156108bb57600080fd5b5035611947565b3480156108ce57600080fd5b50610552600480360360208110156108e557600080fd5b50356001600160a01b03166119bb565b34801561090157600080fd5b506104146004803603602081101561091857600080fd5b503560ff166119cd565b34801561092e57600080fd5b5061050e6004803603606081101561094557600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561096f57600080fd5b82018360208201111561098157600080fd5b803590602001918460018302840111600160201b831117156109a257600080fd5b9193509150351515611a90565b3480156109bb57600080fd5b506109dc600480360360208110156109d257600080fd5b503560ff16611c82565b604080516001600160801b039092168252519081900360200190f35b348015610a0457600080fd5b5061050e60048036036020811015610a1b57600080fd5b5035611cbf565b348015610a2e57600080fd5b5061050e60048036036020811015610a4557600080fd5b5035611d18565b348015610a5857600080fd5b5061050e611d29565b348015610a6d57600080fd5b5061050e60048036036020811015610a8457600080fd5b50356001600160a01b0316611e0f565b348015610aa057600080fd5b506106f760048036036020811015610ab757600080fd5b50356001600160a01b0316611e74565b348015610ad357600080fd5b5061050e60048036036020811015610aea57600080fd5b503560ff16611e91565b348015610b0057600080fd5b5061050e60048036036040811015610b1757600080fd5b50803560ff1690602001356001600160a01b0316612059565b348015610b3c57600080fd5b5061055260048036036040811015610b5357600080fd5b5060ff813581169160200135166122b8565b348015610b7157600080fd5b5061050e60048036036020811015610b8857600080fd5b50356001600160a01b031661237d565b348015610ba457600080fd5b5061050e60048036036020811015610bbb57600080fd5b503560ff1661247a565b348015610bd157600080fd5b5061055260048036036020811015610be857600080fd5b503560ff166125cf565b348015610bfe57600080fd5b5061050e60048036036060811015610c1557600080fd5b50803560ff90811691602081013590911690604001356001600160801b03166125ee565b348015610c4557600080fd5b50610336612712565b348015610c5a57600080fd5b5061050e60048036036060811015610c7157600080fd5b5060ff813581169160208101359091169060400135612721565b348015610c9757600080fd5b50610cbe60048036036020811015610cae57600080fd5b50356001600160a01b031661285c565b604051808360ff168152602001826002811115610cd757fe5b81526020019250505060405180910390f35b348015610cf557600080fd5b5061050e60048036036020811015610d0c57600080fd5b503560ff1661287a565b348015610d2257600080fd5b5061050e60048036036020811015610d3957600080fd5b503560ff16612993565b348015610d4f57600080fd5b5061050e60048036036060811015610d6657600080fd5b5060ff813581169160208101359091169060400135612a9b565b348015610d8c57600080fd5b5061055260048036036040811015610da357600080fd5b5080356001600160a01b0316906020013560ff16612af3565b348015610dc857600080fd5b5061055260048036036040811015610ddf57600080fd5b5060ff81358116916020013516612b8e565b60028181548110610e0157600080fd5b600091825260209182902060029182020180546001808301805460408051601f600019958416156101000295909501909216969096049283018790048702810187019095528185526001600160a01b0390921695509193909190830182828015610eac5780601f10610e8157610100808354040283529160200191610eac565b820191906000526020600020905b815481529060010190602001808311610e8f57829003601f168201915b5050505050905082565b6000546001600160a01b031681565b6060610ecf613468565b50604080516060810182526001600160a01b03881660008181526009602090815290849020548352820152908101869052610f0d8782878787612b9a565b610f485760405162461bcd60e51b815260040180806020018281038252602181526020018061377a6021913960400191505060405180910390fd5b6001600160a01b038716600090815260096020526040902054610f6c906001612c84565b60096000896001600160a01b03166001600160a01b031681526020019081526020016000208190555060006060306001600160a01b0316888a6040516020018083805190602001908083835b60208310610fd75780518252601f199092019160209182019101610fb8565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b6020831061104d5780518252601f19909201916020918201910161102e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146110af576040519150601f19603f3d011682016040523d82523d6000602084013e6110b4565b606091505b50915091508161110b576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b89338a60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561118a578181015183820152602001611172565b50505050905090810190601f1680156111b75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a198975050505050505050565b6000546001600160a01b0316331461121f576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b818160028560ff168154811061123157fe5b9060005260206000209060020201600101919061124f929190613492565b50505050565b6000546001600160a01b031633146112a2576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b60006112ad826118f3565b9050806001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112fc57600080fd5b505afa158015611310573d6000803e3d6000fd5b505050506040513d602081101561132657600080fd5b5051156113645760405162461bcd60e51b81526004018080602001828103825260218152602001806137596021913960400191505060405180910390fd5b60068260ff168154811061137457fe5b60009182526020822060029091020180546001600160a01b03191681559061124f600183018261351e565b60075481565b6000546001600160a01b031633146113f2576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b6001600160a01b0381166114375760405162461bcd60e51b81526004018080602001828103825260228152602001806136f36022913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc0916020908290030190a150565b60068181548110610e0157600080fd5b6000546001600160a01b031633146114ee576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b604080518082019091526001600160a01b03838116825260208083018481526006805460018101825560009190915284517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600290920291820180546001600160a01b0319169190951617845590518051611592937ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40909301929190910190613562565b5050505050565b6001600160a01b031660009081526009602052604090205490565b6000826115c081611e74565b611611576040805162461bcd60e51b815260206004820152601b60248201527f54726561737572793a2064697361626c6564206163636f756e74210000000000604482015290519081900360640190fd5b600061161c33612cde565b90506000611629876118f3565b9050611636828887612d6d565b611641818787612dc2565b5060019695505050505050565b6000546001600160a01b0316331461169b576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b818160068560ff168154811061123157fe5b6000546001600160a01b031633146116fa576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b8060068360ff168154811061170b57fe5b6000918252602090912060029091020180546001600160a01b0319166001600160a01b03929092169190911790555050565b6000546001600160a01b0316331461178a576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b600154600160a01b900460ff166117d25760405162461bcd60e51b81526004018080602001828103825260238152602001806137bb6023913960400191505060405180910390fd5b6001805460ff60a01b191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b60008261181681611e74565b8061183757506001600160a01b0381166000908152600a6020526040902054155b611888576040805162461bcd60e51b815260206004820152601b60248201527f54726561737572793a2064697361626c6564206163636f756e74210000000000604482015290519081900360640190fd5b600061189333612cde565b905060006118a0876118f3565b90506118ad828887612f55565b6118b981873088612f7f565b6118cc6118c5336130fc565b4290612c84565b6001600160a01b0387166000908152600a6020526040902055506001925050509392505050565b600060068260ff168154811061190557fe5b60009182526020909120600290910201546001600160a01b031692915050565b600154600160a01b900460ff1681565b600b6020526000908152604090205481565b6000600133600090815260036020526040902054610100900460ff16600281111561196e57fe5b146119aa5760405162461bcd60e51b81526004018080602001828103825260218152602001806137386021913960400191505060405180910390fd5b6119b382613141565b506001919050565b600a6020526000908152604090205481565b606060068260ff16815481106119df57fe5b90600052602060002090600202016001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a845780601f10611a5957610100808354040283529160200191611a84565b820191906000526020600020905b815481529060010190602001808311611a6757829003601f168201915b50505050509050919050565b6000546001600160a01b03163314611add576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b60006001600160a01b038516600090815260036020526040902054610100900460ff166002811115611b0b57fe5b14611b5d576040805162461bcd60e51b815260206004820181905260248201527f54726561737572793a2067616d6520616c7265616479206465636c6172656421604482015290519081900360640190fd5b60026040518060400160405280866001600160a01b0316815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050835460018082018655948252602091829020845160029092020180546001600160a01b0319166001600160a01b0390921691909117815583820151805194959194611c029450918501920190613562565b50506002546001600160a01b0386166000908152600360205260409020805460ff191660001990920160ff1691909117905550801515600114611c46576002611c49565b60015b6001600160a01b0385166000908152600360205260409020805461ff001916610100836002811115611c7757fe5b021790555050505050565b600080611c8e33612cde565b60ff9081166000908152600560209081526040808320938716835292905220546001600160801b0316915050919050565b6000546001600160a01b03163314611d0c576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b611d15816131b6565b50565b611d15611d236131bb565b82613219565b6001546001600160a01b03163314611d725760405162461bcd60e51b81526004018080602001828103825260238152602001806137156023913960400191505060405180910390fd5b600154600160a01b900460ff1615611dd1576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b1790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6001546001600160a01b03163314611e585760405162461bcd60e51b81526004018080602001828103825260238152602001806137156023913960400191505060405180910390fd5b6001600160a01b03166000908152600a60205260409020429055565b6001600160a01b03166000908152600a6020526040902054421090565b6000546001600160a01b03163314611ede576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b6000611ee9826118f3565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611f3a57600080fd5b505afa158015611f4e573d6000803e3d6000fd5b505050506040513d6020811015611f6457600080fd5b5051905060005b600254811015611fd75760006003600060028481548110611f8857fe5b600091825260208083206002909202909101546001600160a01b0316835282810193909352604091820181205460ff908116825260048452828220908916825290925281205550600101611f6b565b50600080546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519185169263a9059cbb926044808401936020939083900390910190829087803b15801561202f57600080fd5b505af1158015612043573d6000803e3d6000fd5b505050506040513d602081101561159257600080fd5b6000546001600160a01b031633146120a6576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b8160006003600060028460ff16815481106120bd57fe5b60009182526020808320600292830201546001600160a01b031684528301939093526040909101902054610100900460ff16908111156120f957fe5b141561213a576040805162461bcd60e51b815260206004820152601f602482015260008051602061379b833981519152604482015290519081900360640190fd5b60006001600160a01b038316600090815260036020526040902054610100900460ff16600281111561216857fe5b146121a45760405162461bcd60e51b81526004018080602001828103825260318152602001806136a26031913960400191505060405180910390fd5b6003600060028560ff16815481106121b857fe5b60009182526020808320600292830201546001600160a01b03908116855284820195909552604093840183209487168352600390529190208254815460ff191660ff91821617808355845492936101009384900490921692849261ff001990921691849081111561222557fe5b02179055509050506003600060028560ff168154811061224157fe5b60009182526020808320600292830201546001600160a01b0316845283019390935260409091019020805461ffff19169055805483919060ff861690811061228557fe5b6000918252602090912060029091020180546001600160a01b0319166001600160a01b0392909216919091179055505050565b600082816003600060028460ff16815481106122d057fe5b60009182526020808320600292830201546001600160a01b031684528301939093526040909101902054610100900460ff169081111561230c57fe5b141561234d576040805162461bcd60e51b815260206004820152601f602482015260008051602061379b833981519152604482015290519081900360640190fd5b505060ff91821660009081526005602090815260408083209390941682529190915220546001600160801b031690565b6001600160a01b0381166123c25760405162461bcd60e51b81526004018080602001828103825260258152602001806135f46025913960400191505060405180910390fd5b6000546001600160a01b03163314806123e557506001546001600160a01b031633145b6124205760405162461bcd60e51b81526004018080602001828103825260258152602001806135f46025913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f54841e992da2f7bcaa3127409f02e1849c79072740593c398d6670f65f995fa7916020908290030190a150565b6000546001600160a01b031633146124c7576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b8060026003600060028460ff16815481106124de57fe5b60009182526020808320600292830201546001600160a01b031684528301939093526040909101902054610100900460ff169081111561251a57fe5b1461256c576040805162461bcd60e51b815260206004820181905260248201527f54726561737572793a2067616d65206d7573742062652064697361626c656421604482015290519081900360640190fd5b60016003600060028560ff168154811061258257fe5b60009182526020808320600292830201546001600160a01b03168452830193909352604090910190208054909161ff0019909116906101009084908111156125c657fe5b02179055505050565b6000806125db33612cde565b90506125e781846132a2565b9392505050565b6000546001600160a01b0316331461263b576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b8260006003600060028460ff168154811061265257fe5b60009182526020808320600292830201546001600160a01b031684528301939093526040909101902054610100900460ff169081111561268e57fe5b14156126cf576040805162461bcd60e51b815260206004820152601f602482015260008051602061379b833981519152604482015290519081900360640190fd5b5060ff92831660009081526005602090815260408083209490951682529290925291902080546001600160801b0319166001600160801b03909216919091179055565b6001546001600160a01b031681565b60025460ff84161061277a576040805162461bcd60e51b815260206004820181905260248201527f54726561737572793a20756e726567697374657265642067616d65496e646578604482015290519081900360640190fd5b60065460ff8316106127bd5760405162461bcd60e51b81526004018080602001828103825260218152602001806136196021913960400191505060405180910390fd5b60006127c8836118f3565b90506127d5848484612f55565b604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b038316916323b872dd9160648083019260209291908290030181600087803b15801561282a57600080fd5b505af115801561283e573d6000803e3d6000fd5b505050506040513d602081101561285457600080fd5b505050505050565b60036020526000908152604090205460ff8082169161010090041682565b6000546001600160a01b031633146128c7576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b60005b60065460ff821610156129525760ff80831660009081526004602090815260408083209385168352929052205461290490839083906132c7565b60ff80831660008181526004602090815260408083209486168084529482528083208390559282526005815282822093825292909252902080546001600160801b03191690556001016128ca565b5060028160ff168154811061296357fe5b60009182526020822060029091020180546001600160a01b03191681559061298e600183018261351e565b505050565b6000546001600160a01b031633146129e0576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b8060016003600060028460ff16815481106129f757fe5b60009182526020808320600292830201546001600160a01b031684528301939093526040909101902054610100900460ff1690811115612a3357fe5b14612a85576040805162461bcd60e51b815260206004820152601f60248201527f54726561737572793a2067616d65206d75737420626520656e61626c65642100604482015290519081900360640190fd5b60026003600060028560ff168154811061258257fe5b6000546001600160a01b03163314612ae8576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b61298e8383836132c7565b6000612afe826118f3565b6001600160a01b031663dd62ed3e84306040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015612b5b57600080fd5b505afa158015612b6f573d6000803e3d6000fd5b505050506040513d6020811015612b8557600080fd5b50519392505050565b60006125e783836132a2565b6000806001612bb0612bab88613336565b6133b9565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612c07573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612c63576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b6000828201838110156125e7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806001600160a01b038316600090815260036020526040902054610100900460ff166002811115612d0d57fe5b1415612d4e576040805162461bcd60e51b815260206004820152601f602482015260008051602061379b833981519152604482015290519081900360640190fd5b506001600160a01b031660009081526003602052604090205460ff1690565b60ff808416600090815260046020908152604080832093861683529290522054612d979082613405565b60ff938416600090815260046020908152604080832095909616825293909352929091209190915550565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310612e6f5780518252601f199092019160209182019101612e50565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ed1576040519150601f19603f3d011682016040523d82523d6000602084013e612ed6565b606091505b5091509150818015612f04575080511580612f045750808060200190516020811015612f0157600080fd5b50515b611592576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b60ff808416600090815260046020908152604080832093861683529290522054612d979082612c84565b60006060856001600160a01b031660405180606001604052806025815260200161363a602591398051602091820120604080516001600160a01b03808b166024830152891660448201526064808201899052825180830390910181526084909101825292830180516001600160e01b03166001600160e01b0319909316929092178252518251909182918083835b6020831061302c5780518252601f19909201916020918201910161300d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461308e576040519150601f19603f3d011682016040523d82523d6000602084013e613093565b606091505b50915091508180156130c15750805115806130c157508080602001905160208110156130be57600080fd5b50515b6128545760405162461bcd60e51b81526004018080602001828103825260248152602001806137de6024913960400191505060405180910390fd5b6001600160a01b0381166000908152600b60205260408120546131215761a8c061313b565b6001600160a01b0382166000908152600b60205260409020545b92915050565b6007546040805160208082018590528251808303820181529183019092528051910120146131b6576040805162461bcd60e51b815260206004820152601860248201527f686173682d636861696e3a2077726f6e6720706172656e740000000000000000604482015290519081900360640190fd5b600755565b6000333014156132135760606000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506132169050565b50335b90565b604080516001600160a01b03841681526020810183905281517fc013b897e18cef75cd10c876b6b78ae296a1d877e477f5e51f021be6c5a9a4f1929181900390910190a16001600160a01b0382166000908152600b602052604090208190556132824282612c84565b6001600160a01b039092166000908152600a602052604090209190915550565b60ff918216600090815260046020908152604080832093909416825291909152205490565b60006132d2836118f3565b90506132df848484612d6d565b600080546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810186905290519184169263a9059cbb926044808401936020939083900390910190829087803b15801561282a57600080fd5b600060405180608001604052806043815260200161365f60439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006133c3613462565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60008282111561345c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60085490565b60405180606001604052806000815260200160006001600160a01b03168152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826134c8576000855561350e565b82601f106134e15782800160ff1982351617855561350e565b8280016001018555821561350e579182015b8281111561350e5782358255916020019190600101906134f3565b5061351a9291506135de565b5090565b50805460018160011615610100020316600290046000825580601f106135445750611d15565b601f016020900490600052602060002090810190611d1591906135de565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613598576000855561350e565b82601f106135b157805160ff191683800117855561350e565b8280016001018555821561350e579182015b8281111561350e5782518255916020019190600101906135c3565b5b8082111561351a57600081556001016135df56fe416363657373436f6e74726f6c3a20696e76616c696420776f726b6572206164647265737354726561737572793a20756e7265676973746572656420746f6b656e496e6465787472616e7366657246726f6d28616464726573732c616464726573732c75696e74323536294d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652954726561737572793a2067616d652077697468206e6577206164647265737320616c7265616479206465636c6172656421416363657373436f6e74726f6c3a2043454f206163636573732064656e696564416363657373436f6e74726f6c3a20696e76616c69642043454f2061646472657373416363657373436f6e74726f6c3a20776f726b6572206163636573732064656e69656454726561737572793a206163746976652d67616d65206e6f742070726573656e74546f6b656e436f6e74726f6c6c65723a2062616c616e63652064657465637465645369676e657220616e64207369676e617475726520646f206e6f74206d6174636854726561737572793a2067616d65206973206e6f74206465636c617265642100416363657373436f6e74726f6c3a2063757272656e6c7479206e6f74207061757365645472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212202ee39dea46b136aa399d6141ddd8b1ee21f15b63df7d65e5fdcb27eaae55a1bb64736f6c63430007040033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429000000000000000000000000a1c57f48f0deb89f569dfbe6e2b7f46d33606fd4000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000044d414e4100000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102605760003560e01c806370b5e63611610144578063c2c9a884116100b6578063e2373ab31161007a578063e2373ab314610c8b578063e99405cc14610ce9578063f010b54114610d16578063f342336f14610d43578063f887cf0014610d80578063f8ce7b4b14610dbc5761026a565b8063c2c9a88414610b98578063c70620b514610bc5578063c7646ebb14610bf2578063cbd88f4814610c39578063d845317214610c4e5761026a565b80638c79ba3a116101085780638c79ba3a14610a615780639015d37114610a945780639122c23914610ac7578063a3a8df9514610af4578063ae260ac014610b30578063c26f6d4414610b655761026a565b806370b5e6361461092257806371da23e9146109af5780637749bc11146109f85780637cb8e8cd14610a225780638456cb5914610a4c5761026a565b806331297992116101dd5780635ad3f918116101a15780635ad3f918146108235780635c975abb146108505780636431930f1461086557806365afb44f1461089857806365f6517a146108c25780636ca489fb146108f55761026a565b806331297992146106b557806332b4a5941461070b5780633de6f379146107905780633f4ba83a146107cc57806341d4c74f146107e15761026a565b806313d8c8401161022457806313d8c8401461053d57806327d7874c146105645780632c613a14146105975780632c8da560146105c15780632d0335ab146106825761026a565b8063082622171461026f5780630a0f8168146103215780630c53c51c146103525780630e363e3b146104895780630ea4a4fa146105105761026a565b3661026a57600080fd5b600080fd5b34801561027b57600080fd5b506102996004803603602081101561029257600080fd5b5035610df1565b60405180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156102e55781810151838201526020016102cd565b50505050905090810190601f1680156103125780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561032d57600080fd5b50610336610eb6565b604080516001600160a01b039092168252519081900360200190f35b610414600480360360a081101561036857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561039257600080fd5b8201836020820111156103a457600080fd5b803590602001918460018302840111600160201b831117156103c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550508235935050506020810135906040013560ff16610ec5565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561044e578181015183820152602001610436565b50505050905090810190601f16801561047b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049557600080fd5b5061050e600480360360408110156104ac57600080fd5b60ff8235169190810190604081016020820135600160201b8111156104d057600080fd5b8201836020820111156104e257600080fd5b803590602001918460018302840111600160201b8311171561050357600080fd5b5090925090506111d2565b005b34801561051c57600080fd5b5061050e6004803603602081101561053357600080fd5b503560ff16611255565b34801561054957600080fd5b5061055261139f565b60408051918252519081900360200190f35b34801561057057600080fd5b5061050e6004803603602081101561058757600080fd5b50356001600160a01b03166113a5565b3480156105a357600080fd5b50610299600480360360208110156105ba57600080fd5b5035611491565b3480156105cd57600080fd5b5061050e600480360360408110156105e457600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561060e57600080fd5b82018360208201111561062057600080fd5b803590602001918460018302840111600160201b8311171561064157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506114a1945050505050565b34801561068e57600080fd5b50610552600480360360208110156106a557600080fd5b50356001600160a01b0316611599565b3480156106c157600080fd5b506106f7600480360360608110156106d857600080fd5b5060ff813516906001600160a01b0360208201351690604001356115b4565b604080519115158252519081900360200190f35b34801561071757600080fd5b5061050e6004803603604081101561072e57600080fd5b60ff8235169190810190604081016020820135600160201b81111561075257600080fd5b82018360208201111561076457600080fd5b803590602001918460018302840111600160201b8311171561078557600080fd5b50909250905061164e565b34801561079c57600080fd5b5061050e600480360360408110156107b357600080fd5b50803560ff1690602001356001600160a01b03166116ad565b3480156107d857600080fd5b5061050e61173d565b3480156107ed57600080fd5b506106f76004803603606081101561080457600080fd5b5060ff813516906001600160a01b03602082013516906040013561180a565b34801561082f57600080fd5b506103366004803603602081101561084657600080fd5b503560ff166118f3565b34801561085c57600080fd5b506106f7611925565b34801561087157600080fd5b506105526004803603602081101561088857600080fd5b50356001600160a01b0316611935565b3480156108a457600080fd5b506106f7600480360360208110156108bb57600080fd5b5035611947565b3480156108ce57600080fd5b50610552600480360360208110156108e557600080fd5b50356001600160a01b03166119bb565b34801561090157600080fd5b506104146004803603602081101561091857600080fd5b503560ff166119cd565b34801561092e57600080fd5b5061050e6004803603606081101561094557600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561096f57600080fd5b82018360208201111561098157600080fd5b803590602001918460018302840111600160201b831117156109a257600080fd5b9193509150351515611a90565b3480156109bb57600080fd5b506109dc600480360360208110156109d257600080fd5b503560ff16611c82565b604080516001600160801b039092168252519081900360200190f35b348015610a0457600080fd5b5061050e60048036036020811015610a1b57600080fd5b5035611cbf565b348015610a2e57600080fd5b5061050e60048036036020811015610a4557600080fd5b5035611d18565b348015610a5857600080fd5b5061050e611d29565b348015610a6d57600080fd5b5061050e60048036036020811015610a8457600080fd5b50356001600160a01b0316611e0f565b348015610aa057600080fd5b506106f760048036036020811015610ab757600080fd5b50356001600160a01b0316611e74565b348015610ad357600080fd5b5061050e60048036036020811015610aea57600080fd5b503560ff16611e91565b348015610b0057600080fd5b5061050e60048036036040811015610b1757600080fd5b50803560ff1690602001356001600160a01b0316612059565b348015610b3c57600080fd5b5061055260048036036040811015610b5357600080fd5b5060ff813581169160200135166122b8565b348015610b7157600080fd5b5061050e60048036036020811015610b8857600080fd5b50356001600160a01b031661237d565b348015610ba457600080fd5b5061050e60048036036020811015610bbb57600080fd5b503560ff1661247a565b348015610bd157600080fd5b5061055260048036036020811015610be857600080fd5b503560ff166125cf565b348015610bfe57600080fd5b5061050e60048036036060811015610c1557600080fd5b50803560ff90811691602081013590911690604001356001600160801b03166125ee565b348015610c4557600080fd5b50610336612712565b348015610c5a57600080fd5b5061050e60048036036060811015610c7157600080fd5b5060ff813581169160208101359091169060400135612721565b348015610c9757600080fd5b50610cbe60048036036020811015610cae57600080fd5b50356001600160a01b031661285c565b604051808360ff168152602001826002811115610cd757fe5b81526020019250505060405180910390f35b348015610cf557600080fd5b5061050e60048036036020811015610d0c57600080fd5b503560ff1661287a565b348015610d2257600080fd5b5061050e60048036036020811015610d3957600080fd5b503560ff16612993565b348015610d4f57600080fd5b5061050e60048036036060811015610d6657600080fd5b5060ff813581169160208101359091169060400135612a9b565b348015610d8c57600080fd5b5061055260048036036040811015610da357600080fd5b5080356001600160a01b0316906020013560ff16612af3565b348015610dc857600080fd5b5061055260048036036040811015610ddf57600080fd5b5060ff81358116916020013516612b8e565b60028181548110610e0157600080fd5b600091825260209182902060029182020180546001808301805460408051601f600019958416156101000295909501909216969096049283018790048702810187019095528185526001600160a01b0390921695509193909190830182828015610eac5780601f10610e8157610100808354040283529160200191610eac565b820191906000526020600020905b815481529060010190602001808311610e8f57829003601f168201915b5050505050905082565b6000546001600160a01b031681565b6060610ecf613468565b50604080516060810182526001600160a01b03881660008181526009602090815290849020548352820152908101869052610f0d8782878787612b9a565b610f485760405162461bcd60e51b815260040180806020018281038252602181526020018061377a6021913960400191505060405180910390fd5b6001600160a01b038716600090815260096020526040902054610f6c906001612c84565b60096000896001600160a01b03166001600160a01b031681526020019081526020016000208190555060006060306001600160a01b0316888a6040516020018083805190602001908083835b60208310610fd75780518252601f199092019160209182019101610fb8565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b6020831061104d5780518252601f19909201916020918201910161102e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146110af576040519150601f19603f3d011682016040523d82523d6000602084013e6110b4565b606091505b50915091508161110b576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b89338a60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561118a578181015183820152602001611172565b50505050905090810190601f1680156111b75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a198975050505050505050565b6000546001600160a01b0316331461121f576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b818160028560ff168154811061123157fe5b9060005260206000209060020201600101919061124f929190613492565b50505050565b6000546001600160a01b031633146112a2576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b60006112ad826118f3565b9050806001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112fc57600080fd5b505afa158015611310573d6000803e3d6000fd5b505050506040513d602081101561132657600080fd5b5051156113645760405162461bcd60e51b81526004018080602001828103825260218152602001806137596021913960400191505060405180910390fd5b60068260ff168154811061137457fe5b60009182526020822060029091020180546001600160a01b03191681559061124f600183018261351e565b60075481565b6000546001600160a01b031633146113f2576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b6001600160a01b0381166114375760405162461bcd60e51b81526004018080602001828103825260228152602001806136f36022913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc0916020908290030190a150565b60068181548110610e0157600080fd5b6000546001600160a01b031633146114ee576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b604080518082019091526001600160a01b03838116825260208083018481526006805460018101825560009190915284517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600290920291820180546001600160a01b0319169190951617845590518051611592937ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40909301929190910190613562565b5050505050565b6001600160a01b031660009081526009602052604090205490565b6000826115c081611e74565b611611576040805162461bcd60e51b815260206004820152601b60248201527f54726561737572793a2064697361626c6564206163636f756e74210000000000604482015290519081900360640190fd5b600061161c33612cde565b90506000611629876118f3565b9050611636828887612d6d565b611641818787612dc2565b5060019695505050505050565b6000546001600160a01b0316331461169b576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b818160068560ff168154811061123157fe5b6000546001600160a01b031633146116fa576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b8060068360ff168154811061170b57fe5b6000918252602090912060029091020180546001600160a01b0319166001600160a01b03929092169190911790555050565b6000546001600160a01b0316331461178a576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b600154600160a01b900460ff166117d25760405162461bcd60e51b81526004018080602001828103825260238152602001806137bb6023913960400191505060405180910390fd5b6001805460ff60a01b191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b60008261181681611e74565b8061183757506001600160a01b0381166000908152600a6020526040902054155b611888576040805162461bcd60e51b815260206004820152601b60248201527f54726561737572793a2064697361626c6564206163636f756e74210000000000604482015290519081900360640190fd5b600061189333612cde565b905060006118a0876118f3565b90506118ad828887612f55565b6118b981873088612f7f565b6118cc6118c5336130fc565b4290612c84565b6001600160a01b0387166000908152600a6020526040902055506001925050509392505050565b600060068260ff168154811061190557fe5b60009182526020909120600290910201546001600160a01b031692915050565b600154600160a01b900460ff1681565b600b6020526000908152604090205481565b6000600133600090815260036020526040902054610100900460ff16600281111561196e57fe5b146119aa5760405162461bcd60e51b81526004018080602001828103825260218152602001806137386021913960400191505060405180910390fd5b6119b382613141565b506001919050565b600a6020526000908152604090205481565b606060068260ff16815481106119df57fe5b90600052602060002090600202016001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a845780601f10611a5957610100808354040283529160200191611a84565b820191906000526020600020905b815481529060010190602001808311611a6757829003601f168201915b50505050509050919050565b6000546001600160a01b03163314611add576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b60006001600160a01b038516600090815260036020526040902054610100900460ff166002811115611b0b57fe5b14611b5d576040805162461bcd60e51b815260206004820181905260248201527f54726561737572793a2067616d6520616c7265616479206465636c6172656421604482015290519081900360640190fd5b60026040518060400160405280866001600160a01b0316815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050835460018082018655948252602091829020845160029092020180546001600160a01b0319166001600160a01b0390921691909117815583820151805194959194611c029450918501920190613562565b50506002546001600160a01b0386166000908152600360205260409020805460ff191660001990920160ff1691909117905550801515600114611c46576002611c49565b60015b6001600160a01b0385166000908152600360205260409020805461ff001916610100836002811115611c7757fe5b021790555050505050565b600080611c8e33612cde565b60ff9081166000908152600560209081526040808320938716835292905220546001600160801b0316915050919050565b6000546001600160a01b03163314611d0c576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b611d15816131b6565b50565b611d15611d236131bb565b82613219565b6001546001600160a01b03163314611d725760405162461bcd60e51b81526004018080602001828103825260238152602001806137156023913960400191505060405180910390fd5b600154600160a01b900460ff1615611dd1576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b1790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6001546001600160a01b03163314611e585760405162461bcd60e51b81526004018080602001828103825260238152602001806137156023913960400191505060405180910390fd5b6001600160a01b03166000908152600a60205260409020429055565b6001600160a01b03166000908152600a6020526040902054421090565b6000546001600160a01b03163314611ede576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b6000611ee9826118f3565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611f3a57600080fd5b505afa158015611f4e573d6000803e3d6000fd5b505050506040513d6020811015611f6457600080fd5b5051905060005b600254811015611fd75760006003600060028481548110611f8857fe5b600091825260208083206002909202909101546001600160a01b0316835282810193909352604091820181205460ff908116825260048452828220908916825290925281205550600101611f6b565b50600080546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519185169263a9059cbb926044808401936020939083900390910190829087803b15801561202f57600080fd5b505af1158015612043573d6000803e3d6000fd5b505050506040513d602081101561159257600080fd5b6000546001600160a01b031633146120a6576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b8160006003600060028460ff16815481106120bd57fe5b60009182526020808320600292830201546001600160a01b031684528301939093526040909101902054610100900460ff16908111156120f957fe5b141561213a576040805162461bcd60e51b815260206004820152601f602482015260008051602061379b833981519152604482015290519081900360640190fd5b60006001600160a01b038316600090815260036020526040902054610100900460ff16600281111561216857fe5b146121a45760405162461bcd60e51b81526004018080602001828103825260318152602001806136a26031913960400191505060405180910390fd5b6003600060028560ff16815481106121b857fe5b60009182526020808320600292830201546001600160a01b03908116855284820195909552604093840183209487168352600390529190208254815460ff191660ff91821617808355845492936101009384900490921692849261ff001990921691849081111561222557fe5b02179055509050506003600060028560ff168154811061224157fe5b60009182526020808320600292830201546001600160a01b0316845283019390935260409091019020805461ffff19169055805483919060ff861690811061228557fe5b6000918252602090912060029091020180546001600160a01b0319166001600160a01b0392909216919091179055505050565b600082816003600060028460ff16815481106122d057fe5b60009182526020808320600292830201546001600160a01b031684528301939093526040909101902054610100900460ff169081111561230c57fe5b141561234d576040805162461bcd60e51b815260206004820152601f602482015260008051602061379b833981519152604482015290519081900360640190fd5b505060ff91821660009081526005602090815260408083209390941682529190915220546001600160801b031690565b6001600160a01b0381166123c25760405162461bcd60e51b81526004018080602001828103825260258152602001806135f46025913960400191505060405180910390fd5b6000546001600160a01b03163314806123e557506001546001600160a01b031633145b6124205760405162461bcd60e51b81526004018080602001828103825260258152602001806135f46025913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f54841e992da2f7bcaa3127409f02e1849c79072740593c398d6670f65f995fa7916020908290030190a150565b6000546001600160a01b031633146124c7576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b8060026003600060028460ff16815481106124de57fe5b60009182526020808320600292830201546001600160a01b031684528301939093526040909101902054610100900460ff169081111561251a57fe5b1461256c576040805162461bcd60e51b815260206004820181905260248201527f54726561737572793a2067616d65206d7573742062652064697361626c656421604482015290519081900360640190fd5b60016003600060028560ff168154811061258257fe5b60009182526020808320600292830201546001600160a01b03168452830193909352604090910190208054909161ff0019909116906101009084908111156125c657fe5b02179055505050565b6000806125db33612cde565b90506125e781846132a2565b9392505050565b6000546001600160a01b0316331461263b576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b8260006003600060028460ff168154811061265257fe5b60009182526020808320600292830201546001600160a01b031684528301939093526040909101902054610100900460ff169081111561268e57fe5b14156126cf576040805162461bcd60e51b815260206004820152601f602482015260008051602061379b833981519152604482015290519081900360640190fd5b5060ff92831660009081526005602090815260408083209490951682529290925291902080546001600160801b0319166001600160801b03909216919091179055565b6001546001600160a01b031681565b60025460ff84161061277a576040805162461bcd60e51b815260206004820181905260248201527f54726561737572793a20756e726567697374657265642067616d65496e646578604482015290519081900360640190fd5b60065460ff8316106127bd5760405162461bcd60e51b81526004018080602001828103825260218152602001806136196021913960400191505060405180910390fd5b60006127c8836118f3565b90506127d5848484612f55565b604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b038316916323b872dd9160648083019260209291908290030181600087803b15801561282a57600080fd5b505af115801561283e573d6000803e3d6000fd5b505050506040513d602081101561285457600080fd5b505050505050565b60036020526000908152604090205460ff8082169161010090041682565b6000546001600160a01b031633146128c7576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b60005b60065460ff821610156129525760ff80831660009081526004602090815260408083209385168352929052205461290490839083906132c7565b60ff80831660008181526004602090815260408083209486168084529482528083208390559282526005815282822093825292909252902080546001600160801b03191690556001016128ca565b5060028160ff168154811061296357fe5b60009182526020822060029091020180546001600160a01b03191681559061298e600183018261351e565b505050565b6000546001600160a01b031633146129e0576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b8060016003600060028460ff16815481106129f757fe5b60009182526020808320600292830201546001600160a01b031684528301939093526040909101902054610100900460ff1690811115612a3357fe5b14612a85576040805162461bcd60e51b815260206004820152601f60248201527f54726561737572793a2067616d65206d75737420626520656e61626c65642100604482015290519081900360640190fd5b60026003600060028560ff168154811061258257fe5b6000546001600160a01b03163314612ae8576040805162461bcd60e51b815260206004820181905260248201526000805160206136d3833981519152604482015290519081900360640190fd5b61298e8383836132c7565b6000612afe826118f3565b6001600160a01b031663dd62ed3e84306040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015612b5b57600080fd5b505afa158015612b6f573d6000803e3d6000fd5b505050506040513d6020811015612b8557600080fd5b50519392505050565b60006125e783836132a2565b6000806001612bb0612bab88613336565b6133b9565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612c07573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612c63576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b6000828201838110156125e7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806001600160a01b038316600090815260036020526040902054610100900460ff166002811115612d0d57fe5b1415612d4e576040805162461bcd60e51b815260206004820152601f602482015260008051602061379b833981519152604482015290519081900360640190fd5b506001600160a01b031660009081526003602052604090205460ff1690565b60ff808416600090815260046020908152604080832093861683529290522054612d979082613405565b60ff938416600090815260046020908152604080832095909616825293909352929091209190915550565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310612e6f5780518252601f199092019160209182019101612e50565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ed1576040519150601f19603f3d011682016040523d82523d6000602084013e612ed6565b606091505b5091509150818015612f04575080511580612f045750808060200190516020811015612f0157600080fd5b50515b611592576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b60ff808416600090815260046020908152604080832093861683529290522054612d979082612c84565b60006060856001600160a01b031660405180606001604052806025815260200161363a602591398051602091820120604080516001600160a01b03808b166024830152891660448201526064808201899052825180830390910181526084909101825292830180516001600160e01b03166001600160e01b0319909316929092178252518251909182918083835b6020831061302c5780518252601f19909201916020918201910161300d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461308e576040519150601f19603f3d011682016040523d82523d6000602084013e613093565b606091505b50915091508180156130c15750805115806130c157508080602001905160208110156130be57600080fd5b50515b6128545760405162461bcd60e51b81526004018080602001828103825260248152602001806137de6024913960400191505060405180910390fd5b6001600160a01b0381166000908152600b60205260408120546131215761a8c061313b565b6001600160a01b0382166000908152600b60205260409020545b92915050565b6007546040805160208082018590528251808303820181529183019092528051910120146131b6576040805162461bcd60e51b815260206004820152601860248201527f686173682d636861696e3a2077726f6e6720706172656e740000000000000000604482015290519081900360640190fd5b600755565b6000333014156132135760606000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506132169050565b50335b90565b604080516001600160a01b03841681526020810183905281517fc013b897e18cef75cd10c876b6b78ae296a1d877e477f5e51f021be6c5a9a4f1929181900390910190a16001600160a01b0382166000908152600b602052604090208190556132824282612c84565b6001600160a01b039092166000908152600a602052604090209190915550565b60ff918216600090815260046020908152604080832093909416825291909152205490565b60006132d2836118f3565b90506132df848484612d6d565b600080546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810186905290519184169263a9059cbb926044808401936020939083900390910190829087803b15801561282a57600080fd5b600060405180608001604052806043815260200161365f60439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006133c3613462565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60008282111561345c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60085490565b60405180606001604052806000815260200160006001600160a01b03168152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826134c8576000855561350e565b82601f106134e15782800160ff1982351617855561350e565b8280016001018555821561350e579182015b8281111561350e5782358255916020019190600101906134f3565b5061351a9291506135de565b5090565b50805460018160011615610100020316600290046000825580601f106135445750611d15565b601f016020900490600052602060002090810190611d1591906135de565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613598576000855561350e565b82601f106135b157805160ff191683800117855561350e565b8280016001018555821561350e579182015b8281111561350e5782518255916020019190600101906135c3565b5b8082111561351a57600081556001016135df56fe416363657373436f6e74726f6c3a20696e76616c696420776f726b6572206164647265737354726561737572793a20756e7265676973746572656420746f6b656e496e6465787472616e7366657246726f6d28616464726573732c616464726573732c75696e74323536294d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652954726561737572793a2067616d652077697468206e6577206164647265737320616c7265616479206465636c6172656421416363657373436f6e74726f6c3a2043454f206163636573732064656e696564416363657373436f6e74726f6c3a20696e76616c69642043454f2061646472657373416363657373436f6e74726f6c3a20776f726b6572206163636573732064656e69656454726561737572793a206163746976652d67616d65206e6f742070726573656e74546f6b656e436f6e74726f6c6c65723a2062616c616e63652064657465637465645369676e657220616e64207369676e617475726520646f206e6f74206d6174636854726561737572793a2067616d65206973206e6f74206465636c617265642100416363657373436f6e74726f6c3a2063757272656e6c7479206e6f74207061757365645472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212202ee39dea46b136aa399d6141ddd8b1ee21f15b63df7d65e5fdcb27eaae55a1bb64736f6c63430007040033

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

000000000000000000000000a1c57f48f0deb89f569dfbe6e2b7f46d33606fd4000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000044d414e4100000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _defaultTokenAddress (address): 0xA1c57f48F0Deb89f569dFbE6E2B7f46D33606fD4
Arg [1] : _defaultTokenName (string): MANA

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000a1c57f48f0deb89f569dfbe6e2b7f46d33606fd4
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 4d414e4100000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

18942:6654:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22356:8;;;18942:6654;;;;13129:27;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13129:27:0;;:::i;:::-;;;;;-1:-1:-1;;;;;13129:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2327:25;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2327:25:0;;;;;;;;;;;;;;6611:1317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6611:1317:0;;;;;;;;;;;;;;;-1:-1:-1;;;6611:1317:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6611:1317:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6611:1317:0;;-1:-1:-1;;6611:1317:0;;;-1:-1:-1;;;6611:1317:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15792:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15792:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15792:205:0;;;;;;;;;;-1:-1:-1;15792:205:0;;-1:-1:-1;15792:205:0;-1:-1:-1;15792:205:0;:::i;:::-;;18570:365;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18570:365:0;;;;:::i;1938:19::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3450:239;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3450:239:0;-1:-1:-1;;;;;3450:239:0;;:::i;17126:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17126:29:0;;:::i;17164:346::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17164:346:0;;;;;;;;;;;;;;;-1:-1:-1;;;17164:346:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17164:346:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17164:346:0;;-1:-1:-1;17164:346:0;;-1:-1:-1;;;;;17164:346:0:i;9950:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9950:156:0;-1:-1:-1;;;;;9950:156:0;;:::i;20175:549::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20175:549:0;;;;;-1:-1:-1;;;;;20175:549:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;18350:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18350:212:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18350:212:0;;;;;;;;;;-1:-1:-1;18350:212:0;;-1:-1:-1;18350:212:0;-1:-1:-1;18350:212:0;:::i;18126:216::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18126:216:0;;;;;;;;-1:-1:-1;;;;;18126:216:0;;:::i;4230:106::-;;;;;;;;;;;;;:::i;19516:651::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19516:651:0;;;;;-1:-1:-1;;;;;19516:651:0;;;;;;;;;;:::i;17732:188::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17732:188:0;;;;:::i;2396:26::-;;;;;;;;;;;;;:::i;8420:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8420:44:0;-1:-1:-1;;;;;8420:44:0;;:::i;25281:312::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25281:312:0;;:::i;8367:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8367:46:0;-1:-1:-1;;;;;8367:46:0;;:::i;17928:190::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17928:190:0;;;;:::i;14156:733::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14156:733:0;;;;;;;;;;;;;;;-1:-1:-1;;;14156:733:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14156:733:0;;;;;;;;;;;;-1:-1:-1;14156:733:0;-1:-1:-1;14156:733:0;;;;:::i;21258:237::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21258:237:0;;;;:::i;:::-;;;;-1:-1:-1;;;;;21258:237:0;;;;;;;;;;;;;;25151:122;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25151:122:0;;:::i;8891:189::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8891:189:0;;:::i;4115:107::-;;;;;;;;;;;;;:::i;19349:159::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19349:159:0;-1:-1:-1;;;;;19349:159:0;;:::i;9765:177::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9765:177:0;-1:-1:-1;;;;;9765:177:0;;:::i;24593:550::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24593:550:0;;;;:::i;15222:562::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15222:562:0;;;;;;;;-1:-1:-1;;;;;15222:562:0;;:::i;21001:249::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21001:249:0;;;;;;;;;;;:::i;3697:410::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3697:410:0;-1:-1:-1;;;;;3697:410:0;;:::i;16005:226::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16005:226:0;;;;:::i;23109:294::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23109:294:0;;;;:::i;20732:261::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20732:261:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20732:261:0;;:::i;2359:28::-;;;;;;;;;;;;;:::i;22380:721::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22380:721:0;;;;;;;;;;;;;;;;;;:::i;13163:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13163:48:0;-1:-1:-1;;;;;13163:48:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21503:515;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21503:515:0;;;;:::i;16239:227::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16239:227:0;;;;:::i;24307:278::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24307:278:0;;;;;;;;;;;;;;;;;;:::i;22026:284::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22026:284:0;;-1:-1:-1;;;;;22026:284:0;;;;;;;;:::i;23605:260::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23605:260:0;;;;;;;;;;;:::i;13129:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13129:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13129:27:0;;;;-1:-1:-1;13129:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2327:25::-;;;-1:-1:-1;;;;;2327:25:0;;:::o;6611:1317::-;6838:12;6868:29;;:::i;:::-;-1:-1:-1;6900:192:0;;;;;;;;-1:-1:-1;;;;;6956:19:0;;-1:-1:-1;6956:19:0;;;:6;:19;;;;;;;;;6900:192;;;;;;;;;;;7127:145;6963:11;6900:192;7207:4;7230;7253;7127:6;:145::i;:::-;7105:215;;;;-1:-1:-1;;;7105:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7358:19:0;;;;;;:6;:19;;;;;;:26;;7382:1;7358:23;:26::i;:::-;7330:6;:19;7337:11;-1:-1:-1;;;;;7330:19:0;-1:-1:-1;;;;;7330:19:0;;;;;;;;;;;;:54;;;;7475:12;7489:23;7524:4;-1:-1:-1;;;;;7516:18:0;7584:17;7620:11;7549:97;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7549:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7549:97:0;;;;;;;;;;;;;;;;;;;;;;;7516:141;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7516:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7474:183;;;;7692:7;7670:85;;;;;-1:-1:-1;;;7670:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7773:117;7811:11;7837:10;7862:17;7773:117;;;;-1:-1:-1;;;;;7773:117:0;;;;;;-1:-1:-1;;;;;7773:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7910:10;6611:1317;-1:-1:-1;;;;;;;;6611:1317:0:o;15792:205::-;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;15977:12:::1;;15940:13;15954:10;15940:25;;;;;;;;;;;;;;;;;;;;:34;;:49;;;;;;;:::i;:::-;;15792:205:::0;;;:::o;18570:365::-;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;18677:16:::1;18696:53;18727:11;18696:16;:53::i;:::-;18677:72;;18784:5;-1:-1:-1::0;;;;;18784:15:0::1;;18808:4;18784:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;18784:30:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18784:30:0;:35;18762:118:::1;;;;-1:-1:-1::0;;;18762:118:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18900:14;18915:11;18900:27;;;;;;;;;;;::::0;;;::::1;::::0;;::::1;::::0;;::::1;;18893:34:::0;;-1:-1:-1;;;;;;18893:34:0::1;::::0;;18900:27;18893:34:::1;::::0;;::::1;18900:27:::0;18893:34:::1;:::i;1938:19::-:0;;;;:::o;3450:239::-;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3531:23:0;::::1;3509:107;;;;-1:-1:-1::0;;;3509:107:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3627:10;:20:::0;;-1:-1:-1;;;;;;3627:20:0::1;-1:-1:-1::0;;;;;3627:20:0;;::::1;::::0;;;::::1;::::0;;;;3663:18:::1;::::0;;3670:10;;;::::1;3663:18:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;3450:239:::0;:::o;17126:29::-;;;;;;;;;;;;17164:346;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;17339:152:::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;17339:152:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;17305:14:::1;:197:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;17305:197:0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;17305:197:0::1;::::0;;;::::1;;::::0;;;;;;::::1;::::0;;;;;;;;;::::1;::::0;::::1;:::i;:::-;;;;17164:346:::0;;:::o;9950:156::-;-1:-1:-1;;;;;10086:12:0;10047:13;10086:12;;;:6;:12;;;;;;;9950:156::o;20175:549::-;20364:4;20341:3;8787:19;8797:8;8787:9;:19::i;:::-;8765:96;;;;;-1:-1:-1;;;8765:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20386:16:::1;20405:24;20418:10;20405:12;:24::i;:::-;20386:43;;20440:14;20457:28;20473:11;20457:15;:28::i;:::-;20440:45;;20498:97;20526:10;20551:11;20577:7;20498:13;:97::i;:::-;20608:84;20635:6;20656:3;20674:7;20608:12;:84::i;:::-;-1:-1:-1::0;20712:4:0::1;::::0;20175:549;-1:-1:-1;;;;;;20175:549:0:o;18350:212::-;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;18541:13:::1;;18501:14;18516:11;18501:27;;;;;;;;;18126:216:::0;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;18318:16:::1;18275:14;18290:11;18275:27;;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:59:::0;;-1:-1:-1;;;;;;18275:59:0::1;-1:-1:-1::0;;;;;18275:59:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;18126:216:0:o;4230:106::-;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;3353:6:::1;::::0;-1:-1:-1;;;3353:6:0;::::1;;;3331:91;;;;-1:-1:-1::0;;;3331:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4288:6:::2;:14:::0;;-1:-1:-1;;;;4288:14:0::2;::::0;;4318:10:::2;::::0;::::2;::::0;4297:5:::2;::::0;4318:10:::2;4230:106::o:0;19516:651::-;19707:4;19682:5;8557:19;8567:8;8557:9;:19::i;:::-;:62;;;-1:-1:-1;;;;;;8593:21:0;;;;;;:11;:21;;;;;;:26;8557:62;8535:139;;;;;-1:-1:-1;;;8535:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19729:16:::1;19748:24;19761:10;19748:12;:24::i;:::-;19729:43;;19783:14;19800:28;19816:11;19800:15;:28::i;:::-;19783:45;;19841:97;19869:10;19894:11;19920:7;19841:13;:97::i;:::-;19951:105;19982:6;20003:5;20031:4;20038:7;19951:16;:105::i;:::-;20090:45;20110:24;20123:10;20110:12;:24::i;:::-;20090:15;::::0;:19:::1;:45::i;:::-;-1:-1:-1::0;;;;;20069:18:0;::::1;;::::0;;;:11:::1;:18;::::0;;;;:66;-1:-1:-1;20155:4:0::1;::::0;-1:-1:-1;;19516:651:0;;;;;;:::o;17732:188::-;17840:7;17872:14;17887:11;17872:27;;;;;;;;;;;;;;;;;;;;;;;:40;-1:-1:-1;;;;;17872:40:0;;17732:188;-1:-1:-1;;17732:188:0:o;2396:26::-;;;-1:-1:-1;;;2396:26:0;;;;;:::o;8420:44::-;;;;;;;;;;;;;:::o;25281:312::-;25374:4;25449:18;25427:10;25418:20;;;;:8;:20;;;;;:27;;;;;;:49;;;;;;;;;25396:132;;;;-1:-1:-1;;;25396:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25541:20;25550:10;25541:8;:20::i;:::-;-1:-1:-1;25581:4:0;25281:312;;;:::o;8367:46::-;;;;;;;;;;;;;:::o;17928:190::-;18035:13;18073:14;18088:11;18073:27;;;;;;;;;;;;;;;;;;;;:37;;18066:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17928:190;;;:::o;14156:733::-;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;14387:16:::1;-1:-1:-1::0;;;;;14351:25:0;::::1;;::::0;;;:8:::1;:25;::::0;;;;:32;::::1;::::0;::::1;;;:52;::::0;::::1;;;;;;;14329:134;;;::::0;;-1:-1:-1;;;14329:134:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14476:13;14509:153;;;;;;;;14568:15;-1:-1:-1::0;;;;;14509:153:0::1;;;;;14616:12;;14509:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;14509:153:0;;;;-1:-1:-1;;14476:197:0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;14476:197:0::1;-1:-1:-1::0;;;;;14476:197:0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;;;;;::::1;::::0;-1:-1:-1;14476:197:0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;14724:13:0::1;:20:::0;-1:-1:-1;;;;;14684:25:0;::::1;;::::0;;;:8:::1;:25;::::0;;;;:65;;-1:-1:-1;;14684:65:0::1;-1:-1:-1::0;;14724:24:0;;;14684:65:::1;;::::0;;;::::1;::::0;;-1:-1:-1;14795:17:0;::::1;;-1:-1:-1::0;14795:17:0::1;:86;;14862:19;14795:86;;;14828:18;14795:86;-1:-1:-1::0;;;;;14760:25:0;::::1;;::::0;;;:8:::1;:25;::::0;;;;:121;;-1:-1:-1;;14760:121:0::1;;::::0;::::1;::::0;::::1;;;;;;;;;;;14156:733:::0;;;;:::o;21258:237::-;21366:7;21391:16;21410:24;21423:10;21410:12;:24::i;:::-;21452:22;;;;;;;;:10;:22;;;;;;;;:35;;;;;;;;;;-1:-1:-1;;;;;21452:35:0;;-1:-1:-1;;21258:237:0;;;:::o;25151:122::-;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;25250:15:::1;25259:5;25250:8;:15::i;:::-;25151:122:::0;:::o;8891:189::-;8990:82;9019:11;:9;:11::i;:::-;9045:16;8990:14;:82::i;4115:107::-;3044:13;;-1:-1:-1;;;;;3044:13:0;3030:10;:27;3008:112;;;;-1:-1:-1;;;3008:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3207:6:::1;::::0;-1:-1:-1;;;3207:6:0;::::1;;;3206:7;3184:88;;;::::0;;-1:-1:-1;;;3184:88:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4186:4:::2;4177:13:::0;;-1:-1:-1;;;;4177:13:0::2;-1:-1:-1::0;;;4177:13:0::2;::::0;;4206:8:::2;::::0;::::2;::::0;4177:13;;4206:8:::2;4115:107::o:0;19349:159::-;3044:13;;-1:-1:-1;;;;;3044:13:0;3030:10;:27;3008:112;;;;-1:-1:-1;;;3008:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19461:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;19485:15:::1;19461:39:::0;;19349:159::o;9765:177::-;-1:-1:-1;;;;;9895:21:0;9866:4;9895:21;;;:11;:21;;;;;;9919:15;-1:-1:-1;;9765:177:0:o;24593:550::-;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;24688:16:::1;24707:53;24738:11;24707:16;:53::i;:::-;24688:72;;24773:14;24790:5;-1:-1:-1::0;;;;;24790:15:0::1;;24828:4;24790:54;;;;;;;;;;;;;-1:-1:-1::0;;;;;24790:54:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;24790:54:0;;-1:-1:-1;24862:9:0::1;24857:195;24881:13;:20:::0;24877:24;::::1;24857:195;;;24923:16;24942:8;:38;24951:13;24965:1;24951:16;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;:28:::0;-1:-1:-1;;;;;24951:28:0::1;24942:38:::0;;;;::::1;::::0;;;;;;;;;;:44;::::1;::::0;;::::1;25001:22:::0;;:10:::1;:22:::0;;;;;:35;;::::1;::::0;;;;;;;:39;-1:-1:-1;24951:28:0;24903:3:::1;24857:195;;;-1:-1:-1::0;25093:10:0::1;::::0;;25064:71:::1;::::0;;-1:-1:-1;;;25064:71:0;;-1:-1:-1;;;;;25093:10:0;;::::1;25064:71;::::0;::::1;::::0;;;;;;;;;:14;;::::1;::::0;::::1;::::0;:71;;;;;::::1;::::0;;;;;;;;;;;:14;:71;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;15222:562:::0;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;15378:10;13509:16:::1;13419:8;:79;13446:13;13460:10;13446:25;;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:37:::0;-1:-1:-1;;;;;13446:37:0::1;13419:79:::0;;;::::1;::::0;;;;;;;;;;:86;13446:37:::1;13419:86:::0;::::1;;;::::0;:106;::::1;;;;;;;;13397:187;;;::::0;;-1:-1:-1;;;13397:187:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;13397:187:0;;;;;;;;;;;;;::::1;;15464:16:::2;-1:-1:-1::0;;;;;15428:25:0;::::2;;::::0;;;:8:::2;:25;::::0;;;;:32;::::2;::::0;::::2;;;:52;::::0;::::2;;;;;;;15406:151;;;;-1:-1:-1::0;;;15406:151:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15598:8;:47;15607:13;15621:10;15607:25;;;;;;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;:37:::0;-1:-1:-1;;;;;15607:37:0;;::::2;15598:47:::0;;;;::::2;::::0;;;;;;;;;;15570:25;;::::2;::::0;;:8:::2;:25:::0;;;;;:75;;;;-1:-1:-1;;15570:75:0::2;;::::0;;::::2;;::::0;;;;;:25;;15607:37:::2;15570:75:::0;;;::::2;::::0;;::::2;::::0;:25;;-1:-1:-1;;15570:75:0;;::::2;::::0;;;;::::2;;;;;;;;;;;;;;15663:8;:47;15672:13;15686:10;15672:25;;;;;;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;:37:::0;-1:-1:-1;;;;;15672:37:0::2;15663:47:::0;;;::::2;::::0;;;;;;;;;;15656:54;;-1:-1:-1;;15656:54:0;;;15721:25;;15761:15;;15672:25;15656:54:::2;15721:25:::0;::::2;::::0;;::::2;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;:55:::0;;-1:-1:-1;;;;;;15721:55:0::2;-1:-1:-1::0;;;;;15721:55:0;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;15222:562:0:o;21001:249::-;21175:7;21145:10;21175:7;13419:8;:79;13446:13;13460:10;13446:25;;;;;;;;;;;;;;;;;;;;;;;:37;-1:-1:-1;;;;;13446:37:0;13419:79;;;;;;;;;;;;;;:86;13446:37;13419:86;;;;;:106;;;;;;;;;13397:187;;;;;-1:-1:-1;;;13397:187:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13397:187:0;;;;;;;;;;;;;;;-1:-1:-1;;21207:22:0::1;::::0;;::::1;;::::0;;;:10:::1;:22;::::0;;;;;;;:35;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;21207:35:0::1;::::0;21001:249::o;3697:410::-;-1:-1:-1;;;;;3778:26:0;;3756:113;;;;-1:-1:-1;;;3756:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3916:10;;-1:-1:-1;;;;;3916:10:0;3902;:24;;:55;;-1:-1:-1;3944:13:0;;-1:-1:-1;;;;;3944:13:0;3930:10;:27;3902:55;3880:142;;;;-1:-1:-1;;;3880:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4033:13;:26;;-1:-1:-1;;;;;;4033:26:0;-1:-1:-1;;;;;4033:26:0;;;;;;;;;;;4075:24;;;4085:13;;;;4075:24;;;;;;;;;;;;;3697:410;:::o;16005:226::-;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;16120:10;14050:19:::1;13960:8;:79;13987:13;14001:10;13987:25;;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:37:::0;-1:-1:-1;;;;;13987:37:0::1;13960:79:::0;;;::::1;::::0;;;;;;;;;;:86;13987:37:::1;13960:86:::0;::::1;;;::::0;:109;::::1;;;;;;;13938:191;;;::::0;;-1:-1:-1;;;13938:191:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16205:18:::2;16148:8;:47;16157:13;16171:10;16157:25;;;;;;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;:37:::0;-1:-1:-1;;;;;16157:37:0::2;16148:47:::0;;;::::2;::::0;;;;;;;;;;:75;;:47;;-1:-1:-1;;16148:75:0;;::::2;::::0;16157:37:::2;::::0;16148:75;;;::::2;;;;;;;;;;;2958:1:::1;16005:226:::0;:::o;23109:294::-;23224:7;23249:16;23268:24;23281:10;23268:12;:24::i;:::-;23249:43;;23312:83;23348:10;23373:11;23312:21;:83::i;:::-;23305:90;23109:294;-1:-1:-1;;;23109:294:0:o;20732:261::-;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;20908:10;13509:16:::1;13419:8;:79;13446:13;13460:10;13446:25;;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:37:::0;-1:-1:-1;;;;;13446:37:0::1;13419:79:::0;;;::::1;::::0;;;;;;;;;;:86;13446:37:::1;13419:86:::0;::::1;;;::::0;:106;::::1;;;;;;;;13397:187;;;::::0;;-1:-1:-1;;;13397:187:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;13397:187:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;20936:22:0::2;::::0;;::::2;;::::0;;;:10:::2;:22;::::0;;;;;;;:35;;;::::2;::::0;;;;;;;;;:49;;-1:-1:-1;;;;;;20936:49:0::2;-1:-1:-1::0;;;;;20936:49:0;;::::2;::::0;;;::::2;::::0;;20732:261::o;2359:28::-;;;-1:-1:-1;;;;;2359:28:0;;:::o;22380:721::-;22560:13;:20;22547:33;;;;22525:115;;;;;-1:-1:-1;;;22525:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22689:14;:21;22675:35;;;;22653:118;;;;-1:-1:-1;;;22653:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22784:16;22803:53;22834:11;22803:16;:53::i;:::-;22784:72;;22869:102;22897:10;22922:11;22948:12;22869:13;:102::i;:::-;22984:109;;;-1:-1:-1;;;22984:109:0;;23017:10;22984:109;;;;23050:4;22984:109;;;;;;;;;;;;-1:-1:-1;;;;;22984:18:0;;;;;:109;;;;;;;;;;;;;;-1:-1:-1;22984:18:0;:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22380:721:0:o;13163:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;21503:515::-;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;21611:17:::1;21606:362;21648:14;:21:::0;21634:35:::1;::::0;::::1;;21606:362;;;21798:22;::::0;;::::1;;::::0;;;:10:::1;:22;::::0;;;;;;;:35;;::::1;::::0;;;;;;;21701:147:::1;::::0;21739:10;;21768:11;;21701:19:::1;:147::i;:::-;21863:22;::::0;;::::1;21901:1;21863:22:::0;;;:10:::1;:22;::::0;;;;;;;:35;;::::1;::::0;;;;;;;;;:39;;;21917:22;;;:10:::1;:22:::0;;;;;:35;;;;;;;;;:39;;-1:-1:-1;;;;;;21917:39:0::1;::::0;;;21671:13:::1;21606:362;;;;21985:13;21999:10;21985:25;;;;;;;;;;;::::0;;;::::1;::::0;;::::1;::::0;;::::1;;21978:32:::0;;-1:-1:-1;;;;;;21978:32:0::1;::::0;;21985:25;21978:32:::1;::::0;;::::1;21985:25:::0;21978:32:::1;:::i;:::-;;;21503:515:::0;:::o;16239:227::-;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;16354:10;13778:18:::1;13688:8;:79;13715:13;13729:10;13715:25;;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:37:::0;-1:-1:-1;;;;;13715:37:0::1;13688:79:::0;;;::::1;::::0;;;;;;;;;;:86;13715:37:::1;13688:86:::0;::::1;;;::::0;:108;::::1;;;;;;;13666:189;;;::::0;;-1:-1:-1;;;13666:189:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16439:19:::2;16382:8;:47;16391:13;16405:10;16391:25;;;;;;;;;24307:278:::0;2877:10;;-1:-1:-1;;;;;2877:10:0;2863;:24;2841:106;;;;;-1:-1:-1;;;2841:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2841:106:0;;;;;;;;;;;;;;;24474:103:::1;24508:10;24533:11;24559:7;24474:19;:103::i;22026:284::-:0;22165:7;22197:29;22214:11;22197:16;:29::i;:::-;-1:-1:-1;;;;;22197:39:0;;22251:12;22286:4;22197:105;;;;;;;;;;;;;-1:-1:-1;;;;;22197:105:0;;;;;;-1:-1:-1;;;;;22197:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22197:105:0;;22026:284;-1:-1:-1;;;22026:284:0:o;23605:260::-;23742:7;23774:83;23810:10;23835:11;23774:21;:83::i;10114:546::-;10317:4;10339:14;10356:171;10380:79;10417:27;10437:6;10417:19;:27::i;:::-;10380:18;:79::i;:::-;10474:4;10493;10512;10356:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10356:171:0;;-1:-1:-1;;10356:171:0;;;-1:-1:-1;;;;;;;10562:22:0;;10540:89;;;;;-1:-1:-1;;;10540:89:0;;;;;;;;;;;;-1:-1:-1;;;10540:89:0;;;;;;;;;;;;;;;10651:4;-1:-1:-1;;;;;10641:14:0;:6;-1:-1:-1;;;;;10641:14:0;;10634:21;;;10114:546;;;;;;;:::o;95:179::-;153:7;185:5;;;209:6;;;;201:46;;;;;-1:-1:-1;;;201:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;14897:317;15007:5;;-1:-1:-1;;;;;15052:22:0;;;;;;:8;:22;;;;;:29;;;;;;:49;;;;;;;;;;15030:130;;;;;-1:-1:-1;;;15030:130:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15030:130:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15178:22:0;;;;;:8;:22;;;;;:28;;;;14897:317::o;16730:248::-;16922:22;;;;;;;;:10;:22;;;;;;;;:35;;;;;;;;;;:48;;16962:7;16922:39;:48::i;:::-;16875:22;;;;;;;;:10;:22;;;;;;;;:35;;;;;;;;;;;;;;:95;;;;-1:-1:-1;16730:248:0:o;11629:564::-;11322:80;;;;;;;;;;;;;;;;;11826:125;;-1:-1:-1;;;;;11826:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11826:125:0;-1:-1:-1;;;11826:125:0;;;11800:162;;;;11765:12;;11779:17;;11800:11;;;11826:125;11800:162;;;11826:125;11800:162;;11826:125;11800:162;;;;;;;;;;-1:-1:-1;;11800:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11764:198;;;;11997:7;:129;;;;-1:-1:-1;12027:11:0;;:16;;:84;;;12080:4;12047:64;;;;;;;;;;;;;;;-1:-1:-1;12047:64:0;12027:84;11975:210;;;;;-1:-1:-1;;;11975:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;16474:248;16666:22;;;;;;;;:10;:22;;;;;;;;:35;;;;;;;;;;:48;;16706:7;16666:39;:48::i;12201:609::-;12362:12;12376:17;12397:6;-1:-1:-1;;;;;12397:11:0;11510:92;;;;;;;;;;;;;;;;;11486:127;;;;;;;12423:140;;;-1:-1:-1;;;;;12423:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12423:140:0;-1:-1:-1;;;;;;12423:140:0;;;;;;;;;12397:177;;;;;;;;;12423:140;12397:177;;;;;;;;;;-1:-1:-1;;12397:177:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12361:213;;;;12609:7;:129;;;;-1:-1:-1;12639:11:0;;:16;;:84;;;12692:4;12659:64;;;;;;;;;;;;;;;-1:-1:-1;12659:64:0;12639:84;12587:215;;;;-1:-1:-1;;;12587:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9521:236;-1:-1:-1;;;;;9672:19:0;;9627:7;9672:19;;;:9;:19;;;;;;:77;;8350:8;9672:77;;;-1:-1:-1;;;;;9711:19:0;;;;;;:9;:19;;;;;;9672:77;9652:97;9521:236;-1:-1:-1;;9521:236:0:o;2047:238::-;2196:4;;2152:25;;;;;;;;;;;;;;;;;;;;;;;;;2124:68;;;;;:76;2102:150;;;;;-1:-1:-1;;;2102:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2263:4;:14;2047:238::o;10668:538::-;10711:14;10741:10;10763:4;10741:27;10738:437;;;10785:18;10806:8;;10785:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;10845:8:0;11034:17;11028:24;-1:-1:-1;;;;;11024:73:0;;-1:-1:-1;10884:228:0;;-1:-1:-1;10884:228:0;;-1:-1:-1;11153:10:0;10738:437;10668:538;:::o;9183:330::-;9312:76;;;-1:-1:-1;;;;;9312:76:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9401:16:0;;;;;;:9;:16;;;;;:35;;;9468:37;:15;9420:16;9468:19;:37::i;:::-;-1:-1:-1;;;;;9447:18:0;;;;;;;:11;:18;;;;;:58;;;;-1:-1:-1;9183:330:0:o;23411:186::-;23554:22;;;;23527:7;23554:22;;;:10;:22;;;;;;;;:35;;;;;;;;;;;;;23411:186::o;23873:426::-;24024:16;24043:53;24074:11;24043:16;:53::i;:::-;24024:72;;24109:97;24137:10;24162:11;24188:7;24109:13;:97::i;:::-;24248:10;;;24219:72;;;-1:-1:-1;;;24219:72:0;;-1:-1:-1;;;;;24248:10:0;;;24219:72;;;;;;;;;;;;:14;;;;;;:72;;;;;;;;;;;;;;;;;:14;:72;;;;;;;;;;7936:370;8062:7;5937:108;;;;;;;;;;;;;;;;;5913:143;;;;;;8179:6;:12;;;8210:6;:11;;;8250:6;:24;;;8240:35;;;;;;8106:184;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8106:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8088:213;;;;;;8081:220;;7936:370;;;:::o;5564:180::-;5635:7;5701:20;:18;:20::i;:::-;5723:11;5672:63;;;;;;-1:-1:-1;;;5672:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5662:74;;;;;;5655:81;;5564:180;;;:::o;282:182::-;340:7;373:1;368;:6;;360:49;;;;;-1:-1:-1;;;360:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;432:5:0;;;282:182::o;5109:92::-;5181:15;;5109:92;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://2ee39dea46b136aa399d6141ddd8b1ee21f15b63df7d65e5fdcb27eaae55a1bb

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

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.