BNB Price: $616.22 (+2.74%)
 

Overview

Max Total Supply

1,000,000DShell

Holders

2,815 (0.00%)

Market

Price

$0.0241 @ 0.000039 BNB

Onchain Market Cap

$24,098.94

Circulating Supply Market Cap

$13,254.41

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.0374 DShell

Value
$0.00 ( ~0 BNB) [0.0000%]
0x8695330488513a6c3698a2b072ff88aaedbfac3e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

DiamondShell is an investment platform with its own native token #DShell. Stake directly into high-yield exclusive options on global markets.

Market

Volume (24H):$1.16
Market Capitalization:$13,254.41
Circulating Supply:550,000.00 DShell
Market Data Source: Coinmarketcap


Update? Click here to update the token ICO / general information

Contract Source Code Verified (Exact Match)

Contract Name:
DShellToken

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at BscScan.com on 2025-03-05
*/

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


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
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: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


/**
 * @dev Interface for the optional metadata functions from the ERC-20 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: @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)

pragma solidity ^0.8.20;

/**
 * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
 * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
 * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
 * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
 *
 * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
 * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
 * case an upgrade adds a module that needs to be initialized.
 *
 * For example:
 *
 * [.hljs-theme-light.nopadding]
 * ```solidity
 * contract MyToken is ERC20Upgradeable {
 *     function initialize() initializer public {
 *         __ERC20_init("MyToken", "MTK");
 *     }
 * }
 *
 * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
 *     function initializeV2() reinitializer(2) public {
 *         __ERC20Permit_init("MyToken");
 *     }
 * }
 * ```
 *
 * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
 * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
 *
 * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
 * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
 *
 * [CAUTION]
 * ====
 * Avoid leaving a contract uninitialized.
 *
 * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation
 * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke
 * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:
 *
 * [.hljs-theme-light.nopadding]
 * ```
 * /// @custom:oz-upgrades-unsafe-allow constructor
 * constructor() {
 *     _disableInitializers();
 * }
 * ```
 * ====
 */
abstract contract Initializable {
    /**
     * @dev Storage of the initializable contract.
     *
     * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions
     * when using with upgradeable contracts.
     *
     * @custom:storage-location erc7201:openzeppelin.storage.Initializable
     */
    struct InitializableStorage {
        /**
         * @dev Indicates that the contract has been initialized.
         */
        uint64 _initialized;
        /**
         * @dev Indicates that the contract is in the process of being initialized.
         */
        bool _initializing;
    }

    // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff))
    bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;

    /**
     * @dev The contract is already initialized.
     */
    error InvalidInitialization();

    /**
     * @dev The contract is not initializing.
     */
    error NotInitializing();

    /**
     * @dev Triggered when the contract has been initialized or reinitialized.
     */
    event Initialized(uint64 version);

    /**
     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,
     * `onlyInitializing` functions can be used to initialize parent contracts.
     *
     * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any
     * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in
     * production.
     *
     * Emits an {Initialized} event.
     */
    modifier initializer() {
        // solhint-disable-next-line var-name-mixedcase
        InitializableStorage storage $ = _getInitializableStorage();

        // Cache values to avoid duplicated sloads
        bool isTopLevelCall = !$._initializing;
        uint64 initialized = $._initialized;

        // Allowed calls:
        // - initialSetup: the contract is not in the initializing state and no previous version was
        //                 initialized
        // - construction: the contract is initialized at version 1 (no reininitialization) and the
        //                 current contract is just being deployed
        bool initialSetup = initialized == 0 && isTopLevelCall;
        bool construction = initialized == 1 && address(this).code.length == 0;

        if (!initialSetup && !construction) {
            revert InvalidInitialization();
        }
        $._initialized = 1;
        if (isTopLevelCall) {
            $._initializing = true;
        }
        _;
        if (isTopLevelCall) {
            $._initializing = false;
            emit Initialized(1);
        }
    }

    /**
     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the
     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be
     * used to initialize parent contracts.
     *
     * A reinitializer may be used after the original initialization step. This is essential to configure modules that
     * are added through upgrades and that require initialization.
     *
     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`
     * cannot be nested. If one is invoked in the context of another, execution will revert.
     *
     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in
     * a contract, executing them in the right order is up to the developer or operator.
     *
     * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.
     *
     * Emits an {Initialized} event.
     */
    modifier reinitializer(uint64 version) {
        // solhint-disable-next-line var-name-mixedcase
        InitializableStorage storage $ = _getInitializableStorage();

        if ($._initializing || $._initialized >= version) {
            revert InvalidInitialization();
        }
        $._initialized = version;
        $._initializing = true;
        _;
        $._initializing = false;
        emit Initialized(version);
    }

    /**
     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
     * {initializer} and {reinitializer} modifiers, directly or indirectly.
     */
    modifier onlyInitializing() {
        _checkInitializing();
        _;
    }

    /**
     * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.
     */
    function _checkInitializing() internal view virtual {
        if (!_isInitializing()) {
            revert NotInitializing();
        }
    }

    /**
     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called
     * through proxies.
     *
     * Emits an {Initialized} event the first time it is successfully executed.
     */
    function _disableInitializers() internal virtual {
        // solhint-disable-next-line var-name-mixedcase
        InitializableStorage storage $ = _getInitializableStorage();

        if ($._initializing) {
            revert InvalidInitialization();
        }
        if ($._initialized != type(uint64).max) {
            $._initialized = type(uint64).max;
            emit Initialized(type(uint64).max);
        }
    }

    /**
     * @dev Returns the highest version that has been initialized. See {reinitializer}.
     */
    function _getInitializedVersion() internal view returns (uint64) {
        return _getInitializableStorage()._initialized;
    }

    /**
     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.
     */
    function _isInitializing() internal view returns (bool) {
        return _getInitializableStorage()._initializing;
    }

    /**
     * @dev Returns a pointer to the storage namespace.
     */
    // solhint-disable-next-line var-name-mixedcase
    function _getInitializableStorage() private pure returns (InitializableStorage storage $) {
        assembly {
            $.slot := INITIALIZABLE_STORAGE
        }
    }
}

// File: @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol


// 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 ContextUpgradeable is Initializable {
    function __Context_init() internal onlyInitializing {
    }

    function __Context_init_unchained() internal onlyInitializing {
    }
    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: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 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 ERC-721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-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 ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 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: @openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol


// OpenZeppelin Contracts (last updated v5.2.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;






/**
 * @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 ERC-20
 * applications.
 */
abstract contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20, IERC20Metadata, IERC20Errors {
    /// @custom:storage-location erc7201:openzeppelin.storage.ERC20
    struct ERC20Storage {
        mapping(address account => uint256) _balances;

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

        uint256 _totalSupply;

        string _name;
        string _symbol;
    }

    // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ERC20")) - 1)) & ~bytes32(uint256(0xff))
    bytes32 private constant ERC20StorageLocation = 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00;

    function _getERC20Storage() private pure returns (ERC20Storage storage $) {
        assembly {
            $.slot := ERC20StorageLocation
        }
    }

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

    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {
        ERC20Storage storage $ = _getERC20Storage();
        $._name = name_;
        $._symbol = symbol_;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        ERC20Storage storage $ = _getERC20Storage();
        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) {
        ERC20Storage storage $ = _getERC20Storage();
        return $._totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual returns (uint256) {
        ERC20Storage storage $ = _getERC20Storage();
        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) {
        ERC20Storage storage $ = _getERC20Storage();
        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}.
     *
     * Skips emitting an {Approval} event indicating an allowance update. This is not
     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
     *
     * 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 {
        ERC20Storage storage $ = _getERC20Storage();
        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:
     *
     * ```solidity
     * 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 {
        ERC20Storage storage $ = _getERC20Storage();
        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: DShellToken.sol


pragma solidity ^0.8.9;


contract DShellToken is ERC20Upgradeable {

    address public owner;

    function initialize () public initializer {
        __ERC20_init("DiamondShell", "DShell");
        owner = msg.sender;
        _mint(owner, 1e24);
    }

    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
    }
}

Contract Security Audit

Contract ABI

API
[{"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":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","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":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","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":[],"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"}]

6080604052348015600e575f80fd5b506116638061001c5f395ff3fe608060405234801561000f575f80fd5b50600436106100b2575f3560e01c806370a082311161006f57806370a082311461018c5780638129fc1c146101bc5780638da5cb5b146101c657806395d89b41146101e4578063a9059cbb14610202578063dd62ed3e14610232576100b2565b806306fdde03146100b6578063095ea7b3146100d457806318160ddd1461010457806323b872dd14610122578063313ce5671461015257806342966c6814610170575b5f80fd5b6100be610262565b6040516100cb9190610fb3565b60405180910390f35b6100ee60048036038101906100e99190611064565b610300565b6040516100fb91906110bc565b60405180910390f35b61010c610322565b60405161011991906110e4565b60405180910390f35b61013c600480360381019061013791906110fd565b610339565b60405161014991906110bc565b60405180910390f35b61015a610367565b6040516101679190611168565b60405180910390f35b61018a60048036038101906101859190611181565b61036f565b005b6101a660048036038101906101a191906111ac565b61037c565b6040516101b391906110e4565b60405180910390f35b6101c46103cf565b005b6101ce61062c565b6040516101db91906111e6565b60405180910390f35b6101ec61064f565b6040516101f99190610fb3565b60405180910390f35b61021c60048036038101906102179190611064565b6106ed565b60405161022991906110bc565b60405180910390f35b61024c600480360381019061024791906111ff565b61070f565b60405161025991906110e4565b60405180910390f35b60605f61026d61079f565b905080600301805461027e9061126a565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa9061126a565b80156102f55780601f106102cc576101008083540402835291602001916102f5565b820191905f5260205f20905b8154815290600101906020018083116102d857829003601f168201915b505050505091505090565b5f8061030a6107c6565b90506103178185856107cd565b600191505092915050565b5f8061032c61079f565b9050806002015491505090565b5f806103436107c6565b90506103508582856107df565b61035b858585610872565b60019150509392505050565b5f6012905090565b6103793382610962565b50565b5f8061038661079f565b9050805f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054915050919050565b5f6103d86109e1565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f808267ffffffffffffffff161480156104205750825b90505f60018367ffffffffffffffff1614801561045357505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610461575080155b15610498576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156104e5576001855f0160086101000a81548160ff0219169083151502179055505b6105596040518060400160405280600c81526020017f4469616d6f6e645368656c6c00000000000000000000000000000000000000008152506040518060400160405280600681526020017f445368656c6c0000000000000000000000000000000000000000000000000000815250610a08565b335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506105cb5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000610a1e565b8315610625575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161061c91906112ef565b60405180910390a15b5050505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f61065a61079f565b905080600401805461066b9061126a565b80601f01602080910402602001604051908101604052809291908181526020018280546106979061126a565b80156106e25780601f106106b9576101008083540402835291602001916106e2565b820191905f5260205f20905b8154815290600101906020018083116106c557829003601f168201915b505050505091505090565b5f806106f76107c6565b9050610704818585610872565b600191505092915050565b5f8061071961079f565b9050806001015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205491505092915050565b5f7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00905090565b5f33905090565b6107da8383836001610a9d565b505050565b5f6107ea848461070f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561086c578181101561085d578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161085493929190611308565b60405180910390fd5b61086b84848484035f610a9d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108e2575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108d991906111e6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610952575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161094991906111e6565b60405180910390fd5b61095d838383610c7a565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109d2575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109c991906111e6565b60405180910390fd5b6109dd825f83610c7a565b5050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b610a10610ea9565b610a1a8282610ee9565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8e575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a8591906111e6565b60405180910390fd5b610a995f8383610c7a565b5050565b5f610aa661079f565b90505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610b18575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610b0f91906111e6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b88575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610b7f91906111e6565b60405180910390fd5b82816001015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508115610c73578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610c6a91906110e4565b60405180910390a35b5050505050565b5f610c8361079f565b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610cd75781816002015f828254610ccb919061136a565b92505081905550610da9565b5f815f015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d62578481846040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610d5993929190611308565b60405180910390fd5b828103825f015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610df25781816002015f8282540392505081905550610e3e565b81815f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e9b91906110e4565b60405180910390a350505050565b610eb1610f25565b610ee7576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610ef1610ea9565b5f610efa61079f565b905082816003019081610f0d919061155e565b5081816004019081610f1f919061155e565b50505050565b5f610f2e6109e1565b5f0160089054906101000a900460ff16905090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610f8582610f43565b610f8f8185610f4d565b9350610f9f818560208601610f5d565b610fa881610f6b565b840191505092915050565b5f6020820190508181035f830152610fcb8184610f7b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61100082610fd7565b9050919050565b61101081610ff6565b811461101a575f80fd5b50565b5f8135905061102b81611007565b92915050565b5f819050919050565b61104381611031565b811461104d575f80fd5b50565b5f8135905061105e8161103a565b92915050565b5f806040838503121561107a57611079610fd3565b5b5f6110878582860161101d565b925050602061109885828601611050565b9150509250929050565b5f8115159050919050565b6110b6816110a2565b82525050565b5f6020820190506110cf5f8301846110ad565b92915050565b6110de81611031565b82525050565b5f6020820190506110f75f8301846110d5565b92915050565b5f805f6060848603121561111457611113610fd3565b5b5f6111218682870161101d565b93505060206111328682870161101d565b925050604061114386828701611050565b9150509250925092565b5f60ff82169050919050565b6111628161114d565b82525050565b5f60208201905061117b5f830184611159565b92915050565b5f6020828403121561119657611195610fd3565b5b5f6111a384828501611050565b91505092915050565b5f602082840312156111c1576111c0610fd3565b5b5f6111ce8482850161101d565b91505092915050565b6111e081610ff6565b82525050565b5f6020820190506111f95f8301846111d7565b92915050565b5f806040838503121561121557611214610fd3565b5b5f6112228582860161101d565b92505060206112338582860161101d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061128157607f821691505b6020821081036112945761129361123d565b5b50919050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f6112d96112d46112cf8461129a565b6112b6565b6112a3565b9050919050565b6112e9816112bf565b82525050565b5f6020820190506113025f8301846112e0565b92915050565b5f60608201905061131b5f8301866111d7565b61132860208301856110d5565b61133560408301846110d5565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61137482611031565b915061137f83611031565b92508282019050808211156113975761139661133d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026114267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826113eb565b61143086836113eb565b95508019841693508086168417925050509392505050565b5f61146261145d61145884611031565b6112b6565b611031565b9050919050565b5f819050919050565b61147b83611448565b61148f61148782611469565b8484546113f7565b825550505050565b5f90565b6114a3611497565b6114ae818484611472565b505050565b5b818110156114d1576114c65f8261149b565b6001810190506114b4565b5050565b601f821115611516576114e7816113ca565b6114f0846113dc565b810160208510156114ff578190505b61151361150b856113dc565b8301826114b3565b50505b505050565b5f82821c905092915050565b5f6115365f198460080261151b565b1980831691505092915050565b5f61154e8383611527565b9150826002028217905092915050565b61156782610f43565b67ffffffffffffffff8111156115805761157f61139d565b5b61158a825461126a565b6115958282856114d5565b5f60209050601f8311600181146115c6575f84156115b4578287015190505b6115be8582611543565b865550611625565b601f1984166115d4866113ca565b5f5b828110156115fb578489015182556001820191506020850194506020810190506115d6565b868310156116185784890151611614601f891682611527565b8355505b6001600288020188555050505b50505050505056fea26469706673582212209ef24c92f4e895a8c67d24b945ec1087cf24f270af4388cbb84e7aa44fd12b3264736f6c634300081a0033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100b2575f3560e01c806370a082311161006f57806370a082311461018c5780638129fc1c146101bc5780638da5cb5b146101c657806395d89b41146101e4578063a9059cbb14610202578063dd62ed3e14610232576100b2565b806306fdde03146100b6578063095ea7b3146100d457806318160ddd1461010457806323b872dd14610122578063313ce5671461015257806342966c6814610170575b5f80fd5b6100be610262565b6040516100cb9190610fb3565b60405180910390f35b6100ee60048036038101906100e99190611064565b610300565b6040516100fb91906110bc565b60405180910390f35b61010c610322565b60405161011991906110e4565b60405180910390f35b61013c600480360381019061013791906110fd565b610339565b60405161014991906110bc565b60405180910390f35b61015a610367565b6040516101679190611168565b60405180910390f35b61018a60048036038101906101859190611181565b61036f565b005b6101a660048036038101906101a191906111ac565b61037c565b6040516101b391906110e4565b60405180910390f35b6101c46103cf565b005b6101ce61062c565b6040516101db91906111e6565b60405180910390f35b6101ec61064f565b6040516101f99190610fb3565b60405180910390f35b61021c60048036038101906102179190611064565b6106ed565b60405161022991906110bc565b60405180910390f35b61024c600480360381019061024791906111ff565b61070f565b60405161025991906110e4565b60405180910390f35b60605f61026d61079f565b905080600301805461027e9061126a565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa9061126a565b80156102f55780601f106102cc576101008083540402835291602001916102f5565b820191905f5260205f20905b8154815290600101906020018083116102d857829003601f168201915b505050505091505090565b5f8061030a6107c6565b90506103178185856107cd565b600191505092915050565b5f8061032c61079f565b9050806002015491505090565b5f806103436107c6565b90506103508582856107df565b61035b858585610872565b60019150509392505050565b5f6012905090565b6103793382610962565b50565b5f8061038661079f565b9050805f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054915050919050565b5f6103d86109e1565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f808267ffffffffffffffff161480156104205750825b90505f60018367ffffffffffffffff1614801561045357505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610461575080155b15610498576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156104e5576001855f0160086101000a81548160ff0219169083151502179055505b6105596040518060400160405280600c81526020017f4469616d6f6e645368656c6c00000000000000000000000000000000000000008152506040518060400160405280600681526020017f445368656c6c0000000000000000000000000000000000000000000000000000815250610a08565b335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506105cb5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000610a1e565b8315610625575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161061c91906112ef565b60405180910390a15b5050505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f61065a61079f565b905080600401805461066b9061126a565b80601f01602080910402602001604051908101604052809291908181526020018280546106979061126a565b80156106e25780601f106106b9576101008083540402835291602001916106e2565b820191905f5260205f20905b8154815290600101906020018083116106c557829003601f168201915b505050505091505090565b5f806106f76107c6565b9050610704818585610872565b600191505092915050565b5f8061071961079f565b9050806001015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205491505092915050565b5f7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00905090565b5f33905090565b6107da8383836001610a9d565b505050565b5f6107ea848461070f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561086c578181101561085d578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161085493929190611308565b60405180910390fd5b61086b84848484035f610a9d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108e2575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108d991906111e6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610952575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161094991906111e6565b60405180910390fd5b61095d838383610c7a565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109d2575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109c991906111e6565b60405180910390fd5b6109dd825f83610c7a565b5050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b610a10610ea9565b610a1a8282610ee9565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8e575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a8591906111e6565b60405180910390fd5b610a995f8383610c7a565b5050565b5f610aa661079f565b90505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610b18575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610b0f91906111e6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b88575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610b7f91906111e6565b60405180910390fd5b82816001015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508115610c73578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610c6a91906110e4565b60405180910390a35b5050505050565b5f610c8361079f565b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610cd75781816002015f828254610ccb919061136a565b92505081905550610da9565b5f815f015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d62578481846040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610d5993929190611308565b60405180910390fd5b828103825f015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610df25781816002015f8282540392505081905550610e3e565b81815f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e9b91906110e4565b60405180910390a350505050565b610eb1610f25565b610ee7576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610ef1610ea9565b5f610efa61079f565b905082816003019081610f0d919061155e565b5081816004019081610f1f919061155e565b50505050565b5f610f2e6109e1565b5f0160089054906101000a900460ff16905090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610f8582610f43565b610f8f8185610f4d565b9350610f9f818560208601610f5d565b610fa881610f6b565b840191505092915050565b5f6020820190508181035f830152610fcb8184610f7b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61100082610fd7565b9050919050565b61101081610ff6565b811461101a575f80fd5b50565b5f8135905061102b81611007565b92915050565b5f819050919050565b61104381611031565b811461104d575f80fd5b50565b5f8135905061105e8161103a565b92915050565b5f806040838503121561107a57611079610fd3565b5b5f6110878582860161101d565b925050602061109885828601611050565b9150509250929050565b5f8115159050919050565b6110b6816110a2565b82525050565b5f6020820190506110cf5f8301846110ad565b92915050565b6110de81611031565b82525050565b5f6020820190506110f75f8301846110d5565b92915050565b5f805f6060848603121561111457611113610fd3565b5b5f6111218682870161101d565b93505060206111328682870161101d565b925050604061114386828701611050565b9150509250925092565b5f60ff82169050919050565b6111628161114d565b82525050565b5f60208201905061117b5f830184611159565b92915050565b5f6020828403121561119657611195610fd3565b5b5f6111a384828501611050565b91505092915050565b5f602082840312156111c1576111c0610fd3565b5b5f6111ce8482850161101d565b91505092915050565b6111e081610ff6565b82525050565b5f6020820190506111f95f8301846111d7565b92915050565b5f806040838503121561121557611214610fd3565b5b5f6112228582860161101d565b92505060206112338582860161101d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061128157607f821691505b6020821081036112945761129361123d565b5b50919050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f6112d96112d46112cf8461129a565b6112b6565b6112a3565b9050919050565b6112e9816112bf565b82525050565b5f6020820190506113025f8301846112e0565b92915050565b5f60608201905061131b5f8301866111d7565b61132860208301856110d5565b61133560408301846110d5565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61137482611031565b915061137f83611031565b92508282019050808211156113975761139661133d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026114267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826113eb565b61143086836113eb565b95508019841693508086168417925050509392505050565b5f61146261145d61145884611031565b6112b6565b611031565b9050919050565b5f819050919050565b61147b83611448565b61148f61148782611469565b8484546113f7565b825550505050565b5f90565b6114a3611497565b6114ae818484611472565b505050565b5b818110156114d1576114c65f8261149b565b6001810190506114b4565b5050565b601f821115611516576114e7816113ca565b6114f0846113dc565b810160208510156114ff578190505b61151361150b856113dc565b8301826114b3565b50505b505050565b5f82821c905092915050565b5f6115365f198460080261151b565b1980831691505092915050565b5f61154e8383611527565b9150826002028217905092915050565b61156782610f43565b67ffffffffffffffff8111156115805761157f61139d565b5b61158a825461126a565b6115958282856114d5565b5f60209050601f8311600181146115c6575f84156115b4578287015190505b6115be8582611543565b865550611625565b601f1984166115d4866113ca565b5f5b828110156115fb578489015182556001820191506020850194506020810190506115d6565b868310156116185784890151611614601f891682611527565b8355505b6001600288020188555050505b50505050505056fea26469706673582212209ef24c92f4e895a8c67d24b945ec1087cf24f270af4388cbb84e7aa44fd12b3264736f6c634300081a0033

Deployed Bytecode Sourcemap

33029:328:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23193:147;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25766:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24407:155;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26566:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24258:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33273:81;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24625:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33108:157;;;:::i;:::-;;33079:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23459:151;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25004:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25249:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23193:147;23238:13;23264:22;23289:18;:16;:18::i;:::-;23264:43;;23325:1;:7;;23318:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23193:147;:::o;25766:190::-;25839:4;25856:13;25872:12;:10;:12::i;:::-;25856:28;;25895:31;25904:5;25911:7;25920:5;25895:8;:31::i;:::-;25944:4;25937:11;;;25766:190;;;;:::o;24407:155::-;24459:7;24479:22;24504:18;:16;:18::i;:::-;24479:43;;24540:1;:14;;;24533:21;;;24407:155;:::o;26566:249::-;26653:4;26670:15;26688:12;:10;:12::i;:::-;26670:30;;26711:37;26727:4;26733:7;26742:5;26711:15;:37::i;:::-;26759:26;26769:4;26775:2;26779:5;26759:9;:26::i;:::-;26803:4;26796:11;;;26566:249;;;;;:::o;24258:84::-;24307:5;24332:2;24325:9;;24258:84;:::o;33273:81::-;33321:25;33327:10;33339:6;33321:5;:25::i;:::-;33273:81;:::o;24625:174::-;24690:7;24710:22;24735:18;:16;:18::i;:::-;24710:43;;24771:1;:11;;:20;24783:7;24771:20;;;;;;;;;;;;;;;;24764:27;;;24625:174;;;:::o;33108:157::-;7919:30;7952:26;:24;:26::i;:::-;7919:59;;8043:19;8066:1;:15;;;;;;;;;;;;8065:16;8043:38;;8092:18;8113:1;:14;;;;;;;;;;;;8092:35;;8478:17;8513:1;8498:11;:16;;;:34;;;;;8518:14;8498:34;8478:54;;8543:17;8578:1;8563:11;:16;;;:50;;;;;8612:1;8591:4;8583:25;;;:30;8563:50;8543:70;;8631:12;8630:13;:30;;;;;8648:12;8647:13;8630:30;8626:93;;;8684:23;;;;;;;;;;;;;;8626:93;8746:1;8729;:14;;;:18;;;;;;;;;;;;;;;;;;8762:14;8758:69;;;8811:4;8793:1;:15;;;:22;;;;;;;;;;;;;;;;;;8758:69;33161:38:::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:12:::1;:38::i;:::-;33218:10;33210:5;::::0;:18:::1;;;;;;;;;;;;;;;;;;33239;33245:5;::::0;::::1;;;;;;;;33252:4;33239:5;:18::i;:::-;8853:14:::0;8849:104;;;8902:5;8884:1;:15;;;:23;;;;;;;;;;;;;;;;;;8927:14;8939:1;8927:14;;;;;;:::i;:::-;;;;;;;;8849:104;7851:1109;;;;;33108:157::o;33079:20::-;;;;;;;;;;;;:::o;23459:151::-;23506:13;23532:22;23557:18;:16;:18::i;:::-;23532:43;;23593:1;:9;;23586:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23459:151;:::o;25004:182::-;25073:4;25090:13;25106:12;:10;:12::i;:::-;25090:28;;25129:27;25139:5;25146:2;25150:5;25129:9;:27::i;:::-;25174:4;25167:11;;;25004:182;;;;:::o;25249:198::-;25329:7;25349:22;25374:18;:16;:18::i;:::-;25349:43;;25410:1;:13;;:20;25424:5;25410:20;;;;;;;;;;;;;;;:29;25431:7;25410:29;;;;;;;;;;;;;;;;25403:36;;;25249:198;;;;:::o;22399:157::-;22449:22;22518:20;22508:30;;22399:157;:::o;13688:98::-;13741:7;13768:10;13761:17;;13688:98;:::o;30689:130::-;30774:37;30783:5;30790:7;30799:5;30806:4;30774:8;:37::i;:::-;30689:130;;;:::o;32477:486::-;32577:24;32604:25;32614:5;32621:7;32604:9;:25::i;:::-;32577:52;;32663:17;32644:16;:36;32640:316;;;32720:5;32701:16;:24;32697:132;;;32780:7;32789:16;32807:5;32753:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;32697:132;32872:57;32881:5;32888:7;32916:5;32897:16;:24;32923:5;32872:8;:57::i;:::-;32640:316;32566:397;32477:486;;;:::o;27200:308::-;27300:1;27284:18;;:4;:18;;;27280:88;;27353:1;27326:30;;;;;;;;;;;:::i;:::-;;;;;;;;27280:88;27396:1;27382:16;;:2;:16;;;27378:88;;27451:1;27422:32;;;;;;;;;;;:::i;:::-;;;;;;;;27378:88;27476:24;27484:4;27490:2;27494:5;27476:7;:24::i;:::-;27200:308;;;:::o;29925:211::-;30015:1;29996:21;;:7;:21;;;29992:91;;30068:1;30041:30;;;;;;;;;;;:::i;:::-;;;;;;;;29992:91;30093:35;30101:7;30118:1;30122:5;30093:7;:35::i;:::-;29925:211;;:::o;12615:174::-;12673:30;12750:21;12740:31;;12615:174;:::o;22746:149::-;10757:20;:18;:20::i;:::-;22849:38:::1;22872:5;22879:7;22849:22;:38::i;:::-;22746:149:::0;;:::o;29384:213::-;29474:1;29455:21;;:7;:21;;;29451:93;;29529:1;29500:32;;;;;;;;;;;:::i;:::-;;;;;;;;29451:93;29554:35;29570:1;29574:7;29583:5;29554:7;:35::i;:::-;29384:213;;:::o;31686:499::-;31795:22;31820:18;:16;:18::i;:::-;31795:43;;31870:1;31853:19;;:5;:19;;;31849:91;;31925:1;31896:32;;;;;;;;;;;:::i;:::-;;;;;;;;31849:91;31973:1;31954:21;;:7;:21;;;31950:92;;32027:1;31999:31;;;;;;;;;;;:::i;:::-;;;;;;;;31950:92;32084:5;32052:1;:13;;:20;32066:5;32052:20;;;;;;;;;;;;;;;:29;32073:7;32052:29;;;;;;;;;;;;;;;:37;;;;32104:9;32100:78;;;32151:7;32135:31;;32144:5;32135:31;;;32160:5;32135:31;;;;;;:::i;:::-;;;;;;;;32100:78;31784:401;31686:499;;;;:::o;27832:1199::-;27918:22;27943:18;:16;:18::i;:::-;27918:43;;27992:1;27976:18;;:4;:18;;;27972:558;;28132:5;28114:1;:14;;;:23;;;;;;;:::i;:::-;;;;;;;;27972:558;;;28170:19;28192:1;:11;;:17;28204:4;28192:17;;;;;;;;;;;;;;;;28170:39;;28242:5;28228:11;:19;28224:117;;;28300:4;28306:11;28319:5;28275:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;28224:117;28498:5;28484:11;:19;28464:1;:11;;:17;28476:4;28464:17;;;;;;;;;;;;;;;:39;;;;28155:375;27972:558;28560:1;28546:16;;:2;:16;;;28542:439;;28730:5;28712:1;:14;;;:23;;;;;;;;;;;28542:439;;;28949:5;28930:1;:11;;:15;28942:2;28930:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;28542:439;29013:2;28998:25;;29007:4;28998:25;;;29017:5;28998:25;;;;;;:::i;:::-;;;;;;;;27907:1124;27832:1199;;;:::o;10917:145::-;10985:17;:15;:17::i;:::-;10980:75;;11026:17;;;;;;;;;;;;;;10980:75;10917:145::o;22903:220::-;10757:20;:18;:20::i;:::-;23016:22:::1;23041:18;:16;:18::i;:::-;23016:43;;23080:5;23070:1;:7;;:15;;;;;;:::i;:::-;;23108:7;23096:1;:9;;:19;;;;;;:::i;:::-;;23005:118;22903:220:::0;;:::o;12357:122::-;12407:4;12431:26;:24;:26::i;:::-;:40;;;;;;;;;;;;12424:47;;12357:122;:::o;7:99:1:-;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:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:619::-;3768:6;3776;3784;3833:2;3821:9;3812:7;3808:23;3804:32;3801:119;;;3839:79;;:::i;:::-;3801:119;3959:1;3984:53;4029:7;4020:6;4009:9;4005:22;3984:53;:::i;:::-;3974:63;;3930:117;4086:2;4112:53;4157:7;4148:6;4137:9;4133:22;4112:53;:::i;:::-;4102:63;;4057:118;4214:2;4240:53;4285:7;4276:6;4265:9;4261:22;4240:53;:::i;:::-;4230:63;;4185:118;3691:619;;;;;:::o;4316:86::-;4351:7;4391:4;4384:5;4380:16;4369:27;;4316:86;;;:::o;4408:112::-;4491:22;4507:5;4491:22;:::i;:::-;4486:3;4479:35;4408:112;;:::o;4526:214::-;4615:4;4653:2;4642:9;4638:18;4630:26;;4666:67;4730:1;4719:9;4715:17;4706:6;4666:67;:::i;:::-;4526:214;;;;:::o;4746:329::-;4805:6;4854:2;4842:9;4833:7;4829:23;4825:32;4822:119;;;4860:79;;:::i;:::-;4822:119;4980:1;5005:53;5050:7;5041:6;5030:9;5026:22;5005:53;:::i;:::-;4995:63;;4951:117;4746:329;;;;:::o;5081:::-;5140:6;5189:2;5177:9;5168:7;5164:23;5160:32;5157:119;;;5195:79;;:::i;:::-;5157:119;5315:1;5340:53;5385:7;5376:6;5365:9;5361:22;5340:53;:::i;:::-;5330:63;;5286:117;5081:329;;;;:::o;5416:118::-;5503:24;5521:5;5503:24;:::i;:::-;5498:3;5491:37;5416:118;;:::o;5540:222::-;5633:4;5671:2;5660:9;5656:18;5648:26;;5684:71;5752:1;5741:9;5737:17;5728:6;5684:71;:::i;:::-;5540:222;;;;:::o;5768:474::-;5836:6;5844;5893:2;5881:9;5872:7;5868:23;5864:32;5861:119;;;5899:79;;:::i;:::-;5861:119;6019:1;6044:53;6089:7;6080:6;6069:9;6065:22;6044:53;:::i;:::-;6034:63;;5990:117;6146:2;6172:53;6217:7;6208:6;6197:9;6193:22;6172:53;:::i;:::-;6162:63;;6117:118;5768:474;;;;;:::o;6248:180::-;6296:77;6293:1;6286:88;6393:4;6390:1;6383:15;6417:4;6414:1;6407:15;6434:320;6478:6;6515:1;6509:4;6505:12;6495:22;;6562:1;6556:4;6552:12;6583:18;6573:81;;6639:4;6631:6;6627:17;6617:27;;6573:81;6701:2;6693:6;6690:14;6670:18;6667:38;6664:84;;6720:18;;:::i;:::-;6664:84;6485:269;6434:320;;;:::o;6760:85::-;6805:7;6834:5;6823:16;;6760:85;;;:::o;6851:101::-;6887:7;6927:18;6920:5;6916:30;6905:41;;6851:101;;;:::o;6958:60::-;6986:3;7007:5;7000:12;;6958:60;;;:::o;7024:156::-;7081:9;7114:60;7131:42;7140:32;7166:5;7140:32;:::i;:::-;7131:42;:::i;:::-;7114:60;:::i;:::-;7101:73;;7024:156;;;:::o;7186:145::-;7280:44;7318:5;7280:44;:::i;:::-;7275:3;7268:57;7186:145;;:::o;7337:236::-;7437:4;7475:2;7464:9;7460:18;7452:26;;7488:78;7563:1;7552:9;7548:17;7539:6;7488:78;:::i;:::-;7337:236;;;;:::o;7579:442::-;7728:4;7766:2;7755:9;7751:18;7743:26;;7779:71;7847:1;7836:9;7832:17;7823:6;7779:71;:::i;:::-;7860:72;7928:2;7917:9;7913:18;7904:6;7860:72;:::i;:::-;7942;8010:2;7999:9;7995:18;7986:6;7942:72;:::i;:::-;7579:442;;;;;;:::o;8027:180::-;8075:77;8072:1;8065:88;8172:4;8169:1;8162:15;8196:4;8193:1;8186:15;8213:191;8253:3;8272:20;8290:1;8272:20;:::i;:::-;8267:25;;8306:20;8324:1;8306:20;:::i;:::-;8301:25;;8349:1;8346;8342:9;8335:16;;8370:3;8367:1;8364:10;8361:36;;;8377:18;;:::i;:::-;8361:36;8213:191;;;;:::o;8410:180::-;8458:77;8455:1;8448:88;8555:4;8552:1;8545:15;8579:4;8576:1;8569:15;8596:141;8645:4;8668:3;8660:11;;8691:3;8688:1;8681:14;8725:4;8722:1;8712:18;8704:26;;8596:141;;;:::o;8743:93::-;8780:6;8827:2;8822;8815:5;8811:14;8807:23;8797:33;;8743:93;;;:::o;8842:107::-;8886:8;8936:5;8930:4;8926:16;8905:37;;8842:107;;;;:::o;8955:393::-;9024:6;9074:1;9062:10;9058:18;9097:97;9127:66;9116:9;9097:97;:::i;:::-;9215:39;9245:8;9234:9;9215:39;:::i;:::-;9203:51;;9287:4;9283:9;9276:5;9272:21;9263:30;;9336:4;9326:8;9322:19;9315:5;9312:30;9302:40;;9031:317;;8955:393;;;;;:::o;9354:142::-;9404:9;9437:53;9455:34;9464:24;9482:5;9464:24;:::i;:::-;9455:34;:::i;:::-;9437:53;:::i;:::-;9424:66;;9354:142;;;:::o;9502:75::-;9545:3;9566:5;9559:12;;9502:75;;;:::o;9583:269::-;9693:39;9724:7;9693:39;:::i;:::-;9754:91;9803:41;9827:16;9803:41;:::i;:::-;9795:6;9788:4;9782:11;9754:91;:::i;:::-;9748:4;9741:105;9659:193;9583:269;;;:::o;9858:73::-;9903:3;9858:73;:::o;9937:189::-;10014:32;;:::i;:::-;10055:65;10113:6;10105;10099:4;10055:65;:::i;:::-;9990:136;9937:189;;:::o;10132:186::-;10192:120;10209:3;10202:5;10199:14;10192:120;;;10263:39;10300:1;10293:5;10263:39;:::i;:::-;10236:1;10229:5;10225:13;10216:22;;10192:120;;;10132:186;;:::o;10324:543::-;10425:2;10420:3;10417:11;10414:446;;;10459:38;10491:5;10459:38;:::i;:::-;10543:29;10561:10;10543:29;:::i;:::-;10533:8;10529:44;10726:2;10714:10;10711:18;10708:49;;;10747:8;10732:23;;10708:49;10770:80;10826:22;10844:3;10826:22;:::i;:::-;10816:8;10812:37;10799:11;10770:80;:::i;:::-;10429:431;;10414:446;10324:543;;;:::o;10873:117::-;10927:8;10977:5;10971:4;10967:16;10946:37;;10873:117;;;;:::o;10996:169::-;11040:6;11073:51;11121:1;11117:6;11109:5;11106:1;11102:13;11073:51;:::i;:::-;11069:56;11154:4;11148;11144:15;11134:25;;11047:118;10996:169;;;;:::o;11170:295::-;11246:4;11392:29;11417:3;11411:4;11392:29;:::i;:::-;11384:37;;11454:3;11451:1;11447:11;11441:4;11438:21;11430:29;;11170:295;;;;:::o;11470:1395::-;11587:37;11620:3;11587:37;:::i;:::-;11689:18;11681:6;11678:30;11675:56;;;11711:18;;:::i;:::-;11675:56;11755:38;11787:4;11781:11;11755:38;:::i;:::-;11840:67;11900:6;11892;11886:4;11840:67;:::i;:::-;11934:1;11958:4;11945:17;;11990:2;11982:6;11979:14;12007:1;12002:618;;;;12664:1;12681:6;12678:77;;;12730:9;12725:3;12721:19;12715:26;12706:35;;12678:77;12781:67;12841:6;12834:5;12781:67;:::i;:::-;12775:4;12768:81;12637:222;11972:887;;12002:618;12054:4;12050:9;12042:6;12038:22;12088:37;12120:4;12088:37;:::i;:::-;12147:1;12161:208;12175:7;12172:1;12169:14;12161:208;;;12254:9;12249:3;12245:19;12239:26;12231:6;12224:42;12305:1;12297:6;12293:14;12283:24;;12352:2;12341:9;12337:18;12324:31;;12198:4;12195:1;12191:12;12186:17;;12161:208;;;12397:6;12388:7;12385:19;12382:179;;;12455:9;12450:3;12446:19;12440:26;12498:48;12540:4;12532:6;12528:17;12517:9;12498:48;:::i;:::-;12490:6;12483:64;12405:156;12382:179;12607:1;12603;12595:6;12591:14;12587:22;12581:4;12574:36;12009:611;;;11972:887;;11562:1303;;;11470:1395;;:::o

Swarm Source

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