ETH Price: $3,486.87 (+2.30%)

Token

CybeeDAO (CBD)
 

Overview

Max Total Supply

7,010,003,743.220000000022 CBD

Holders

719

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
34,285.68 CBD

Value
$0.00
0x0077d0bb49fb837a074685086b5411bc398a57c2
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CybeeDAO

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

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

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature)
        internal
        pure
        returns (address, RecoverError)
    {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature)
        internal
        pure
        returns (address)
    {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(
                vs,
                0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
            )
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (
            uint256(s) >
            0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0
        ) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash)
        internal
        pure
        returns (bytes32)
    {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return
            keccak256(
                abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
            );
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from `s`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes memory s)
        internal
        pure
        returns (bytes32)
    {
        return
            keccak256(
                abi.encodePacked(
                    "\x19Ethereum Signed Message:\n",
                    Strings.toString(s.length),
                    s
                )
            );
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash)
        internal
        pure
        returns (bytes32)
    {
        return
            keccak256(
                abi.encodePacked("\x19\x01", domainSeparator, structHash)
            );
    }
}

abstract contract EIP712 {
    /* solhint-disable var-name-mixedcase */
    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to
    // invalidate the cached domain separator if the chain id changes.
    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
    uint256 private immutable _CACHED_CHAIN_ID;
    address private immutable _CACHED_THIS;

    bytes32 private immutable _HASHED_NAME;
    bytes32 private immutable _HASHED_VERSION;
    bytes32 private immutable _TYPE_HASH;

    /* solhint-enable var-name-mixedcase */

    /**
     * @dev Initializes the domain separator and parameter caches.
     *
     * The meaning of `name` and `version` is specified in
     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:
     *
     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.
     * - `version`: the current major version of the signing domain.
     *
     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart
     * contract upgrade].
     */
    constructor(string memory name, string memory version) {
        bytes32 hashedName = keccak256(bytes(name));
        bytes32 hashedVersion = keccak256(bytes(version));
        bytes32 typeHash = keccak256(
            "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
        );
        _HASHED_NAME = hashedName;
        _HASHED_VERSION = hashedVersion;
        _CACHED_CHAIN_ID = block.chainid;
        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(
            typeHash,
            hashedName,
            hashedVersion
        );
        _CACHED_THIS = address(this);
        _TYPE_HASH = typeHash;
    }

    /**
     * @dev Returns the domain separator for the current chain.
     */
    function _domainSeparatorV4() internal view returns (bytes32) {
        if (
            address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID
        ) {
            return _CACHED_DOMAIN_SEPARATOR;
        } else {
            return
                _buildDomainSeparator(
                    _TYPE_HASH,
                    _HASHED_NAME,
                    _HASHED_VERSION
                );
        }
    }

    function _buildDomainSeparator(
        bytes32 typeHash,
        bytes32 nameHash,
        bytes32 versionHash
    ) private view returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    typeHash,
                    nameHash,
                    versionHash,
                    block.chainid,
                    address(this)
                )
            );
    }

    /**
     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this
     * function returns the hash of the fully encoded EIP712 message for this domain.
     *
     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:
     *
     * ```solidity
     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(
     *     keccak256("Mail(address to,string contents)"),
     *     mailTo,
     *     keccak256(bytes(mailContents))
     * )));
     * address signer = ECDSA.recover(digest, signature);
     * ```
     */
    function _hashTypedDataV4(bytes32 structHash)
        internal
        view
        virtual
        returns (bytes32)
    {
        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);
    }
}

contract CybeeDAO is ERC20, EIP712 {
    mapping(address => uint256) private _nonces;

    uint256 private constant minimumTimeBetweenMints = 1 days * 365;

    address public immutable cSigner;
    address public minter;
    uint256 public nextMintAfter;
    uint256 public maxMintCap = 2;

    bytes32 public constant CLAIM_CALL_HASH_TYPE =
        keccak256("claim(address receiver,uint256 amount,uint256 nonce)");
    uint256 public constant MAX_SUPPLY = 10_000_000_000e18;

    // for DAO
    uint256 public constant AMOUNT_DAO = (MAX_SUPPLY / 100) * 30;
    address public constant ADDR_DAO =
        0x3D3FA7E562A1bA54f2265412AB1817f39b358c2a;

    // for Cybee team
    uint256 public constant AMOUNT_TEAM = (MAX_SUPPLY / 100) * 40;
    address public constant ADDR_TEAM =
        0x22e132FD5EC37b7827fEc48342b994a33Df6b228;

    event MinterChanged(address indexed minter, address indexed newMinter);
    event Claimed(address indexed to, uint256 amount, uint256 nonce);
    event Minted(address indexed to, uint256 amount);

    constructor(address _signer)
        ERC20("CybeeDAO", "CBD")
        EIP712("CybeeDAO", "1")
    {
        _mint(ADDR_DAO, AMOUNT_DAO);
        _mint(ADDR_TEAM, AMOUNT_TEAM);

        minter = ADDR_DAO;
        cSigner = _signer;
        nextMintAfter = block.timestamp + minimumTimeBetweenMints;
    }

    function claim(uint256 amount, bytes memory signature) public {
        uint256 total = totalSupply() + amount;
        require(total <= MAX_SUPPLY, "CybeeDAO: Exceed max supply");

        bytes32 digest = _hashTypedDataV4(
            keccak256(
                abi.encode(
                    CLAIM_CALL_HASH_TYPE,
                    msg.sender,
                    amount,
                    _nonces[msg.sender]
                )
            )
        );
        require(
            ECDSA.recover(digest, signature) == cSigner,
            "CybeeDAO: Invalid signature"
        );

        uint256 userNonce = _nonces[msg.sender];
        _nonces[msg.sender] = userNonce + 1;

        _mint(msg.sender, amount);
        emit Claimed(msg.sender, amount, userNonce);
    }

    function nonce(address user) public view returns (uint256) {
        return _nonces[user];
    }

    function mint(address to, uint256 amount) public {
        require(msg.sender == minter, "CybeeDAO: Only minter can mint");
        require(
            block.timestamp >= nextMintAfter,
            "CybeeDAO: Minting is not allowed yet"
        );

        nextMintAfter = block.timestamp + minimumTimeBetweenMints;

        uint256 maxMintAmount = (totalSupply() / 100) * maxMintCap;
        require(amount <= maxMintAmount, "CybeeDAO: Exceed max mint cap");

        _mint(to, amount);
        emit Minted(to, amount);
    }

    function setMinter(address _minter) public {
        require(
            minter == _minter,
            "CybeeDAO: Only minter can change the minter address"
        );
        minter = _minter;
        emit MinterChanged(minter, _minter);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_signer","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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"address","name":"newMinter","type":"address"}],"name":"MinterChanged","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":"ADDR_DAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ADDR_TEAM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AMOUNT_DAO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AMOUNT_TEAM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CLAIM_CALL_HASH_TYPE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxMintCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextMintAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"setMinter","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

61016060405260026008553480156200001757600080fd5b506040516200376a3803806200376a83398181016040528101906200003d9190620005cc565b6040518060400160405280600881526020017f437962656544414f0000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f437962656544414f0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f434244000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200012d92919062000505565b5080600490805190602001906200014692919062000505565b50505060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620001b28184846200034660201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505080610120818152505050505050506200024c733d3fa7e562a1ba54f2265412ab1817f39b358c2a601e60646b204fce5e3e2502611000000062000234919062000762565b6200024091906200079a565b6200038260201b60201c565b6200029a7322e132fd5ec37b7827fec48342b994a33df6b228602860646b204fce5e3e2502611000000062000282919062000762565b6200028e91906200079a565b6200038260201b60201c565b733d3fa7e562a1ba54f2265412ab1817f39b358c2a600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff1660601b815250506301e133804262000339919062000705565b600781905550506200094e565b600083838346306040516020016200036395949392919062000658565b6040516020818303038152906040528051906020012090509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ec90620006b5565b60405180910390fd5b6200040960008383620004fb60201b60201c565b80600260008282546200041d919062000705565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000474919062000705565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004db9190620006d7565b60405180910390a3620004f7600083836200050060201b60201c565b5050565b505050565b505050565b828054620005139062000843565b90600052602060002090601f01602090048101928262000537576000855562000583565b82601f106200055257805160ff191683800117855562000583565b8280016001018555821562000583579182015b828111156200058257825182559160200191906001019062000565565b5b50905062000592919062000596565b5090565b5b80821115620005b157600081600090555060010162000597565b5090565b600081519050620005c68162000934565b92915050565b600060208284031215620005e557620005e462000906565b5b6000620005f584828501620005b5565b91505092915050565b6200060981620007fb565b82525050565b6200061a816200080f565b82525050565b60006200062f601f83620006f4565b91506200063c826200090b565b602082019050919050565b620006528162000839565b82525050565b600060a0820190506200066f60008301886200060f565b6200067e60208301876200060f565b6200068d60408301866200060f565b6200069c606083018562000647565b620006ab6080830184620005fe565b9695505050505050565b60006020820190508181036000830152620006d08162000620565b9050919050565b6000602082019050620006ee600083018462000647565b92915050565b600082825260208201905092915050565b6000620007128262000839565b91506200071f8362000839565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000757576200075662000879565b5b828201905092915050565b60006200076f8262000839565b91506200077c8362000839565b9250826200078f576200078e620008a8565b5b828204905092915050565b6000620007a78262000839565b9150620007b48362000839565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007f057620007ef62000879565b5b828202905092915050565b6000620008088262000819565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200085c57607f821691505b60208210811415620008735762000872620008d7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6200093f81620007fb565b81146200094b57600080fd5b50565b60805160a05160c05160601c60e05161010051610120516101405160601c612db4620009b66000396000818161080f0152610bf70152600061174b0152600061178d0152600061176c015260006116a1015260006116f7015260006117200152612db46000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80635760cc5d116100de578063a457c2d711610097578063da394aec11610071578063da394aec14610468578063dd62ed3e14610486578063f1388043146104b6578063fca3b5aa146104d457610173565b8063a457c2d7146103ea578063a9059cbb1461041a578063b8fcfa5e1461044a57610173565b80635760cc5d1461031257806370a082311461033057806370ae92d214610360578063720248de146103905780637feb839d146103ae57806395d89b41146103cc57610173565b80632a0004c4116101305780632a0004c414610250578063313ce5671461026e57806332cb6b0c1461028c57806338926b6d146102aa57806339509351146102c657806340c10f19146102f657610173565b80630389223d1461017857806306fdde031461019657806307546172146101b4578063095ea7b3146101d257806318160ddd1461020257806323b872dd14610220575b600080fd5b6101806104f0565b60405161018d91906124c8565b60405180910390f35b61019e610518565b6040516101ab9190612266565b60405180910390f35b6101bc6105aa565b6040516101c99190612138565b60405180910390f35b6101ec60048036038101906101e79190611d31565b6105d0565b6040516101f99190612153565b60405180910390f35b61020a6105ee565b60405161021791906124c8565b60405180910390f35b61023a60048036038101906102359190611cde565b6105f8565b6040516102479190612153565b60405180910390f35b6102586106f0565b60405161026591906124c8565b60405180910390f35b6102766106f6565b604051610283919061250c565b60405180910390f35b6102946106ff565b6040516102a191906124c8565b60405180910390f35b6102c460048036038101906102bf9190611d71565b61070f565b005b6102e060048036038101906102db9190611d31565b610999565b6040516102ed9190612153565b60405180910390f35b610310600480360381019061030b9190611d31565b610a45565b005b61031a610bf5565b6040516103279190612138565b60405180910390f35b61034a60048036038101906103459190611c71565b610c19565b60405161035791906124c8565b60405180910390f35b61037a60048036038101906103759190611c71565b610c61565b60405161038791906124c8565b60405180910390f35b610398610caa565b6040516103a591906124c8565b60405180910390f35b6103b6610cd2565b6040516103c391906124c8565b60405180910390f35b6103d4610cd8565b6040516103e19190612266565b60405180910390f35b61040460048036038101906103ff9190611d31565b610d6a565b6040516104119190612153565b60405180910390f35b610434600480360381019061042f9190611d31565b610e55565b6040516104419190612153565b60405180910390f35b610452610e73565b60405161045f9190612138565b60405180910390f35b610470610e8b565b60405161047d9190612138565b60405180910390f35b6104a0600480360381019061049b9190611c9e565b610ea3565b6040516104ad91906124c8565b60405180910390f35b6104be610f2a565b6040516104cb919061216e565b60405180910390f35b6104ee60048036038101906104e99190611c71565b610f4e565b005b602860646b204fce5e3e2502611000000061050b91906125fa565b610515919061262b565b81565b60606003805461052790612726565b80601f016020809104026020016040519081016040528092919081815260200182805461055390612726565b80156105a05780601f10610575576101008083540402835291602001916105a0565b820191906000526020600020905b81548152906001019060200180831161058357829003601f168201915b5050505050905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006105e46105dd61109e565b84846110a6565b6001905092915050565b6000600254905090565b6000610605848484611271565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061065061109e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156106d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c7906123e8565b60405180910390fd5b6106e4856106dc61109e565b8584036110a6565b60019150509392505050565b60075481565b60006012905090565b6b204fce5e3e2502611000000081565b60008261071a6105ee565b61072491906125a4565b90506b204fce5e3e25026110000000811115610775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076c90612328565b60405180910390fd5b600061080b7f208454aa61e79dd0709e62e7f8c82c57776b38e83e5099fdd01f66c22b5e0a093386600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516020016107f09493929190612189565b604051602081830303815290604052805190602001206114f2565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661084e828561150c565b73ffffffffffffffffffffffffffffffffffffffff16146108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089b906122c8565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506001816108f591906125a4565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506109423386611533565b3373ffffffffffffffffffffffffffffffffffffffff167f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a868360405161098a9291906124e3565b60405180910390a25050505050565b6000610a3b6109a661109e565b8484600160006109b461109e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a3691906125a4565b6110a6565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc906122e8565b60405180910390fd5b600754421015610b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1190612468565b60405180910390fd5b6301e1338042610b2a91906125a4565b60078190555060006008546064610b3f6105ee565b610b4991906125fa565b610b53919061262b565b905080821115610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f906123a8565b60405180910390fd5b610ba28383611533565b8273ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe83604051610be891906124c8565b60405180910390a2505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601e60646b204fce5e3e25026110000000610cc591906125fa565b610ccf919061262b565b81565b60085481565b606060048054610ce790612726565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1390612726565b8015610d605780601f10610d3557610100808354040283529160200191610d60565b820191906000526020600020905b815481529060010190602001808311610d4357829003601f168201915b5050505050905090565b60008060016000610d7961109e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90612488565b60405180910390fd5b610e4a610e4161109e565b858584036110a6565b600191505092915050565b6000610e69610e6261109e565b8484611271565b6001905092915050565b7322e132fd5ec37b7827fec48342b994a33df6b22881565b733d3fa7e562a1ba54f2265412ab1817f39b358c2a81565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f208454aa61e79dd0709e62e7f8c82c57776b38e83e5099fdd01f66c22b5e0a0981565b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd590612448565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f660405160405180910390a350565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d90612428565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90612348565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161126491906124c8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890612408565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611348906122a8565b60405180910390fd5b61135c838383611693565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990612368565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461147591906125a4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114d991906124c8565b60405180910390a36114ec848484611698565b50505050565b60006115056114ff61169d565b836117b7565b9050919050565b600080600061151b85856117ea565b915091506115288161186d565b819250505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a906124a8565b60405180910390fd5b6115af60008383611693565b80600260008282546115c191906125a4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461161691906125a4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161167b91906124c8565b60405180910390a361168f60008383611698565b5050565b505050565b505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561171957507f000000000000000000000000000000000000000000000000000000000000000046145b15611746577f000000000000000000000000000000000000000000000000000000000000000090506117b4565b6117b17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611a42565b90505b90565b600082826040516020016117cc929190612101565b60405160208183030381529060405280519060200120905092915050565b60008060418351141561182c5760008060006020860151925060408601519150606086015160001a905061182087828585611a7c565b94509450505050611866565b60408351141561185d576000806020850151915060408501519050611852868383611b89565b935093505050611866565b60006002915091505b9250929050565b60006004811115611881576118806127f1565b5b816004811115611894576118936127f1565b5b141561189f57611a3f565b600160048111156118b3576118b26127f1565b5b8160048111156118c6576118c56127f1565b5b1415611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90612288565b60405180910390fd5b6002600481111561191b5761191a6127f1565b5b81600481111561192e5761192d6127f1565b5b141561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690612308565b60405180910390fd5b60036004811115611983576119826127f1565b5b816004811115611996576119956127f1565b5b14156119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce90612388565b60405180910390fd5b6004808111156119ea576119e96127f1565b5b8160048111156119fd576119fc6127f1565b5b1415611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a35906123c8565b60405180910390fd5b5b50565b60008383834630604051602001611a5d9594939291906121ce565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611ab7576000600391509150611b80565b601b8560ff1614158015611acf5750601c8560ff1614155b15611ae1576000600491509150611b80565b600060018787878760405160008152602001604052604051611b069493929190612221565b6020604051602081039080840390855afa158015611b28573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b7757600060019250925050611b80565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050611bc987828885611a7c565b935093505050935093915050565b6000611bea611be58461254c565b612527565b905082815260208101848484011115611c0657611c05612883565b5b611c118482856126e4565b509392505050565b600081359050611c2881612d50565b92915050565b600082601f830112611c4357611c4261287e565b5b8135611c53848260208601611bd7565b91505092915050565b600081359050611c6b81612d67565b92915050565b600060208284031215611c8757611c8661288d565b5b6000611c9584828501611c19565b91505092915050565b60008060408385031215611cb557611cb461288d565b5b6000611cc385828601611c19565b9250506020611cd485828601611c19565b9150509250929050565b600080600060608486031215611cf757611cf661288d565b5b6000611d0586828701611c19565b9350506020611d1686828701611c19565b9250506040611d2786828701611c5c565b9150509250925092565b60008060408385031215611d4857611d4761288d565b5b6000611d5685828601611c19565b9250506020611d6785828601611c5c565b9150509250929050565b60008060408385031215611d8857611d8761288d565b5b6000611d9685828601611c5c565b925050602083013567ffffffffffffffff811115611db757611db6612888565b5b611dc385828601611c2e565b9150509250929050565b611dd681612685565b82525050565b611de581612697565b82525050565b611df4816126a3565b82525050565b611e0b611e06826126a3565b612789565b82525050565b6000611e1c8261257d565b611e268185612588565b9350611e368185602086016126f3565b611e3f81612892565b840191505092915050565b6000611e57601883612588565b9150611e62826128a3565b602082019050919050565b6000611e7a602383612588565b9150611e85826128cc565b604082019050919050565b6000611e9d601b83612588565b9150611ea88261291b565b602082019050919050565b6000611ec0601e83612588565b9150611ecb82612944565b602082019050919050565b6000611ee3601f83612588565b9150611eee8261296d565b602082019050919050565b6000611f06601b83612588565b9150611f1182612996565b602082019050919050565b6000611f29602283612588565b9150611f34826129bf565b604082019050919050565b6000611f4c600283612599565b9150611f5782612a0e565b600282019050919050565b6000611f6f602683612588565b9150611f7a82612a37565b604082019050919050565b6000611f92602283612588565b9150611f9d82612a86565b604082019050919050565b6000611fb5601d83612588565b9150611fc082612ad5565b602082019050919050565b6000611fd8602283612588565b9150611fe382612afe565b604082019050919050565b6000611ffb602883612588565b915061200682612b4d565b604082019050919050565b600061201e602583612588565b915061202982612b9c565b604082019050919050565b6000612041602483612588565b915061204c82612beb565b604082019050919050565b6000612064603383612588565b915061206f82612c3a565b604082019050919050565b6000612087602483612588565b915061209282612c89565b604082019050919050565b60006120aa602583612588565b91506120b582612cd8565b604082019050919050565b60006120cd601f83612588565b91506120d882612d27565b602082019050919050565b6120ec816126cd565b82525050565b6120fb816126d7565b82525050565b600061210c82611f3f565b91506121188285611dfa565b6020820191506121288284611dfa565b6020820191508190509392505050565b600060208201905061214d6000830184611dcd565b92915050565b60006020820190506121686000830184611ddc565b92915050565b60006020820190506121836000830184611deb565b92915050565b600060808201905061219e6000830187611deb565b6121ab6020830186611dcd565b6121b860408301856120e3565b6121c560608301846120e3565b95945050505050565b600060a0820190506121e36000830188611deb565b6121f06020830187611deb565b6121fd6040830186611deb565b61220a60608301856120e3565b6122176080830184611dcd565b9695505050505050565b60006080820190506122366000830187611deb565b61224360208301866120f2565b6122506040830185611deb565b61225d6060830184611deb565b95945050505050565b600060208201905081810360008301526122808184611e11565b905092915050565b600060208201905081810360008301526122a181611e4a565b9050919050565b600060208201905081810360008301526122c181611e6d565b9050919050565b600060208201905081810360008301526122e181611e90565b9050919050565b6000602082019050818103600083015261230181611eb3565b9050919050565b6000602082019050818103600083015261232181611ed6565b9050919050565b6000602082019050818103600083015261234181611ef9565b9050919050565b6000602082019050818103600083015261236181611f1c565b9050919050565b6000602082019050818103600083015261238181611f62565b9050919050565b600060208201905081810360008301526123a181611f85565b9050919050565b600060208201905081810360008301526123c181611fa8565b9050919050565b600060208201905081810360008301526123e181611fcb565b9050919050565b6000602082019050818103600083015261240181611fee565b9050919050565b6000602082019050818103600083015261242181612011565b9050919050565b6000602082019050818103600083015261244181612034565b9050919050565b6000602082019050818103600083015261246181612057565b9050919050565b600060208201905081810360008301526124818161207a565b9050919050565b600060208201905081810360008301526124a18161209d565b9050919050565b600060208201905081810360008301526124c1816120c0565b9050919050565b60006020820190506124dd60008301846120e3565b92915050565b60006040820190506124f860008301856120e3565b61250560208301846120e3565b9392505050565b600060208201905061252160008301846120f2565b92915050565b6000612531612542565b905061253d8282612758565b919050565b6000604051905090565b600067ffffffffffffffff8211156125675761256661284f565b5b61257082612892565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006125af826126cd565b91506125ba836126cd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125ef576125ee612793565b5b828201905092915050565b6000612605826126cd565b9150612610836126cd565b9250826126205761261f6127c2565b5b828204905092915050565b6000612636826126cd565b9150612641836126cd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561267a57612679612793565b5b828202905092915050565b6000612690826126ad565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156127115780820151818401526020810190506126f6565b83811115612720576000848401525b50505050565b6000600282049050600182168061273e57607f821691505b6020821081141561275257612751612820565b5b50919050565b61276182612892565b810181811067ffffffffffffffff821117156127805761277f61284f565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f437962656544414f3a20496e76616c6964207369676e61747572650000000000600082015250565b7f437962656544414f3a204f6e6c79206d696e7465722063616e206d696e740000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f437962656544414f3a20457863656564206d617820737570706c790000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f437962656544414f3a20457863656564206d6178206d696e7420636170000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f437962656544414f3a204f6e6c79206d696e7465722063616e206368616e676560008201527f20746865206d696e746572206164647265737300000000000000000000000000602082015250565b7f437962656544414f3a204d696e74696e67206973206e6f7420616c6c6f77656460008201527f2079657400000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612d5981612685565b8114612d6457600080fd5b50565b612d70816126cd565b8114612d7b57600080fd5b5056fea2646970667358221220bb2c3ea263a2c16c6b9415463feef470c244640df004677a7d9c084984afc22c64736f6c634300080700330000000000000000000000000c137144f6d0ab5a6213596b75dcd7fb1ad4fc1e

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c80635760cc5d116100de578063a457c2d711610097578063da394aec11610071578063da394aec14610468578063dd62ed3e14610486578063f1388043146104b6578063fca3b5aa146104d457610173565b8063a457c2d7146103ea578063a9059cbb1461041a578063b8fcfa5e1461044a57610173565b80635760cc5d1461031257806370a082311461033057806370ae92d214610360578063720248de146103905780637feb839d146103ae57806395d89b41146103cc57610173565b80632a0004c4116101305780632a0004c414610250578063313ce5671461026e57806332cb6b0c1461028c57806338926b6d146102aa57806339509351146102c657806340c10f19146102f657610173565b80630389223d1461017857806306fdde031461019657806307546172146101b4578063095ea7b3146101d257806318160ddd1461020257806323b872dd14610220575b600080fd5b6101806104f0565b60405161018d91906124c8565b60405180910390f35b61019e610518565b6040516101ab9190612266565b60405180910390f35b6101bc6105aa565b6040516101c99190612138565b60405180910390f35b6101ec60048036038101906101e79190611d31565b6105d0565b6040516101f99190612153565b60405180910390f35b61020a6105ee565b60405161021791906124c8565b60405180910390f35b61023a60048036038101906102359190611cde565b6105f8565b6040516102479190612153565b60405180910390f35b6102586106f0565b60405161026591906124c8565b60405180910390f35b6102766106f6565b604051610283919061250c565b60405180910390f35b6102946106ff565b6040516102a191906124c8565b60405180910390f35b6102c460048036038101906102bf9190611d71565b61070f565b005b6102e060048036038101906102db9190611d31565b610999565b6040516102ed9190612153565b60405180910390f35b610310600480360381019061030b9190611d31565b610a45565b005b61031a610bf5565b6040516103279190612138565b60405180910390f35b61034a60048036038101906103459190611c71565b610c19565b60405161035791906124c8565b60405180910390f35b61037a60048036038101906103759190611c71565b610c61565b60405161038791906124c8565b60405180910390f35b610398610caa565b6040516103a591906124c8565b60405180910390f35b6103b6610cd2565b6040516103c391906124c8565b60405180910390f35b6103d4610cd8565b6040516103e19190612266565b60405180910390f35b61040460048036038101906103ff9190611d31565b610d6a565b6040516104119190612153565b60405180910390f35b610434600480360381019061042f9190611d31565b610e55565b6040516104419190612153565b60405180910390f35b610452610e73565b60405161045f9190612138565b60405180910390f35b610470610e8b565b60405161047d9190612138565b60405180910390f35b6104a0600480360381019061049b9190611c9e565b610ea3565b6040516104ad91906124c8565b60405180910390f35b6104be610f2a565b6040516104cb919061216e565b60405180910390f35b6104ee60048036038101906104e99190611c71565b610f4e565b005b602860646b204fce5e3e2502611000000061050b91906125fa565b610515919061262b565b81565b60606003805461052790612726565b80601f016020809104026020016040519081016040528092919081815260200182805461055390612726565b80156105a05780601f10610575576101008083540402835291602001916105a0565b820191906000526020600020905b81548152906001019060200180831161058357829003601f168201915b5050505050905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006105e46105dd61109e565b84846110a6565b6001905092915050565b6000600254905090565b6000610605848484611271565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061065061109e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156106d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c7906123e8565b60405180910390fd5b6106e4856106dc61109e565b8584036110a6565b60019150509392505050565b60075481565b60006012905090565b6b204fce5e3e2502611000000081565b60008261071a6105ee565b61072491906125a4565b90506b204fce5e3e25026110000000811115610775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076c90612328565b60405180910390fd5b600061080b7f208454aa61e79dd0709e62e7f8c82c57776b38e83e5099fdd01f66c22b5e0a093386600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516020016107f09493929190612189565b604051602081830303815290604052805190602001206114f2565b90507f0000000000000000000000000c137144f6d0ab5a6213596b75dcd7fb1ad4fc1e73ffffffffffffffffffffffffffffffffffffffff1661084e828561150c565b73ffffffffffffffffffffffffffffffffffffffff16146108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089b906122c8565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506001816108f591906125a4565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506109423386611533565b3373ffffffffffffffffffffffffffffffffffffffff167f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a868360405161098a9291906124e3565b60405180910390a25050505050565b6000610a3b6109a661109e565b8484600160006109b461109e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a3691906125a4565b6110a6565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc906122e8565b60405180910390fd5b600754421015610b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1190612468565b60405180910390fd5b6301e1338042610b2a91906125a4565b60078190555060006008546064610b3f6105ee565b610b4991906125fa565b610b53919061262b565b905080821115610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f906123a8565b60405180910390fd5b610ba28383611533565b8273ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe83604051610be891906124c8565b60405180910390a2505050565b7f0000000000000000000000000c137144f6d0ab5a6213596b75dcd7fb1ad4fc1e81565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601e60646b204fce5e3e25026110000000610cc591906125fa565b610ccf919061262b565b81565b60085481565b606060048054610ce790612726565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1390612726565b8015610d605780601f10610d3557610100808354040283529160200191610d60565b820191906000526020600020905b815481529060010190602001808311610d4357829003601f168201915b5050505050905090565b60008060016000610d7961109e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90612488565b60405180910390fd5b610e4a610e4161109e565b858584036110a6565b600191505092915050565b6000610e69610e6261109e565b8484611271565b6001905092915050565b7322e132fd5ec37b7827fec48342b994a33df6b22881565b733d3fa7e562a1ba54f2265412ab1817f39b358c2a81565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f208454aa61e79dd0709e62e7f8c82c57776b38e83e5099fdd01f66c22b5e0a0981565b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd590612448565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f660405160405180910390a350565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d90612428565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90612348565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161126491906124c8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890612408565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611348906122a8565b60405180910390fd5b61135c838383611693565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990612368565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461147591906125a4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114d991906124c8565b60405180910390a36114ec848484611698565b50505050565b60006115056114ff61169d565b836117b7565b9050919050565b600080600061151b85856117ea565b915091506115288161186d565b819250505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a906124a8565b60405180910390fd5b6115af60008383611693565b80600260008282546115c191906125a4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461161691906125a4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161167b91906124c8565b60405180910390a361168f60008383611698565b5050565b505050565b505050565b60007f0000000000000000000000009b812c65529ec7d20ab630235ae20fde022c8ad373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561171957507f000000000000000000000000000000000000000000000000000000000000000146145b15611746577febe4a8b2c635649c5a904bb6f3c57e1bf91437253d38bb7797ce99123e91952f90506117b4565b6117b17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f7dc72fb5b1f31d6492fbd35ba22ca0fb4c062ae816d618e59cef2044e6bafe7d7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611a42565b90505b90565b600082826040516020016117cc929190612101565b60405160208183030381529060405280519060200120905092915050565b60008060418351141561182c5760008060006020860151925060408601519150606086015160001a905061182087828585611a7c565b94509450505050611866565b60408351141561185d576000806020850151915060408501519050611852868383611b89565b935093505050611866565b60006002915091505b9250929050565b60006004811115611881576118806127f1565b5b816004811115611894576118936127f1565b5b141561189f57611a3f565b600160048111156118b3576118b26127f1565b5b8160048111156118c6576118c56127f1565b5b1415611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90612288565b60405180910390fd5b6002600481111561191b5761191a6127f1565b5b81600481111561192e5761192d6127f1565b5b141561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690612308565b60405180910390fd5b60036004811115611983576119826127f1565b5b816004811115611996576119956127f1565b5b14156119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce90612388565b60405180910390fd5b6004808111156119ea576119e96127f1565b5b8160048111156119fd576119fc6127f1565b5b1415611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a35906123c8565b60405180910390fd5b5b50565b60008383834630604051602001611a5d9594939291906121ce565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611ab7576000600391509150611b80565b601b8560ff1614158015611acf5750601c8560ff1614155b15611ae1576000600491509150611b80565b600060018787878760405160008152602001604052604051611b069493929190612221565b6020604051602081039080840390855afa158015611b28573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b7757600060019250925050611b80565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050611bc987828885611a7c565b935093505050935093915050565b6000611bea611be58461254c565b612527565b905082815260208101848484011115611c0657611c05612883565b5b611c118482856126e4565b509392505050565b600081359050611c2881612d50565b92915050565b600082601f830112611c4357611c4261287e565b5b8135611c53848260208601611bd7565b91505092915050565b600081359050611c6b81612d67565b92915050565b600060208284031215611c8757611c8661288d565b5b6000611c9584828501611c19565b91505092915050565b60008060408385031215611cb557611cb461288d565b5b6000611cc385828601611c19565b9250506020611cd485828601611c19565b9150509250929050565b600080600060608486031215611cf757611cf661288d565b5b6000611d0586828701611c19565b9350506020611d1686828701611c19565b9250506040611d2786828701611c5c565b9150509250925092565b60008060408385031215611d4857611d4761288d565b5b6000611d5685828601611c19565b9250506020611d6785828601611c5c565b9150509250929050565b60008060408385031215611d8857611d8761288d565b5b6000611d9685828601611c5c565b925050602083013567ffffffffffffffff811115611db757611db6612888565b5b611dc385828601611c2e565b9150509250929050565b611dd681612685565b82525050565b611de581612697565b82525050565b611df4816126a3565b82525050565b611e0b611e06826126a3565b612789565b82525050565b6000611e1c8261257d565b611e268185612588565b9350611e368185602086016126f3565b611e3f81612892565b840191505092915050565b6000611e57601883612588565b9150611e62826128a3565b602082019050919050565b6000611e7a602383612588565b9150611e85826128cc565b604082019050919050565b6000611e9d601b83612588565b9150611ea88261291b565b602082019050919050565b6000611ec0601e83612588565b9150611ecb82612944565b602082019050919050565b6000611ee3601f83612588565b9150611eee8261296d565b602082019050919050565b6000611f06601b83612588565b9150611f1182612996565b602082019050919050565b6000611f29602283612588565b9150611f34826129bf565b604082019050919050565b6000611f4c600283612599565b9150611f5782612a0e565b600282019050919050565b6000611f6f602683612588565b9150611f7a82612a37565b604082019050919050565b6000611f92602283612588565b9150611f9d82612a86565b604082019050919050565b6000611fb5601d83612588565b9150611fc082612ad5565b602082019050919050565b6000611fd8602283612588565b9150611fe382612afe565b604082019050919050565b6000611ffb602883612588565b915061200682612b4d565b604082019050919050565b600061201e602583612588565b915061202982612b9c565b604082019050919050565b6000612041602483612588565b915061204c82612beb565b604082019050919050565b6000612064603383612588565b915061206f82612c3a565b604082019050919050565b6000612087602483612588565b915061209282612c89565b604082019050919050565b60006120aa602583612588565b91506120b582612cd8565b604082019050919050565b60006120cd601f83612588565b91506120d882612d27565b602082019050919050565b6120ec816126cd565b82525050565b6120fb816126d7565b82525050565b600061210c82611f3f565b91506121188285611dfa565b6020820191506121288284611dfa565b6020820191508190509392505050565b600060208201905061214d6000830184611dcd565b92915050565b60006020820190506121686000830184611ddc565b92915050565b60006020820190506121836000830184611deb565b92915050565b600060808201905061219e6000830187611deb565b6121ab6020830186611dcd565b6121b860408301856120e3565b6121c560608301846120e3565b95945050505050565b600060a0820190506121e36000830188611deb565b6121f06020830187611deb565b6121fd6040830186611deb565b61220a60608301856120e3565b6122176080830184611dcd565b9695505050505050565b60006080820190506122366000830187611deb565b61224360208301866120f2565b6122506040830185611deb565b61225d6060830184611deb565b95945050505050565b600060208201905081810360008301526122808184611e11565b905092915050565b600060208201905081810360008301526122a181611e4a565b9050919050565b600060208201905081810360008301526122c181611e6d565b9050919050565b600060208201905081810360008301526122e181611e90565b9050919050565b6000602082019050818103600083015261230181611eb3565b9050919050565b6000602082019050818103600083015261232181611ed6565b9050919050565b6000602082019050818103600083015261234181611ef9565b9050919050565b6000602082019050818103600083015261236181611f1c565b9050919050565b6000602082019050818103600083015261238181611f62565b9050919050565b600060208201905081810360008301526123a181611f85565b9050919050565b600060208201905081810360008301526123c181611fa8565b9050919050565b600060208201905081810360008301526123e181611fcb565b9050919050565b6000602082019050818103600083015261240181611fee565b9050919050565b6000602082019050818103600083015261242181612011565b9050919050565b6000602082019050818103600083015261244181612034565b9050919050565b6000602082019050818103600083015261246181612057565b9050919050565b600060208201905081810360008301526124818161207a565b9050919050565b600060208201905081810360008301526124a18161209d565b9050919050565b600060208201905081810360008301526124c1816120c0565b9050919050565b60006020820190506124dd60008301846120e3565b92915050565b60006040820190506124f860008301856120e3565b61250560208301846120e3565b9392505050565b600060208201905061252160008301846120f2565b92915050565b6000612531612542565b905061253d8282612758565b919050565b6000604051905090565b600067ffffffffffffffff8211156125675761256661284f565b5b61257082612892565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006125af826126cd565b91506125ba836126cd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125ef576125ee612793565b5b828201905092915050565b6000612605826126cd565b9150612610836126cd565b9250826126205761261f6127c2565b5b828204905092915050565b6000612636826126cd565b9150612641836126cd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561267a57612679612793565b5b828202905092915050565b6000612690826126ad565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156127115780820151818401526020810190506126f6565b83811115612720576000848401525b50505050565b6000600282049050600182168061273e57607f821691505b6020821081141561275257612751612820565b5b50919050565b61276182612892565b810181811067ffffffffffffffff821117156127805761277f61284f565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f437962656544414f3a20496e76616c6964207369676e61747572650000000000600082015250565b7f437962656544414f3a204f6e6c79206d696e7465722063616e206d696e740000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f437962656544414f3a20457863656564206d617820737570706c790000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f437962656544414f3a20457863656564206d6178206d696e7420636170000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f437962656544414f3a204f6e6c79206d696e7465722063616e206368616e676560008201527f20746865206d696e746572206164647265737300000000000000000000000000602082015250565b7f437962656544414f3a204d696e74696e67206973206e6f7420616c6c6f77656460008201527f2079657400000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612d5981612685565b8114612d6457600080fd5b50565b612d70816126cd565b8114612d7b57600080fd5b5056fea2646970667358221220bb2c3ea263a2c16c6b9415463feef470c244640df004677a7d9c084984afc22c64736f6c63430008070033

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

0000000000000000000000000c137144f6d0ab5a6213596b75dcd7fb1ad4fc1e

-----Decoded View---------------
Arg [0] : _signer (address): 0x0c137144f6d0AB5a6213596B75DCd7FB1aD4Fc1e

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000c137144f6d0ab5a6213596b75dcd7fb1ad4fc1e


Deployed Bytecode Sourcemap

24897:3108:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25595:61;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4548:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25102:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5603:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4869:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5821:529;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25130:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4768:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25331:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26285:801;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6358:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27200:541;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25063:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4985:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27094:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25410:60;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25165:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4656:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6663:482;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5170:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25663:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25477:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5394:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25203:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27749:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25595:61;25654:2;25647:3;25368:17;25634:16;;;;:::i;:::-;25633:23;;;;:::i;:::-;25595:61;:::o;4548:100::-;4602:13;4635:5;4628:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4548:100;:::o;25102:21::-;;;;;;;;;;;;;:::o;5603:210::-;5722:4;5744:39;5753:12;:10;:12::i;:::-;5767:7;5776:6;5744:8;:39::i;:::-;5801:4;5794:11;;5603:210;;;;:::o;4869:108::-;4930:7;4957:12;;4950:19;;4869:108;:::o;5821:529::-;5961:4;5978:36;5988:6;5996:9;6007:6;5978:9;:36::i;:::-;6027:24;6054:11;:19;6066:6;6054:19;;;;;;;;;;;;;;;:33;6074:12;:10;:12::i;:::-;6054:33;;;;;;;;;;;;;;;;6027:60;;6140:6;6120:16;:26;;6098:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;6250:57;6259:6;6267:12;:10;:12::i;:::-;6300:6;6281:16;:25;6250:8;:57::i;:::-;6338:4;6331:11;;;5821:529;;;;;:::o;25130:28::-;;;;:::o;4768:93::-;4826:5;4851:2;4844:9;;4768:93;:::o;25331:54::-;25368:17;25331:54;:::o;26285:801::-;26358:13;26390:6;26374:13;:11;:13::i;:::-;:22;;;;:::i;:::-;26358:38;;25368:17;26415:5;:19;;26407:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;26479:14;26496:261;25259:65;26631:10;26664:6;26693:7;:19;26701:10;26693:19;;;;;;;;;;;;;;;;26555:176;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26527:219;;;;;;26496:16;:261::i;:::-;26479:278;;26826:7;26790:43;;:32;26804:6;26812:9;26790:13;:32::i;:::-;:43;;;26768:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;26901:17;26921:7;:19;26929:10;26921:19;;;;;;;;;;;;;;;;26901:39;;26985:1;26973:9;:13;;;;:::i;:::-;26951:7;:19;26959:10;26951:19;;;;;;;;;;;;;;;:35;;;;26999:25;27005:10;27017:6;26999:5;:25::i;:::-;27048:10;27040:38;;;27060:6;27068:9;27040:38;;;;;;;:::i;:::-;;;;;;;;26347:739;;;26285:801;;:::o;6358:297::-;6473:4;6495:130;6518:12;:10;:12::i;:::-;6545:7;6604:10;6567:11;:25;6579:12;:10;:12::i;:::-;6567:25;;;;;;;;;;;;;;;:34;6593:7;6567:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6495:8;:130::i;:::-;6643:4;6636:11;;6358:297;;;;:::o;27200:541::-;27282:6;;;;;;;;;;;27268:20;;:10;:20;;;27260:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27375:13;;27356:15;:32;;27334:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;25042:12;27481:15;:41;;;;:::i;:::-;27465:13;:57;;;;27535:21;27583:10;;27576:3;27560:13;:11;:13::i;:::-;:19;;;;:::i;:::-;27559:34;;;;:::i;:::-;27535:58;;27622:13;27612:6;:23;;27604:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27682:17;27688:2;27692:6;27682:5;:17::i;:::-;27722:2;27715:18;;;27726:6;27715:18;;;;;;:::i;:::-;;;;;;;;27249:492;27200:541;;:::o;25063:32::-;;;:::o;4985:177::-;5104:7;5136:9;:18;5146:7;5136:18;;;;;;;;;;;;;;;;5129:25;;4985:177;;;:::o;27094:98::-;27144:7;27171;:13;27179:4;27171:13;;;;;;;;;;;;;;;;27164:20;;27094:98;;;:::o;25410:60::-;25468:2;25461:3;25368:17;25448:16;;;;:::i;:::-;25447:23;;;;:::i;:::-;25410:60;:::o;25165:29::-;;;;:::o;4656:104::-;4712:13;4745:7;4738:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4656:104;:::o;6663:482::-;6783:4;6805:24;6832:11;:25;6844:12;:10;:12::i;:::-;6832:25;;;;;;;;;;;;;;;:34;6858:7;6832:34;;;;;;;;;;;;;;;;6805:61;;6919:15;6899:16;:35;;6877:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7035:67;7044:12;:10;:12::i;:::-;7058:7;7086:15;7067:16;:34;7035:8;:67::i;:::-;7133:4;7126:11;;;6663:482;;;;:::o;5170:216::-;5292:4;5314:42;5324:12;:10;:12::i;:::-;5338:9;5349:6;5314:9;:42::i;:::-;5374:4;5367:11;;5170:216;;;;:::o;25663:87::-;25708:42;25663:87;:::o;25477:86::-;25521:42;25477:86;:::o;5394:201::-;5528:7;5560:11;:18;5572:5;5560:18;;;;;;;;;;;;;;;:27;5579:7;5560:27;;;;;;;;;;;;;;;;5553:34;;5394:201;;;;:::o;25203:121::-;25259:65;25203:121;:::o;27749:253::-;27835:7;27825:17;;:6;;;;;;;;;;;:17;;;27803:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;27941:7;27932:6;;:16;;;;;;;;;;;;;;;;;;27986:7;27964:30;;27978:6;;;;;;;;;;;27964:30;;;;;;;;;;;;27749:253;:::o;95:98::-;148:7;175:10;168:17;;95:98;:::o;8937:380::-;9090:1;9073:19;;:5;:19;;;;9065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9171:1;9152:21;;:7;:21;;;;9144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9255:6;9225:11;:18;9237:5;9225:18;;;;;;;;;;;;;;;:27;9244:7;9225:27;;;;;;;;;;;;;;;:36;;;;9293:7;9277:32;;9286:5;9277:32;;;9302:6;9277:32;;;;;;:::i;:::-;;;;;;;;8937:380;;;:::o;7153:770::-;7311:1;7293:20;;:6;:20;;;;7285:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7395:1;7374:23;;:9;:23;;;;7366:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7450:47;7471:6;7479:9;7490:6;7450:20;:47::i;:::-;7510:21;7534:9;:17;7544:6;7534:17;;;;;;;;;;;;;;;;7510:41;;7601:6;7584:13;:23;;7562:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;7745:6;7729:13;:22;7709:9;:17;7719:6;7709:17;;;;;;;;;;;;;;;:42;;;;7797:6;7773:9;:20;7783:9;7773:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7838:9;7821:35;;7830:6;7821:35;;;7849:6;7821:35;;;;;;:::i;:::-;;;;;;;;7869:46;7889:6;7897:9;7908:6;7869:19;:46::i;:::-;7274:649;7153:770;;;:::o;24682:208::-;24795:7;24827:55;24849:20;:18;:20::i;:::-;24871:10;24827:21;:55::i;:::-;24820:62;;24682:208;;;:::o;15627:263::-;15732:7;15758:17;15777:18;15799:27;15810:4;15816:9;15799:10;:27::i;:::-;15757:69;;;;15837:18;15849:5;15837:11;:18::i;:::-;15873:9;15866:16;;;;15627:263;;;;:::o;7931:399::-;8034:1;8015:21;;:7;:21;;;;8007:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;8085:49;8114:1;8118:7;8127:6;8085:20;:49::i;:::-;8163:6;8147:12;;:22;;;;;;;:::i;:::-;;;;;;;;8202:6;8180:9;:18;8190:7;8180:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;8245:7;8224:37;;8241:1;8224:37;;;8254:6;8224:37;;;;;;:::i;:::-;;;;;;;;8274:48;8302:1;8306:7;8315:6;8274:19;:48::i;:::-;7931:399;;:::o;9325:125::-;;;;:::o;9458:124::-;;;;:::o;23163:437::-;23216:7;23271:12;23254:29;;23262:4;23254:29;;;:66;;;;;23304:16;23287:13;:33;23254:66;23236:357;;;23354:24;23347:31;;;;23236:357;23435:146;23479:10;23512:12;23547:15;23435:21;:146::i;:::-;23411:170;;23163:437;;:::o;20942:273::-;21062:7;21164:15;21181:10;21135:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21107:100;;;;;;21087:120;;20942:273;;;;:::o;13485:1340::-;13593:7;13602:12;13852:2;13832:9;:16;:22;13828:990;;;13871:9;13895;13919:7;14128:4;14117:9;14113:20;14107:27;14102:32;;14178:4;14167:9;14163:20;14157:27;14152:32;;14236:4;14225:9;14221:20;14215:27;14212:1;14207:36;14202:41;;14279:25;14290:4;14296:1;14299;14302;14279:10;:25::i;:::-;14272:32;;;;;;;;;13828:990;14346:2;14326:9;:16;:22;14322:496;;;14365:9;14389:10;14601:4;14590:9;14586:20;14580:27;14575:32;;14652:4;14641:9;14637:20;14631:27;14625:33;;14694:23;14705:4;14711:1;14714:2;14694:10;:23::i;:::-;14687:30;;;;;;;;14322:496;14766:1;14770:35;14750:56;;;;13485:1340;;;;;;:::o;11756:643::-;11834:20;11825:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;11821:571;;;11871:7;;11821:571;11932:29;11923:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;11919:473;;;11978:34;;;;;;;;;;:::i;:::-;;;;;;;;11919:473;12043:35;12034:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;12030:362;;;12095:41;;;;;;;;;;:::i;:::-;;;;;;;;12030:362;12167:30;12158:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;12154:238;;;12214:44;;;;;;;;;;:::i;:::-;;;;;;;;12154:238;12289:30;12280:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;12276:116;;;12336:44;;;;;;;;;;:::i;:::-;;;;;;;;12276:116;11756:643;;:::o;23608:432::-;23752:7;23853:8;23884;23915:11;23949:13;23993:4;23820:197;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23792:240;;;;;;23772:260;;23608:432;;;;;:::o;17207:1669::-;17338:7;17347:12;18299:66;18281:1;18273:10;;:92;18255:200;;;18408:1;18412:30;18392:51;;;;;;18255:200;18474:2;18469:1;:7;;;;:18;;;;;18485:2;18480:1;:7;;;;18469:18;18465:102;;;18520:1;18524:30;18504:51;;;;;;18465:102;18664:14;18681:24;18691:4;18697:1;18700;18703;18681:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18664:41;;18738:1;18720:20;;:6;:20;;;18716:103;;;18773:1;18777:29;18757:50;;;;;;;18716:103;18839:6;18847:20;18831:37;;;;;17207:1669;;;;;;;;:::o;16153:440::-;16267:7;16276:12;16301:9;16321:7;16411:66;16390:2;16368:124;16363:129;;16529:2;16524;16519:3;16515:12;16511:21;16506:26;;16560:25;16571:4;16577:1;16580;16583;16560:10;:25::i;:::-;16553:32;;;;;;16153:440;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;581:338::-;636:5;685:3;678:4;670:6;666:17;662:27;652:122;;693:79;;:::i;:::-;652:122;810:6;797:20;835:78;909:3;901:6;894:4;886:6;882:17;835:78;:::i;:::-;826:87;;642:277;581:338;;;;:::o;925:139::-;971:5;1009:6;996:20;987:29;;1025:33;1052:5;1025:33;:::i;:::-;925:139;;;;:::o;1070:329::-;1129:6;1178:2;1166:9;1157:7;1153:23;1149:32;1146:119;;;1184:79;;:::i;:::-;1146:119;1304:1;1329:53;1374:7;1365:6;1354:9;1350:22;1329:53;:::i;:::-;1319:63;;1275:117;1070:329;;;;:::o;1405:474::-;1473:6;1481;1530:2;1518:9;1509:7;1505:23;1501:32;1498:119;;;1536:79;;:::i;:::-;1498:119;1656:1;1681:53;1726:7;1717:6;1706:9;1702:22;1681:53;:::i;:::-;1671:63;;1627:117;1783:2;1809:53;1854:7;1845:6;1834:9;1830:22;1809:53;:::i;:::-;1799:63;;1754:118;1405:474;;;;;:::o;1885:619::-;1962:6;1970;1978;2027:2;2015:9;2006:7;2002:23;1998:32;1995:119;;;2033:79;;:::i;:::-;1995:119;2153:1;2178:53;2223:7;2214:6;2203:9;2199:22;2178:53;:::i;:::-;2168:63;;2124:117;2280:2;2306:53;2351:7;2342:6;2331:9;2327:22;2306:53;:::i;:::-;2296:63;;2251:118;2408:2;2434:53;2479:7;2470:6;2459:9;2455:22;2434:53;:::i;:::-;2424:63;;2379:118;1885:619;;;;;:::o;2510:474::-;2578:6;2586;2635:2;2623:9;2614:7;2610:23;2606:32;2603:119;;;2641:79;;:::i;:::-;2603:119;2761:1;2786:53;2831:7;2822:6;2811:9;2807:22;2786:53;:::i;:::-;2776:63;;2732:117;2888:2;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2859:118;2510:474;;;;;:::o;2990:652::-;3067:6;3075;3124:2;3112:9;3103:7;3099:23;3095:32;3092:119;;;3130:79;;:::i;:::-;3092:119;3250:1;3275:53;3320:7;3311:6;3300:9;3296:22;3275:53;:::i;:::-;3265:63;;3221:117;3405:2;3394:9;3390:18;3377:32;3436:18;3428:6;3425:30;3422:117;;;3458:79;;:::i;:::-;3422:117;3563:62;3617:7;3608:6;3597:9;3593:22;3563:62;:::i;:::-;3553:72;;3348:287;2990:652;;;;;:::o;3648:118::-;3735:24;3753:5;3735:24;:::i;:::-;3730:3;3723:37;3648:118;;:::o;3772:109::-;3853:21;3868:5;3853:21;:::i;:::-;3848:3;3841:34;3772:109;;:::o;3887:118::-;3974:24;3992:5;3974:24;:::i;:::-;3969:3;3962:37;3887:118;;:::o;4011:157::-;4116:45;4136:24;4154:5;4136:24;:::i;:::-;4116:45;:::i;:::-;4111:3;4104:58;4011:157;;:::o;4174:364::-;4262:3;4290:39;4323:5;4290:39;:::i;:::-;4345:71;4409:6;4404:3;4345:71;:::i;:::-;4338:78;;4425:52;4470:6;4465:3;4458:4;4451:5;4447:16;4425:52;:::i;:::-;4502:29;4524:6;4502:29;:::i;:::-;4497:3;4493:39;4486:46;;4266:272;4174:364;;;;:::o;4544:366::-;4686:3;4707:67;4771:2;4766:3;4707:67;:::i;:::-;4700:74;;4783:93;4872:3;4783:93;:::i;:::-;4901:2;4896:3;4892:12;4885:19;;4544:366;;;:::o;4916:::-;5058:3;5079:67;5143:2;5138:3;5079:67;:::i;:::-;5072:74;;5155:93;5244:3;5155:93;:::i;:::-;5273:2;5268:3;5264:12;5257:19;;4916:366;;;:::o;5288:::-;5430:3;5451:67;5515:2;5510:3;5451:67;:::i;:::-;5444:74;;5527:93;5616:3;5527:93;:::i;:::-;5645:2;5640:3;5636:12;5629:19;;5288:366;;;:::o;5660:::-;5802:3;5823:67;5887:2;5882:3;5823:67;:::i;:::-;5816:74;;5899:93;5988:3;5899:93;:::i;:::-;6017:2;6012:3;6008:12;6001:19;;5660:366;;;:::o;6032:::-;6174:3;6195:67;6259:2;6254:3;6195:67;:::i;:::-;6188:74;;6271:93;6360:3;6271:93;:::i;:::-;6389:2;6384:3;6380:12;6373:19;;6032:366;;;:::o;6404:::-;6546:3;6567:67;6631:2;6626:3;6567:67;:::i;:::-;6560:74;;6643:93;6732:3;6643:93;:::i;:::-;6761:2;6756:3;6752:12;6745:19;;6404:366;;;:::o;6776:::-;6918:3;6939:67;7003:2;6998:3;6939:67;:::i;:::-;6932:74;;7015:93;7104:3;7015:93;:::i;:::-;7133:2;7128:3;7124:12;7117:19;;6776:366;;;:::o;7148:400::-;7308:3;7329:84;7411:1;7406:3;7329:84;:::i;:::-;7322:91;;7422:93;7511:3;7422:93;:::i;:::-;7540:1;7535:3;7531:11;7524:18;;7148:400;;;:::o;7554:366::-;7696:3;7717:67;7781:2;7776:3;7717:67;:::i;:::-;7710:74;;7793:93;7882:3;7793:93;:::i;:::-;7911:2;7906:3;7902:12;7895:19;;7554:366;;;:::o;7926:::-;8068:3;8089:67;8153:2;8148:3;8089:67;:::i;:::-;8082:74;;8165:93;8254:3;8165:93;:::i;:::-;8283:2;8278:3;8274:12;8267:19;;7926:366;;;:::o;8298:::-;8440:3;8461:67;8525:2;8520:3;8461:67;:::i;:::-;8454:74;;8537:93;8626:3;8537:93;:::i;:::-;8655:2;8650:3;8646:12;8639:19;;8298:366;;;:::o;8670:::-;8812:3;8833:67;8897:2;8892:3;8833:67;:::i;:::-;8826:74;;8909:93;8998:3;8909:93;:::i;:::-;9027:2;9022:3;9018:12;9011:19;;8670:366;;;:::o;9042:::-;9184:3;9205:67;9269:2;9264:3;9205:67;:::i;:::-;9198:74;;9281:93;9370:3;9281:93;:::i;:::-;9399:2;9394:3;9390:12;9383:19;;9042:366;;;:::o;9414:::-;9556:3;9577:67;9641:2;9636:3;9577:67;:::i;:::-;9570:74;;9653:93;9742:3;9653:93;:::i;:::-;9771:2;9766:3;9762:12;9755:19;;9414:366;;;:::o;9786:::-;9928:3;9949:67;10013:2;10008:3;9949:67;:::i;:::-;9942:74;;10025:93;10114:3;10025:93;:::i;:::-;10143:2;10138:3;10134:12;10127:19;;9786:366;;;:::o;10158:::-;10300:3;10321:67;10385:2;10380:3;10321:67;:::i;:::-;10314:74;;10397:93;10486:3;10397:93;:::i;:::-;10515:2;10510:3;10506:12;10499:19;;10158:366;;;:::o;10530:::-;10672:3;10693:67;10757:2;10752:3;10693:67;:::i;:::-;10686:74;;10769:93;10858:3;10769:93;:::i;:::-;10887:2;10882:3;10878:12;10871:19;;10530:366;;;:::o;10902:::-;11044:3;11065:67;11129:2;11124:3;11065:67;:::i;:::-;11058:74;;11141:93;11230:3;11141:93;:::i;:::-;11259:2;11254:3;11250:12;11243:19;;10902:366;;;:::o;11274:::-;11416:3;11437:67;11501:2;11496:3;11437:67;:::i;:::-;11430:74;;11513:93;11602:3;11513:93;:::i;:::-;11631:2;11626:3;11622:12;11615:19;;11274:366;;;:::o;11646:118::-;11733:24;11751:5;11733:24;:::i;:::-;11728:3;11721:37;11646:118;;:::o;11770:112::-;11853:22;11869:5;11853:22;:::i;:::-;11848:3;11841:35;11770:112;;:::o;11888:663::-;12129:3;12151:148;12295:3;12151:148;:::i;:::-;12144:155;;12309:75;12380:3;12371:6;12309:75;:::i;:::-;12409:2;12404:3;12400:12;12393:19;;12422:75;12493:3;12484:6;12422:75;:::i;:::-;12522:2;12517:3;12513:12;12506:19;;12542:3;12535:10;;11888:663;;;;;:::o;12557:222::-;12650:4;12688:2;12677:9;12673:18;12665:26;;12701:71;12769:1;12758:9;12754:17;12745:6;12701:71;:::i;:::-;12557:222;;;;:::o;12785:210::-;12872:4;12910:2;12899:9;12895:18;12887:26;;12923:65;12985:1;12974:9;12970:17;12961:6;12923:65;:::i;:::-;12785:210;;;;:::o;13001:222::-;13094:4;13132:2;13121:9;13117:18;13109:26;;13145:71;13213:1;13202:9;13198:17;13189:6;13145:71;:::i;:::-;13001:222;;;;:::o;13229:553::-;13406:4;13444:3;13433:9;13429:19;13421:27;;13458:71;13526:1;13515:9;13511:17;13502:6;13458:71;:::i;:::-;13539:72;13607:2;13596:9;13592:18;13583:6;13539:72;:::i;:::-;13621;13689:2;13678:9;13674:18;13665:6;13621:72;:::i;:::-;13703;13771:2;13760:9;13756:18;13747:6;13703:72;:::i;:::-;13229:553;;;;;;;:::o;13788:664::-;13993:4;14031:3;14020:9;14016:19;14008:27;;14045:71;14113:1;14102:9;14098:17;14089:6;14045:71;:::i;:::-;14126:72;14194:2;14183:9;14179:18;14170:6;14126:72;:::i;:::-;14208;14276:2;14265:9;14261:18;14252:6;14208:72;:::i;:::-;14290;14358:2;14347:9;14343:18;14334:6;14290:72;:::i;:::-;14372:73;14440:3;14429:9;14425:19;14416:6;14372:73;:::i;:::-;13788:664;;;;;;;;:::o;14458:545::-;14631:4;14669:3;14658:9;14654:19;14646:27;;14683:71;14751:1;14740:9;14736:17;14727:6;14683:71;:::i;:::-;14764:68;14828:2;14817:9;14813:18;14804:6;14764:68;:::i;:::-;14842:72;14910:2;14899:9;14895:18;14886:6;14842:72;:::i;:::-;14924;14992:2;14981:9;14977:18;14968:6;14924:72;:::i;:::-;14458:545;;;;;;;:::o;15009:313::-;15122:4;15160:2;15149:9;15145:18;15137:26;;15209:9;15203:4;15199:20;15195:1;15184:9;15180:17;15173:47;15237:78;15310:4;15301:6;15237:78;:::i;:::-;15229:86;;15009:313;;;;:::o;15328:419::-;15494:4;15532:2;15521:9;15517:18;15509:26;;15581:9;15575:4;15571:20;15567:1;15556:9;15552:17;15545:47;15609:131;15735:4;15609:131;:::i;:::-;15601:139;;15328:419;;;:::o;15753:::-;15919:4;15957:2;15946:9;15942:18;15934:26;;16006:9;16000:4;15996:20;15992:1;15981:9;15977:17;15970:47;16034:131;16160:4;16034:131;:::i;:::-;16026:139;;15753:419;;;:::o;16178:::-;16344:4;16382:2;16371:9;16367:18;16359:26;;16431:9;16425:4;16421:20;16417:1;16406:9;16402:17;16395:47;16459:131;16585:4;16459:131;:::i;:::-;16451:139;;16178:419;;;:::o;16603:::-;16769:4;16807:2;16796:9;16792:18;16784:26;;16856:9;16850:4;16846:20;16842:1;16831:9;16827:17;16820:47;16884:131;17010:4;16884:131;:::i;:::-;16876:139;;16603:419;;;:::o;17028:::-;17194:4;17232:2;17221:9;17217:18;17209:26;;17281:9;17275:4;17271:20;17267:1;17256:9;17252:17;17245:47;17309:131;17435:4;17309:131;:::i;:::-;17301:139;;17028:419;;;:::o;17453:::-;17619:4;17657:2;17646:9;17642:18;17634:26;;17706:9;17700:4;17696:20;17692:1;17681:9;17677:17;17670:47;17734:131;17860:4;17734:131;:::i;:::-;17726:139;;17453:419;;;:::o;17878:::-;18044:4;18082:2;18071:9;18067:18;18059:26;;18131:9;18125:4;18121:20;18117:1;18106:9;18102:17;18095:47;18159:131;18285:4;18159:131;:::i;:::-;18151:139;;17878:419;;;:::o;18303:::-;18469:4;18507:2;18496:9;18492:18;18484:26;;18556:9;18550:4;18546:20;18542:1;18531:9;18527:17;18520:47;18584:131;18710:4;18584:131;:::i;:::-;18576:139;;18303:419;;;:::o;18728:::-;18894:4;18932:2;18921:9;18917:18;18909:26;;18981:9;18975:4;18971:20;18967:1;18956:9;18952:17;18945:47;19009:131;19135:4;19009:131;:::i;:::-;19001:139;;18728:419;;;:::o;19153:::-;19319:4;19357:2;19346:9;19342:18;19334:26;;19406:9;19400:4;19396:20;19392:1;19381:9;19377:17;19370:47;19434:131;19560:4;19434:131;:::i;:::-;19426:139;;19153:419;;;:::o;19578:::-;19744:4;19782:2;19771:9;19767:18;19759:26;;19831:9;19825:4;19821:20;19817:1;19806:9;19802:17;19795:47;19859:131;19985:4;19859:131;:::i;:::-;19851:139;;19578:419;;;:::o;20003:::-;20169:4;20207:2;20196:9;20192:18;20184:26;;20256:9;20250:4;20246:20;20242:1;20231:9;20227:17;20220:47;20284:131;20410:4;20284:131;:::i;:::-;20276:139;;20003:419;;;:::o;20428:::-;20594:4;20632:2;20621:9;20617:18;20609:26;;20681:9;20675:4;20671:20;20667:1;20656:9;20652:17;20645:47;20709:131;20835:4;20709:131;:::i;:::-;20701:139;;20428:419;;;:::o;20853:::-;21019:4;21057:2;21046:9;21042:18;21034:26;;21106:9;21100:4;21096:20;21092:1;21081:9;21077:17;21070:47;21134:131;21260:4;21134:131;:::i;:::-;21126:139;;20853:419;;;:::o;21278:::-;21444:4;21482:2;21471:9;21467:18;21459:26;;21531:9;21525:4;21521:20;21517:1;21506:9;21502:17;21495:47;21559:131;21685:4;21559:131;:::i;:::-;21551:139;;21278:419;;;:::o;21703:::-;21869:4;21907:2;21896:9;21892:18;21884:26;;21956:9;21950:4;21946:20;21942:1;21931:9;21927:17;21920:47;21984:131;22110:4;21984:131;:::i;:::-;21976:139;;21703:419;;;:::o;22128:::-;22294:4;22332:2;22321:9;22317:18;22309:26;;22381:9;22375:4;22371:20;22367:1;22356:9;22352:17;22345:47;22409:131;22535:4;22409:131;:::i;:::-;22401:139;;22128:419;;;:::o;22553:::-;22719:4;22757:2;22746:9;22742:18;22734:26;;22806:9;22800:4;22796:20;22792:1;22781:9;22777:17;22770:47;22834:131;22960:4;22834:131;:::i;:::-;22826:139;;22553:419;;;:::o;22978:222::-;23071:4;23109:2;23098:9;23094:18;23086:26;;23122:71;23190:1;23179:9;23175:17;23166:6;23122:71;:::i;:::-;22978:222;;;;:::o;23206:332::-;23327:4;23365:2;23354:9;23350:18;23342:26;;23378:71;23446:1;23435:9;23431:17;23422:6;23378:71;:::i;:::-;23459:72;23527:2;23516:9;23512:18;23503:6;23459:72;:::i;:::-;23206:332;;;;;:::o;23544:214::-;23633:4;23671:2;23660:9;23656:18;23648:26;;23684:67;23748:1;23737:9;23733:17;23724:6;23684:67;:::i;:::-;23544:214;;;;:::o;23764:129::-;23798:6;23825:20;;:::i;:::-;23815:30;;23854:33;23882:4;23874:6;23854:33;:::i;:::-;23764:129;;;:::o;23899:75::-;23932:6;23965:2;23959:9;23949:19;;23899:75;:::o;23980:307::-;24041:4;24131:18;24123:6;24120:30;24117:56;;;24153:18;;:::i;:::-;24117:56;24191:29;24213:6;24191:29;:::i;:::-;24183:37;;24275:4;24269;24265:15;24257:23;;23980:307;;;:::o;24293:99::-;24345:6;24379:5;24373:12;24363:22;;24293:99;;;:::o;24398:169::-;24482:11;24516:6;24511:3;24504:19;24556:4;24551:3;24547:14;24532:29;;24398:169;;;;:::o;24573:148::-;24675:11;24712:3;24697:18;;24573:148;;;;:::o;24727:305::-;24767:3;24786:20;24804:1;24786:20;:::i;:::-;24781:25;;24820:20;24838:1;24820:20;:::i;:::-;24815:25;;24974:1;24906:66;24902:74;24899:1;24896:81;24893:107;;;24980:18;;:::i;:::-;24893:107;25024:1;25021;25017:9;25010:16;;24727:305;;;;:::o;25038:185::-;25078:1;25095:20;25113:1;25095:20;:::i;:::-;25090:25;;25129:20;25147:1;25129:20;:::i;:::-;25124:25;;25168:1;25158:35;;25173:18;;:::i;:::-;25158:35;25215:1;25212;25208:9;25203:14;;25038:185;;;;:::o;25229:348::-;25269:7;25292:20;25310:1;25292:20;:::i;:::-;25287:25;;25326:20;25344:1;25326:20;:::i;:::-;25321:25;;25514:1;25446:66;25442:74;25439:1;25436:81;25431:1;25424:9;25417:17;25413:105;25410:131;;;25521:18;;:::i;:::-;25410:131;25569:1;25566;25562:9;25551:20;;25229:348;;;;:::o;25583:96::-;25620:7;25649:24;25667:5;25649:24;:::i;:::-;25638:35;;25583:96;;;:::o;25685:90::-;25719:7;25762:5;25755:13;25748:21;25737:32;;25685:90;;;:::o;25781:77::-;25818:7;25847:5;25836:16;;25781:77;;;:::o;25864:126::-;25901:7;25941:42;25934:5;25930:54;25919:65;;25864:126;;;:::o;25996:77::-;26033:7;26062:5;26051:16;;25996:77;;;:::o;26079:86::-;26114:7;26154:4;26147:5;26143:16;26132:27;;26079:86;;;:::o;26171:154::-;26255:6;26250:3;26245;26232:30;26317:1;26308:6;26303:3;26299:16;26292:27;26171:154;;;:::o;26331:307::-;26399:1;26409:113;26423:6;26420:1;26417:13;26409:113;;;26508:1;26503:3;26499:11;26493:18;26489:1;26484:3;26480:11;26473:39;26445:2;26442:1;26438:10;26433:15;;26409:113;;;26540:6;26537:1;26534:13;26531:101;;;26620:1;26611:6;26606:3;26602:16;26595:27;26531:101;26380:258;26331:307;;;:::o;26644:320::-;26688:6;26725:1;26719:4;26715:12;26705:22;;26772:1;26766:4;26762:12;26793:18;26783:81;;26849:4;26841:6;26837:17;26827:27;;26783:81;26911:2;26903:6;26900:14;26880:18;26877:38;26874:84;;;26930:18;;:::i;:::-;26874:84;26695:269;26644:320;;;:::o;26970:281::-;27053:27;27075:4;27053:27;:::i;:::-;27045:6;27041:40;27183:6;27171:10;27168:22;27147:18;27135:10;27132:34;27129:62;27126:88;;;27194:18;;:::i;:::-;27126:88;27234:10;27230:2;27223:22;27013:238;26970:281;;:::o;27257:79::-;27296:7;27325:5;27314:16;;27257:79;;;:::o;27342:180::-;27390:77;27387:1;27380:88;27487:4;27484:1;27477:15;27511:4;27508:1;27501:15;27528:180;27576:77;27573:1;27566:88;27673:4;27670:1;27663:15;27697:4;27694:1;27687:15;27714:180;27762:77;27759:1;27752:88;27859:4;27856:1;27849:15;27883:4;27880:1;27873:15;27900:180;27948:77;27945:1;27938:88;28045:4;28042:1;28035:15;28069:4;28066:1;28059:15;28086:180;28134:77;28131:1;28124:88;28231:4;28228:1;28221:15;28255:4;28252:1;28245:15;28272:117;28381:1;28378;28371:12;28395:117;28504:1;28501;28494:12;28518:117;28627:1;28624;28617:12;28641:117;28750:1;28747;28740:12;28764:102;28805:6;28856:2;28852:7;28847:2;28840:5;28836:14;28832:28;28822:38;;28764:102;;;:::o;28872:174::-;29012:26;29008:1;29000:6;28996:14;28989:50;28872:174;:::o;29052:222::-;29192:34;29188:1;29180:6;29176:14;29169:58;29261:5;29256:2;29248:6;29244:15;29237:30;29052:222;:::o;29280:177::-;29420:29;29416:1;29408:6;29404:14;29397:53;29280:177;:::o;29463:180::-;29603:32;29599:1;29591:6;29587:14;29580:56;29463:180;:::o;29649:181::-;29789:33;29785:1;29777:6;29773:14;29766:57;29649:181;:::o;29836:177::-;29976:29;29972:1;29964:6;29960:14;29953:53;29836:177;:::o;30019:221::-;30159:34;30155:1;30147:6;30143:14;30136:58;30228:4;30223:2;30215:6;30211:15;30204:29;30019:221;:::o;30246:214::-;30386:66;30382:1;30374:6;30370:14;30363:90;30246:214;:::o;30466:225::-;30606:34;30602:1;30594:6;30590:14;30583:58;30675:8;30670:2;30662:6;30658:15;30651:33;30466:225;:::o;30697:221::-;30837:34;30833:1;30825:6;30821:14;30814:58;30906:4;30901:2;30893:6;30889:15;30882:29;30697:221;:::o;30924:179::-;31064:31;31060:1;31052:6;31048:14;31041:55;30924:179;:::o;31109:221::-;31249:34;31245:1;31237:6;31233:14;31226:58;31318:4;31313:2;31305:6;31301:15;31294:29;31109:221;:::o;31336:227::-;31476:34;31472:1;31464:6;31460:14;31453:58;31545:10;31540:2;31532:6;31528:15;31521:35;31336:227;:::o;31569:224::-;31709:34;31705:1;31697:6;31693:14;31686:58;31778:7;31773:2;31765:6;31761:15;31754:32;31569:224;:::o;31799:223::-;31939:34;31935:1;31927:6;31923:14;31916:58;32008:6;32003:2;31995:6;31991:15;31984:31;31799:223;:::o;32028:238::-;32168:34;32164:1;32156:6;32152:14;32145:58;32237:21;32232:2;32224:6;32220:15;32213:46;32028:238;:::o;32272:223::-;32412:34;32408:1;32400:6;32396:14;32389:58;32481:6;32476:2;32468:6;32464:15;32457:31;32272:223;:::o;32501:224::-;32641:34;32637:1;32629:6;32625:14;32618:58;32710:7;32705:2;32697:6;32693:15;32686:32;32501:224;:::o;32731:181::-;32871:33;32867:1;32859:6;32855:14;32848:57;32731:181;:::o;32918:122::-;32991:24;33009:5;32991:24;:::i;:::-;32984:5;32981:35;32971:63;;33030:1;33027;33020:12;32971:63;32918:122;:::o;33046:::-;33119:24;33137:5;33119:24;:::i;:::-;33112:5;33109:35;33099:63;;33158:1;33155;33148:12;33099:63;33046:122;:::o

Swarm Source

ipfs://bb2c3ea263a2c16c6b9415463feef470c244640df004677a7d9c084984afc22c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.