Contract 0x74b23882a30290451a17c44f4f05243b6b58c76d 13

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe7a5fbb7bd2807f86cee40ba37cdf34b9ebe7622d9a0a1d361b8a5b9e8c854ddApprove514820062022-11-26 22:22:5230 mins ago0x7ede49a4de10395003d64677cccb4bfccfffee0b IN  Wrapped Ether0 FTM0.00228800558
0x84afd37112c73c78f98ae482e5d27350d50554fa9d8b96fa9eb7008cdfba2af4Approve514817942022-11-26 22:14:1338 mins ago0x16a60962b20e86db67f882e11285a29cac5881bd IN  Wrapped Ether0 FTM0.006026191575
0x4f83aae5b2b84342e6c77e127e4b28b63098f72b1458e399a4b0be1aee4233feApprove514814142022-11-26 22:00:2652 mins ago0x9eedf2f96b9b2b19be59414f96c02f420fc467ee IN  Wrapped Ether0 FTM0.016793889722
0x47135188e5a63d0b6de2bfb12d55ee6506cd118a21fb7be93ffe2bfef537f540Approve514807652022-11-26 21:34:411 hr 18 mins ago0xed51d70c30acbab4ca261057c4dd94f8942127de IN  Wrapped Ether0 FTM0.00517957
0x06e966663ee1fad6a0f90683dc201288ced1015deefb64e9fcd34c8342672866Approve514804532022-11-26 21:23:071 hr 29 mins ago0x77fe051ec66db6c444386918600116b047b664e5 IN  Wrapped Ether0 FTM0.004585479708
0x9daa3e6e81ac5a0e905bb8c1b8d52bc9da71f19118be34326b53c3bf510610feApprove514803852022-11-26 21:19:441 hr 33 mins ago0x7d6aff9f85ef8802a1492189e8021b085c6b37f7 IN  Wrapped Ether0 FTM0.005229020257
0xe976d57ad9d465e7ac70905ae14f82ccfcdb2a0131d6f84dcc18d4852944970fApprove514801022022-11-26 21:05:531 hr 47 mins ago0xa501d67e2eefc224bf8510693f2f9fde136ea50e IN  Wrapped Ether0 FTM0.004679857078
0x1a4911d7836080c3cf4a85a820fde0aec0b054c5e530c1b14ab9dbc44f392b3aApprove514799282022-11-26 20:57:431 hr 55 mins ago0x98296c5d5ca466d586c83e2afbb9a89743800d8d IN  Wrapped Ether0 FTM0.004018242969
0x5f76a0f877d1133ad2c36de341a1bce86ff2a9241efea8ba195c80747e1909e8Approve514798402022-11-26 20:53:401 hr 59 mins ago0x199be825fa1d5f346f41956da42bd3479055c5a6 IN  Wrapped Ether0 FTM0.00232805105
0xe94c25c699687fa056bc257102324140a32f7ea9c30bf042ecac6fbd92984e4aApprove514775192022-11-26 19:13:263 hrs 39 mins ago0x431ba7545fda74e22ab0941fb64b682c8502f13b IN  Wrapped Ether0 FTM0.000527063493
0xa25c119f8745fc021d74f9ce386092aa0780a8ca7490b6b96facbf35097065e0Approve514773012022-11-26 19:00:383 hrs 52 mins ago0x12ad7f3e12aa192c03a88596ca0e1f9e8950c111 IN  Wrapped Ether0 FTM0.00517957
0xacdf462e15a423e81e4d63bbef1c7dc2b793efe0dde14d06fafd15bb1404e4b2Approve514772902022-11-26 19:00:103 hrs 52 mins ago0x431ba7545fda74e22ab0941fb64b682c8502f13b IN  Wrapped Ether0 FTM0.000530457185
0x595446bcced9072459d112ac3da9dbd13db793cfd8049e1d16091a72166952e3Approve514772622022-11-26 18:58:573 hrs 54 mins ago0x431ba7545fda74e22ab0941fb64b682c8502f13b IN  Wrapped Ether0 FTM0.002286944509
0xd345fa62c61f2cbcbd755de80bef164eb426f3858a925a5f4a8e94fc02f1e809Swapout514770222022-11-26 18:48:044 hrs 4 mins ago0x79939118ef2af99e20310ecc5ccc0e9697d390fc IN  Wrapped Ether0 FTM0.002973590639
0x168f8ffff5776fcb067de4902331ec97f7686dffb726dab17e217873312d857cApprove514769782022-11-26 18:46:104 hrs 6 mins ago0x431ba7545fda74e22ab0941fb64b682c8502f13b IN  Wrapped Ether0 FTM0.002081601021
0x103bb187088a2f88b72c30f8610910646d309033ef3d306de3e6ff019278ef6aApprove514769252022-11-26 18:43:514 hrs 9 mins ago0x431ba7545fda74e22ab0941fb64b682c8502f13b IN  Wrapped Ether0 FTM0.002493505756
0xae0a71b34b5ec12d090e52187758603592b94d2276be965c7212fdfcb3a8bcadSwapout514766552022-11-26 18:32:174 hrs 20 mins ago0x14397a8018be863bc098283fb93375a8ffd79fe2 IN  Wrapped Ether0 FTM0.003141662592
0xf56928437d19a53807f7e2aeced08fd02f2d2f6081ba08982c4074134acbfd25Approve514762672022-11-26 18:18:294 hrs 34 mins ago0x46a9a5ba32b1de75d997cfde90fb7b41bf4cad81 IN  Wrapped Ether0 FTM0.004588725487
0xa2479664992cdb4e303383c06b0ebfcef45eb524c2e68722ad481e1727115dafApprove514759472022-11-26 18:05:044 hrs 47 mins ago0xf9d287ddc3b7e7e0cc153d157b5aa1adaaaef24a IN  Wrapped Ether0 FTM0.022919614921
0x6fbae0fbfbb0bdbe91dbf16a904758ef9427369dcfd07c8dfeac561a602a17b2Approve514757652022-11-26 17:57:304 hrs 55 mins ago0x6b6ca48da27304eeeb1d15d355d948f68b852733 IN  Wrapped Ether0 FTM0.0014853
0x36680da2aaa3228838e211427a97fac40ee950698368bff80707ab79421b14eeApprove514754702022-11-26 17:45:515 hrs 7 mins ago0x16c5d7862f5e42b578c5b86bdf1f3887fdc0f412 IN  Wrapped Ether0 FTM0.004561720413
0x2c2a5d8bea1853ed680012555cf9209bf8bb2a1ee0351e002efb2c1ad57e360bApprove514753052022-11-26 17:38:105 hrs 14 mins ago0x6b6ca48da27304eeeb1d15d355d948f68b852733 IN  Wrapped Ether0 FTM0.0023403
0x720065cc960850d79ad7ebb16ca19141fc4fba1e742e6548784337d6a775b64bApprove514748772022-11-26 17:19:225 hrs 33 mins ago0x7a6a59588b8106045303e1923227a2cefbec2b66 IN  Wrapped Ether0 FTM0.005128260587
0xd9247835fbe3a93ffb42a59f11995a9e9f6d512a7c049a8dfef6d58d0decd387Approve514747632022-11-26 17:15:045 hrs 37 mins ago0x924b569b23935a0bf7a422594c94a046fa0e3491 IN  Wrapped Ether0 FTM0.003455222397
0xbaadf26b7ad702150c92b179ae6362ce7a064435834ec3d02ec2feac653e707eApprove514745862022-11-26 17:08:115 hrs 44 mins ago0xa501d67e2eefc224bf8510693f2f9fde136ea50e IN  Wrapped Ether0 FTM0.00706305
[ Download CSV Export 

OVERVIEW

wETH is "wrapped ETH".

Latest 4 internal transactions
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ETH

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-02-19
*/

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

pragma solidity 0.8.1;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    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 Sets `amount` as the allowance of `spender` over `owner`'s tokens,
     * given `owner`'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;

    /**
     * @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 (WERC10) is an ERC-20 ERC-20 wrapper. You can `deposit` ERC-20 and obtain an WERC10 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ERC-20 from WERC10, which will then burn WERC10 token in your wallet. The amount of WERC10 token in any wallet is always identical to the
/// balance of ERC-20 deposited minus the ERC-20 withdrawn with that specific wallet.
interface IWERC10 is IERC20, IERC2612 {

    /// @dev Sets `value` as allowance of `spender` account over caller account's WERC10 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` WERC10 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 WERC10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WERC10 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");
        }
    }
}

/// @dev Wrapped Ether v10 (WERC10) is an Ether (ETH) ERC-20 wrapper. You can `deposit` ETH and obtain an WERC10 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ETH from WERC10, which will then burn WERC10 token in your wallet. The amount of WERC10 token in any wallet is always identical to the
/// balance of ETH deposited minus the ETH withdrawn with that specific wallet.
contract ETH is IWERC10 {
    using SafeERC20 for IERC20;
    string public name;
    string public symbol;
    uint8  public immutable decimals;

    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 WERC10 token owned by account.
    mapping (address => uint256) public override balanceOf;
    uint256 private _totalSupply;
    
    address private _oldOwner;
    address private _newOwner;
    uint256 private _newOwnerEffectiveTime;
    
    
    modifier onlyOwner() {
        require(msg.sender == owner(), "only owner");
        _;
    }
    
    function owner() public view returns (address) {
        if (block.timestamp >= _newOwnerEffectiveTime) {
            return _newOwner;
        }
        return _oldOwner;
    }
    
    
    function changeDCRMOwner(address newOwner) public onlyOwner returns (bool) {
        require(newOwner != address(0), "new owner is the zero address");
        _oldOwner = owner();
        _newOwner = newOwner;
        _newOwnerEffectiveTime = block.timestamp + 2*24*3600;
        emit LogChangeDCRMOwner(_oldOwner, _newOwner, _newOwnerEffectiveTime);
        return true;
    }

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

    function Swapout(uint256 amount, address bindaddr) public returns (bool) {
        require(bindaddr != address(0), "bind address is the zero address");
        _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 WERC10 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 LogChangeDCRMOwner(address indexed oldOwner, address indexed newOwner, uint indexed effectiveTime);
    event LogSwapin(bytes32 indexed txhash, address indexed account, uint amount);
    event LogSwapout(address indexed account, address indexed bindaddr, uint amount);
    
    constructor(string memory _name, string memory _symbol, uint8 _decimals, address _owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        
        _newOwner = _owner;
        _newOwnerEffectiveTime = block.timestamp;
        
        uint256 chainId;
        assembly {chainId := chainid()}
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)));
    }
    
    /// @dev Returns the total supply of WERC10 token as the ETH held in this contract.
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }
    
    /** @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 WERC10 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 WERC10 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 WERC10 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].
    /// WERC10 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, "WERC10: 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 returns (bool) {
        require(block.timestamp <= deadline, "WERC10: 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, "WERC10: 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 pure 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 pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /// @dev Moves `value` WERC10 token from caller's account to account (`to`).
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WERC10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WERC10 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, "WERC10: transfer amount exceeds balance");

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

    /// @dev Moves `value` WERC10 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 WERC10 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 WERC10 token.
    ///   - `from` account must have approved caller to spend at least `value` of WERC10 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, "WERC10: 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, "WERC10: transfer amount exceeds balance");

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

    /// @dev Moves `value` WERC10 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 WERC10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WERC10 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, "WERC10: transfer amount exceeds balance");

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"address","name":"_owner","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":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeDCRMOwner","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":[{"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":"newOwner","type":"address"}],"name":"changeDCRMOwner","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":"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":[{"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":[],"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"}]

60c06040523480156200001157600080fd5b5060405162003471380380620034718339818101604052810190620000379190620002ce565b83600090805190602001906200004f9291906200017e565b508260019080519060200190620000689291906200017e565b508160ff1660808160ff1660f81b8152505080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260068190555060004690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000f991906200042a565b60405180910390206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012083306040516020016200015695949392919062000443565b6040516020818303038152906040528051906020012060a081815250505050505050620006b9565b8280546200018c90620005aa565b90600052602060002090601f016020900481019282620001b05760008555620001fc565b82601f10620001cb57805160ff1916838001178555620001fc565b82800160010185558215620001fc579182015b82811115620001fb578251825591602001919060010190620001de565b5b5090506200020b91906200020f565b5090565b5b808211156200022a57600081600090555060010162000210565b5090565b6000620002456200023f84620004c9565b620004a0565b9050828152602081018484840111156200025e57600080fd5b6200026b84828562000574565b509392505050565b600081519050620002848162000685565b92915050565b600082601f8301126200029c57600080fd5b8151620002ae8482602086016200022e565b91505092915050565b600081519050620002c8816200069f565b92915050565b60008060008060808587031215620002e557600080fd5b600085015167ffffffffffffffff8111156200030057600080fd5b6200030e878288016200028a565b945050602085015167ffffffffffffffff8111156200032c57600080fd5b6200033a878288016200028a565b93505060406200034d87828801620002b7565b9250506060620003608782880162000273565b91505092959194509250565b62000377816200051f565b82525050565b620003888162000533565b82525050565b600081546200039d81620005aa565b620003a9818662000514565b94506001821660008114620003c75760018114620003d95762000410565b60ff1983168652818601935062000410565b620003e485620004ff565b60005b838110156200040857815481890152600182019150602081019050620003e7565b838801955050505b50505092915050565b62000424816200055d565b82525050565b60006200043882846200038e565b915081905092915050565b600060a0820190506200045a60008301886200037d565b6200046960208301876200037d565b6200047860408301866200037d565b62000487606083018562000419565b6200049660808301846200036c565b9695505050505050565b6000620004ac620004bf565b9050620004ba8282620005e0565b919050565b6000604051905090565b600067ffffffffffffffff821115620004e757620004e662000645565b5b620004f28262000674565b9050602081019050919050565b60008190508160005260206000209050919050565b600081905092915050565b60006200052c826200053d565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200059457808201518184015260208101905062000577565b83811115620005a4576000848401525b50505050565b60006002820490506001821680620005c357607f821691505b60208210811415620005da57620005d962000616565b5b50919050565b620005eb8262000674565b810181811067ffffffffffffffff821117156200060d576200060c62000645565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b62000690816200051f565b81146200069c57600080fd5b50565b620006aa8162000567565b8114620006b657600080fd5b50565b60805160f81c60a051612d88620006e960003960008181610aa60152611b6001526000610a820152612d886000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063628d6cba116100b8578063a9059cbb1161007c578063a9059cbb1461037b578063b524f3a5146103ab578063cae9ca51146103db578063d505accf1461040b578063dd62ed3e14610427578063ec126c771461045757610136565b8063628d6cba146102af57806370a08231146102df5780637ecebe001461030f5780638da5cb5b1461033f57806395d89b411461035d57610136565b806330adf81f116100ff57806330adf81f146101f5578063313ce567146102135780633644e515146102315780634000aea01461024f578063605629d61461027f57610136565b8062bf26f41461013b57806306fdde0314610159578063095ea7b31461017757806318160ddd146101a757806323b872dd146101c5575b600080fd5b610143610487565b6040516101509190612663565b60405180910390f35b6101616104ab565b60405161016e9190612724565b60405180910390f35b610191600480360381019061018c919061220e565b610539565b60405161019e9190612648565b60405180910390f35b6101af61062b565b6040516101bc9190612846565b60405180910390f35b6101df60048036038101906101da9190612121565b610635565b6040516101ec9190612648565b60405180910390f35b6101fd610a5c565b60405161020a9190612663565b60405180910390f35b61021b610a80565b6040516102289190612861565b60405180910390f35b610239610aa4565b6040516102469190612663565b60405180910390f35b6102696004803603810190610264919061224a565b610ac8565b6040516102769190612648565b60405180910390f35b61029960048036038101906102949190612170565b610d67565b6040516102a69190612648565b60405180910390f35b6102c960048036038101906102c4919061232e565b611091565b6040516102d69190612648565b60405180910390f35b6102f960048036038101906102f491906120bc565b61117b565b6040516103069190612846565b60405180910390f35b610329600480360381019061032491906120bc565b611193565b6040516103369190612846565b60405180910390f35b6103476111ab565b60405161035491906125ed565b60405180910390f35b610365611209565b6040516103729190612724565b60405180910390f35b6103956004803603810190610390919061220e565b611297565b6040516103a29190612648565b60405180910390f35b6103c560048036038101906103c091906120bc565b6114a5565b6040516103d29190612648565b60405180910390f35b6103f560048036038101906103f0919061224a565b6116d4565b6040516104029190612648565b60405180910390f35b61042560048036038101906104209190612170565b611856565b005b610441600480360381019061043c91906120e5565b611a5b565b60405161044e9190612846565b60405180910390f35b610471600480360381019061046c91906122df565b611a80565b60405161047e9190612648565b60405180910390f35b7f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b600080546104b8906129df565b80601f01602080910402602001604051908101604052809291908181526020018280546104e4906129df565b80156105315780601f1061050657610100808354040283529160200191610531565b820191906000526020600020905b81548152906001019060200180831161051457829003601f168201915b505050505081565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516106199190612846565b60405180910390a36001905092915050565b6000600354905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158061069e57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6106a757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146108bf576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108bd57828110156107c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bc906127e6565b60405180910390fd5b600083826107d3919061290a565b905080600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108b39190612846565b60405180910390a3505b505b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093d90612826565b60405180910390fd5b8281610952919061290a565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109e491906128b4565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a489190612846565b60405180910390a360019150509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580610b3157503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b610b3a57600080fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890612826565b60405180910390fd5b8481610bcd919061290a565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c5f91906128b4565b925050819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051610cc39190612846565b60405180910390a38573ffffffffffffffffffffffffffffffffffffffff1663a4c0ed36338787876040518563ffffffff1660e01b8152600401610d0a9493929190612608565b602060405180830381600087803b158015610d2457600080fd5b505af1158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c91906122b6565b915050949350505050565b600084421115610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390612766565b60405180910390fd5b60007f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59898989600760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610e2290612a11565b919050558a604051602001610e3c9695949392919061267e565b604051602081830303815290604052805190602001209050610e618982878787611b5b565b80610e755750610e748982878787611c71565b5b610e7e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141580610ee657503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b610eef57600080fd5b6000600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905087811015610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90612826565b60405180910390fd5b8781610f82919061290a565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555087600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461101491906128b4565b925050819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a6040516110789190612846565b60405180910390a3600192505050979650505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f990612786565b60405180910390fd5b61110c3384611d47565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c888856040516111699190612846565b60405180910390a36001905092915050565b60026020528060005260406000206000915090505481565b60076020528060005260406000206000915090505481565b600060065442106111e057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611206565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b90565b60018054611216906129df565b80601f0160208091040260200160405190810160405280929190818152602001828054611242906129df565b801561128f5780601f106112645761010080835404028352916020019161128f565b820191906000526020600020905b81548152906001019060200180831161127257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158061130057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b61130957600080fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790612826565b60405180910390fd5b828161139c919061290a565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461142e91906128b4565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516114929190612846565b60405180910390a3600191505092915050565b60006114af6111ab565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611513906127a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390612746565b60405180910390fd5b6115946111ab565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506202a3004261162491906128b4565b600681905550600654600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe1968d4263a733e2597ef67ea6ad267343bba5f8bf0f99d85190e06b05d824d960405160405180910390a460019050919050565b600083600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040516117b49190612846565b60405180910390a38473ffffffffffffffffffffffffffffffffffffffff1662ba451f338686866040518563ffffffff1660e01b81526004016117fa9493929190612608565b602060405180830381600087803b15801561181457600080fd5b505af1158015611828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184c91906122b6565b9050949350505050565b83421115611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189090612766565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888600760008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061190f90612a11565b91905055896040516020016119299695949392919061267e565b60405160208183030381529060405280519060200120905061194e8882868686611b5b565b8061196257506119618882868686611c71565b5b61196b57600080fd5b85600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92588604051611a499190612846565b60405180910390a35050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000611a8a6111ab565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee906127a6565b60405180910390fd5b611b018383611e90565b8273ffffffffffffffffffffffffffffffffffffffff16847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d6184604051611b489190612846565b60405180910390a3600190509392505050565b6000807f000000000000000000000000000000000000000000000000000000000000000086604051602001611b919291906125b6565b604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051611bce94939291906126df565b6020604051602081039080840390855afa158015611bf0573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611c6457508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b9250505095945050505050565b600080611c7d86611fd9565b9050600060018287878760405160008152602001604052604051611ca494939291906126df565b6020604051602081039080840390855afa158015611cc6573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611d3a57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b9250505095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae906127c6565b60405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e06919061290a565b925050819055508060036000828254611e1f919061290a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e849190612846565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef790612806565b60405180910390fd5b8060036000828254611f1291906128b4565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f6891906128b4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fcd9190612846565b60405180910390a35050565b600081604051602001611fec9190612590565b604051602081830303815290604052805190602001209050919050565b60008135905061201881612cdf565b92915050565b60008151905061202d81612cf6565b92915050565b60008135905061204281612d0d565b92915050565b60008083601f84011261205a57600080fd5b8235905067ffffffffffffffff81111561207357600080fd5b60208301915083600182028301111561208b57600080fd5b9250929050565b6000813590506120a181612d24565b92915050565b6000813590506120b681612d3b565b92915050565b6000602082840312156120ce57600080fd5b60006120dc84828501612009565b91505092915050565b600080604083850312156120f857600080fd5b600061210685828601612009565b925050602061211785828601612009565b9150509250929050565b60008060006060848603121561213657600080fd5b600061214486828701612009565b935050602061215586828701612009565b925050604061216686828701612092565b9150509250925092565b600080600080600080600060e0888a03121561218b57600080fd5b60006121998a828b01612009565b97505060206121aa8a828b01612009565b96505060406121bb8a828b01612092565b95505060606121cc8a828b01612092565b94505060806121dd8a828b016120a7565b93505060a06121ee8a828b01612033565b92505060c06121ff8a828b01612033565b91505092959891949750929550565b6000806040838503121561222157600080fd5b600061222f85828601612009565b925050602061224085828601612092565b9150509250929050565b6000806000806060858703121561226057600080fd5b600061226e87828801612009565b945050602061227f87828801612092565b935050604085013567ffffffffffffffff81111561229c57600080fd5b6122a887828801612048565b925092505092959194509250565b6000602082840312156122c857600080fd5b60006122d68482850161201e565b91505092915050565b6000806000606084860312156122f457600080fd5b600061230286828701612033565b935050602061231386828701612009565b925050604061232486828701612092565b9150509250925092565b6000806040838503121561234157600080fd5b600061234f85828601612092565b925050602061236085828601612009565b9150509250929050565b6123738161293e565b82525050565b61238281612950565b82525050565b6123918161295c565b82525050565b6123a86123a38261295c565b612a5a565b82525050565b60006123ba8385612887565b93506123c783858461299d565b6123d083612ac2565b840190509392505050565b60006123e68261287c565b6123f08185612898565b93506124008185602086016129ac565b61240981612ac2565b840191505092915050565b6000612421601c836128a9565b915061242c82612ad3565b601c82019050919050565b60006124446002836128a9565b915061244f82612afc565b600282019050919050565b6000612467601d83612898565b915061247282612b25565b602082019050919050565b600061248a601683612898565b915061249582612b4e565b602082019050919050565b60006124ad602083612898565b91506124b882612b77565b602082019050919050565b60006124d0600a83612898565b91506124db82612ba0565b602082019050919050565b60006124f3602183612898565b91506124fe82612bc9565b604082019050919050565b6000612516602183612898565b915061252182612c18565b604082019050919050565b6000612539601f83612898565b915061254482612c67565b602082019050919050565b600061255c602783612898565b915061256782612c90565b604082019050919050565b61257b81612986565b82525050565b61258a81612990565b82525050565b600061259b82612414565b91506125a78284612397565b60208201915081905092915050565b60006125c182612437565b91506125cd8285612397565b6020820191506125dd8284612397565b6020820191508190509392505050565b6000602082019050612602600083018461236a565b92915050565b600060608201905061261d600083018761236a565b61262a6020830186612572565b818103604083015261263d8184866123ae565b905095945050505050565b600060208201905061265d6000830184612379565b92915050565b60006020820190506126786000830184612388565b92915050565b600060c0820190506126936000830189612388565b6126a0602083018861236a565b6126ad604083018761236a565b6126ba6060830186612572565b6126c76080830185612572565b6126d460a0830184612572565b979650505050505050565b60006080820190506126f46000830187612388565b6127016020830186612581565b61270e6040830185612388565b61271b6060830184612388565b95945050505050565b6000602082019050818103600083015261273e81846123db565b905092915050565b6000602082019050818103600083015261275f8161245a565b9050919050565b6000602082019050818103600083015261277f8161247d565b9050919050565b6000602082019050818103600083015261279f816124a0565b9050919050565b600060208201905081810360008301526127bf816124c3565b9050919050565b600060208201905081810360008301526127df816124e6565b9050919050565b600060208201905081810360008301526127ff81612509565b9050919050565b6000602082019050818103600083015261281f8161252c565b9050919050565b6000602082019050818103600083015261283f8161254f565b9050919050565b600060208201905061285b6000830184612572565b92915050565b60006020820190506128766000830184612581565b92915050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006128bf82612986565b91506128ca83612986565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128ff576128fe612a64565b5b828201905092915050565b600061291582612986565b915061292083612986565b92508282101561293357612932612a64565b5b828203905092915050565b600061294982612966565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156129ca5780820151818401526020810190506129af565b838111156129d9576000848401525b50505050565b600060028204905060018216806129f757607f821691505b60208210811415612a0b57612a0a612a93565b5b50919050565b6000612a1c82612986565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a4f57612a4e612a64565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f6e6577206f776e657220697320746865207a65726f2061646472657373000000600082015250565b7f5745524331303a2045787069726564207065726d697400000000000000000000600082015250565b7f62696e64206164647265737320697320746865207a65726f2061646472657373600082015250565b7f6f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5745524331303a2072657175657374206578636565647320616c6c6f77616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b7f5745524331303a207472616e7366657220616d6f756e7420657863656564732060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b612ce88161293e565b8114612cf357600080fd5b50565b612cff81612950565b8114612d0a57600080fd5b50565b612d168161295c565b8114612d2157600080fd5b50565b612d2d81612986565b8114612d3857600080fd5b50565b612d4481612990565b8114612d4f57600080fd5b5056fea264697066735822122016fb8ee802446d7d58ac13b673724a1c0b1dbcf47da480579ef04e57773d2ee864736f6c63430008010033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000c564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe0000000000000000000000000000000000000000000000000000000000000008457468657265756d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034554480000000000000000000000000000000000000000000000000000000000

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000c564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe0000000000000000000000000000000000000000000000000000000000000008457468657265756d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034554480000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Ethereum
Arg [1] : _symbol (string): ETH
Arg [2] : _decimals (uint8): 18
Arg [3] : _owner (address): 0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 000000000000000000000000c564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 457468657265756d000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4554480000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

8675:13270:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8976:136;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8739:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13742:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12272:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19888:927;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8832:137;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8791:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9119:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21419:523;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16316:929;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10373:273;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9232:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10918:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9563:182;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8764:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18593:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9763:384;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14420:364;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15601:707;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11131:75;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10155:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8976:136;9020:92;8976:136;:::o;8739:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13742:265::-;13818:4;13918:5;13885:9;:21;13895:10;13885:21;;;;;;;;;;;;;;;:30;13907:7;13885:30;;;;;;;;;;;;;;;:38;;;;13960:7;13939:36;;13948:10;13939:36;;;13969:5;13939:36;;;;;;:::i;:::-;;;;;;;;13995:4;13988:11;;13742:265;;;;:::o;12272:102::-;12327:7;12354:12;;12347:19;;12272:102;:::o;19888:927::-;19978:4;20017:1;20003:16;;:2;:16;;;;:39;;;;20037:4;20023:19;;:2;:19;;;;20003:39;19995:48;;;;;;20066:10;20058:18;;:4;:18;;;20054:469;;20154:15;20172:9;:15;20182:4;20172:15;;;;;;;;;;;;;;;:27;20188:10;20172:27;;;;;;;;;;;;;;;;20154:45;;20229:17;20218:7;:28;20214:298;;20286:5;20275:7;:16;;20267:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20348:15;20376:5;20366:7;:15;;;;:::i;:::-;20348:33;;20430:7;20400:9;:15;20410:4;20400:15;;;;;;;;;;;;;;;:27;20416:10;20400:27;;;;;;;;;;;;;;;:37;;;;20476:10;20461:35;;20470:4;20461:35;;;20488:7;20461:35;;;;;;:::i;:::-;;;;;;;;20214:298;;20054:469;;20543:15;20561:9;:15;20571:4;20561:15;;;;;;;;;;;;;;;;20543:33;;20606:5;20595:7;:16;;20587:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20696:5;20686:7;:15;;;;:::i;:::-;20668:9;:15;20678:4;20668:15;;;;;;;;;;;;;;;:33;;;;20729:5;20712:9;:13;20722:2;20712:13;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;20765:2;20750:25;;20759:4;20750:25;;;20769:5;20750:25;;;;;;:::i;:::-;;;;;;;;20803:4;20796:11;;;19888:927;;;;;:::o;8832:137::-;8874:95;8832:137;:::o;8791:32::-;;;:::o;9119:41::-;;;:::o;21419:523::-;21516:4;21555:1;21541:16;;:2;:16;;;;:39;;;;21575:4;21561:19;;:2;:19;;;;21541:39;21533:48;;;;;;21602:15;21620:9;:21;21630:10;21620:21;;;;;;;;;;;;;;;;21602:39;;21671:5;21660:7;:16;;21652:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21767:5;21757:7;:15;;;;:::i;:::-;21733:9;:21;21743:10;21733:21;;;;;;;;;;;;;;;:39;;;;21800:5;21783:9;:13;21793:2;21783:13;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;21842:2;21821:31;;21830:10;21821:31;;;21846:5;21821:31;;;;;;:::i;:::-;;;;;;;;21890:2;21872:37;;;21910:10;21922:5;21929:4;;21872:62;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21865:69;;;21419:523;;;;;;:::o;16316:929::-;16454:4;16498:8;16479:15;:27;;16471:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;16546:18;9020:92;16656:6;16681:2;16702:5;16726:6;:14;16733:6;16726:14;;;;;;;;;;;;;;;;:16;;;;;;;;;:::i;:::-;;;;;16761:8;16591:179;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16567:204;;;;;;16546:225;;16792:41;16805:6;16813:10;16825:1;16828;16831;16792:12;:41::i;:::-;:92;;;;16837:47;16856:6;16864:10;16876:1;16879;16882;16837:18;:47::i;:::-;16792:92;16784:101;;;;;;16920:1;16906:16;;:2;:16;;;;:39;;;;16940:4;16926:19;;:2;:19;;;;16906:39;16898:48;;;;;;16967:15;16985:9;:17;16995:6;16985:17;;;;;;;;;;;;;;;;16967:35;;17032:5;17021:7;:16;;17013:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17124:5;17114:7;:15;;;;:::i;:::-;17094:9;:17;17104:6;17094:17;;;;;;;;;;;;;;;:35;;;;17157:5;17140:9;:13;17150:2;17140:13;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;17195:2;17178:27;;17187:6;17178:27;;;17199:5;17178:27;;;;;;:::i;:::-;;;;;;;;17233:4;17226:11;;;;16316:929;;;;;;;;;:::o;10373:273::-;10440:4;10485:1;10465:22;;:8;:22;;;;10457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10535:25;10541:10;10553:6;10535:5;:25::i;:::-;10599:8;10576:40;;10587:10;10576:40;;;10609:6;10576:40;;;;;;:::i;:::-;;;;;;;;10634:4;10627:11;;10373:273;;;;:::o;9232:54::-;;;;;;;;;;;;;;;;;:::o;10918:51::-;;;;;;;;;;;;;;;;;:::o;9563:182::-;9601:7;9644:22;;9625:15;:41;9621:90;;9690:9;;;;;;;;;;;9683:16;;;;9621:90;9728:9;;;;;;;;;;;9721:16;;9563:182;;:::o;8764:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18593:438::-;18665:4;18704:1;18690:16;;:2;:16;;;;:39;;;;18724:4;18710:19;;:2;:19;;;;18690:39;18682:48;;;;;;18741:15;18759:9;:21;18769:10;18759:21;;;;;;;;;;;;;;;;18741:39;;18810:5;18799:7;:16;;18791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18906:5;18896:7;:15;;;;:::i;:::-;18872:9;:21;18882:10;18872:21;;;;;;;;;;;;;;;:39;;;;18939:5;18922:9;:13;18932:2;18922:13;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;18981:2;18960:31;;18969:10;18960:31;;;18985:5;18960:31;;;;;;:::i;:::-;;;;;;;;19019:4;19012:11;;;18593:438;;;;:::o;9763:384::-;9832:4;9509:7;:5;:7::i;:::-;9495:21;;:10;:21;;;9487:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;9877:1:::1;9857:22;;:8;:22;;;;9849:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9936:7;:5;:7::i;:::-;9924:9;;:19;;;;;;;;;;;;;;;;;;9966:8;9954:9;;:20;;;;;;;;;;;;;;;;;;10028:9;10010:15;:27;;;;:::i;:::-;9985:22;:52;;;;10094:22;;10083:9;;;;;;;;;;;10053:64;;10072:9;;;;;;;;;;;10053:64;;;;;;;;;;;;10135:4;10128:11;;9763:384:::0;;;:::o;14420:364::-;14524:4;14624:5;14591:9;:21;14601:10;14591:21;;;;;;;;;;;;;;;:30;14613:7;14591:30;;;;;;;;;;;;;;;:38;;;;14666:7;14645:36;;14654:10;14645:36;;;14675:5;14645:36;;;;;;:::i;:::-;;;;;;;;14727:7;14709:42;;;14752:10;14764:5;14771:4;;14709:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14702:74;;14420:364;;;;;;:::o;15601:707::-;15770:8;15751:15;:27;;15743:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15818:18;8874:95;15926:6;15951:7;15977:5;16001:6;:14;16008:6;16001:14;;;;;;;;;;;;;;;;:16;;;;;;;;;:::i;:::-;;;;;16036:8;15863:182;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15839:207;;;;;;15818:228;;16067:41;16080:6;16088:10;16100:1;16103;16106;16067:12;:41::i;:::-;:92;;;;16112:47;16131:6;16139:10;16151:1;16154;16157;16112:18;:47::i;:::-;16067:92;16059:101;;;;;;16247:5;16218:9;:17;16228:6;16218:17;;;;;;;;;;;;;;;:26;16236:7;16218:26;;;;;;;;;;;;;;;:34;;;;16285:7;16268:32;;16277:6;16268:32;;;16294:5;16268:32;;;;;;:::i;:::-;;;;;;;;15601:707;;;;;;;;:::o;11131:75::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10155:210::-;10246:4;9509:7;:5;:7::i;:::-;9495:21;;:10;:21;;;9487:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;10263:22:::1;10269:7;10278:6;10263:5;:22::i;:::-;10319:7;10301:34;;10311:6;10301:34;10328:6;10301:34;;;;;;:::i;:::-;;;;;;;;10353:4;10346:11;;10155:210:::0;;;;;:::o;17257:399::-;17369:4;17386:12;17489:16;17524:10;17425:110;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17401:135;;;;;;17386:150;;17547:14;17564:24;17574:4;17580:1;17583;17586;17564:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17547:41;;17625:1;17607:20;;:6;:20;;;;:40;;;;;17641:6;17631:16;;:6;:16;;;17607:40;17599:49;;;;17257:399;;;;;;;:::o;17668:290::-;17786:4;17803:12;17818:20;17827:10;17818:8;:20::i;:::-;17803:35;;17849:14;17866:24;17876:4;17882:1;17885;17888;17866:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17849:41;;17927:1;17909:20;;:6;:20;;;;:40;;;;;17943:6;17933:16;;:6;:16;;;17909:40;17901:49;;;;17668:290;;;;;;;:::o;13259:270::-;13354:1;13335:21;;:7;:21;;;;13327:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13429:6;13407:9;:18;13417:7;13407:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13462:6;13446:12;;:22;;;;;;;:::i;:::-;;;;;;;;13510:1;13484:37;;13493:7;13484:37;;;13514:6;13484:37;;;;;;:::i;:::-;;;;;;;;13259:270;;:::o;12659:268::-;12754:1;12735:21;;:7;:21;;;;12727:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12821:6;12805:12;;:22;;;;;;;:::i;:::-;;;;;;;;12860:6;12838:9;:18;12848:7;12838:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12903:7;12882:37;;12899:1;12882:37;;;12912:6;12882:37;;;;;;:::i;:::-;;;;;;;;12659:268;;:::o;18036:159::-;18091:7;18181:4;18128:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;18118:69;;;;;;18111:76;;18036:159;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:139::-;;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;347:87;;;;:::o;453:351::-;;;570:3;563:4;555:6;551:17;547:27;537:2;;588:1;585;578:12;537:2;624:6;611:20;601:30;;654:18;646:6;643:30;640:2;;;686:1;683;676:12;640:2;723:4;715:6;711:17;699:29;;777:3;769:4;761:6;757:17;747:8;743:32;740:41;737:2;;;794:1;791;784:12;737:2;527:277;;;;;:::o;810:139::-;;894:6;881:20;872:29;;910:33;937:5;910:33;:::i;:::-;862:87;;;;:::o;955:135::-;;1037:6;1024:20;1015:29;;1053:31;1078:5;1053:31;:::i;:::-;1005:85;;;;:::o;1096:262::-;;1204:2;1192:9;1183:7;1179:23;1175:32;1172:2;;;1220:1;1217;1210:12;1172:2;1263:1;1288:53;1333:7;1324:6;1313:9;1309:22;1288:53;:::i;:::-;1278:63;;1234:117;1162:196;;;;:::o;1364:407::-;;;1489:2;1477:9;1468:7;1464:23;1460:32;1457:2;;;1505:1;1502;1495:12;1457:2;1548:1;1573:53;1618:7;1609:6;1598:9;1594:22;1573:53;:::i;:::-;1563:63;;1519:117;1675:2;1701:53;1746:7;1737:6;1726:9;1722:22;1701:53;:::i;:::-;1691:63;;1646:118;1447:324;;;;;:::o;1777:552::-;;;;1919:2;1907:9;1898:7;1894:23;1890:32;1887:2;;;1935:1;1932;1925:12;1887:2;1978:1;2003:53;2048:7;2039:6;2028:9;2024:22;2003:53;:::i;:::-;1993:63;;1949:117;2105:2;2131:53;2176:7;2167:6;2156:9;2152:22;2131:53;:::i;:::-;2121:63;;2076:118;2233:2;2259:53;2304:7;2295:6;2284:9;2280:22;2259:53;:::i;:::-;2249:63;;2204:118;1877:452;;;;;:::o;2335:1132::-;;;;;;;;2543:3;2531:9;2522:7;2518:23;2514:33;2511:2;;;2560:1;2557;2550:12;2511:2;2603:1;2628:53;2673:7;2664:6;2653:9;2649:22;2628:53;:::i;:::-;2618:63;;2574:117;2730:2;2756:53;2801:7;2792:6;2781:9;2777:22;2756:53;:::i;:::-;2746:63;;2701:118;2858:2;2884:53;2929:7;2920:6;2909:9;2905:22;2884:53;:::i;:::-;2874:63;;2829:118;2986:2;3012:53;3057:7;3048:6;3037:9;3033:22;3012:53;:::i;:::-;3002:63;;2957:118;3114:3;3141:51;3184:7;3175:6;3164:9;3160:22;3141:51;:::i;:::-;3131:61;;3085:117;3241:3;3268:53;3313:7;3304:6;3293:9;3289:22;3268:53;:::i;:::-;3258:63;;3212:119;3370:3;3397:53;3442:7;3433:6;3422:9;3418:22;3397:53;:::i;:::-;3387:63;;3341:119;2501:966;;;;;;;;;;:::o;3473:407::-;;;3598:2;3586:9;3577:7;3573:23;3569:32;3566:2;;;3614:1;3611;3604:12;3566:2;3657:1;3682:53;3727:7;3718:6;3707:9;3703:22;3682:53;:::i;:::-;3672:63;;3628:117;3784:2;3810:53;3855:7;3846:6;3835:9;3831:22;3810:53;:::i;:::-;3800:63;;3755:118;3556:324;;;;;:::o;3886:683::-;;;;;4047:2;4035:9;4026:7;4022:23;4018:32;4015:2;;;4063:1;4060;4053:12;4015:2;4106:1;4131:53;4176:7;4167:6;4156:9;4152:22;4131:53;:::i;:::-;4121:63;;4077:117;4233:2;4259:53;4304:7;4295:6;4284:9;4280:22;4259:53;:::i;:::-;4249:63;;4204:118;4389:2;4378:9;4374:18;4361:32;4420:18;4412:6;4409:30;4406:2;;;4452:1;4449;4442:12;4406:2;4488:64;4544:7;4535:6;4524:9;4520:22;4488:64;:::i;:::-;4470:82;;;;4332:230;4005:564;;;;;;;:::o;4575:278::-;;4691:2;4679:9;4670:7;4666:23;4662:32;4659:2;;;4707:1;4704;4697:12;4659:2;4750:1;4775:61;4828:7;4819:6;4808:9;4804:22;4775:61;:::i;:::-;4765:71;;4721:125;4649:204;;;;:::o;4859:552::-;;;;5001:2;4989:9;4980:7;4976:23;4972:32;4969:2;;;5017:1;5014;5007:12;4969:2;5060:1;5085:53;5130:7;5121:6;5110:9;5106:22;5085:53;:::i;:::-;5075:63;;5031:117;5187:2;5213:53;5258:7;5249:6;5238:9;5234:22;5213:53;:::i;:::-;5203:63;;5158:118;5315:2;5341:53;5386:7;5377:6;5366:9;5362:22;5341:53;:::i;:::-;5331:63;;5286:118;4959:452;;;;;:::o;5417:407::-;;;5542:2;5530:9;5521:7;5517:23;5513:32;5510:2;;;5558:1;5555;5548:12;5510:2;5601:1;5626:53;5671:7;5662:6;5651:9;5647:22;5626:53;:::i;:::-;5616:63;;5572:117;5728:2;5754:53;5799:7;5790:6;5779:9;5775:22;5754:53;:::i;:::-;5744:63;;5699:118;5500:324;;;;;:::o;5830:118::-;5917:24;5935:5;5917:24;:::i;:::-;5912:3;5905:37;5895:53;;:::o;5954:109::-;6035:21;6050:5;6035:21;:::i;:::-;6030:3;6023:34;6013:50;;:::o;6069:118::-;6156:24;6174:5;6156:24;:::i;:::-;6151:3;6144:37;6134:53;;:::o;6193:157::-;6298:45;6318:24;6336:5;6318:24;:::i;:::-;6298:45;:::i;:::-;6293:3;6286:58;6276:74;;:::o;6378:301::-;;6495:70;6558:6;6553:3;6495:70;:::i;:::-;6488:77;;6575:43;6611:6;6606:3;6599:5;6575:43;:::i;:::-;6643:29;6665:6;6643:29;:::i;:::-;6638:3;6634:39;6627:46;;6478:201;;;;;:::o;6685:364::-;;6801:39;6834:5;6801:39;:::i;:::-;6856:71;6920:6;6915:3;6856:71;:::i;:::-;6849:78;;6936:52;6981:6;6976:3;6969:4;6962:5;6958:16;6936:52;:::i;:::-;7013:29;7035:6;7013:29;:::i;:::-;7008:3;7004:39;6997:46;;6777:272;;;;;:::o;7055:402::-;;7236:85;7318:2;7313:3;7236:85;:::i;:::-;7229:92;;7330:93;7419:3;7330:93;:::i;:::-;7448:2;7443:3;7439:12;7432:19;;7219:238;;;:::o;7463:400::-;;7644:84;7726:1;7721:3;7644:84;:::i;:::-;7637:91;;7737:93;7826:3;7737:93;:::i;:::-;7855:1;7850:3;7846:11;7839:18;;7627:236;;;:::o;7869:366::-;;8032:67;8096:2;8091:3;8032:67;:::i;:::-;8025:74;;8108:93;8197:3;8108:93;:::i;:::-;8226:2;8221:3;8217:12;8210:19;;8015:220;;;:::o;8241:366::-;;8404:67;8468:2;8463:3;8404:67;:::i;:::-;8397:74;;8480:93;8569:3;8480:93;:::i;:::-;8598:2;8593:3;8589:12;8582:19;;8387:220;;;:::o;8613:366::-;;8776:67;8840:2;8835:3;8776:67;:::i;:::-;8769:74;;8852:93;8941:3;8852:93;:::i;:::-;8970:2;8965:3;8961:12;8954:19;;8759:220;;;:::o;8985:366::-;;9148:67;9212:2;9207:3;9148:67;:::i;:::-;9141:74;;9224:93;9313:3;9224:93;:::i;:::-;9342:2;9337:3;9333:12;9326:19;;9131:220;;;:::o;9357:366::-;;9520:67;9584:2;9579:3;9520:67;:::i;:::-;9513:74;;9596:93;9685:3;9596:93;:::i;:::-;9714:2;9709:3;9705:12;9698:19;;9503:220;;;:::o;9729:366::-;;9892:67;9956:2;9951:3;9892:67;:::i;:::-;9885:74;;9968:93;10057:3;9968:93;:::i;:::-;10086:2;10081:3;10077:12;10070:19;;9875:220;;;:::o;10101:366::-;;10264:67;10328:2;10323:3;10264:67;:::i;:::-;10257:74;;10340:93;10429:3;10340:93;:::i;:::-;10458:2;10453:3;10449:12;10442:19;;10247:220;;;:::o;10473:366::-;;10636:67;10700:2;10695:3;10636:67;:::i;:::-;10629:74;;10712:93;10801:3;10712:93;:::i;:::-;10830:2;10825:3;10821:12;10814:19;;10619:220;;;:::o;10845:118::-;10932:24;10950:5;10932:24;:::i;:::-;10927:3;10920:37;10910:53;;:::o;10969:112::-;11052:22;11068:5;11052:22;:::i;:::-;11047:3;11040:35;11030:51;;:::o;11087:522::-;;11322:148;11466:3;11322:148;:::i;:::-;11315:155;;11480:75;11551:3;11542:6;11480:75;:::i;:::-;11580:2;11575:3;11571:12;11564:19;;11600:3;11593:10;;11304:305;;;;:::o;11615:663::-;;11878:148;12022:3;11878:148;:::i;:::-;11871:155;;12036:75;12107:3;12098:6;12036:75;:::i;:::-;12136:2;12131:3;12127:12;12120:19;;12149:75;12220:3;12211:6;12149:75;:::i;:::-;12249:2;12244:3;12240:12;12233:19;;12269:3;12262:10;;11860:418;;;;;:::o;12284:222::-;;12415:2;12404:9;12400:18;12392:26;;12428:71;12496:1;12485:9;12481:17;12472:6;12428:71;:::i;:::-;12382:124;;;;:::o;12512:549::-;;12727:2;12716:9;12712:18;12704:26;;12740:71;12808:1;12797:9;12793:17;12784:6;12740:71;:::i;:::-;12821:72;12889:2;12878:9;12874:18;12865:6;12821:72;:::i;:::-;12940:9;12934:4;12930:20;12925:2;12914:9;12910:18;12903:48;12968:86;13049:4;13040:6;13032;12968:86;:::i;:::-;12960:94;;12694:367;;;;;;;:::o;13067:210::-;;13192:2;13181:9;13177:18;13169:26;;13205:65;13267:1;13256:9;13252:17;13243:6;13205:65;:::i;:::-;13159:118;;;;:::o;13283:222::-;;13414:2;13403:9;13399:18;13391:26;;13427:71;13495:1;13484:9;13480:17;13471:6;13427:71;:::i;:::-;13381:124;;;;:::o;13511:775::-;;13782:3;13771:9;13767:19;13759:27;;13796:71;13864:1;13853:9;13849:17;13840:6;13796:71;:::i;:::-;13877:72;13945:2;13934:9;13930:18;13921:6;13877:72;:::i;:::-;13959;14027:2;14016:9;14012:18;14003:6;13959:72;:::i;:::-;14041;14109:2;14098:9;14094:18;14085:6;14041:72;:::i;:::-;14123:73;14191:3;14180:9;14176:19;14167:6;14123:73;:::i;:::-;14206;14274:3;14263:9;14259:19;14250:6;14206:73;:::i;:::-;13749:537;;;;;;;;;:::o;14292:545::-;;14503:3;14492:9;14488:19;14480:27;;14517:71;14585:1;14574:9;14570:17;14561:6;14517:71;:::i;:::-;14598:68;14662:2;14651:9;14647:18;14638:6;14598:68;:::i;:::-;14676:72;14744:2;14733:9;14729:18;14720:6;14676:72;:::i;:::-;14758;14826:2;14815:9;14811:18;14802:6;14758:72;:::i;:::-;14470:367;;;;;;;:::o;14843:313::-;;14994:2;14983:9;14979:18;14971:26;;15043:9;15037:4;15033:20;15029:1;15018:9;15014:17;15007:47;15071:78;15144:4;15135:6;15071:78;:::i;:::-;15063:86;;14961:195;;;;:::o;15162:419::-;;15366:2;15355:9;15351:18;15343:26;;15415:9;15409:4;15405:20;15401:1;15390:9;15386:17;15379:47;15443:131;15569:4;15443:131;:::i;:::-;15435:139;;15333:248;;;:::o;15587:419::-;;15791:2;15780:9;15776:18;15768:26;;15840:9;15834:4;15830:20;15826:1;15815:9;15811:17;15804:47;15868:131;15994:4;15868:131;:::i;:::-;15860:139;;15758:248;;;:::o;16012:419::-;;16216:2;16205:9;16201:18;16193:26;;16265:9;16259:4;16255:20;16251:1;16240:9;16236:17;16229:47;16293:131;16419:4;16293:131;:::i;:::-;16285:139;;16183:248;;;:::o;16437:419::-;;16641:2;16630:9;16626:18;16618:26;;16690:9;16684:4;16680:20;16676:1;16665:9;16661:17;16654:47;16718:131;16844:4;16718:131;:::i;:::-;16710:139;;16608:248;;;:::o;16862:419::-;;17066:2;17055:9;17051:18;17043:26;;17115:9;17109:4;17105:20;17101:1;17090:9;17086:17;17079:47;17143:131;17269:4;17143:131;:::i;:::-;17135:139;;17033:248;;;:::o;17287:419::-;;17491:2;17480:9;17476:18;17468:26;;17540:9;17534:4;17530:20;17526:1;17515:9;17511:17;17504:47;17568:131;17694:4;17568:131;:::i;:::-;17560:139;;17458:248;;;:::o;17712:419::-;;17916:2;17905:9;17901:18;17893:26;;17965:9;17959:4;17955:20;17951:1;17940:9;17936:17;17929:47;17993:131;18119:4;17993:131;:::i;:::-;17985:139;;17883:248;;;:::o;18137:419::-;;18341:2;18330:9;18326:18;18318:26;;18390:9;18384:4;18380:20;18376:1;18365:9;18361:17;18354:47;18418:131;18544:4;18418:131;:::i;:::-;18410:139;;18308:248;;;:::o;18562:222::-;;18693:2;18682:9;18678:18;18670:26;;18706:71;18774:1;18763:9;18759:17;18750:6;18706:71;:::i;:::-;18660:124;;;;:::o;18790:214::-;;18917:2;18906:9;18902:18;18894:26;;18930:67;18994:1;18983:9;18979:17;18970:6;18930:67;:::i;:::-;18884:120;;;;:::o;19010:99::-;;19096:5;19090:12;19080:22;;19069:40;;;:::o;19115:168::-;;19232:6;19227:3;19220:19;19272:4;19267:3;19263:14;19248:29;;19210:73;;;;:::o;19289:169::-;;19407:6;19402:3;19395:19;19447:4;19442:3;19438:14;19423:29;;19385:73;;;;:::o;19464:148::-;;19603:3;19588:18;;19578:34;;;;:::o;19618:305::-;;19677:20;19695:1;19677:20;:::i;:::-;19672:25;;19711:20;19729:1;19711:20;:::i;:::-;19706:25;;19865:1;19797:66;19793:74;19790:1;19787:81;19784:2;;;19871:18;;:::i;:::-;19784:2;19915:1;19912;19908:9;19901:16;;19662:261;;;;:::o;19929:191::-;;19989:20;20007:1;19989:20;:::i;:::-;19984:25;;20023:20;20041:1;20023:20;:::i;:::-;20018:25;;20062:1;20059;20056:8;20053:2;;;20067:18;;:::i;:::-;20053:2;20112:1;20109;20105:9;20097:17;;19974:146;;;;:::o;20126:96::-;;20192:24;20210:5;20192:24;:::i;:::-;20181:35;;20171:51;;;:::o;20228:90::-;;20305:5;20298:13;20291:21;20280:32;;20270:48;;;:::o;20324:77::-;;20390:5;20379:16;;20369:32;;;:::o;20407:126::-;;20484:42;20477:5;20473:54;20462:65;;20452:81;;;:::o;20539:77::-;;20605:5;20594:16;;20584:32;;;:::o;20622:86::-;;20697:4;20690:5;20686:16;20675:27;;20665:43;;;:::o;20714:154::-;20798:6;20793:3;20788;20775:30;20860:1;20851:6;20846:3;20842:16;20835:27;20765:103;;;:::o;20874:307::-;20942:1;20952:113;20966:6;20963:1;20960:13;20952:113;;;21051:1;21046:3;21042:11;21036:18;21032:1;21027:3;21023:11;21016:39;20988:2;20985:1;20981:10;20976:15;;20952:113;;;21083:6;21080:1;21077:13;21074:2;;;21163:1;21154:6;21149:3;21145:16;21138:27;21074:2;20923:258;;;;:::o;21187:320::-;;21268:1;21262:4;21258:12;21248:22;;21315:1;21309:4;21305:12;21336:18;21326:2;;21392:4;21384:6;21380:17;21370:27;;21326:2;21454;21446:6;21443:14;21423:18;21420:38;21417:2;;;21473:18;;:::i;:::-;21417:2;21238:269;;;;:::o;21513:233::-;;21575:24;21593:5;21575:24;:::i;:::-;21566:33;;21621:66;21614:5;21611:77;21608:2;;;21691:18;;:::i;:::-;21608:2;21738:1;21731:5;21727:13;21720:20;;21556:190;;;:::o;21752:79::-;;21820:5;21809:16;;21799:32;;;:::o;21837:180::-;21885:77;21882:1;21875:88;21982:4;21979:1;21972:15;22006:4;22003:1;21996:15;22023:180;22071:77;22068:1;22061:88;22168:4;22165:1;22158:15;22192:4;22189:1;22182:15;22209:102;;22301:2;22297:7;22292:2;22285:5;22281:14;22277:28;22267:38;;22257:54;;;:::o;22317:214::-;22457:66;22453:1;22445:6;22441:14;22434:90;22423:108;:::o;22537:214::-;22677:66;22673:1;22665:6;22661:14;22654:90;22643:108;:::o;22757:179::-;22897:31;22893:1;22885:6;22881:14;22874:55;22863:73;:::o;22942:172::-;23082:24;23078:1;23070:6;23066:14;23059:48;23048:66;:::o;23120:182::-;23260:34;23256:1;23248:6;23244:14;23237:58;23226:76;:::o;23308:160::-;23448:12;23444:1;23436:6;23432:14;23425:36;23414:54;:::o;23474:220::-;23614:34;23610:1;23602:6;23598:14;23591:58;23683:3;23678:2;23670:6;23666:15;23659:28;23580:114;:::o;23700:220::-;23840:34;23836:1;23828:6;23824:14;23817:58;23909:3;23904:2;23896:6;23892:15;23885:28;23806:114;:::o;23926:181::-;24066:33;24062:1;24054:6;24050:14;24043:57;24032:75;:::o;24113:226::-;24253:34;24249:1;24241:6;24237:14;24230:58;24322:9;24317:2;24309:6;24305:15;24298:34;24219:120;:::o;24345:122::-;24418:24;24436:5;24418:24;:::i;:::-;24411:5;24408:35;24398:2;;24457:1;24454;24447:12;24398:2;24388:79;:::o;24473:116::-;24543:21;24558:5;24543:21;:::i;:::-;24536:5;24533:32;24523:2;;24579:1;24576;24569:12;24523:2;24513:76;:::o;24595:122::-;24668:24;24686:5;24668:24;:::i;:::-;24661:5;24658:35;24648:2;;24707:1;24704;24697:12;24648:2;24638:79;:::o;24723:122::-;24796:24;24814:5;24796:24;:::i;:::-;24789:5;24786:35;24776:2;;24835:1;24832;24825:12;24776:2;24766:79;:::o;24851:118::-;24922:22;24938:5;24922:22;:::i;:::-;24915:5;24912:33;24902:2;;24959:1;24956;24949:12;24902:2;24892:77;:::o

Swarm Source

ipfs://16fb8ee802446d7d58ac13b673724a1c0b1dbcf47da480579ef04e57773d2ee8
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.