Contract 0x49a0400587a7f65072c87c4910449fdcc5c47242 2

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xc036bca44bae8517e30501a38ea574dca1e27f8b805b6deb1427146d8822724aApprove405835052023-03-21 0:37:002 days 23 mins ago0xb2adf3b10a3ce45b4166c899ad17c018e2ba58b8 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.005807139782 125.361910562
0x6dca58cf4ae82a446e7c5682271908dcb4c8c40f120cdeaad9a832989eb0a728Approve405788812023-03-20 21:18:302 days 3 hrs ago0x06c1cc2f30d454b330abaf8a0528d019068c536d IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.005919597127
0x5276f1d1acf4c601242d104778bf56c0c5acd42cd4c7780272770d190ee01dcaTransfer405497372023-03-20 2:54:262 days 22 hrs ago0x94d4b3c0a5df4b1f6c4e8ec3f818e7c7c3c92227 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.005963966924 127.495124308
0x65cf261e275970d728bdba4cd6fdafa0e1fc30ca8b72f55af34513f7f92c97e9Approve402910522023-03-13 8:16:249 days 16 hrs ago0x0000ecb341a3c0bb394f377d3a524703fb8b76fb IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.005105891475 109.683819372
0xf3f68d83e21760f6200566f9b89a74a0e6fad4d1b8b40ba006f6e7dc0417778fApprove401640322023-03-10 0:16:0913 days 44 mins ago0x8c41a0a8ad92e0c21b96d19debe57b0288e76a83 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.008012973383 171.911638525
0xcd43783905896f412792c242580f35ec20e2193a51ba67c526f9aff08077ccc4Approve400077582023-03-05 21:38:0717 days 3 hrs ago0x11286a8d9ab6c307ce0681ad66c1b588ad85a03a IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.002480614523 53.219508774
0x2a40d85664e34525da22e112db65f5a3249dab8ed618e0988259a87c904d9e37Approve399732672023-03-05 0:34:1218 days 26 mins ago0x75620ab919086df5a44905320b65c2dbe10ce164 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.003504613832 75.188557036
0x157f995f2ac4c282a4f71efb2b5013bba5068cb59c66d7a192c49532489858d2Approve397714212023-02-27 14:55:0023 days 10 hrs ago0xbc944ba0cd0bb348157cfb7c8b43f246e8f2a402 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.011963949526 256.676525429
0x52123561ecb72696c1f670db934c4a43e56ca4ff177ddd37f0589408e34d41e5Approve393992212023-02-17 15:32:4633 days 9 hrs ago0x7757d896e2c1548a308ad97d58c42517e47aee78 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.013248705238 284.239884112
0x8ce6c6c0f23af6c5a6ed774f10a914e40cbddf8516c158609c3919e6ecb61f9aApprove393604382023-02-16 14:02:3934 days 10 hrs ago0xe739dd6f006ead17a0454f8dba70d465d8e167fc IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.021093607153 455.123463299
0xa912f3d490beda54bd36e01fa1d517db73d640bfb083459f3eb5c1581f4b9e92Approve393488082023-02-16 6:35:4834 days 18 hrs ago0x9975afae437aae84297cc66c87baf1cad756f368 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.011158683731 239.400221649
0x4e4bd92d22d814ebf9965ba6e1afd7674dd7eb6eb34cbd43d679825e3c46e549Approve393371812023-02-15 23:17:4835 days 1 hr ago0xa97e5bff61454486b545538acd574e664502b7ba IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.018097776319 388.272646355
0x4e99a660a8eb7a3b84346597e5c2e4966ce83984bc9dd99daead1b2ed2248e59Approve391872762023-02-11 22:05:4639 days 2 hrs ago0x0764dc400c280ff2b6d1f0582969c0c668271340 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.008266683388 177.354774381
0x86d9f5874e683270d02282b29ab42095ba7e0fa9074deeb1dba573da6fde42d4Approve391862432023-02-11 21:16:5839 days 3 hrs ago0xea3f7f0b17025c43a3da2fb702cc875f35a48f46 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.006309169106 135.357943552
0xf73336a8a7ae0bb2693ce8537dd2a107625c0def4ee9eb440a751a5983cbf2b6Approve391515682023-02-10 22:57:0240 days 2 hrs ago0xea3f7f0b17025c43a3da2fb702cc875f35a48f46 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.006698350159 143.707497364
0x337c9d4603d7ed7054ad427554ab735fdb91fa58f965a55efa4f54a82fd1b51dApprove390818862023-02-09 3:38:5441 days 21 hrs ago0x59ef34453e042efe997f64ae431a23bfcd4291e9 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.012499106294 268.157866043
0x1a583a3e3932bd4ad55d9a685dc66693084353014ad429431afe3fd8ded4d02fApprove390519462023-02-08 9:35:2842 days 15 hrs ago0x6f83f340365685f113e77bb4982c9f12ef1325cd IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.011653758223 250.021630587
0x733e949dc69ec1d49ab805d07dfa807b0f64b43928dcc39b2b72b253e5e05d5cApprove387008572023-01-30 10:25:2151 days 14 hrs ago0xc02a6913577118e946a7f73605279c6b189826dc IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.005549315216 119.055914196
0xe1b9a9865e0d498edba81783c7b02313e5bdd5febcdec966122adfafb6da3b00Approve386396152023-01-28 21:15:0853 days 3 hrs ago faisalh23059525.wallet  IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.00106933244
0x9c13661daa8a39aba8134e690c558bad28eb03c7294783477ddf48066d64e022Approve385668202023-01-26 23:46:1655 days 1 hr ago0xb132003ba65546148f7afb2be677a1ab782562e6 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.002732381943 58.985427185
0xf982566a7d8c842f1faeb0327fdd8da25993bb06b3437624da9e68379b461f88Approve385668052023-01-26 23:45:4455 days 1 hr ago0xb132003ba65546148f7afb2be677a1ab782562e6 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.002824860063 60.981803063
0xa9ee594393dc245859f171187e89148be2da3925aa25f49e4ef6e8d683313402Approve382059962023-01-17 21:04:0864 days 3 hrs ago0xc9691cc21d99a0c3f52a41673c29f71906b13a0d IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.002347679429 50.367497581
0xf883d7fa8ac96cdad874da7ca66a5dad13ce9fb1e63307fc804dc643c70ce5ecApprove381793642023-01-17 5:05:5464 days 19 hrs ago0x3000775fe09e379d935d2736806cb7f5581355af IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.001144426485 42.844763775
0xa8ef729cd807b043224daf79b01cbe2cea4f6855a2a349b6c8ac51a5e8c6581cApprove381782402023-01-17 4:27:1864 days 20 hrs ago0x3000775fe09e379d935d2736806cb7f5581355af IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.001945247421 41.733655599
0x29db2a1935242f0418903816a2a307ae057b31f86fcb50c2eef0bcd65c82e993Approve378720012023-01-09 18:23:2772 days 6 hrs ago0x7b9c47e4b14160385407643cba61f374ad709524 IN  0x49a0400587a7f65072c87c4910449fdcc5c472420 MATIC0.003580548506 77.155353848
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnyswapV5ERC20

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-04-11
*/

/**
 *Submitted for verification at Etherscan.io on 2022-01-06
*/

/**
 *Submitted for verification at BscScan.com on 2021-12-10
*/

/**
 *Submitted for verification at BscScan.com on 2021-06-15
*/

/**
 *Submitted for verification at BscScan.com on 2021-06-11
*/

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

/**
 *Submitted for verification at Etherscan.io on 2021-06-08
*/

/**
 *Submitted for verification at Etherscan.io on 2021-06-07
*/

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity 0.8.2;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    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);
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface of the ERC2612 standard as defined in the EIP.
 *
 * Adds the {permit} method, which can be used to change one's
 * {IERC20-allowance} without having to send a transaction, by signing a
 * message. This allows users to spend tokens without having to hold Ether.
 *
 * See https://eips.ethereum.org/EIPS/eip-2612.
 */
interface IERC2612 {

    /**
     * @dev Returns the current ERC2612 nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);
}

/// @dev Wrapped ERC-20 v10 (AnyswapV3ERC20) is an ERC-20 ERC-20 wrapper. You can `deposit` ERC-20 and obtain an AnyswapV3ERC20 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ERC-20 from AnyswapV3ERC20, which will then burn AnyswapV3ERC20 token in your wallet. The amount of AnyswapV3ERC20 token in any wallet is always identical to the
/// balance of ERC-20 deposited minus the ERC-20 withdrawn with that specific wallet.
interface IAnyswapV3ERC20 is IERC20, IERC2612 {

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ERC-20 withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external returns (bool);
}

interface ITransferReceiver {
    function onTokenTransfer(address, uint, bytes calldata) external returns (bool);
}

interface IApprovalReceiver {
    function onTokenApproval(address, uint, bytes calldata) external returns (bool);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract AnyswapV5ERC20 is IAnyswapV3ERC20 {
    using SafeERC20 for IERC20;
    string public name;
    string public symbol;
    uint8  public immutable override decimals;

    address public immutable underlying;

    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant TRANSFER_TYPEHASH = keccak256("Transfer(address owner,address to,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public immutable DOMAIN_SEPARATOR;

    /// @dev Records amount of AnyswapV3ERC20 token owned by account.
    mapping (address => uint256) public override balanceOf;
    uint256 private _totalSupply;

    // init flag for setting immediate vault, needed for CREATE2 support
    bool private _init;

    // flag to enable/disable swapout vs vault.burn so multiple events are triggered
    bool private _vaultOnly;

    // configurable delay for timelock functions
    uint public delay = 2*24*3600;


    // set of minters, can be this bridge or other bridges
    mapping(address => bool) public isMinter;
    address[] public minters;

    // primary controller of the token contract
    address public vault;

    address public pendingMinter;
    uint public delayMinter;

    address public pendingVault;
    uint public delayVault;

    uint public pendingDelay;
    uint public delayDelay;


    modifier onlyAuth() {
        require(isMinter[msg.sender], "AnyswapV4ERC20: FORBIDDEN");
        _;
    }

    modifier onlyVault() {
        require(msg.sender == mpc(), "AnyswapV3ERC20: FORBIDDEN");
        _;
    }

    function owner() public view returns (address) {
        return mpc();
    }

    function mpc() public view returns (address) {
        if (block.timestamp >= delayVault) {
            return pendingVault;
        }
        return vault;
    }

    function setVaultOnly(bool enabled) external onlyVault {
        _vaultOnly = enabled;
    }

    function initVault(address _vault) external onlyVault {
        require(_init);
        vault = _vault;
        pendingVault = _vault;
        isMinter[_vault] = true;
        minters.push(_vault);
        delayVault = block.timestamp;
        _init = false;
    }

    function setMinter(address _auth) external onlyVault {
        pendingMinter = _auth;
        delayMinter = block.timestamp + delay;
    }

    function setVault(address _vault) external onlyVault {
        pendingVault = _vault;
        delayVault = block.timestamp + delay;
    }

    function applyVault() external onlyVault {
        require(block.timestamp >= delayVault);
        vault = pendingVault;
    }

    function applyMinter() external onlyVault {
        require(block.timestamp >= delayMinter);
        isMinter[pendingMinter] = true;
        minters.push(pendingMinter);
    }

    // No time delay revoke minter emergency function
    function revokeMinter(address _auth) external onlyVault {
        isMinter[_auth] = false;
    }

    function getAllMinters() external view returns (address[] memory) {
        return minters;
    }


    function changeVault(address newVault) external onlyVault returns (bool) {
        require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
        pendingVault = newVault;
        delayVault = block.timestamp + delay;
        emit LogChangeVault(vault, pendingVault, delayVault);
        return true;
    }

    function changeMPCOwner(address newVault) public onlyVault returns (bool) {
        require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
        pendingVault = newVault;
        delayVault = block.timestamp + delay;
        emit LogChangeMPCOwner(vault, pendingVault, delayVault);
        return true;
    }

    function mint(address to, uint256 amount) external onlyAuth returns (bool) {
        _mint(to, amount);
        return true;
    }

    function burn(address from, uint256 amount) external onlyAuth returns (bool) {
        require(from != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(from, amount);
        return true;
    }

    function Swapin(bytes32 txhash, address account, uint256 amount) public onlyAuth returns (bool) {
        _mint(account, amount);
        emit LogSwapin(txhash, account, amount);
        return true;
    }

    function Swapout(uint256 amount, address bindaddr) public returns (bool) {
        require(!_vaultOnly, "AnyswapV4ERC20: onlyAuth");
        require(bindaddr != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(msg.sender, amount);
        emit LogSwapout(msg.sender, bindaddr, amount);
        return true;
    }

    /// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}.
    /// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times.
    mapping (address => uint256) public override nonces;

    /// @dev Records number of AnyswapV3ERC20 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}.
    mapping (address => mapping (address => uint256)) public override allowance;

    event LogChangeVault(address indexed oldVault, address indexed newVault, uint indexed effectiveTime);
    event LogChangeMPCOwner(address indexed oldOwner, address indexed newOwner, uint indexed effectiveHeight);
    event LogSwapin(bytes32 indexed txhash, address indexed account, uint amount);
    event LogSwapout(address indexed account, address indexed bindaddr, uint amount);
    event LogAddAuth(address indexed auth, uint timestamp);

    constructor(string memory _name, string memory _symbol, uint8 _decimals, address _underlying, address _vault) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        underlying = _underlying;
        if (_underlying != address(0x0)) {
            require(_decimals == IERC20(_underlying).decimals());
        }

        // Use init to allow for CREATE2 accross all chains
        _init = true;

        // Disable/Enable swapout for v1 tokens vs mint/burn for v3 tokens
        _vaultOnly = false;

        vault = _vault;
        pendingVault = _vault;
        delayVault = block.timestamp;

        uint256 chainId;
        assembly {chainId := chainid()}
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)));
    }

    /// @dev Returns the total supply of AnyswapV3ERC20 token as the ETH held in this contract.
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function depositWithPermit(address target, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external returns (uint) {
        IERC20(underlying).permit(target, address(this), value, deadline, v, r, s);
        IERC20(underlying).safeTransferFrom(target, address(this), value);
        return _deposit(value, to);
    }

    function depositWithTransferPermit(address target, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external returns (uint) {
        IERC20(underlying).transferWithPermit(target, address(this), value, deadline, v, r, s);
        return _deposit(value, to);
    }

    function deposit() external returns (uint) {
        uint _amount = IERC20(underlying).balanceOf(msg.sender);
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), _amount);
        return _deposit(_amount, msg.sender);
    }

    function deposit(uint amount) external returns (uint) {
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, msg.sender);
    }

    function deposit(uint amount, address to) external returns (uint) {
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, to);
    }

    function depositVault(uint amount, address to) external onlyVault returns (uint) {
        return _deposit(amount, to);
    }

    function _deposit(uint amount, address to) internal returns (uint) {
        require(underlying != address(0x0) && underlying != address(this));
        _mint(to, amount);
        return amount;
    }

    function withdraw() external returns (uint) {
        return _withdraw(msg.sender, balanceOf[msg.sender], msg.sender);
    }

    function withdraw(uint amount) external returns (uint) {
        return _withdraw(msg.sender, amount, msg.sender);
    }

    function withdraw(uint amount, address to) external returns (uint) {
        return _withdraw(msg.sender, amount, to);
    }

    function withdrawVault(address from, uint amount, address to) external onlyVault returns (uint) {
        return _withdraw(from, amount, to);
    }

    function _withdraw(address from, uint amount, address to) internal returns (uint) {
        _burn(from, amount);
        IERC20(underlying).safeTransfer(to, amount);
        return amount;
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        balanceOf[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        balanceOf[account] -= amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    function approve(address spender, uint256 value) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return true;
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data);
    }

    /// @dev Sets `value` as allowance of `spender` account over `owner` account's AnyswapV3ERC20 token, given `owner` account's signed approval.
    /// Emits {Approval} event.
    /// Requirements:
    ///   - `deadline` must be timestamp in future.
    ///   - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments.
    ///   - the signature must use `owner` account's current nonce (see {nonces}).
    ///   - the signer cannot be zero address and must be `owner` account.
    /// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].
    /// AnyswapV3ERC20 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol.
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {
        require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                PERMIT_TYPEHASH,
                target,
                spender,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        // _approve(owner, spender, value);
        allowance[target][spender] = value;
        emit Approval(target, spender, value);
    }

    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override returns (bool) {
        require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                TRANSFER_TYPEHASH,
                target,
                to,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[target];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[target] = balance - value;
        balanceOf[to] += value;
        emit Transfer(target, to, value);

        return true;
    }

    function verifyEIP712(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                hashStruct));
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }

    function verifyPersonalSign(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = prefixed(hashStruct);
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }

    // Builds a prefixed hash to mimic the behavior of eth_sign.
    function prefixed(bytes32 hash) internal view returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", DOMAIN_SEPARATOR, hash));
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`).
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    function transfer(address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from account (`from`) to account (`to`) using allowance mechanism.
    /// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - `from` account must have at least `value` balance of AnyswapV3ERC20 token.
    ///   - `from` account must have approved caller to spend at least `value` of AnyswapV3ERC20 token, unless `from` and caller are the same account.
    function transferFrom(address from, address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        if (from != msg.sender) {
            // _decreaseAllowance(from, msg.sender, value);
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "AnyswapV3ERC20: request exceeds allowance");
                uint256 reduced = allowed - value;
                allowance[from][msg.sender] = reduced;
                emit Approval(from, msg.sender, reduced);
            }
        }

        uint256 balance = balanceOf[from];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[from] = balance - value;
        balanceOf[to] += value;
        emit Transfer(from, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) {
        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"address","name":"_underlying","type":"address"},{"internalType":"address","name":"_vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"auth","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LogAddAuth","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveHeight","type":"uint256"}],"name":"LogChangeMPCOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"bindaddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"bindaddr","type":"address"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TRANSFER_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeMPCOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayMinter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"depositVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"address","name":"to","type":"address"}],"name":"depositWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"address","name":"to","type":"address"}],"name":"depositWithTransferPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"initVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setVaultOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferWithPermit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

60e06040526202a3006005553480156200001857600080fd5b5060405162002fac38038062002fac8339810160408190526200003b91620003c5565b8451620000509060009060208801906200023d565b508351620000669060019060208701906200023d565b507fff0000000000000000000000000000000000000000000000000000000000000060f884901b166080526001600160601b0319606083901b1660a0526001600160a01b038216156200013a57816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620000ed57600080fd5b505afa15801562000102573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000128919062000464565b60ff168360ff16146200013a57600080fd5b6004805461ff001960ff19909116600117169055600880546001600160a01b0383166001600160a01b03199182168117909255600b8054909116909117905542600c5560405146907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90620001b29060009062000488565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c00160408051601f19818403018152919052805160209091012060c052506200057e945050505050565b8280546200024b906200052b565b90600052602060002090601f0160209004810192826200026f5760008555620002ba565b82601f106200028a57805160ff1916838001178555620002ba565b82800160010185558215620002ba579182015b82811115620002ba5782518255916020019190600101906200029d565b50620002c8929150620002cc565b5090565b5b80821115620002c85760008155600101620002cd565b80516001600160a01b0381168114620002fb57600080fd5b919050565b600082601f83011262000311578081fd5b81516001600160401b03808211156200032e576200032e62000568565b604051601f8301601f19908116603f0116810190828211818310171562000359576200035962000568565b8160405283815260209250868385880101111562000375578485fd5b8491505b8382101562000398578582018301518183018401529082019062000379565b83821115620003a957848385830101525b9695505050505050565b805160ff81168114620002fb57600080fd5b600080600080600060a08688031215620003dd578081fd5b85516001600160401b0380821115620003f4578283fd5b6200040289838a0162000300565b9650602088015191508082111562000418578283fd5b50620004278882890162000300565b9450506200043860408701620003b3565b92506200044860608701620002e3565b91506200045860808701620002e3565b90509295509295909350565b60006020828403121562000476578081fd5b6200048182620003b3565b9392505050565b8154600090819060028104600180831680620004a557607f831692505b6020808410821415620004c657634e487b7160e01b87526022600452602487fd5b818015620004dd5760018114620004ef576200051d565b60ff198616895284890196506200051d565b60008a815260209020885b86811015620005155781548b820152908501908301620004fa565b505084890196505b509498975050505050505050565b6002810460018216806200054057607f821691505b602082108114156200056257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160f81c60a05160601c60c0516129a4620006086000396000818161048c01528181611dda0152611eec015260008181610590015281816113520152818161139e0152818161141e015281816116450152818161185a015281816118e301528181611bb001528181611ccd015281816120bc01526120ef0152600061045301526129a46000f3fe608060405234801561001057600080fd5b506004361061033f5760003560e01c80637ecebe00116101b8578063bebbf4d011610104578063d93f2445116100a2578063f75c26641161007c578063f75c266414610774578063f954734e1461077c578063fbfa77cf1461078f578063fca3b5aa146107a25761033f565b8063d93f24451461072e578063dd62ed3e14610736578063ec126c77146107615761033f565b8063cae9ca51116100de578063cae9ca51146106ed578063cfbd488514610700578063d0e30db014610713578063d505accf1461071b5761033f565b8063bebbf4d0146106be578063c3081240146106d1578063c4b740f5146106da5761033f565b806395d89b4111610171578063a29dff721161014b578063a29dff721461066c578063a9059cbb14610675578063aa271e1a14610688578063b6b55f25146106ab5761033f565b806395d89b411461063c5780639dc29fac14610644578063a045442c146106575761033f565b80637ecebe00146105d257806381a37c18146105f25780638623ec7b1461060557806387689e28146106185780638da5cb5b1461062157806391c5df49146106295761033f565b80633ccfd60b1161029257806360e232a9116102305780636a42b8f81161020a5780636a42b8f81461056f5780636e553f65146105785780636f307dc31461058b57806370a08231146105b25761033f565b806360e232a914610536578063628d6cba146105495780636817031b1461055c5761033f565b80634ca8f0ed1161026c5780634ca8f0ed146104dc57806352113ba7146104e55780635f9b105d14610510578063605629d6146105235761033f565b80633ccfd60b146104ae5780634000aea0146104b657806340c10f19146104c95761033f565b806318160ddd116102ff5780632ebe3fbb116102d95780632ebe3fbb1461041457806330adf81f14610427578063313ce5671461044e5780633644e515146104875761033f565b806318160ddd146103e657806323b872dd146103ee5780632e1a7d4d146104015761033f565b806239d6ec14610344578062bf26f41461036a578062f714ce1461039157806306fdde03146103a4578063095ea7b3146103b95780630d707df8146103dc575b600080fd5b610357610352366004612469565b6107b5565b6040519081526020015b60405180910390f35b6103577f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b61035761039f36600461261b565b61080b565b6103ac61081f565b604051610361919061272f565b6103cc6103c7366004612440565b6108ad565b6040519015158152602001610361565b6103e4610907565b005b6103576109c3565b6103cc6103fc36600461239c565b6109ca565b61035761040f3660046125eb565b610bb5565b6103e4610422366004612350565b610bca565b6103577f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6104757f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610361565b6103577f000000000000000000000000000000000000000000000000000000000000000081565b610357610ca1565b6103cc6104c43660046124a4565b610cc2565b6103cc6104d7366004612440565b610e1b565b610357600d5481565b600b546104f8906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b6103cc61051e366004612350565b610e5d565b6103cc6105313660046123d7565b610f31565b6103cc610544366004612350565b611141565b6103cc61055736600461261b565b611215565b6103e461056a366004612350565b6112dd565b61035760055481565b61035761058636600461261b565b611343565b6104f87f000000000000000000000000000000000000000000000000000000000000000081565b6103576105c0366004612350565b60026020526000908152604090205481565b6103576105e0366004612350565b600f6020526000908152604090205481565b610357610600366004612526565b611384565b6104f86106133660046125eb565b61145e565b610357600c5481565b6104f8611488565b6009546104f8906001600160a01b031681565b6103ac611492565b6103cc610652366004612440565b61149f565b61065f6114fe565b60405161036191906126e2565b610357600e5481565b6103cc610683366004612440565b611560565b6103cc610696366004612350565b60066020526000908152604090205460ff1681565b6103576106b93660046125eb565b611636565b6103576106cc36600461261b565b611677565b610357600a5481565b6103e46106e836600461258f565b6116b1565b6103cc6106fb3660046124a4565b611703565b6103e461070e366004612350565b6117df565b610357611838565b6103e46107293660046123d7565b61191b565b6103e4611a89565b61035761074436600461236a565b601060209081526000928352604080842090915290825290205481565b6103cc61076f3660046125c7565b611af4565b6104f8611b69565b61035761078a366004612526565b611b96565b6008546104f8906001600160a01b031681565b6103e46107b0366004612350565b611c4e565b60006107bf611b69565b6001600160a01b0316336001600160a01b0316146107f85760405162461bcd60e51b81526004016107ef90612762565b60405180910390fd5b610803848484611cb4565b949350505050565b6000610818338484611cb4565b9392505050565b6000805461082c906128b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610858906128b1565b80156108a55780601f1061087a576101008083540402835291602001916108a5565b820191906000526020600020905b81548152906001019060200180831161088857829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b0387168085529252808320859055519192909160008051602061294f833981519152906108f69086815260200190565b60405180910390a350600192915050565b61090f611b69565b6001600160a01b0316336001600160a01b03161461093f5760405162461bcd60e51b81526004016107ef90612762565b600a5442101561094e57600080fd5b600980546001600160a01b039081166000908152600660205260408120805460ff1916600190811790915592546007805494850181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b03191692909116919091179055565b6003545b90565b60006001600160a01b0383161515806109ec57506001600160a01b0383163014155b6109f557600080fd5b6001600160a01b0384163314610aef576001600160a01b03841660009081526010602090815260408083203384529091529020546000198114610aed5782811015610a945760405162461bcd60e51b815260206004820152602960248201527f416e7973776170563345524332303a2072657175657374206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016107ef565b6000610aa0848361286e565b6001600160a01b0387166000818152601060209081526040808320338085529083529281902085905551848152939450909260008051602061294f833981519152910160405180910390a3505b505b6001600160a01b03841660009081526002602052604090205482811015610b285760405162461bcd60e51b81526004016107ef906127d0565b610b32838261286e565b6001600160a01b038087166000908152600260205260408082209390935590861681529081208054859290610b68908490612856565b92505081905550836001600160a01b0316856001600160a01b031660008051602061292f83398151915285604051610ba291815260200190565b60405180910390a3506001949350505050565b6000610bc2338333611cb4565b90505b919050565b610bd2611b69565b6001600160a01b0316336001600160a01b031614610c025760405162461bcd60e51b81526004016107ef90612762565b60045460ff16610c1157600080fd5b600880546001600160a01b039092166001600160a01b03199283168117909155600b80548316821790556000818152600660205260408120805460ff1990811660019081179092556007805492830181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805490931690911790915542600c55600480549091169055565b336000818152600260205260408120549091610cbd9181611cb4565b905090565b60006001600160a01b038516151580610ce457506001600160a01b0385163014155b610ced57600080fd5b3360009081526002602052604090205484811015610d1d5760405162461bcd60e51b81526004016107ef906127d0565b610d27858261286e565b33600090815260026020526040808220929092556001600160a01b03881681529081208054879290610d5a908490612856565b90915550506040518581526001600160a01b03871690339060008051602061292f8339815191529060200160405180910390a3604051635260769b60e11b81526001600160a01b0387169063a4c0ed3690610dbf90339089908990899060040161269a565b602060405180830381600087803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1191906125ab565b9695505050505050565b3360009081526006602052604081205460ff16610e4a5760405162461bcd60e51b81526004016107ef9061281f565b610e548383611cfc565b50600192915050565b6000610e67611b69565b6001600160a01b0316336001600160a01b031614610e975760405162461bcd60e51b81526004016107ef90612762565b6001600160a01b038216610ebd5760405162461bcd60e51b81526004016107ef90612799565b600b80546001600160a01b0319166001600160a01b038416179055600554610ee59042612856565b600c819055600b546008546040516001600160a01b0392831692909116907f1d065115f314fb9bad9557bd5460b9e3c66f7223b1dd04e73e828f0bb5afe89f90600090a4506001919050565b600084421115610f835760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0388166000908152600f6020526040812080547f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59918b918b918b919086610fd0836128ec565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012090506110318982878787611dca565b8061104457506110448982878787611eba565b61104d57600080fd5b6001600160a01b03881615158061106d57506001600160a01b0388163014155b61107657600080fd5b6001600160a01b038916600090815260026020526040902054878110156110af5760405162461bcd60e51b81526004016107ef906127d0565b6110b9888261286e565b6001600160a01b03808c1660009081526002602052604080822093909355908b16815290812080548a92906110ef908490612856565b92505081905550886001600160a01b03168a6001600160a01b031660008051602061292f8339815191528a60405161112991815260200190565b60405180910390a35060019998505050505050505050565b600061114b611b69565b6001600160a01b0316336001600160a01b03161461117b5760405162461bcd60e51b81526004016107ef90612762565b6001600160a01b0382166111a15760405162461bcd60e51b81526004016107ef90612799565b600b80546001600160a01b0319166001600160a01b0384161790556005546111c99042612856565b600c819055600b546008546040516001600160a01b0392831692909116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a4506001919050565b600454600090610100900460ff16156112705760405162461bcd60e51b815260206004820152601860248201527f416e7973776170563445524332303a206f6e6c7941757468000000000000000060448201526064016107ef565b6001600160a01b0382166112965760405162461bcd60e51b81526004016107ef90612799565b6112a03384611f75565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c888906020016108f6565b6112e5611b69565b6001600160a01b0316336001600160a01b0316146113155760405162461bcd60e51b81526004016107ef90612762565b600b80546001600160a01b0319166001600160a01b03831617905560055461133d9042612856565b600c5550565b600061137a6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086612047565b61081883836120b8565b60405163d505accf60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf906113df908b9030908c908c908c908c908c90600401612659565b600060405180830381600087803b1580156113f957600080fd5b505af115801561140d573d6000803e3d6000fd5b506114489250506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016905089308a612047565b61145287836120b8565b98975050505050505050565b6007818154811061146e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610cbd611b69565b6001805461082c906128b1565b3360009081526006602052604081205460ff166114ce5760405162461bcd60e51b81526004016107ef9061281f565b6001600160a01b0383166114f45760405162461bcd60e51b81526004016107ef90612799565b610e548383611f75565b6060600780548060200260200160405190810160405280929190818152602001828054801561155657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611538575b5050505050905090565b60006001600160a01b03831615158061158257506001600160a01b0383163014155b61158b57600080fd5b33600090815260026020526040902054828110156115bb5760405162461bcd60e51b81526004016107ef906127d0565b6115c5838261286e565b33600090815260026020526040808220929092556001600160a01b038616815290812080548592906115f8908490612856565b90915550506040518381526001600160a01b03851690339060008051602061292f833981519152906020015b60405180910390a35060019392505050565b600061166d6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085612047565b610bc282336120b8565b6000611681611b69565b6001600160a01b0316336001600160a01b03161461137a5760405162461bcd60e51b81526004016107ef90612762565b6116b9611b69565b6001600160a01b0316336001600160a01b0316146116e95760405162461bcd60e51b81526004016107ef90612762565b600480549115156101000261ff0019909216919091179055565b3360008181526010602090815260408083206001600160a01b0389168085529252808320879055519192909160008051602061294f8339815191529061174c9088815260200190565b60405180910390a360405162ba451f60e01b81526001600160a01b0386169062ba451f9061178490339088908890889060040161269a565b602060405180830381600087803b15801561179e57600080fd5b505af11580156117b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d691906125ab565b95945050505050565b6117e7611b69565b6001600160a01b0316336001600160a01b0316146118175760405162461bcd60e51b81526004016107ef90612762565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d49190612603565b905061190b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084612047565b61191581336120b8565b91505090565b8342111561196b5760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0387166000908152600f6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866119b8836128ec565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050611a198882868686611dca565b80611a2c5750611a2c8882868686611eba565b611a3557600080fd5b6001600160a01b038881166000818152601060209081526040808320948c16808452948252918290208a9055905189815260008051602061294f833981519152910160405180910390a35050505050505050565b611a91611b69565b6001600160a01b0316336001600160a01b031614611ac15760405162461bcd60e51b81526004016107ef90612762565b600c54421015611ad057600080fd5b600b54600880546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526006602052604081205460ff16611b235760405162461bcd60e51b81526004016107ef9061281f565b611b2d8383611cfc565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161162491815260200190565b6000600c544210611b865750600b546001600160a01b03166109c7565b506008546001600160a01b031690565b60405163302b14eb60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063605629d690611bf1908b9030908c908c908c908c908c90600401612659565b602060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4391906125ab565b5061145287836120b8565b611c56611b69565b6001600160a01b0316336001600160a01b031614611c865760405162461bcd60e51b81526004016107ef90612762565b600980546001600160a01b0319166001600160a01b038316179055600554611cae9042612856565b600a5550565b6000611cc08484611f75565b611cf46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168385612135565b509092915050565b6001600160a01b038216611d525760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107ef565b8060036000828254611d649190612856565b90915550506001600160a01b03821660009081526002602052604081208054839290611d91908490612856565b90915550506040518181526001600160a01b0383169060009060008051602061292f833981519152906020015b60405180910390a35050565b60405161190160f01b60208201527f0000000000000000000000000000000000000000000000000000000000000000602282015260428101859052600090819060620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0015b6020604051602081039080840390855afa158015611e79573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114525750876001600160a01b0316816001600160a01b03161498975050505050505050565b600080611f3a866040517f19457468657265756d205369676e6564204d6573736167653a0a33320000000060208201527f0000000000000000000000000000000000000000000000000000000000000000603c820152605c8101829052600090607c01604051602081830303815290604052805190602001209050919050565b6040805160008082526020820180845284905260ff89169282019290925260608101879052608081018690529192509060019060a001611e57565b6001600160a01b038216611fd55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107ef565b6001600160a01b03821660009081526002602052604081208054839290611ffd90849061286e565b925050819055508060036000828254612016919061286e565b90915550506040518181526000906001600160a01b0384169060008051602061292f83398151915290602001611dbe565b6040516001600160a01b03808516602483015283166044820152606481018290526120b29085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261216a565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580159061211b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014155b61212457600080fd5b61212e8284611cfc565b5090919050565b6040516001600160a01b03831660248201526044810182905261216590849063a9059cbb60e01b9060640161207b565b505050565b61217c826001600160a01b03166122f1565b6121c85760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016107ef565b600080836001600160a01b0316836040516121e3919061263d565b6000604051808303816000865af19150503d8060008114612220576040519150601f19603f3d011682016040523d82523d6000602084013e612225565b606091505b5091509150816122775760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016107ef565b8051156120b2578080602001905181019061229291906125ab565b6120b25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107ef565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906108035750141592915050565b80356001600160a01b0381168114610bc557600080fd5b803560ff81168114610bc557600080fd5b600060208284031215612361578081fd5b61081882612328565b6000806040838503121561237c578081fd5b61238583612328565b915061239360208401612328565b90509250929050565b6000806000606084860312156123b0578081fd5b6123b984612328565b92506123c760208501612328565b9150604084013590509250925092565b600080600080600080600060e0888a0312156123f1578283fd5b6123fa88612328565b965061240860208901612328565b955060408801359450606088013593506124246080890161233f565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215612452578182fd5b61245b83612328565b946020939093013593505050565b60008060006060848603121561247d578283fd5b61248684612328565b92506020840135915061249b60408501612328565b90509250925092565b600080600080606085870312156124b9578384fd5b6124c285612328565b935060208501359250604085013567ffffffffffffffff808211156124e5578384fd5b818701915087601f8301126124f8578384fd5b813581811115612506578485fd5b886020828501011115612517578485fd5b95989497505060200194505050565b600080600080600080600060e0888a031215612540578283fd5b61254988612328565b965060208801359550604088013594506125656060890161233f565b93506080880135925060a0880135915061258160c08901612328565b905092959891949750929550565b6000602082840312156125a0578081fd5b81356108188161291d565b6000602082840312156125bc578081fd5b81516108188161291d565b6000806000606084860312156125db578283fd5b833592506123c760208501612328565b6000602082840312156125fc578081fd5b5035919050565b600060208284031215612614578081fd5b5051919050565b6000806040838503121561262d578182fd5b8235915061239360208401612328565b6000825161264f818460208701612885565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b6020808252825182820181905260009190848201906040850190845b818110156127235783516001600160a01b0316835292840192918401916001016126fe565b50909695505050505050565b600060208252825180602084015261274e816040850160208701612885565b601f01601f19169190910160400192915050565b60208082526019908201527f416e7973776170563345524332303a20464f5242494444454e00000000000000604082015260600190565b6020808252601c908201527f416e7973776170563345524332303a2061646472657373283078302900000000604082015260600190565b6020808252602f908201527f416e7973776170563345524332303a207472616e7366657220616d6f756e742060408201526e657863656564732062616c616e636560881b606082015260800190565b60208082526019908201527f416e7973776170563445524332303a20464f5242494444454e00000000000000604082015260600190565b6000821982111561286957612869612907565b500190565b60008282101561288057612880612907565b500390565b60005b838110156128a0578181015183820152602001612888565b838111156120b25750506000910152565b6002810460018216806128c557607f821691505b602082108114156128e657634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561290057612900612907565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461292b57600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122009f133a1a7b82a84f7eb4d540d9b7632a2fb97e06b30fd18edb4988cdb70ae8164736f6c6343000802003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad9925100000000000000000000000000000000000000000000000000000000000000144d6167696320496e7465726e6574204d6f6e657900000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d494d0000000000000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad9925100000000000000000000000000000000000000000000000000000000000000144d6167696320496e7465726e6574204d6f6e657900000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d494d0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Magic Internet Money
Arg [1] : _symbol (string): MIM
Arg [2] : _decimals (uint8): 18
Arg [3] : _underlying (address): 0x0000000000000000000000000000000000000000
Arg [4] : _vault (address): 0xfa9da51631268a30ec3ddd1ccbf46c65fad99251

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [6] : 4d6167696320496e7465726e6574204d6f6e6579000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4d494d0000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

6225:19168:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15349:149;;;;;;:::i;:::-;;:::i;:::-;;;9569:25:1;;;9557:2;9542:18;15349:149:0;;;;;;;;6598:136;;6642:92;6598:136;;15215:126;;;;;;:::i;:::-;;:::i;6308:18::-;;;:::i;:::-;;;;;;;:::i;17072:265::-;;;;;;:::i;:::-;;:::i;:::-;;;9396:14:1;;9389:22;9371:41;;9359:2;9344:18;17072:265:0;9326:92:1;8994:179:0;;;:::i;:::-;;13184:102;;;:::i;23313:927::-;;;;;;:::i;:::-;;:::i;15085:122::-;;;;;;:::i;:::-;;:::i;8280:272::-;;;;;;:::i;:::-;;:::i;6454:137::-;;6496:95;6454:137;;6360:41;;;;;;;;15843:4:1;15831:17;;;15813:36;;15801:2;15786:18;6360:41:0;15768:87:1;6741:41:0;;;;;14951:126;;;:::i;24867:523::-;;;;;;:::i;:::-;;:::i;10113:133::-;;;;;;:::i;:::-;;:::i;7619:24::-;;;;;;7554:27;;;;;-1:-1:-1;;;;;7554:27:0;;;;;;-1:-1:-1;;;;;6620:32:1;;;6602:51;;6590:2;6575:18;7554:27:0;6557:102:1;9780:325:0;;;;;;:::i;:::-;;:::i;19670:938::-;;;;;;:::i;:::-;;:::i;9451:321::-;;;;;;:::i;:::-;;:::i;10686:328::-;;;;;;:::i;:::-;;:::i;8709:140::-;;;;;;:::i;:::-;;:::i;7229:29::-;;;;;;14403:193;;;;;;:::i;:::-;;:::i;6410:35::-;;;;;6862:54;;;;;;:::i;:::-;;;;;;;;;;;;;;11286:51;;;;;;:::i;:::-;;;;;;;;;;;;;;13294:349;;;;;;:::i;:::-;;:::i;7376:24::-;;;;;;:::i;:::-;;:::i;7588:22::-;;;;;;7917:78;;;:::i;7487:28::-;;;;;-1:-1:-1;;;;;7487:28:0;;;6333:20;;;:::i;10254:207::-;;;;;;:::i;:::-;;:::i;9342:99::-;;;:::i;:::-;;;;;;;:::i;7650:22::-;;;;;;21986:438;;;;;;:::i;:::-;;:::i;7329:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14206:189;;;;;;:::i;:::-;;:::i;14604:127::-;;;;;;:::i;:::-;;:::i;7522:23::-;;;;;;8178:94;;;;;;:::i;:::-;;:::i;17758:356::-;;;;;;:::i;:::-;;:::i;9236:98::-;;;;;;:::i;:::-;;:::i;13952:246::-;;;:::i;18947:715::-;;;;;;:::i;:::-;;:::i;8857:129::-;;;:::i;11507:75::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;10469:209;;;;;;:::i;:::-;;:::i;8003:167::-;;;:::i;13651:293::-;;;;;;:::i;:::-;;:::i;7458:20::-;;;;;-1:-1:-1;;;;;7458:20:0;;;8560:141;;;;;;:::i;:::-;;:::i;15349:149::-;15439:4;7854:5;:3;:5::i;:::-;-1:-1:-1;;;;;7840:19:0;:10;-1:-1:-1;;;;;7840:19:0;;7832:57;;;;-1:-1:-1;;;7832:57:0;;;;;;;:::i;:::-;;;;;;;;;15463:27:::1;15473:4;15479:6;15487:2;15463:9;:27::i;:::-;15456:34:::0;15349:149;-1:-1:-1;;;;15349:149:0:o;15215:126::-;15276:4;15300:33;15310:10;15322:6;15330:2;15300:9;:33::i;:::-;15293:40;15215:126;-1:-1:-1;;;15215:126:0:o;6308:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17072:265::-;17225:10;17148:4;17215:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;17215:30:0;;;;;;;;;;:38;;;17269:36;17148:4;;17215:30;;-1:-1:-1;;;;;;;;;;;17269:36:0;;;17248:5;9569:25:1;;9557:2;9542:18;;9524:76;17269:36:0;;;;;;;;-1:-1:-1;17325:4:0;17072:265;;;;:::o;8994:179::-;7854:5;:3;:5::i;:::-;-1:-1:-1;;;;;7840:19:0;:10;-1:-1:-1;;;;;7840:19:0;;7832:57;;;;-1:-1:-1;;;7832:57:0;;;;;;;:::i;:::-;9074:11:::1;;9055:15;:30;;9047:39;;;::::0;::::1;;9106:13;::::0;;-1:-1:-1;;;;;9106:13:0;;::::1;9097:23;::::0;;;:8:::1;:23;::::0;;;;:30;;-1:-1:-1;;9097:30:0::1;9123:4;9097:30:::0;;::::1;::::0;;;9151:13;;9138:7:::1;:27:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;9138:27:0::1;9151:13:::0;;;::::1;9138:27:::0;;;::::1;::::0;;8994:179::o;13184:102::-;13266:12;;13184:102;;:::o;23313:927::-;23403:4;-1:-1:-1;;;;;23428:16:0;;;;;:39;;-1:-1:-1;;;;;;23448:19:0;;23462:4;23448:19;;23428:39;23420:48;;;;;;-1:-1:-1;;;;;23483:18:0;;23491:10;23483:18;23479:477;;-1:-1:-1;;;;;23597:15:0;;23579;23597;;;:9;:15;;;;;;;;23613:10;23597:27;;;;;;;;-1:-1:-1;;23643:28:0;;23639:306;;23711:5;23700:7;:16;;23692:70;;;;-1:-1:-1;;;23692:70:0;;14150:2:1;23692:70:0;;;14132:21:1;14189:2;14169:18;;;14162:30;14228:34;14208:18;;;14201:62;-1:-1:-1;;;14279:18:1;;;14272:39;14328:19;;23692:70:0;14122:231:1;23692:70:0;23781:15;23799;23809:5;23799:7;:15;:::i;:::-;-1:-1:-1;;;;;23833:15:0;;;;;;:9;:15;;;;;;;;23849:10;23833:27;;;;;;;;;;:37;;;23894:35;9569:25:1;;;23833:37:0;;-1:-1:-1;23849:10:0;;-1:-1:-1;;;;;;;;;;;23894:35:0;9542:18:1;23894:35:0;;;;;;;23639:306;;23479:477;;-1:-1:-1;;;;;23986:15:0;;23968;23986;;;:9;:15;;;;;;24020:16;;;;24012:76;;;;-1:-1:-1;;;24012:76:0;;;;;;;:::i;:::-;24119:15;24129:5;24119:7;:15;:::i;:::-;-1:-1:-1;;;;;24101:15:0;;;;;;;:9;:15;;;;;;:33;;;;24145:13;;;;;;;;:22;;24162:5;;24101:15;24145:22;;24162:5;;24145:22;:::i;:::-;;;;;;;;24198:2;-1:-1:-1;;;;;24183:25:0;24192:4;-1:-1:-1;;;;;24183:25:0;-1:-1:-1;;;;;;;;;;;24202:5:0;24183:25;;;;9569::1;;9557:2;9542:18;;9524:76;24183:25:0;;;;;;;;-1:-1:-1;24228:4:0;;23313:927;-1:-1:-1;;;;23313:927:0:o;15085:122::-;15134:4;15158:41;15168:10;15180:6;15188:10;15158:9;:41::i;:::-;15151:48;;15085:122;;;;:::o;8280:272::-;7854:5;:3;:5::i;:::-;-1:-1:-1;;;;;7840:19:0;:10;-1:-1:-1;;;;;7840:19:0;;7832:57;;;;-1:-1:-1;;;7832:57:0;;;;;;;:::i;:::-;8353:5:::1;::::0;::::1;;8345:14;;;::::0;::::1;;8370:5;:14:::0;;-1:-1:-1;;;;;8370:14:0;;::::1;-1:-1:-1::0;;;;;;8370:14:0;;::::1;::::0;::::1;::::0;;;8395:12:::1;:21:::0;;;::::1;::::0;::::1;::::0;;8370:5:::1;8427:16:::0;;;:8:::1;:16;::::0;;;;:23;;-1:-1:-1;;8427:23:0;;::::1;8370:14:::0;8427:23;;::::1;::::0;;;8461:7:::1;:20:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;8505:15:::1;8492:10;:28:::0;8531:5:::1;:13:::0;;;;::::1;::::0;;8280:272::o;14951:126::-;15023:10;14989:4;15035:21;;;:9;:21;;;;;;14989:4;;15013:56;;15023:10;15013:9;:56::i;:::-;15006:63;;14951:126;:::o;24867:523::-;24964:4;-1:-1:-1;;;;;24989:16:0;;;;;:39;;-1:-1:-1;;;;;;25009:19:0;;25023:4;25009:19;;24989:39;24981:48;;;;;;25070:10;25042:15;25060:21;;;:9;:21;;;;;;25100:16;;;;25092:76;;;;-1:-1:-1;;;25092:76:0;;;;;;;:::i;:::-;25205:15;25215:5;25205:7;:15;:::i;:::-;25191:10;25181:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;25231:13:0;;;;;;;:22;;25248:5;;25181:21;25231:22;;25248:5;;25231:22;:::i;:::-;;;;-1:-1:-1;;25269:31:0;;9569:25:1;;;-1:-1:-1;;;;;25269:31:0;;;25278:10;;-1:-1:-1;;;;;;;;;;;25269:31:0;9557:2:1;9542:18;25269:31:0;;;;;;;25320:62;;-1:-1:-1;;;25320:62:0;;-1:-1:-1;;;;;25320:37:0;;;;;:62;;25358:10;;25370:5;;25377:4;;;;25320:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25313:69;24867:523;-1:-1:-1;;;;;;24867:523:0:o;10113:133::-;7731:10;10182:4;7722:20;;;:8;:20;;;;;;;;7714:58;;;;-1:-1:-1;;;7714:58:0;;;;;;;:::i;:::-;10199:17:::1;10205:2;10209:6;10199:5;:17::i;:::-;-1:-1:-1::0;10234:4:0::1;10113:133:::0;;;;:::o;9780:325::-;9848:4;7854:5;:3;:5::i;:::-;-1:-1:-1;;;;;7840:19:0;:10;-1:-1:-1;;;;;7840:19:0;;7832:57;;;;-1:-1:-1;;;7832:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9873:22:0;::::1;9865:63;;;;-1:-1:-1::0;;;9865:63:0::1;;;;;;;:::i;:::-;9939:12;:23:::0;;-1:-1:-1;;;;;;9939:23:0::1;-1:-1:-1::0;;;;;9939:23:0;::::1;;::::0;;10004:5:::1;::::0;9986:23:::1;::::0;:15:::1;:23;:::i;:::-;9973:10;:36:::0;;;10050:12:::1;::::0;10043:5:::1;::::0;10025:50:::1;::::0;-1:-1:-1;;;;;10050:12:0;;::::1;::::0;10043:5;;::::1;::::0;10025:50:::1;::::0;10050:12:::1;::::0;10025:50:::1;-1:-1:-1::0;10093:4:0::1;9780:325:::0;;;:::o;19670:938::-;19817:4;19861:8;19842:15;:27;;19834:70;;;;-1:-1:-1;;;19834:70:0;;12682:2:1;19834:70:0;;;12664:21:1;12721:2;12701:18;;;12694:30;12760:32;12740:18;;;12733:60;12810:18;;19834:70:0;12654:180:1;19834:70:0;-1:-1:-1;;;;;20097:14:0;;19917:18;20097:14;;;:6;:14;;;;;:16;;6642:92;;20027:6;;20052:2;;20073:5;;20097:16;19917:18;20097:16;;;:::i;:::-;;;;-1:-1:-1;19962:179:0;;;;;;9892:25:1;;;;-1:-1:-1;;;;;9991:15:1;;;9971:18;;;9964:43;10043:15;;;;10023:18;;;10016:43;10075:18;;;10068:34;10118:19;;;10111:35;10162:19;;;10155:35;;;9864:19;;19962:179:0;;;;;;;;;;;;19938:204;;;;;;19917:225;;20163:41;20176:6;20184:10;20196:1;20199;20202;20163:12;:41::i;:::-;:92;;;;20208:47;20227:6;20235:10;20247:1;20250;20253;20208:18;:47::i;:::-;20155:101;;;;;;-1:-1:-1;;;;;20277:16:0;;;;;:39;;-1:-1:-1;;;;;;20297:19:0;;20311:4;20297:19;;20277:39;20269:48;;;;;;-1:-1:-1;;;;;20348:17:0;;20330:15;20348:17;;;:9;:17;;;;;;20384:16;;;;20376:76;;;;-1:-1:-1;;;20376:76:0;;;;;;;:::i;:::-;20485:15;20495:5;20485:7;:15;:::i;:::-;-1:-1:-1;;;;;20465:17:0;;;;;;;:9;:17;;;;;;:35;;;;20511:13;;;;;;;;:22;;20528:5;;20465:17;20511:22;;20528:5;;20511:22;:::i;:::-;;;;;;;;20566:2;-1:-1:-1;;;;;20549:27:0;20558:6;-1:-1:-1;;;;;20549:27:0;-1:-1:-1;;;;;;;;;;;20570:5:0;20549:27;;;;9569:25:1;;9557:2;9542:18;;9524:76;20549:27:0;;;;;;;;-1:-1:-1;20596:4:0;;19670:938;-1:-1:-1;;;;;;;;;19670:938:0:o;9451:321::-;9518:4;7854:5;:3;:5::i;:::-;-1:-1:-1;;;;;7840:19:0;:10;-1:-1:-1;;;;;7840:19:0;;7832:57;;;;-1:-1:-1;;;7832:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9543:22:0;::::1;9535:63;;;;-1:-1:-1::0;;;9535:63:0::1;;;;;;;:::i;:::-;9609:12;:23:::0;;-1:-1:-1;;;;;;9609:23:0::1;-1:-1:-1::0;;;;;9609:23:0;::::1;;::::0;;9674:5:::1;::::0;9656:23:::1;::::0;:15:::1;:23;:::i;:::-;9643:10;:36:::0;;;9717:12:::1;::::0;9710:5:::1;::::0;9695:47:::1;::::0;-1:-1:-1;;;;;9717:12:0;;::::1;::::0;9710:5;;::::1;::::0;9695:47:::1;::::0;9717:12:::1;::::0;9695:47:::1;-1:-1:-1::0;9760:4:0::1;9451:321:::0;;;:::o;10686:328::-;10779:10;;10753:4;;10779:10;;;;;10778:11;10770:48;;;;-1:-1:-1;;;10770:48:0;;13041:2:1;10770:48:0;;;13023:21:1;13080:2;13060:18;;;13053:30;13119:26;13099:18;;;13092:54;13163:18;;10770:48:0;13013:174:1;10770:48:0;-1:-1:-1;;;;;10837:22:0;;10829:63;;;;-1:-1:-1;;;10829:63:0;;;;;;;:::i;:::-;10903:25;10909:10;10921:6;10903:5;:25::i;:::-;10944:40;;9569:25:1;;;-1:-1:-1;;;;;10944:40:0;;;10955:10;;10944:40;;9557:2:1;9542:18;10944:40:0;9524:76:1;8709:140:0;7854:5;:3;:5::i;:::-;-1:-1:-1;;;;;7840:19:0;:10;-1:-1:-1;;;;;7840:19:0;;7832:57;;;;-1:-1:-1;;;7832:57:0;;;;;;;:::i;:::-;8773:12:::1;:21:::0;;-1:-1:-1;;;;;;8773:21:0::1;-1:-1:-1::0;;;;;8773:21:0;::::1;;::::0;;8836:5:::1;::::0;8818:23:::1;::::0;:15:::1;:23;:::i;:::-;8805:10;:36:::0;-1:-1:-1;8709:140:0:o;14403:193::-;14463:4;14480:70;-1:-1:-1;;;;;14487:10:0;14480:35;14516:10;14536:4;14543:6;14480:35;:70::i;:::-;14568:20;14577:6;14585:2;14568:8;:20::i;13294:349::-;13448:74;;-1:-1:-1;;;13448:74:0;;13431:4;;-1:-1:-1;;;;;13455:10:0;13448:25;;;;:74;;13474:6;;13490:4;;13497:5;;13504:8;;13514:1;;13517;;13520;;13448:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13533:65:0;;-1:-1:-1;;;;;;;13540:10:0;13533:35;;-1:-1:-1;13569:6:0;13585:4;13592:5;13533:35;:65::i;:::-;13616:19;13625:5;13632:2;13616:8;:19::i;:::-;13609:26;13294:349;-1:-1:-1;;;;;;;;13294:349:0:o;7376:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7376:24:0;;-1:-1:-1;7376:24:0;:::o;7917:78::-;7955:7;7982:5;:3;:5::i;6333:20::-;;;;;;;:::i;10254:207::-;7731:10;10325:4;7722:20;;;:8;:20;;;;;;;;7714:58;;;;-1:-1:-1;;;7714:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10350:18:0;::::1;10342:59;;;;-1:-1:-1::0;;;10342:59:0::1;;;;;;;:::i;:::-;10412:19;10418:4;10424:6;10412:5;:19::i;9342:99::-:0;9390:16;9426:7;9419:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9419:14:0;;;;;;;;;;;;;;;;;;;;;;;9342:99;:::o;21986:438::-;22058:4;-1:-1:-1;;;;;22083:16:0;;;;;:39;;-1:-1:-1;;;;;;22103:19:0;;22117:4;22103:19;;22083:39;22075:48;;;;;;22162:10;22134:15;22152:21;;;:9;:21;;;;;;22192:16;;;;22184:76;;;;-1:-1:-1;;;22184:76:0;;;;;;;:::i;:::-;22297:15;22307:5;22297:7;:15;:::i;:::-;22283:10;22273:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;22323:13:0;;;;;;;:22;;22340:5;;22273:21;22323:22;;22340:5;;22323:22;:::i;:::-;;;;-1:-1:-1;;22361:31:0;;9569:25:1;;;-1:-1:-1;;;;;22361:31:0;;;22370:10;;-1:-1:-1;;;;;;;;;;;22361:31:0;9557:2:1;9542:18;22361:31:0;;;;;;;;-1:-1:-1;22412:4:0;;21986:438;-1:-1:-1;;;21986:438:0:o;14206:189::-;14254:4;14271:70;-1:-1:-1;;;;;14278:10:0;14271:35;14307:10;14327:4;14334:6;14271:35;:70::i;:::-;14359:28;14368:6;14376:10;14359:8;:28::i;14604:127::-;14679:4;7854:5;:3;:5::i;:::-;-1:-1:-1;;;;;7840:19:0;:10;-1:-1:-1;;;;;7840:19:0;;7832:57;;;;-1:-1:-1;;;7832:57:0;;;;;;;:::i;8178:94::-;7854:5;:3;:5::i;:::-;-1:-1:-1;;;;;7840:19:0;:10;-1:-1:-1;;;;;7840:19:0;;7832:57;;;;-1:-1:-1;;;7832:57:0;;;;;;;:::i;:::-;8244:10:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;8244:20:0;;::::1;::::0;;;::::1;::::0;;8178:94::o;17758:356::-;17939:10;17862:4;17929:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;17929:30:0;;;;;;;;;;:38;;;17983:36;17862:4;;17929:30;;-1:-1:-1;;;;;;;;;;;17983:36:0;;;17962:5;9569:25:1;;9557:2;9542:18;;9524:76;17983:36:0;;;;;;;;18039:67;;-1:-1:-1;;;18039:67:0;;-1:-1:-1;;;;;18039:42:0;;;;;:67;;18082:10;;18094:5;;18101:4;;;;18039:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18032:74;17758:356;-1:-1:-1;;;;;17758:356:0:o;9236:98::-;7854:5;:3;:5::i;:::-;-1:-1:-1;;;;;7840:19:0;:10;-1:-1:-1;;;;;7840:19:0;;7832:57;;;;-1:-1:-1;;;7832:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9303:15:0::1;9321:5;9303:15:::0;;;:8:::1;:15;::::0;;;;:23;;-1:-1:-1;;9303:23:0::1;::::0;;9236:98::o;13952:246::-;14021:40;;-1:-1:-1;;;14021:40:0;;14050:10;14021:40;;;6602:51:1;13989:4:0;;;;-1:-1:-1;;;;;14028:10:0;14021:28;;;;6575:18:1;;14021:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14006:55;-1:-1:-1;14072:71:0;-1:-1:-1;;;;;14079:10:0;14072:35;14108:10;14128:4;14006:55;14072:35;:71::i;:::-;14161:29;14170:7;14179:10;14161:8;:29::i;:::-;14154:36;;;13952:246;:::o;18947:715::-;19116:8;19097:15;:27;;19089:70;;;;-1:-1:-1;;;19089:70:0;;12682:2:1;19089:70:0;;;12664:21:1;12721:2;12701:18;;;12694:30;12760:32;12740:18;;;12733:60;12810:18;;19089:70:0;12654:180:1;19089:70:0;-1:-1:-1;;;;;19355:14:0;;19172:18;19355:14;;;:6;:14;;;;;:16;;6496:95;;19280:6;;19305:7;;19331:5;;19355:16;19172:18;19355:16;;;:::i;:::-;;;;-1:-1:-1;19217:182:0;;;;;;9892:25:1;;;;-1:-1:-1;;;;;9991:15:1;;;9971:18;;;9964:43;10043:15;;;;10023:18;;;10016:43;10075:18;;;10068:34;10118:19;;;10111:35;10162:19;;;10155:35;;;9864:19;;19217:182:0;;;;;;;;;;;;19193:207;;;;;;19172:228;;19421:41;19434:6;19442:10;19454:1;19457;19460;19421:12;:41::i;:::-;:92;;;;19466:47;19485:6;19493:10;19505:1;19508;19511;19466:18;:47::i;:::-;19413:101;;;;;;-1:-1:-1;;;;;19572:17:0;;;;;;;:9;:17;;;;;;;;:26;;;;;;;;;;;;;:34;;;19622:32;;9569:25:1;;;-1:-1:-1;;;;;;;;;;;19622:32:0;9542:18:1;19622:32:0;;;;;;;18947:715;;;;;;;;:::o;8857:129::-;7854:5;:3;:5::i;:::-;-1:-1:-1;;;;;7840:19:0;:10;-1:-1:-1;;;;;7840:19:0;;7832:57;;;;-1:-1:-1;;;7832:57:0;;;;;;;:::i;:::-;8936:10:::1;;8917:15;:29;;8909:38;;;::::0;::::1;;8966:12;::::0;8958:5:::1;:20:::0;;-1:-1:-1;;;;;;8958:20:0::1;-1:-1:-1::0;;;;;8966:12:0;;::::1;8958:20:::0;;;::::1;::::0;;8857:129::o;10469:209::-;7731:10;10559:4;7722:20;;;:8;:20;;;;;;;;7714:58;;;;-1:-1:-1;;;7714:58:0;;;;;;;:::i;:::-;10576:22:::1;10582:7;10591:6;10576:5;:22::i;:::-;10632:7;-1:-1:-1::0;;;;;10614:34:0::1;10624:6;10614:34;10641:6;10614:34;;;;9569:25:1::0;;9557:2;9542:18;;9524:76;8003:167:0;8039:7;8082:10;;8063:15;:29;8059:81;;-1:-1:-1;8116:12:0;;-1:-1:-1;;;;;8116:12:0;8109:19;;8059:81;-1:-1:-1;8157:5:0;;-1:-1:-1;;;;;8157:5:0;8003:167;:::o;13651:293::-;13813:86;;-1:-1:-1;;;13813:86:0;;13796:4;;-1:-1:-1;;;;;13820:10:0;13813:37;;;;:86;;13851:6;;13867:4;;13874:5;;13881:8;;13891:1;;13894;;13897;;13813:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13917:19;13926:5;13933:2;13917:8;:19::i;8560:141::-;7854:5;:3;:5::i;:::-;-1:-1:-1;;;;;7840:19:0;:10;-1:-1:-1;;;;;7840:19:0;;7832:57;;;;-1:-1:-1;;;7832:57:0;;;;;;;:::i;:::-;8624:13:::1;:21:::0;;-1:-1:-1;;;;;;8624:21:0::1;-1:-1:-1::0;;;;;8624:21:0;::::1;;::::0;;8688:5:::1;::::0;8670:23:::1;::::0;:15:::1;:23;:::i;:::-;8656:11;:37:::0;-1:-1:-1;8560:141:0:o;15506:198::-;15582:4;15599:19;15605:4;15611:6;15599:5;:19::i;:::-;15629:43;-1:-1:-1;;;;;15636:10:0;15629:31;15661:2;15665:6;15629:31;:43::i;:::-;-1:-1:-1;15690:6:0;;15506:198;-1:-1:-1;;15506:198:0:o;15985:268::-;-1:-1:-1;;;;;16061:21:0;;16053:65;;;;-1:-1:-1;;;16053:65:0;;15331:2:1;16053:65:0;;;15313:21:1;15370:2;15350:18;;;15343:30;15409:33;15389:18;;;15382:61;15460:18;;16053:65:0;15303:181:1;16053:65:0;16147:6;16131:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;16164:18:0;;;;;;:9;:18;;;;;:28;;16186:6;;16164:18;:28;;16186:6;;16164:28;:::i;:::-;;;;-1:-1:-1;;16208:37:0;;9569:25:1;;;-1:-1:-1;;;;;16208:37:0;;;16225:1;;-1:-1:-1;;;;;;;;;;;16208:37:0;9557:2:1;9542:18;16208:37:0;;;;;;;;15985:268;;:::o;20616:399::-;20784:110;;-1:-1:-1;;;20784:110:0;;;6317:27:1;20848:16:0;6360:11:1;;;6353:27;6396:12;;;6389:28;;;20728:4:0;;;;6433:12:1;;20784:110:0;;;-1:-1:-1;;20784:110:0;;;;;;;;;20760:135;;20784:110;20760:135;;;;20906:14;20923:24;;;;;;;;;10428:25:1;;;10501:4;10489:17;;10469:18;;;10462:45;;;;10523:18;;;10516:34;;;10566:18;;;10559:34;;;20760:135:0;;-1:-1:-1;20906:14:0;20923:24;;10400:19:1;;20923:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20923:24:0;;-1:-1:-1;;20923:24:0;;;-1:-1:-1;;;;;;;20966:20:0;;;;;;:40;;;21000:6;-1:-1:-1;;;;;20990:16:0;:6;-1:-1:-1;;;;;20990:16:0;;20958:49;20616:399;-1:-1:-1;;;;;;;;20616:399:0:o;21023:290::-;21141:4;21158:12;21173:20;21182:10;21479:76;;5879:66:1;21479:76:0;;;5867:79:1;21532:16:0;5962:12:1;;;5955:28;5999:12;;;5992:28;;;21442:7:0;;6036:12:1;;21479:76:0;;;;;;;;;;;;21469:87;;;;;;21462:94;;21387:177;;;;21173:20;21221:24;;;21204:14;21221:24;;;;;;;;;10428:25:1;;;10501:4;10489:17;;10469:18;;;10462:45;;;;10523:18;;;10516:34;;;10566:18;;;10559:34;;;21158:35:0;;-1:-1:-1;21204:14:0;21221:24;;10400:19:1;;21221:24:0;10382:217:1;16585:270:0;-1:-1:-1;;;;;16661:21:0;;16653:67;;;;-1:-1:-1;;;16653:67:0;;13748:2:1;16653:67:0;;;13730:21:1;13787:2;13767:18;;;13760:30;13826:34;13806:18;;;13799:62;-1:-1:-1;;;13877:18:1;;;13870:31;13918:19;;16653:67:0;13720:223:1;16653:67:0;-1:-1:-1;;;;;16733:18:0;;;;;;:9;:18;;;;;:28;;16755:6;;16733:18;:28;;16755:6;;16733:28;:::i;:::-;;;;;;;;16788:6;16772:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;16810:37:0;;9569:25:1;;;16836:1:0;;-1:-1:-1;;;;;16810:37:0;;;-1:-1:-1;;;;;;;;;;;16810:37:0;9557:2:1;9542:18;16810:37:0;9524:76:1;5061:201:0;5185:68;;-1:-1:-1;;;;;6922:15:1;;;5185:68:0;;;6904:34:1;6974:15;;6954:18;;;6947:43;7006:18;;;6999:34;;;5159:95:0;;5178:5;;-1:-1:-1;;;5208:27:0;6839:18:1;;5185:68:0;;;;-1:-1:-1;;5185:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;5185:68:0;-1:-1:-1;;;;;;5185:68:0;;;;;;;;;;5159:18;:95::i;:::-;5061:201;;;;:::o;14739:204::-;14800:4;14825:10;-1:-1:-1;;;;;14825:26:0;;;;;:57;;-1:-1:-1;14855:10:0;-1:-1:-1;;;;;14855:27:0;14877:4;14855:27;;14825:57;14817:66;;;;;;14894:17;14900:2;14904:6;14894:5;:17::i;:::-;-1:-1:-1;14929:6:0;;14739:204;-1:-1:-1;14739:204:0:o;4880:173::-;4986:58;;-1:-1:-1;;;;;7911:32:1;;4986:58:0;;;7893:51:1;7960:18;;;7953:34;;;4960:85:0;;4979:5;;-1:-1:-1;;;5009:23:0;7866:18:1;;4986:58:0;7848:145:1;4960:85:0;4880:173;;;:::o;5620:598::-;5708:27;5716:5;-1:-1:-1;;;;;5708:25:0;;:27::i;:::-;5700:71;;;;-1:-1:-1;;;5700:71:0;;14971:2:1;5700:71:0;;;14953:21:1;15010:2;14990:18;;;14983:30;15049:33;15029:18;;;15022:61;15100:18;;5700:71:0;14943:181:1;5700:71:0;5845:12;5859:23;5894:5;-1:-1:-1;;;;;5886:19:0;5906:4;5886:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5844:67;;;;5930:7;5922:52;;;;-1:-1:-1;;;5922:52:0;;11905:2:1;5922:52:0;;;11887:21:1;;;11924:18;;;11917:30;11983:34;11963:18;;;11956:62;12035:18;;5922:52:0;11877:182:1;5922:52:0;5991:17;;:21;5987:224;;6133:10;6122:30;;;;;;;;;;;;:::i;:::-;6114:85;;;;-1:-1:-1;;;6114:85:0;;14560:2:1;6114:85:0;;;14542:21:1;14599:2;14579:18;;;14572:30;14638:34;14618:18;;;14611:62;-1:-1:-1;;;14689:18:1;;;14682:40;14739:19;;6114:85:0;14532:232:1;4440:374:0;4500:4;4723:20;;4566:66;4763:15;;;;;:42;;-1:-1:-1;4782:23:0;;;4755:51;-1:-1:-1;;4440:374:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:156;258:20;;318:4;307:16;;297:27;;287:2;;338:1;335;328:12;353:196;;465:2;453:9;444:7;440:23;436:32;433:2;;;486:6;478;471:22;433:2;514:29;533:9;514:29;:::i;554:270::-;;;683:2;671:9;662:7;658:23;654:32;651:2;;;704:6;696;689:22;651:2;732:29;751:9;732:29;:::i;:::-;722:39;;780:38;814:2;803:9;799:18;780:38;:::i;:::-;770:48;;641:183;;;;;:::o;829:338::-;;;;975:2;963:9;954:7;950:23;946:32;943:2;;;996:6;988;981:22;943:2;1024:29;1043:9;1024:29;:::i;:::-;1014:39;;1072:38;1106:2;1095:9;1091:18;1072:38;:::i;:::-;1062:48;;1157:2;1146:9;1142:18;1129:32;1119:42;;933:234;;;;;:::o;1172:616::-;;;;;;;;1384:3;1372:9;1363:7;1359:23;1355:33;1352:2;;;1406:6;1398;1391:22;1352:2;1434:29;1453:9;1434:29;:::i;:::-;1424:39;;1482:38;1516:2;1505:9;1501:18;1482:38;:::i;:::-;1472:48;;1567:2;1556:9;1552:18;1539:32;1529:42;;1618:2;1607:9;1603:18;1590:32;1580:42;;1641:37;1673:3;1662:9;1658:19;1641:37;:::i;:::-;1631:47;;1725:3;1714:9;1710:19;1697:33;1687:43;;1777:3;1766:9;1762:19;1749:33;1739:43;;1342:446;;;;;;;;;;:::o;1793:264::-;;;1922:2;1910:9;1901:7;1897:23;1893:32;1890:2;;;1943:6;1935;1928:22;1890:2;1971:29;1990:9;1971:29;:::i;:::-;1961:39;2047:2;2032:18;;;;2019:32;;-1:-1:-1;;;1880:177:1:o;2062:338::-;;;;2208:2;2196:9;2187:7;2183:23;2179:32;2176:2;;;2229:6;2221;2214:22;2176:2;2257:29;2276:9;2257:29;:::i;:::-;2247:39;;2333:2;2322:9;2318:18;2305:32;2295:42;;2356:38;2390:2;2379:9;2375:18;2356:38;:::i;:::-;2346:48;;2166:234;;;;;:::o;2405:783::-;;;;;2570:2;2558:9;2549:7;2545:23;2541:32;2538:2;;;2591:6;2583;2576:22;2538:2;2619:29;2638:9;2619:29;:::i;:::-;2609:39;;2695:2;2684:9;2680:18;2667:32;2657:42;;2750:2;2739:9;2735:18;2722:32;2773:18;2814:2;2806:6;2803:14;2800:2;;;2835:6;2827;2820:22;2800:2;2878:6;2867:9;2863:22;2853:32;;2923:7;2916:4;2912:2;2908:13;2904:27;2894:2;;2950:6;2942;2935:22;2894:2;2995;2982:16;3021:2;3013:6;3010:14;3007:2;;;3042:6;3034;3027:22;3007:2;3092:7;3087:2;3078:6;3074:2;3070:15;3066:24;3063:37;3060:2;;;3118:6;3110;3103:22;3060:2;2528:660;;;;-1:-1:-1;;3154:2:1;3146:11;;-1:-1:-1;;;2528:660:1:o;3193:616::-;;;;;;;;3405:3;3393:9;3384:7;3380:23;3376:33;3373:2;;;3427:6;3419;3412:22;3373:2;3455:29;3474:9;3455:29;:::i;:::-;3445:39;;3531:2;3520:9;3516:18;3503:32;3493:42;;3582:2;3571:9;3567:18;3554:32;3544:42;;3605:36;3637:2;3626:9;3622:18;3605:36;:::i;:::-;3595:46;;3688:3;3677:9;3673:19;3660:33;3650:43;;3740:3;3729:9;3725:19;3712:33;3702:43;;3764:39;3798:3;3787:9;3783:19;3764:39;:::i;:::-;3754:49;;3363:446;;;;;;;;;;:::o;3814:251::-;;3923:2;3911:9;3902:7;3898:23;3894:32;3891:2;;;3944:6;3936;3929:22;3891:2;3988:9;3975:23;4007:28;4029:5;4007:28;:::i;4070:255::-;;4190:2;4178:9;4169:7;4165:23;4161:32;4158:2;;;4211:6;4203;4196:22;4158:2;4248:9;4242:16;4267:28;4289:5;4267:28;:::i;4330:332::-;;;;4476:2;4464:9;4455:7;4451:23;4447:32;4444:2;;;4497:6;4489;4482:22;4444:2;4538:9;4525:23;4515:33;;4567:38;4601:2;4590:9;4586:18;4567:38;:::i;4667:190::-;;4779:2;4767:9;4758:7;4754:23;4750:32;4747:2;;;4800:6;4792;4785:22;4747:2;-1:-1:-1;4828:23:1;;4737:120;-1:-1:-1;4737:120:1:o;4862:194::-;;4985:2;4973:9;4964:7;4960:23;4956:32;4953:2;;;5006:6;4998;4991:22;4953:2;-1:-1:-1;5034:16:1;;4943:113;-1:-1:-1;4943:113:1:o;5061:264::-;;;5190:2;5178:9;5169:7;5165:23;5161:32;5158:2;;;5211:6;5203;5196:22;5158:2;5252:9;5239:23;5229:33;;5281:38;5315:2;5304:9;5300:18;5281:38;:::i;5330:274::-;;5497:6;5491:13;5513:53;5559:6;5554:3;5547:4;5539:6;5535:17;5513:53;:::i;:::-;5582:16;;;;;5467:137;-1:-1:-1;;5467:137:1:o;7044:670::-;-1:-1:-1;;;;;7411:15:1;;;7393:34;;7463:15;;;;7458:2;7443:18;;7436:43;7510:2;7495:18;;7488:34;;;;7553:2;7538:18;;7531:34;;;;7614:4;7602:17;7596:3;7581:19;;7574:46;7373:3;7636:19;;7629:35;7695:3;7680:19;;7673:35;;;;7342:3;7327:19;;7309:405::o;7998:562::-;-1:-1:-1;;;;;8211:32:1;;8193:51;;8275:2;8260:18;;8253:34;;;8323:2;8318;8303:18;;8296:30;;;8342:18;;8335:34;;;7998:562;8362:6;8412;8406:3;8391:19;;8378:49;8447:22;;;8471:3;8443:32;;;8436:46;;;;8543:2;8522:15;;;-1:-1:-1;;8518:29:1;8503:45;8499:55;;8183:377;-1:-1:-1;;;8183:377:1:o;8565:661::-;8736:2;8788:21;;;8858:13;;8761:18;;;8880:22;;;8565:661;;8736:2;8959:15;;;;8933:2;8918:18;;;8565:661;9005:195;9019:6;9016:1;9013:13;9005:195;;;9084:13;;-1:-1:-1;;;;;9080:39:1;9068:52;;9175:15;;;;9140:12;;;;9116:1;9034:9;9005:195;;;-1:-1:-1;9217:3:1;;8716:510;-1:-1:-1;;;;;;8716:510:1:o;10604:383::-;;10753:2;10742:9;10735:21;10785:6;10779:13;10828:6;10823:2;10812:9;10808:18;10801:34;10844:66;10903:6;10898:2;10887:9;10883:18;10878:2;10870:6;10866:15;10844:66;:::i;:::-;10971:2;10950:15;-1:-1:-1;;10946:29:1;10931:45;;;;10978:2;10927:54;;10725:262;-1:-1:-1;;10725:262:1:o;10992:349::-;11194:2;11176:21;;;11233:2;11213:18;;;11206:30;11272:27;11267:2;11252:18;;11245:55;11332:2;11317:18;;11166:175::o;11346:352::-;11548:2;11530:21;;;11587:2;11567:18;;;11560:30;11626;11621:2;11606:18;;11599:58;11689:2;11674:18;;11520:178::o;12064:411::-;12266:2;12248:21;;;12305:2;12285:18;;;12278:30;12344:34;12339:2;12324:18;;12317:62;-1:-1:-1;;;12410:2:1;12395:18;;12388:45;12465:3;12450:19;;12238:237::o;13192:349::-;13394:2;13376:21;;;13433:2;13413:18;;;13406:30;13472:27;13467:2;13452:18;;13445:55;13532:2;13517:18;;13366:175::o;15860:128::-;;15931:1;15927:6;15924:1;15921:13;15918:2;;;15937:18;;:::i;:::-;-1:-1:-1;15973:9:1;;15908:80::o;15993:125::-;;16061:1;16058;16055:8;16052:2;;;16066:18;;:::i;:::-;-1:-1:-1;16103:9:1;;16042:76::o;16123:258::-;16195:1;16205:113;16219:6;16216:1;16213:13;16205:113;;;16295:11;;;16289:18;16276:11;;;16269:39;16241:2;16234:10;16205:113;;;16336:6;16333:1;16330:13;16327:2;;;-1:-1:-1;;16371:1:1;16353:16;;16346:27;16176:205::o;16386:380::-;16471:1;16461:12;;16518:1;16508:12;;;16529:2;;16583:4;16575:6;16571:17;16561:27;;16529:2;16636;16628:6;16625:14;16605:18;16602:38;16599:2;;;16682:10;16677:3;16673:20;16670:1;16663:31;16717:4;16714:1;16707:15;16745:4;16742:1;16735:15;16599:2;;16441:325;;;:::o;16771:135::-;;-1:-1:-1;;16831:17:1;;16828:2;;;16851:18;;:::i;:::-;-1:-1:-1;16898:1:1;16887:13;;16818:88::o;16911:127::-;16972:10;16967:3;16963:20;16960:1;16953:31;17003:4;17000:1;16993:15;17027:4;17024:1;17017:15;17043:118;17129:5;17122:13;17115:21;17108:5;17105:32;17095:2;;17151:1;17148;17141:12;17095:2;17085:76;:::o

Swarm Source

ipfs://09f133a1a7b82a84f7eb4d540d9b7632a2fb97e06b30fd18edb4988cdb70ae81
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.