ETH Price: $3,244.41 (+0.89%)

Token

​ better-gmx.eth.link (better-gmx.eth.link)

Overview

Max Total Supply

21,000,000 better-gmx.eth.link

Holders

122,593

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1 better-gmx.eth.link

Value
$0.00
0x264e71b5794ff9961eac14dee4ce410899e344a8
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
betterThanGmx

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: betterThanGmx.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./Ownable.sol";

contract betterThanGmx is ERC20, Ownable(msg.sender) {
    uint8 private _decimals = 18;

    mapping(address => bool) private _whitelist;

    event AddedToWhitelist(address indexed account);
    event RemovedFromWhitelist(address indexed account);

    constructor() ERC20("\u200B better-gmx.eth.link", "better-gmx.eth.link") {
        _mint(msg.sender, 21000000 * 10 ** uint(_decimals));
        // Owner default 
        _whitelist[msg.sender] = true;
    }

    function addToWhitelist(address account) public onlyOwner {
        _whitelist[account] = true;
        emit AddedToWhitelist(account);
    }

    function removeFromWhitelist(address account) public onlyOwner {
        _whitelist[account] = false;
        emit RemovedFromWhitelist(account);
    }

    function mint(uint256 amount) public onlyOwner {
        _mint(msg.sender, amount);
    }

    function isWhitelisted(address account) public view returns (bool) {
        return _whitelist[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        require(isWhitelisted(msg.sender) || isWhitelisted(recipient), "Transfer not allowed");
        return super.transfer(recipient, amount);
    }

    function transferBatch(address[] memory recipients, uint256 amount) public returns (bool) {
        require(isWhitelisted(msg.sender), "Only whitelisted addresses can initiate batch transfer");
        require(amount * recipients.length <= balanceOf(msg.sender), "Insufficient balance");

        for (uint256 i = 0; i < recipients.length; i++) {
            _transfer(msg.sender, recipients[i], amount);
        }

        return true;
    }
}

File 2 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 3 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 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 "./IERC20Metadata.sol";
import {Context} from "./Context.sol";
import {IERC20Errors} from "./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: 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);
}

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: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "./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);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"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":"account","type":"address"}],"name":"AddedToWhitelist","type":"event"},{"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":"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":"account","type":"address"}],"name":"RemovedFromWhitelist","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":"account","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","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":"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":"address","name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromWhitelist","outputs":[],"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":"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":"recipients","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferBatch","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"}]

60806040526012600560146101000a81548160ff021916908360ff1602179055503480156200002c575f80fd5b50336040518060400160405280601781526020017fe2808b206265747465722d676d782e6574682e6c696e6b0000000000000000008152506040518060400160405280601381526020017f6265747465722d676d782e6574682e6c696e6b000000000000000000000000008152508160039081620000ab9190620007b8565b508060049081620000bd9190620007b8565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000133575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200012a9190620008df565b60405180910390fd5b6200014481620001e360201b60201c565b506200018833600560149054906101000a900460ff1660ff16600a6200016b919062000a77565b6301406f406200017c919062000ac7565b620002a660201b60201c565b600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000bb2565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000319575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620003109190620008df565b60405180910390fd5b6200032c5f83836200033060201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000384578060025f82825462000377919062000b11565b9250508190555062000455565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101562000410578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620004079392919062000b5c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200049e578060025f8282540392505081905550620004e8565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000547919062000b97565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620005d057607f821691505b602082108103620005e657620005e56200058b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200064a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200060d565b6200065686836200060d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620006a06200069a62000694846200066e565b62000677565b6200066e565b9050919050565b5f819050919050565b620006bb8362000680565b620006d3620006ca82620006a7565b84845462000619565b825550505050565b5f90565b620006e9620006db565b620006f6818484620006b0565b505050565b5b818110156200071d57620007115f82620006df565b600181019050620006fc565b5050565b601f8211156200076c576200073681620005ec565b6200074184620005fe565b8101602085101562000751578190505b620007696200076085620005fe565b830182620006fb565b50505b505050565b5f82821c905092915050565b5f6200078e5f198460080262000771565b1980831691505092915050565b5f620007a883836200077d565b9150826002028217905092915050565b620007c38262000554565b67ffffffffffffffff811115620007df57620007de6200055e565b5b620007eb8254620005b8565b620007f882828562000721565b5f60209050601f8311600181146200082e575f841562000819578287015190505b6200082585826200079b565b86555062000894565b601f1984166200083e86620005ec565b5f5b82811015620008675784890151825560018201915060208501945060208101905062000840565b8683101562000887578489015162000883601f8916826200077d565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620008c7826200089c565b9050919050565b620008d981620008bb565b82525050565b5f602082019050620008f45f830184620008ce565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000984578086048111156200095c576200095b620008fa565b5b60018516156200096c5780820291505b80810290506200097c8562000927565b94506200093c565b94509492505050565b5f826200099e576001905062000a70565b81620009ad575f905062000a70565b8160018114620009c65760028114620009d15762000a07565b600191505062000a70565b60ff841115620009e657620009e5620008fa565b5b8360020a91508482111562000a0057620009ff620008fa565b5b5062000a70565b5060208310610133831016604e8410600b841016171562000a415782820a90508381111562000a3b5762000a3a620008fa565b5b62000a70565b62000a50848484600162000933565b9250905081840481111562000a6a5762000a69620008fa565b5b81810290505b9392505050565b5f62000a83826200066e565b915062000a90836200066e565b925062000abf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200098d565b905092915050565b5f62000ad3826200066e565b915062000ae0836200066e565b925082820262000af0816200066e565b9150828204841483151762000b0a5762000b09620008fa565b5b5092915050565b5f62000b1d826200066e565b915062000b2a836200066e565b925082820190508082111562000b455762000b44620008fa565b5b92915050565b62000b56816200066e565b82525050565b5f60608201905062000b715f830186620008ce565b62000b80602083018562000b4b565b62000b8f604083018462000b4b565b949350505050565b5f60208201905062000bac5f83018462000b4b565b92915050565b6118dd8062000bc05f395ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c8063806e085e116100a0578063a0712d681161006f578063a0712d68146102b9578063a9059cbb146102d5578063dd62ed3e14610305578063e43252d714610335578063f2fde38b1461035157610109565b8063806e085e146102315780638ab1d681146102615780638da5cb5b1461027d57806395d89b411461029b57610109565b8063313ce567116100dc578063313ce567146101a95780633af32abf146101c757806370a08231146101f7578063715018a61461022757610109565b806306fdde031461010d578063095ea7b31461012b57806318160ddd1461015b57806323b872dd14610179575b5f80fd5b61011561036d565b6040516101229190611171565b60405180910390f35b6101456004803603810190610140919061122f565b6103fd565b6040516101529190611287565b60405180910390f35b61016361041f565b60405161017091906112af565b60405180910390f35b610193600480360381019061018e91906112c8565b610428565b6040516101a09190611287565b60405180910390f35b6101b1610456565b6040516101be9190611333565b60405180910390f35b6101e160048036038101906101dc919061134c565b61045e565b6040516101ee9190611287565b60405180910390f35b610211600480360381019061020c919061134c565b6104b0565b60405161021e91906112af565b60405180910390f35b61022f6104f5565b005b61024b600480360381019061024691906114b7565b610508565b6040516102589190611287565b60405180910390f35b61027b6004803603810190610276919061134c565b6105f6565b005b610285610698565b6040516102929190611520565b60405180910390f35b6102a36106c0565b6040516102b09190611171565b60405180910390f35b6102d360048036038101906102ce9190611539565b610750565b005b6102ef60048036038101906102ea919061122f565b610765565b6040516102fc9190611287565b60405180910390f35b61031f600480360381019061031a9190611564565b6107d0565b60405161032c91906112af565b60405180910390f35b61034f600480360381019061034a919061134c565b610852565b005b61036b6004803603810190610366919061134c565b6108f5565b005b60606003805461037c906115cf565b80601f01602080910402602001604051908101604052809291908181526020018280546103a8906115cf565b80156103f35780601f106103ca576101008083540402835291602001916103f3565b820191905f5260205f20905b8154815290600101906020018083116103d657829003601f168201915b5050505050905090565b5f80610407610979565b9050610414818585610980565b600191505092915050565b5f600254905090565b5f80610432610979565b905061043f858285610992565b61044a858585610a24565b60019150509392505050565b5f6012905090565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6104fd610b14565b6105065f610b9b565b565b5f6105123361045e565b610551576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105489061166f565b60405180910390fd5b61055a336104b0565b83518361056791906116ba565b11156105a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059f90611745565b60405180910390fd5b5f5b83518110156105eb576105d8338583815181106105ca576105c9611763565b5b602002602001015185610a24565b80806105e390611790565b9150506105aa565b506001905092915050565b6105fe610b14565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75760405160405180910390a250565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546106cf906115cf565b80601f01602080910402602001604051908101604052809291908181526020018280546106fb906115cf565b80156107465780601f1061071d57610100808354040283529160200191610746565b820191905f5260205f20905b81548152906001019060200180831161072957829003601f168201915b5050505050905090565b610758610b14565b6107623382610c5e565b50565b5f61076f3361045e565b8061077f575061077e8361045e565b5b6107be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b590611821565b60405180910390fd5b6107c88383610cdd565b905092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61085a610b14565b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fa850ae9193f515cbae8d35e8925bd2be26627fc91bce650b8652ed254e9cab0360405160405180910390a250565b6108fd610b14565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361096d575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016109649190611520565b60405180910390fd5b61097681610b9b565b50565b5f33905090565b61098d8383836001610cff565b505050565b5f61099d84846107d0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a1e5781811015610a0f578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610a069392919061183f565b60405180910390fd5b610a1d84848484035f610cff565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a94575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a8b9190611520565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b04575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610afb9190611520565b60405180910390fd5b610b0f838383610ece565b505050565b610b1c610979565b73ffffffffffffffffffffffffffffffffffffffff16610b3a610698565b73ffffffffffffffffffffffffffffffffffffffff1614610b9957610b5d610979565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b909190611520565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cce575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610cc59190611520565b60405180910390fd5b610cd95f8383610ece565b5050565b5f80610ce7610979565b9050610cf4818585610a24565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d6f575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610d669190611520565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ddf575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610dd69190611520565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610ec8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ebf91906112af565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f1e578060025f828254610f129190611874565b92505081905550610fec565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610fa7578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610f9e9392919061183f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611033578060025f828254039250508190555061107d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110da91906112af565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561111e578082015181840152602081019050611103565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611143826110e7565b61114d81856110f1565b935061115d818560208601611101565b61116681611129565b840191505092915050565b5f6020820190508181035f8301526111898184611139565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6111cb826111a2565b9050919050565b6111db816111c1565b81146111e5575f80fd5b50565b5f813590506111f6816111d2565b92915050565b5f819050919050565b61120e816111fc565b8114611218575f80fd5b50565b5f8135905061122981611205565b92915050565b5f80604083850312156112455761124461119a565b5b5f611252858286016111e8565b92505060206112638582860161121b565b9150509250929050565b5f8115159050919050565b6112818161126d565b82525050565b5f60208201905061129a5f830184611278565b92915050565b6112a9816111fc565b82525050565b5f6020820190506112c25f8301846112a0565b92915050565b5f805f606084860312156112df576112de61119a565b5b5f6112ec868287016111e8565b93505060206112fd868287016111e8565b925050604061130e8682870161121b565b9150509250925092565b5f60ff82169050919050565b61132d81611318565b82525050565b5f6020820190506113465f830184611324565b92915050565b5f602082840312156113615761136061119a565b5b5f61136e848285016111e8565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6113b182611129565b810181811067ffffffffffffffff821117156113d0576113cf61137b565b5b80604052505050565b5f6113e2611191565b90506113ee82826113a8565b919050565b5f67ffffffffffffffff82111561140d5761140c61137b565b5b602082029050602081019050919050565b5f80fd5b5f61143461142f846113f3565b6113d9565b905080838252602082019050602084028301858111156114575761145661141e565b5b835b81811015611480578061146c88826111e8565b845260208401935050602081019050611459565b5050509392505050565b5f82601f83011261149e5761149d611377565b5b81356114ae848260208601611422565b91505092915050565b5f80604083850312156114cd576114cc61119a565b5b5f83013567ffffffffffffffff8111156114ea576114e961119e565b5b6114f68582860161148a565b92505060206115078582860161121b565b9150509250929050565b61151a816111c1565b82525050565b5f6020820190506115335f830184611511565b92915050565b5f6020828403121561154e5761154d61119a565b5b5f61155b8482850161121b565b91505092915050565b5f806040838503121561157a5761157961119a565b5b5f611587858286016111e8565b9250506020611598858286016111e8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806115e657607f821691505b6020821081036115f9576115f86115a2565b5b50919050565b7f4f6e6c792077686974656c6973746564206164647265737365732063616e20695f8201527f6e697469617465206261746368207472616e7366657200000000000000000000602082015250565b5f6116596036836110f1565b9150611664826115ff565b604082019050919050565b5f6020820190508181035f8301526116868161164d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6116c4826111fc565b91506116cf836111fc565b92508282026116dd816111fc565b915082820484148315176116f4576116f361168d565b5b5092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61172f6014836110f1565b915061173a826116fb565b602082019050919050565b5f6020820190508181035f83015261175c81611723565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61179a826111fc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117cc576117cb61168d565b5b600182019050919050565b7f5472616e73666572206e6f7420616c6c6f7765640000000000000000000000005f82015250565b5f61180b6014836110f1565b9150611816826117d7565b602082019050919050565b5f6020820190508181035f830152611838816117ff565b9050919050565b5f6060820190506118525f830186611511565b61185f60208301856112a0565b61186c60408301846112a0565b949350505050565b5f61187e826111fc565b9150611889836111fc565b92508282019050808211156118a1576118a061168d565b5b9291505056fea2646970667358221220bfcb99a66d4013f389269659deca8538c17162f81c04b7d80ba5ae0c328ec71e64736f6c63430008150033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610109575f3560e01c8063806e085e116100a0578063a0712d681161006f578063a0712d68146102b9578063a9059cbb146102d5578063dd62ed3e14610305578063e43252d714610335578063f2fde38b1461035157610109565b8063806e085e146102315780638ab1d681146102615780638da5cb5b1461027d57806395d89b411461029b57610109565b8063313ce567116100dc578063313ce567146101a95780633af32abf146101c757806370a08231146101f7578063715018a61461022757610109565b806306fdde031461010d578063095ea7b31461012b57806318160ddd1461015b57806323b872dd14610179575b5f80fd5b61011561036d565b6040516101229190611171565b60405180910390f35b6101456004803603810190610140919061122f565b6103fd565b6040516101529190611287565b60405180910390f35b61016361041f565b60405161017091906112af565b60405180910390f35b610193600480360381019061018e91906112c8565b610428565b6040516101a09190611287565b60405180910390f35b6101b1610456565b6040516101be9190611333565b60405180910390f35b6101e160048036038101906101dc919061134c565b61045e565b6040516101ee9190611287565b60405180910390f35b610211600480360381019061020c919061134c565b6104b0565b60405161021e91906112af565b60405180910390f35b61022f6104f5565b005b61024b600480360381019061024691906114b7565b610508565b6040516102589190611287565b60405180910390f35b61027b6004803603810190610276919061134c565b6105f6565b005b610285610698565b6040516102929190611520565b60405180910390f35b6102a36106c0565b6040516102b09190611171565b60405180910390f35b6102d360048036038101906102ce9190611539565b610750565b005b6102ef60048036038101906102ea919061122f565b610765565b6040516102fc9190611287565b60405180910390f35b61031f600480360381019061031a9190611564565b6107d0565b60405161032c91906112af565b60405180910390f35b61034f600480360381019061034a919061134c565b610852565b005b61036b6004803603810190610366919061134c565b6108f5565b005b60606003805461037c906115cf565b80601f01602080910402602001604051908101604052809291908181526020018280546103a8906115cf565b80156103f35780601f106103ca576101008083540402835291602001916103f3565b820191905f5260205f20905b8154815290600101906020018083116103d657829003601f168201915b5050505050905090565b5f80610407610979565b9050610414818585610980565b600191505092915050565b5f600254905090565b5f80610432610979565b905061043f858285610992565b61044a858585610a24565b60019150509392505050565b5f6012905090565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6104fd610b14565b6105065f610b9b565b565b5f6105123361045e565b610551576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105489061166f565b60405180910390fd5b61055a336104b0565b83518361056791906116ba565b11156105a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059f90611745565b60405180910390fd5b5f5b83518110156105eb576105d8338583815181106105ca576105c9611763565b5b602002602001015185610a24565b80806105e390611790565b9150506105aa565b506001905092915050565b6105fe610b14565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75760405160405180910390a250565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546106cf906115cf565b80601f01602080910402602001604051908101604052809291908181526020018280546106fb906115cf565b80156107465780601f1061071d57610100808354040283529160200191610746565b820191905f5260205f20905b81548152906001019060200180831161072957829003601f168201915b5050505050905090565b610758610b14565b6107623382610c5e565b50565b5f61076f3361045e565b8061077f575061077e8361045e565b5b6107be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b590611821565b60405180910390fd5b6107c88383610cdd565b905092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61085a610b14565b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fa850ae9193f515cbae8d35e8925bd2be26627fc91bce650b8652ed254e9cab0360405160405180910390a250565b6108fd610b14565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361096d575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016109649190611520565b60405180910390fd5b61097681610b9b565b50565b5f33905090565b61098d8383836001610cff565b505050565b5f61099d84846107d0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a1e5781811015610a0f578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610a069392919061183f565b60405180910390fd5b610a1d84848484035f610cff565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a94575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a8b9190611520565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b04575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610afb9190611520565b60405180910390fd5b610b0f838383610ece565b505050565b610b1c610979565b73ffffffffffffffffffffffffffffffffffffffff16610b3a610698565b73ffffffffffffffffffffffffffffffffffffffff1614610b9957610b5d610979565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b909190611520565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cce575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610cc59190611520565b60405180910390fd5b610cd95f8383610ece565b5050565b5f80610ce7610979565b9050610cf4818585610a24565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d6f575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610d669190611520565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ddf575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610dd69190611520565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610ec8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ebf91906112af565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f1e578060025f828254610f129190611874565b92505081905550610fec565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610fa7578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610f9e9392919061183f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611033578060025f828254039250508190555061107d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110da91906112af565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561111e578082015181840152602081019050611103565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611143826110e7565b61114d81856110f1565b935061115d818560208601611101565b61116681611129565b840191505092915050565b5f6020820190508181035f8301526111898184611139565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6111cb826111a2565b9050919050565b6111db816111c1565b81146111e5575f80fd5b50565b5f813590506111f6816111d2565b92915050565b5f819050919050565b61120e816111fc565b8114611218575f80fd5b50565b5f8135905061122981611205565b92915050565b5f80604083850312156112455761124461119a565b5b5f611252858286016111e8565b92505060206112638582860161121b565b9150509250929050565b5f8115159050919050565b6112818161126d565b82525050565b5f60208201905061129a5f830184611278565b92915050565b6112a9816111fc565b82525050565b5f6020820190506112c25f8301846112a0565b92915050565b5f805f606084860312156112df576112de61119a565b5b5f6112ec868287016111e8565b93505060206112fd868287016111e8565b925050604061130e8682870161121b565b9150509250925092565b5f60ff82169050919050565b61132d81611318565b82525050565b5f6020820190506113465f830184611324565b92915050565b5f602082840312156113615761136061119a565b5b5f61136e848285016111e8565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6113b182611129565b810181811067ffffffffffffffff821117156113d0576113cf61137b565b5b80604052505050565b5f6113e2611191565b90506113ee82826113a8565b919050565b5f67ffffffffffffffff82111561140d5761140c61137b565b5b602082029050602081019050919050565b5f80fd5b5f61143461142f846113f3565b6113d9565b905080838252602082019050602084028301858111156114575761145661141e565b5b835b81811015611480578061146c88826111e8565b845260208401935050602081019050611459565b5050509392505050565b5f82601f83011261149e5761149d611377565b5b81356114ae848260208601611422565b91505092915050565b5f80604083850312156114cd576114cc61119a565b5b5f83013567ffffffffffffffff8111156114ea576114e961119e565b5b6114f68582860161148a565b92505060206115078582860161121b565b9150509250929050565b61151a816111c1565b82525050565b5f6020820190506115335f830184611511565b92915050565b5f6020828403121561154e5761154d61119a565b5b5f61155b8482850161121b565b91505092915050565b5f806040838503121561157a5761157961119a565b5b5f611587858286016111e8565b9250506020611598858286016111e8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806115e657607f821691505b6020821081036115f9576115f86115a2565b5b50919050565b7f4f6e6c792077686974656c6973746564206164647265737365732063616e20695f8201527f6e697469617465206261746368207472616e7366657200000000000000000000602082015250565b5f6116596036836110f1565b9150611664826115ff565b604082019050919050565b5f6020820190508181035f8301526116868161164d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6116c4826111fc565b91506116cf836111fc565b92508282026116dd816111fc565b915082820484148315176116f4576116f361168d565b5b5092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61172f6014836110f1565b915061173a826116fb565b602082019050919050565b5f6020820190508181035f83015261175c81611723565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61179a826111fc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117cc576117cb61168d565b5b600182019050919050565b7f5472616e73666572206e6f7420616c6c6f7765640000000000000000000000005f82015250565b5f61180b6014836110f1565b9150611816826117d7565b602082019050919050565b5f6020820190508181035f830152611838816117ff565b9050919050565b5f6060820190506118525f830186611511565b61185f60208301856112a0565b61186c60408301846112a0565b949350505050565b5f61187e826111fc565b9150611889836111fc565b92508282019050808211156118a1576118a061168d565b5b9291505056fea2646970667358221220bfcb99a66d4013f389269659deca8538c17162f81c04b7d80ba5ae0c328ec71e64736f6c63430008150033

Deployed Bytecode Sourcemap

104:1669:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:89:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4257:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3108:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5003:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2966:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;970:110:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3263:116:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2286:101:4;;;:::i;:::-;;1329:442:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;718:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1631:85:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2240:93:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;875:89:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1086:237;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3810:140:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;571:141:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2536:215:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2038:89:1;2083:13;2115:5;2108:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:89;:::o;4257:186::-;4330:4;4346:13;4362:12;:10;:12::i;:::-;4346:28;;4384:31;4393:5;4400:7;4409:5;4384:8;:31::i;:::-;4432:4;4425:11;;;4257:186;;;;:::o;3108:97::-;3160:7;3186:12;;3179:19;;3108:97;:::o;5003:244::-;5090:4;5106:15;5124:12;:10;:12::i;:::-;5106:30;;5146:37;5162:4;5168:7;5177:5;5146:15;:37::i;:::-;5193:26;5203:4;5209:2;5213:5;5193:9;:26::i;:::-;5236:4;5229:11;;;5003:244;;;;;:::o;2966:82::-;3015:5;3039:2;3032:9;;2966:82;:::o;970:110:5:-;1031:4;1054:10;:19;1065:7;1054:19;;;;;;;;;;;;;;;;;;;;;;;;;1047:26;;970:110;;;:::o;3263:116:1:-;3328:7;3354:9;:18;3364:7;3354:18;;;;;;;;;;;;;;;;3347:25;;3263:116;;;:::o;2286:101:4:-;1524:13;:11;:13::i;:::-;2350:30:::1;2377:1;2350:18;:30::i;:::-;2286:101::o:0;1329:442:5:-;1413:4;1437:25;1451:10;1437:13;:25::i;:::-;1429:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;1569:21;1579:10;1569:9;:21::i;:::-;1548:10;:17;1539:6;:26;;;;:::i;:::-;:51;;1531:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;1631:9;1626:117;1650:10;:17;1646:1;:21;1626:117;;;1688:44;1698:10;1710;1721:1;1710:13;;;;;;;;:::i;:::-;;;;;;;;1725:6;1688:9;:44::i;:::-;1669:3;;;;;:::i;:::-;;;;1626:117;;;;1760:4;1753:11;;1329:442;;;;:::o;718:151::-;1524:13:4;:11;:13::i;:::-;813:5:5::1;791:10;:19;802:7;791:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;854:7;833:29;;;;;;;;;;;;718:151:::0;:::o;1631:85:4:-;1677:7;1703:6;;;;;;;;;;;1696:13;;1631:85;:::o;2240:93:1:-;2287:13;2319:7;2312:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2240:93;:::o;875:89:5:-;1524:13:4;:11;:13::i;:::-;932:25:5::1;938:10;950:6;932:5;:25::i;:::-;875:89:::0;:::o;1086:237::-;1164:4;1188:25;1202:10;1188:13;:25::i;:::-;:53;;;;1217:24;1231:9;1217:13;:24::i;:::-;1188:53;1180:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;1283:33;1298:9;1309:6;1283:14;:33::i;:::-;1276:40;;1086:237;;;;:::o;3810:140:1:-;3890:7;3916:11;:18;3928:5;3916:18;;;;;;;;;;;;;;;:27;3935:7;3916:27;;;;;;;;;;;;;;;;3909:34;;3810:140;;;;:::o;571:141:5:-;1524:13:4;:11;:13::i;:::-;661:4:5::1;639:10;:19;650:7;639:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;697:7;680:25;;;;;;;;;;;;571:141:::0;:::o;2536:215:4:-;1524:13;:11;:13::i;:::-;2640:1:::1;2620:22;;:8;:22;;::::0;2616:91:::1;;2693:1;2665:31;;;;;;;;;;;:::i;:::-;;;;;;;;2616:91;2716:28;2735:8;2716:18;:28::i;:::-;2536:215:::0;:::o;656:96:0:-;709:7;735:10;728:17;;656:96;:::o;8953:128:1:-;9037:37;9046:5;9053:7;9062:5;9069:4;9037:8;:37::i;:::-;8953:128;;;:::o;10627:477::-;10726:24;10753:25;10763:5;10770:7;10753:9;:25::i;:::-;10726:52;;10812:17;10792:16;:37;10788:310;;10868:5;10849:16;:24;10845:130;;;10927:7;10936:16;10954:5;10900:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10845:130;11016:57;11025:5;11032:7;11060:5;11041:16;:24;11067:5;11016:8;:57::i;:::-;10788:310;10716:388;10627:477;;;:::o;5620:300::-;5719:1;5703:18;;:4;:18;;;5699:86;;5771:1;5744:30;;;;;;;;;;;:::i;:::-;;;;;;;;5699:86;5812:1;5798:16;;:2;:16;;;5794:86;;5866:1;5837:32;;;;;;;;;;;:::i;:::-;;;;;;;;5794:86;5889:24;5897:4;5903:2;5907:5;5889:7;:24::i;:::-;5620:300;;;:::o;1789:162:4:-;1859:12;:10;:12::i;:::-;1848:23;;:7;:5;:7::i;:::-;:23;;;1844:101;;1921:12;:10;:12::i;:::-;1894:40;;;;;;;;;;;:::i;:::-;;;;;;;;1844:101;1789:162::o;2905:187::-;2978:16;2997:6;;;;;;;;;;;2978:25;;3022:8;3013:6;;:17;;;;;;;;;;;;;;;;;;3076:8;3045:40;;3066:8;3045:40;;;;;;;;;;;;2968:124;2905:187;:::o;7685:208:1:-;7774:1;7755:21;;:7;:21;;;7751:91;;7828:1;7799:32;;;;;;;;;;;:::i;:::-;;;;;;;;7751:91;7851:35;7867:1;7871:7;7880:5;7851:7;:35::i;:::-;7685:208;;:::o;3574:178::-;3643:4;3659:13;3675:12;:10;:12::i;:::-;3659:28;;3697:27;3707:5;3714:2;3718:5;3697:9;:27::i;:::-;3741:4;3734:11;;;3574:178;;;;:::o;9913:432::-;10042:1;10025:19;;:5;:19;;;10021:89;;10096:1;10067:32;;;;;;;;;;;:::i;:::-;;;;;;;;10021:89;10142:1;10123:21;;:7;:21;;;10119:90;;10195:1;10167:31;;;;;;;;;;;:::i;:::-;;;;;;;;10119:90;10248:5;10218:11;:18;10230:5;10218:18;;;;;;;;;;;;;;;:27;10237:7;10218:27;;;;;;;;;;;;;;;:35;;;;10267:9;10263:76;;;10313:7;10297:31;;10306:5;10297:31;;;10322:5;10297:31;;;;;;:::i;:::-;;;;;;;;10263:76;9913:432;;;;:::o;6235:1107::-;6340:1;6324:18;;:4;:18;;;6320:540;;6476:5;6460:12;;:21;;;;;;;:::i;:::-;;;;;;;;6320:540;;;6512:19;6534:9;:15;6544:4;6534:15;;;;;;;;;;;;;;;;6512:37;;6581:5;6567:11;:19;6563:115;;;6638:4;6644:11;6657:5;6613:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6563:115;6830:5;6816:11;:19;6798:9;:15;6808:4;6798:15;;;;;;;;;;;;;;;:37;;;;6498:362;6320:540;6888:1;6874:16;;:2;:16;;;6870:425;;7053:5;7037:12;;:21;;;;;;;;;;;6870:425;;;7265:5;7248:9;:13;7258:2;7248:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6870:425;7325:2;7310:25;;7319:4;7310:25;;;7329:5;7310:25;;;;;;:::i;:::-;;;;;;;;6235:1107;;;:::o;7:99:7:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:117::-;5297:1;5294;5287:12;5311:180;5359:77;5356:1;5349:88;5456:4;5453:1;5446:15;5480:4;5477:1;5470:15;5497:281;5580:27;5602:4;5580:27;:::i;:::-;5572:6;5568:40;5710:6;5698:10;5695:22;5674:18;5662:10;5659:34;5656:62;5653:88;;;5721:18;;:::i;:::-;5653:88;5761:10;5757:2;5750:22;5540:238;5497:281;;:::o;5784:129::-;5818:6;5845:20;;:::i;:::-;5835:30;;5874:33;5902:4;5894:6;5874:33;:::i;:::-;5784:129;;;:::o;5919:311::-;5996:4;6086:18;6078:6;6075:30;6072:56;;;6108:18;;:::i;:::-;6072:56;6158:4;6150:6;6146:17;6138:25;;6218:4;6212;6208:15;6200:23;;5919:311;;;:::o;6236:117::-;6345:1;6342;6335:12;6376:710;6472:5;6497:81;6513:64;6570:6;6513:64;:::i;:::-;6497:81;:::i;:::-;6488:90;;6598:5;6627:6;6620:5;6613:21;6661:4;6654:5;6650:16;6643:23;;6714:4;6706:6;6702:17;6694:6;6690:30;6743:3;6735:6;6732:15;6729:122;;;6762:79;;:::i;:::-;6729:122;6877:6;6860:220;6894:6;6889:3;6886:15;6860:220;;;6969:3;6998:37;7031:3;7019:10;6998:37;:::i;:::-;6993:3;6986:50;7065:4;7060:3;7056:14;7049:21;;6936:144;6920:4;6915:3;6911:14;6904:21;;6860:220;;;6864:21;6478:608;;6376:710;;;;;:::o;7109:370::-;7180:5;7229:3;7222:4;7214:6;7210:17;7206:27;7196:122;;7237:79;;:::i;:::-;7196:122;7354:6;7341:20;7379:94;7469:3;7461:6;7454:4;7446:6;7442:17;7379:94;:::i;:::-;7370:103;;7186:293;7109:370;;;;:::o;7485:684::-;7578:6;7586;7635:2;7623:9;7614:7;7610:23;7606:32;7603:119;;;7641:79;;:::i;:::-;7603:119;7789:1;7778:9;7774:17;7761:31;7819:18;7811:6;7808:30;7805:117;;;7841:79;;:::i;:::-;7805:117;7946:78;8016:7;8007:6;7996:9;7992:22;7946:78;:::i;:::-;7936:88;;7732:302;8073:2;8099:53;8144:7;8135:6;8124:9;8120:22;8099:53;:::i;:::-;8089:63;;8044:118;7485:684;;;;;:::o;8175:118::-;8262:24;8280:5;8262:24;:::i;:::-;8257:3;8250:37;8175:118;;:::o;8299:222::-;8392:4;8430:2;8419:9;8415:18;8407:26;;8443:71;8511:1;8500:9;8496:17;8487:6;8443:71;:::i;:::-;8299:222;;;;:::o;8527:329::-;8586:6;8635:2;8623:9;8614:7;8610:23;8606:32;8603:119;;;8641:79;;:::i;:::-;8603:119;8761:1;8786:53;8831:7;8822:6;8811:9;8807:22;8786:53;:::i;:::-;8776:63;;8732:117;8527:329;;;;:::o;8862:474::-;8930:6;8938;8987:2;8975:9;8966:7;8962:23;8958:32;8955:119;;;8993:79;;:::i;:::-;8955:119;9113:1;9138:53;9183:7;9174:6;9163:9;9159:22;9138:53;:::i;:::-;9128:63;;9084:117;9240:2;9266:53;9311:7;9302:6;9291:9;9287:22;9266:53;:::i;:::-;9256:63;;9211:118;8862:474;;;;;:::o;9342:180::-;9390:77;9387:1;9380:88;9487:4;9484:1;9477:15;9511:4;9508:1;9501:15;9528:320;9572:6;9609:1;9603:4;9599:12;9589:22;;9656:1;9650:4;9646:12;9677:18;9667:81;;9733:4;9725:6;9721:17;9711:27;;9667:81;9795:2;9787:6;9784:14;9764:18;9761:38;9758:84;;9814:18;;:::i;:::-;9758:84;9579:269;9528:320;;;:::o;9854:241::-;9994:34;9990:1;9982:6;9978:14;9971:58;10063:24;10058:2;10050:6;10046:15;10039:49;9854:241;:::o;10101:366::-;10243:3;10264:67;10328:2;10323:3;10264:67;:::i;:::-;10257:74;;10340:93;10429:3;10340:93;:::i;:::-;10458:2;10453:3;10449:12;10442:19;;10101:366;;;:::o;10473:419::-;10639:4;10677:2;10666:9;10662:18;10654:26;;10726:9;10720:4;10716:20;10712:1;10701:9;10697:17;10690:47;10754:131;10880:4;10754:131;:::i;:::-;10746:139;;10473:419;;;:::o;10898:180::-;10946:77;10943:1;10936:88;11043:4;11040:1;11033:15;11067:4;11064:1;11057:15;11084:410;11124:7;11147:20;11165:1;11147:20;:::i;:::-;11142:25;;11181:20;11199:1;11181:20;:::i;:::-;11176:25;;11236:1;11233;11229:9;11258:30;11276:11;11258:30;:::i;:::-;11247:41;;11437:1;11428:7;11424:15;11421:1;11418:22;11398:1;11391:9;11371:83;11348:139;;11467:18;;:::i;:::-;11348:139;11132:362;11084:410;;;;:::o;11500:170::-;11640:22;11636:1;11628:6;11624:14;11617:46;11500:170;:::o;11676:366::-;11818:3;11839:67;11903:2;11898:3;11839:67;:::i;:::-;11832:74;;11915:93;12004:3;11915:93;:::i;:::-;12033:2;12028:3;12024:12;12017:19;;11676:366;;;:::o;12048:419::-;12214:4;12252:2;12241:9;12237:18;12229:26;;12301:9;12295:4;12291:20;12287:1;12276:9;12272:17;12265:47;12329:131;12455:4;12329:131;:::i;:::-;12321:139;;12048:419;;;:::o;12473:180::-;12521:77;12518:1;12511:88;12618:4;12615:1;12608:15;12642:4;12639:1;12632:15;12659:233;12698:3;12721:24;12739:5;12721:24;:::i;:::-;12712:33;;12767:66;12760:5;12757:77;12754:103;;12837:18;;:::i;:::-;12754:103;12884:1;12877:5;12873:13;12866:20;;12659:233;;;:::o;12898:170::-;13038:22;13034:1;13026:6;13022:14;13015:46;12898:170;:::o;13074:366::-;13216:3;13237:67;13301:2;13296:3;13237:67;:::i;:::-;13230:74;;13313:93;13402:3;13313:93;:::i;:::-;13431:2;13426:3;13422:12;13415:19;;13074:366;;;:::o;13446:419::-;13612:4;13650:2;13639:9;13635:18;13627:26;;13699:9;13693:4;13689:20;13685:1;13674:9;13670:17;13663:47;13727:131;13853:4;13727:131;:::i;:::-;13719:139;;13446:419;;;:::o;13871:442::-;14020:4;14058:2;14047:9;14043:18;14035:26;;14071:71;14139:1;14128:9;14124:17;14115:6;14071:71;:::i;:::-;14152:72;14220:2;14209:9;14205:18;14196:6;14152:72;:::i;:::-;14234;14302:2;14291:9;14287:18;14278:6;14234:72;:::i;:::-;13871:442;;;;;;:::o;14319:191::-;14359:3;14378:20;14396:1;14378:20;:::i;:::-;14373:25;;14412:20;14430:1;14412:20;:::i;:::-;14407:25;;14455:1;14452;14448:9;14441:16;;14476:3;14473:1;14470:10;14467:36;;;14483:18;;:::i;:::-;14467:36;14319:191;;;;:::o

Swarm Source

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