ETH Price: $3,123.04 (-5.58%)
 

Overview

Max Total Supply

210,000,000,000,000 henlo

Holders

6,433

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
333,675,632.887157 henlo

Value
$0.00
0x3827891afb7f68f082899c6873aa8b846f14f995
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:
Henlo

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : Henlo.sol
// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.10;

/*
░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░▒▓███████▓▒░░▒▓█▓▒░      ░▒▓██████▓▒░       ░▒▓██████████████▓▒░░▒▓████████▓▒░▒▓██████████████▓▒░░▒▓████████▓▒░ 
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░     ░▒▓█▓▒░░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░        
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░     ░▒▓█▓▒░░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░        
░▒▓████████▓▒░▒▓██████▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░     ░▒▓█▓▒░░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓██████▓▒░ ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓██████▓▒░   
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░     ░▒▓█▓▒░░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░        
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░     ░▒▓█▓▒░░▒▓█▓▒░▒▓██▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░        
░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░▒▓██████▓▒░░▒▓██▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░                                                                                                                                    
*/


import "./utils/ECDSA.sol";

contract Henlo {
    /// @notice EIP-20 token name for this token
    string public constant name = "henlo";

    /// @notice EIP-20 token symbol for this token
    string public constant symbol = "henlo";

    /// @notice EIP-20 token decimals for this token
    uint8 public constant decimals = 9;

    /// @notice Total number of tokens in circulation
    uint public totalSupply = 210_000_000_000_000e9; // 210 T 

    /// @notice Allowance amounts on behalf of others
    mapping (address => mapping (address => uint96)) internal allowances;

    /// @notice Official record of token balances for each account
    mapping (address => uint96) internal balances;

    /// @notice A record of each accounts delegate
    mapping (address => address) public delegates;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint96 votes;
    }

 

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

    /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    /// @notice The standard EIP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint256 amount);

    /// @notice The standard EIP-20 approval event
    event Approval(address indexed owner, address indexed spender, uint256 amount);


    /**
     * @notice Construct a new Henlo token
     * @param account The initial account to grant all the tokens
     */
     constructor(address account) {

        balances[account] = uint96(totalSupply);
        emit Transfer(address(0), account, totalSupply);
    }




    /**
     * @notice Get the number of tokens `spender` is approved to spend on behalf of `account`
     * @param account The address of the account holding the funds
     * @param spender The address of the account spending the funds
     * @return The number of tokens approved
     */
    function allowance(address account, address spender) external view returns (uint) {
        return allowances[account][spender];
    }

    /**
     * @notice Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
     * @param spender The address of the account which may transfer tokens
     * @param rawAmount The number of tokens that are approved (2^256-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function approve(address spender, uint rawAmount) external returns (bool) {
        uint96 amount;
        if (rawAmount == type(uint).max) {
            amount = type(uint96).max;
        } else {
            amount = safe96(rawAmount, "Henlo::approve: amount exceeds 96 bits");
        }

        allowances[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);
        return true;
    }

    /**
     * @notice Get the number of tokens held by the `account`
     * @param account The address of the account to get the balance of
     * @return The number of tokens held
     */
    function balanceOf(address account) external view returns (uint) {
        return balances[account];
    }

    /**
     * @notice Transfer `amount` tokens from `msg.sender` to `dst`
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transfer(address dst, uint rawAmount) external returns (bool) {
        uint96 amount = safe96(rawAmount, "Henlo::transfer: amount exceeds 96 bits");
        _transferTokens(msg.sender, dst, amount);
        return true;
    }

    /**
     * @notice Transfer `amount` tokens from `src` to `dst`
     * @param src The address of the source account
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transferFrom(address src, address dst, uint rawAmount) external returns (bool) {
        address spender = msg.sender;
        uint96 spenderAllowance = allowances[src][spender];
        uint96 amount = safe96(rawAmount, "Henlo::transferFrom: amount exceeds 96 bits");

        if (spender != src && spenderAllowance != type(uint96).max) {
            uint96 newAllowance = sub96(spenderAllowance, amount, "Henlo::transferFrom: transfer amount exceeds spender allowance");
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

        _transferTokens(src, dst, amount);
        return true;
    }

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegatee The address to delegate votes to
     */
    function delegate(address delegatee) public {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ECDSA.recover(digest, v, r, s);
        require(signatory != address(0), "Henlo::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "Henlo::delegateBySig: invalid nonce");
        require(block.timestamp <= expiry, "Henlo::delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account) external view returns (uint96) {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint blockNumber) public view returns (uint96) {
        require(blockNumber < block.number, "Henlo::getPriorVotes: not yet determined");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = delegates[delegator];
        uint96 delegatorBalance = balances[delegator];
        delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _transferTokens(address src, address dst, uint96 amount) internal {
        require(src != address(0), "Henlo::_transferTokens: cannot transfer from the zero address");
        require(dst != address(0), "Henlo::_transferTokens: cannot transfer to the zero address");

        balances[src] = sub96(balances[src], amount, "Henlo::_transferTokens: transfer amount exceeds balance");
        balances[dst] = add96(balances[dst], amount, "Henlo::_transferTokens: transfer amount overflows");
        emit Transfer(src, dst, amount);

        _moveDelegates(delegates[src], delegates[dst], amount);
    }

    function _moveDelegates(address srcRep, address dstRep, uint96 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint96 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint96 srcRepNew = sub96(srcRepOld, amount, "Henlo::_moveVotes: vote amount underflows");
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint96 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint96 dstRepNew = add96(dstRepOld, amount, "Henlo::_moveVotes: vote amount overflows");
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint96 oldVotes, uint96 newVotes) internal {
      uint32 blockNumber = safe32(block.number, "Henlo::_writeCheckpoint: block number exceeds 32 bits");

      if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
          checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
      } else {
          checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
          numCheckpoints[delegatee] = nCheckpoints + 1;
      }

      emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function safe96(uint n, string memory errorMessage) internal pure returns (uint96) {
        require(n < 2**96, errorMessage);
        return uint96(n);
    }

    function add96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {
        uint96 c = a + b;
        require(c >= a, errorMessage);
        return c;
    }

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

    function getChainId() internal view returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

File 2 of 2 : ECDSA.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)

pragma solidity ^0.8.0;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV // Deprecated in v4.8
    }

    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");
        }
    }
 
    /**
     * @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 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;
    }


}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"account","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":"amount","type":"uint256"}],"name":"Approval","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":"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_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":"rawAmount","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":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","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":"expiry","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":"","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":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"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":"uint32","name":"","type":"uint32"}],"stateMutability":"view","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":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

6080604052692c781f708c509f4000005f5534801561001c575f80fd5b506040516132e93803806132e9833981810160405281019061003e9190610174565b5f5460025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f5460405161010891906101b7565b60405180910390a3506101d0565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101438261011a565b9050919050565b61015381610139565b811461015d575f80fd5b50565b5f8151905061016e8161014a565b92915050565b5f6020828403121561018957610188610116565b5b5f61019684828501610160565b91505092915050565b5f819050919050565b6101b18161019f565b82525050565b5f6020820190506101ca5f8301846101a8565b92915050565b61310c806101dd5f395ff3fe608060405234801561000f575f80fd5b506004361061011f575f3560e01c806370a08231116100ab578063b4b5ea571161006f578063b4b5ea5714610355578063c3cda52014610385578063dd62ed3e146103a1578063e7a324dc146103d1578063f1127ed8146103ef5761011f565b806370a0823114610277578063782d6fe1146102a75780637ecebe00146102d757806395d89b4114610307578063a9059cbb146103255761011f565b806323b872dd116100f257806323b872dd146101ad578063313ce567146101dd578063587cde1e146101fb5780635c19a95c1461022b5780636fcfff45146102475761011f565b806306fdde0314610123578063095ea7b31461014157806318160ddd1461017157806320606b701461018f575b5f80fd5b61012b610420565b6040516101389190612238565b60405180910390f35b61015b600480360381019061015691906122e9565b610459565b6040516101689190612341565b60405180910390f35b6101796105d1565b6040516101869190612369565b60405180910390f35b6101976105d6565b6040516101a4919061239a565b60405180910390f35b6101c760048036038101906101c291906123b3565b6105fa565b6040516101d49190612341565b60405180910390f35b6101e5610860565b6040516101f2919061241e565b60405180910390f35b61021560048036038101906102109190612437565b610865565b6040516102229190612471565b60405180910390f35b61024560048036038101906102409190612437565b610895565b005b610261600480360381019061025c9190612437565b6108a2565b60405161026e91906124a8565b60405180910390f35b610291600480360381019061028c9190612437565b6108c2565b60405161029e9190612369565b60405180910390f35b6102c160048036038101906102bc91906122e9565b61092d565b6040516102ce91906124e7565b60405180910390f35b6102f160048036038101906102ec9190612437565b610d3c565b6040516102fe9190612369565b60405180910390f35b61030f610d51565b60405161031c9190612238565b60405180910390f35b61033f600480360381019061033a91906122e9565b610d8a565b60405161034c9190612341565b60405180910390f35b61036f600480360381019061036a9190612437565b610dc6565b60405161037c91906124e7565b60405180910390f35b61039f600480360381019061039a9190612554565b610eb2565b005b6103bb60048036038101906103b691906125dd565b611129565b6040516103c89190612369565b60405180910390f35b6103d96111d0565b6040516103e6919061239a565b60405180910390f35b61040960048036038101906104049190612645565b6111f4565b604051610417929190612683565b60405180910390f35b6040518060400160405280600581526020017f68656e6c6f00000000000000000000000000000000000000000000000000000081525081565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303610496576bffffffffffffffffffffffff90506104bb565b6104b883604051806060016040528060268152602001612f3360269139611245565b90505b8060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516105be91906126e3565b60405180910390a3600191505092915050565b5f5481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b5f803390505f60015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046bffffffffffffffffffffffff1690505f6106b5856040518060600160405280602b8152602001612fcc602b9139611245565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561070f57506bffffffffffffffffffffffff8016826bffffffffffffffffffffffff1614155b15610847575f61073883836040518060600160405280603e8152602001612f59603e91396112a2565b90508060015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161083d91906126e3565b60405180910390a3505b61085287878361131b565b600193505050509392505050565b600981565b6003602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61089f33826116e6565b50565b6005602052805f5260405f205f915054906101000a900463ffffffff1681565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050919050565b5f438210610970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109679061276c565b60405180910390fd5b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900463ffffffff1690505f8163ffffffff16036109d6575f915050610d36565b8260045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600184610a2291906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff1611610adf5760045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600183610aa391906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a90046bffffffffffffffffffffffff16915050610d36565b8260045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8063ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff161115610b59575f915050610d36565b5f80600183610b6891906127b7565b90505b8163ffffffff168163ffffffff161115610cbd575f60028383610b8e91906127b7565b610b98919061281b565b82610ba391906127b7565b90505f60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8363ffffffff1663ffffffff1681526020019081526020015f206040518060400160405290815f82015f9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020015f820160049054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905086815f015163ffffffff1603610c8d57806020015195505050505050610d36565b86815f015163ffffffff161015610ca657819350610cb6565b600182610cb391906127b7565b92505b5050610b6b565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8363ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a90046bffffffffffffffffffffffff1693505050505b92915050565b6006602052805f5260405f205f915090505481565b6040518060400160405280600581526020017f68656e6c6f00000000000000000000000000000000000000000000000000000081525081565b5f80610dae83604051806060016040528060278152602001612ff760279139611245565b9050610dbb33858361131b565b600191505092915050565b5f8060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900463ffffffff1690505f8163ffffffff1611610e2a575f610eaa565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600183610e7591906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a90046bffffffffffffffffffffffff165b915050919050565b5f7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600581526020017f68656e6c6f00000000000000000000000000000000000000000000000000000081525080519060200120610f1961189b565b30604051602001610f2d949392919061284b565b6040516020818303038152906040528051906020012090505f7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001610f7d949392919061288e565b6040516020818303038152906040528051906020012090505f8282604051602001610fa9929190612945565b6040516020818303038152906040528051906020012090505f610fce828888886118a7565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611035906129eb565b60405180910390fd5b60065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061108b90612a09565b9190505589146110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790612ac0565b60405180910390fd5b87421115611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90612b4e565b60405180910390fd5b61111d818b6116e6565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6004602052815f5260405f20602052805f5260405f205f9150915050805f015f9054906101000a900463ffffffff1690805f0160049054906101000a90046bffffffffffffffffffffffff16905082565b5f6c0100000000000000000000000083108290611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f9190612238565b60405180910390fd5b5082905092915050565b5f836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc9190612238565b60405180910390fd5b5082846113129190612b6c565b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138090612c1b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90612ca9565b60405180910390fd5b61146e60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046bffffffffffffffffffffffff16826040518060600160405280603781526020016130a0603791396112a2565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061154f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046bffffffffffffffffffffffff168260405180606001604052806031815260200161301e603191396118d0565b60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161161691906126e3565b60405180910390a36116e160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361194e565b505050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046bffffffffffffffffffffffff1690508260035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461189582848361194e565b50505050565b5f804690508091505090565b5f805f6118b687878787611c40565b915091506118c381611d18565b8192505050949350505050565b5f8083856118de9190612cc7565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119399190612238565b60405180910390fd5b50809150509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561199757505f816bffffffffffffffffffffffff16115b15611c3b575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611aeb575f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900463ffffffff1690505f808263ffffffff1611611a33575f611ab3565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600184611a7e91906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a90046bffffffffffffffffffffffff165b90505f611ad9828560405180606001604052806029815260200161304f602991396112a2565b9050611ae786848484611e7d565b5050505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c3a575f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900463ffffffff1690505f808263ffffffff1611611b82575f611c02565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600184611bcd91906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a90046bffffffffffffffffffffffff165b90505f611c288285604051806060016040528060288152602001613078602891396118d0565b9050611c3685848484611e7d565b5050505b5b505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0835f1c1115611c78575f600391509150611d0f565b5f6001878787876040515f8152602001604052604051611c9b9493929190612d06565b6020604051602081039080840390855afa158015611cbb573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d07575f60019250925050611d0f565b805f92509250505b94509492505050565b5f6004811115611d2b57611d2a612d49565b5b816004811115611d3e57611d3d612d49565b5b0315611e7a5760016004811115611d5857611d57612d49565b5b816004811115611d6b57611d6a612d49565b5b03611dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da290612dc0565b60405180910390fd5b60026004811115611dbf57611dbe612d49565b5b816004811115611dd257611dd1612d49565b5b03611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0990612e28565b60405180910390fd5b60036004811115611e2657611e25612d49565b5b816004811115611e3957611e38612d49565b5b03611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7090612eb6565b60405180910390fd5b5b50565b5f611ea043604051806060016040528060358152602001612f9760359139612173565b90505f8463ffffffff16118015611f3757508063ffffffff1660045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600187611f0491906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff16145b15611fd6578160045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600187611f8891906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f0160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061211c565b60405180604001604052808263ffffffff168152602001836bffffffffffffffffffffffff1681525060045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8663ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a81548163ffffffff021916908363ffffffff1602179055506020820151815f0160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050506001846120c19190612ed4565b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612164929190612f0b565b60405180910390a25050505050565b5f640100000000831082906121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b59190612238565b60405180910390fd5b5082905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61220a826121c8565b61221481856121d2565b93506122248185602086016121e2565b61222d816121f0565b840191505092915050565b5f6020820190508181035f8301526122508184612200565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6122858261225c565b9050919050565b6122958161227b565b811461229f575f80fd5b50565b5f813590506122b08161228c565b92915050565b5f819050919050565b6122c8816122b6565b81146122d2575f80fd5b50565b5f813590506122e3816122bf565b92915050565b5f80604083850312156122ff576122fe612258565b5b5f61230c858286016122a2565b925050602061231d858286016122d5565b9150509250929050565b5f8115159050919050565b61233b81612327565b82525050565b5f6020820190506123545f830184612332565b92915050565b612363816122b6565b82525050565b5f60208201905061237c5f83018461235a565b92915050565b5f819050919050565b61239481612382565b82525050565b5f6020820190506123ad5f83018461238b565b92915050565b5f805f606084860312156123ca576123c9612258565b5b5f6123d7868287016122a2565b93505060206123e8868287016122a2565b92505060406123f9868287016122d5565b9150509250925092565b5f60ff82169050919050565b61241881612403565b82525050565b5f6020820190506124315f83018461240f565b92915050565b5f6020828403121561244c5761244b612258565b5b5f612459848285016122a2565b91505092915050565b61246b8161227b565b82525050565b5f6020820190506124845f830184612462565b92915050565b5f63ffffffff82169050919050565b6124a28161248a565b82525050565b5f6020820190506124bb5f830184612499565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b6124e1816124c1565b82525050565b5f6020820190506124fa5f8301846124d8565b92915050565b61250981612403565b8114612513575f80fd5b50565b5f8135905061252481612500565b92915050565b61253381612382565b811461253d575f80fd5b50565b5f8135905061254e8161252a565b92915050565b5f805f805f8060c0878903121561256e5761256d612258565b5b5f61257b89828a016122a2565b965050602061258c89828a016122d5565b955050604061259d89828a016122d5565b94505060606125ae89828a01612516565b93505060806125bf89828a01612540565b92505060a06125d089828a01612540565b9150509295509295509295565b5f80604083850312156125f3576125f2612258565b5b5f612600858286016122a2565b9250506020612611858286016122a2565b9150509250929050565b6126248161248a565b811461262e575f80fd5b50565b5f8135905061263f8161261b565b92915050565b5f806040838503121561265b5761265a612258565b5b5f612668858286016122a2565b925050602061267985828601612631565b9150509250929050565b5f6040820190506126965f830185612499565b6126a360208301846124d8565b9392505050565b5f819050919050565b5f6126cd6126c86126c3846124c1565b6126aa565b6122b6565b9050919050565b6126dd816126b3565b82525050565b5f6020820190506126f65f8301846126d4565b92915050565b7f48656e6c6f3a3a6765745072696f72566f7465733a206e6f74207965742064655f8201527f7465726d696e6564000000000000000000000000000000000000000000000000602082015250565b5f6127566028836121d2565b9150612761826126fc565b604082019050919050565b5f6020820190508181035f8301526127838161274a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127c18261248a565b91506127cc8361248a565b9250828203905063ffffffff8111156127e8576127e761278a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6128258261248a565b91506128308361248a565b9250826128405761283f6127ee565b5b828204905092915050565b5f60808201905061285e5f83018761238b565b61286b602083018661238b565b612878604083018561235a565b6128856060830184612462565b95945050505050565b5f6080820190506128a15f83018761238b565b6128ae6020830186612462565b6128bb604083018561235a565b6128c8606083018461235a565b95945050505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f61290f6002836128d1565b915061291a826128db565b600282019050919050565b5f819050919050565b61293f61293a82612382565b612925565b82525050565b5f61294f82612903565b915061295b828561292e565b60208201915061296b828461292e565b6020820191508190509392505050565b7f48656e6c6f3a3a64656c656761746542795369673a20696e76616c69642073695f8201527f676e617475726500000000000000000000000000000000000000000000000000602082015250565b5f6129d56027836121d2565b91506129e08261297b565b604082019050919050565b5f6020820190508181035f830152612a02816129c9565b9050919050565b5f612a13826122b6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a4557612a4461278a565b5b600182019050919050565b7f48656e6c6f3a3a64656c656761746542795369673a20696e76616c6964206e6f5f8201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b5f612aaa6023836121d2565b9150612ab582612a50565b604082019050919050565b5f6020820190508181035f830152612ad781612a9e565b9050919050565b7f48656e6c6f3a3a64656c656761746542795369673a207369676e6174757265205f8201527f6578706972656400000000000000000000000000000000000000000000000000602082015250565b5f612b386027836121d2565b9150612b4382612ade565b604082019050919050565b5f6020820190508181035f830152612b6581612b2c565b9050919050565b5f612b76826124c1565b9150612b81836124c1565b925082820390506bffffffffffffffffffffffff811115612ba557612ba461278a565b5b92915050565b7f48656e6c6f3a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420745f8201527f72616e736665722066726f6d20746865207a65726f2061646472657373000000602082015250565b5f612c05603d836121d2565b9150612c1082612bab565b604082019050919050565b5f6020820190508181035f830152612c3281612bf9565b9050919050565b7f48656e6c6f3a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420745f8201527f72616e7366657220746f20746865207a65726f20616464726573730000000000602082015250565b5f612c93603b836121d2565b9150612c9e82612c39565b604082019050919050565b5f6020820190508181035f830152612cc081612c87565b9050919050565b5f612cd1826124c1565b9150612cdc836124c1565b925082820190506bffffffffffffffffffffffff811115612d0057612cff61278a565b5b92915050565b5f608082019050612d195f83018761238b565b612d26602083018661240f565b612d33604083018561238b565b612d40606083018461238b565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f45434453413a20696e76616c6964207369676e617475726500000000000000005f82015250565b5f612daa6018836121d2565b9150612db582612d76565b602082019050919050565b5f6020820190508181035f830152612dd781612d9e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e677468005f82015250565b5f612e12601f836121d2565b9150612e1d82612dde565b602082019050919050565b5f6020820190508181035f830152612e3f81612e06565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c5f8201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b5f612ea06022836121d2565b9150612eab82612e46565b604082019050919050565b5f6020820190508181035f830152612ecd81612e94565b9050919050565b5f612ede8261248a565b9150612ee98361248a565b9250828201905063ffffffff811115612f0557612f0461278a565b5b92915050565b5f604082019050612f1e5f8301856126d4565b612f2b60208301846126d4565b939250505056fe48656e6c6f3a3a617070726f76653a20616d6f756e742065786365656473203936206269747348656e6c6f3a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e636548656e6c6f3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747348656e6c6f3a3a7472616e7366657246726f6d3a20616d6f756e742065786365656473203936206269747348656e6c6f3a3a7472616e736665723a20616d6f756e742065786365656473203936206269747348656e6c6f3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f777348656e6c6f3a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f777348656e6c6f3a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f777348656e6c6f3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a2646970667358221220d1c2a77247794c567b0cc5fdc7f6e6ca02ec0accf96a2dc6e2ed69fab881ca1764736f6c634300081a00330000000000000000000000006172f0ab84cd118ea8ea282a37178c34f86bf7e6

Deployed Bytecode

0x608060405234801561000f575f80fd5b506004361061011f575f3560e01c806370a08231116100ab578063b4b5ea571161006f578063b4b5ea5714610355578063c3cda52014610385578063dd62ed3e146103a1578063e7a324dc146103d1578063f1127ed8146103ef5761011f565b806370a0823114610277578063782d6fe1146102a75780637ecebe00146102d757806395d89b4114610307578063a9059cbb146103255761011f565b806323b872dd116100f257806323b872dd146101ad578063313ce567146101dd578063587cde1e146101fb5780635c19a95c1461022b5780636fcfff45146102475761011f565b806306fdde0314610123578063095ea7b31461014157806318160ddd1461017157806320606b701461018f575b5f80fd5b61012b610420565b6040516101389190612238565b60405180910390f35b61015b600480360381019061015691906122e9565b610459565b6040516101689190612341565b60405180910390f35b6101796105d1565b6040516101869190612369565b60405180910390f35b6101976105d6565b6040516101a4919061239a565b60405180910390f35b6101c760048036038101906101c291906123b3565b6105fa565b6040516101d49190612341565b60405180910390f35b6101e5610860565b6040516101f2919061241e565b60405180910390f35b61021560048036038101906102109190612437565b610865565b6040516102229190612471565b60405180910390f35b61024560048036038101906102409190612437565b610895565b005b610261600480360381019061025c9190612437565b6108a2565b60405161026e91906124a8565b60405180910390f35b610291600480360381019061028c9190612437565b6108c2565b60405161029e9190612369565b60405180910390f35b6102c160048036038101906102bc91906122e9565b61092d565b6040516102ce91906124e7565b60405180910390f35b6102f160048036038101906102ec9190612437565b610d3c565b6040516102fe9190612369565b60405180910390f35b61030f610d51565b60405161031c9190612238565b60405180910390f35b61033f600480360381019061033a91906122e9565b610d8a565b60405161034c9190612341565b60405180910390f35b61036f600480360381019061036a9190612437565b610dc6565b60405161037c91906124e7565b60405180910390f35b61039f600480360381019061039a9190612554565b610eb2565b005b6103bb60048036038101906103b691906125dd565b611129565b6040516103c89190612369565b60405180910390f35b6103d96111d0565b6040516103e6919061239a565b60405180910390f35b61040960048036038101906104049190612645565b6111f4565b604051610417929190612683565b60405180910390f35b6040518060400160405280600581526020017f68656e6c6f00000000000000000000000000000000000000000000000000000081525081565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303610496576bffffffffffffffffffffffff90506104bb565b6104b883604051806060016040528060268152602001612f3360269139611245565b90505b8060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516105be91906126e3565b60405180910390a3600191505092915050565b5f5481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b5f803390505f60015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046bffffffffffffffffffffffff1690505f6106b5856040518060600160405280602b8152602001612fcc602b9139611245565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561070f57506bffffffffffffffffffffffff8016826bffffffffffffffffffffffff1614155b15610847575f61073883836040518060600160405280603e8152602001612f59603e91396112a2565b90508060015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161083d91906126e3565b60405180910390a3505b61085287878361131b565b600193505050509392505050565b600981565b6003602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61089f33826116e6565b50565b6005602052805f5260405f205f915054906101000a900463ffffffff1681565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050919050565b5f438210610970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109679061276c565b60405180910390fd5b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900463ffffffff1690505f8163ffffffff16036109d6575f915050610d36565b8260045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600184610a2291906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff1611610adf5760045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600183610aa391906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a90046bffffffffffffffffffffffff16915050610d36565b8260045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8063ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff161115610b59575f915050610d36565b5f80600183610b6891906127b7565b90505b8163ffffffff168163ffffffff161115610cbd575f60028383610b8e91906127b7565b610b98919061281b565b82610ba391906127b7565b90505f60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8363ffffffff1663ffffffff1681526020019081526020015f206040518060400160405290815f82015f9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020015f820160049054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905086815f015163ffffffff1603610c8d57806020015195505050505050610d36565b86815f015163ffffffff161015610ca657819350610cb6565b600182610cb391906127b7565b92505b5050610b6b565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8363ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a90046bffffffffffffffffffffffff1693505050505b92915050565b6006602052805f5260405f205f915090505481565b6040518060400160405280600581526020017f68656e6c6f00000000000000000000000000000000000000000000000000000081525081565b5f80610dae83604051806060016040528060278152602001612ff760279139611245565b9050610dbb33858361131b565b600191505092915050565b5f8060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900463ffffffff1690505f8163ffffffff1611610e2a575f610eaa565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600183610e7591906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a90046bffffffffffffffffffffffff165b915050919050565b5f7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600581526020017f68656e6c6f00000000000000000000000000000000000000000000000000000081525080519060200120610f1961189b565b30604051602001610f2d949392919061284b565b6040516020818303038152906040528051906020012090505f7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001610f7d949392919061288e565b6040516020818303038152906040528051906020012090505f8282604051602001610fa9929190612945565b6040516020818303038152906040528051906020012090505f610fce828888886118a7565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611035906129eb565b60405180910390fd5b60065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061108b90612a09565b9190505589146110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790612ac0565b60405180910390fd5b87421115611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90612b4e565b60405180910390fd5b61111d818b6116e6565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6004602052815f5260405f20602052805f5260405f205f9150915050805f015f9054906101000a900463ffffffff1690805f0160049054906101000a90046bffffffffffffffffffffffff16905082565b5f6c0100000000000000000000000083108290611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f9190612238565b60405180910390fd5b5082905092915050565b5f836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc9190612238565b60405180910390fd5b5082846113129190612b6c565b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138090612c1b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90612ca9565b60405180910390fd5b61146e60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046bffffffffffffffffffffffff16826040518060600160405280603781526020016130a0603791396112a2565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061154f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046bffffffffffffffffffffffff168260405180606001604052806031815260200161301e603191396118d0565b60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161161691906126e3565b60405180910390a36116e160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361194e565b505050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046bffffffffffffffffffffffff1690508260035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461189582848361194e565b50505050565b5f804690508091505090565b5f805f6118b687878787611c40565b915091506118c381611d18565b8192505050949350505050565b5f8083856118de9190612cc7565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119399190612238565b60405180910390fd5b50809150509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561199757505f816bffffffffffffffffffffffff16115b15611c3b575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611aeb575f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900463ffffffff1690505f808263ffffffff1611611a33575f611ab3565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600184611a7e91906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a90046bffffffffffffffffffffffff165b90505f611ad9828560405180606001604052806029815260200161304f602991396112a2565b9050611ae786848484611e7d565b5050505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c3a575f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900463ffffffff1690505f808263ffffffff1611611b82575f611c02565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600184611bcd91906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a90046bffffffffffffffffffffffff165b90505f611c288285604051806060016040528060288152602001613078602891396118d0565b9050611c3685848484611e7d565b5050505b5b505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0835f1c1115611c78575f600391509150611d0f565b5f6001878787876040515f8152602001604052604051611c9b9493929190612d06565b6020604051602081039080840390855afa158015611cbb573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d07575f60019250925050611d0f565b805f92509250505b94509492505050565b5f6004811115611d2b57611d2a612d49565b5b816004811115611d3e57611d3d612d49565b5b0315611e7a5760016004811115611d5857611d57612d49565b5b816004811115611d6b57611d6a612d49565b5b03611dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da290612dc0565b60405180910390fd5b60026004811115611dbf57611dbe612d49565b5b816004811115611dd257611dd1612d49565b5b03611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0990612e28565b60405180910390fd5b60036004811115611e2657611e25612d49565b5b816004811115611e3957611e38612d49565b5b03611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7090612eb6565b60405180910390fd5b5b50565b5f611ea043604051806060016040528060358152602001612f9760359139612173565b90505f8463ffffffff16118015611f3757508063ffffffff1660045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600187611f0491906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff16145b15611fd6578160045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600187611f8891906127b7565b63ffffffff1663ffffffff1681526020019081526020015f205f0160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061211c565b60405180604001604052808263ffffffff168152602001836bffffffffffffffffffffffff1681525060045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8663ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a81548163ffffffff021916908363ffffffff1602179055506020820151815f0160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050506001846120c19190612ed4565b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612164929190612f0b565b60405180910390a25050505050565b5f640100000000831082906121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b59190612238565b60405180910390fd5b5082905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61220a826121c8565b61221481856121d2565b93506122248185602086016121e2565b61222d816121f0565b840191505092915050565b5f6020820190508181035f8301526122508184612200565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6122858261225c565b9050919050565b6122958161227b565b811461229f575f80fd5b50565b5f813590506122b08161228c565b92915050565b5f819050919050565b6122c8816122b6565b81146122d2575f80fd5b50565b5f813590506122e3816122bf565b92915050565b5f80604083850312156122ff576122fe612258565b5b5f61230c858286016122a2565b925050602061231d858286016122d5565b9150509250929050565b5f8115159050919050565b61233b81612327565b82525050565b5f6020820190506123545f830184612332565b92915050565b612363816122b6565b82525050565b5f60208201905061237c5f83018461235a565b92915050565b5f819050919050565b61239481612382565b82525050565b5f6020820190506123ad5f83018461238b565b92915050565b5f805f606084860312156123ca576123c9612258565b5b5f6123d7868287016122a2565b93505060206123e8868287016122a2565b92505060406123f9868287016122d5565b9150509250925092565b5f60ff82169050919050565b61241881612403565b82525050565b5f6020820190506124315f83018461240f565b92915050565b5f6020828403121561244c5761244b612258565b5b5f612459848285016122a2565b91505092915050565b61246b8161227b565b82525050565b5f6020820190506124845f830184612462565b92915050565b5f63ffffffff82169050919050565b6124a28161248a565b82525050565b5f6020820190506124bb5f830184612499565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b6124e1816124c1565b82525050565b5f6020820190506124fa5f8301846124d8565b92915050565b61250981612403565b8114612513575f80fd5b50565b5f8135905061252481612500565b92915050565b61253381612382565b811461253d575f80fd5b50565b5f8135905061254e8161252a565b92915050565b5f805f805f8060c0878903121561256e5761256d612258565b5b5f61257b89828a016122a2565b965050602061258c89828a016122d5565b955050604061259d89828a016122d5565b94505060606125ae89828a01612516565b93505060806125bf89828a01612540565b92505060a06125d089828a01612540565b9150509295509295509295565b5f80604083850312156125f3576125f2612258565b5b5f612600858286016122a2565b9250506020612611858286016122a2565b9150509250929050565b6126248161248a565b811461262e575f80fd5b50565b5f8135905061263f8161261b565b92915050565b5f806040838503121561265b5761265a612258565b5b5f612668858286016122a2565b925050602061267985828601612631565b9150509250929050565b5f6040820190506126965f830185612499565b6126a360208301846124d8565b9392505050565b5f819050919050565b5f6126cd6126c86126c3846124c1565b6126aa565b6122b6565b9050919050565b6126dd816126b3565b82525050565b5f6020820190506126f65f8301846126d4565b92915050565b7f48656e6c6f3a3a6765745072696f72566f7465733a206e6f74207965742064655f8201527f7465726d696e6564000000000000000000000000000000000000000000000000602082015250565b5f6127566028836121d2565b9150612761826126fc565b604082019050919050565b5f6020820190508181035f8301526127838161274a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127c18261248a565b91506127cc8361248a565b9250828203905063ffffffff8111156127e8576127e761278a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6128258261248a565b91506128308361248a565b9250826128405761283f6127ee565b5b828204905092915050565b5f60808201905061285e5f83018761238b565b61286b602083018661238b565b612878604083018561235a565b6128856060830184612462565b95945050505050565b5f6080820190506128a15f83018761238b565b6128ae6020830186612462565b6128bb604083018561235a565b6128c8606083018461235a565b95945050505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f61290f6002836128d1565b915061291a826128db565b600282019050919050565b5f819050919050565b61293f61293a82612382565b612925565b82525050565b5f61294f82612903565b915061295b828561292e565b60208201915061296b828461292e565b6020820191508190509392505050565b7f48656e6c6f3a3a64656c656761746542795369673a20696e76616c69642073695f8201527f676e617475726500000000000000000000000000000000000000000000000000602082015250565b5f6129d56027836121d2565b91506129e08261297b565b604082019050919050565b5f6020820190508181035f830152612a02816129c9565b9050919050565b5f612a13826122b6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a4557612a4461278a565b5b600182019050919050565b7f48656e6c6f3a3a64656c656761746542795369673a20696e76616c6964206e6f5f8201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b5f612aaa6023836121d2565b9150612ab582612a50565b604082019050919050565b5f6020820190508181035f830152612ad781612a9e565b9050919050565b7f48656e6c6f3a3a64656c656761746542795369673a207369676e6174757265205f8201527f6578706972656400000000000000000000000000000000000000000000000000602082015250565b5f612b386027836121d2565b9150612b4382612ade565b604082019050919050565b5f6020820190508181035f830152612b6581612b2c565b9050919050565b5f612b76826124c1565b9150612b81836124c1565b925082820390506bffffffffffffffffffffffff811115612ba557612ba461278a565b5b92915050565b7f48656e6c6f3a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420745f8201527f72616e736665722066726f6d20746865207a65726f2061646472657373000000602082015250565b5f612c05603d836121d2565b9150612c1082612bab565b604082019050919050565b5f6020820190508181035f830152612c3281612bf9565b9050919050565b7f48656e6c6f3a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420745f8201527f72616e7366657220746f20746865207a65726f20616464726573730000000000602082015250565b5f612c93603b836121d2565b9150612c9e82612c39565b604082019050919050565b5f6020820190508181035f830152612cc081612c87565b9050919050565b5f612cd1826124c1565b9150612cdc836124c1565b925082820190506bffffffffffffffffffffffff811115612d0057612cff61278a565b5b92915050565b5f608082019050612d195f83018761238b565b612d26602083018661240f565b612d33604083018561238b565b612d40606083018461238b565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f45434453413a20696e76616c6964207369676e617475726500000000000000005f82015250565b5f612daa6018836121d2565b9150612db582612d76565b602082019050919050565b5f6020820190508181035f830152612dd781612d9e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e677468005f82015250565b5f612e12601f836121d2565b9150612e1d82612dde565b602082019050919050565b5f6020820190508181035f830152612e3f81612e06565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c5f8201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b5f612ea06022836121d2565b9150612eab82612e46565b604082019050919050565b5f6020820190508181035f830152612ecd81612e94565b9050919050565b5f612ede8261248a565b9150612ee98361248a565b9250828201905063ffffffff811115612f0557612f0461278a565b5b92915050565b5f604082019050612f1e5f8301856126d4565b612f2b60208301846126d4565b939250505056fe48656e6c6f3a3a617070726f76653a20616d6f756e742065786365656473203936206269747348656e6c6f3a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e636548656e6c6f3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747348656e6c6f3a3a7472616e7366657246726f6d3a20616d6f756e742065786365656473203936206269747348656e6c6f3a3a7472616e736665723a20616d6f756e742065786365656473203936206269747348656e6c6f3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f777348656e6c6f3a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f777348656e6c6f3a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f777348656e6c6f3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a2646970667358221220d1c2a77247794c567b0cc5fdc7f6e6ca02ec0accf96a2dc6e2ed69fab881ca1764736f6c634300081a0033

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

0000000000000000000000006172f0ab84cd118ea8ea282a37178c34f86bf7e6

-----Decoded View---------------
Arg [0] : account (address): 0x6172F0ab84CD118eA8Ea282a37178c34f86bF7e6

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006172f0ab84cd118ea8ea282a37178c34f86bf7e6


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.