ETH Price: $3,448.46 (-0.21%)
Gas: 4 Gwei

Token

Aphra Finance (APHRA)
 

Overview

Max Total Supply

91,092,608 APHRA

Holders

643

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,696 APHRA

Value
$0.00
0xf09A3a27d6CC845C2e20dBcFA47D1764b038a5Fd
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:
AphraToken

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : AphraToken.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.8.10;

// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)



/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
} // OZ: MerkleProof

/// @notice Modern and gas-optimized ERC-20 + EIP-2612 implementation with COMP-style governance
/// @author Modified from Solmate (https://raw.githubusercontent.com/lexDAO/Kali/main/contracts/KaliDAOtoken.sol)
/// License-Identifier: AGPL-3.0-only
abstract contract DAOToken {
    /* ///////////////////////////////////////////////////////////////
    EVENTS
    //////////////////////////////////////////////////////////////*/

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

    event Approval(address indexed owner, address indexed spender, uint256 amount);

    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance);


    /* ///////////////////////////////////////////////////////////////
    ERRORS
    //////////////////////////////////////////////////////////////*/


    error NoArrayParity();

    error SignatureExpired();

    error NullAddress();

    error InvalidNonce();

    error NotDetermined();

    error InvalidSignature();

    error Uint32max();

    error Uint96max();

    /* ///////////////////////////////////////////////////////////////
    METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public constant decimals = 18;

    /* ///////////////////////////////////////////////////////////////
    ERC- 20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /* ///////////////////////////////////////////////////////////////
    EIP - 2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    bytes32 public constant PERMIT_TYPEHASH =
    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');

    uint256 internal INITIAL_CHAIN_ID;

    bytes32 internal INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /* ///////////////////////////////////////////////////////////////
    DAO STORAGE
    //////////////////////////////////////////////////////////////*/


    bytes32 public constant DELEGATION_TYPEHASH =
    keccak256('Delegation(address delegatee,uint256 nonce,uint256 deadline)');

    mapping(address => address) internal _delegates;

    mapping(address => mapping(uint256 => Checkpoint)) public checkpoints;

    mapping(address => uint256) public numCheckpoints;

    struct Checkpoint {
        uint32 fromTimestamp;
        uint96 votes;
    }

    /* ///////////////////////////////////////////////////////////////
    CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    function _init(
        string memory name_,
        string memory symbol_
    ) internal virtual {
        name = name_;

        symbol = symbol_;

        INITIAL_CHAIN_ID = block.chainid;

        INITIAL_DOMAIN_SEPARATOR = _computeDomainSeparator();
    }

    /* ///////////////////////////////////////////////////////////////
    ERC - 20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value
        unchecked {
            balanceOf[to] += amount;
        }

        _moveDelegates(delegates(msg.sender), delegates(to), amount);

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        if (allowance[from][msg.sender] != type(uint256).max)
            allowance[from][msg.sender] -= amount;

        balanceOf[from] -= amount;

        // cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value
        unchecked {
            balanceOf[to] += amount;
        }

        _moveDelegates(delegates(from), delegates(to), amount);

        emit Transfer(from, to, amount);

        return true;
    }

    /* ///////////////////////////////////////////////////////////////
    EIP - 2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        if (block.timestamp > deadline) revert SignatureExpired();

        // cannot realistically overflow on human timescales
        unchecked {
            bytes32 digest = keccak256(
                abi.encodePacked(
                    '\x19\x01',
                    DOMAIN_SEPARATOR(),
                    keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
                )
            );

            address recoveredAddress = ecrecover(digest, v, r, s);

            if (recoveredAddress == address(0) || recoveredAddress != owner) revert InvalidSignature();

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : _computeDomainSeparator();
    }

    function _computeDomainSeparator() internal view virtual returns (bytes32) {
        return
        keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes(name)),
                keccak256('1'),
                block.chainid,
                address(this)
            )
        );
    }

    /* ///////////////////////////////////////////////////////////////
    DAO LOGIC
    //////////////////////////////////////////////////////////////*/

    function delegates(address delegator) public view virtual returns (address) {
        address current = _delegates[delegator];

        return current == address(0) ? delegator : current;
    }

    function getCurrentVotes(address account) public view virtual returns (uint256) {
        // this is safe from underflow because decrement only occurs if `nCheckpoints` is positive
        unchecked {
            uint256 nCheckpoints = numCheckpoints[account];

            return nCheckpoints != 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
        }
    }

    function delegate(address delegatee) public virtual {
        _delegate(msg.sender, delegatee);
    }

    function delegateBySig(
        address delegatee,
        uint256 nonce,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        if (block.timestamp > deadline) revert SignatureExpired();

        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, deadline));

        bytes32 digest = keccak256(abi.encodePacked('\x19\x01', DOMAIN_SEPARATOR(), structHash));

        address signatory = ecrecover(digest, v, r, s);

        if (signatory == address(0)) revert NullAddress();

        // cannot realistically overflow on human timescales
        unchecked {
            if (nonce != nonces[signatory]++) revert InvalidNonce();
        }

        _delegate(signatory, delegatee);
    }

    function getPriorVotes(address account, uint256 timestamp) public view virtual returns (uint96) {
        if (block.timestamp <= timestamp) revert NotDetermined();

        uint256 nCheckpoints = numCheckpoints[account];

        if (nCheckpoints == 0) return 0;

        // this is safe from underflow because decrement only occurs if `nCheckpoints` is positive
        unchecked {
            if (checkpoints[account][nCheckpoints - 1].fromTimestamp <= timestamp)
                return checkpoints[account][nCheckpoints - 1].votes;

            if (checkpoints[account][0].fromTimestamp > timestamp) return 0;

            uint256 lower;

            // this is safe from underflow because decrement only occurs if `nCheckpoints` is positive
            uint256 upper = nCheckpoints - 1;

            while (upper > lower) {
                // this is safe from underflow because `upper` ceiling is provided
                uint256 center = upper - (upper - lower) / 2;

                Checkpoint memory cp = checkpoints[account][center];

                if (cp.fromTimestamp == timestamp) {
                    return cp.votes;
                } else if (cp.fromTimestamp < timestamp) {
                    lower = center;
                } else {
                    upper = center - 1;
                }
            }

            return checkpoints[account][lower].votes;

        }
    }

    function _delegate(address delegator, address delegatee) internal virtual {
        address currentDelegate = delegates(delegator);

        _delegates[delegator] = delegatee;

        _moveDelegates(currentDelegate, delegatee, balanceOf[delegator]);

        emit DelegateChanged(delegator, currentDelegate, delegatee);
    }

    function _moveDelegates(
        address srcRep,
        address dstRep,
        uint256 amount
    ) internal virtual {
        if (srcRep != dstRep && amount != 0)
            if (srcRep != address(0)) {
                uint256 srcRepNum = numCheckpoints[srcRep];

                uint256 srcRepOld = srcRepNum != 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;

                uint256 srcRepNew = srcRepOld - amount;

                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

        if (dstRep != address(0)) {
            uint256 dstRepNum = numCheckpoints[dstRep];

            uint256 dstRepOld = dstRepNum != 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;

            uint256 dstRepNew = dstRepOld + amount;

            _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
        }
    }

    function _writeCheckpoint(
        address delegatee,
        uint256 nCheckpoints,
        uint256 oldVotes,
        uint256 newVotes
    ) internal virtual {
        unchecked {
            // this is safe from underflow because decrement only occurs if `nCheckpoints` is positive
            if (nCheckpoints != 0 && checkpoints[delegatee][nCheckpoints - 1].fromTimestamp == block.timestamp) {
                checkpoints[delegatee][nCheckpoints - 1].votes = _safeCastTo96(newVotes);
            } else {
                checkpoints[delegatee][nCheckpoints] = Checkpoint(_safeCastTo32(block.timestamp), _safeCastTo96(newVotes));

                // cannot realistically overflow on human timescales
                numCheckpoints[delegatee] = nCheckpoints + 1;
            }
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    /* ///////////////////////////////////////////////////////////////
    MINT / BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value
        unchecked {
            balanceOf[to] += amount;
        }

        _moveDelegates(address(0), delegates(to), amount);

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // cannot underflow because a user's balance
        // will never be larger than the total supply
        unchecked {
            totalSupply -= amount;
        }

        _moveDelegates(delegates(from), address(0), amount);

        emit Transfer(from, address(0), amount);
    }

    function burn(uint256 amount) public virtual {
        _burn(msg.sender, amount);
    }

    /* ///////////////////////////////////////////////////////////////
    SAFECAST LOGIC
    //////////////////////////////////////////////////////////////*/

    function _safeCastTo32(uint256 x) internal pure virtual returns (uint32) {
        if (x > type(uint32).max) revert Uint32max();

        return uint32(x);
    }

    function _safeCastTo96(uint256 x) internal pure virtual returns (uint96) {
        if (x > type(uint96).max) revert Uint96max();

        return uint96(x);
    }
}

contract AphraToken is DAOToken {

    /// ============ Immutable storage ============

    bytes32 public immutable merkleRoot;

    /// ============ Mutable storage ============

    mapping(address => bool) public hasClaimed;

    address public minter;

    uint256 public mintingAllowedAfter;

    uint32 public constant minimumTimeBetweenMints = 1 days * 365;

    uint8 public constant mintCap = 3;

    /// ============ Errors ============
    error NotMinter();
    error NoMintYet();
    error MintCapExceeded(uint256 maxAllowed, uint256 mintAttempt);


    error AlreadyClaimed();
    error NotInMerkle();

    event MinterChanged(address indexed minter, address indexed newMinter);
    event Claim(address indexed to, uint256 amount);

    constructor(bytes32 merkleRoot_,
                address minter_,
                uint256 mintingAllowedAfter_
    ) {
        _init("Aphra Finance", "APHRA");
        merkleRoot = merkleRoot_;
        minter = minter_;
        mintingAllowedAfter = mintingAllowedAfter_;
        emit MinterChanged(address(0), minter);
    }

    function setMinter(address newMinter_) external {
        if (msg.sender != minter) revert NotMinter();
        minter = newMinter_;
        emit MinterChanged(newMinter_, minter);
    }

    function mint(uint256 rawAmount) external {
        if (msg.sender != minter) revert NotMinter();
        if (block.timestamp <= mintingAllowedAfter) revert NoMintYet();
        // record the mint
        mintingAllowedAfter = block.timestamp + minimumTimeBetweenMints;
        uint256 mintableBalance = ((totalSupply * mintCap) / 100);
        // mint the amount
        if (rawAmount > mintableBalance) revert MintCapExceeded(mintableBalance, rawAmount);
        // mint the amount
        _mint(minter, rawAmount);
    }

    function claim(address to, uint256 amount, bytes32[] calldata proof) external {
        // Throw if address has already claimed tokens
        if (hasClaimed[to]) revert AlreadyClaimed();

        // Verify merkle proof, or revert if not in tree
        bytes32 leaf = keccak256(abi.encodePacked(to, amount));
        bool isValidLeaf = MerkleProof.verify(proof, merkleRoot, leaf);
        if (!isValidLeaf) revert NotInMerkle();

        // Set address to claimed
        hasClaimed[to] = true;

        // Mint tokens to address
        _mint(to, amount);

        // Emit claim event
        emit Claim(to, amount);
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"},{"internalType":"address","name":"minter_","type":"address"},{"internalType":"uint256","name":"mintingAllowedAfter_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyClaimed","type":"error"},{"inputs":[],"name":"InvalidNonce","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"maxAllowed","type":"uint256"},{"internalType":"uint256","name":"mintAttempt","type":"uint256"}],"name":"MintCapExceeded","type":"error"},{"inputs":[],"name":"NoArrayParity","type":"error"},{"inputs":[],"name":"NoMintYet","type":"error"},{"inputs":[],"name":"NotDetermined","type":"error"},{"inputs":[],"name":"NotInMerkle","type":"error"},{"inputs":[],"name":"NotMinter","type":"error"},{"inputs":[],"name":"NullAddress","type":"error"},{"inputs":[],"name":"SignatureExpired","type":"error"},{"inputs":[],"name":"Uint32max","type":"error"},{"inputs":[],"name":"Uint96max","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromTimestamp","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTimeBetweenMints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintCap","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingAllowedAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMinter_","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b5060405162003984380380620039848339818101604052810190620000379190620003fc565b620000b36040518060400160405280600d81526020017f41706872612046696e616e6365000000000000000000000000000000000000008152506040518060400160405280600581526020017f41504852410000000000000000000000000000000000000000000000000000008152506200018960201b60201c565b826080818152505081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d81905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f660405160405180910390a350505062000611565b8160009080519060200190620001a19291906200026c565b508060019080519060200190620001ba9291906200026c565b5046600581905550620001d2620001dc60201b60201c565b6006819055505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405162000210919062000568565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6463060405160200162000251959493929190620005b4565b60405160208183030381529060405280519060200120905090565b8280546200027a9062000487565b90600052602060002090601f0160209004810192826200029e5760008555620002ea565b82601f10620002b957805160ff1916838001178555620002ea565b82800160010185558215620002ea579182015b82811115620002e9578251825591602001919060010190620002cc565b5b509050620002f99190620002fd565b5090565b5b8082111562000318576000816000905550600101620002fe565b5090565b600080fd5b6000819050919050565b620003368162000321565b81146200034257600080fd5b50565b60008151905062000356816200032b565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000389826200035c565b9050919050565b6200039b816200037c565b8114620003a757600080fd5b50565b600081519050620003bb8162000390565b92915050565b6000819050919050565b620003d681620003c1565b8114620003e257600080fd5b50565b600081519050620003f681620003cb565b92915050565b6000806000606084860312156200041857620004176200031c565b5b6000620004288682870162000345565b93505060206200043b86828701620003aa565b92505060406200044e86828701620003e5565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004a057607f821691505b60208210811415620004b757620004b662000458565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154620004ec8162000487565b620004f88186620004bd565b9450600182166000811462000516576001811462000528576200055f565b60ff198316865281860193506200055f565b6200053385620004c8565b60005b83811015620005575781548189015260018201915060208101905062000536565b838801955050505b50505092915050565b6000620005768284620004dd565b915081905092915050565b6200058c8162000321565b82525050565b6200059d81620003c1565b82525050565b620005ae816200037c565b82525050565b600060a082019050620005cb600083018862000581565b620005da602083018762000581565b620005e9604083018662000581565b620005f8606083018562000592565b620006076080830184620005a3565b9695505050505050565b6080516133506200063460003960008181610ac50152610c3101526133506000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80635c19a95c1161010f578063a0712d68116100a2578063d505accf11610071578063d505accf146105d1578063dd62ed3e146105ed578063e7a324dc1461061d578063fca3b5aa1461063b576101e5565b8063a0712d6814610539578063a9059cbb14610555578063b4b5ea5714610585578063c3cda520146105b5576101e5565b806376c71ca1116100de57806376c71ca11461049d578063782d6fe1146104bb5780637ecebe00146104eb57806395d89b411461051b576101e5565b80635c19a95c146103f15780636fcfff451461040d57806370a082311461043d57806373b2e80e1461046d576101e5565b806330adf81f116101875780633d13f874116101565780633d13f8741461036b57806342966c6814610387578063587cde1e146103a35780635c11d62f146103d3576101e5565b806330adf81f146102f357806330b36cef14610311578063313ce5671461032f5780633644e5151461034d576101e5565b80630cdfebfa116101c35780630cdfebfa1461025657806318160ddd1461028757806323b872dd146102a55780632eb4a7ab146102d5576101e5565b806306fdde03146101ea5780630754617214610208578063095ea7b314610226575b600080fd5b6101f2610657565b6040516101ff9190612786565b60405180910390f35b6102106106e5565b60405161021d91906127e9565b60405180910390f35b610240600480360381019061023b9190612870565b61070b565b60405161024d91906128cb565b60405180910390f35b610270600480360381019061026b9190612870565b6107fd565b60405161027e92919061292c565b60405180910390f35b61028f610856565b60405161029c9190612964565b60405180910390f35b6102bf60048036038101906102ba919061297f565b61085c565b6040516102cc91906128cb565b60405180910390f35b6102dd610ac3565b6040516102ea91906129eb565b60405180910390f35b6102fb610ae7565b60405161030891906129eb565b60405180910390f35b610319610b0b565b6040516103269190612964565b60405180910390f35b610337610b11565b6040516103449190612a22565b60405180910390f35b610355610b16565b60405161036291906129eb565b60405180910390f35b61038560048036038101906103809190612aa2565b610b37565b005b6103a1600480360381019061039c9190612b16565b610d47565b005b6103bd60048036038101906103b89190612b43565b610d54565b6040516103ca91906127e9565b60405180910390f35b6103db610dfd565b6040516103e89190612b70565b60405180910390f35b61040b60048036038101906104069190612b43565b610e05565b005b61042760048036038101906104229190612b43565b610e12565b6040516104349190612964565b60405180910390f35b61045760048036038101906104529190612b43565b610e2a565b6040516104649190612964565b60405180910390f35b61048760048036038101906104829190612b43565b610e42565b60405161049491906128cb565b60405180910390f35b6104a5610e62565b6040516104b29190612a22565b60405180910390f35b6104d560048036038101906104d09190612870565b610e67565b6040516104e29190612b8b565b60405180910390f35b61050560048036038101906105009190612b43565b611210565b6040516105129190612964565b60405180910390f35b610523611228565b6040516105309190612786565b60405180910390f35b610553600480360381019061054e9190612b16565b6112b6565b005b61056f600480360381019061056a9190612870565b61142d565b60405161057c91906128cb565b60405180910390f35b61059f600480360381019061059a9190612b43565b61155c565b6040516105ac9190612964565b60405180910390f35b6105cf60048036038101906105ca9190612bfe565b611637565b005b6105eb60048036038101906105e69190612c8b565b61184b565b005b61060760048036038101906106029190612d2d565b611b38565b6040516106149190612964565b60405180910390f35b610625611b5d565b60405161063291906129eb565b60405180910390f35b61065560048036038101906106509190612b43565b611b81565b005b6000805461066490612d9c565b80601f016020809104026020016040519081016040528092919081815260200182805461069090612d9c565b80156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b505050505081565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516107eb9190612964565b60405180910390a36001905092915050565b6009602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060000160049054906101000a90046bffffffffffffffffffffffff16905082565b60025481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146109955781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461098d9190612dfd565b925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109e49190612dfd565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550610a53610a4485610d54565b610a4d85610d54565b84611cc8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ab09190612964565b60405180910390a3600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600d5481565b601281565b60006005544614610b2e57610b29611f74565b610b32565b6006545b905090565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610bbb576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008484604051602001610bd0929190612e9a565b6040516020818303038152906040528051906020012090506000610c56848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050507f000000000000000000000000000000000000000000000000000000000000000084612000565b905080610c8f576040517f8a585be200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610cf18686612017565b8573ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d486604051610d379190612964565b60405180910390a2505050505050565b610d5133826120fb565b50565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610df35780610df5565b825b915050919050565b6301e1338081565b610e0f33826121df565b50565b600a6020528060005260406000206000915090505481565b60036020528060005260406000206000915090505481565b600b6020528060005260406000206000915054906101000a900460ff1681565b600381565b6000814211610ea2576040517fb1998e3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610ef957600091505061120a565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018403815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610fe357600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018303815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff1691505061120a565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16111561105e57600091505061120a565b6000806001830390505b8181111561119857600060028383038161108557611084612ec6565b5b04820390506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905086816000015163ffffffff1614156111705780602001519550505050505061120a565b86816000015163ffffffff16101561118a57819350611191565b6001820392505b5050611068565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff1693505050505b92915050565b60076020528060005260406000206000915090505481565b6001805461123590612d9c565b80601f016020809104026020016040519081016040528092919081815260200182805461126190612d9c565b80156112ae5780601f10611283576101008083540402835291602001916112ae565b820191906000526020600020905b81548152906001019060200180831161129157829003601f168201915b505050505081565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461133d576040517ff8d2906c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d544211611378576040517f8f34156a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6301e1338063ffffffff164261138e9190612ef5565b600d8190555060006064600360ff166002546113aa9190612f4b565b6113b49190612fa5565b9050808211156113fd5780826040517ff85c56560000000000000000000000000000000000000000000000000000000081526004016113f4929190612fd6565b60405180910390fd5b611429600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612017565b5050565b600081600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461147e9190612dfd565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506114ed6114de33610d54565b6114e785610d54565b84611cc8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161154a9190612964565b60405180910390a36001905092915050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114156115b1576000611621565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018303815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b6bffffffffffffffffffffffff16915050919050565b83421115611671576040517f0819bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f76995fe87be88484696cfd6792aeb71e0b61f81dfa3b641e5adffa38a0d3b8e28787876040516020016116aa9493929190612fff565b60405160208183030381529060405280519060200120905060006116cc610b16565b826040516020016116de9291906130bc565b60405160208183030381529060405280519060200120905060006001828787876040516000815260200160405260405161171b94939291906130f3565b6020604051602081039080840390855afa15801561173d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117b0576040517fe99d5ac500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558814611836576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611840818a6121df565b505050505050505050565b83421115611885576040517f0819bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061188f610b16565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9898989600760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558a60405160200161191796959493929190613138565b6040516020818303038152906040528051906020012060405160200161193e9291906130bc565b60405160208183030381529060405280519060200120905060006001828686866040516000815260200160405260405161197b94939291906130f3565b6020604051602081039080840390855afa15801561199d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611a1057508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611a47576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051611b279190612964565b60405180910390a350505050505050565b6004602052816000526040600020602052806000526040600020600091509150505481565b7f76995fe87be88484696cfd6792aeb71e0b61f81dfa3b641e5adffa38a0d3b8e281565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c08576040517ff8d2906c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f660405160405180910390a350565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d05575060008114155b15611e3d57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611e3c576000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600080821415611d93576000611e0c565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611de19190612dfd565b815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b6bffffffffffffffffffffffff16905060008382611e2a9190612dfd565b9050611e388684848461232a565b5050505b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611f6f576000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600080821415611ec6576000611f3f565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611f149190612dfd565b815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b6bffffffffffffffffffffffff16905060008382611f5d9190612ef5565b9050611f6b8584848461232a565b5050505b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051611fa69190613238565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc64630604051602001611fe595949392919061324f565b60405160208183030381529060405280519060200120905090565b60008261200d85846125c5565b1490509392505050565b80600260008282546120299190612ef5565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612091600061208b84610d54565b83611cc8565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120ef9190612964565b60405180910390a35050565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461214a9190612dfd565b925050819055508060026000828254039250508190555061217561216d83610d54565b600083611cc8565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121d39190612964565b60405180910390a35050565b60006121ea83610d54565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506122b48183600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cc8565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4505050565b600083141580156123a6575042600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018603815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b1561243d576123b48161263a565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018603815260200190815260200160002060000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061256f565b60405180604001604052806124514261268c565b63ffffffff1681526020016124658361263a565b6bffffffffffffffffffffffff16815250600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555090505060018301600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516125b7929190612fd6565b60405180910390a250505050565b60008082905060005b845181101561262f5760008582815181106125ec576125eb6132a2565b5b6020026020010151905080831161260e5761260783826126d6565b925061261b565b61261881846126d6565b92505b508080612627906132d1565b9150506125ce565b508091505092915050565b60006bffffffffffffffffffffffff8016821115612684576040517f39a21c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050919050565b600063ffffffff80168211156126ce576040517fec314e4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050919050565b600082600052816020526040600020905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561272757808201518184015260208101905061270c565b83811115612736576000848401525b50505050565b6000601f19601f8301169050919050565b6000612758826126ed565b61276281856126f8565b9350612772818560208601612709565b61277b8161273c565b840191505092915050565b600060208201905081810360008301526127a0818461274d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127d3826127a8565b9050919050565b6127e3816127c8565b82525050565b60006020820190506127fe60008301846127da565b92915050565b600080fd5b600080fd5b612817816127c8565b811461282257600080fd5b50565b6000813590506128348161280e565b92915050565b6000819050919050565b61284d8161283a565b811461285857600080fd5b50565b60008135905061286a81612844565b92915050565b6000806040838503121561288757612886612804565b5b600061289585828601612825565b92505060206128a68582860161285b565b9150509250929050565b60008115159050919050565b6128c5816128b0565b82525050565b60006020820190506128e060008301846128bc565b92915050565b600063ffffffff82169050919050565b6128ff816128e6565b82525050565b60006bffffffffffffffffffffffff82169050919050565b61292681612905565b82525050565b600060408201905061294160008301856128f6565b61294e602083018461291d565b9392505050565b61295e8161283a565b82525050565b60006020820190506129796000830184612955565b92915050565b60008060006060848603121561299857612997612804565b5b60006129a686828701612825565b93505060206129b786828701612825565b92505060406129c88682870161285b565b9150509250925092565b6000819050919050565b6129e5816129d2565b82525050565b6000602082019050612a0060008301846129dc565b92915050565b600060ff82169050919050565b612a1c81612a06565b82525050565b6000602082019050612a376000830184612a13565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612a6257612a61612a3d565b5b8235905067ffffffffffffffff811115612a7f57612a7e612a42565b5b602083019150836020820283011115612a9b57612a9a612a47565b5b9250929050565b60008060008060608587031215612abc57612abb612804565b5b6000612aca87828801612825565b9450506020612adb8782880161285b565b935050604085013567ffffffffffffffff811115612afc57612afb612809565b5b612b0887828801612a4c565b925092505092959194509250565b600060208284031215612b2c57612b2b612804565b5b6000612b3a8482850161285b565b91505092915050565b600060208284031215612b5957612b58612804565b5b6000612b6784828501612825565b91505092915050565b6000602082019050612b8560008301846128f6565b92915050565b6000602082019050612ba0600083018461291d565b92915050565b612baf81612a06565b8114612bba57600080fd5b50565b600081359050612bcc81612ba6565b92915050565b612bdb816129d2565b8114612be657600080fd5b50565b600081359050612bf881612bd2565b92915050565b60008060008060008060c08789031215612c1b57612c1a612804565b5b6000612c2989828a01612825565b9650506020612c3a89828a0161285b565b9550506040612c4b89828a0161285b565b9450506060612c5c89828a01612bbd565b9350506080612c6d89828a01612be9565b92505060a0612c7e89828a01612be9565b9150509295509295509295565b600080600080600080600060e0888a031215612caa57612ca9612804565b5b6000612cb88a828b01612825565b9750506020612cc98a828b01612825565b9650506040612cda8a828b0161285b565b9550506060612ceb8a828b0161285b565b9450506080612cfc8a828b01612bbd565b93505060a0612d0d8a828b01612be9565b92505060c0612d1e8a828b01612be9565b91505092959891949750929550565b60008060408385031215612d4457612d43612804565b5b6000612d5285828601612825565b9250506020612d6385828601612825565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612db457607f821691505b60208210811415612dc857612dc7612d6d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e088261283a565b9150612e138361283a565b925082821015612e2657612e25612dce565b5b828203905092915050565b60008160601b9050919050565b6000612e4982612e31565b9050919050565b6000612e5b82612e3e565b9050919050565b612e73612e6e826127c8565b612e50565b82525050565b6000819050919050565b612e94612e8f8261283a565b612e79565b82525050565b6000612ea68285612e62565b601482019150612eb68284612e83565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f008261283a565b9150612f0b8361283a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f4057612f3f612dce565b5b828201905092915050565b6000612f568261283a565b9150612f618361283a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f9a57612f99612dce565b5b828202905092915050565b6000612fb08261283a565b9150612fbb8361283a565b925082612fcb57612fca612ec6565b5b828204905092915050565b6000604082019050612feb6000830185612955565b612ff86020830184612955565b9392505050565b600060808201905061301460008301876129dc565b61302160208301866127da565b61302e6040830185612955565b61303b6060830184612955565b95945050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000613085600283613044565b91506130908261304f565b600282019050919050565b6000819050919050565b6130b66130b1826129d2565b61309b565b82525050565b60006130c782613078565b91506130d382856130a5565b6020820191506130e382846130a5565b6020820191508190509392505050565b600060808201905061310860008301876129dc565b6131156020830186612a13565b61312260408301856129dc565b61312f60608301846129dc565b95945050505050565b600060c08201905061314d60008301896129dc565b61315a60208301886127da565b61316760408301876127da565b6131746060830186612955565b6131816080830185612955565b61318e60a0830184612955565b979650505050505050565b600081905092915050565b60008190508160005260206000209050919050565b600081546131c681612d9c565b6131d08186613199565b945060018216600081146131eb57600181146131fc5761322f565b60ff1983168652818601935061322f565b613205856131a4565b60005b8381101561322757815481890152600182019150602081019050613208565b838801955050505b50505092915050565b600061324482846131b9565b915081905092915050565b600060a08201905061326460008301886129dc565b61327160208301876129dc565b61327e60408301866129dc565b61328b6060830185612955565b61329860808301846127da565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006132dc8261283a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561330f5761330e612dce565b5b60018201905091905056fea26469706673582212205214fa154921d7de4006ea3bc907d67fa1e2d165b717f2e0f31a91a3080ba44364736f6c634300080b003370a85e9e58cf7fab1406e94c0602a039da1b454d3b5ca2a51dea6001b6320d4d0000000000000000000000002101a22a8a6f2b60ef36013effcef56893cea9830000000000000000000000000000000000000000000000000000000063d31400

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80635c19a95c1161010f578063a0712d68116100a2578063d505accf11610071578063d505accf146105d1578063dd62ed3e146105ed578063e7a324dc1461061d578063fca3b5aa1461063b576101e5565b8063a0712d6814610539578063a9059cbb14610555578063b4b5ea5714610585578063c3cda520146105b5576101e5565b806376c71ca1116100de57806376c71ca11461049d578063782d6fe1146104bb5780637ecebe00146104eb57806395d89b411461051b576101e5565b80635c19a95c146103f15780636fcfff451461040d57806370a082311461043d57806373b2e80e1461046d576101e5565b806330adf81f116101875780633d13f874116101565780633d13f8741461036b57806342966c6814610387578063587cde1e146103a35780635c11d62f146103d3576101e5565b806330adf81f146102f357806330b36cef14610311578063313ce5671461032f5780633644e5151461034d576101e5565b80630cdfebfa116101c35780630cdfebfa1461025657806318160ddd1461028757806323b872dd146102a55780632eb4a7ab146102d5576101e5565b806306fdde03146101ea5780630754617214610208578063095ea7b314610226575b600080fd5b6101f2610657565b6040516101ff9190612786565b60405180910390f35b6102106106e5565b60405161021d91906127e9565b60405180910390f35b610240600480360381019061023b9190612870565b61070b565b60405161024d91906128cb565b60405180910390f35b610270600480360381019061026b9190612870565b6107fd565b60405161027e92919061292c565b60405180910390f35b61028f610856565b60405161029c9190612964565b60405180910390f35b6102bf60048036038101906102ba919061297f565b61085c565b6040516102cc91906128cb565b60405180910390f35b6102dd610ac3565b6040516102ea91906129eb565b60405180910390f35b6102fb610ae7565b60405161030891906129eb565b60405180910390f35b610319610b0b565b6040516103269190612964565b60405180910390f35b610337610b11565b6040516103449190612a22565b60405180910390f35b610355610b16565b60405161036291906129eb565b60405180910390f35b61038560048036038101906103809190612aa2565b610b37565b005b6103a1600480360381019061039c9190612b16565b610d47565b005b6103bd60048036038101906103b89190612b43565b610d54565b6040516103ca91906127e9565b60405180910390f35b6103db610dfd565b6040516103e89190612b70565b60405180910390f35b61040b60048036038101906104069190612b43565b610e05565b005b61042760048036038101906104229190612b43565b610e12565b6040516104349190612964565b60405180910390f35b61045760048036038101906104529190612b43565b610e2a565b6040516104649190612964565b60405180910390f35b61048760048036038101906104829190612b43565b610e42565b60405161049491906128cb565b60405180910390f35b6104a5610e62565b6040516104b29190612a22565b60405180910390f35b6104d560048036038101906104d09190612870565b610e67565b6040516104e29190612b8b565b60405180910390f35b61050560048036038101906105009190612b43565b611210565b6040516105129190612964565b60405180910390f35b610523611228565b6040516105309190612786565b60405180910390f35b610553600480360381019061054e9190612b16565b6112b6565b005b61056f600480360381019061056a9190612870565b61142d565b60405161057c91906128cb565b60405180910390f35b61059f600480360381019061059a9190612b43565b61155c565b6040516105ac9190612964565b60405180910390f35b6105cf60048036038101906105ca9190612bfe565b611637565b005b6105eb60048036038101906105e69190612c8b565b61184b565b005b61060760048036038101906106029190612d2d565b611b38565b6040516106149190612964565b60405180910390f35b610625611b5d565b60405161063291906129eb565b60405180910390f35b61065560048036038101906106509190612b43565b611b81565b005b6000805461066490612d9c565b80601f016020809104026020016040519081016040528092919081815260200182805461069090612d9c565b80156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b505050505081565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516107eb9190612964565b60405180910390a36001905092915050565b6009602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060000160049054906101000a90046bffffffffffffffffffffffff16905082565b60025481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146109955781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461098d9190612dfd565b925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109e49190612dfd565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550610a53610a4485610d54565b610a4d85610d54565b84611cc8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ab09190612964565b60405180910390a3600190509392505050565b7f70a85e9e58cf7fab1406e94c0602a039da1b454d3b5ca2a51dea6001b6320d4d81565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600d5481565b601281565b60006005544614610b2e57610b29611f74565b610b32565b6006545b905090565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610bbb576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008484604051602001610bd0929190612e9a565b6040516020818303038152906040528051906020012090506000610c56848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050507f70a85e9e58cf7fab1406e94c0602a039da1b454d3b5ca2a51dea6001b6320d4d84612000565b905080610c8f576040517f8a585be200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610cf18686612017565b8573ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d486604051610d379190612964565b60405180910390a2505050505050565b610d5133826120fb565b50565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610df35780610df5565b825b915050919050565b6301e1338081565b610e0f33826121df565b50565b600a6020528060005260406000206000915090505481565b60036020528060005260406000206000915090505481565b600b6020528060005260406000206000915054906101000a900460ff1681565b600381565b6000814211610ea2576040517fb1998e3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610ef957600091505061120a565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018403815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610fe357600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018303815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff1691505061120a565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16111561105e57600091505061120a565b6000806001830390505b8181111561119857600060028383038161108557611084612ec6565b5b04820390506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905086816000015163ffffffff1614156111705780602001519550505050505061120a565b86816000015163ffffffff16101561118a57819350611191565b6001820392505b5050611068565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff1693505050505b92915050565b60076020528060005260406000206000915090505481565b6001805461123590612d9c565b80601f016020809104026020016040519081016040528092919081815260200182805461126190612d9c565b80156112ae5780601f10611283576101008083540402835291602001916112ae565b820191906000526020600020905b81548152906001019060200180831161129157829003601f168201915b505050505081565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461133d576040517ff8d2906c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d544211611378576040517f8f34156a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6301e1338063ffffffff164261138e9190612ef5565b600d8190555060006064600360ff166002546113aa9190612f4b565b6113b49190612fa5565b9050808211156113fd5780826040517ff85c56560000000000000000000000000000000000000000000000000000000081526004016113f4929190612fd6565b60405180910390fd5b611429600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612017565b5050565b600081600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461147e9190612dfd565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506114ed6114de33610d54565b6114e785610d54565b84611cc8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161154a9190612964565b60405180910390a36001905092915050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114156115b1576000611621565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018303815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b6bffffffffffffffffffffffff16915050919050565b83421115611671576040517f0819bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f76995fe87be88484696cfd6792aeb71e0b61f81dfa3b641e5adffa38a0d3b8e28787876040516020016116aa9493929190612fff565b60405160208183030381529060405280519060200120905060006116cc610b16565b826040516020016116de9291906130bc565b60405160208183030381529060405280519060200120905060006001828787876040516000815260200160405260405161171b94939291906130f3565b6020604051602081039080840390855afa15801561173d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117b0576040517fe99d5ac500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558814611836576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611840818a6121df565b505050505050505050565b83421115611885576040517f0819bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061188f610b16565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9898989600760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558a60405160200161191796959493929190613138565b6040516020818303038152906040528051906020012060405160200161193e9291906130bc565b60405160208183030381529060405280519060200120905060006001828686866040516000815260200160405260405161197b94939291906130f3565b6020604051602081039080840390855afa15801561199d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611a1057508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611a47576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051611b279190612964565b60405180910390a350505050505050565b6004602052816000526040600020602052806000526040600020600091509150505481565b7f76995fe87be88484696cfd6792aeb71e0b61f81dfa3b641e5adffa38a0d3b8e281565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c08576040517ff8d2906c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f660405160405180910390a350565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d05575060008114155b15611e3d57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611e3c576000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600080821415611d93576000611e0c565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611de19190612dfd565b815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b6bffffffffffffffffffffffff16905060008382611e2a9190612dfd565b9050611e388684848461232a565b5050505b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611f6f576000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600080821415611ec6576000611f3f565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611f149190612dfd565b815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b6bffffffffffffffffffffffff16905060008382611f5d9190612ef5565b9050611f6b8584848461232a565b5050505b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051611fa69190613238565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc64630604051602001611fe595949392919061324f565b60405160208183030381529060405280519060200120905090565b60008261200d85846125c5565b1490509392505050565b80600260008282546120299190612ef5565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612091600061208b84610d54565b83611cc8565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120ef9190612964565b60405180910390a35050565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461214a9190612dfd565b925050819055508060026000828254039250508190555061217561216d83610d54565b600083611cc8565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121d39190612964565b60405180910390a35050565b60006121ea83610d54565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506122b48183600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cc8565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4505050565b600083141580156123a6575042600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018603815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b1561243d576123b48161263a565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018603815260200190815260200160002060000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061256f565b60405180604001604052806124514261268c565b63ffffffff1681526020016124658361263a565b6bffffffffffffffffffffffff16815250600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555090505060018301600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516125b7929190612fd6565b60405180910390a250505050565b60008082905060005b845181101561262f5760008582815181106125ec576125eb6132a2565b5b6020026020010151905080831161260e5761260783826126d6565b925061261b565b61261881846126d6565b92505b508080612627906132d1565b9150506125ce565b508091505092915050565b60006bffffffffffffffffffffffff8016821115612684576040517f39a21c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050919050565b600063ffffffff80168211156126ce576040517fec314e4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050919050565b600082600052816020526040600020905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561272757808201518184015260208101905061270c565b83811115612736576000848401525b50505050565b6000601f19601f8301169050919050565b6000612758826126ed565b61276281856126f8565b9350612772818560208601612709565b61277b8161273c565b840191505092915050565b600060208201905081810360008301526127a0818461274d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127d3826127a8565b9050919050565b6127e3816127c8565b82525050565b60006020820190506127fe60008301846127da565b92915050565b600080fd5b600080fd5b612817816127c8565b811461282257600080fd5b50565b6000813590506128348161280e565b92915050565b6000819050919050565b61284d8161283a565b811461285857600080fd5b50565b60008135905061286a81612844565b92915050565b6000806040838503121561288757612886612804565b5b600061289585828601612825565b92505060206128a68582860161285b565b9150509250929050565b60008115159050919050565b6128c5816128b0565b82525050565b60006020820190506128e060008301846128bc565b92915050565b600063ffffffff82169050919050565b6128ff816128e6565b82525050565b60006bffffffffffffffffffffffff82169050919050565b61292681612905565b82525050565b600060408201905061294160008301856128f6565b61294e602083018461291d565b9392505050565b61295e8161283a565b82525050565b60006020820190506129796000830184612955565b92915050565b60008060006060848603121561299857612997612804565b5b60006129a686828701612825565b93505060206129b786828701612825565b92505060406129c88682870161285b565b9150509250925092565b6000819050919050565b6129e5816129d2565b82525050565b6000602082019050612a0060008301846129dc565b92915050565b600060ff82169050919050565b612a1c81612a06565b82525050565b6000602082019050612a376000830184612a13565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612a6257612a61612a3d565b5b8235905067ffffffffffffffff811115612a7f57612a7e612a42565b5b602083019150836020820283011115612a9b57612a9a612a47565b5b9250929050565b60008060008060608587031215612abc57612abb612804565b5b6000612aca87828801612825565b9450506020612adb8782880161285b565b935050604085013567ffffffffffffffff811115612afc57612afb612809565b5b612b0887828801612a4c565b925092505092959194509250565b600060208284031215612b2c57612b2b612804565b5b6000612b3a8482850161285b565b91505092915050565b600060208284031215612b5957612b58612804565b5b6000612b6784828501612825565b91505092915050565b6000602082019050612b8560008301846128f6565b92915050565b6000602082019050612ba0600083018461291d565b92915050565b612baf81612a06565b8114612bba57600080fd5b50565b600081359050612bcc81612ba6565b92915050565b612bdb816129d2565b8114612be657600080fd5b50565b600081359050612bf881612bd2565b92915050565b60008060008060008060c08789031215612c1b57612c1a612804565b5b6000612c2989828a01612825565b9650506020612c3a89828a0161285b565b9550506040612c4b89828a0161285b565b9450506060612c5c89828a01612bbd565b9350506080612c6d89828a01612be9565b92505060a0612c7e89828a01612be9565b9150509295509295509295565b600080600080600080600060e0888a031215612caa57612ca9612804565b5b6000612cb88a828b01612825565b9750506020612cc98a828b01612825565b9650506040612cda8a828b0161285b565b9550506060612ceb8a828b0161285b565b9450506080612cfc8a828b01612bbd565b93505060a0612d0d8a828b01612be9565b92505060c0612d1e8a828b01612be9565b91505092959891949750929550565b60008060408385031215612d4457612d43612804565b5b6000612d5285828601612825565b9250506020612d6385828601612825565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612db457607f821691505b60208210811415612dc857612dc7612d6d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e088261283a565b9150612e138361283a565b925082821015612e2657612e25612dce565b5b828203905092915050565b60008160601b9050919050565b6000612e4982612e31565b9050919050565b6000612e5b82612e3e565b9050919050565b612e73612e6e826127c8565b612e50565b82525050565b6000819050919050565b612e94612e8f8261283a565b612e79565b82525050565b6000612ea68285612e62565b601482019150612eb68284612e83565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f008261283a565b9150612f0b8361283a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f4057612f3f612dce565b5b828201905092915050565b6000612f568261283a565b9150612f618361283a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f9a57612f99612dce565b5b828202905092915050565b6000612fb08261283a565b9150612fbb8361283a565b925082612fcb57612fca612ec6565b5b828204905092915050565b6000604082019050612feb6000830185612955565b612ff86020830184612955565b9392505050565b600060808201905061301460008301876129dc565b61302160208301866127da565b61302e6040830185612955565b61303b6060830184612955565b95945050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000613085600283613044565b91506130908261304f565b600282019050919050565b6000819050919050565b6130b66130b1826129d2565b61309b565b82525050565b60006130c782613078565b91506130d382856130a5565b6020820191506130e382846130a5565b6020820191508190509392505050565b600060808201905061310860008301876129dc565b6131156020830186612a13565b61312260408301856129dc565b61312f60608301846129dc565b95945050505050565b600060c08201905061314d60008301896129dc565b61315a60208301886127da565b61316760408301876127da565b6131746060830186612955565b6131816080830185612955565b61318e60a0830184612955565b979650505050505050565b600081905092915050565b60008190508160005260206000209050919050565b600081546131c681612d9c565b6131d08186613199565b945060018216600081146131eb57600181146131fc5761322f565b60ff1983168652818601935061322f565b613205856131a4565b60005b8381101561322757815481890152600182019150602081019050613208565b838801955050505b50505092915050565b600061324482846131b9565b915081905092915050565b600060a08201905061326460008301886129dc565b61327160208301876129dc565b61327e60408301866129dc565b61328b6060830185612955565b61329860808301846127da565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006132dc8261283a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561330f5761330e612dce565b5b60018201905091905056fea26469706673582212205214fa154921d7de4006ea3bc907d67fa1e2d165b717f2e0f31a91a3080ba44364736f6c634300080b0033

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

70a85e9e58cf7fab1406e94c0602a039da1b454d3b5ca2a51dea6001b6320d4d0000000000000000000000002101a22a8a6f2b60ef36013effcef56893cea9830000000000000000000000000000000000000000000000000000000063d31400

-----Decoded View---------------
Arg [0] : merkleRoot_ (bytes32): 0x70a85e9e58cf7fab1406e94c0602a039da1b454d3b5ca2a51dea6001b6320d4d
Arg [1] : minter_ (address): 0x2101a22A8A6f2b60eF36013eFFCef56893cea983
Arg [2] : mintingAllowedAfter_ (uint256): 1674777600

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 70a85e9e58cf7fab1406e94c0602a039da1b454d3b5ca2a51dea6001b6320d4d
Arg [1] : 0000000000000000000000002101a22a8a6f2b60ef36013effcef56893cea983
Arg [2] : 0000000000000000000000000000000000000000000000000000000063d31400


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.