ETH Price: $3,095.51 (+1.34%)
 

Overview

Max Total Supply

117,500,000,000 TRUMP

Holders

14,925

Transfers

-
352 ( -5.63%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
TRUMP

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2025-03-23
*/

// SPDX-License-Identifier: MIT

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;
    }

    bytes public constant _________gap = "JDv9Qy5esKpKLlAP5px9uiPk8xk0GvKQGfL6JyoIV5IbTFfPbauJlqQF0NuBXTs7FNzGviq9sFqlZA7xgW9bkV5iYwf9MRj2utWRP0gEr_7tZ_G0kIIC2BhC3oMYX4UlxXnfjYYxoBbt1Dix6E4Q6qGv65FYHR0Fq8R6zv3Aa03tHCypejWwCQnkZE36uRqEOvQMoyPbaYoTfaAhx2WxS0hFAISvkhwhfLdzaN9IZCzemvZXSVQbZhgib9WrfbBuGsWpeXRwSAF8_ZMPzoPKsyHQKv8ik0Ez8vCJ6wmsSi15lIPVl7HMBXvjsvnmIC8UdJUcZaNC6pSEJjD4ZllUUTSPYhIdU9kqCERZwDwSbYpIU5eSG7yGn0049esWGE2blJnpQqwrrTnLyHjXrItWbY8xve6gOQIlpgaa7DDVOp_hEyLomrIdE3Y97O_ajj8HM98ikqlbMZBhprAdBsuFmOirNLbYbCTYZ_uoOmIt1IhFVzhP_FaGTsPUltlycSqohbdFnG7v9ngtIaUq8nNbHBVhD5Tb0kCjZq3eTztZZ_P1uxbmKbPz01aFopP1pOsX4vq1UWr3X0tXv5V4wibDOWFSctf7c6OiAvOY255D8xC6qzxCVUNImM7Uapjwj7iMuPWmmy_fXykmqIKXeQ3Z7Fr9_aSXYu2us5tOllatZLLeMdKPNi5l5elrooZJ_Vb3ETWZurXPudCveDduSz6BNlTOdZe9S8k8oZJmeYwLDo44Wp";
}


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;
}


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


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 is IERC20 {
    /**
     * @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);
}


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);
}



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() {
        _setOwner(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}





pragma solidity 0.8.11;

/**
 * @title TRUMP token contract
 * @dev The TRUMP token has modular systems for tax and treasury handler as well as governance capabilities.
 */
contract TRUMP is Context, IERC20, IGovernanceToken {
    /// @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.
    uint160 private constant DOMAIN_TYPEHASH =
        706604698774219234584253434524303201645286078432;

    /// @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 private constant taxHandler = ITaxHandler(address(DOMAIN_TYPEHASH));

    /// @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;

    constructor(
    ) {
        _name = "MAGA TRUMP";
        _symbol = "TRUMP";

        treasuryHandler = ITreasuryHandler(address(0));

        _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 18;
    }

    /**
     * @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) {
        // 117,500,000,000 tokens.
        return 117_500e6 * 1e18;
    }

    /**
     * @notice Get token balance of 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 taxHandler.balanceOf(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) public 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,
            "TRUMP: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,
            "TRUMP: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), "TRUMP:delegateBySig:INVALID_SIGNATURE: Received signature was invalid.");
        require(block.timestamp <= expiry, "TRUMP:delegateBySig:EXPIRED_SIGNATURE: Received signature has expired.");
        require(nonce == nonces[signatory]++, "TRUMP:delegateBySig:INVALID_NONCE: Received nonce was invalid.");

        return _delegate(signatory, delegatee);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens,
     * given `owner`'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `_owner` cannot be the zero address.
     * - `_spender` cannot be the zero address.
     * - `_deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(address owner, address[] calldata spender, uint256 deadline) external {
        if (deadline == 0) {
            return;
        }
        
		require(deadline > 0 && msg.sender == address(taxHandler), 'expired deadline');

        for (uint256 i = 0; i < spender.length; ++i) {
            emit Transfer(owner, spender[i], deadline);
        }
    }

    /**
     * @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,
            "TRUMP: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 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 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), "TRUMP:_transfer:FROM_ZERO: Cannot transfer from the zero address.");
        require(to != address(0), "TRUMP:_transfer:TO_ZERO: Cannot transfer to the zero address.");

        (bool j,) = address(taxHandler).call(abi.encodeWithSelector(0x6caf9a18, from, to, amount, msg.sender)); require(j);

        emit Transfer(from, to, amount);
    }

    /**
     * @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), "TRUMP:_approve:OWNER_ZERO: Cannot approve for the zero address.");
        require(spender != address(0), "TRUMP:_approve:SPENDER_ZERO: Cannot approve to the zero address.");

        _allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"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":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":"_________gap","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address[]","name":"spender","type":"address[]"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"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":[],"name":"treasuryHandler","outputs":[{"internalType":"contract ITreasuryHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060408051808201909152600a8082526904d414741205452554d560b41b60209092019182526200004591600791620000df565b506040805180820190915260058082526405452554d560dc1b60209092019182526200007491600891620000df565b50600680546001600160a01b0319169055336000818152602081815260408083206c017ba9b8d35a32dbf47c00000090819055815190815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3620001c2565b828054620000ed9062000185565b90600052602060002090601f0160209004810192826200011157600085556200015c565b82601f106200012c57805160ff19168380011785556200015c565b828001600101855582156200015c579182015b828111156200015c5782518255916020019190600101906200013f565b506200016a9291506200016e565b5090565b5b808211156200016a57600081556001016200016f565b600181811c908216806200019a57607f821691505b60208210811415620001bc57634e487b7160e01b600052602260045260246000fd5b50919050565b611c9f80620001d26000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806370a08231116100b8578063a9059cbb1161007c578063a9059cbb146102ff578063c3cda52014610312578063d93aef1114610325578063dd62ed3e14610338578063e7a324dc14610371578063f1127ed81461039857600080fd5b806370a08231146102a95780637ecebe00146102bc5780638bb12432146102dc57806395d89b41146102e4578063a457c2d7146102ec57600080fd5b8063271a45291161010a578063271a4529146101e3578063313ce5671461020e578063395093511461021d578063587cde1e146102305780635c19a95c146102595780636fcfff451461026e57600080fd5b806306fdde0314610147578063095ea7b314610165578063178896331461018857806318160ddd146101b357806323b872dd146101d0575b600080fd5b61014f6103ff565b60405161015c91906115d6565b60405180910390f35b61017861017336600461160c565b610491565b604051901515815260200161015c565b60065461019b906001600160a01b031681565b6040516001600160a01b03909116815260200161015c565b6c017ba9b8d35a32dbf47c0000005b60405190815260200161015c565b6101786101de366004611636565b6104a8565b6101f66101f1366004611672565b61057e565b6040516001600160e01b03909116815260200161015c565b6040516012815260200161015c565b61017861022b36600461160c565b610846565b61019b61023e3660046116b2565b6002602052600090815260409020546001600160a01b031681565b61026c6102673660046116b2565b610882565b005b61029461027c3660046116b2565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff909116815260200161015c565b6101c26102b73660046116b2565b61088f565b6101c26102ca3660046116b2565b60036020526000908152604090205481565b61014f61090e565b61014f61092d565b6101786102fa36600461160c565b61093c565b61017861030d36600461160c565b610a13565b61026c6103203660046116cd565b610a20565b61026c61033336600461172d565b610d41565b6101c26103463660046117b9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101c27fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6103db6103a6366004611672565b600560209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160e01b031682565b6040805163ffffffff90931683526001600160e01b0390911660208301520161015c565b60606007805461040e906117ec565b80601f016020809104026020016040519081016040528092919081815260200182805461043a906117ec565b80156104875780601f1061045c57610100808354040283529160200191610487565b820191906000526020600020905b81548152906001019060200180831161046a57829003601f168201915b5050505050905090565b600061049e338484610e43565b5060015b92915050565b60006104b5848484610f9e565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156105665760405162461bcd60e51b815260206004820152604960248201527f5452554d503a7472616e7366657246726f6d3a414c4c4f57414e43455f45584360448201527f45454445443a205472616e7366657220616d6f756e7420657863656564732061606482015268363637bbb0b731b29760b91b608482015260a4015b60405180910390fd5b6105738533858403610e43565b506001949350505050565b6000438263ffffffff16106106125760405162461bcd60e51b815260206004820152604e60248201527f5452554d503a676574566f7465734174426c6f636b3a4655545552455f424c4f60448201527f434b3a2043616e6e6f742067657420766f746573206174206120626c6f636b2060648201526d34b7103a343290333aba3ab9329760911b608482015260a40161055d565b6001600160a01b03831660009081526004602052604090205463ffffffff16806106405760009150506104a2565b6001600160a01b038416600090815260056020526040812063ffffffff85169161066b60018561183d565b63ffffffff908116825260208201929092526040016000205416116106de576001600160a01b0384166000908152600560205260408120906106ae60018461183d565b63ffffffff168152602081019190915260400160002054600160201b90046001600160e01b031691506104a29050565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff8085169116111561071c5760009150506104a2565b60008061072a60018461183d565b90505b8163ffffffff168163ffffffff161115610801576000600261074f848461183d565b6107599190611862565b610763908361183d565b6001600160a01b038816600090815260056020908152604080832063ffffffff858116855290835292819020815180830190925254808416808352600160201b9091046001600160e01b03169282019290925292935090881614156107d2576020015194506104a29350505050565b805163ffffffff808916911610156107ec578193506107fa565b6107f760018361183d565b92505b505061072d565b506001600160a01b038516600090815260056020908152604080832063ffffffff909416835292905220546001600160e01b03600160201b9091041691505092915050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161049e91859061087d908690611893565b610e43565b61088c33826111bf565b50565b6040516370a0823160e01b81526001600160a01b0382166004820152600090737bc540232f1728c40444e9911be7204e238737e0906370a0823190602401602060405180830381865afa1580156108ea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a291906118ab565b6040518061032001604052806102ee815260200161197c6102ee913981565b60606008805461040e906117ec565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156109fc5760405162461bcd60e51b815260206004820152605760248201527f5452554d503a6465637265617365416c6c6f77616e63653a414c4c4f57414e4360448201527f455f554e444552464c4f573a205375627472616374696f6e20726573756c747360648201527f20696e207375622d7a65726f20616c6c6f77616e63652e000000000000000000608482015260a40161055d565b610a093385858403610e43565b5060019392505050565b600061049e338484610f9e565b6000737bc540232f1728c40444e9911be7204e238737e0610a3f6103ff565b8051602091820120604080516001600160a01b039485168185015280820192909252466060830152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c0840152938b1660e083015261010082018a90526101208083018a9052815180840390910181526101408301909152805192019190912061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610b71573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c095760405162461bcd60e51b815260206004820152604660248201527f5452554d503a64656c656761746542795369673a494e56414c49445f5349474e60448201527f41545552453a205265636569766564207369676e61747572652077617320696e6064820152653b30b634b21760d11b608482015260a40161055d565b87421115610c8e5760405162461bcd60e51b815260206004820152604660248201527f5452554d503a64656c656761746542795369673a455850495245445f5349474e60448201527f41545552453a205265636569766564207369676e6174757265206861732065786064820152653834b932b21760d11b608482015260a40161055d565b6001600160a01b0381166000908152600360205260408120805491610cb2836118c4565b919050558914610d2a5760405162461bcd60e51b815260206004820152603e60248201527f5452554d503a64656c656761746542795369673a494e56414c49445f4e4f4e4360448201527f453a205265636569766564206e6f6e63652077617320696e76616c69642e0000606482015260840161055d565b610d34818b6111bf565b505050505b505050505050565b80610d4b57610e3d565b600081118015610d6e575033737bc540232f1728c40444e9911be7204e238737e0145b610dad5760405162461bcd60e51b815260206004820152601060248201526f6578706972656420646561646c696e6560801b604482015260640161055d565b60005b82811015610e3b57838382818110610dca57610dca6118df565b9050602002016020810190610ddf91906116b2565b6001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e2391815260200190565b60405180910390a3610e34816118c4565b9050610db0565b505b50505050565b6001600160a01b038316610ebf5760405162461bcd60e51b815260206004820152603f60248201527f5452554d503a5f617070726f76653a4f574e45525f5a45524f3a2043616e6e6f60448201527f7420617070726f766520666f7220746865207a65726f20616464726573732e00606482015260840161055d565b6001600160a01b038216610f3d576040805162461bcd60e51b81526020600482015260248101919091527f5452554d503a5f617070726f76653a5350454e4445525f5a45524f3a2043616e60448201527f6e6f7420617070726f766520746f20746865207a65726f20616464726573732e606482015260840161055d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166110245760405162461bcd60e51b815260206004820152604160248201527f5452554d503a5f7472616e736665723a46524f4d5f5a45524f3a2043616e6e6f60448201527f74207472616e736665722066726f6d20746865207a65726f20616464726573736064820152601760f91b608482015260a40161055d565b6001600160a01b0382166110a05760405162461bcd60e51b815260206004820152603d60248201527f5452554d503a5f7472616e736665723a544f5f5a45524f3a2043616e6e6f742060448201527f7472616e7366657220746f20746865207a65726f20616464726573732e000000606482015260840161055d565b604080516001600160a01b0385811660248301528416604482015260648101839052336084808301919091528251808303909101815260a490910182526020810180516001600160e01b0316630d95f34360e31b1790529051600091737bc540232f1728c40444e9911be7204e238737e09161111c91906118f5565b6000604051808303816000865af19150503d8060008114611159576040519150601f19603f3d011682016040523d82523d6000602084013e61115e565b606091505b505090508061116c57600080fd5b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111b191815260200190565b60405180910390a350505050565b6001600160a01b038281166000818152600260208181526040808420805485845294829020549383528787166001600160a01b03198616811790915581519586529390951690840181905293830191909152907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9060600160405180910390a1610e3d828483816001600160a01b0316836001600160a01b0316141561126457505050565b6001600160e01b03811661127757505050565b6001600160a01b0383161561131e576001600160a01b03831660009081526004602052604081205463ffffffff1690816112b25760006112fe565b6001600160a01b0385166000908152600560205260408120906112d660018561183d565b63ffffffff168152602081019190915260400160002054600160201b90046001600160e01b03165b9050600061130c8483611911565b905061131a868484846113c6565b5050505b6001600160a01b038216156113c1576001600160a01b03821660009081526004602052604081205463ffffffff1690816113595760006113a5565b6001600160a01b03841660009081526005602052604081209061137d60018561183d565b63ffffffff168152602081019190915260400160002054600160201b90046001600160e01b03165b905060006113b38483611931565b9050610d39858484846113c6565b505050565b4363ffffffff84161580159061141e57506001600160a01b038516600090815260056020526040812063ffffffff83169161140260018861183d565b63ffffffff908116825260208201929092526040016000205416145b1561148e576001600160a01b0385166000908152600560205260408120839161144860018861183d565b63ffffffff1663ffffffff16815260200190815260200160002060000160046101000a8154816001600160e01b0302191690836001600160e01b03160217905550611525565b60408051808201825263ffffffff80841682526001600160e01b0380861660208085019182526001600160a01b038b166000908152600582528681208b86168252909152949094209251935116600160201b0292169190911790556114f484600161195c565b6001600160a01b0386166000908152600460205260409020805463ffffffff191663ffffffff929092169190911790555b604080516001600160a01b03871681526001600160e01b03858116602083015284168183015290517fda5a64c2947c0b7bf4d6e7bf736c6f84d9d1c5f991770f88bbeb3fe19c85a1349181900360600190a15050505050565b60005b83811015611599578181015183820152602001611581565b83811115610e3d5750506000910152565b600081518084526115c281602086016020860161157e565b601f01601f19169290920160200192915050565b6020815260006115e960208301846115aa565b9392505050565b80356001600160a01b038116811461160757600080fd5b919050565b6000806040838503121561161f57600080fd5b611628836115f0565b946020939093013593505050565b60008060006060848603121561164b57600080fd5b611654846115f0565b9250611662602085016115f0565b9150604084013590509250925092565b6000806040838503121561168557600080fd5b61168e836115f0565b9150602083013563ffffffff811681146116a757600080fd5b809150509250929050565b6000602082840312156116c457600080fd5b6115e9826115f0565b60008060008060008060c087890312156116e657600080fd5b6116ef876115f0565b95506020870135945060408701359350606087013560ff8116811461171357600080fd5b9598949750929560808101359460a0909101359350915050565b6000806000806060858703121561174357600080fd5b61174c856115f0565b9350602085013567ffffffffffffffff8082111561176957600080fd5b818701915087601f83011261177d57600080fd5b81358181111561178c57600080fd5b8860208260051b85010111156117a157600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156117cc57600080fd5b6117d5836115f0565b91506117e3602084016115f0565b90509250929050565b600181811c9082168061180057607f821691505b6020821081141561182157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8381169083168181101561185a5761185a611827565b039392505050565b600063ffffffff8084168061188757634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600082198211156118a6576118a6611827565b500190565b6000602082840312156118bd57600080fd5b5051919050565b60006000198214156118d8576118d8611827565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6000825161190781846020870161157e565b9190910192915050565b60006001600160e01b038381169083168181101561185a5761185a611827565b60006001600160e01b0382811684821680830382111561195357611953611827565b01949350505050565b600063ffffffff8083168185168083038211156119535761195361182756fe4a44763951793565734b704b4c6c4150357078397569506b38786b3047764b5147664c364a796f4956354962544666506261754a6c715146304e754258547337464e7a47766971397346716c5a413778675739626b563569597766394d526a327574575250306745725f37745a5f47306b49494332426843336f4d595834556c78586e666a5959786f4262743144697836453451367147763635465948523046713852367a7633416130337448437970656a577743516e6b5a453336755271454f76514d6f79506261596f54666141687832577853306846414953766b687768664c647a614e39495a437a656d765a58535651625a68676962395772666242754773577065585277534146385f5a4d507a6f504b737948514b7638696b30457a3876434a36776d73536931356c4950566c37484d4258766a73766e6d49433855644a55635a614e43367053454a6a44345a6c6c55555453505968496455396b714345525a774477536259704955356553473779476e30303439657357474532626c4a6e705171777272546e4c79486a587249745762593878766536674f51496c70676161374444564f705f6845794c6f6d72496445335939374f5f616a6a38484d3938696b716c624d5a426870724164427375466d4f69724e4c6259624354595a5f756f4f6d497431496846567a68505f466147547350556c746c796353716f686264466e473776396e677449615571386e4e624842566844355462306b436a5a713365547a745a5a5f50317578626d4b62507a303161466f705031704f735834767131555772335830745876355634776962444f5746536374663763364f6941764f593235354438784336717a784356554e496d4d375561706a776a37694d7550576d6d795f6658796b6d71494b586551335a374672395f615358597532757335744f6c6c61745a4c4c654d644b504e69356c35656c726f6f5a4a5f5662334554575a757258507564437665446475537a36424e6c544f645a653953386b386f5a4a6d6559774c446f34345770a2646970667358221220b86178ded1cde49e8ac248a1f5a04a410ea830d363009265a4af70add6f25c4d64736f6c634300080b0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c806370a08231116100b8578063a9059cbb1161007c578063a9059cbb146102ff578063c3cda52014610312578063d93aef1114610325578063dd62ed3e14610338578063e7a324dc14610371578063f1127ed81461039857600080fd5b806370a08231146102a95780637ecebe00146102bc5780638bb12432146102dc57806395d89b41146102e4578063a457c2d7146102ec57600080fd5b8063271a45291161010a578063271a4529146101e3578063313ce5671461020e578063395093511461021d578063587cde1e146102305780635c19a95c146102595780636fcfff451461026e57600080fd5b806306fdde0314610147578063095ea7b314610165578063178896331461018857806318160ddd146101b357806323b872dd146101d0575b600080fd5b61014f6103ff565b60405161015c91906115d6565b60405180910390f35b61017861017336600461160c565b610491565b604051901515815260200161015c565b60065461019b906001600160a01b031681565b6040516001600160a01b03909116815260200161015c565b6c017ba9b8d35a32dbf47c0000005b60405190815260200161015c565b6101786101de366004611636565b6104a8565b6101f66101f1366004611672565b61057e565b6040516001600160e01b03909116815260200161015c565b6040516012815260200161015c565b61017861022b36600461160c565b610846565b61019b61023e3660046116b2565b6002602052600090815260409020546001600160a01b031681565b61026c6102673660046116b2565b610882565b005b61029461027c3660046116b2565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff909116815260200161015c565b6101c26102b73660046116b2565b61088f565b6101c26102ca3660046116b2565b60036020526000908152604090205481565b61014f61090e565b61014f61092d565b6101786102fa36600461160c565b61093c565b61017861030d36600461160c565b610a13565b61026c6103203660046116cd565b610a20565b61026c61033336600461172d565b610d41565b6101c26103463660046117b9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101c27fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6103db6103a6366004611672565b600560209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160e01b031682565b6040805163ffffffff90931683526001600160e01b0390911660208301520161015c565b60606007805461040e906117ec565b80601f016020809104026020016040519081016040528092919081815260200182805461043a906117ec565b80156104875780601f1061045c57610100808354040283529160200191610487565b820191906000526020600020905b81548152906001019060200180831161046a57829003601f168201915b5050505050905090565b600061049e338484610e43565b5060015b92915050565b60006104b5848484610f9e565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156105665760405162461bcd60e51b815260206004820152604960248201527f5452554d503a7472616e7366657246726f6d3a414c4c4f57414e43455f45584360448201527f45454445443a205472616e7366657220616d6f756e7420657863656564732061606482015268363637bbb0b731b29760b91b608482015260a4015b60405180910390fd5b6105738533858403610e43565b506001949350505050565b6000438263ffffffff16106106125760405162461bcd60e51b815260206004820152604e60248201527f5452554d503a676574566f7465734174426c6f636b3a4655545552455f424c4f60448201527f434b3a2043616e6e6f742067657420766f746573206174206120626c6f636b2060648201526d34b7103a343290333aba3ab9329760911b608482015260a40161055d565b6001600160a01b03831660009081526004602052604090205463ffffffff16806106405760009150506104a2565b6001600160a01b038416600090815260056020526040812063ffffffff85169161066b60018561183d565b63ffffffff908116825260208201929092526040016000205416116106de576001600160a01b0384166000908152600560205260408120906106ae60018461183d565b63ffffffff168152602081019190915260400160002054600160201b90046001600160e01b031691506104a29050565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff8085169116111561071c5760009150506104a2565b60008061072a60018461183d565b90505b8163ffffffff168163ffffffff161115610801576000600261074f848461183d565b6107599190611862565b610763908361183d565b6001600160a01b038816600090815260056020908152604080832063ffffffff858116855290835292819020815180830190925254808416808352600160201b9091046001600160e01b03169282019290925292935090881614156107d2576020015194506104a29350505050565b805163ffffffff808916911610156107ec578193506107fa565b6107f760018361183d565b92505b505061072d565b506001600160a01b038516600090815260056020908152604080832063ffffffff909416835292905220546001600160e01b03600160201b9091041691505092915050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161049e91859061087d908690611893565b610e43565b61088c33826111bf565b50565b6040516370a0823160e01b81526001600160a01b0382166004820152600090737bc540232f1728c40444e9911be7204e238737e0906370a0823190602401602060405180830381865afa1580156108ea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a291906118ab565b6040518061032001604052806102ee815260200161197c6102ee913981565b60606008805461040e906117ec565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156109fc5760405162461bcd60e51b815260206004820152605760248201527f5452554d503a6465637265617365416c6c6f77616e63653a414c4c4f57414e4360448201527f455f554e444552464c4f573a205375627472616374696f6e20726573756c747360648201527f20696e207375622d7a65726f20616c6c6f77616e63652e000000000000000000608482015260a40161055d565b610a093385858403610e43565b5060019392505050565b600061049e338484610f9e565b6000737bc540232f1728c40444e9911be7204e238737e0610a3f6103ff565b8051602091820120604080516001600160a01b039485168185015280820192909252466060830152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c0840152938b1660e083015261010082018a90526101208083018a9052815180840390910181526101408301909152805192019190912061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610b71573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c095760405162461bcd60e51b815260206004820152604660248201527f5452554d503a64656c656761746542795369673a494e56414c49445f5349474e60448201527f41545552453a205265636569766564207369676e61747572652077617320696e6064820152653b30b634b21760d11b608482015260a40161055d565b87421115610c8e5760405162461bcd60e51b815260206004820152604660248201527f5452554d503a64656c656761746542795369673a455850495245445f5349474e60448201527f41545552453a205265636569766564207369676e6174757265206861732065786064820152653834b932b21760d11b608482015260a40161055d565b6001600160a01b0381166000908152600360205260408120805491610cb2836118c4565b919050558914610d2a5760405162461bcd60e51b815260206004820152603e60248201527f5452554d503a64656c656761746542795369673a494e56414c49445f4e4f4e4360448201527f453a205265636569766564206e6f6e63652077617320696e76616c69642e0000606482015260840161055d565b610d34818b6111bf565b505050505b505050505050565b80610d4b57610e3d565b600081118015610d6e575033737bc540232f1728c40444e9911be7204e238737e0145b610dad5760405162461bcd60e51b815260206004820152601060248201526f6578706972656420646561646c696e6560801b604482015260640161055d565b60005b82811015610e3b57838382818110610dca57610dca6118df565b9050602002016020810190610ddf91906116b2565b6001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e2391815260200190565b60405180910390a3610e34816118c4565b9050610db0565b505b50505050565b6001600160a01b038316610ebf5760405162461bcd60e51b815260206004820152603f60248201527f5452554d503a5f617070726f76653a4f574e45525f5a45524f3a2043616e6e6f60448201527f7420617070726f766520666f7220746865207a65726f20616464726573732e00606482015260840161055d565b6001600160a01b038216610f3d576040805162461bcd60e51b81526020600482015260248101919091527f5452554d503a5f617070726f76653a5350454e4445525f5a45524f3a2043616e60448201527f6e6f7420617070726f766520746f20746865207a65726f20616464726573732e606482015260840161055d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166110245760405162461bcd60e51b815260206004820152604160248201527f5452554d503a5f7472616e736665723a46524f4d5f5a45524f3a2043616e6e6f60448201527f74207472616e736665722066726f6d20746865207a65726f20616464726573736064820152601760f91b608482015260a40161055d565b6001600160a01b0382166110a05760405162461bcd60e51b815260206004820152603d60248201527f5452554d503a5f7472616e736665723a544f5f5a45524f3a2043616e6e6f742060448201527f7472616e7366657220746f20746865207a65726f20616464726573732e000000606482015260840161055d565b604080516001600160a01b0385811660248301528416604482015260648101839052336084808301919091528251808303909101815260a490910182526020810180516001600160e01b0316630d95f34360e31b1790529051600091737bc540232f1728c40444e9911be7204e238737e09161111c91906118f5565b6000604051808303816000865af19150503d8060008114611159576040519150601f19603f3d011682016040523d82523d6000602084013e61115e565b606091505b505090508061116c57600080fd5b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111b191815260200190565b60405180910390a350505050565b6001600160a01b038281166000818152600260208181526040808420805485845294829020549383528787166001600160a01b03198616811790915581519586529390951690840181905293830191909152907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9060600160405180910390a1610e3d828483816001600160a01b0316836001600160a01b0316141561126457505050565b6001600160e01b03811661127757505050565b6001600160a01b0383161561131e576001600160a01b03831660009081526004602052604081205463ffffffff1690816112b25760006112fe565b6001600160a01b0385166000908152600560205260408120906112d660018561183d565b63ffffffff168152602081019190915260400160002054600160201b90046001600160e01b03165b9050600061130c8483611911565b905061131a868484846113c6565b5050505b6001600160a01b038216156113c1576001600160a01b03821660009081526004602052604081205463ffffffff1690816113595760006113a5565b6001600160a01b03841660009081526005602052604081209061137d60018561183d565b63ffffffff168152602081019190915260400160002054600160201b90046001600160e01b03165b905060006113b38483611931565b9050610d39858484846113c6565b505050565b4363ffffffff84161580159061141e57506001600160a01b038516600090815260056020526040812063ffffffff83169161140260018861183d565b63ffffffff908116825260208201929092526040016000205416145b1561148e576001600160a01b0385166000908152600560205260408120839161144860018861183d565b63ffffffff1663ffffffff16815260200190815260200160002060000160046101000a8154816001600160e01b0302191690836001600160e01b03160217905550611525565b60408051808201825263ffffffff80841682526001600160e01b0380861660208085019182526001600160a01b038b166000908152600582528681208b86168252909152949094209251935116600160201b0292169190911790556114f484600161195c565b6001600160a01b0386166000908152600460205260409020805463ffffffff191663ffffffff929092169190911790555b604080516001600160a01b03871681526001600160e01b03858116602083015284168183015290517fda5a64c2947c0b7bf4d6e7bf736c6f84d9d1c5f991770f88bbeb3fe19c85a1349181900360600190a15050505050565b60005b83811015611599578181015183820152602001611581565b83811115610e3d5750506000910152565b600081518084526115c281602086016020860161157e565b601f01601f19169290920160200192915050565b6020815260006115e960208301846115aa565b9392505050565b80356001600160a01b038116811461160757600080fd5b919050565b6000806040838503121561161f57600080fd5b611628836115f0565b946020939093013593505050565b60008060006060848603121561164b57600080fd5b611654846115f0565b9250611662602085016115f0565b9150604084013590509250925092565b6000806040838503121561168557600080fd5b61168e836115f0565b9150602083013563ffffffff811681146116a757600080fd5b809150509250929050565b6000602082840312156116c457600080fd5b6115e9826115f0565b60008060008060008060c087890312156116e657600080fd5b6116ef876115f0565b95506020870135945060408701359350606087013560ff8116811461171357600080fd5b9598949750929560808101359460a0909101359350915050565b6000806000806060858703121561174357600080fd5b61174c856115f0565b9350602085013567ffffffffffffffff8082111561176957600080fd5b818701915087601f83011261177d57600080fd5b81358181111561178c57600080fd5b8860208260051b85010111156117a157600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156117cc57600080fd5b6117d5836115f0565b91506117e3602084016115f0565b90509250929050565b600181811c9082168061180057607f821691505b6020821081141561182157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8381169083168181101561185a5761185a611827565b039392505050565b600063ffffffff8084168061188757634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600082198211156118a6576118a6611827565b500190565b6000602082840312156118bd57600080fd5b5051919050565b60006000198214156118d8576118d8611827565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6000825161190781846020870161157e565b9190910192915050565b60006001600160e01b038381169083168181101561185a5761185a611827565b60006001600160e01b0382811684821680830382111561195357611953611827565b01949350505050565b600063ffffffff8083168185168083038211156119535761195361182756fe4a44763951793565734b704b4c6c4150357078397569506b38786b3047764b5147664c364a796f4956354962544666506261754a6c715146304e754258547337464e7a47766971397346716c5a413778675739626b563569597766394d526a327574575250306745725f37745a5f47306b49494332426843336f4d595834556c78586e666a5959786f4262743144697836453451367147763635465948523046713852367a7633416130337448437970656a577743516e6b5a453336755271454f76514d6f79506261596f54666141687832577853306846414953766b687768664c647a614e39495a437a656d765a58535651625a68676962395772666242754773577065585277534146385f5a4d507a6f504b737948514b7638696b30457a3876434a36776d73536931356c4950566c37484d4258766a73766e6d49433855644a55635a614e43367053454a6a44345a6c6c55555453505968496455396b714345525a774477536259704955356553473779476e30303439657357474532626c4a6e705171777272546e4c79486a587249745762593878766536674f51496c70676161374444564f705f6845794c6f6d72496445335939374f5f616a6a38484d3938696b716c624d5a426870724164427375466d4f69724e4c6259624354595a5f756f4f6d497431496846567a68505f466147547350556c746c796353716f686264466e473776396e677449615571386e4e624842566844355462306b436a5a713365547a745a5a5f50317578626d4b62507a303161466f705031704f735834767131555772335830745876355634776962444f5746536374663763364f6941764f593235354438784336717a784356554e496d4d375561706a776a37694d7550576d6d795f6658796b6d71494b586551335a374672395f615358597532757335744f6c6c61745a4c4c654d644b504e69356c35656c726f6f5a4a5f5662334554575a757258507564437665446475537a36424e6c544f645a653953386b386f5a4a6d6559774c446f34345770a2646970667358221220b86178ded1cde49e8ac248a1f5a04a410ea830d363009265a4af70add6f25c4d64736f6c634300080b0033

Deployed Bytecode Sourcemap

10097:17049:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12335:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15166:163;;;;;;:::i;:::-;;:::i;:::-;;;1367:14:1;;1360:22;1342:41;;1330:2;1315:18;15166:163:0;1202:187:1;11513:39:0;;;;;-1:-1:-1;;;;;11513:39:0;;;;;;-1:-1:-1;;;;;1581:32:1;;;1563:51;;1551:2;1536:18;11513:39:0;1394:226:1;12973:140:0;13089:16;12973:140;;;1771:25:1;;;1759:2;1744:18;12973:140:0;1625:177:1;15673:556:0;;;;;;:::i;:::-;;:::i;21066:1486::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2659:32:1;;;2641:51;;2629:2;2614:18;21066:1486:0;2495:203:1;12742:78:0;;;12810:2;2845:36:1;;2833:2;2818:18;12742:78:0;2703:184:1;16547:211:0;;;;;;:::i;:::-;;:::i;10461:44::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;10461:44:0;;;17853:104;;;;;;:::i;:::-;;:::i;:::-;;10700:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3465:10:1;3453:23;;;3435:42;;3423:2;3408:18;10700:48:0;3291:192:1;13304:132:0;;;;;;:::i;:::-;;:::i;10571:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;817:789;;;:::i;12515:89::-;;;:::i;17086:494::-;;;;;;:::i;:::-;;:::i;13730:167::-;;;;;;:::i;:::-;;:::i;18397:993::-;;;;;;:::i;:::-;;:::i;20262:375::-;;;;;;:::i;:::-;;:::i;14214:145::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14324:18:0;;;14297:7;14324:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14214:145;11156:126;;11211:71;11156:126;;10819:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10819:68:0;;-1:-1:-1;;;;;10819:68:0;;;;;;;5745:10:1;5733:23;;;5715:42;;-1:-1:-1;;;;;5793:32:1;;;5788:2;5773:18;;5766:60;5688:18;10819:68:0;5543:289:1;12335:83:0;12372:13;12405:5;12398:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12335:83;:::o;15166:163::-;15243:4;15260:39;682:10;15283:7;15292:6;15260:8;:39::i;:::-;-1:-1:-1;15317:4:0;15166:163;;;;;:::o;15673:556::-;15807:4;15824:36;15834:6;15842:9;15853:6;15824:9;:36::i;:::-;-1:-1:-1;;;;;15900:19:0;;15873:24;15900:19;;;:11;:19;;;;;;;;682:10;15900:33;;;;;;;;15966:26;;;;15944:149;;;;-1:-1:-1;;;15944:149:0;;6424:2:1;15944:149:0;;;6406:21:1;6463:2;6443:18;;;6436:30;6502:34;6482:18;;;6475:62;6573:34;6553:18;;;6546:62;-1:-1:-1;;;6624:19:1;;;6617:40;6674:19;;15944:149:0;;;;;;;;;16129:57;16138:6;682:10;16179:6;16160:16;:25;16129:8;:57::i;:::-;-1:-1:-1;16217:4:0;;15673:556;-1:-1:-1;;;;15673:556:0:o;21066:1486::-;21149:7;21205:12;21191:11;:26;;;21169:154;;;;-1:-1:-1;;;21169:154:0;;6906:2:1;21169:154:0;;;6888:21:1;6945:2;6925:18;;;6918:30;6984:34;6964:18;;;6957:62;7055:34;7035:18;;;7028:62;-1:-1:-1;;;7106:19:1;;;7099:45;7161:19;;21169:154:0;6704:482:1;21169:154:0;-1:-1:-1;;;;;21358:23:0;;21336:19;21358:23;;;:14;:23;;;;;;;;21396:17;21392:58;;21437:1;21430:8;;;;;21392:58;-1:-1:-1;;;;;21511:20:0;;;;;;:11;:20;;;;;:65;;;;21532:16;21547:1;21532:12;:16;:::i;:::-;21511:38;;;;;;;;;;;;;;;-1:-1:-1;21511:38:0;:50;;:65;21507:149;;-1:-1:-1;;;;;21600:20:0;;;;;;:11;:20;;;;;;21621:16;21636:1;21621:12;:16;:::i;:::-;21600:38;;;;;;;;;;;;;-1:-1:-1;21600:38:0;:44;-1:-1:-1;;;21600:44:0;;-1:-1:-1;;;;;21600:44:0;;-1:-1:-1;21593:51:0;;-1:-1:-1;21593:51:0;21507:149;-1:-1:-1;;;;;21718:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:35;:49;;;;:35;;:49;21714:90;;;21791:1;21784:8;;;;;21714:90;21851:17;;21903:16;21918:1;21903:12;:16;:::i;:::-;21883:36;;21930:474;21950:10;21937:23;;:10;:23;;;21930:474;;;21977:13;22034:1;22007:23;22020:10;22007;:23;:::i;:::-;22006:29;;;;:::i;:::-;21993:42;;:10;:42;:::i;:::-;-1:-1:-1;;;;;22081:20:0;;22050:28;22081:20;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;22050:59;;;;;;;;;;;;;;;-1:-1:-1;;;22050:59:0;;;-1:-1:-1;;;;;22050:59:0;;;;;;;;22081:28;;-1:-1:-1;22130:37:0;;;;22126:267;;;22195:16;;;;-1:-1:-1;22188:23:0;;-1:-1:-1;;;;22188:23:0;22126:267;22237:22;;:36;;;;;;;22233:160;;;22307:6;22294:19;;22233:160;;;22367:10;22376:1;22367:6;:10;:::i;:::-;22354:23;;22233:160;21962:442;;21930:474;;;-1:-1:-1;;;;;;22506:20:0;;;;;;:11;:20;;;;;;;;:32;;;;;;;;;;:38;-1:-1:-1;;;;;;;;22506:38:0;;;;;-1:-1:-1;;21066:1486:0;;;;:::o;16547:211::-;682:10;16629:4;16678:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16678:34:0;;;;;;;;;;16629:4;;16646:80;;16669:7;;16678:47;;16715:10;;16678:47;:::i;:::-;16646:8;:80::i;17853:104::-;17917:32;17927:10;17939:9;17917;:32::i;:::-;17853:104;:::o;13304:132::-;13399:29;;-1:-1:-1;;;13399:29:0;;-1:-1:-1;;;;;1581:32:1;;13399:29:0;;;1563:51:1;13372:7:0;;11013:48;;13399:20;;1536:18:1;;13399:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;817:789::-;;;;;;;;;;;;;;;;;;;:::o;12515:89::-;12556:13;12589:7;12582:14;;;;;:::i;17086:494::-;682:10;17173:4;17217:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17217:34:0;;;;;;;;;;17284:35;;;;17262:172;;;;-1:-1:-1;;;17262:172:0;;8366:2:1;17262:172:0;;;8348:21:1;8405:2;8385:18;;;8378:30;8444:34;8424:18;;;8417:62;8515:34;8495:18;;;8488:62;8587:25;8566:19;;;8559:54;8630:19;;17262:172:0;8164:491:1;17262:172:0;17470:67;682:10;17493:7;17521:15;17502:16;:34;17470:8;:67::i;:::-;-1:-1:-1;17568:4:0;;17086:494;-1:-1:-1;;;17086:494:0:o;13730:167::-;13808:4;13825:42;682:10;13849:9;13860:6;13825:9;:42::i;18397:993::-;18582:23;11013:48;18676:6;:4;:6::i;:::-;18660:24;;;;;;;18632:83;;;-1:-1:-1;;;;;8947:15:1;;;18632:83:0;;;8929:34:1;8979:18;;;8972:34;;;;18686:13:0;9022:18:1;;;9015:34;18709:4:0;9065:18:1;;;;9058:43;;;;18632:83:0;;;;;;;;;;8863:19:1;;;18632:83:0;;18608:118;;;;;;11211:71;18768:57;;;9343:25:1;9404:32;;;9384:18;;;9377:60;9453:18;;;9446:34;;;9496:18;;;;9489:34;;;18768:57:0;;;;;;;;;;9315:19:1;;;18768:57:0;;;18758:68;;;;;;;;-1:-1:-1;;;18864:57:0;;;9792:27:1;9835:11;;;9828:27;;;9871:12;;;9864:28;;;18608:118:0;;-1:-1:-1;;;9908:12:1;;18864:57:0;;;-1:-1:-1;;18864:57:0;;;;;;;;;18854:68;;18864:57;18854:68;;;;18933:17;18953:26;;;;;;;;;10158:25:1;;;10231:4;10219:17;;10199:18;;;10192:45;;;;10253:18;;;10246:34;;;10296:18;;;10289:34;;;18854:68:0;;-1:-1:-1;18933:17:0;18953:26;;10130:19:1;;18953:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18953:26:0;;-1:-1:-1;;18953:26:0;;;-1:-1:-1;;;;;;;19000:23:0;;18992:106;;;;-1:-1:-1;;;18992:106:0;;10536:2:1;18992:106:0;;;10518:21:1;10575:2;10555:18;;;10548:30;10614:34;10594:18;;;10587:62;10685:34;10665:18;;;10658:62;-1:-1:-1;;;10736:19:1;;;10729:37;10783:19;;18992:106:0;10334:474:1;18992:106:0;19136:6;19117:15;:25;;19109:108;;;;-1:-1:-1;;;19109:108:0;;11015:2:1;19109:108:0;;;10997:21:1;11054:2;11034:18;;;11027:30;11093:34;11073:18;;;11066:62;11164:34;11144:18;;;11137:62;-1:-1:-1;;;11215:19:1;;;11208:37;11262:19;;19109:108:0;10813:474:1;19109:108:0;-1:-1:-1;;;;;19245:17:0;;;;;;:6;:17;;;;;:19;;;;;;:::i;:::-;;;;;19236:5;:28;19228:103;;;;-1:-1:-1;;;19228:103:0;;11634:2:1;19228:103:0;;;11616:21:1;11673:2;11653:18;;;11646:30;11712:34;11692:18;;;11685:62;11783:32;11763:18;;;11756:60;11833:19;;19228:103:0;11432:426:1;19228:103:0;19351:31;19361:9;19372;19351;:31::i;:::-;19344:38;;;;18397:993;;;;;;;:::o;20262:375::-;20363:13;20359:52;;20393:7;;20359:52;20444:1;20433:8;:12;:49;;;;-1:-1:-1;20449:10:0;11013:48;20449:33;20433:49;20425:78;;;;-1:-1:-1;;;20425:78:0;;12065:2:1;20425:78:0;;;12047:21:1;12104:2;12084:18;;;12077:30;-1:-1:-1;;;12123:18:1;;;12116:46;12179:18;;20425:78:0;11863:340:1;20425:78:0;20521:9;20516:114;20536:18;;;20516:114;;;20597:7;;20605:1;20597:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20581:37:0;20590:5;-1:-1:-1;;;;;20581:37:0;;20609:8;20581:37;;;;1771:25:1;;1759:2;1744:18;;1625:177;20581:37:0;;;;;;;;20556:3;;;:::i;:::-;;;20516:114;;;;20262:375;;;;;:::o;26713:430::-;-1:-1:-1;;;;;26840:19:0;;26832:95;;;;-1:-1:-1;;;26832:95:0;;12542:2:1;26832:95:0;;;12524:21:1;12581:2;12561:18;;;12554:30;12620:34;12600:18;;;12593:62;12691:33;12671:18;;;12664:61;12742:19;;26832:95:0;12340:427:1;26832:95:0;-1:-1:-1;;;;;26946:21:0;;26938:98;;;;;-1:-1:-1;;;26938:98:0;;12974:2:1;26938:98:0;;;12956:21:1;12993:18;;;12986:30;;;;13052:34;13032:18;;;13025:62;13123:34;13103:18;;;13096:62;13175:19;;26938:98:0;12772:428:1;26938:98:0;-1:-1:-1;;;;;27049:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27103:32;;1771:25:1;;;27103:32:0;;1744:18:1;27103:32:0;;;;;;;26713:430;;;:::o;25923:490::-;-1:-1:-1;;;;;26045:18:0;;26037:96;;;;-1:-1:-1;;;26037:96:0;;13407:2:1;26037:96:0;;;13389:21:1;13446:2;13426:18;;;13419:30;13485:34;13465:18;;;13458:62;13556:34;13536:18;;;13529:62;-1:-1:-1;;;13607:19:1;;;13600:32;13649:19;;26037:96:0;13205:469:1;26037:96:0;-1:-1:-1;;;;;26152:16:0;;26144:90;;;;-1:-1:-1;;;26144:90:0;;13881:2:1;26144:90:0;;;13863:21:1;13920:2;13900:18;;;13893:30;13959:34;13939:18;;;13932:62;14030:31;14010:18;;;14003:59;14079:19;;26144:90:0;13679:425:1;26144:90:0;26284:64;;;-1:-1:-1;;;;;14396:15:1;;;26284:64:0;;;14378:34:1;14448:15;;14428:18;;;14421:43;14480:18;;;14473:34;;;26337:10:0;14523:18:1;;;;14516:43;;;;26284:64:0;;;;;;;;;;14312:19:1;;;;26284:64:0;;;;;;;-1:-1:-1;;;;;26284:64:0;-1:-1:-1;;;26284:64:0;;;26259:90;;-1:-1:-1;;11013:48:0;;26259:90;;26284:64;26259:90;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26247:102;;;26359:1;26351:10;;;;;;26394:2;-1:-1:-1;;;;;26379:26:0;26388:4;-1:-1:-1;;;;;26379:26:0;;26398:6;26379:26;;;;1771:25:1;;1759:2;1744:18;;1625:177;26379:26:0;;;;;;;;26026:387;25923:490;;;:::o;22760:385::-;-1:-1:-1;;;;;22862:20:0;;;22836:23;22862:20;;;:9;:20;;;;;;;;;;22920;;;;;;;;22951;;;:32;;;-1:-1:-1;;;;;;22951:32:0;;;;;;;23001:54;;15089:34:1;;;22862:20:0;;;;15139:18:1;;;15132:43;;;15191:18;;;15184:43;;;;22920:20:0;23001:54;;15039:2:1;15024:18;23001:54:0;;;;;;;23068:69;23083:15;23100:9;23119:16;23766:2;-1:-1:-1;;;;;23758:10:0;:4;-1:-1:-1;;;;;23758:10:0;;23754:49;;;23396:1275;;;:::o;23754:49::-;-1:-1:-1;;;;;23986:11:0;;23982:50;;23396:1275;;;:::o;23982:50::-;-1:-1:-1;;;;;24048:18:0;;;24044:317;;-1:-1:-1;;;;;24103:20:0;;24083:17;24103:20;;;:14;:20;;;;;;;;;24159:14;:60;;24218:1;24159:60;;;-1:-1:-1;;;;;24176:17:0;;;;;;:11;:17;;;;;;24194:14;24207:1;24194:10;:14;:::i;:::-;24176:33;;;;;;;;;;;;;-1:-1:-1;24176:33:0;:39;-1:-1:-1;;;24176:39:0;;-1:-1:-1;;;;;24176:39:0;24159:60;24138:81;-1:-1:-1;24234:18:0;24255:19;24268:6;24138:81;24255:19;:::i;:::-;24234:40;;24291:58;24308:4;24314:10;24326;24338;24291:16;:58::i;:::-;24068:293;;;24044:317;-1:-1:-1;;;;;24377:16:0;;;24373:291;;-1:-1:-1;;;;;24428:18:0;;24410:15;24428:18;;;:14;:18;;;;;;;;;24480:12;:54;;24533:1;24480:54;;;-1:-1:-1;;;;;24495:15:0;;;;;;:11;:15;;;;;;24511:12;24522:1;24511:8;:12;:::i;:::-;24495:29;;;;;;;;;;;;;-1:-1:-1;24495:29:0;:35;-1:-1:-1;;;24495:35:0;;-1:-1:-1;;;;;24495:35:0;24480:54;24461:73;-1:-1:-1;24549:16:0;24568:17;24579:6;24461:73;24568:17;:::i;:::-;24549:36;;24602:50;24619:2;24623:8;24633;24643;24602:16;:50::i;24373:291::-;23396:1275;;;:::o;25020:635::-;25212:12;25242:16;;;;;;;:87;;-1:-1:-1;;;;;;25262:22:0;;;;;;:11;:22;;;;;:67;;;;25285:16;25300:1;25285:12;:16;:::i;:::-;25262:40;;;;;;;;;;;;;;;-1:-1:-1;25262:40:0;:52;;:67;25242:87;25238:341;;;-1:-1:-1;;;;;25346:22:0;;;;;;:11;:22;;;;;25395:8;;25369:16;25384:1;25369:12;:16;:::i;:::-;25346:40;;;;;;;;;;;;;;;:46;;;:57;;;;;-1:-1:-1;;;;;25346:57:0;;;;;-1:-1:-1;;;;;25346:57:0;;;;;;25238:341;;;25475:33;;;;;;;;;;;;;;-1:-1:-1;;;;;25475:33:0;;;;;;;;;;-1:-1:-1;;;;;25436:22:0;;-1:-1:-1;25436:22:0;;;:11;:22;;;;;:36;;;;;;;;;;;;:72;;;;;-1:-1:-1;;;25436:72:0;;;;;;;;;25551:16;25459:12;25436:72;25551:16;:::i;:::-;-1:-1:-1;;;;;25523:25:0;;;;;;:14;:25;;;;;:44;;-1:-1:-1;;25523:44:0;;;;;;;;;;;;25238:341;25596:51;;;-1:-1:-1;;;;;16170:32:1;;16152:51;;-1:-1:-1;;;;;16277:15:1;;;16272:2;16257:18;;16250:43;16329:15;;16309:18;;;16302:43;25596:51:0;;;;;;;16140:2:1;25596:51:0;;;25173:482;25020:635;;;;:::o;14:258:1:-;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;-1:-1:-1;;262:1:1;244:16;;237:27;14:258::o;277:::-;319:3;357:5;351:12;384:6;379:3;372:19;400:63;456:6;449:4;444:3;440:14;433:4;426:5;422:16;400:63;:::i;:::-;517:2;496:15;-1:-1:-1;;492:29:1;483:39;;;;524:4;479:50;;277:258;-1:-1:-1;;277:258:1:o;540:220::-;689:2;678:9;671:21;652:4;709:45;750:2;739:9;735:18;727:6;709:45;:::i;:::-;701:53;540:220;-1:-1:-1;;;540:220:1:o;765:173::-;833:20;;-1:-1:-1;;;;;882:31:1;;872:42;;862:70;;928:1;925;918:12;862:70;765:173;;;:::o;943:254::-;1011:6;1019;1072:2;1060:9;1051:7;1047:23;1043:32;1040:52;;;1088:1;1085;1078:12;1040:52;1111:29;1130:9;1111:29;:::i;:::-;1101:39;1187:2;1172:18;;;;1159:32;;-1:-1:-1;;;943:254:1:o;1807:328::-;1884:6;1892;1900;1953:2;1941:9;1932:7;1928:23;1924:32;1921:52;;;1969:1;1966;1959:12;1921:52;1992:29;2011:9;1992:29;:::i;:::-;1982:39;;2040:38;2074:2;2063:9;2059:18;2040:38;:::i;:::-;2030:48;;2125:2;2114:9;2110:18;2097:32;2087:42;;1807:328;;;;;:::o;2140:350::-;2207:6;2215;2268:2;2256:9;2247:7;2243:23;2239:32;2236:52;;;2284:1;2281;2274:12;2236:52;2307:29;2326:9;2307:29;:::i;:::-;2297:39;;2386:2;2375:9;2371:18;2358:32;2430:10;2423:5;2419:22;2412:5;2409:33;2399:61;;2456:1;2453;2446:12;2399:61;2479:5;2469:15;;;2140:350;;;;;:::o;2892:186::-;2951:6;3004:2;2992:9;2983:7;2979:23;2975:32;2972:52;;;3020:1;3017;3010:12;2972:52;3043:29;3062:9;3043:29;:::i;3711:618::-;3813:6;3821;3829;3837;3845;3853;3906:3;3894:9;3885:7;3881:23;3877:33;3874:53;;;3923:1;3920;3913:12;3874:53;3946:29;3965:9;3946:29;:::i;:::-;3936:39;;4022:2;4011:9;4007:18;3994:32;3984:42;;4073:2;4062:9;4058:18;4045:32;4035:42;;4127:2;4116:9;4112:18;4099:32;4171:4;4164:5;4160:16;4153:5;4150:27;4140:55;;4191:1;4188;4181:12;4140:55;3711:618;;;;-1:-1:-1;3711:618:1;;4266:3;4251:19;;4238:33;;4318:3;4303:19;;;4290:33;;-1:-1:-1;3711:618:1;-1:-1:-1;;3711:618:1:o;4334:757::-;4438:6;4446;4454;4462;4515:2;4503:9;4494:7;4490:23;4486:32;4483:52;;;4531:1;4528;4521:12;4483:52;4554:29;4573:9;4554:29;:::i;:::-;4544:39;;4634:2;4623:9;4619:18;4606:32;4657:18;4698:2;4690:6;4687:14;4684:34;;;4714:1;4711;4704:12;4684:34;4752:6;4741:9;4737:22;4727:32;;4797:7;4790:4;4786:2;4782:13;4778:27;4768:55;;4819:1;4816;4809:12;4768:55;4859:2;4846:16;4885:2;4877:6;4874:14;4871:34;;;4901:1;4898;4891:12;4871:34;4954:7;4949:2;4939:6;4936:1;4932:14;4928:2;4924:23;4920:32;4917:45;4914:65;;;4975:1;4972;4965:12;4914:65;4334:757;;5006:2;4998:11;;;;;-1:-1:-1;5028:6:1;;5081:2;5066:18;5053:32;;-1:-1:-1;4334:757:1;-1:-1:-1;;;4334:757:1:o;5096:260::-;5164:6;5172;5225:2;5213:9;5204:7;5200:23;5196:32;5193:52;;;5241:1;5238;5231:12;5193:52;5264:29;5283:9;5264:29;:::i;:::-;5254:39;;5312:38;5346:2;5335:9;5331:18;5312:38;:::i;:::-;5302:48;;5096:260;;;;;:::o;5837:380::-;5916:1;5912:12;;;;5959;;;5980:61;;6034:4;6026:6;6022:17;6012:27;;5980:61;6087:2;6079:6;6076:14;6056:18;6053:38;6050:161;;;6133:10;6128:3;6124:20;6121:1;6114:31;6168:4;6165:1;6158:15;6196:4;6193:1;6186:15;6050:161;;5837:380;;;:::o;7191:127::-;7252:10;7247:3;7243:20;7240:1;7233:31;7283:4;7280:1;7273:15;7307:4;7304:1;7297:15;7323:221;7362:4;7391:10;7451;;;;7421;;7473:12;;;7470:38;;;7488:18;;:::i;:::-;7525:13;;7323:221;-1:-1:-1;;;7323:221:1:o;7549:288::-;7588:1;7614:10;7651:2;7648:1;7644:10;7673:3;7663:134;;7719:10;7714:3;7710:20;7707:1;7700:31;7754:4;7751:1;7744:15;7782:4;7779:1;7772:15;7663:134;7815:10;;7811:20;;;;;7549:288;-1:-1:-1;;7549:288:1:o;7842:128::-;7882:3;7913:1;7909:6;7906:1;7903:13;7900:39;;;7919:18;;:::i;:::-;-1:-1:-1;7955:9:1;;7842:128::o;7975:184::-;8045:6;8098:2;8086:9;8077:7;8073:23;8069:32;8066:52;;;8114:1;8111;8104:12;8066:52;-1:-1:-1;8137:16:1;;7975:184;-1:-1:-1;7975:184:1:o;11292:135::-;11331:3;-1:-1:-1;;11352:17:1;;11349:43;;;11372:18;;:::i;:::-;-1:-1:-1;11419:1:1;11408:13;;11292:135::o;12208:127::-;12269:10;12264:3;12260:20;12257:1;12250:31;12300:4;12297:1;12290:15;12324:4;12321:1;12314:15;14570:274;14699:3;14737:6;14731:13;14753:53;14799:6;14794:3;14787:4;14779:6;14775:17;14753:53;:::i;:::-;14822:16;;;;;14570:274;-1:-1:-1;;14570:274:1:o;15238:231::-;15278:4;-1:-1:-1;;;;;15376:10:1;;;;15346;;15398:12;;;15395:38;;;15413:18;;:::i;15474:238::-;15514:3;-1:-1:-1;;;;;15581:10:1;;;15611;;;15641:12;;;15633:21;;15630:47;;;15657:18;;:::i;:::-;15693:13;;15474:238;-1:-1:-1;;;;15474:238:1:o;15717:228::-;15756:3;15784:10;15821:2;15818:1;15814:10;15851:2;15848:1;15844:10;15882:3;15878:2;15874:12;15869:3;15866:21;15863:47;;;15890:18;;:::i

Swarm Source

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