ETH Price: $2,520.20 (-0.20%)

Token

ERC999 (nine)
 

Overview

Max Total Supply

999,999,999 nine

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
252,899,674.829966578142059921 nine

Value
$0.00
0xf6815180780d1dfcad85b91ee7c05c31b0224196
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:
ERC999Token

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 7 : ERC999.sol
// SPDX-License-Identifier: MIT
/// @title ERC-999 Multi-Dimensional Token
/// @notice ERC-999 is a fully standard compliant, single-contract,
/// ERC20 extension that integrates multi-dimensional data storage
/// and randomization features.
///
/// This contract has not yet been audited. USE AT YOUR OWN RISK!
///
/// @dev Note:
/// - Multi-Dimensional Data:
///     * Each token can store up to 9 dimensions of additional data.
///     * Data can be updated only by the contract owner.
/// - Randomization:
///     * Provides functionality to generate and store random values per token.
///     * Random values are generated based on block timestamp and sender's address.
/// - Initial Supply:
///     * The total supply is minted to the initial owner's address upon deployment.
/// - Ownership and Access Control:
///     * The contract uses an `Ownable` pattern, restricting certain functions to the owner.
/// - Transfer with Randomization:
///     * Tokens can be transferred with associated randomization, adding variability.
/// - Gas Efficiency:
///     * The contract is optimized for gas efficiency, but complex operations involving
///       multi-dimensional data updates and randomization may incur higher gas costs.
/// - Multi-Dimensional Data Update:
///     * Only the contract owner can update the multi-dimensional data for tokens.
/// - Random Value:
///     * The random value for each token can be used for various application-specific purposes.
///
/// @dev Implementation details:
/// - The `updateMultiDimensionalData` function allows the owner to set values for specific dimensions of a token.
/// - The `getMultiDimensionalData` function retrieves the stored data for a token.
/// - The `randomizeValue` function generates a random value associated with a token and stores it.
/// - The `transferWithRandomization` function transfers tokens and applies a randomization effect.
///
/// @dev Invariant: `_balanceOf(owner) >= balanceOf(owner) / _unit()`.
/// - The gas costs for data updates and randomization are O(n).
///   Applications and users should be mindful of gas limits when performing complex operations.
/// - This implementation ensures safe transfers and efficient data handling.

pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract ERC999Token is ERC20, Ownable {
    uint256 public randomSeed;
    mapping(uint256 => uint256) public multiDimensionalData;

    event MultiDimensionalDataUpdated(uint256 indexed tokenId, uint256 indexed dimension, uint256 value);

    constructor(
        string memory name,
        string memory symbol,
        uint256 initialSupply,
        address initialOwner
    ) ERC20(name, symbol) Ownable(initialOwner) {
        _mint(initialOwner, initialSupply * 10 ** decimals());
        randomSeed = uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender)));
    }

    function updateMultiDimensionalData(uint256 tokenId, uint256 dimension, uint256 value) public onlyOwner {
        require(dimension < 9, "ERC999: Dimension out of range");
        multiDimensionalData[tokenId * 9 + dimension] = value;
        emit MultiDimensionalDataUpdated(tokenId, dimension, value);
    }

    function getMultiDimensionalData(uint256 tokenId, uint256 dimension) public view returns (uint256) {
        require(dimension < 9, "ERC999: Dimension out of range");
        return multiDimensionalData[tokenId * 9 + dimension];
    }

    function randomizeValue(uint256 tokenId) public onlyOwner returns (uint256) {
        randomSeed = uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender, randomSeed)));
        uint256 randomValue = randomSeed % 100;
        multiDimensionalData[tokenId * 9] = randomValue; 
        emit MultiDimensionalDataUpdated(tokenId, 0, randomValue);
        return randomValue;
    }

}

File 2 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @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 {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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 3 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

File 4 of 7 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

File 5 of 7 : draft-IERC6093.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

File 6 of 7 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;

import {IERC20} from "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 7 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @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 value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"dimension","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"MultiDimensionalDataUpdated","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"dimension","type":"uint256"}],"name":"getMultiDimensionalData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"multiDimensionalData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomSeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"randomizeValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"dimension","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateMultiDimensionalData","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f80fd5b5060405161230738038061230783398181016040528101906100319190610687565b80848481600390816100439190610927565b5080600490816100539190610927565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100c6575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100bd9190610a05565b60405180910390fd5b6100d58161014460201b60201c565b5061010a816100e861020760201b60201c565b600a6100f49190610b86565b846100ff9190610bd0565b61020f60201b60201c565b423360405160200161011d929190610c76565b604051602081830303815290604052805190602001205f1c60068190555050505050610d31565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361027f575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102769190610a05565b60405180910390fd5b6102905f838361029460201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036102e4578060025f8282546102d89190610ca1565b925050819055506103b2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561036d578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161036493929190610ce3565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036103f9578060025f8282540392505081905550610443565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104a09190610d18565b60405180910390a3505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61050c826104c6565b810181811067ffffffffffffffff8211171561052b5761052a6104d6565b5b80604052505050565b5f61053d6104ad565b90506105498282610503565b919050565b5f67ffffffffffffffff821115610568576105676104d6565b5b610571826104c6565b9050602081019050919050565b8281835e5f83830152505050565b5f61059e6105998461054e565b610534565b9050828152602081018484840111156105ba576105b96104c2565b5b6105c584828561057e565b509392505050565b5f82601f8301126105e1576105e06104be565b5b81516105f184826020860161058c565b91505092915050565b5f819050919050565b61060c816105fa565b8114610616575f80fd5b50565b5f8151905061062781610603565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6106568261062d565b9050919050565b6106668161064c565b8114610670575f80fd5b50565b5f815190506106818161065d565b92915050565b5f805f806080858703121561069f5761069e6104b6565b5b5f85015167ffffffffffffffff8111156106bc576106bb6104ba565b5b6106c8878288016105cd565b945050602085015167ffffffffffffffff8111156106e9576106e86104ba565b5b6106f5878288016105cd565b935050604061070687828801610619565b925050606061071787828801610673565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061077157607f821691505b6020821081036107845761078361072d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026107e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826107ab565b6107f086836107ab565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61082b610826610821846105fa565b610808565b6105fa565b9050919050565b5f819050919050565b61084483610811565b61085861085082610832565b8484546107b7565b825550505050565b5f90565b61086c610860565b61087781848461083b565b505050565b5b8181101561089a5761088f5f82610864565b60018101905061087d565b5050565b601f8211156108df576108b08161078a565b6108b98461079c565b810160208510156108c8578190505b6108dc6108d48561079c565b83018261087c565b50505b505050565b5f82821c905092915050565b5f6108ff5f19846008026108e4565b1980831691505092915050565b5f61091783836108f0565b9150826002028217905092915050565b61093082610723565b67ffffffffffffffff811115610949576109486104d6565b5b610953825461075a565b61095e82828561089e565b5f60209050601f83116001811461098f575f841561097d578287015190505b610987858261090c565b8655506109ee565b601f19841661099d8661078a565b5f5b828110156109c45784890151825560018201915060208501945060208101905061099f565b868310156109e157848901516109dd601f8916826108f0565b8355505b6001600288020188555050505b505050505050565b6109ff8161064c565b82525050565b5f602082019050610a185f8301846109f6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610aa057808604811115610a7c57610a7b610a1e565b5b6001851615610a8b5780820291505b8081029050610a9985610a4b565b9450610a60565b94509492505050565b5f82610ab85760019050610b73565b81610ac5575f9050610b73565b8160018114610adb5760028114610ae557610b14565b6001915050610b73565b60ff841115610af757610af6610a1e565b5b8360020a915084821115610b0e57610b0d610a1e565b5b50610b73565b5060208310610133831016604e8410600b8410161715610b495782820a905083811115610b4457610b43610a1e565b5b610b73565b610b568484846001610a57565b92509050818404811115610b6d57610b6c610a1e565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610b90826105fa565b9150610b9b83610b7a565b9250610bc87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610aa9565b905092915050565b5f610bda826105fa565b9150610be5836105fa565b9250828202610bf3816105fa565b91508282048414831517610c0a57610c09610a1e565b5b5092915050565b5f819050919050565b610c2b610c26826105fa565b610c11565b82525050565b5f8160601b9050919050565b5f610c4782610c31565b9050919050565b5f610c5882610c3d565b9050919050565b610c70610c6b8261064c565b610c4e565b82525050565b5f610c818285610c1a565b602082019150610c918284610c5f565b6014820191508190509392505050565b5f610cab826105fa565b9150610cb6836105fa565b9250828201905080821115610cce57610ccd610a1e565b5b92915050565b610cdd816105fa565b82525050565b5f606082019050610cf65f8301866109f6565b610d036020830185610cd4565b610d106040830184610cd4565b949350505050565b5f602082019050610d2b5f830184610cd4565b92915050565b6115c980610d3e5f395ff3fe608060405234801561000f575f80fd5b5060043610610108575f3560e01c806370a08231116100a0578063a4e4de001161006f578063a4e4de00146102ba578063a9059cbb146102d6578063d7a57c8e14610306578063dd62ed3e14610336578063f2fde38b1461036657610108565b806370a0823114610244578063715018a6146102745780638da5cb5b1461027e57806395d89b411461029c57610108565b806318160ddd116100dc57806318160ddd146101a857806323b872dd146101c6578063286abc63146101f6578063313ce5671461022657610108565b80627436861461010c57806306fdde031461013c578063095ea7b31461015a5780630b747d911461018a575b5f80fd5b61012660048036038101906101219190610fa9565b610382565b6040516101339190610fe3565b60405180910390f35b610144610397565b604051610151919061106c565b60405180910390f35b610174600480360381019061016f91906110e6565b610427565b604051610181919061113e565b60405180910390f35b610192610449565b60405161019f9190610fe3565b60405180910390f35b6101b061044f565b6040516101bd9190610fe3565b60405180910390f35b6101e060048036038101906101db9190611157565b610458565b6040516101ed919061113e565b60405180910390f35b610210600480360381019061020b91906111a7565b610486565b60405161021d9190610fe3565b60405180910390f35b61022e6104fb565b60405161023b9190611200565b60405180910390f35b61025e60048036038101906102599190611219565b610503565b60405161026b9190610fe3565b60405180910390f35b61027c610548565b005b61028661055b565b6040516102939190611253565b60405180910390f35b6102a4610583565b6040516102b1919061106c565b60405180910390f35b6102d460048036038101906102cf919061126c565b610613565b005b6102f060048036038101906102eb91906110e6565b6106c9565b6040516102fd919061113e565b60405180910390f35b610320600480360381019061031b9190610fa9565b6106eb565b60405161032d9190610fe3565b60405180910390f35b610350600480360381019061034b91906112bc565b61079f565b60405161035d9190610fe3565b60405180910390f35b610380600480360381019061037b9190611219565b610821565b005b6007602052805f5260405f205f915090505481565b6060600380546103a690611327565b80601f01602080910402602001604051908101604052809291908181526020018280546103d290611327565b801561041d5780601f106103f45761010080835404028352916020019161041d565b820191905f5260205f20905b81548152906001019060200180831161040057829003601f168201915b5050505050905090565b5f806104316108a5565b905061043e8185856108ac565b600191505092915050565b60065481565b5f600254905090565b5f806104626108a5565b905061046f8582856108be565b61047a858585610950565b60019150509392505050565b5f600982106104ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c1906113a1565b60405180910390fd5b60075f836009866104db91906113ec565b6104e5919061142d565b81526020019081526020015f2054905092915050565b5f6012905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610550610a40565b6105595f610ac7565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461059290611327565b80601f01602080910402602001604051908101604052809291908181526020018280546105be90611327565b80156106095780601f106105e057610100808354040283529160200191610609565b820191905f5260205f20905b8154815290600101906020018083116105ec57829003601f168201915b5050505050905090565b61061b610a40565b6009821061065e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610655906113a1565b60405180910390fd5b8060075f8460098761067091906113ec565b61067a919061142d565b81526020019081526020015f208190555081837fd26bd979096bc3f920904df2c85e46b700b197f3d5da4ae69f0f0280eda530ee836040516106bc9190610fe3565b60405180910390a3505050565b5f806106d36108a5565b90506106e0818585610950565b600191505092915050565b5f6106f4610a40565b423360065460405160200161070b939291906114c5565b604051602081830303815290604052805190602001205f1c6006819055505f6064600654610739919061152e565b90508060075f60098661074c91906113ec565b81526020019081526020015f20819055505f837fd26bd979096bc3f920904df2c85e46b700b197f3d5da4ae69f0f0280eda530ee8360405161078e9190610fe3565b60405180910390a380915050919050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610829610a40565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610899575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108909190611253565b60405180910390fd5b6108a281610ac7565b50565b5f33905090565b6108b98383836001610b8a565b505050565b5f6108c9848461079f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461094a578181101561093b578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016109329392919061155e565b60405180910390fd5b61094984848484035f610b8a565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109c0575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109b79190611253565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a30575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a279190611253565b60405180910390fd5b610a3b838383610d59565b505050565b610a486108a5565b73ffffffffffffffffffffffffffffffffffffffff16610a6661055b565b73ffffffffffffffffffffffffffffffffffffffff1614610ac557610a896108a5565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610abc9190611253565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610bfa575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610bf19190611253565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c6a575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610c619190611253565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610d53578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d4a9190610fe3565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610da9578060025f828254610d9d919061142d565b92505081905550610e77565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610e32578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610e299392919061155e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ebe578060025f8282540392505081905550610f08565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f659190610fe3565b60405180910390a3505050565b5f80fd5b5f819050919050565b610f8881610f76565b8114610f92575f80fd5b50565b5f81359050610fa381610f7f565b92915050565b5f60208284031215610fbe57610fbd610f72565b5b5f610fcb84828501610f95565b91505092915050565b610fdd81610f76565b82525050565b5f602082019050610ff65f830184610fd4565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61103e82610ffc565b6110488185611006565b9350611058818560208601611016565b61106181611024565b840191505092915050565b5f6020820190508181035f8301526110848184611034565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110b58261108c565b9050919050565b6110c5816110ab565b81146110cf575f80fd5b50565b5f813590506110e0816110bc565b92915050565b5f80604083850312156110fc576110fb610f72565b5b5f611109858286016110d2565b925050602061111a85828601610f95565b9150509250929050565b5f8115159050919050565b61113881611124565b82525050565b5f6020820190506111515f83018461112f565b92915050565b5f805f6060848603121561116e5761116d610f72565b5b5f61117b868287016110d2565b935050602061118c868287016110d2565b925050604061119d86828701610f95565b9150509250925092565b5f80604083850312156111bd576111bc610f72565b5b5f6111ca85828601610f95565b92505060206111db85828601610f95565b9150509250929050565b5f60ff82169050919050565b6111fa816111e5565b82525050565b5f6020820190506112135f8301846111f1565b92915050565b5f6020828403121561122e5761122d610f72565b5b5f61123b848285016110d2565b91505092915050565b61124d816110ab565b82525050565b5f6020820190506112665f830184611244565b92915050565b5f805f6060848603121561128357611282610f72565b5b5f61129086828701610f95565b93505060206112a186828701610f95565b92505060406112b286828701610f95565b9150509250925092565b5f80604083850312156112d2576112d1610f72565b5b5f6112df858286016110d2565b92505060206112f0858286016110d2565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061133e57607f821691505b602082108103611351576113506112fa565b5b50919050565b7f4552433939393a2044696d656e73696f6e206f7574206f662072616e676500005f82015250565b5f61138b601e83611006565b915061139682611357565b602082019050919050565b5f6020820190508181035f8301526113b88161137f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6113f682610f76565b915061140183610f76565b925082820261140f81610f76565b91508282048414831517611426576114256113bf565b5b5092915050565b5f61143782610f76565b915061144283610f76565b925082820190508082111561145a576114596113bf565b5b92915050565b5f819050919050565b61147a61147582610f76565b611460565b82525050565b5f8160601b9050919050565b5f61149682611480565b9050919050565b5f6114a78261148c565b9050919050565b6114bf6114ba826110ab565b61149d565b82525050565b5f6114d08286611469565b6020820191506114e082856114ae565b6014820191506114f08284611469565b602082019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61153882610f76565b915061154383610f76565b92508261155357611552611501565b5b828206905092915050565b5f6060820190506115715f830186611244565b61157e6020830185610fd4565b61158b6040830184610fd4565b94935050505056fea26469706673582212203fe8051bca8808df8bd11dbc126a3ee57d640d56ed9b69e30601439b42a7295b64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000003b9ac9ff000000000000000000000000f6815180780d1dfcad85b91ee7c05c31b02241960000000000000000000000000000000000000000000000000000000000000006455243393939000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046e696e6500000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610108575f3560e01c806370a08231116100a0578063a4e4de001161006f578063a4e4de00146102ba578063a9059cbb146102d6578063d7a57c8e14610306578063dd62ed3e14610336578063f2fde38b1461036657610108565b806370a0823114610244578063715018a6146102745780638da5cb5b1461027e57806395d89b411461029c57610108565b806318160ddd116100dc57806318160ddd146101a857806323b872dd146101c6578063286abc63146101f6578063313ce5671461022657610108565b80627436861461010c57806306fdde031461013c578063095ea7b31461015a5780630b747d911461018a575b5f80fd5b61012660048036038101906101219190610fa9565b610382565b6040516101339190610fe3565b60405180910390f35b610144610397565b604051610151919061106c565b60405180910390f35b610174600480360381019061016f91906110e6565b610427565b604051610181919061113e565b60405180910390f35b610192610449565b60405161019f9190610fe3565b60405180910390f35b6101b061044f565b6040516101bd9190610fe3565b60405180910390f35b6101e060048036038101906101db9190611157565b610458565b6040516101ed919061113e565b60405180910390f35b610210600480360381019061020b91906111a7565b610486565b60405161021d9190610fe3565b60405180910390f35b61022e6104fb565b60405161023b9190611200565b60405180910390f35b61025e60048036038101906102599190611219565b610503565b60405161026b9190610fe3565b60405180910390f35b61027c610548565b005b61028661055b565b6040516102939190611253565b60405180910390f35b6102a4610583565b6040516102b1919061106c565b60405180910390f35b6102d460048036038101906102cf919061126c565b610613565b005b6102f060048036038101906102eb91906110e6565b6106c9565b6040516102fd919061113e565b60405180910390f35b610320600480360381019061031b9190610fa9565b6106eb565b60405161032d9190610fe3565b60405180910390f35b610350600480360381019061034b91906112bc565b61079f565b60405161035d9190610fe3565b60405180910390f35b610380600480360381019061037b9190611219565b610821565b005b6007602052805f5260405f205f915090505481565b6060600380546103a690611327565b80601f01602080910402602001604051908101604052809291908181526020018280546103d290611327565b801561041d5780601f106103f45761010080835404028352916020019161041d565b820191905f5260205f20905b81548152906001019060200180831161040057829003601f168201915b5050505050905090565b5f806104316108a5565b905061043e8185856108ac565b600191505092915050565b60065481565b5f600254905090565b5f806104626108a5565b905061046f8582856108be565b61047a858585610950565b60019150509392505050565b5f600982106104ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c1906113a1565b60405180910390fd5b60075f836009866104db91906113ec565b6104e5919061142d565b81526020019081526020015f2054905092915050565b5f6012905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610550610a40565b6105595f610ac7565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461059290611327565b80601f01602080910402602001604051908101604052809291908181526020018280546105be90611327565b80156106095780601f106105e057610100808354040283529160200191610609565b820191905f5260205f20905b8154815290600101906020018083116105ec57829003601f168201915b5050505050905090565b61061b610a40565b6009821061065e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610655906113a1565b60405180910390fd5b8060075f8460098761067091906113ec565b61067a919061142d565b81526020019081526020015f208190555081837fd26bd979096bc3f920904df2c85e46b700b197f3d5da4ae69f0f0280eda530ee836040516106bc9190610fe3565b60405180910390a3505050565b5f806106d36108a5565b90506106e0818585610950565b600191505092915050565b5f6106f4610a40565b423360065460405160200161070b939291906114c5565b604051602081830303815290604052805190602001205f1c6006819055505f6064600654610739919061152e565b90508060075f60098661074c91906113ec565b81526020019081526020015f20819055505f837fd26bd979096bc3f920904df2c85e46b700b197f3d5da4ae69f0f0280eda530ee8360405161078e9190610fe3565b60405180910390a380915050919050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610829610a40565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610899575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108909190611253565b60405180910390fd5b6108a281610ac7565b50565b5f33905090565b6108b98383836001610b8a565b505050565b5f6108c9848461079f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461094a578181101561093b578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016109329392919061155e565b60405180910390fd5b61094984848484035f610b8a565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109c0575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109b79190611253565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a30575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a279190611253565b60405180910390fd5b610a3b838383610d59565b505050565b610a486108a5565b73ffffffffffffffffffffffffffffffffffffffff16610a6661055b565b73ffffffffffffffffffffffffffffffffffffffff1614610ac557610a896108a5565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610abc9190611253565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610bfa575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610bf19190611253565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c6a575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610c619190611253565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610d53578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d4a9190610fe3565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610da9578060025f828254610d9d919061142d565b92505081905550610e77565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610e32578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610e299392919061155e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ebe578060025f8282540392505081905550610f08565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f659190610fe3565b60405180910390a3505050565b5f80fd5b5f819050919050565b610f8881610f76565b8114610f92575f80fd5b50565b5f81359050610fa381610f7f565b92915050565b5f60208284031215610fbe57610fbd610f72565b5b5f610fcb84828501610f95565b91505092915050565b610fdd81610f76565b82525050565b5f602082019050610ff65f830184610fd4565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61103e82610ffc565b6110488185611006565b9350611058818560208601611016565b61106181611024565b840191505092915050565b5f6020820190508181035f8301526110848184611034565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110b58261108c565b9050919050565b6110c5816110ab565b81146110cf575f80fd5b50565b5f813590506110e0816110bc565b92915050565b5f80604083850312156110fc576110fb610f72565b5b5f611109858286016110d2565b925050602061111a85828601610f95565b9150509250929050565b5f8115159050919050565b61113881611124565b82525050565b5f6020820190506111515f83018461112f565b92915050565b5f805f6060848603121561116e5761116d610f72565b5b5f61117b868287016110d2565b935050602061118c868287016110d2565b925050604061119d86828701610f95565b9150509250925092565b5f80604083850312156111bd576111bc610f72565b5b5f6111ca85828601610f95565b92505060206111db85828601610f95565b9150509250929050565b5f60ff82169050919050565b6111fa816111e5565b82525050565b5f6020820190506112135f8301846111f1565b92915050565b5f6020828403121561122e5761122d610f72565b5b5f61123b848285016110d2565b91505092915050565b61124d816110ab565b82525050565b5f6020820190506112665f830184611244565b92915050565b5f805f6060848603121561128357611282610f72565b5b5f61129086828701610f95565b93505060206112a186828701610f95565b92505060406112b286828701610f95565b9150509250925092565b5f80604083850312156112d2576112d1610f72565b5b5f6112df858286016110d2565b92505060206112f0858286016110d2565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061133e57607f821691505b602082108103611351576113506112fa565b5b50919050565b7f4552433939393a2044696d656e73696f6e206f7574206f662072616e676500005f82015250565b5f61138b601e83611006565b915061139682611357565b602082019050919050565b5f6020820190508181035f8301526113b88161137f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6113f682610f76565b915061140183610f76565b925082820261140f81610f76565b91508282048414831517611426576114256113bf565b5b5092915050565b5f61143782610f76565b915061144283610f76565b925082820190508082111561145a576114596113bf565b5b92915050565b5f819050919050565b61147a61147582610f76565b611460565b82525050565b5f8160601b9050919050565b5f61149682611480565b9050919050565b5f6114a78261148c565b9050919050565b6114bf6114ba826110ab565b61149d565b82525050565b5f6114d08286611469565b6020820191506114e082856114ae565b6014820191506114f08284611469565b602082019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61153882610f76565b915061154383610f76565b92508261155357611552611501565b5b828206905092915050565b5f6060820190506115715f830186611244565b61157e6020830185610fd4565b61158b6040830184610fd4565b94935050505056fea26469706673582212203fe8051bca8808df8bd11dbc126a3ee57d640d56ed9b69e30601439b42a7295b64736f6c634300081a0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000003b9ac9ff000000000000000000000000f6815180780d1dfcad85b91ee7c05c31b02241960000000000000000000000000000000000000000000000000000000000000006455243393939000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046e696e6500000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): ERC999
Arg [1] : symbol (string): nine
Arg [2] : initialSupply (uint256): 999999999
Arg [3] : initialOwner (address): 0xf6815180780D1DfCaD85b91Ee7c05C31b0224196

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000000000000000000000000000000000003b9ac9ff
Arg [3] : 000000000000000000000000f6815180780d1dfcad85b91ee7c05c31b0224196
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 4552433939390000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 6e696e6500000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

2456:1565:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2534:55;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2074:89:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4293:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2502:25:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3144:97:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5039:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3381:237:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3002:82:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3299:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2293:101:0;;;:::i;:::-;;1638:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2276:93:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3060:313:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3610:178:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3626:390:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3846:140:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2543:215:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2534:55:6;;;;;;;;;;;;;;;;;:::o;2074:89:2:-;2119:13;2151:5;2144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89;:::o;4293:186::-;4366:4;4382:13;4398:12;:10;:12::i;:::-;4382:28;;4420:31;4429:5;4436:7;4445:5;4420:8;:31::i;:::-;4468:4;4461:11;;;4293:186;;;;:::o;2502:25:6:-;;;;:::o;3144:97:2:-;3196:7;3222:12;;3215:19;;3144:97;:::o;5039:244::-;5126:4;5142:15;5160:12;:10;:12::i;:::-;5142:30;;5182:37;5198:4;5204:7;5213:5;5182:15;:37::i;:::-;5229:26;5239:4;5245:2;5249:5;5229:9;:26::i;:::-;5272:4;5265:11;;;5039:244;;;;;:::o;3381:237:6:-;3471:7;3511:1;3499:9;:13;3491:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3565:20;:45;3600:9;3596:1;3586:7;:11;;;;:::i;:::-;:23;;;;:::i;:::-;3565:45;;;;;;;;;;;;3558:52;;3381:237;;;;:::o;3002:82:2:-;3051:5;3075:2;3068:9;;3002:82;:::o;3299:116::-;3364:7;3390:9;:18;3400:7;3390:18;;;;;;;;;;;;;;;;3383:25;;3299:116;;;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1638:85::-;1684:7;1710:6;;;;;;;;;;;1703:13;;1638:85;:::o;2276:93:2:-;2323:13;2355:7;2348:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2276:93;:::o;3060:313:6:-;1531:13:0;:11;:13::i;:::-;3195:1:6::1;3183:9;:13;3175:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3290:5;3242:20;:45;3277:9;3273:1;3263:7;:11;;;;:::i;:::-;:23;;;;:::i;:::-;3242:45;;;;;;;;;;;:53;;;;3348:9;3339:7;3311:54;3359:5;3311:54;;;;;;:::i;:::-;;;;;;;;3060:313:::0;;;:::o;3610:178:2:-;3679:4;3695:13;3711:12;:10;:12::i;:::-;3695:28;;3733:27;3743:5;3750:2;3754:5;3733:9;:27::i;:::-;3777:4;3770:11;;;3610:178;;;;:::o;3626:390:6:-;3693:7;1531:13:0;:11;:13::i;:::-;3761:15:6::1;3778:10;3790;;3744:57;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3734:68;;;;;;3726:77;;3713:10;:90;;;;3814:19;3849:3;3836:10;;:16;;;;:::i;:::-;3814:38;;3899:11;3863:20;:33;3894:1;3884:7;:11;;;;:::i;:::-;3863:33;;;;;;;;;;;:47;;;;3964:1;3955:7;3927:52;3967:11;3927:52;;;;;;:::i;:::-;;;;;;;;3997:11;3990:18;;;3626:390:::0;;;:::o;3846:140:2:-;3926:7;3952:11;:18;3964:5;3952:18;;;;;;;;;;;;;;;:27;3971:7;3952:27;;;;;;;;;;;;;;;;3945:34;;3846:140;;;;:::o;2543:215:0:-;1531:13;:11;:13::i;:::-;2647:1:::1;2627:22;;:8;:22;;::::0;2623:91:::1;;2700:1;2672:31;;;;;;;;;;;:::i;:::-;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;656:96:5:-;709:7;735:10;728:17;;656:96;:::o;8989:128:2:-;9073:37;9082:5;9089:7;9098:5;9105:4;9073:8;:37::i;:::-;8989:128;;;:::o;10663:477::-;10762:24;10789:25;10799:5;10806:7;10789:9;:25::i;:::-;10762:52;;10848:17;10828:16;:37;10824:310;;10904:5;10885:16;:24;10881:130;;;10963:7;10972:16;10990:5;10936:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10881:130;11052:57;11061:5;11068:7;11096:5;11077:16;:24;11103:5;11052:8;:57::i;:::-;10824:310;10752:388;10663:477;;;:::o;5656:300::-;5755:1;5739:18;;:4;:18;;;5735:86;;5807:1;5780:30;;;;;;;;;;;:::i;:::-;;;;;;;;5735:86;5848:1;5834:16;;:2;:16;;;5830:86;;5902:1;5873:32;;;;;;;;;;;:::i;:::-;;;;;;;;5830:86;5925:24;5933:4;5939:2;5943:5;5925:7;:24::i;:::-;5656:300;;;:::o;1796:162:0:-;1866:12;:10;:12::i;:::-;1855:23;;:7;:5;:7::i;:::-;:23;;;1851:101;;1928:12;:10;:12::i;:::-;1901:40;;;;;;;;;;;:::i;:::-;;;;;;;;1851:101;1796:162::o;2912:187::-;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;9949:432:2:-;10078:1;10061:19;;:5;:19;;;10057:89;;10132:1;10103:32;;;;;;;;;;;:::i;:::-;;;;;;;;10057:89;10178:1;10159:21;;:7;:21;;;10155:90;;10231:1;10203:31;;;;;;;;;;;:::i;:::-;;;;;;;;10155:90;10284:5;10254:11;:18;10266:5;10254:18;;;;;;;;;;;;;;;:27;10273:7;10254:27;;;;;;;;;;;;;;;:35;;;;10303:9;10299:76;;;10349:7;10333:31;;10342:5;10333:31;;;10358:5;10333:31;;;;;;:::i;:::-;;;;;;;;10299:76;9949:432;;;;:::o;6271:1107::-;6376:1;6360:18;;:4;:18;;;6356:540;;6512:5;6496:12;;:21;;;;;;;:::i;:::-;;;;;;;;6356:540;;;6548:19;6570:9;:15;6580:4;6570:15;;;;;;;;;;;;;;;;6548:37;;6617:5;6603:11;:19;6599:115;;;6674:4;6680:11;6693:5;6649:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6599:115;6866:5;6852:11;:19;6834:9;:15;6844:4;6834:15;;;;;;;;;;;;;;;:37;;;;6534:362;6356:540;6924:1;6910:16;;:2;:16;;;6906:425;;7089:5;7073:12;;:21;;;;;;;;;;;6906:425;;;7301:5;7284:9;:13;7294:2;7284:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6906:425;7361:2;7346:25;;7355:4;7346:25;;;7365:5;7346:25;;;;;;:::i;:::-;;;;;;;;6271:1107;;;:::o;88:117:7:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1025:118;;:::o;1149:222::-;1242:4;1280:2;1269:9;1265:18;1257:26;;1293:71;1361:1;1350:9;1346:17;1337:6;1293:71;:::i;:::-;1149:222;;;;:::o;1377:99::-;1429:6;1463:5;1457:12;1447:22;;1377:99;;;:::o;1482:169::-;1566:11;1600:6;1595:3;1588:19;1640:4;1635:3;1631:14;1616:29;;1482:169;;;;:::o;1657:139::-;1746:6;1741:3;1736;1730:23;1787:1;1778:6;1773:3;1769:16;1762:27;1657:139;;;:::o;1802:102::-;1843:6;1894:2;1890:7;1885:2;1878:5;1874:14;1870:28;1860:38;;1802:102;;;:::o;1910:377::-;1998:3;2026:39;2059:5;2026:39;:::i;:::-;2081:71;2145:6;2140:3;2081:71;:::i;:::-;2074:78;;2161:65;2219:6;2214:3;2207:4;2200:5;2196:16;2161:65;:::i;:::-;2251:29;2273:6;2251:29;:::i;:::-;2246:3;2242:39;2235:46;;2002:285;1910:377;;;;:::o;2293:313::-;2406:4;2444:2;2433:9;2429:18;2421:26;;2493:9;2487:4;2483:20;2479:1;2468:9;2464:17;2457:47;2521:78;2594:4;2585:6;2521:78;:::i;:::-;2513:86;;2293:313;;;;:::o;2612:126::-;2649:7;2689:42;2682:5;2678:54;2667:65;;2612:126;;;:::o;2744:96::-;2781:7;2810:24;2828:5;2810:24;:::i;:::-;2799:35;;2744:96;;;:::o;2846:122::-;2919:24;2937:5;2919:24;:::i;:::-;2912:5;2909:35;2899:63;;2958:1;2955;2948:12;2899:63;2846:122;:::o;2974:139::-;3020:5;3058:6;3045:20;3036:29;;3074:33;3101:5;3074:33;:::i;:::-;2974:139;;;;:::o;3119:474::-;3187:6;3195;3244:2;3232:9;3223:7;3219:23;3215:32;3212:119;;;3250:79;;:::i;:::-;3212:119;3370:1;3395:53;3440:7;3431:6;3420:9;3416:22;3395:53;:::i;:::-;3385:63;;3341:117;3497:2;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3468:118;3119:474;;;;;:::o;3599:90::-;3633:7;3676:5;3669:13;3662:21;3651:32;;3599:90;;;:::o;3695:109::-;3776:21;3791:5;3776:21;:::i;:::-;3771:3;3764:34;3695:109;;:::o;3810:210::-;3897:4;3935:2;3924:9;3920:18;3912:26;;3948:65;4010:1;3999:9;3995:17;3986:6;3948:65;:::i;:::-;3810:210;;;;:::o;4026:619::-;4103:6;4111;4119;4168:2;4156:9;4147:7;4143:23;4139:32;4136:119;;;4174:79;;:::i;:::-;4136:119;4294:1;4319:53;4364:7;4355:6;4344:9;4340:22;4319:53;:::i;:::-;4309:63;;4265:117;4421:2;4447:53;4492:7;4483:6;4472:9;4468:22;4447:53;:::i;:::-;4437:63;;4392:118;4549:2;4575:53;4620:7;4611:6;4600:9;4596:22;4575:53;:::i;:::-;4565:63;;4520:118;4026:619;;;;;:::o;4651:474::-;4719:6;4727;4776:2;4764:9;4755:7;4751:23;4747:32;4744:119;;;4782:79;;:::i;:::-;4744:119;4902:1;4927:53;4972:7;4963:6;4952:9;4948:22;4927:53;:::i;:::-;4917:63;;4873:117;5029:2;5055:53;5100:7;5091:6;5080:9;5076:22;5055:53;:::i;:::-;5045:63;;5000:118;4651:474;;;;;:::o;5131:86::-;5166:7;5206:4;5199:5;5195:16;5184:27;;5131:86;;;:::o;5223:112::-;5306:22;5322:5;5306:22;:::i;:::-;5301:3;5294:35;5223:112;;:::o;5341:214::-;5430:4;5468:2;5457:9;5453:18;5445:26;;5481:67;5545:1;5534:9;5530:17;5521:6;5481:67;:::i;:::-;5341:214;;;;:::o;5561:329::-;5620:6;5669:2;5657:9;5648:7;5644:23;5640:32;5637:119;;;5675:79;;:::i;:::-;5637:119;5795:1;5820:53;5865:7;5856:6;5845:9;5841:22;5820:53;:::i;:::-;5810:63;;5766:117;5561:329;;;;:::o;5896:118::-;5983:24;6001:5;5983:24;:::i;:::-;5978:3;5971:37;5896:118;;:::o;6020:222::-;6113:4;6151:2;6140:9;6136:18;6128:26;;6164:71;6232:1;6221:9;6217:17;6208:6;6164:71;:::i;:::-;6020:222;;;;:::o;6248:619::-;6325:6;6333;6341;6390:2;6378:9;6369:7;6365:23;6361:32;6358:119;;;6396:79;;:::i;:::-;6358:119;6516:1;6541:53;6586:7;6577:6;6566:9;6562:22;6541:53;:::i;:::-;6531:63;;6487:117;6643:2;6669:53;6714:7;6705:6;6694:9;6690:22;6669:53;:::i;:::-;6659:63;;6614:118;6771:2;6797:53;6842:7;6833:6;6822:9;6818:22;6797:53;:::i;:::-;6787:63;;6742:118;6248:619;;;;;:::o;6873:474::-;6941:6;6949;6998:2;6986:9;6977:7;6973:23;6969:32;6966:119;;;7004:79;;:::i;:::-;6966:119;7124:1;7149:53;7194:7;7185:6;7174:9;7170:22;7149:53;:::i;:::-;7139:63;;7095:117;7251:2;7277:53;7322:7;7313:6;7302:9;7298:22;7277:53;:::i;:::-;7267:63;;7222:118;6873:474;;;;;:::o;7353:180::-;7401:77;7398:1;7391:88;7498:4;7495:1;7488:15;7522:4;7519:1;7512:15;7539:320;7583:6;7620:1;7614:4;7610:12;7600:22;;7667:1;7661:4;7657:12;7688:18;7678:81;;7744:4;7736:6;7732:17;7722:27;;7678:81;7806:2;7798:6;7795:14;7775:18;7772:38;7769:84;;7825:18;;:::i;:::-;7769:84;7590:269;7539:320;;;:::o;7865:180::-;8005:32;8001:1;7993:6;7989:14;7982:56;7865:180;:::o;8051:366::-;8193:3;8214:67;8278:2;8273:3;8214:67;:::i;:::-;8207:74;;8290:93;8379:3;8290:93;:::i;:::-;8408:2;8403:3;8399:12;8392:19;;8051:366;;;:::o;8423:419::-;8589:4;8627:2;8616:9;8612:18;8604:26;;8676:9;8670:4;8666:20;8662:1;8651:9;8647:17;8640:47;8704:131;8830:4;8704:131;:::i;:::-;8696:139;;8423:419;;;:::o;8848:180::-;8896:77;8893:1;8886:88;8993:4;8990:1;8983:15;9017:4;9014:1;9007:15;9034:410;9074:7;9097:20;9115:1;9097:20;:::i;:::-;9092:25;;9131:20;9149:1;9131:20;:::i;:::-;9126:25;;9186:1;9183;9179:9;9208:30;9226:11;9208:30;:::i;:::-;9197:41;;9387:1;9378:7;9374:15;9371:1;9368:22;9348:1;9341:9;9321:83;9298:139;;9417:18;;:::i;:::-;9298:139;9082:362;9034:410;;;;:::o;9450:191::-;9490:3;9509:20;9527:1;9509:20;:::i;:::-;9504:25;;9543:20;9561:1;9543:20;:::i;:::-;9538:25;;9586:1;9583;9579:9;9572:16;;9607:3;9604:1;9601:10;9598:36;;;9614:18;;:::i;:::-;9598:36;9450:191;;;;:::o;9647:79::-;9686:7;9715:5;9704:16;;9647:79;;;:::o;9732:157::-;9837:45;9857:24;9875:5;9857:24;:::i;:::-;9837:45;:::i;:::-;9832:3;9825:58;9732:157;;:::o;9895:94::-;9928:8;9976:5;9972:2;9968:14;9947:35;;9895:94;;;:::o;9995:::-;10034:7;10063:20;10077:5;10063:20;:::i;:::-;10052:31;;9995:94;;;:::o;10095:100::-;10134:7;10163:26;10183:5;10163:26;:::i;:::-;10152:37;;10095:100;;;:::o;10201:157::-;10306:45;10326:24;10344:5;10326:24;:::i;:::-;10306:45;:::i;:::-;10301:3;10294:58;10201:157;;:::o;10364:538::-;10532:3;10547:75;10618:3;10609:6;10547:75;:::i;:::-;10647:2;10642:3;10638:12;10631:19;;10660:75;10731:3;10722:6;10660:75;:::i;:::-;10760:2;10755:3;10751:12;10744:19;;10773:75;10844:3;10835:6;10773:75;:::i;:::-;10873:2;10868:3;10864:12;10857:19;;10893:3;10886:10;;10364:538;;;;;;:::o;10908:180::-;10956:77;10953:1;10946:88;11053:4;11050:1;11043:15;11077:4;11074:1;11067:15;11094:176;11126:1;11143:20;11161:1;11143:20;:::i;:::-;11138:25;;11177:20;11195:1;11177:20;:::i;:::-;11172:25;;11216:1;11206:35;;11221:18;;:::i;:::-;11206:35;11262:1;11259;11255:9;11250:14;;11094:176;;;;:::o;11276:442::-;11425:4;11463:2;11452:9;11448:18;11440:26;;11476:71;11544:1;11533:9;11529:17;11520:6;11476:71;:::i;:::-;11557:72;11625:2;11614:9;11610:18;11601:6;11557:72;:::i;:::-;11639;11707:2;11696:9;11692:18;11683:6;11639:72;:::i;:::-;11276:442;;;;;;:::o

Swarm Source

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