Contract 0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b 14

This token is bridged from its native chain using Multichain.

Contract Overview

Multichain: USDC Token
Balance:
0 GLMR

GLMR Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x4da0a6f8ee842ed904123b1f9050c2b9e846434701e1ee7e031d82d4e626d73fTransfer23929032022-11-28 5:28:486 mins ago0x5ef5842e2b0d7e48f5a90d65152eeed164bc07ee IN  Multichain: USDC Token0 GLMR0.003494645
0x5730df361c6ab1d62635348eff9bc862bd6454068d52eb9ba31fc9f6a73e1687Approve23915362022-11-28 0:50:184 hrs 45 mins ago0x081ca6de70660181a40e096fcecef2781cd7cb8e IN  Multichain: USDC Token0 GLMR0.0047297985
0xd70fa5963a2ed34c54962b03be160e74b2bcb91910a74df6f65467ea98e84002Transfer23913452022-11-28 0:11:425 hrs 24 mins ago0x7c127a61b52a837aacc485fb0576630b25581b1a IN  Multichain: USDC Token0 GLMR0.003494645
0x03cd8765649340d2e327fa32e1b07678b20db7631fbf95bca5770f7d9a9eba85Transfer23913182022-11-28 0:06:185 hrs 29 mins ago0x88b84a0440f9597a59a5aa975115ce5bfcdd7530 IN  Multichain: USDC Token0 GLMR0.003007445
0xf62ea6d3994e8a9f688ab062d020fa714dce5e48259d949455152dc89c812389Transfer23913072022-11-28 0:04:065 hrs 31 mins ago0x2fa4f5272f9ad2bc3971ca570729d6e430fd4099 IN  Multichain: USDC Token0 GLMR0.003007445
0x52701361f83fe537f46c76f71c5c79dfa168fd55bf8512c535e12255b02639faTransfer23912952022-11-28 0:01:365 hrs 34 mins ago0x557ebe070923d7ba8a3dee62afb990769515f530 IN  Multichain: USDC Token0 GLMR0.003493427
0xbd0e081a1c639cf11dc831a13b35933001fdb727789638bd181002ddb264b070Approve23912592022-11-27 23:54:185 hrs 41 mins ago0x83b603ac42b942fe607d76a51a0ab65bdf3787e4 IN  Multichain: USDC Token0 GLMR0.004753098
0x18542edb8aef570ab3ab8a9c7ec3ffa7d85d527d10213254aa9f7d0e148baf5bTransfer23912582022-11-27 23:54:065 hrs 41 mins ago0x7c127a61b52a837aacc485fb0576630b25581b1a IN  Multichain: USDC Token0 GLMR0.003494645
0x164f4127af2e247badefdca6ab53ee33751dbd32af3dadb9cc6f14ebdbfd4c77Transfer23912462022-11-27 23:51:365 hrs 44 mins ago0x557ebe070923d7ba8a3dee62afb990769515f530 IN  Multichain: USDC Token0 GLMR0.003494645
0x66390c5d8b5b3337b5edb255b892d785b59b602a977dfc77fb5635c751a14450Transfer23911812022-11-27 23:38:305 hrs 57 mins ago0x0ac51f90e442a83d46d7a35f5e0a9035c10b8a60 IN  Multichain: USDC Token0 GLMR0.003493427
0x16f58761f1bd3fba5d3590eaa2abeec0537b40b484a30c8910fc1f9d1de36f11Transfer23911642022-11-27 23:34:486 hrs ago0x642ebe3cf342958edda7323b8e4648cac138a1d6 IN  Multichain: USDC Token0 GLMR0.003494645
0x9a5973020c6998d8654cbde5b5902c47cf723c6b8f4837c2bb0a9d13f9a18415Transfer23911592022-11-27 23:33:486 hrs 1 min ago0x4fc9fd1678915718717c99c12f2507b8c15429d3 IN  Multichain: USDC Token0 GLMR0.003494645
0x5528629bb3e2effd744ec70328ba8d6109a88457966eedf3fd3ceb36adb05aeaTransfer23911452022-11-27 23:30:546 hrs 4 mins ago0xeab8a26990502b36aed741fa1ca518c723bb22a0 IN  Multichain: USDC Token0 GLMR0.003494645
0xba1c13e0ef89837775df7a625a45864b51719791429387bb4033df4b91c8a747Approve23911162022-11-27 23:24:546 hrs 10 mins ago0x3ef93b6a68fcdde7c2b3dc817d54221fa829d4a7 IN  Multichain: USDC Token0 GLMR0.005099662899
0x9d4d49200aaa1c5b3089362ec416bc7295f096d8df109ca2f83828a5a112836cApprove23908602022-11-27 22:33:067 hrs 2 mins ago0x6d0d0c22f65e0261769d81c63636473ea45c8e65 IN  Multichain: USDC Token0 GLMR0.0047297985
0xbdb11e2a9cbe15b5b65a69d2092f4caef3b6c5e36b207bdffe697a853ef75cd8Approve23906502022-11-27 21:50:247 hrs 45 mins ago0x3ef93b6a68fcdde7c2b3dc817d54221fa829d4a7 IN  Multichain: USDC Token0 GLMR0.0047297985
0x075959d3e1b4a07e2dd8e2bfb3f050cbfb96d4871263b50aab99152375851ed5Swapout23905342022-11-27 21:26:428 hrs 9 mins ago0x16d5ea048d1b1746a2a44e99ada2a0efdc99a18f IN  Multichain: USDC Token0 GLMR0.0034050205
0x477b1b45edba703de3174bdbda24c74d4edcb8259e94a13d6edba7a2bb2c4588Transfer23904132022-11-27 21:02:128 hrs 33 mins ago0x69cb56a990ecd7e428308f471f77303631ca2ed9 IN  Multichain: USDC Token0 GLMR0.003494645
0x1b7baf50a7cdfe74cabdadeac80a2a224cb39720b69db7fe0ecb7285a8f451b2Approve23900442022-11-27 19:47:309 hrs 48 mins ago0x56e09267e1a26163e8233ddf03edfa27026b74de IN  Multichain: USDC Token0 GLMR0.0047310165
0xa6ce365037b275c0b07caf03d9b47281df71455f9d3174af2805a3d6b116d708Transfer23894832022-11-27 17:53:3011 hrs 42 mins ago0xc7cfd7838e593e1bd2aea39062961cc43b717774 IN  Multichain: USDC Token0 GLMR0.003494645
0x42eec1243b9be63a60c81983c51b5c9ce78021f177ead99a6581dfb314a53d6eApprove23892652022-11-27 17:09:3612 hrs 26 mins ago0xb2cb62bd2c24882a6cee95b83ac00eb828bc716b IN  Multichain: USDC Token0 GLMR0.00472617
0xcb7cb3e70654d87039df37121ea40d8fc479841baf590019d5f20db3f0b31264Approve23890522022-11-27 16:26:1813 hrs 9 mins ago0xd27cece5ce8b4f6fa47a160105d842f97aee227d IN  Multichain: USDC Token0 GLMR0.005086506012
0xc96d6eb30de1b0cc8f744707a3d6f2204d143387627cdd9ad15b767c95e4e8a2Approve23889992022-11-27 16:15:4213 hrs 20 mins ago0x8d7f538a58a7ecf7469bfce721ace44946f60fe7 IN  Multichain: USDC Token0 GLMR0.00512721
0x227a9b7f4902fdcbd92271da53d21cb2d2b35f8bbaf7496d70aee47ef7dd746cTransfer23888872022-11-27 15:53:0613 hrs 42 mins ago0x7c127a61b52a837aacc485fb0576630b25581b1a IN  Multichain: USDC Token0 GLMR0.003494645
0xc7d8bc7fe9b9b5a3adcca1be74148a6be207f7bdfa5abead9255d9e37ee1a3a8Transfer23888642022-11-27 15:48:1813 hrs 47 mins ago0x7c127a61b52a837aacc485fb0576630b25581b1a IN  Multichain: USDC Token0 GLMR0.003494645
[ Download CSV Export 

OVERVIEW

Bridged USDC token of Multichain.

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 moonbeam.moonscan.io on 2022-04-10
*/

/**
 *Submitted for verification at moonbeam.moonscan.io on 2022-04-10
*/

// 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 := 122}
        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 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"}]

60e06040526202a3006005553480156200001857600080fd5b5060405162002fad38038062002fad8339810160408190526200003b91620003c6565b8451620000509060009060208801906200023e565b508351620000669060019060208701906200023e565b507fff0000000000000000000000000000000000000000000000000000000000000060f884901b166080526001600160601b0319606083901b1660a0526001600160a01b038216156200013a57816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620000ed57600080fd5b505afa15801562000102573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000128919062000465565b60ff168360ff16146200013a57600080fd5b6004805461ff001960ff19909116600117169055600880546001600160a01b0383166001600160a01b03199182168117909255600b8054909116909117905542600c55604051607a907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90620001b39060009062000489565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c00160408051601f19818403018152919052805160209091012060c052506200057f945050505050565b8280546200024c906200052c565b90600052602060002090601f016020900481019282620002705760008555620002bb565b82601f106200028b57805160ff1916838001178555620002bb565b82800160010185558215620002bb579182015b82811115620002bb5782518255916020019190600101906200029e565b50620002c9929150620002cd565b5090565b5b80821115620002c95760008155600101620002ce565b80516001600160a01b0381168114620002fc57600080fd5b919050565b600082601f83011262000312578081fd5b81516001600160401b03808211156200032f576200032f62000569565b604051601f8301601f19908116603f011681019082821181831017156200035a576200035a62000569565b8160405283815260209250868385880101111562000376578485fd5b8491505b838210156200039957858201830151818301840152908201906200037a565b83821115620003aa57848385830101525b9695505050505050565b805160ff81168114620002fc57600080fd5b600080600080600060a08688031215620003de578081fd5b85516001600160401b0380821115620003f5578283fd5b6200040389838a0162000301565b9650602088015191508082111562000419578283fd5b50620004288882890162000301565b9450506200043960408701620003b4565b92506200044960608701620002e4565b91506200045960808701620002e4565b90509295509295909350565b60006020828403121562000477578081fd5b6200048282620003b4565b9392505050565b8154600090819060028104600180831680620004a657607f831692505b6020808410821415620004c757634e487b7160e01b87526022600452602487fd5b818015620004de5760018114620004f0576200051e565b60ff198616895284890196506200051e565b60008a815260209020885b86811015620005165781548b820152908501908301620004fb565b505084890196505b509498975050505050505050565b6002810460018216806200054157607f821691505b602082108114156200056357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160f81c60a05160601c60c0516129a4620006096000396000818161048c01528181611dda0152611eec015260008181610590015281816113520152818161139e0152818161141e015281816116450152818161185a015281816118e301528181611bb001528181611ccd015281816120bc01526120ef0152600061045301526129a46000f3fe608060405234801561001057600080fd5b506004361061033f5760003560e01c80637ecebe00116101b8578063bebbf4d011610104578063d93f2445116100a2578063f75c26641161007c578063f75c266414610774578063f954734e1461077c578063fbfa77cf1461078f578063fca3b5aa146107a25761033f565b8063d93f24451461072e578063dd62ed3e14610736578063ec126c77146107615761033f565b8063cae9ca51116100de578063cae9ca51146106ed578063cfbd488514610700578063d0e30db014610713578063d505accf1461071b5761033f565b8063bebbf4d0146106be578063c3081240146106d1578063c4b740f5146106da5761033f565b806395d89b4111610171578063a29dff721161014b578063a29dff721461066c578063a9059cbb14610675578063aa271e1a14610688578063b6b55f25146106ab5761033f565b806395d89b411461063c5780639dc29fac14610644578063a045442c146106575761033f565b80637ecebe00146105d257806381a37c18146105f25780638623ec7b1461060557806387689e28146106185780638da5cb5b1461062157806391c5df49146106295761033f565b80633ccfd60b1161029257806360e232a9116102305780636a42b8f81161020a5780636a42b8f81461056f5780636e553f65146105785780636f307dc31461058b57806370a08231146105b25761033f565b806360e232a914610536578063628d6cba146105495780636817031b1461055c5761033f565b80634ca8f0ed1161026c5780634ca8f0ed146104dc57806352113ba7146104e55780635f9b105d14610510578063605629d6146105235761033f565b80633ccfd60b146104ae5780634000aea0146104b657806340c10f19146104c95761033f565b806318160ddd116102ff5780632ebe3fbb116102d95780632ebe3fbb1461041457806330adf81f14610427578063313ce5671461044e5780633644e515146104875761033f565b806318160ddd146103e657806323b872dd146103ee5780632e1a7d4d146104015761033f565b806239d6ec14610344578062bf26f41461036a578062f714ce1461039157806306fdde03146103a4578063095ea7b3146103b95780630d707df8146103dc575b600080fd5b610357610352366004612469565b6107b5565b6040519081526020015b60405180910390f35b6103577f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b61035761039f36600461261b565b61080b565b6103ac61081f565b604051610361919061272f565b6103cc6103c7366004612440565b6108ad565b6040519015158152602001610361565b6103e4610907565b005b6103576109c3565b6103cc6103fc36600461239c565b6109ca565b61035761040f3660046125eb565b610bb5565b6103e4610422366004612350565b610bca565b6103577f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6104757f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610361565b6103577f000000000000000000000000000000000000000000000000000000000000000081565b610357610ca1565b6103cc6104c43660046124a4565b610cc2565b6103cc6104d7366004612440565b610e1b565b610357600d5481565b600b546104f8906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b6103cc61051e366004612350565b610e5d565b6103cc6105313660046123d7565b610f31565b6103cc610544366004612350565b611141565b6103cc61055736600461261b565b611215565b6103e461056a366004612350565b6112dd565b61035760055481565b61035761058636600461261b565b611343565b6104f87f000000000000000000000000000000000000000000000000000000000000000081565b6103576105c0366004612350565b60026020526000908152604090205481565b6103576105e0366004612350565b600f6020526000908152604090205481565b610357610600366004612526565b611384565b6104f86106133660046125eb565b61145e565b610357600c5481565b6104f8611488565b6009546104f8906001600160a01b031681565b6103ac611492565b6103cc610652366004612440565b61149f565b61065f6114fe565b60405161036191906126e2565b610357600e5481565b6103cc610683366004612440565b611560565b6103cc610696366004612350565b60066020526000908152604090205460ff1681565b6103576106b93660046125eb565b611636565b6103576106cc36600461261b565b611677565b610357600a5481565b6103e46106e836600461258f565b6116b1565b6103cc6106fb3660046124a4565b611703565b6103e461070e366004612350565b6117df565b610357611838565b6103e46107293660046123d7565b61191b565b6103e4611a89565b61035761074436600461236a565b601060209081526000928352604080842090915290825290205481565b6103cc61076f3660046125c7565b611af4565b6104f8611b69565b61035761078a366004612526565b611b96565b6008546104f8906001600160a01b031681565b6103e46107b0366004612350565b611c4e565b60006107bf611b69565b6001600160a01b0316336001600160a01b0316146107f85760405162461bcd60e51b81526004016107ef90612762565b60405180910390fd5b610803848484611cb4565b949350505050565b6000610818338484611cb4565b9392505050565b6000805461082c906128b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610858906128b1565b80156108a55780601f1061087a576101008083540402835291602001916108a5565b820191906000526020600020905b81548152906001019060200180831161088857829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b0387168085529252808320859055519192909160008051602061294f833981519152906108f69086815260200190565b60405180910390a350600192915050565b61090f611b69565b6001600160a01b0316336001600160a01b03161461093f5760405162461bcd60e51b81526004016107ef90612762565b600a5442101561094e57600080fd5b600980546001600160a01b039081166000908152600660205260408120805460ff1916600190811790915592546007805494850181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b03191692909116919091179055565b6003545b90565b60006001600160a01b0383161515806109ec57506001600160a01b0383163014155b6109f557600080fd5b6001600160a01b0384163314610aef576001600160a01b03841660009081526010602090815260408083203384529091529020546000198114610aed5782811015610a945760405162461bcd60e51b815260206004820152602960248201527f416e7973776170563345524332303a2072657175657374206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016107ef565b6000610aa0848361286e565b6001600160a01b0387166000818152601060209081526040808320338085529083529281902085905551848152939450909260008051602061294f833981519152910160405180910390a3505b505b6001600160a01b03841660009081526002602052604090205482811015610b285760405162461bcd60e51b81526004016107ef906127d0565b610b32838261286e565b6001600160a01b038087166000908152600260205260408082209390935590861681529081208054859290610b68908490612856565b92505081905550836001600160a01b0316856001600160a01b031660008051602061292f83398151915285604051610ba291815260200190565b60405180910390a3506001949350505050565b6000610bc2338333611cb4565b90505b919050565b610bd2611b69565b6001600160a01b0316336001600160a01b031614610c025760405162461bcd60e51b81526004016107ef90612762565b60045460ff16610c1157600080fd5b600880546001600160a01b039092166001600160a01b03199283168117909155600b80548316821790556000818152600660205260408120805460ff1990811660019081179092556007805492830181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805490931690911790915542600c55600480549091169055565b336000818152600260205260408120549091610cbd9181611cb4565b905090565b60006001600160a01b038516151580610ce457506001600160a01b0385163014155b610ced57600080fd5b3360009081526002602052604090205484811015610d1d5760405162461bcd60e51b81526004016107ef906127d0565b610d27858261286e565b33600090815260026020526040808220929092556001600160a01b03881681529081208054879290610d5a908490612856565b90915550506040518581526001600160a01b03871690339060008051602061292f8339815191529060200160405180910390a3604051635260769b60e11b81526001600160a01b0387169063a4c0ed3690610dbf90339089908990899060040161269a565b602060405180830381600087803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1191906125ab565b9695505050505050565b3360009081526006602052604081205460ff16610e4a5760405162461bcd60e51b81526004016107ef9061281f565b610e548383611cfc565b50600192915050565b6000610e67611b69565b6001600160a01b0316336001600160a01b031614610e975760405162461bcd60e51b81526004016107ef90612762565b6001600160a01b038216610ebd5760405162461bcd60e51b81526004016107ef90612799565b600b80546001600160a01b0319166001600160a01b038416179055600554610ee59042612856565b600c819055600b546008546040516001600160a01b0392831692909116907f1d065115f314fb9bad9557bd5460b9e3c66f7223b1dd04e73e828f0bb5afe89f90600090a4506001919050565b600084421115610f835760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0388166000908152600f6020526040812080547f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59918b918b918b919086610fd0836128ec565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012090506110318982878787611dca565b8061104457506110448982878787611eba565b61104d57600080fd5b6001600160a01b03881615158061106d57506001600160a01b0388163014155b61107657600080fd5b6001600160a01b038916600090815260026020526040902054878110156110af5760405162461bcd60e51b81526004016107ef906127d0565b6110b9888261286e565b6001600160a01b03808c1660009081526002602052604080822093909355908b16815290812080548a92906110ef908490612856565b92505081905550886001600160a01b03168a6001600160a01b031660008051602061292f8339815191528a60405161112991815260200190565b60405180910390a35060019998505050505050505050565b600061114b611b69565b6001600160a01b0316336001600160a01b03161461117b5760405162461bcd60e51b81526004016107ef90612762565b6001600160a01b0382166111a15760405162461bcd60e51b81526004016107ef90612799565b600b80546001600160a01b0319166001600160a01b0384161790556005546111c99042612856565b600c819055600b546008546040516001600160a01b0392831692909116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a4506001919050565b600454600090610100900460ff16156112705760405162461bcd60e51b815260206004820152601860248201527f416e7973776170563445524332303a206f6e6c7941757468000000000000000060448201526064016107ef565b6001600160a01b0382166112965760405162461bcd60e51b81526004016107ef90612799565b6112a03384611f75565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c888906020016108f6565b6112e5611b69565b6001600160a01b0316336001600160a01b0316146113155760405162461bcd60e51b81526004016107ef90612762565b600b80546001600160a01b0319166001600160a01b03831617905560055461133d9042612856565b600c5550565b600061137a6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086612047565b61081883836120b8565b60405163d505accf60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf906113df908b9030908c908c908c908c908c90600401612659565b600060405180830381600087803b1580156113f957600080fd5b505af115801561140d573d6000803e3d6000fd5b506114489250506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016905089308a612047565b61145287836120b8565b98975050505050505050565b6007818154811061146e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610cbd611b69565b6001805461082c906128b1565b3360009081526006602052604081205460ff166114ce5760405162461bcd60e51b81526004016107ef9061281f565b6001600160a01b0383166114f45760405162461bcd60e51b81526004016107ef90612799565b610e548383611f75565b6060600780548060200260200160405190810160405280929190818152602001828054801561155657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611538575b5050505050905090565b60006001600160a01b03831615158061158257506001600160a01b0383163014155b61158b57600080fd5b33600090815260026020526040902054828110156115bb5760405162461bcd60e51b81526004016107ef906127d0565b6115c5838261286e565b33600090815260026020526040808220929092556001600160a01b038616815290812080548592906115f8908490612856565b90915550506040518381526001600160a01b03851690339060008051602061292f833981519152906020015b60405180910390a35060019392505050565b600061166d6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085612047565b610bc282336120b8565b6000611681611b69565b6001600160a01b0316336001600160a01b03161461137a5760405162461bcd60e51b81526004016107ef90612762565b6116b9611b69565b6001600160a01b0316336001600160a01b0316146116e95760405162461bcd60e51b81526004016107ef90612762565b600480549115156101000261ff0019909216919091179055565b3360008181526010602090815260408083206001600160a01b0389168085529252808320879055519192909160008051602061294f8339815191529061174c9088815260200190565b60405180910390a360405162ba451f60e01b81526001600160a01b0386169062ba451f9061178490339088908890889060040161269a565b602060405180830381600087803b15801561179e57600080fd5b505af11580156117b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d691906125ab565b95945050505050565b6117e7611b69565b6001600160a01b0316336001600160a01b0316146118175760405162461bcd60e51b81526004016107ef90612762565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d49190612603565b905061190b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084612047565b61191581336120b8565b91505090565b8342111561196b5760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0387166000908152600f6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866119b8836128ec565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050611a198882868686611dca565b80611a2c5750611a2c8882868686611eba565b611a3557600080fd5b6001600160a01b038881166000818152601060209081526040808320948c16808452948252918290208a9055905189815260008051602061294f833981519152910160405180910390a35050505050505050565b611a91611b69565b6001600160a01b0316336001600160a01b031614611ac15760405162461bcd60e51b81526004016107ef90612762565b600c54421015611ad057600080fd5b600b54600880546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526006602052604081205460ff16611b235760405162461bcd60e51b81526004016107ef9061281f565b611b2d8383611cfc565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161162491815260200190565b6000600c544210611b865750600b546001600160a01b03166109c7565b506008546001600160a01b031690565b60405163302b14eb60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063605629d690611bf1908b9030908c908c908c908c908c90600401612659565b602060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4391906125ab565b5061145287836120b8565b611c56611b69565b6001600160a01b0316336001600160a01b031614611c865760405162461bcd60e51b81526004016107ef90612762565b600980546001600160a01b0319166001600160a01b038316179055600554611cae9042612856565b600a5550565b6000611cc08484611f75565b611cf46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168385612135565b509092915050565b6001600160a01b038216611d525760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107ef565b8060036000828254611d649190612856565b90915550506001600160a01b03821660009081526002602052604081208054839290611d91908490612856565b90915550506040518181526001600160a01b0383169060009060008051602061292f833981519152906020015b60405180910390a35050565b60405161190160f01b60208201527f0000000000000000000000000000000000000000000000000000000000000000602282015260428101859052600090819060620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0015b6020604051602081039080840390855afa158015611e79573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114525750876001600160a01b0316816001600160a01b03161498975050505050505050565b600080611f3a866040517f19457468657265756d205369676e6564204d6573736167653a0a33320000000060208201527f0000000000000000000000000000000000000000000000000000000000000000603c820152605c8101829052600090607c01604051602081830303815290604052805190602001209050919050565b6040805160008082526020820180845284905260ff89169282019290925260608101879052608081018690529192509060019060a001611e57565b6001600160a01b038216611fd55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107ef565b6001600160a01b03821660009081526002602052604081208054839290611ffd90849061286e565b925050819055508060036000828254612016919061286e565b90915550506040518181526000906001600160a01b0384169060008051602061292f83398151915290602001611dbe565b6040516001600160a01b03808516602483015283166044820152606481018290526120b29085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261216a565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580159061211b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014155b61212457600080fd5b61212e8284611cfc565b5090919050565b6040516001600160a01b03831660248201526044810182905261216590849063a9059cbb60e01b9060640161207b565b505050565b61217c826001600160a01b03166122f1565b6121c85760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016107ef565b600080836001600160a01b0316836040516121e3919061263d565b6000604051808303816000865af19150503d8060008114612220576040519150601f19603f3d011682016040523d82523d6000602084013e612225565b606091505b5091509150816122775760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016107ef565b8051156120b2578080602001905181019061229291906125ab565b6120b25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107ef565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906108035750141592915050565b80356001600160a01b0381168114610bc557600080fd5b803560ff81168114610bc557600080fd5b600060208284031215612361578081fd5b61081882612328565b6000806040838503121561237c578081fd5b61238583612328565b915061239360208401612328565b90509250929050565b6000806000606084860312156123b0578081fd5b6123b984612328565b92506123c760208501612328565b9150604084013590509250925092565b600080600080600080600060e0888a0312156123f1578283fd5b6123fa88612328565b965061240860208901612328565b955060408801359450606088013593506124246080890161233f565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215612452578182fd5b61245b83612328565b946020939093013593505050565b60008060006060848603121561247d578283fd5b61248684612328565b92506020840135915061249b60408501612328565b90509250925092565b600080600080606085870312156124b9578384fd5b6124c285612328565b935060208501359250604085013567ffffffffffffffff808211156124e5578384fd5b818701915087601f8301126124f8578384fd5b813581811115612506578485fd5b886020828501011115612517578485fd5b95989497505060200194505050565b600080600080600080600060e0888a031215612540578283fd5b61254988612328565b965060208801359550604088013594506125656060890161233f565b93506080880135925060a0880135915061258160c08901612328565b905092959891949750929550565b6000602082840312156125a0578081fd5b81356108188161291d565b6000602082840312156125bc578081fd5b81516108188161291d565b6000806000606084860312156125db578283fd5b833592506123c760208501612328565b6000602082840312156125fc578081fd5b5035919050565b600060208284031215612614578081fd5b5051919050565b6000806040838503121561262d578182fd5b8235915061239360208401612328565b6000825161264f818460208701612885565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b6020808252825182820181905260009190848201906040850190845b818110156127235783516001600160a01b0316835292840192918401916001016126fe565b50909695505050505050565b600060208252825180602084015261274e816040850160208701612885565b601f01601f19169190910160400192915050565b60208082526019908201527f416e7973776170563345524332303a20464f5242494444454e00000000000000604082015260600190565b6020808252601c908201527f416e7973776170563345524332303a2061646472657373283078302900000000604082015260600190565b6020808252602f908201527f416e7973776170563345524332303a207472616e7366657220616d6f756e742060408201526e657863656564732062616c616e636560881b606082015260800190565b60208082526019908201527f416e7973776170563445524332303a20464f5242494444454e00000000000000604082015260600190565b6000821982111561286957612869612907565b500190565b60008282101561288057612880612907565b500390565b60005b838110156128a0578181015183820152602001612888565b838111156120b25750506000910152565b6002810460018216806128c557607f821691505b602082108114156128e657634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561290057612900612907565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461292b57600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220c4079d4807d436c1a75c940ddc11663aafadb0a4bfdd043c25a36b40570715db64736f6c6343000802003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251000000000000000000000000000000000000000000000000000000000000000855534420436f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045553444300000000000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251000000000000000000000000000000000000000000000000000000000000000855534420436f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045553444300000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): USD Coin
Arg [1] : _symbol (string): USDC
Arg [2] : _decimals (uint8): 6
Arg [3] : _underlying (address): 0x0000000000000000000000000000000000000000
Arg [4] : _vault (address): 0xfa9da51631268a30ec3ddd1ccbf46c65fad99251

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [6] : 55534420436f696e000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 5553444300000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

5807:19162:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14925:149;;;;;;:::i;:::-;;:::i;:::-;;;9569:25:1;;;9557:2;9542:18;14925:149:0;;;;;;;;6180:136;;6224:92;6180:136;;14791:126;;;;;;:::i;:::-;;:::i;5890:18::-;;;:::i;:::-;;;;;;;:::i;16648:265::-;;;;;;:::i;:::-;;:::i;:::-;;;9396:14:1;;9389:22;9371:41;;9359:2;9344:18;16648:265:0;9326:92:1;8576:179:0;;;:::i;:::-;;12760:102;;;:::i;22889:927::-;;;;;;:::i;:::-;;:::i;14661:122::-;;;;;;:::i;:::-;;:::i;7862:272::-;;;;;;:::i;:::-;;:::i;6036:137::-;;6078:95;6036:137;;5942:41;;;;;;;;15843:4:1;15831:17;;;15813:36;;15801:2;15786:18;5942:41:0;15768:87:1;6323:41:0;;;;;14527:126;;;:::i;24443:523::-;;;;;;:::i;:::-;;:::i;9695:133::-;;;;;;:::i;:::-;;:::i;7201:24::-;;;;;;7136:27;;;;;-1:-1:-1;;;;;7136:27:0;;;;;;-1:-1:-1;;;;;6620:32:1;;;6602:51;;6590:2;6575:18;7136:27:0;6557:102:1;9362:325:0;;;;;;:::i;:::-;;:::i;19246:938::-;;;;;;:::i;:::-;;:::i;9033:321::-;;;;;;:::i;:::-;;:::i;10268:328::-;;;;;;:::i;:::-;;:::i;8291:140::-;;;;;;:::i;:::-;;:::i;6811:29::-;;;;;;13979:193;;;;;;:::i;:::-;;:::i;5992:35::-;;;;;6444:54;;;;;;:::i;:::-;;;;;;;;;;;;;;10868:51;;;;;;:::i;:::-;;;;;;;;;;;;;;12870:349;;;;;;:::i;:::-;;:::i;6958:24::-;;;;;;:::i;:::-;;:::i;7170:22::-;;;;;;7499:78;;;:::i;7069:28::-;;;;;-1:-1:-1;;;;;7069:28:0;;;5915:20;;;:::i;9836:207::-;;;;;;:::i;:::-;;:::i;8924:99::-;;;:::i;:::-;;;;;;;:::i;7232:22::-;;;;;;21562:438;;;;;;:::i;:::-;;:::i;6911:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13782:189;;;;;;:::i;:::-;;:::i;14180:127::-;;;;;;:::i;:::-;;:::i;7104:23::-;;;;;;7760:94;;;;;;:::i;:::-;;:::i;17334:356::-;;;;;;:::i;:::-;;:::i;8818:98::-;;;;;;:::i;:::-;;:::i;13528:246::-;;;:::i;18523:715::-;;;;;;:::i;:::-;;:::i;8439:129::-;;;:::i;11089:75::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;10051:209;;;;;;:::i;:::-;;:::i;7585:167::-;;;:::i;13227:293::-;;;;;;:::i;:::-;;:::i;7040:20::-;;;;;-1:-1:-1;;;;;7040:20:0;;;8142:141;;;;;;:::i;:::-;;:::i;14925:149::-;15015:4;7436:5;:3;:5::i;:::-;-1:-1:-1;;;;;7422:19:0;:10;-1:-1:-1;;;;;7422:19:0;;7414:57;;;;-1:-1:-1;;;7414:57:0;;;;;;;:::i;:::-;;;;;;;;;15039:27:::1;15049:4;15055:6;15063:2;15039:9;:27::i;:::-;15032:34:::0;14925:149;-1:-1:-1;;;;14925:149:0:o;14791:126::-;14852:4;14876:33;14886:10;14898:6;14906:2;14876:9;:33::i;:::-;14869:40;14791:126;-1:-1:-1;;;14791:126:0:o;5890:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16648:265::-;16801:10;16724:4;16791:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;16791:30:0;;;;;;;;;;:38;;;16845:36;16724:4;;16791:30;;-1:-1:-1;;;;;;;;;;;16845:36:0;;;16824:5;9569:25:1;;9557:2;9542:18;;9524:76;16845:36:0;;;;;;;;-1:-1:-1;16901:4:0;16648:265;;;;:::o;8576:179::-;7436:5;:3;:5::i;:::-;-1:-1:-1;;;;;7422:19:0;:10;-1:-1:-1;;;;;7422:19:0;;7414:57;;;;-1:-1:-1;;;7414:57:0;;;;;;;:::i;:::-;8656:11:::1;;8637:15;:30;;8629:39;;;::::0;::::1;;8688:13;::::0;;-1:-1:-1;;;;;8688:13:0;;::::1;8679:23;::::0;;;:8:::1;:23;::::0;;;;:30;;-1:-1:-1;;8679:30:0::1;8705:4;8679:30:::0;;::::1;::::0;;;8733:13;;8720:7:::1;:27:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;8720:27:0::1;8733:13:::0;;;::::1;8720:27:::0;;;::::1;::::0;;8576:179::o;12760:102::-;12842:12;;12760:102;;:::o;22889:927::-;22979:4;-1:-1:-1;;;;;23004:16:0;;;;;:39;;-1:-1:-1;;;;;;23024:19:0;;23038:4;23024:19;;23004:39;22996:48;;;;;;-1:-1:-1;;;;;23059:18:0;;23067:10;23059:18;23055:477;;-1:-1:-1;;;;;23173:15:0;;23155;23173;;;:9;:15;;;;;;;;23189:10;23173:27;;;;;;;;-1:-1:-1;;23219:28:0;;23215:306;;23287:5;23276:7;:16;;23268:70;;;;-1:-1:-1;;;23268:70:0;;14150:2:1;23268: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;;23268:70:0;14122:231:1;23268:70:0;23357:15;23375;23385:5;23375:7;:15;:::i;:::-;-1:-1:-1;;;;;23409:15:0;;;;;;:9;:15;;;;;;;;23425:10;23409:27;;;;;;;;;;:37;;;23470:35;9569:25:1;;;23409:37:0;;-1:-1:-1;23425:10:0;;-1:-1:-1;;;;;;;;;;;23470:35:0;9542:18:1;23470:35:0;;;;;;;23215:306;;23055:477;;-1:-1:-1;;;;;23562:15:0;;23544;23562;;;:9;:15;;;;;;23596:16;;;;23588:76;;;;-1:-1:-1;;;23588:76:0;;;;;;;:::i;:::-;23695:15;23705:5;23695:7;:15;:::i;:::-;-1:-1:-1;;;;;23677:15:0;;;;;;;:9;:15;;;;;;:33;;;;23721:13;;;;;;;;:22;;23738:5;;23677:15;23721:22;;23738:5;;23721:22;:::i;:::-;;;;;;;;23774:2;-1:-1:-1;;;;;23759:25:0;23768:4;-1:-1:-1;;;;;23759:25:0;-1:-1:-1;;;;;;;;;;;23778:5:0;23759:25;;;;9569::1;;9557:2;9542:18;;9524:76;23759:25:0;;;;;;;;-1:-1:-1;23804:4:0;;22889:927;-1:-1:-1;;;;22889:927:0:o;14661:122::-;14710:4;14734:41;14744:10;14756:6;14764:10;14734:9;:41::i;:::-;14727:48;;14661:122;;;;:::o;7862:272::-;7436:5;:3;:5::i;:::-;-1:-1:-1;;;;;7422:19:0;:10;-1:-1:-1;;;;;7422:19:0;;7414:57;;;;-1:-1:-1;;;7414:57:0;;;;;;;:::i;:::-;7935:5:::1;::::0;::::1;;7927:14;;;::::0;::::1;;7952:5;:14:::0;;-1:-1:-1;;;;;7952:14:0;;::::1;-1:-1:-1::0;;;;;;7952:14:0;;::::1;::::0;::::1;::::0;;;7977:12:::1;:21:::0;;;::::1;::::0;::::1;::::0;;7952:5:::1;8009:16:::0;;;:8:::1;:16;::::0;;;;:23;;-1:-1:-1;;8009:23:0;;::::1;7952:14:::0;8009:23;;::::1;::::0;;;8043:7:::1;:20:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;8087:15:::1;8074:10;:28:::0;8113:5:::1;:13:::0;;;;::::1;::::0;;7862:272::o;14527:126::-;14599:10;14565:4;14611:21;;;:9;:21;;;;;;14565:4;;14589:56;;14599:10;14589:9;:56::i;:::-;14582:63;;14527:126;:::o;24443:523::-;24540:4;-1:-1:-1;;;;;24565:16:0;;;;;:39;;-1:-1:-1;;;;;;24585:19:0;;24599:4;24585:19;;24565:39;24557:48;;;;;;24646:10;24618:15;24636:21;;;:9;:21;;;;;;24676:16;;;;24668:76;;;;-1:-1:-1;;;24668:76:0;;;;;;;:::i;:::-;24781:15;24791:5;24781:7;:15;:::i;:::-;24767:10;24757:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;24807:13:0;;;;;;;:22;;24824:5;;24757:21;24807:22;;24824:5;;24807:22;:::i;:::-;;;;-1:-1:-1;;24845:31:0;;9569:25:1;;;-1:-1:-1;;;;;24845:31:0;;;24854:10;;-1:-1:-1;;;;;;;;;;;24845:31:0;9557:2:1;9542:18;24845:31:0;;;;;;;24896:62;;-1:-1:-1;;;24896:62:0;;-1:-1:-1;;;;;24896:37:0;;;;;:62;;24934:10;;24946:5;;24953:4;;;;24896:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24889:69;24443:523;-1:-1:-1;;;;;;24443:523:0:o;9695:133::-;7313:10;9764:4;7304:20;;;:8;:20;;;;;;;;7296:58;;;;-1:-1:-1;;;7296:58:0;;;;;;;:::i;:::-;9781:17:::1;9787:2;9791:6;9781:5;:17::i;:::-;-1:-1:-1::0;9816:4:0::1;9695:133:::0;;;;:::o;9362:325::-;9430:4;7436:5;:3;:5::i;:::-;-1:-1:-1;;;;;7422:19:0;:10;-1:-1:-1;;;;;7422:19:0;;7414:57;;;;-1:-1:-1;;;7414:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9455:22:0;::::1;9447:63;;;;-1:-1:-1::0;;;9447:63:0::1;;;;;;;:::i;:::-;9521:12;:23:::0;;-1:-1:-1;;;;;;9521:23:0::1;-1:-1:-1::0;;;;;9521:23:0;::::1;;::::0;;9586:5:::1;::::0;9568:23:::1;::::0;:15:::1;:23;:::i;:::-;9555:10;:36:::0;;;9632:12:::1;::::0;9625:5:::1;::::0;9607:50:::1;::::0;-1:-1:-1;;;;;9632:12:0;;::::1;::::0;9625:5;;::::1;::::0;9607:50:::1;::::0;9632:12:::1;::::0;9607:50:::1;-1:-1:-1::0;9675:4:0::1;9362:325:::0;;;:::o;19246:938::-;19393:4;19437:8;19418:15;:27;;19410:70;;;;-1:-1:-1;;;19410:70:0;;12682:2:1;19410:70:0;;;12664:21:1;12721:2;12701:18;;;12694:30;12760:32;12740:18;;;12733:60;12810:18;;19410:70:0;12654:180:1;19410:70:0;-1:-1:-1;;;;;19673:14:0;;19493:18;19673:14;;;:6;:14;;;;;:16;;6224:92;;19603:6;;19628:2;;19649:5;;19673:16;19493:18;19673:16;;;:::i;:::-;;;;-1:-1:-1;19538: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;;19538:179:0;;;;;;;;;;;;19514:204;;;;;;19493:225;;19739:41;19752:6;19760:10;19772:1;19775;19778;19739:12;:41::i;:::-;:92;;;;19784:47;19803:6;19811:10;19823:1;19826;19829;19784:18;:47::i;:::-;19731:101;;;;;;-1:-1:-1;;;;;19853:16:0;;;;;:39;;-1:-1:-1;;;;;;19873:19:0;;19887:4;19873:19;;19853:39;19845:48;;;;;;-1:-1:-1;;;;;19924:17:0;;19906:15;19924:17;;;:9;:17;;;;;;19960:16;;;;19952:76;;;;-1:-1:-1;;;19952:76:0;;;;;;;:::i;:::-;20061:15;20071:5;20061:7;:15;:::i;:::-;-1:-1:-1;;;;;20041:17:0;;;;;;;:9;:17;;;;;;:35;;;;20087:13;;;;;;;;:22;;20104:5;;20041:17;20087:22;;20104:5;;20087:22;:::i;:::-;;;;;;;;20142:2;-1:-1:-1;;;;;20125:27:0;20134:6;-1:-1:-1;;;;;20125:27:0;-1:-1:-1;;;;;;;;;;;20146:5:0;20125:27;;;;9569:25:1;;9557:2;9542:18;;9524:76;20125:27:0;;;;;;;;-1:-1:-1;20172:4:0;;19246:938;-1:-1:-1;;;;;;;;;19246:938:0:o;9033:321::-;9100:4;7436:5;:3;:5::i;:::-;-1:-1:-1;;;;;7422:19:0;:10;-1:-1:-1;;;;;7422:19:0;;7414:57;;;;-1:-1:-1;;;7414:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9125:22:0;::::1;9117:63;;;;-1:-1:-1::0;;;9117:63:0::1;;;;;;;:::i;:::-;9191:12;:23:::0;;-1:-1:-1;;;;;;9191:23:0::1;-1:-1:-1::0;;;;;9191:23:0;::::1;;::::0;;9256:5:::1;::::0;9238:23:::1;::::0;:15:::1;:23;:::i;:::-;9225:10;:36:::0;;;9299:12:::1;::::0;9292:5:::1;::::0;9277:47:::1;::::0;-1:-1:-1;;;;;9299:12:0;;::::1;::::0;9292:5;;::::1;::::0;9277:47:::1;::::0;9299:12:::1;::::0;9277:47:::1;-1:-1:-1::0;9342:4:0::1;9033:321:::0;;;:::o;10268:328::-;10361:10;;10335:4;;10361:10;;;;;10360:11;10352:48;;;;-1:-1:-1;;;10352:48:0;;13041:2:1;10352:48:0;;;13023:21:1;13080:2;13060:18;;;13053:30;13119:26;13099:18;;;13092:54;13163:18;;10352:48:0;13013:174:1;10352:48:0;-1:-1:-1;;;;;10419:22:0;;10411:63;;;;-1:-1:-1;;;10411:63:0;;;;;;;:::i;:::-;10485:25;10491:10;10503:6;10485:5;:25::i;:::-;10526:40;;9569:25:1;;;-1:-1:-1;;;;;10526:40:0;;;10537:10;;10526:40;;9557:2:1;9542:18;10526:40:0;9524:76:1;8291:140:0;7436:5;:3;:5::i;:::-;-1:-1:-1;;;;;7422:19:0;:10;-1:-1:-1;;;;;7422:19:0;;7414:57;;;;-1:-1:-1;;;7414:57:0;;;;;;;:::i;:::-;8355:12:::1;:21:::0;;-1:-1:-1;;;;;;8355:21:0::1;-1:-1:-1::0;;;;;8355:21:0;::::1;;::::0;;8418:5:::1;::::0;8400:23:::1;::::0;:15:::1;:23;:::i;:::-;8387:10;:36:::0;-1:-1:-1;8291:140:0:o;13979:193::-;14039:4;14056:70;-1:-1:-1;;;;;14063:10:0;14056:35;14092:10;14112:4;14119:6;14056:35;:70::i;:::-;14144:20;14153:6;14161:2;14144:8;:20::i;12870:349::-;13024:74;;-1:-1:-1;;;13024:74:0;;13007:4;;-1:-1:-1;;;;;13031:10:0;13024:25;;;;:74;;13050:6;;13066:4;;13073:5;;13080:8;;13090:1;;13093;;13096;;13024:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13109:65:0;;-1:-1:-1;;;;;;;13116:10:0;13109:35;;-1:-1:-1;13145:6:0;13161:4;13168:5;13109:35;:65::i;:::-;13192:19;13201:5;13208:2;13192:8;:19::i;:::-;13185:26;12870:349;-1:-1:-1;;;;;;;;12870:349:0:o;6958:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6958:24:0;;-1:-1:-1;6958:24:0;:::o;7499:78::-;7537:7;7564:5;:3;:5::i;5915:20::-;;;;;;;:::i;9836:207::-;7313:10;9907:4;7304:20;;;:8;:20;;;;;;;;7296:58;;;;-1:-1:-1;;;7296:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9932:18:0;::::1;9924:59;;;;-1:-1:-1::0;;;9924:59:0::1;;;;;;;:::i;:::-;9994:19;10000:4;10006:6;9994:5;:19::i;8924:99::-:0;8972:16;9008:7;9001:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9001:14:0;;;;;;;;;;;;;;;;;;;;;;;8924:99;:::o;21562:438::-;21634:4;-1:-1:-1;;;;;21659:16:0;;;;;:39;;-1:-1:-1;;;;;;21679:19:0;;21693:4;21679:19;;21659:39;21651:48;;;;;;21738:10;21710:15;21728:21;;;:9;:21;;;;;;21768:16;;;;21760:76;;;;-1:-1:-1;;;21760:76:0;;;;;;;:::i;:::-;21873:15;21883:5;21873:7;:15;:::i;:::-;21859:10;21849:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;21899:13:0;;;;;;;:22;;21916:5;;21849:21;21899:22;;21916:5;;21899:22;:::i;:::-;;;;-1:-1:-1;;21937:31:0;;9569:25:1;;;-1:-1:-1;;;;;21937:31:0;;;21946:10;;-1:-1:-1;;;;;;;;;;;21937:31:0;9557:2:1;9542:18;21937:31:0;;;;;;;;-1:-1:-1;21988:4:0;;21562:438;-1:-1:-1;;;21562:438:0:o;13782:189::-;13830:4;13847:70;-1:-1:-1;;;;;13854:10:0;13847:35;13883:10;13903:4;13910:6;13847:35;:70::i;:::-;13935:28;13944:6;13952:10;13935:8;:28::i;14180:127::-;14255:4;7436:5;:3;:5::i;:::-;-1:-1:-1;;;;;7422:19:0;:10;-1:-1:-1;;;;;7422:19:0;;7414:57;;;;-1:-1:-1;;;7414:57:0;;;;;;;:::i;7760:94::-;7436:5;:3;:5::i;:::-;-1:-1:-1;;;;;7422:19:0;:10;-1:-1:-1;;;;;7422:19:0;;7414:57;;;;-1:-1:-1;;;7414:57:0;;;;;;;:::i;:::-;7826:10:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;7826:20:0;;::::1;::::0;;;::::1;::::0;;7760:94::o;17334:356::-;17515:10;17438:4;17505:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;17505:30:0;;;;;;;;;;:38;;;17559:36;17438:4;;17505:30;;-1:-1:-1;;;;;;;;;;;17559:36:0;;;17538:5;9569:25:1;;9557:2;9542:18;;9524:76;17559:36:0;;;;;;;;17615:67;;-1:-1:-1;;;17615:67:0;;-1:-1:-1;;;;;17615:42:0;;;;;:67;;17658:10;;17670:5;;17677:4;;;;17615:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17608:74;17334:356;-1:-1:-1;;;;;17334:356:0:o;8818:98::-;7436:5;:3;:5::i;:::-;-1:-1:-1;;;;;7422:19:0;:10;-1:-1:-1;;;;;7422:19:0;;7414:57;;;;-1:-1:-1;;;7414:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8885:15:0::1;8903:5;8885:15:::0;;;:8:::1;:15;::::0;;;;:23;;-1:-1:-1;;8885:23:0::1;::::0;;8818:98::o;13528:246::-;13597:40;;-1:-1:-1;;;13597:40:0;;13626:10;13597:40;;;6602:51:1;13565:4:0;;;;-1:-1:-1;;;;;13604:10:0;13597:28;;;;6575:18:1;;13597:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13582:55;-1:-1:-1;13648:71:0;-1:-1:-1;;;;;13655:10:0;13648:35;13684:10;13704:4;13582:55;13648:35;:71::i;:::-;13737:29;13746:7;13755:10;13737:8;:29::i;:::-;13730:36;;;13528:246;:::o;18523:715::-;18692:8;18673:15;:27;;18665:70;;;;-1:-1:-1;;;18665:70:0;;12682:2:1;18665:70:0;;;12664:21:1;12721:2;12701:18;;;12694:30;12760:32;12740:18;;;12733:60;12810:18;;18665:70:0;12654:180:1;18665:70:0;-1:-1:-1;;;;;18931:14:0;;18748:18;18931:14;;;:6;:14;;;;;:16;;6078:95;;18856:6;;18881:7;;18907:5;;18931:16;18748:18;18931:16;;;:::i;:::-;;;;-1:-1:-1;18793: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;;18793:182:0;;;;;;;;;;;;18769:207;;;;;;18748:228;;18997:41;19010:6;19018:10;19030:1;19033;19036;18997:12;:41::i;:::-;:92;;;;19042:47;19061:6;19069:10;19081:1;19084;19087;19042:18;:47::i;:::-;18989:101;;;;;;-1:-1:-1;;;;;19148:17:0;;;;;;;:9;:17;;;;;;;;:26;;;;;;;;;;;;;:34;;;19198:32;;9569:25:1;;;-1:-1:-1;;;;;;;;;;;19198:32:0;9542:18:1;19198:32:0;;;;;;;18523:715;;;;;;;;:::o;8439:129::-;7436:5;:3;:5::i;:::-;-1:-1:-1;;;;;7422:19:0;:10;-1:-1:-1;;;;;7422:19:0;;7414:57;;;;-1:-1:-1;;;7414:57:0;;;;;;;:::i;:::-;8518:10:::1;;8499:15;:29;;8491:38;;;::::0;::::1;;8548:12;::::0;8540:5:::1;:20:::0;;-1:-1:-1;;;;;;8540:20:0::1;-1:-1:-1::0;;;;;8548:12:0;;::::1;8540:20:::0;;;::::1;::::0;;8439:129::o;10051:209::-;7313:10;10141:4;7304:20;;;:8;:20;;;;;;;;7296:58;;;;-1:-1:-1;;;7296:58:0;;;;;;;:::i;:::-;10158:22:::1;10164:7;10173:6;10158:5;:22::i;:::-;10214:7;-1:-1:-1::0;;;;;10196:34:0::1;10206:6;10196:34;10223:6;10196:34;;;;9569:25:1::0;;9557:2;9542:18;;9524:76;7585:167:0;7621:7;7664:10;;7645:15;:29;7641:81;;-1:-1:-1;7698:12:0;;-1:-1:-1;;;;;7698:12:0;7691:19;;7641:81;-1:-1:-1;7739:5:0;;-1:-1:-1;;;;;7739:5:0;7585:167;:::o;13227:293::-;13389:86;;-1:-1:-1;;;13389:86:0;;13372:4;;-1:-1:-1;;;;;13396:10:0;13389:37;;;;:86;;13427:6;;13443:4;;13450:5;;13457:8;;13467:1;;13470;;13473;;13389:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13493:19;13502:5;13509:2;13493:8;:19::i;8142:141::-;7436:5;:3;:5::i;:::-;-1:-1:-1;;;;;7422:19:0;:10;-1:-1:-1;;;;;7422:19:0;;7414:57;;;;-1:-1:-1;;;7414:57:0;;;;;;;:::i;:::-;8206:13:::1;:21:::0;;-1:-1:-1;;;;;;8206:21:0::1;-1:-1:-1::0;;;;;8206:21:0;::::1;;::::0;;8270:5:::1;::::0;8252:23:::1;::::0;:15:::1;:23;:::i;:::-;8238:11;:37:::0;-1:-1:-1;8142:141:0:o;15082:198::-;15158:4;15175:19;15181:4;15187:6;15175:5;:19::i;:::-;15205:43;-1:-1:-1;;;;;15212:10:0;15205:31;15237:2;15241:6;15205:31;:43::i;:::-;-1:-1:-1;15266:6:0;;15082:198;-1:-1:-1;;15082:198:0:o;15561:268::-;-1:-1:-1;;;;;15637:21:0;;15629:65;;;;-1:-1:-1;;;15629:65:0;;15331:2:1;15629:65:0;;;15313:21:1;15370:2;15350:18;;;15343:30;15409:33;15389:18;;;15382:61;15460:18;;15629:65:0;15303:181:1;15629:65:0;15723:6;15707:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;15740:18:0;;;;;;:9;:18;;;;;:28;;15762:6;;15740:18;:28;;15762:6;;15740:28;:::i;:::-;;;;-1:-1:-1;;15784:37:0;;9569:25:1;;;-1:-1:-1;;;;;15784:37:0;;;15801:1;;-1:-1:-1;;;;;;;;;;;15784:37:0;9557:2:1;9542:18;15784:37:0;;;;;;;;15561:268;;:::o;20192:399::-;20360:110;;-1:-1:-1;;;20360:110:0;;;6317:27:1;20424:16:0;6360:11:1;;;6353:27;6396:12;;;6389:28;;;20304:4:0;;;;6433:12:1;;20360:110:0;;;-1:-1:-1;;20360:110:0;;;;;;;;;20336:135;;20360:110;20336:135;;;;20482:14;20499:24;;;;;;;;;10428:25:1;;;10501:4;10489:17;;10469:18;;;10462:45;;;;10523:18;;;10516:34;;;10566:18;;;10559:34;;;20336:135:0;;-1:-1:-1;20482:14:0;20499:24;;10400:19:1;;20499:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20499:24:0;;-1:-1:-1;;20499:24:0;;;-1:-1:-1;;;;;;;20542:20:0;;;;;;:40;;;20576:6;-1:-1:-1;;;;;20566:16:0;:6;-1:-1:-1;;;;;20566:16:0;;20534:49;20192:399;-1:-1:-1;;;;;;;;20192:399:0:o;20599:290::-;20717:4;20734:12;20749:20;20758:10;21055:76;;5879:66:1;21055:76:0;;;5867:79:1;21108:16:0;5962:12:1;;;5955:28;5999:12;;;5992:28;;;21018:7:0;;6036:12:1;;21055:76:0;;;;;;;;;;;;21045:87;;;;;;21038:94;;20963:177;;;;20749:20;20797:24;;;20780:14;20797:24;;;;;;;;;10428:25:1;;;10501:4;10489:17;;10469:18;;;10462:45;;;;10523:18;;;10516:34;;;10566:18;;;10559:34;;;20734:35:0;;-1:-1:-1;20780:14:0;20797:24;;10400:19:1;;20797:24:0;10382:217:1;16161:270:0;-1:-1:-1;;;;;16237:21:0;;16229:67;;;;-1:-1:-1;;;16229:67:0;;13748:2:1;16229: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;;16229:67:0;13720:223:1;16229:67:0;-1:-1:-1;;;;;16309:18:0;;;;;;:9;:18;;;;;:28;;16331:6;;16309:18;:28;;16331:6;;16309:28;:::i;:::-;;;;;;;;16364:6;16348:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;16386:37:0;;9569:25:1;;;16412:1:0;;-1:-1:-1;;;;;16386:37:0;;;-1:-1:-1;;;;;;;;;;;16386:37:0;9557:2:1;9542:18;16386:37:0;9524:76:1;4643:201:0;4767:68;;-1:-1:-1;;;;;6922:15:1;;;4767:68:0;;;6904:34:1;6974:15;;6954:18;;;6947:43;7006:18;;;6999:34;;;4741:95:0;;4760:5;;-1:-1:-1;;;4790:27:0;6839:18:1;;4767:68:0;;;;-1:-1:-1;;4767:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;4767:68:0;-1:-1:-1;;;;;;4767:68:0;;;;;;;;;;4741:18;:95::i;:::-;4643:201;;;;:::o;14315:204::-;14376:4;14401:10;-1:-1:-1;;;;;14401:26:0;;;;;:57;;-1:-1:-1;14431:10:0;-1:-1:-1;;;;;14431:27:0;14453:4;14431:27;;14401:57;14393:66;;;;;;14470:17;14476:2;14480:6;14470:5;:17::i;:::-;-1:-1:-1;14505:6:0;;14315:204;-1:-1:-1;14315:204:0:o;4462:173::-;4568:58;;-1:-1:-1;;;;;7911:32:1;;4568:58:0;;;7893:51:1;7960:18;;;7953:34;;;4542:85:0;;4561:5;;-1:-1:-1;;;4591:23:0;7866:18:1;;4568:58:0;7848:145:1;4542:85:0;4462:173;;;:::o;5202:598::-;5290:27;5298:5;-1:-1:-1;;;;;5290:25:0;;:27::i;:::-;5282:71;;;;-1:-1:-1;;;5282:71:0;;14971:2:1;5282:71:0;;;14953:21:1;15010:2;14990:18;;;14983:30;15049:33;15029:18;;;15022:61;15100:18;;5282:71:0;14943:181:1;5282:71:0;5427:12;5441:23;5476:5;-1:-1:-1;;;;;5468:19:0;5488:4;5468:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5426:67;;;;5512:7;5504:52;;;;-1:-1:-1;;;5504:52:0;;11905:2:1;5504:52:0;;;11887:21:1;;;11924:18;;;11917:30;11983:34;11963:18;;;11956:62;12035:18;;5504:52:0;11877:182:1;5504:52:0;5573:17;;:21;5569:224;;5715:10;5704:30;;;;;;;;;;;;:::i;:::-;5696:85;;;;-1:-1:-1;;;5696:85:0;;14560:2:1;5696: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;;5696:85:0;14532:232:1;4022:374:0;4082:4;4305:20;;4148:66;4345:15;;;;;:42;;-1:-1:-1;4364:23:0;;;4337:51;-1:-1:-1;;4022: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://c4079d4807d436c1a75c940ddc11663aafadb0a4bfdd043c25a36b40570715db
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.