ETH Price: $2,430.41 (+4.54%)

Token

Momotaro (MOMO)
 

Overview

Max Total Supply

10,000,000,000,000 MOMO

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
40,767,570,680.103680861 MOMO

Value
$0.00
0x575f1a58e9325bbbfb8c93797698af8cfd845001
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:
MOMOTARO

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 888 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-07
*/

// File: ITreasuryHandler.sol


pragma solidity 0.8.11;

/**
 * @title Treasury handler interface
 * @dev Any class that implements this interface can be used for protocol-specific operations pertaining to the treasury.
 */
interface ITreasuryHandler {
    /**
     * @notice Perform operations before a transfer is executed.
     * @param benefactor Address of the benefactor.
     * @param beneficiary Address of the beneficiary.
     * @param amount Number of tokens in the transfer.
     */
    function beforeTransferHandler(
        address benefactor,
        address beneficiary,
        uint256 amount
    ) external;

    /**
     * @notice Perform operations after a transfer is executed.
     * @param benefactor Address of the benefactor.
     * @param beneficiary Address of the beneficiary.
     * @param amount Number of tokens in the transfer.
     */
    function afterTransferHandler(
        address benefactor,
        address beneficiary,
        uint256 amount
    ) external;
}
// File: ITaxHandler.sol


pragma solidity 0.8.11;

/**
 * @title Tax handler interface
 * @dev Any class that implements this interface can be used for protocol-specific tax calculations.
 */
interface ITaxHandler {
    /**
     * @notice Get number of tokens to pay as tax.
     * @param benefactor Address of the benefactor.
     * @param beneficiary Address of the beneficiary.
     * @param amount Number of tokens in the transfer.
     * @return Number of tokens to pay as tax.
     */
    function getTax(
        address benefactor,
        address beneficiary,
        uint256 amount
    ) external view returns (uint256);
}
// File: IGovernanceToken.sol


pragma solidity 0.8.11;

/**
 * @title Governance token interface.
 */
interface IGovernanceToken {
    /// @notice A checkpoint for marking number of votes as of a given block.
    struct Checkpoint {
        // The 32-bit unsigned integer is valid until these estimated dates for these given chains:
        //  - BSC: Sat Dec 23 2428 18:23:11 UTC
        //  - ETH: Tue Apr 18 3826 09:27:12 UTC
        // This assumes that block mining rates don't speed up.
        uint32 blockNumber;
        // This type is set to `uint224` for optimizations purposes (i.e., specifically to fit in a 32-byte block). It
        // assumes that the number of votes for the implementing governance token never exceeds the maximum value for a
        // 224-bit number.
        uint224 votes;
    }

    /**
     * @notice Determine the 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 getVotesAtBlock(address account, uint32 blockNumber) external view returns (uint224);

    /// @notice Emitted whenever a new delegate is set for an account.
    event DelegateChanged(address delegator, address currentDelegate, address newDelegate);

    /// @notice Emitted when a delegate's vote count changes.
    event DelegateVotesChanged(address delegatee, uint224 oldVotes, uint224 newVotes);
}
// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

// File: Momotaro.sol


pragma solidity 0.8.11;






/**
 * @title Momotaro token contract
 * @dev The Momotaro token has modular systems for tax and treasury handler as well as governance capabilities.
 */
contract MOMOTARO is IERC20, IGovernanceToken, Ownable {
    /// @dev Registry of user token balances.
    mapping(address => uint256) private _balances;

    /// @dev Registry of addresses users have given allowances to.
    mapping(address => mapping(address => uint256)) private _allowances;

    /// @notice Registry of user delegates for governance.
    mapping(address => address) public delegates;

    /// @notice Registry of nonces for vote delegation.
    mapping(address => uint256) public nonces;

    /// @notice Registry of the number of balance checkpoints an account has.
    mapping(address => uint32) public numCheckpoints;

    /// @notice Registry of balance checkpoints per account.
    mapping(address => mapping(uint32 => Checkpoint)) public checkpoints;

    /// @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 The contract implementing tax calculations.
    ITaxHandler public taxHandler;

    /// @notice The contract that performs treasury-related operations.
    ITreasuryHandler public treasuryHandler;

    /// @notice Emitted when the tax handler contract is changed.
    event TaxHandlerChanged(address oldAddress, address newAddress);

    /// @notice Emitted when the treasury handler contract is changed.
    event TreasuryHandlerChanged(address oldAddress, address newAddress);

    /// @dev Name of the token.
    string private _name;

    /// @dev Symbol of the token.
    string private _symbol;

    /**
     * @param name_ Name of the token.
     * @param symbol_ Symbol of the token.
     * @param taxHandlerAddress Initial tax handler contract.
     * @param treasuryHandlerAddress Initial treasury handler contract.
     */
    constructor(
        string memory name_,
        string memory symbol_,
        address taxHandlerAddress,
        address treasuryHandlerAddress
    ) {
        _name = name_;
        _symbol = symbol_;

        taxHandler = ITaxHandler(taxHandlerAddress);
        treasuryHandler = ITreasuryHandler(treasuryHandlerAddress);

        _balances[_msgSender()] = totalSupply();

        emit Transfer(address(0), _msgSender(), totalSupply());
    }

    /**
     * @notice Get token name.
     * @return Name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @notice Get token symbol.
     * @return Symbol of the token.
     */
    function symbol() external view returns (string memory) {
        return _symbol;
    }

    /**
     * @notice Get number of decimals used by the token.
     * @return Number of decimals used by the token.
     */
    function decimals() external pure returns (uint8) {
        return 9;
    }

    /**
     * @notice Get the maximum number of tokens.
     * @return The maximum number of tokens that will ever be in existence.
     */
    function totalSupply() public pure override returns (uint256) {
        // Ten trillion, i.e., 10,000,000,000,000 tokens.
        return 1e13 * 1e9;
    }

    /**
     * @notice Get token balance of given given account.
     * @param account Address to retrieve balance for.
     * @return The number of tokens owned by `account`.
     */
    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @notice Transfer tokens from caller's address to another.
     * @param recipient Address to send the caller's tokens to.
     * @param amount The number of tokens to transfer to recipient.
     * @return True if transfer succeeds, else an error is raised.
     */
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @notice Get the allowance `owner` has given `spender`.
     * @param owner The address on behalf of whom tokens can be spent by `spender`.
     * @param spender The address authorized to spend tokens on behalf of `owner`.
     * @return The allowance `owner` has given `spender`.
     */
    function allowance(address owner, address spender) external view override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @notice Approve address to spend caller's tokens.
     * @dev This method can be exploited by malicious spenders if their allowance is already non-zero. See the following
     * document for details: https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/edit.
     * Ensure the spender can be trusted before calling this method if they've already been approved before. Otherwise
     * use either the `increaseAllowance`/`decreaseAllowance` functions, or first set their allowance to zero, before
     * setting a new allowance.
     * @param spender Address to authorize for token expenditure.
     * @param amount The number of tokens `spender` is allowed to spend.
     * @return True if the approval succeeds, else an error is raised.
     */
    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @notice Transfer tokens from one address to another.
     * @param sender Address to move tokens from.
     * @param recipient Address to send the caller's tokens to.
     * @param amount The number of tokens to transfer to recipient.
     * @return True if the transfer succeeds, else an error is raised.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "MOMOTARO:transferFrom:ALLOWANCE_EXCEEDED: Transfer amount exceeds allowance."
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @notice Increase spender's allowance.
     * @param spender Address of user authorized to spend caller's tokens.
     * @param addedValue The number of tokens to add to `spender`'s allowance.
     * @return True if the allowance is successfully increased, else an error is raised.
     */
    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);

        return true;
    }

    /**
     * @notice Decrease spender's allowance.
     * @param spender Address of user authorized to spend caller's tokens.
     * @param subtractedValue The number of tokens to remove from `spender`'s allowance.
     * @return True if the allowance is successfully decreased, else an error is raised.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "MOMOTARO:decreaseAllowance:ALLOWANCE_UNDERFLOW: Subtraction results in sub-zero allowance."
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @notice Delegate votes to given address.
     * @dev It should be noted that users that want to vote themselves, also need to call this method, albeit with their
     * own address.
     * @param delegatee Address to delegate votes to.
     */
    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @notice Delegate 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,
        uint256 nonce,
        uint256 expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        bytes32 domainSeparator = keccak256(
            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name())), block.chainid, address(this))
        );
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);

        require(signatory != address(0), "MOMOTARO:delegateBySig:INVALID_SIGNATURE: Received signature was invalid.");
        require(block.timestamp <= expiry, "MOMOTARO:delegateBySig:EXPIRED_SIGNATURE: Received signature has expired.");
        require(nonce == nonces[signatory]++, "MOMOTARO:delegateBySig:INVALID_NONCE: Received nonce was invalid.");

        return _delegate(signatory, delegatee);
    }

    /**
     * @notice Determine the 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 getVotesAtBlock(address account, uint32 blockNumber) public view returns (uint224) {
        require(
            blockNumber < block.number,
            "MOMOTARO:getVotesAtBlock:FUTURE_BLOCK: Cannot get votes at a block in the future."
        );

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

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

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

        // Perform binary search.
        uint32 lowerBound = 0;
        uint32 upperBound = nCheckpoints - 1;
        while (upperBound > lowerBound) {
            uint32 center = upperBound - (upperBound - lowerBound) / 2;
            Checkpoint memory checkpoint = checkpoints[account][center];

            if (checkpoint.blockNumber == blockNumber) {
                return checkpoint.votes;
            } else if (checkpoint.blockNumber < blockNumber) {
                lowerBound = center;
            } else {
                upperBound = center - 1;
            }
        }

        // No exact block found. Use last known balance before that block number.
        return checkpoints[account][lowerBound].votes;
    }

    /**
     * @notice Set new tax handler contract.
     * @param taxHandlerAddress Address of new tax handler contract.
     */
    function setTaxHandler(address taxHandlerAddress) external onlyOwner {
        address oldTaxHandlerAddress = address(taxHandler);
        taxHandler = ITaxHandler(taxHandlerAddress);

        emit TaxHandlerChanged(oldTaxHandlerAddress, taxHandlerAddress);
    }

    /**
     * @notice Set new treasury handler contract.
     * @param treasuryHandlerAddress Address of new treasury handler contract.
     */
    function setTreasuryHandler(address treasuryHandlerAddress) external onlyOwner {
        address oldTreasuryHandlerAddress = address(treasuryHandler);
        treasuryHandler = ITreasuryHandler(treasuryHandlerAddress);

        emit TreasuryHandlerChanged(oldTreasuryHandlerAddress, treasuryHandlerAddress);
    }

    /**
     * @notice Delegate votes from one address to another.
     * @param delegator Address from which to delegate votes for.
     * @param delegatee Address to delegate votes to.
     */
    function _delegate(address delegator, address delegatee) private {
        address currentDelegate = delegates[delegator];
        uint256 delegatorBalance = _balances[delegator];
        delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, uint224(delegatorBalance));
    }

    /**
     * @notice Move delegates from one address to another.
     * @param from Representative to move delegates from.
     * @param to Representative to move delegates to.
     * @param amount Number of delegates to move.
     */
    function _moveDelegates(
        address from,
        address to,
        uint224 amount
    ) private {
        // No need to update checkpoints if the votes don't actually move between different delegates. This can be the
        // case where tokens are transferred between two parties that have delegated their votes to the same address.
        if (from == to) {
            return;
        }

        // Some users preemptively delegate their votes (i.e. before they have any tokens). No need to perform an update
        // to the checkpoints in that case.
        if (amount == 0) {
            return;
        }

        if (from != address(0)) {
            uint32 fromRepNum = numCheckpoints[from];
            uint224 fromRepOld = fromRepNum > 0 ? checkpoints[from][fromRepNum - 1].votes : 0;
            uint224 fromRepNew = fromRepOld - amount;

            _writeCheckpoint(from, fromRepNum, fromRepOld, fromRepNew);
        }

        if (to != address(0)) {
            uint32 toRepNum = numCheckpoints[to];
            uint224 toRepOld = toRepNum > 0 ? checkpoints[to][toRepNum - 1].votes : 0;
            uint224 toRepNew = toRepOld + amount;

            _writeCheckpoint(to, toRepNum, toRepOld, toRepNew);
        }
    }

    /**
     * @notice Write balance checkpoint to chain.
     * @param delegatee The address to write the checkpoint for.
     * @param nCheckpoints The number of checkpoints `delegatee` already has.
     * @param oldVotes Number of votes prior to this checkpoint.
     * @param newVotes Number of votes `delegatee` now has.
     */
    function _writeCheckpoint(
        address delegatee,
        uint32 nCheckpoints,
        uint224 oldVotes,
        uint224 newVotes
    ) private {
        uint32 blockNumber = uint32(block.number);

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

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    /**
     * @notice Approve spender on behalf of owner.
     * @param owner Address on behalf of whom tokens can be spent by `spender`.
     * @param spender Address to authorize for token expenditure.
     * @param amount The number of tokens `spender` is allowed to spend.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "MOMOTARO:_approve:OWNER_ZERO: Cannot approve for the zero address.");
        require(spender != address(0), "MOMOTARO:_approve:SPENDER_ZERO: Cannot approve to the zero address.");

        _allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

    /**
     * @notice Transfer `amount` tokens from account `from` to account `to`.
     * @param from Address the tokens are moved out of.
     * @param to Address the tokens are moved to.
     * @param amount The number of tokens to transfer.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "MOMOTARO:_transfer:FROM_ZERO: Cannot transfer from the zero address.");
        require(to != address(0), "MOMOTARO:_transfer:TO_ZERO: Cannot transfer to the zero address.");
        require(amount > 0, "MOMOTARO:_transfer:ZERO_AMOUNT: Transfer amount must be greater than zero.");
        require(amount <= _balances[from], "MOMOTARO:_transfer:INSUFFICIENT_BALANCE: Transfer amount exceeds balance.");

        treasuryHandler.beforeTransferHandler(from, to, amount);

        uint256 tax = taxHandler.getTax(from, to, amount);
        uint256 taxedAmount = amount - tax;

        _balances[from] -= amount;
        _balances[to] += taxedAmount;
        _moveDelegates(delegates[from], delegates[to], uint224(taxedAmount));

        if (tax > 0) {
            _balances[address(treasuryHandler)] += tax;

            _moveDelegates(delegates[from], delegates[address(treasuryHandler)], uint224(tax));

            emit Transfer(from, address(treasuryHandler), tax);
        }

        treasuryHandler.afterTransferHandler(from, to, amount);

        emit Transfer(from, to, taxedAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"taxHandlerAddress","type":"address"},{"internalType":"address","name":"treasuryHandlerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"delegator","type":"address"},{"indexed":false,"internalType":"address","name":"currentDelegate","type":"address"},{"indexed":false,"internalType":"address","name":"newDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"delegatee","type":"address"},{"indexed":false,"internalType":"uint224","name":"oldVotes","type":"uint224"},{"indexed":false,"internalType":"uint224","name":"newVotes","type":"uint224"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"TaxHandlerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"TreasuryHandlerChanged","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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"blockNumber","type":"uint32"},{"internalType":"uint224","name":"votes","type":"uint224"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"internalType":"uint32","name":"blockNumber","type":"uint32"}],"name":"getVotesAtBlock","outputs":[{"internalType":"uint224","name":"","type":"uint224"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"taxHandlerAddress","type":"address"}],"name":"setTaxHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasuryHandlerAddress","type":"address"}],"name":"setTreasuryHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxHandler","outputs":[{"internalType":"contract ITaxHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryHandler","outputs":[{"internalType":"contract ITreasuryHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620022b5380380620022b58339810160408190526200003491620002ff565b6200003f336200011f565b8351620000549060099060208701906200016f565b5082516200006a90600a9060208601906200016f565b50600780546001600160a01b038085166001600160a01b0319928316179092556008805492841692909116919091179055620000ad69021e19e0c9bab240000090565b60016000336001600160a01b03168152602081019190915260400160002055336001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69021e19e0c9bab240000060405190815260200160405180910390a350505050620003cb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200017d906200038e565b90600052602060002090601f016020900481019282620001a15760008555620001ec565b82601f10620001bc57805160ff1916838001178555620001ec565b82800160010185558215620001ec579182015b82811115620001ec578251825591602001919060010190620001cf565b50620001fa929150620001fe565b5090565b5b80821115620001fa5760008155600101620001ff565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200023d57600080fd5b81516001600160401b03808211156200025a576200025a62000215565b604051601f8301601f19908116603f0116810190828211818310171562000285576200028562000215565b81604052838152602092508683858801011115620002a257600080fd5b600091505b83821015620002c65785820183015181830184015290820190620002a7565b83821115620002d85760008385830101525b9695505050505050565b80516001600160a01b0381168114620002fa57600080fd5b919050565b600080600080608085870312156200031657600080fd5b84516001600160401b03808211156200032e57600080fd5b6200033c888389016200022b565b955060208701519150808211156200035357600080fd5b5062000362878288016200022b565b9350506200037360408601620002e2565b91506200038360608601620002e2565b905092959194509250565b600181811c90821680620003a357607f821691505b60208210811415620003c557634e487b7160e01b600052602260045260246000fd5b50919050565b611eda80620003db6000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636fcfff45116100f9578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e14610420578063e7a324dc14610459578063f1127ed814610480578063f2fde38b146104e857600080fd5b8063a9059cbb146103e7578063a9373b7b146103fa578063c3cda5201461040d57600080fd5b80637ecebe00116100d35780637ecebe001461039b5780638da5cb5b146103bb57806395d89b41146103cc578063a457c2d7146103d457600080fd5b80636fcfff451461032f57806370a082311461036a578063715018a61461039357600080fd5b806323b872dd11610166578063395093511161014057806339509351146102cb578063488d4a51146102de578063587cde1e146102f35780635c19a95c1461031c57600080fd5b806323b872dd1461027e578063271a452914610291578063313ce567146102bc57600080fd5b80631788963311610197578063178896331461022a57806318160ddd1461023d57806320606b701461025757600080fd5b806306fdde03146101be578063095ea7b3146101dc57806312280ba8146101ff575b600080fd5b6101c66104fb565b6040516101d39190611b64565b60405180910390f35b6101ef6101ea366004611bd5565b61058d565b60405190151581526020016101d3565b600754610212906001600160a01b031681565b6040516001600160a01b0390911681526020016101d3565b600854610212906001600160a01b031681565b69021e19e0c9bab24000005b6040519081526020016101d3565b6102497f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6101ef61028c366004611bff565b6105a4565b6102a461029f366004611c3b565b61068e565b6040516001600160e01b0390911681526020016101d3565b604051600981526020016101d3565b6101ef6102d9366004611bd5565b610968565b6102f16102ec366004611c7b565b6109a4565b005b610212610301366004611c7b565b6003602052600090815260409020546001600160a01b031681565b6102f161032a366004611c7b565b610a1a565b61035561033d366004611c7b565b60056020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101d3565b610249610378366004611c7b565b6001600160a01b031660009081526001602052604090205490565b6102f1610a27565b6102496103a9366004611c7b565b60046020526000908152604090205481565b6000546001600160a01b0316610212565b6101c6610a3b565b6101ef6103e2366004611bd5565b610a4a565b6101ef6103f5366004611bd5565b610b21565b6102f1610408366004611c7b565b610b2e565b6102f161041b366004611c9d565b610b9d565b61024961042e366004611cfd565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6102497fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6104c461048e366004611c3b565b600660209081526000928352604080842090915290825290205463ffffffff81169064010000000090046001600160e01b031682565b6040805163ffffffff90931683526001600160e01b039091166020830152016101d3565b6102f16104f6366004611c7b565b610f01565b60606009805461050a90611d30565b80601f016020809104026020016040519081016040528092919081815260200182805461053690611d30565b80156105835780601f1061055857610100808354040283529160200191610583565b820191906000526020600020905b81548152906001019060200180831161056657829003601f168201915b5050505050905090565b600061059a338484610f8e565b5060015b92915050565b60006105b1848484611118565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156106765760405162461bcd60e51b815260206004820152604c60248201527f4d4f4d4f5441524f3a7472616e7366657246726f6d3a414c4c4f57414e43455f60448201527f45584345454445443a205472616e7366657220616d6f756e742065786365656460648201527f7320616c6c6f77616e63652e0000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6106838533858403610f8e565b506001949350505050565b6000438263ffffffff16106107315760405162461bcd60e51b815260206004820152605160248201527f4d4f4d4f5441524f3a676574566f7465734174426c6f636b3a4655545552455f60448201527f424c4f434b3a2043616e6e6f742067657420766f746573206174206120626c6f60648201527f636b20696e20746865206675747572652e000000000000000000000000000000608482015260a40161066d565b6001600160a01b03831660009081526005602052604090205463ffffffff168061075f57600091505061059e565b6001600160a01b038416600090815260066020526040812063ffffffff85169161078a600185611d81565b63ffffffff908116825260208201929092526040016000205416116107fe576001600160a01b0384166000908152600660205260408120906107cd600184611d81565b63ffffffff16815260208101919091526040016000205464010000000090046001600160e01b0316915061059e9050565b6001600160a01b038416600090815260066020908152604080832083805290915290205463ffffffff8085169116111561083c57600091505061059e565b60008061084a600184611d81565b90505b8163ffffffff168163ffffffff161115610922576000600261086f8484611d81565b6108799190611da6565b6108839083611d81565b6001600160a01b038816600090815260066020908152604080832063ffffffff8581168552908352928190208151808301909252548084168083526401000000009091046001600160e01b03169282019290925292935090881614156108f35760200151945061059e9350505050565b805163ffffffff8089169116101561090d5781935061091b565b610918600183611d81565b92505b505061084d565b506001600160a01b038516600090815260066020908152604080832063ffffffff909416835292905220546001600160e01b036401000000009091041691505092915050565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161059a91859061099f908690611dd7565b610f8e565b6109ac6116d2565b600780546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527ed910c9481701ba32afe0c247572aaece27072f230c8ec769bf245fc0b38de691015b60405180910390a15050565b610a24338261172c565b50565b610a2f6116d2565b610a3960006117cb565b565b6060600a805461050a90611d30565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015610b0a5760405162461bcd60e51b815260206004820152605a60248201527f4d4f4d4f5441524f3a6465637265617365416c6c6f77616e63653a414c4c4f5760448201527f414e43455f554e444552464c4f573a205375627472616374696f6e207265737560648201527f6c747320696e207375622d7a65726f20616c6c6f77616e63652e000000000000608482015260a40161066d565b610b173385858403610f8e565b5060019392505050565b600061059a338484611118565b610b366116d2565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f1bf87992a35ee29395ab494f9adb9a500a7fa60c3082cba0ef02701bb35900d99101610a0e565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866610bc86104fb565b8051602091820120604080518084019490945283810191909152466060840152306080808501919091528151808503909101815260a0840182528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08501526001600160a01b038b1660e085015261010084018a90526101208085018a90528251808603909101815261014085019092528151919092012061190160f01b61016084015261016283018290526101828301819052909250906000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610cf9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610da85760405162461bcd60e51b815260206004820152604960248201527f4d4f4d4f5441524f3a64656c656761746542795369673a494e56414c49445f5360448201527f49474e41545552453a205265636569766564207369676e61747572652077617360648201527f20696e76616c69642e0000000000000000000000000000000000000000000000608482015260a40161066d565b87421115610e445760405162461bcd60e51b815260206004820152604960248201527f4d4f4d4f5441524f3a64656c656761746542795369673a455850495245445f5360448201527f49474e41545552453a205265636569766564207369676e61747572652068617360648201527f20657870697265642e0000000000000000000000000000000000000000000000608482015260a40161066d565b6001600160a01b0381166000908152600460205260408120805491610e6883611def565b919050558914610eea5760405162461bcd60e51b815260206004820152604160248201527f4d4f4d4f5441524f3a64656c656761746542795369673a494e56414c49445f4e60448201527f4f4e43453a205265636569766564206e6f6e63652077617320696e76616c69646064820152601760f91b608482015260a40161066d565b610ef4818b61172c565b505050505b505050505050565b610f096116d2565b6001600160a01b038116610f855760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161066d565b610a24816117cb565b6001600160a01b0383166110155760405162461bcd60e51b815260206004820152604260248201527f4d4f4d4f5441524f3a5f617070726f76653a4f574e45525f5a45524f3a20436160448201527f6e6e6f7420617070726f766520666f7220746865207a65726f20616464726573606482015261399760f11b608482015260a40161066d565b6001600160a01b0382166110b75760405162461bcd60e51b815260206004820152604360248201527f4d4f4d4f5441524f3a5f617070726f76653a5350454e4445525f5a45524f3a2060448201527f43616e6e6f7420617070726f766520746f20746865207a65726f20616464726560648201527f73732e0000000000000000000000000000000000000000000000000000000000608482015260a40161066d565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111bb5760405162461bcd60e51b8152602060048201526044602482018190527f4d4f4d4f5441524f3a5f7472616e736665723a46524f4d5f5a45524f3a204361908201527f6e6e6f74207472616e736665722066726f6d20746865207a65726f206164647260648201527f6573732e00000000000000000000000000000000000000000000000000000000608482015260a40161066d565b6001600160a01b038216611239576040805162461bcd60e51b81526020600482015260248101919091527f4d4f4d4f5441524f3a5f7472616e736665723a544f5f5a45524f3a2043616e6e60448201527f6f74207472616e7366657220746f20746865207a65726f20616464726573732e606482015260840161066d565b600081116112d55760405162461bcd60e51b815260206004820152604a60248201527f4d4f4d4f5441524f3a5f7472616e736665723a5a45524f5f414d4f554e543a2060448201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060648201527f7468616e207a65726f2e00000000000000000000000000000000000000000000608482015260a40161066d565b6001600160a01b0383166000908152600160205260409020548111156113895760405162461bcd60e51b815260206004820152604960248201527f4d4f4d4f5441524f3a5f7472616e736665723a494e53554646494349454e545f60448201527f42414c414e43453a205472616e7366657220616d6f756e74206578636565647360648201527f2062616c616e63652e0000000000000000000000000000000000000000000000608482015260a40161066d565b6008546040517fc6512cc10000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301528481166024830152604482018490529091169063c6512cc190606401600060405180830381600087803b1580156113f857600080fd5b505af115801561140c573d6000803e3d6000fd5b50506007546040517fd7ad21ac0000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301526044820186905260009450909116915063d7ad21ac90606401602060405180830381865afa158015611485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a99190611e0a565b905060006114b78284611e23565b6001600160a01b0386166000908152600160205260408120805492935085929091906114e4908490611e23565b90915550506001600160a01b03841660009081526001602052604081208054839290611511908490611dd7565b90915550506001600160a01b0380861660009081526003602052604080822054878416835291205461154892918216911683611828565b81156115f7576008546001600160a01b031660009081526001602052604081208054849290611578908490611dd7565b90915550506001600160a01b0380861660009081526003602052604080822054600854841683529120546115b192918216911684611828565b6008546040518381526001600160a01b03918216918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6008546040517fe613b1cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301528681166024830152604482018690529091169063e613b1cd90606401600060405180830381600087803b15801561166657600080fd5b505af115801561167a573d6000803e3d6000fd5b50505050836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116c391815260200190565b60405180910390a35050505050565b6000546001600160a01b03163314610a395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161066d565b6001600160a01b038281166000818152600360208181526040808420805460018452948290205493835287871673ffffffffffffffffffffffffffffffffffffffff198616811790915581519586529390951690840181905293830191909152907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9060600160405180910390a16117c5828483611828565b50505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b0316141561184757505050565b6001600160e01b03811661185a57505050565b6001600160a01b03831615611902576001600160a01b03831660009081526005602052604081205463ffffffff1690816118955760006118e2565b6001600160a01b0385166000908152600660205260408120906118b9600185611d81565b63ffffffff16815260208101919091526040016000205464010000000090046001600160e01b03165b905060006118f08483611e3a565b90506118fe868484846119ab565b5050505b6001600160a01b038216156119a6576001600160a01b03821660009081526005602052604081205463ffffffff16908161193d57600061198a565b6001600160a01b038416600090815260066020526040812090611961600185611d81565b63ffffffff16815260208101919091526040016000205464010000000090046001600160e01b03165b905060006119988483611e5a565b9050610ef9858484846119ab565b505050565b4363ffffffff841615801590611a0357506001600160a01b038516600090815260066020526040812063ffffffff8316916119e7600188611d81565b63ffffffff908116825260208201929092526040016000205416145b15611a73576001600160a01b03851660009081526006602052604081208391611a2d600188611d81565b63ffffffff1663ffffffff16815260200190815260200160002060000160046101000a8154816001600160e01b0302191690836001600160e01b03160217905550611b0b565b60408051808201825263ffffffff80841682526001600160e01b0380861660208085019182526001600160a01b038b166000908152600682528681208b86168252909152949094209251935116640100000000029216919091179055611ada846001611e85565b6001600160a01b0386166000908152600560205260409020805463ffffffff191663ffffffff929092169190911790555b604080516001600160a01b03871681526001600160e01b03858116602083015284168183015290517fda5a64c2947c0b7bf4d6e7bf736c6f84d9d1c5f991770f88bbeb3fe19c85a1349181900360600190a15050505050565b600060208083528351808285015260005b81811015611b9157858101830151858201604001528201611b75565b81811115611ba3576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114611bd057600080fd5b919050565b60008060408385031215611be857600080fd5b611bf183611bb9565b946020939093013593505050565b600080600060608486031215611c1457600080fd5b611c1d84611bb9565b9250611c2b60208501611bb9565b9150604084013590509250925092565b60008060408385031215611c4e57600080fd5b611c5783611bb9565b9150602083013563ffffffff81168114611c7057600080fd5b809150509250929050565b600060208284031215611c8d57600080fd5b611c9682611bb9565b9392505050565b60008060008060008060c08789031215611cb657600080fd5b611cbf87611bb9565b95506020870135945060408701359350606087013560ff81168114611ce357600080fd5b9598949750929560808101359460a0909101359350915050565b60008060408385031215611d1057600080fd5b611d1983611bb9565b9150611d2760208401611bb9565b90509250929050565b600181811c90821680611d4457607f821691505b60208210811415611d6557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015611d9e57611d9e611d6b565b039392505050565b600063ffffffff80841680611dcb57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60008219821115611dea57611dea611d6b565b500190565b6000600019821415611e0357611e03611d6b565b5060010190565b600060208284031215611e1c57600080fd5b5051919050565b600082821015611e3557611e35611d6b565b500390565b60006001600160e01b0383811690831681811015611d9e57611d9e611d6b565b60006001600160e01b03808316818516808303821115611e7c57611e7c611d6b565b01949350505050565b600063ffffffff808316818516808303821115611e7c57611e7c611d6b56fea26469706673582212208830a4ee01f922cec40abb2a90e9894b046134cff651bc8e5affc94fe86564a564736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000066393a45cd3958c9359c896340ff9102be30000000000000000000000000000066393a45cd3958c9359c896340ff9102be300000000000000000000000000000000000000000000000000000000000000084d6f6d6f7461726f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d4f4d4f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101b95760003560e01c80636fcfff45116100f9578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e14610420578063e7a324dc14610459578063f1127ed814610480578063f2fde38b146104e857600080fd5b8063a9059cbb146103e7578063a9373b7b146103fa578063c3cda5201461040d57600080fd5b80637ecebe00116100d35780637ecebe001461039b5780638da5cb5b146103bb57806395d89b41146103cc578063a457c2d7146103d457600080fd5b80636fcfff451461032f57806370a082311461036a578063715018a61461039357600080fd5b806323b872dd11610166578063395093511161014057806339509351146102cb578063488d4a51146102de578063587cde1e146102f35780635c19a95c1461031c57600080fd5b806323b872dd1461027e578063271a452914610291578063313ce567146102bc57600080fd5b80631788963311610197578063178896331461022a57806318160ddd1461023d57806320606b701461025757600080fd5b806306fdde03146101be578063095ea7b3146101dc57806312280ba8146101ff575b600080fd5b6101c66104fb565b6040516101d39190611b64565b60405180910390f35b6101ef6101ea366004611bd5565b61058d565b60405190151581526020016101d3565b600754610212906001600160a01b031681565b6040516001600160a01b0390911681526020016101d3565b600854610212906001600160a01b031681565b69021e19e0c9bab24000005b6040519081526020016101d3565b6102497f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6101ef61028c366004611bff565b6105a4565b6102a461029f366004611c3b565b61068e565b6040516001600160e01b0390911681526020016101d3565b604051600981526020016101d3565b6101ef6102d9366004611bd5565b610968565b6102f16102ec366004611c7b565b6109a4565b005b610212610301366004611c7b565b6003602052600090815260409020546001600160a01b031681565b6102f161032a366004611c7b565b610a1a565b61035561033d366004611c7b565b60056020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101d3565b610249610378366004611c7b565b6001600160a01b031660009081526001602052604090205490565b6102f1610a27565b6102496103a9366004611c7b565b60046020526000908152604090205481565b6000546001600160a01b0316610212565b6101c6610a3b565b6101ef6103e2366004611bd5565b610a4a565b6101ef6103f5366004611bd5565b610b21565b6102f1610408366004611c7b565b610b2e565b6102f161041b366004611c9d565b610b9d565b61024961042e366004611cfd565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6102497fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6104c461048e366004611c3b565b600660209081526000928352604080842090915290825290205463ffffffff81169064010000000090046001600160e01b031682565b6040805163ffffffff90931683526001600160e01b039091166020830152016101d3565b6102f16104f6366004611c7b565b610f01565b60606009805461050a90611d30565b80601f016020809104026020016040519081016040528092919081815260200182805461053690611d30565b80156105835780601f1061055857610100808354040283529160200191610583565b820191906000526020600020905b81548152906001019060200180831161056657829003601f168201915b5050505050905090565b600061059a338484610f8e565b5060015b92915050565b60006105b1848484611118565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156106765760405162461bcd60e51b815260206004820152604c60248201527f4d4f4d4f5441524f3a7472616e7366657246726f6d3a414c4c4f57414e43455f60448201527f45584345454445443a205472616e7366657220616d6f756e742065786365656460648201527f7320616c6c6f77616e63652e0000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6106838533858403610f8e565b506001949350505050565b6000438263ffffffff16106107315760405162461bcd60e51b815260206004820152605160248201527f4d4f4d4f5441524f3a676574566f7465734174426c6f636b3a4655545552455f60448201527f424c4f434b3a2043616e6e6f742067657420766f746573206174206120626c6f60648201527f636b20696e20746865206675747572652e000000000000000000000000000000608482015260a40161066d565b6001600160a01b03831660009081526005602052604090205463ffffffff168061075f57600091505061059e565b6001600160a01b038416600090815260066020526040812063ffffffff85169161078a600185611d81565b63ffffffff908116825260208201929092526040016000205416116107fe576001600160a01b0384166000908152600660205260408120906107cd600184611d81565b63ffffffff16815260208101919091526040016000205464010000000090046001600160e01b0316915061059e9050565b6001600160a01b038416600090815260066020908152604080832083805290915290205463ffffffff8085169116111561083c57600091505061059e565b60008061084a600184611d81565b90505b8163ffffffff168163ffffffff161115610922576000600261086f8484611d81565b6108799190611da6565b6108839083611d81565b6001600160a01b038816600090815260066020908152604080832063ffffffff8581168552908352928190208151808301909252548084168083526401000000009091046001600160e01b03169282019290925292935090881614156108f35760200151945061059e9350505050565b805163ffffffff8089169116101561090d5781935061091b565b610918600183611d81565b92505b505061084d565b506001600160a01b038516600090815260066020908152604080832063ffffffff909416835292905220546001600160e01b036401000000009091041691505092915050565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161059a91859061099f908690611dd7565b610f8e565b6109ac6116d2565b600780546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527ed910c9481701ba32afe0c247572aaece27072f230c8ec769bf245fc0b38de691015b60405180910390a15050565b610a24338261172c565b50565b610a2f6116d2565b610a3960006117cb565b565b6060600a805461050a90611d30565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015610b0a5760405162461bcd60e51b815260206004820152605a60248201527f4d4f4d4f5441524f3a6465637265617365416c6c6f77616e63653a414c4c4f5760448201527f414e43455f554e444552464c4f573a205375627472616374696f6e207265737560648201527f6c747320696e207375622d7a65726f20616c6c6f77616e63652e000000000000608482015260a40161066d565b610b173385858403610f8e565b5060019392505050565b600061059a338484611118565b610b366116d2565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f1bf87992a35ee29395ab494f9adb9a500a7fa60c3082cba0ef02701bb35900d99101610a0e565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866610bc86104fb565b8051602091820120604080518084019490945283810191909152466060840152306080808501919091528151808503909101815260a0840182528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08501526001600160a01b038b1660e085015261010084018a90526101208085018a90528251808603909101815261014085019092528151919092012061190160f01b61016084015261016283018290526101828301819052909250906000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610cf9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610da85760405162461bcd60e51b815260206004820152604960248201527f4d4f4d4f5441524f3a64656c656761746542795369673a494e56414c49445f5360448201527f49474e41545552453a205265636569766564207369676e61747572652077617360648201527f20696e76616c69642e0000000000000000000000000000000000000000000000608482015260a40161066d565b87421115610e445760405162461bcd60e51b815260206004820152604960248201527f4d4f4d4f5441524f3a64656c656761746542795369673a455850495245445f5360448201527f49474e41545552453a205265636569766564207369676e61747572652068617360648201527f20657870697265642e0000000000000000000000000000000000000000000000608482015260a40161066d565b6001600160a01b0381166000908152600460205260408120805491610e6883611def565b919050558914610eea5760405162461bcd60e51b815260206004820152604160248201527f4d4f4d4f5441524f3a64656c656761746542795369673a494e56414c49445f4e60448201527f4f4e43453a205265636569766564206e6f6e63652077617320696e76616c69646064820152601760f91b608482015260a40161066d565b610ef4818b61172c565b505050505b505050505050565b610f096116d2565b6001600160a01b038116610f855760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161066d565b610a24816117cb565b6001600160a01b0383166110155760405162461bcd60e51b815260206004820152604260248201527f4d4f4d4f5441524f3a5f617070726f76653a4f574e45525f5a45524f3a20436160448201527f6e6e6f7420617070726f766520666f7220746865207a65726f20616464726573606482015261399760f11b608482015260a40161066d565b6001600160a01b0382166110b75760405162461bcd60e51b815260206004820152604360248201527f4d4f4d4f5441524f3a5f617070726f76653a5350454e4445525f5a45524f3a2060448201527f43616e6e6f7420617070726f766520746f20746865207a65726f20616464726560648201527f73732e0000000000000000000000000000000000000000000000000000000000608482015260a40161066d565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111bb5760405162461bcd60e51b8152602060048201526044602482018190527f4d4f4d4f5441524f3a5f7472616e736665723a46524f4d5f5a45524f3a204361908201527f6e6e6f74207472616e736665722066726f6d20746865207a65726f206164647260648201527f6573732e00000000000000000000000000000000000000000000000000000000608482015260a40161066d565b6001600160a01b038216611239576040805162461bcd60e51b81526020600482015260248101919091527f4d4f4d4f5441524f3a5f7472616e736665723a544f5f5a45524f3a2043616e6e60448201527f6f74207472616e7366657220746f20746865207a65726f20616464726573732e606482015260840161066d565b600081116112d55760405162461bcd60e51b815260206004820152604a60248201527f4d4f4d4f5441524f3a5f7472616e736665723a5a45524f5f414d4f554e543a2060448201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060648201527f7468616e207a65726f2e00000000000000000000000000000000000000000000608482015260a40161066d565b6001600160a01b0383166000908152600160205260409020548111156113895760405162461bcd60e51b815260206004820152604960248201527f4d4f4d4f5441524f3a5f7472616e736665723a494e53554646494349454e545f60448201527f42414c414e43453a205472616e7366657220616d6f756e74206578636565647360648201527f2062616c616e63652e0000000000000000000000000000000000000000000000608482015260a40161066d565b6008546040517fc6512cc10000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301528481166024830152604482018490529091169063c6512cc190606401600060405180830381600087803b1580156113f857600080fd5b505af115801561140c573d6000803e3d6000fd5b50506007546040517fd7ad21ac0000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301526044820186905260009450909116915063d7ad21ac90606401602060405180830381865afa158015611485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a99190611e0a565b905060006114b78284611e23565b6001600160a01b0386166000908152600160205260408120805492935085929091906114e4908490611e23565b90915550506001600160a01b03841660009081526001602052604081208054839290611511908490611dd7565b90915550506001600160a01b0380861660009081526003602052604080822054878416835291205461154892918216911683611828565b81156115f7576008546001600160a01b031660009081526001602052604081208054849290611578908490611dd7565b90915550506001600160a01b0380861660009081526003602052604080822054600854841683529120546115b192918216911684611828565b6008546040518381526001600160a01b03918216918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6008546040517fe613b1cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301528681166024830152604482018690529091169063e613b1cd90606401600060405180830381600087803b15801561166657600080fd5b505af115801561167a573d6000803e3d6000fd5b50505050836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116c391815260200190565b60405180910390a35050505050565b6000546001600160a01b03163314610a395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161066d565b6001600160a01b038281166000818152600360208181526040808420805460018452948290205493835287871673ffffffffffffffffffffffffffffffffffffffff198616811790915581519586529390951690840181905293830191909152907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9060600160405180910390a16117c5828483611828565b50505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b0316141561184757505050565b6001600160e01b03811661185a57505050565b6001600160a01b03831615611902576001600160a01b03831660009081526005602052604081205463ffffffff1690816118955760006118e2565b6001600160a01b0385166000908152600660205260408120906118b9600185611d81565b63ffffffff16815260208101919091526040016000205464010000000090046001600160e01b03165b905060006118f08483611e3a565b90506118fe868484846119ab565b5050505b6001600160a01b038216156119a6576001600160a01b03821660009081526005602052604081205463ffffffff16908161193d57600061198a565b6001600160a01b038416600090815260066020526040812090611961600185611d81565b63ffffffff16815260208101919091526040016000205464010000000090046001600160e01b03165b905060006119988483611e5a565b9050610ef9858484846119ab565b505050565b4363ffffffff841615801590611a0357506001600160a01b038516600090815260066020526040812063ffffffff8316916119e7600188611d81565b63ffffffff908116825260208201929092526040016000205416145b15611a73576001600160a01b03851660009081526006602052604081208391611a2d600188611d81565b63ffffffff1663ffffffff16815260200190815260200160002060000160046101000a8154816001600160e01b0302191690836001600160e01b03160217905550611b0b565b60408051808201825263ffffffff80841682526001600160e01b0380861660208085019182526001600160a01b038b166000908152600682528681208b86168252909152949094209251935116640100000000029216919091179055611ada846001611e85565b6001600160a01b0386166000908152600560205260409020805463ffffffff191663ffffffff929092169190911790555b604080516001600160a01b03871681526001600160e01b03858116602083015284168183015290517fda5a64c2947c0b7bf4d6e7bf736c6f84d9d1c5f991770f88bbeb3fe19c85a1349181900360600190a15050505050565b600060208083528351808285015260005b81811015611b9157858101830151858201604001528201611b75565b81811115611ba3576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114611bd057600080fd5b919050565b60008060408385031215611be857600080fd5b611bf183611bb9565b946020939093013593505050565b600080600060608486031215611c1457600080fd5b611c1d84611bb9565b9250611c2b60208501611bb9565b9150604084013590509250925092565b60008060408385031215611c4e57600080fd5b611c5783611bb9565b9150602083013563ffffffff81168114611c7057600080fd5b809150509250929050565b600060208284031215611c8d57600080fd5b611c9682611bb9565b9392505050565b60008060008060008060c08789031215611cb657600080fd5b611cbf87611bb9565b95506020870135945060408701359350606087013560ff81168114611ce357600080fd5b9598949750929560808101359460a0909101359350915050565b60008060408385031215611d1057600080fd5b611d1983611bb9565b9150611d2760208401611bb9565b90509250929050565b600181811c90821680611d4457607f821691505b60208210811415611d6557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015611d9e57611d9e611d6b565b039392505050565b600063ffffffff80841680611dcb57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60008219821115611dea57611dea611d6b565b500190565b6000600019821415611e0357611e03611d6b565b5060010190565b600060208284031215611e1c57600080fd5b5051919050565b600082821015611e3557611e35611d6b565b500390565b60006001600160e01b0383811690831681811015611d9e57611d9e611d6b565b60006001600160e01b03808316818516808303821115611e7c57611e7c611d6b565b01949350505050565b600063ffffffff808316818516808303821115611e7c57611e7c611d6b56fea26469706673582212208830a4ee01f922cec40abb2a90e9894b046134cff651bc8e5affc94fe86564a564736f6c634300080b0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000066393a45cd3958c9359c896340ff9102be30000000000000000000000000000066393a45cd3958c9359c896340ff9102be300000000000000000000000000000000000000000000000000000000000000084d6f6d6f7461726f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d4f4d4f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Momotaro
Arg [1] : symbol_ (string): MOMO
Arg [2] : taxHandlerAddress (address): 0x0000066393a45Cd3958C9359c896340fF9102be3
Arg [3] : treasuryHandlerAddress (address): 0x0000066393a45Cd3958C9359c896340fF9102be3

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000066393a45cd3958c9359c896340ff9102be3
Arg [3] : 0000000000000000000000000000066393a45cd3958c9359c896340ff9102be3
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 4d6f6d6f7461726f000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4d4f4d4f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

10071:17915:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12728:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15572:163;;;;;;:::i;:::-;;:::i;:::-;;;1241:14:1;;1234:22;1216:41;;1204:2;1189:18;15572:163:0;1076:187:1;11360:29:0;;;;;-1:-1:-1;;;;;11360:29:0;;;;;;-1:-1:-1;;;;;1450:55:1;;;1432:74;;1420:2;1405:18;11360:29:0;1268:244:1;11471:39:0;;;;;-1:-1:-1;;;;;11471:39:0;;;13365:157;13504:10;13365:157;;;1917:25:1;;;1905:2;1890:18;13365:157:0;1771:177:1;10938:131:0;;10989:80;10938:131;;16079:559;;;;;;:::i;:::-;;:::i;20240:1489::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2987:71:1;;;2969:90;;2957:2;2942:18;20240:1489:0;2823:242:1;13135:77:0;;;13203:1;3212:36:1;;3200:2;3185:18;13135:77:0;3070:184:1;16956:211:0;;;;;;:::i;:::-;;:::i;21871:268::-;;;;;;:::i;:::-;;:::i;:::-;;10438:44;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;10438:44:0;;;18265:104;;;;;;:::i;:::-;;:::i;10677:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3855:10:1;3843:23;;;3825:42;;3813:2;3798:18;10677:48:0;3681:192:1;13719:121:0;;;;;;:::i;:::-;-1:-1:-1;;;;;13814:18:0;13787:7;13814:18;;;:9;:18;;;;;;;13719:121;6153:103;;;:::i;10548:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;5505:87;5551:7;5578:6;-1:-1:-1;;;;;5578:6:0;5505:87;;12908:89;;;:::i;17495:497::-;;;;;;:::i;:::-;;:::i;14134:169::-;;;;;;:::i;:::-;;:::i;22296:318::-;;;;;;:::i;:::-;;:::i;18809:1002::-;;;;;;:::i;:::-;;:::i;14620:145::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14730:18:0;;;14703:7;14730:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14620:145;11164:126;;11219:71;11164:126;;10796:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10796:68:0;;;;;;;4968:10:1;4956:23;;;4938:42;;-1:-1:-1;;;;;5016:71:1;;;5011:2;4996:18;;4989:99;4911:18;10796:68:0;4766:328:1;6411:201:0;;;;;;:::i;:::-;;:::i;12728:83::-;12765:13;12798:5;12791:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12728:83;:::o;15572:163::-;15649:4;15666:39;4136:10;15689:7;15698:6;15666:8;:39::i;:::-;-1:-1:-1;15723:4:0;15572:163;;;;;:::o;16079:559::-;16213:4;16230:36;16240:6;16248:9;16259:6;16230:9;:36::i;:::-;-1:-1:-1;;;;;16306:19:0;;16279:24;16306:19;;;:11;:19;;;;;;;;4136:10;16306:33;;;;;;;;16372:26;;;;16350:152;;;;-1:-1:-1;;;16350:152:0;;5743:2:1;16350:152:0;;;5725:21:1;5782:2;5762:18;;;5755:30;5821:34;5801:18;;;5794:62;5892:34;5872:18;;;5865:62;5964:14;5943:19;;;5936:43;5996:19;;16350:152:0;;;;;;;;;16538:57;16547:6;4136:10;16588:6;16569:16;:25;16538:8;:57::i;:::-;-1:-1:-1;16626:4:0;;16079:559;-1:-1:-1;;;;16079:559:0:o;20240:1489::-;20323:7;20379:12;20365:11;:26;;;20343:157;;;;-1:-1:-1;;;20343:157:0;;6228:2:1;20343:157:0;;;6210:21:1;6267:2;6247:18;;;6240:30;6306:34;6286:18;;;6279:62;6377:34;6357:18;;;6350:62;6449:19;6428;;;6421:48;6486:19;;20343:157:0;6026:485:1;20343:157:0;-1:-1:-1;;;;;20535:23:0;;20513:19;20535:23;;;:14;:23;;;;;;;;20573:17;20569:58;;20614:1;20607:8;;;;;20569:58;-1:-1:-1;;;;;20688:20:0;;;;;;:11;:20;;;;;:65;;;;20709:16;20724:1;20709:12;:16;:::i;:::-;20688:38;;;;;;;;;;;;;;;-1:-1:-1;20688:38:0;:50;;:65;20684:149;;-1:-1:-1;;;;;20777:20:0;;;;;;:11;:20;;;;;;20798:16;20813:1;20798:12;:16;:::i;:::-;20777:38;;;;;;;;;;;;;-1:-1:-1;20777:38:0;:44;;;;-1:-1:-1;;;;;20777:44:0;;-1:-1:-1;20770:51:0;;-1:-1:-1;20770:51:0;20684:149;-1:-1:-1;;;;;20895:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:35;:49;;;;:35;;:49;20891:90;;;20968:1;20961:8;;;;;20891:90;21028:17;;21080:16;21095:1;21080:12;:16;:::i;:::-;21060:36;;21107:474;21127:10;21114:23;;:10;:23;;;21107:474;;;21154:13;21211:1;21184:23;21197:10;21184;:23;:::i;:::-;21183:29;;;;:::i;:::-;21170:42;;:10;:42;:::i;:::-;-1:-1:-1;;;;;21258:20:0;;21227:28;21258:20;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;21227:59;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21227:59:0;;;;;;;;21258:28;;-1:-1:-1;21307:37:0;;;;21303:267;;;21372:16;;;;-1:-1:-1;21365:23:0;;-1:-1:-1;;;;21365:23:0;21303:267;21414:22;;:36;;;;;;;21410:160;;;21484:6;21471:19;;21410:160;;;21544:10;21553:1;21544:6;:10;:::i;:::-;21531:23;;21410:160;21139:442;;21107:474;;;-1:-1:-1;;;;;;21683:20:0;;;;;;:11;:20;;;;;;;;:32;;;;;;;;;;:38;-1:-1:-1;;;;;21683:38:0;;;;;;-1:-1:-1;;20240:1489:0;;;;:::o;16956:211::-;4136:10;17038:4;17087:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17087:34:0;;;;;;;;;;17038:4;;17055:80;;17078:7;;17087:47;;17124:10;;17087:47;:::i;:::-;17055:8;:80::i;21871:268::-;5391:13;:11;:13::i;:::-;21990:10:::1;::::0;;-1:-1:-1;;;;;22012:43:0;;::::1;-1:-1:-1::0;;22012:43:0;::::1;::::0;::::1;::::0;;;22073:58:::1;::::0;;21990:10;;;::::1;7649:34:1::0;;;7714:2;7699:18;;7692:43;;;;22073:58:0::1;::::0;7561:18:1;22073:58:0::1;;;;;;;;21940:199;21871:268:::0;:::o;18265:104::-;18329:32;18339:10;18351:9;18329;:32::i;:::-;18265:104;:::o;6153:103::-;5391:13;:11;:13::i;:::-;6218:30:::1;6245:1;6218:18;:30::i;:::-;6153:103::o:0;12908:89::-;12949:13;12982:7;12975:14;;;;;:::i;17495:497::-;4136:10;17582:4;17626:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17626:34:0;;;;;;;;;;17693:35;;;;17671:175;;;;-1:-1:-1;;;17671:175:0;;7948:2:1;17671:175:0;;;7930:21:1;7987:2;7967:18;;;7960:30;8026:34;8006:18;;;7999:62;8097:34;8077:18;;;8070:62;8169:28;8148:19;;;8141:57;8215:19;;17671:175:0;7746:494:1;17671:175:0;17882:67;4136:10;17905:7;17933:15;17914:16;:34;17882:8;:67::i;:::-;-1:-1:-1;17980:4:0;;17495:497;-1:-1:-1;;;17495:497:0:o;14134:169::-;14214:4;14231:42;4136:10;14255:9;14266:6;14231:9;:42::i;22296:318::-;5391:13;:11;:13::i;:::-;22430:15:::1;::::0;;-1:-1:-1;;;;;22457:58:0;;::::1;-1:-1:-1::0;;22457:58:0;::::1;::::0;::::1;::::0;;;22533:73:::1;::::0;;22430:15;;;::::1;7649:34:1::0;;;7714:2;7699:18;;7692:43;;;;22533:73:0::1;::::0;7561:18:1;22533:73:0::1;7414:327:1::0;18809:1002:0;18994:23;10989:80;19088:6;:4;:6::i;:::-;19072:24;;;;;;;19044:83;;;;;;8476:25:1;;;;8517:18;;;8510:34;;;;19098:13:0;8560:18:1;;;8553:34;19121:4:0;8603:18:1;;;;8596:83;;;;19044::0;;;;;;;;;;8448:19:1;;;19044:83:0;;19020:118;;;;;;11219:71;19180:57;;;8921:25:1;-1:-1:-1;;;;;8982:55:1;;8962:18;;;8955:83;9054:18;;;9047:34;;;9097:18;;;;9090:34;;;19180:57:0;;;;;;;;;;8893:19:1;;;19180:57:0;;;19170:68;;;;;;;-1:-1:-1;;;19276:57:0;;;9393:27:1;9436:11;;;9429:27;;;9472:12;;;9465:28;;;19020:118:0;;-1:-1:-1;19170:68:0;-1:-1:-1;;9509:12:1;;19276:57:0;;;-1:-1:-1;;19276:57:0;;;;;;;;;19266:68;;19276:57;19266:68;;;;19345:17;19365:26;;;;;;;;;9759:25:1;;;9832:4;9820:17;;9800:18;;;9793:45;;;;9854:18;;;9847:34;;;9897:18;;;9890:34;;;19266:68:0;;-1:-1:-1;19345:17:0;19365:26;;9731:19:1;;19365:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19365:26:0;;-1:-1:-1;;19365:26:0;;;-1:-1:-1;;;;;;;19412:23:0;;19404:109;;;;-1:-1:-1;;;19404:109:0;;10137:2:1;19404:109:0;;;10119:21:1;10176:2;10156:18;;;10149:30;10215:34;10195:18;;;10188:62;10286:34;10266:18;;;10259:62;10358:11;10337:19;;;10330:40;10387:19;;19404:109:0;9935:477:1;19404:109:0;19551:6;19532:15;:25;;19524:111;;;;-1:-1:-1;;;19524:111:0;;10619:2:1;19524:111:0;;;10601:21:1;10658:2;10638:18;;;10631:30;10697:34;10677:18;;;10670:62;10768:34;10748:18;;;10741:62;10840:11;10819:19;;;10812:40;10869:19;;19524:111:0;10417:477:1;19524:111:0;-1:-1:-1;;;;;19663:17:0;;;;;;:6;:17;;;;;:19;;;;;;:::i;:::-;;;;;19654:5;:28;19646:106;;;;-1:-1:-1;;;19646:106:0;;11241:2:1;19646:106:0;;;11223:21:1;11280:2;11260:18;;;11253:30;11319:34;11299:18;;;11292:62;11390:34;11370:18;;;11363:62;-1:-1:-1;;;11441:19:1;;;11434:32;11483:19;;19646:106:0;11039:469:1;19646:106:0;19772:31;19782:9;19793;19772;:31::i;:::-;19765:38;;;;18809:1002;;;;;;;:::o;6411:201::-;5391:13;:11;:13::i;:::-;-1:-1:-1;;;;;6500:22:0;::::1;6492:73;;;::::0;-1:-1:-1;;;6492:73:0;;11715:2:1;6492:73:0::1;::::0;::::1;11697:21:1::0;11754:2;11734:18;;;11727:30;11793:34;11773:18;;;11766:62;11864:8;11844:18;;;11837:36;11890:19;;6492:73:0::1;11513:402:1::0;6492:73:0::1;6576:28;6595:8;6576:18;:28::i;26017:436::-:0;-1:-1:-1;;;;;26144:19:0;;26136:98;;;;-1:-1:-1;;;26136:98:0;;12122:2:1;26136:98:0;;;12104:21:1;12161:2;12141:18;;;12134:30;12200:34;12180:18;;;12173:62;12271:34;12251:18;;;12244:62;-1:-1:-1;;;12322:19:1;;;12315:33;12365:19;;26136:98:0;11920:470:1;26136:98:0;-1:-1:-1;;;;;26253:21:0;;26245:101;;;;-1:-1:-1;;;26245:101:0;;12597:2:1;26245:101:0;;;12579:21:1;12636:2;12616:18;;;12609:30;12675:34;12655:18;;;12648:62;12746:34;12726:18;;;12719:62;12818:5;12797:19;;;12790:34;12841:19;;26245:101:0;12395:471:1;26245:101:0;-1:-1:-1;;;;;26359:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26413:32;;1917:25:1;;;26413:32:0;;1890:18:1;26413:32:0;;;;;;;26017:436;;;:::o;26721:1262::-;-1:-1:-1;;;;;26843:18:0;;26835:99;;;;-1:-1:-1;;;26835:99:0;;13073:2:1;26835:99:0;;;13055:21:1;13112:2;13092:18;;;13085:30;;;13151:34;13131:18;;;13124:62;13222:34;13202:18;;;13195:62;13294:6;13273:19;;;13266:35;13318:19;;26835:99:0;12871:472:1;26835:99:0;-1:-1:-1;;;;;26953:16:0;;26945:93;;;;;-1:-1:-1;;;26945:93:0;;13550:2:1;26945:93:0;;;13532:21:1;13569:18;;;13562:30;;;;13628:34;13608:18;;;13601:62;13699:34;13679:18;;;13672:62;13751:19;;26945:93:0;13348:428:1;26945:93:0;27066:1;27057:6;:10;27049:97;;;;-1:-1:-1;;;27049:97:0;;13983:2:1;27049:97:0;;;13965:21:1;14022:2;14002:18;;;13995:30;14061:34;14041:18;;;14034:62;14132:34;14112:18;;;14105:62;14204:12;14183:19;;;14176:41;14234:19;;27049:97:0;13781:478:1;27049:97:0;-1:-1:-1;;;;;27175:15:0;;;;;;:9;:15;;;;;;27165:25;;;27157:111;;;;-1:-1:-1;;;27157:111:0;;14466:2:1;27157:111:0;;;14448:21:1;14505:2;14485:18;;;14478:30;14544:34;14524:18;;;14517:62;14615:34;14595:18;;;14588:62;14687:11;14666:19;;;14659:40;14716:19;;27157:111:0;14264:477:1;27157:111:0;27281:15;;:55;;;;;-1:-1:-1;;;;;15027:15:1;;;27281:55:0;;;15009:34:1;15079:15;;;15059:18;;;15052:43;15111:18;;;15104:34;;;27281:15:0;;;;:37;;14921:18:1;;27281:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27363:10:0;;:35;;;;;-1:-1:-1;;;;;15027:15:1;;;27363:35:0;;;15009:34:1;15079:15;;;15059:18;;;15052:43;15111:18;;;15104:34;;;27349:11:0;;-1:-1:-1;27363:10:0;;;;-1:-1:-1;27363:17:0;;14921:18:1;;27363:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27349:49;-1:-1:-1;27409:19:0;27431:12;27349:49;27431:6;:12;:::i;:::-;-1:-1:-1;;;;;27456:15:0;;;;;;:9;:15;;;;;:25;;27409:34;;-1:-1:-1;27475:6:0;;27456:15;;;:25;;27475:6;;27456:25;:::i;:::-;;;;-1:-1:-1;;;;;;;27492:13:0;;;;;;:9;:13;;;;;:28;;27509:11;;27492:13;:28;;27509:11;;27492:28;:::i;:::-;;;;-1:-1:-1;;;;;;;27546:15:0;;;;;;;:9;:15;;;;;;;27563:13;;;;;;;;27531:68;;27546:15;;;;27563:13;27586:11;27531:14;:68::i;:::-;27616:7;;27612:248;;27658:15;;-1:-1:-1;;;;;27658:15:0;27640:35;;;;:9;:35;;;;;:42;;27679:3;;27640:35;:42;;27679:3;;27640:42;:::i;:::-;;;;-1:-1:-1;;;;;;;27714:15:0;;;;;;;:9;:15;;;;;;;27749;;;;27731:35;;;;;27699:82;;27714:15;;;;27731:35;27776:3;27699:14;:82::i;:::-;27826:15;;27803:45;;1917:25:1;;;-1:-1:-1;;;;;27826:15:0;;;;27803:45;;;;;1905:2:1;1890:18;27803:45:0;;;;;;;27612:248;27872:15;;:54;;;;;-1:-1:-1;;;;;15027:15:1;;;27872:54:0;;;15009:34:1;15079:15;;;15059:18;;;15052:43;15111:18;;;15104:34;;;27872:15:0;;;;:36;;14921:18:1;;27872:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27959:2;-1:-1:-1;;;;;27944:31:0;27953:4;-1:-1:-1;;;;;27944:31:0;;27963:11;27944:31;;;;1917:25:1;;1905:2;1890:18;;1771:177;27944:31:0;;;;;;;;26824:1159;;26721:1262;;;:::o;5670:132::-;5551:7;5578:6;-1:-1:-1;;;;;5578:6:0;4136:10;5734:23;5726:68;;;;-1:-1:-1;;;5726:68:0;;15670:2:1;5726:68:0;;;15652:21:1;;;15689:18;;;15682:30;15748:34;15728:18;;;15721:62;15800:18;;5726:68:0;15468:356:1;22822:385:0;-1:-1:-1;;;;;22924:20:0;;;22898:23;22924:20;;;:9;:20;;;;;;;;;;;22982;;;;;;;23013;;;:32;;;-1:-1:-1;;23013:32:0;;;;;;;23063:54;;16092:34:1;;;22924:20:0;;;;16142:18:1;;;16135:43;;;16194:18;;;16187:43;;;;22982:20:0;23063:54;;16019:2:1;16004:18;23063:54:0;;;;;;;23130:69;23145:15;23162:9;23181:16;23130:14;:69::i;:::-;22887:320;;22822:385;;:::o;6772:191::-;6846:16;6865:6;;-1:-1:-1;;;;;6882:17:0;;;-1:-1:-1;;6882:17:0;;;;;;6915:40;;6865:6;;;;;;;6915:40;;6846:16;6915:40;6835:128;6772:191;:::o;23458:1275::-;23828:2;-1:-1:-1;;;;;23820:10:0;:4;-1:-1:-1;;;;;23820:10:0;;23816:49;;;23458:1275;;;:::o;23816:49::-;-1:-1:-1;;;;;24048:11:0;;24044:50;;23458:1275;;;:::o;24044:50::-;-1:-1:-1;;;;;24110:18:0;;;24106:317;;-1:-1:-1;;;;;24165:20:0;;24145:17;24165:20;;;:14;:20;;;;;;;;;24221:14;:60;;24280:1;24221:60;;;-1:-1:-1;;;;;24238:17:0;;;;;;:11;:17;;;;;;24256:14;24269:1;24256:10;:14;:::i;:::-;24238:33;;;;;;;;;;;;;-1:-1:-1;24238:33:0;:39;;;;-1:-1:-1;;;;;24238:39:0;24221:60;24200:81;-1:-1:-1;24296:18:0;24317:19;24330:6;24200:81;24317:19;:::i;:::-;24296:40;;24353:58;24370:4;24376:10;24388;24400;24353:16;:58::i;:::-;24130:293;;;24106:317;-1:-1:-1;;;;;24439:16:0;;;24435:291;;-1:-1:-1;;;;;24490:18:0;;24472:15;24490:18;;;:14;:18;;;;;;;;;24542:12;:54;;24595:1;24542:54;;;-1:-1:-1;;;;;24557:15:0;;;;;;:11;:15;;;;;;24573:12;24584:1;24573:8;:12;:::i;:::-;24557:29;;;;;;;;;;;;;-1:-1:-1;24557:29:0;:35;;;;-1:-1:-1;;;;;24557:35:0;24542:54;24523:73;-1:-1:-1;24611:16:0;24630:17;24641:6;24523:73;24630:17;:::i;:::-;24611:36;;24664:50;24681:2;24685:8;24695;24705;24664:16;:50::i;24435:291::-;23458:1275;;;:::o;25082:635::-;25274:12;25304:16;;;;;;;:87;;-1:-1:-1;;;;;;25324:22:0;;;;;;:11;:22;;;;;:67;;;;25347:16;25362:1;25347:12;:16;:::i;:::-;25324:40;;;;;;;;;;;;;;;-1:-1:-1;25324:40:0;:52;;:67;25304:87;25300:341;;;-1:-1:-1;;;;;25408:22:0;;;;;;:11;:22;;;;;25457:8;;25431:16;25446:1;25431:12;:16;:::i;:::-;25408:40;;;;;;;;;;;;;;;:46;;;:57;;;;;-1:-1:-1;;;;;25408:57:0;;;;;-1:-1:-1;;;;;25408:57:0;;;;;;25300:341;;;25537:33;;;;;;;;;;;;;;-1:-1:-1;;;;;25537:33:0;;;;;;;;;;-1:-1:-1;;;;;25498:22:0;;-1:-1:-1;25498:22:0;;;:11;:22;;;;;:36;;;;;;;;;;;;:72;;;;;;;;;;;;;;;25613:16;25521:12;25498:72;25613:16;:::i;:::-;-1:-1:-1;;;;;25585:25:0;;;;;;:14;:25;;;;;:44;;-1:-1:-1;;25585:44:0;;;;;;;;;;;;25300:341;25658:51;;;-1:-1:-1;;;;;17251:55:1;;17233:74;;-1:-1:-1;;;;;17420:15:1;;;17415:2;17400:18;;17393:43;17472:15;;17452:18;;;17445:43;25658:51:0;;;;;;;17221:2:1;25658:51:0;;;25235:482;25082:635;;;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:196::-;684:20;;-1:-1:-1;;;;;733:54:1;;723:65;;713:93;;802:1;799;792:12;713:93;616:196;;;:::o;817:254::-;885:6;893;946:2;934:9;925:7;921:23;917:32;914:52;;;962:1;959;952:12;914:52;985:29;1004:9;985:29;:::i;:::-;975:39;1061:2;1046:18;;;;1033:32;;-1:-1:-1;;;817:254:1:o;2135:328::-;2212:6;2220;2228;2281:2;2269:9;2260:7;2256:23;2252:32;2249:52;;;2297:1;2294;2287:12;2249:52;2320:29;2339:9;2320:29;:::i;:::-;2310:39;;2368:38;2402:2;2391:9;2387:18;2368:38;:::i;:::-;2358:48;;2453:2;2442:9;2438:18;2425:32;2415:42;;2135:328;;;;;:::o;2468:350::-;2535:6;2543;2596:2;2584:9;2575:7;2571:23;2567:32;2564:52;;;2612:1;2609;2602:12;2564:52;2635:29;2654:9;2635:29;:::i;:::-;2625:39;;2714:2;2703:9;2699:18;2686:32;2758:10;2751:5;2747:22;2740:5;2737:33;2727:61;;2784:1;2781;2774:12;2727:61;2807:5;2797:15;;;2468:350;;;;;:::o;3259:186::-;3318:6;3371:2;3359:9;3350:7;3346:23;3342:32;3339:52;;;3387:1;3384;3377:12;3339:52;3410:29;3429:9;3410:29;:::i;:::-;3400:39;3259:186;-1:-1:-1;;;3259:186:1:o;3878:618::-;3980:6;3988;3996;4004;4012;4020;4073:3;4061:9;4052:7;4048:23;4044:33;4041:53;;;4090:1;4087;4080:12;4041:53;4113:29;4132:9;4113:29;:::i;:::-;4103:39;;4189:2;4178:9;4174:18;4161:32;4151:42;;4240:2;4229:9;4225:18;4212:32;4202:42;;4294:2;4283:9;4279:18;4266:32;4338:4;4331:5;4327:16;4320:5;4317:27;4307:55;;4358:1;4355;4348:12;4307:55;3878:618;;;;-1:-1:-1;3878:618:1;;4433:3;4418:19;;4405:33;;4485:3;4470:19;;;4457:33;;-1:-1:-1;3878:618:1;-1:-1:-1;;3878:618:1:o;4501:260::-;4569:6;4577;4630:2;4618:9;4609:7;4605:23;4601:32;4598:52;;;4646:1;4643;4636:12;4598:52;4669:29;4688:9;4669:29;:::i;:::-;4659:39;;4717:38;4751:2;4740:9;4736:18;4717:38;:::i;:::-;4707:48;;4501:260;;;;;:::o;5099:437::-;5178:1;5174:12;;;;5221;;;5242:61;;5296:4;5288:6;5284:17;5274:27;;5242:61;5349:2;5341:6;5338:14;5318:18;5315:38;5312:218;;;-1:-1:-1;;;5383:1:1;5376:88;5487:4;5484:1;5477:15;5515:4;5512:1;5505:15;5312:218;;5099:437;;;:::o;6516:184::-;-1:-1:-1;;;6565:1:1;6558:88;6665:4;6662:1;6655:15;6689:4;6686:1;6679:15;6705:221;6744:4;6773:10;6833;;;;6803;;6855:12;;;6852:38;;;6870:18;;:::i;:::-;6907:13;;6705:221;-1:-1:-1;;;6705:221:1:o;6931:345::-;6970:1;6996:10;7033:2;7030:1;7026:10;7055:3;7045:191;;-1:-1:-1;;;7089:1:1;7082:88;7193:4;7190:1;7183:15;7221:4;7218:1;7211:15;7045:191;7254:10;;7250:20;;;;;6931:345;-1:-1:-1;;6931:345:1:o;7281:128::-;7321:3;7352:1;7348:6;7345:1;7342:13;7339:39;;;7358:18;;:::i;:::-;-1:-1:-1;7394:9:1;;7281:128::o;10899:135::-;10938:3;-1:-1:-1;;10959:17:1;;10956:43;;;10979:18;;:::i;:::-;-1:-1:-1;11026:1:1;11015:13;;10899:135::o;15149:184::-;15219:6;15272:2;15260:9;15251:7;15247:23;15243:32;15240:52;;;15288:1;15285;15278:12;15240:52;-1:-1:-1;15311:16:1;;15149:184;-1:-1:-1;15149:184:1:o;15338:125::-;15378:4;15406:1;15403;15400:8;15397:34;;;15411:18;;:::i;:::-;-1:-1:-1;15448:9:1;;15338:125::o;16241:270::-;16281:4;-1:-1:-1;;;;;16418:10:1;;;;16388;;16440:12;;;16437:38;;;16455:18;;:::i;16516:277::-;16556:3;-1:-1:-1;;;;;16669:2:1;16666:1;16662:10;16699:2;16696:1;16692:10;16730:3;16726:2;16722:12;16717:3;16714:21;16711:47;;;16738:18;;:::i;:::-;16774:13;;16516:277;-1:-1:-1;;;;16516:277:1:o;16798:228::-;16837:3;16865:10;16902:2;16899:1;16895:10;16932:2;16929:1;16925:10;16963:3;16959:2;16955:12;16950:3;16947:21;16944:47;;;16971:18;;:::i

Swarm Source

ipfs://8830a4ee01f922cec40abb2a90e9894b046134cff651bc8e5affc94fe86564a5
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.