ETH Price: $3,478.05 (+2.27%)

Token

Drift Token (DRIFT)
 

Overview

Max Total Supply

7,540,124,661.08677375333195754 DRIFT

Holders

917 ( 0.109%)

Market

Price

$0.00 @ 0.000000 ETH (-0.15%)

Onchain Market Cap

$711,863.17

Circulating Supply Market Cap

$255,372.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
523,334.252497877243082145 DRIFT

Value
$49.41 ( ~0.014206234378267 Eth) [0.0069%]
0xc18556fd957ff49d2b80c8589a2b0a04ef211891
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DriftProxy

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-15
*/

// File: @openzeppelin/contracts/utils/StorageSlot.sol


// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)
// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.

pragma solidity ^0.8.20;

/**
 * @dev Library for reading and writing primitive types to specific storage slots.
 *
 * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
 * This library helps with reading and writing to such slots without the need for inline assembly.
 *
 * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
 *
 * Example usage to set ERC1967 implementation slot:
 * ```solidity
 * contract ERC1967 {
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(newImplementation.code.length > 0);
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * ```
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    struct StringSlot {
        string value;
    }

    struct BytesSlot {
        bytes value;
    }

    /**
     * @dev Returns an `AddressSlot` with member `value` located at `slot`.
     */
    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
     */
    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
     */
    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
     */
    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `StringSlot` with member `value` located at `slot`.
     */
    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.
     */
    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := store.slot
        }
    }

    /**
     * @dev Returns an `BytesSlot` with member `value` located at `slot`.
     */
    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.
     */
    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := store.slot
        }
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


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

pragma solidity ^0.8.20;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error AddressInsufficientBalance(address account);

    /**
     * @dev There's no code at `target` (it is not a contract).
     */
    error AddressEmptyCode(address target);

    /**
     * @dev A call to an address target failed. The target may have reverted.
     */
    error FailedInnerCall();

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        if (address(this).balance < amount) {
            revert AddressInsufficientBalance(address(this));
        }

        (bool success, ) = recipient.call{value: amount}("");
        if (!success) {
            revert FailedInnerCall();
        }
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason or custom error, it is bubbled
     * up by this function (like regular Solidity function calls). However, if
     * the call reverted with no returned reason, this function reverts with a
     * {FailedInnerCall} error.
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert AddressInsufficientBalance(address(this));
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
     * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an
     * unsuccessful call.
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata
    ) internal view returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            // only check if target is a contract if the call was successful and the return data is empty
            // otherwise we already know that it was a contract
            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(target);
            }
            return returndata;
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
     * revert reason or with a default {FailedInnerCall} error.
     */
    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            return returndata;
        }
    }

    /**
     * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
     */
    function _revert(bytes memory returndata) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert FailedInnerCall();
        }
    }
}

// File: DriftProxy.sol


pragma solidity ^0.8.20;



/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internal call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal {
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internal call site, it will return directly to the external caller.
     */
    function _fallback() internal {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback() external payable {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive() external payable {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overridden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal {}
}

/**
 * @dev This abstract contract provides getters and event emitting update functions for
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.
 */
abstract contract ERC1967Upgrade {
    // This is the keccak-256 hash of "drift.token.proxy.rollback" subtracted by 1
    bytes32 private constant _ROLLBACK_SLOT =
        0x9843adc2ce1ee58312ba81786d469e32c03edf6b0879757a3b7f4a49a98bfbc7;

    /**
     * @dev Storage slot with the address of the current implementation.
     * This is the keccak-256 hash of "drift.token.proxy.implementation" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _IMPLEMENTATION_SLOT =
        0x20882e7e0b3c1661dc1474ff6a22afb8e557e42e9ade77c07c8ee84ac37bea1b;

    /**
     * @dev Emitted when the implementation is upgraded.
     */
    event Upgraded(address indexed implementation);

    /**
     * @dev Returns the current implementation address.
     */
    function _getImplementation() internal view returns (address) {
        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
    }

    /**
     * @dev Stores a new address in the EIP1967 implementation slot.
     */
    function _setImplementation(address newImplementation) private {
        if (newImplementation.code.length == 0) {
            revert("not contract");
        }
        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
    }

    /**
     * @dev Perform implementation upgrade
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeTo(address newImplementation) internal {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
    }

    /**
     * @dev Perform implementation upgrade with additional setup call.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeToAndCall(
        address newImplementation,
        bytes memory data,
        bool forceCall
    ) internal {
        _upgradeTo(newImplementation);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(newImplementation, data);
        }
    }

    /**
     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeToAndCallSecure(
        address newImplementation,
        bytes memory data,
        bool forceCall
    ) internal {
        address oldImplementation = _getImplementation();

        // Initial upgrade and setup call
        _setImplementation(newImplementation);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(newImplementation, data);
        }

        // Perform rollback test if not already in progress
        StorageSlot.BooleanSlot storage rollbackTesting = StorageSlot.getBooleanSlot(
            _ROLLBACK_SLOT
        );
        if (!rollbackTesting.value) {
            // Trigger rollback using upgradeTo from the new implementation
            rollbackTesting.value = true;
            Address.functionDelegateCall(
                newImplementation,
                abi.encodeWithSignature("upgradeTo(address)", oldImplementation)
            );
            rollbackTesting.value = false;
            // Check rollback was effective
            require(
                oldImplementation == _getImplementation(),
                "ERC1967Upgrade: upgrade breaks further upgrades"
            );
            // Finally reset to the new implementation and log the upgrade
            _upgradeTo(newImplementation);
        }
    }

    /**
     * @dev Storage slot with the admin of the contract.
     * This is the keccak-256 hash of "drift.token.proxy.admin" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _ADMIN_SLOT =
        0x444d5549c1b0fc679fe1d30daefb9b9e9d70ad980174932fc88b58cd57e10211;

    /**
     * @dev Emitted when the admin account has changed.
     */
    event AdminChanged(address previousAdmin, address newAdmin);

    /**
     * @dev Returns the current admin.
     */
    function _getAdmin() internal view returns (address) {
        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;
    }

    /**
     * @dev Stores a new address in the EIP1967 admin slot.
     */
    function _setAdmin(address newAdmin) private {
        require(newAdmin != address(0), "ERC1967: new admin is the zero address");
        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;
    }

    /**
     * @dev Changes the admin of the proxy.
     *
     * Emits an {AdminChanged} event.
     */
    function _changeAdmin(address newAdmin) internal {
        emit AdminChanged(_getAdmin(), newAdmin);
        _setAdmin(newAdmin);
    }
}

contract DriftProxy is Proxy, ERC1967Upgrade {
    constructor(address _logic, bytes memory _data) payable {
        assert(
            _IMPLEMENTATION_SLOT ==
                bytes32(uint256(keccak256("drift.token.proxy.implementation")) - 1) &&
                _ADMIN_SLOT == bytes32(uint256(keccak256("drift.token.proxy.admin")) - 1)
        );
        _upgradeToAndCall(_logic, _data, false);
        _changeAdmin(msg.sender);
    }

    modifier isProxyAdmin() {
        if (msg.sender == _getAdmin()) {
            _;
        }
    }

    modifier isProxyAdminWithFallback() {
        if (msg.sender == _getAdmin()) {
            _;
        } else {
            _fallback();
        }
    }

    /**
     * @dev Returns the current implementation address.
     */
    function _implementation() internal view virtual override returns (address impl) {
        return ERC1967Upgrade._getImplementation();
    }

    /**
     * @return impl The address of the implementation.
     */
    function implementation() external view isProxyAdmin returns (address impl) {
        return _implementation();
    }

    /**
     * @return adm The address of the proxy admin.
     */
    function admin() external view isProxyAdmin returns (address adm) {
        return _getAdmin();
    }

    /**
     * @dev Changes the admin of the proxy.
     * Only the current admin can call this function.
     * @param newAdmin Address to transfer proxy administration to.
     */
    function changeAdmin(address newAdmin) external isProxyAdminWithFallback {
        _changeAdmin(newAdmin);
    }

    /**
     * @dev Upgrade the backing implementation of the proxy.
     * Only the admin can call this function.
     * @param newImplementation Address of the new implementation.
     */
    function upgradeTo(address newImplementation) external isProxyAdminWithFallback {
        _upgradeTo(newImplementation);
    }

    /**
     * @dev Upgrade the backing implementation of the proxy and call a function
     * on the new implementation.
     * This is useful to initialize the proxied contract.
     * @param newImplementation Address of the new implementation.
     * @param data Data to send as msg.data in the low level call.
     * @param forceCall Boolean check to force call.
     * It should include the signature and the parameters of the function to be
     * called, as described in
     * https://solidity.readthedocs.io/en/develop/abi-spec.html#function-selector-and-argument-encoding.
     */
    function upgradeToAndCall(
        address newImplementation,
        bytes memory data,
        bool forceCall
    ) external payable isProxyAdminWithFallback {
        _upgradeToAndCall(newImplementation, data, forceCall);
    }

    /**
     * @dev Upgrade the backing implementation of the proxy and call a function
     * on the new implementation.
     * This is useful to initialize the proxied contract.
     * @param newImplementation Address of the new implementation.
     * @param data Data to send as msg.data in the low level call.
     * @param forceCall Boolean check to force call.
     * It should include the signature and the parameters of the function to be
     * called, as described in
     * https://solidity.readthedocs.io/en/develop/abi-spec.html#function-selector-and-argument-encoding.
     */
    function upgradeToAndCallSecure(
        address newImplementation,
        bytes memory data,
        bool forceCall
    ) external payable isProxyAdminWithFallback {
        _upgradeToAndCallSecure(newImplementation, data, forceCall);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"adm","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"impl","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"forceCall","type":"bool"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"forceCall","type":"bool"}],"name":"upgradeToAndCallSecure","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040516200191e3803806200191e83398181016040528101906200002991906200077e565b60017f20882e7e0b3c1661dc1474ff6a22afb8e557e42e9ade77c07c8ee84ac37bea1c5f1c6200005a919062000818565b5f1b7f20882e7e0b3c1661dc1474ff6a22afb8e557e42e9ade77c07c8ee84ac37bea1b5f1b148015620000e0575060017f444d5549c1b0fc679fe1d30daefb9b9e9d70ad980174932fc88b58cd57e102125f1c620000b9919062000818565b5f1b7f444d5549c1b0fc679fe1d30daefb9b9e9d70ad980174932fc88b58cd57e102115f1b145b620000f057620000ef62000852565b5b6200010382825f6200011c60201b60201c565b62000114336200015960201b60201c565b505062000a4a565b6200012d83620001b760201b60201c565b5f825111806200013a5750805b1562000154576200015283836200020e60201b60201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200018a6200029a60201b60201c565b826040516200019b92919062000890565b60405180910390a1620001b481620002f560201b60201c565b50565b620001c881620003dc60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60605f808473ffffffffffffffffffffffffffffffffffffffff168460405162000239919062000905565b5f60405180830381855af49150503d805f811462000273576040519150601f19603f3d011682016040523d82523d5f602084013e62000278565b606091505b509150915062000290858383620004ae60201b60201c565b9250505092915050565b5f620002ce7f444d5549c1b0fc679fe1d30daefb9b9e9d70ad980174932fc88b58cd57e102115f1b6200054a60201b60201c565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000366576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035d90620009a1565b60405180910390fd5b806200039a7f444d5549c1b0fc679fe1d30daefb9b9e9d70ad980174932fc88b58cd57e102115f1b6200054a60201b60201c565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0362000438576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042f9062000a0f565b60405180910390fd5b806200046c7f20882e7e0b3c1661dc1474ff6a22afb8e557e42e9ade77c07c8ee84ac37bea1b5f1b6200054a60201b60201c565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606082620004cd57620004c7826200055360201b60201c565b62000542565b5f8251148015620004f457505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156200053957836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040162000530919062000a2f565b60405180910390fd5b81905062000543565b5b9392505050565b5f819050919050565b5f81511115620005665780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620005d482620005a9565b9050919050565b620005e681620005c8565b8114620005f1575f80fd5b50565b5f815190506200060481620005db565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200065a8262000612565b810181811067ffffffffffffffff821117156200067c576200067b62000622565b5b80604052505050565b5f6200069062000598565b90506200069e82826200064f565b919050565b5f67ffffffffffffffff821115620006c057620006bf62000622565b5b620006cb8262000612565b9050602081019050919050565b5f5b83811015620006f7578082015181840152602081019050620006da565b5f8484015250505050565b5f620007186200071284620006a3565b62000685565b9050828152602081018484840111156200073757620007366200060e565b5b62000744848285620006d8565b509392505050565b5f82601f8301126200076357620007626200060a565b5b81516200077584826020860162000702565b91505092915050565b5f8060408385031215620007975762000796620005a1565b5b5f620007a685828601620005f4565b925050602083015167ffffffffffffffff811115620007ca57620007c9620005a5565b5b620007d8858286016200074c565b9150509250929050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200082482620007e2565b91506200083183620007e2565b92508282039050818111156200084c576200084b620007eb565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b6200088a81620005c8565b82525050565b5f604082019050620008a55f8301856200087f565b620008b460208301846200087f565b9392505050565b5f81519050919050565b5f81905092915050565b5f620008db82620008bb565b620008e78185620008c5565b9350620008f9818560208601620006d8565b80840191505092915050565b5f620009128284620008cf565b915081905092915050565b5f82825260208201905092915050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f620009896026836200091d565b915062000996826200092d565b604082019050919050565b5f6020820190508181035f830152620009ba816200097b565b9050919050565b7f6e6f7420636f6e747261637400000000000000000000000000000000000000005f82015250565b5f620009f7600c836200091d565b915062000a0482620009c1565b602082019050919050565b5f6020820190508181035f83015262000a2881620009e9565b9050919050565b5f60208201905062000a445f8301846200087f565b92915050565b610ec68062000a585f395ff3fe608060405260043610610058575f3560e01c806306d2e426146100715780633659cfe61461008d578063559e0e03146100b55780635c60da1b146100d15780638f283970146100fb578063f851a4401461012357610067565b366100675761006561014d565b005b61006f61014d565b005b61008b60048036038101906100869190610b94565b610167565b005b348015610098575f80fd5b506100b360048036038101906100ae9190610c00565b6101bf565b005b6100cf60048036038101906100ca9190610b94565b610213565b005b3480156100dc575f80fd5b506100e561026b565b6040516100f29190610c3a565b60405180910390f35b348015610106575f80fd5b50610121600480360381019061011c9190610c00565b6102b4565b005b34801561012e575f80fd5b50610137610308565b6040516101449190610c3a565b60405180910390f35b610155610351565b610165610160610353565b610361565b565b61016f610380565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036101b1576101ac8383836103d3565b6101ba565b6101b961014d565b5b505050565b6101c7610380565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361020757610202816103fe565b610210565b61020f61014d565b5b50565b61021b610380565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361025d5761025883838361044d565b610266565b61026561014d565b5b505050565b5f610274610380565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036102b1576102ae610353565b90505b90565b6102bc610380565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036102fc576102f781610613565b610305565b61030461014d565b5b50565b5f610311610380565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361034e5761034b610380565b90505b90565b565b5f61035c61065f565b905090565b365f80375f80365f845af43d5f803e805f811461037c573d5ff35b3d5ffd5b5f6103ac7f444d5549c1b0fc679fe1d30daefb9b9e9d70ad980174932fc88b58cd57e102115f1b6106b2565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103dc836103fe565b5f825111806103e85750805b156103f9576103f783836106bb565b505b505050565b6104078161073b565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b5f61045661065f565b90506104618461073b565b5f8351118061046d5750815b1561047e5761047c84846106bb565b505b5f6104aa7f9843adc2ce1ee58312ba81786d469e32c03edf6b0879757a3b7f4a49a98bfbc75f1b610802565b9050805f015f9054906101000a900460ff1661060c576001815f015f6101000a81548160ff02191690831515021790555061057285836040516024016104f09190610c3a565b6040516020818303038152906040527f3659cfe6000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506106bb565b505f815f015f6101000a81548160ff02191690831515021790555061059561065f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f990610cd3565b60405180910390fd5b61060b856103fe565b5b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61063c610380565b8260405161064b929190610cf1565b60405180910390a161065c8161080b565b50565b5f61068b7f20882e7e0b3c1661dc1474ff6a22afb8e557e42e9ade77c07c8ee84ac37bea1b5f1b6106b2565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f819050919050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516106e49190610d84565b5f60405180830381855af49150503d805f811461071c576040519150601f19603f3d011682016040523d82523d5f602084013e610721565b606091505b50915091506107318583836108e7565b9250505092915050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03610794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078b90610de4565b60405180910390fd5b806107c07f20882e7e0b3c1661dc1474ff6a22afb8e557e42e9ade77c07c8ee84ac37bea1b5f1b6106b2565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f819050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087090610e72565b60405180910390fd5b806108a57f444d5549c1b0fc679fe1d30daefb9b9e9d70ad980174932fc88b58cd57e102115f1b6106b2565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060826108fc576108f782610974565b61096c565b5f825114801561092257505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561096457836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161095b9190610c3a565b60405180910390fd5b81905061096d565b5b9392505050565b5f815111156109865780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6109f2826109c9565b9050919050565b610a02816109e8565b8114610a0c575f80fd5b50565b5f81359050610a1d816109f9565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610a7182610a2b565b810181811067ffffffffffffffff82111715610a9057610a8f610a3b565b5b80604052505050565b5f610aa26109b8565b9050610aae8282610a68565b919050565b5f67ffffffffffffffff821115610acd57610acc610a3b565b5b610ad682610a2b565b9050602081019050919050565b828183375f83830152505050565b5f610b03610afe84610ab3565b610a99565b905082815260208101848484011115610b1f57610b1e610a27565b5b610b2a848285610ae3565b509392505050565b5f82601f830112610b4657610b45610a23565b5b8135610b56848260208601610af1565b91505092915050565b5f8115159050919050565b610b7381610b5f565b8114610b7d575f80fd5b50565b5f81359050610b8e81610b6a565b92915050565b5f805f60608486031215610bab57610baa6109c1565b5b5f610bb886828701610a0f565b935050602084013567ffffffffffffffff811115610bd957610bd86109c5565b5b610be586828701610b32565b9250506040610bf686828701610b80565b9150509250925092565b5f60208284031215610c1557610c146109c1565b5b5f610c2284828501610a0f565b91505092915050565b610c34816109e8565b82525050565b5f602082019050610c4d5f830184610c2b565b92915050565b5f82825260208201905092915050565b7f45524331393637557067726164653a207570677261646520627265616b7320665f8201527f7572746865722075706772616465730000000000000000000000000000000000602082015250565b5f610cbd602f83610c53565b9150610cc882610c63565b604082019050919050565b5f6020820190508181035f830152610cea81610cb1565b9050919050565b5f604082019050610d045f830185610c2b565b610d116020830184610c2b565b9392505050565b5f81519050919050565b5f81905092915050565b5f5b83811015610d49578082015181840152602081019050610d2e565b5f8484015250505050565b5f610d5e82610d18565b610d688185610d22565b9350610d78818560208601610d2c565b80840191505092915050565b5f610d8f8284610d54565b915081905092915050565b7f6e6f7420636f6e747261637400000000000000000000000000000000000000005f82015250565b5f610dce600c83610c53565b9150610dd982610d9a565b602082019050919050565b5f6020820190508181035f830152610dfb81610dc2565b9050919050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f610e5c602683610c53565b9150610e6782610e02565b604082019050919050565b5f6020820190508181035f830152610e8981610e50565b905091905056fea2646970667358221220bab8df286ae2f47729fa3b4dcd54d83c3cb075f82e803b02fef510ae7e74192c64736f6c6343000814003300000000000000000000000038dd843cbd178fd68622018dd17585e13c8b1d30000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a433e1a223000000000000000000000000c2a47c9bd6b75832c6ec74be4338158b43ebad13000000000000000000000000c2a47c9bd6b75832c6ec74be4338158b43ebad1300000000000000000000000000000000000000001b29d4fa5108a361833c0000000000000000000000000000127a8e43ab4bb879f55841a2ea0e8d0198768aa3000000000000000000000000135fb1822b774013a993a400301eb60a7a1e33d400000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405260043610610058575f3560e01c806306d2e426146100715780633659cfe61461008d578063559e0e03146100b55780635c60da1b146100d15780638f283970146100fb578063f851a4401461012357610067565b366100675761006561014d565b005b61006f61014d565b005b61008b60048036038101906100869190610b94565b610167565b005b348015610098575f80fd5b506100b360048036038101906100ae9190610c00565b6101bf565b005b6100cf60048036038101906100ca9190610b94565b610213565b005b3480156100dc575f80fd5b506100e561026b565b6040516100f29190610c3a565b60405180910390f35b348015610106575f80fd5b50610121600480360381019061011c9190610c00565b6102b4565b005b34801561012e575f80fd5b50610137610308565b6040516101449190610c3a565b60405180910390f35b610155610351565b610165610160610353565b610361565b565b61016f610380565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036101b1576101ac8383836103d3565b6101ba565b6101b961014d565b5b505050565b6101c7610380565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361020757610202816103fe565b610210565b61020f61014d565b5b50565b61021b610380565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361025d5761025883838361044d565b610266565b61026561014d565b5b505050565b5f610274610380565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036102b1576102ae610353565b90505b90565b6102bc610380565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036102fc576102f781610613565b610305565b61030461014d565b5b50565b5f610311610380565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361034e5761034b610380565b90505b90565b565b5f61035c61065f565b905090565b365f80375f80365f845af43d5f803e805f811461037c573d5ff35b3d5ffd5b5f6103ac7f444d5549c1b0fc679fe1d30daefb9b9e9d70ad980174932fc88b58cd57e102115f1b6106b2565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103dc836103fe565b5f825111806103e85750805b156103f9576103f783836106bb565b505b505050565b6104078161073b565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b5f61045661065f565b90506104618461073b565b5f8351118061046d5750815b1561047e5761047c84846106bb565b505b5f6104aa7f9843adc2ce1ee58312ba81786d469e32c03edf6b0879757a3b7f4a49a98bfbc75f1b610802565b9050805f015f9054906101000a900460ff1661060c576001815f015f6101000a81548160ff02191690831515021790555061057285836040516024016104f09190610c3a565b6040516020818303038152906040527f3659cfe6000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506106bb565b505f815f015f6101000a81548160ff02191690831515021790555061059561065f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f990610cd3565b60405180910390fd5b61060b856103fe565b5b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61063c610380565b8260405161064b929190610cf1565b60405180910390a161065c8161080b565b50565b5f61068b7f20882e7e0b3c1661dc1474ff6a22afb8e557e42e9ade77c07c8ee84ac37bea1b5f1b6106b2565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f819050919050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516106e49190610d84565b5f60405180830381855af49150503d805f811461071c576040519150601f19603f3d011682016040523d82523d5f602084013e610721565b606091505b50915091506107318583836108e7565b9250505092915050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03610794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078b90610de4565b60405180910390fd5b806107c07f20882e7e0b3c1661dc1474ff6a22afb8e557e42e9ade77c07c8ee84ac37bea1b5f1b6106b2565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f819050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087090610e72565b60405180910390fd5b806108a57f444d5549c1b0fc679fe1d30daefb9b9e9d70ad980174932fc88b58cd57e102115f1b6106b2565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060826108fc576108f782610974565b61096c565b5f825114801561092257505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561096457836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161095b9190610c3a565b60405180910390fd5b81905061096d565b5b9392505050565b5f815111156109865780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6109f2826109c9565b9050919050565b610a02816109e8565b8114610a0c575f80fd5b50565b5f81359050610a1d816109f9565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610a7182610a2b565b810181811067ffffffffffffffff82111715610a9057610a8f610a3b565b5b80604052505050565b5f610aa26109b8565b9050610aae8282610a68565b919050565b5f67ffffffffffffffff821115610acd57610acc610a3b565b5b610ad682610a2b565b9050602081019050919050565b828183375f83830152505050565b5f610b03610afe84610ab3565b610a99565b905082815260208101848484011115610b1f57610b1e610a27565b5b610b2a848285610ae3565b509392505050565b5f82601f830112610b4657610b45610a23565b5b8135610b56848260208601610af1565b91505092915050565b5f8115159050919050565b610b7381610b5f565b8114610b7d575f80fd5b50565b5f81359050610b8e81610b6a565b92915050565b5f805f60608486031215610bab57610baa6109c1565b5b5f610bb886828701610a0f565b935050602084013567ffffffffffffffff811115610bd957610bd86109c5565b5b610be586828701610b32565b9250506040610bf686828701610b80565b9150509250925092565b5f60208284031215610c1557610c146109c1565b5b5f610c2284828501610a0f565b91505092915050565b610c34816109e8565b82525050565b5f602082019050610c4d5f830184610c2b565b92915050565b5f82825260208201905092915050565b7f45524331393637557067726164653a207570677261646520627265616b7320665f8201527f7572746865722075706772616465730000000000000000000000000000000000602082015250565b5f610cbd602f83610c53565b9150610cc882610c63565b604082019050919050565b5f6020820190508181035f830152610cea81610cb1565b9050919050565b5f604082019050610d045f830185610c2b565b610d116020830184610c2b565b9392505050565b5f81519050919050565b5f81905092915050565b5f5b83811015610d49578082015181840152602081019050610d2e565b5f8484015250505050565b5f610d5e82610d18565b610d688185610d22565b9350610d78818560208601610d2c565b80840191505092915050565b5f610d8f8284610d54565b915081905092915050565b7f6e6f7420636f6e747261637400000000000000000000000000000000000000005f82015250565b5f610dce600c83610c53565b9150610dd982610d9a565b602082019050919050565b5f6020820190508181035f830152610dfb81610dc2565b9050919050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f610e5c602683610c53565b9150610e6782610e02565b604082019050919050565b5f6020820190508181035f830152610e8981610e50565b905091905056fea2646970667358221220bab8df286ae2f47729fa3b4dcd54d83c3cb075f82e803b02fef510ae7e74192c64736f6c63430008140033

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

00000000000000000000000038dd843cbd178fd68622018dd17585e13c8b1d30000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a433e1a223000000000000000000000000c2a47c9bd6b75832c6ec74be4338158b43ebad13000000000000000000000000c2a47c9bd6b75832c6ec74be4338158b43ebad1300000000000000000000000000000000000000001b29d4fa5108a361833c0000000000000000000000000000127a8e43ab4bb879f55841a2ea0e8d0198768aa3000000000000000000000000135fb1822b774013a993a400301eb60a7a1e33d400000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _logic (address): 0x38DD843cBd178fd68622018DD17585E13C8b1d30
Arg [1] : _data (bytes): 0x33e1a223000000000000000000000000c2a47c9bd6b75832c6ec74be4338158b43ebad13000000000000000000000000c2a47c9bd6b75832c6ec74be4338158b43ebad1300000000000000000000000000000000000000001b29d4fa5108a361833c0000000000000000000000000000127a8e43ab4bb879f55841a2ea0e8d0198768aa3000000000000000000000000135fb1822b774013a993a400301eb60a7a1e33d4

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000038dd843cbd178fd68622018dd17585e13c8b1d30
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a4
Arg [3] : 33e1a223000000000000000000000000c2a47c9bd6b75832c6ec74be4338158b
Arg [4] : 43ebad13000000000000000000000000c2a47c9bd6b75832c6ec74be4338158b
Arg [5] : 43ebad1300000000000000000000000000000000000000001b29d4fa5108a361
Arg [6] : 833c0000000000000000000000000000127a8e43ab4bb879f55841a2ea0e8d01
Arg [7] : 98768aa3000000000000000000000000135fb1822b774013a993a400301eb60a
Arg [8] : 7a1e33d400000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

18676:3674:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13414:11;:9;:11::i;:::-;18676:3674;;13191:11;:9;:11::i;:::-;18676:3674;21253:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20515:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22099:248;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19703:119;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20198:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19900:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12844:105;12885:17;:15;:17::i;:::-;12913:28;12923:17;:15;:17::i;:::-;12913:9;:28::i;:::-;12844:105::o;21253:236::-;19304:11;:9;:11::i;:::-;19290:25;;:10;:25;;;19286:103;;21428:53:::1;21446:17;21465:4;21471:9;21428:17;:53::i;:::-;19286:103:::0;;;19366:11;:9;:11::i;:::-;19286:103;21253:236;;;:::o;20515:128::-;19304:11;:9;:11::i;:::-;19290:25;;:10;:25;;;19286:103;;20606:29:::1;20617:17;20606:10;:29::i;:::-;19286:103:::0;;;19366:11;:9;:11::i;:::-;19286:103;20515:128;:::o;22099:248::-;19304:11;:9;:11::i;:::-;19290:25;;:10;:25;;;19286:103;;22280:59:::1;22304:17;22323:4;22329:9;22280:23;:59::i;:::-;19286:103:::0;;;19366:11;:9;:11::i;:::-;19286:103;22099:248;;;:::o;19703:119::-;19765:12;19183:11;:9;:11::i;:::-;19169:25;;:10;:25;;;19165:59;;19797:17:::1;:15;:17::i;:::-;19790:24;;19165:59:::0;19703:119;:::o;20198:114::-;19304:11;:9;:11::i;:::-;19290:25;;:10;:25;;;19286:103;;20282:22:::1;20295:8;20282:12;:22::i;:::-;19286:103:::0;;;19366:11;:9;:11::i;:::-;19286:103;20198:114;:::o;19900:103::-;19953:11;19183;:9;:11::i;:::-;19169:25;;:10;:25;;;19165:59;;19984:11:::1;:9;:11::i;:::-;19977:18;;19165:59:::0;19900:103;:::o;13723:38::-;:::o;19479:142::-;19546:12;19578:35;:33;:35::i;:::-;19571:42;;19479:142;:::o;11442:910::-;11777:14;11774:1;11771;11758:34;11995:1;11992;11976:14;11973:1;11957:14;11950:5;11937:60;12074:16;12071:1;12068;12053:38;12114:6;12188:1;12183:68;;;;12302:16;12299:1;12292:27;12183:68;12219:16;12216:1;12209:27;17998:124;18042:7;18069:39;17722:66;18096:11;;18069:26;:39::i;:::-;:45;;;;;;;;;;;;18062:52;;17998:124;:::o;15646:304::-;15789:29;15800:17;15789:10;:29::i;:::-;15847:1;15833:4;:11;:15;:28;;;;15852:9;15833:28;15829:114;;;15878:53;15907:17;15926:4;15878:28;:53::i;:::-;;15829:114;15646:304;;;:::o;15350:155::-;15417:37;15436:17;15417:18;:37::i;:::-;15479:17;15470:27;;;;;;;;;;;;15350:155;:::o;16129:1333::-;16278:25;16306:20;:18;:20::i;:::-;16278:48;;16382:37;16401:17;16382:18;:37::i;:::-;16448:1;16434:4;:11;:15;:28;;;;16453:9;16434:28;16430:114;;;16479:53;16508:17;16527:4;16479:28;:53::i;:::-;;16430:114;16617:47;16667:66;14102;16708:14;;16667:26;:66::i;:::-;16617:116;;16749:15;:21;;;;;;;;;;;;16744:711;;16888:4;16864:15;:21;;;:28;;;;;;;;;;;;;;;;;;16907:162;16954:17;17036;16990:64;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16907:28;:162::i;:::-;;17108:5;17084:15;:21;;;:29;;;;;;;;;;;;;;;;;;17220:20;:18;:20::i;:::-;17199:41;;:17;:41;;;17173:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;17414:29;17425:17;17414:10;:29::i;:::-;16744:711;16267:1195;;16129:1333;;;:::o;18531:138::-;18596:35;18609:11;:9;:11::i;:::-;18622:8;18596:35;;;;;;;:::i;:::-;;;;;;;;18642:19;18652:8;18642:9;:19::i;:::-;18531:138;:::o;14744:142::-;14797:7;14824:48;14463:66;14851:20;;14824:26;:48::i;:::-;:54;;;;;;;;;;;;14817:61;;14744:142;:::o;1769:195::-;1830:21;1942:4;1932:14;;1769:195;;;:::o;8327:256::-;8410:12;8436;8450:23;8477:6;:19;;8497:4;8477:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8435:67;;;;8520:55;8547:6;8555:7;8564:10;8520:26;:55::i;:::-;8513:62;;;;8327:256;;;;:::o;14982:255::-;15093:1;15060:17;:29;;;:34;15056:89;;15111:22;;;;;;;;;;:::i;:::-;;;;;;;;15056:89;15212:17;15155:48;14463:66;15182:20;;15155:26;:48::i;:::-;:54;;;:74;;;;;;;;;;;;;;;;;;14982:255;:::o;2067:195::-;2128:21;2240:4;2230:14;;2067:195;;;:::o;18209:204::-;18293:1;18273:22;;:8;:22;;;18265:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18397:8;18349:39;17722:66;18376:11;;18349:26;:39::i;:::-;:45;;;:56;;;;;;;;;;;;;;;;;;18209:204;:::o;8856:597::-;9004:12;9034:7;9029:417;;9058:19;9066:10;9058:7;:19::i;:::-;9029:417;;;9307:1;9286:10;:17;:22;:49;;;;;9334:1;9312:6;:18;;;:23;9286:49;9282:121;;;9380:6;9363:24;;;;;;;;;;;:::i;:::-;;;;;;;;9282:121;9424:10;9417:17;;;;9029:417;8856:597;;;;;;:::o;10006:528::-;10159:1;10139:10;:17;:21;10135:392;;;10371:10;10365:17;10428:15;10415:10;10411:2;10407:19;10400:44;10135:392;10498:17;;;;;;;;;;;;;;7:75:1;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:117::-;950:1;947;940:12;964:117;1073:1;1070;1063:12;1087:102;1128:6;1179:2;1175:7;1170:2;1163:5;1159:14;1155:28;1145:38;;1087:102;;;:::o;1195:180::-;1243:77;1240:1;1233:88;1340:4;1337:1;1330:15;1364:4;1361:1;1354:15;1381:281;1464:27;1486:4;1464:27;:::i;:::-;1456:6;1452:40;1594:6;1582:10;1579:22;1558:18;1546:10;1543:34;1540:62;1537:88;;;1605:18;;:::i;:::-;1537:88;1645:10;1641:2;1634:22;1424:238;1381:281;;:::o;1668:129::-;1702:6;1729:20;;:::i;:::-;1719:30;;1758:33;1786:4;1778:6;1758:33;:::i;:::-;1668:129;;;:::o;1803:307::-;1864:4;1954:18;1946:6;1943:30;1940:56;;;1976:18;;:::i;:::-;1940:56;2014:29;2036:6;2014:29;:::i;:::-;2006:37;;2098:4;2092;2088:15;2080:23;;1803:307;;;:::o;2116:146::-;2213:6;2208:3;2203;2190:30;2254:1;2245:6;2240:3;2236:16;2229:27;2116:146;;;:::o;2268:423::-;2345:5;2370:65;2386:48;2427:6;2386:48;:::i;:::-;2370:65;:::i;:::-;2361:74;;2458:6;2451:5;2444:21;2496:4;2489:5;2485:16;2534:3;2525:6;2520:3;2516:16;2513:25;2510:112;;;2541:79;;:::i;:::-;2510:112;2631:54;2678:6;2673:3;2668;2631:54;:::i;:::-;2351:340;2268:423;;;;;:::o;2710:338::-;2765:5;2814:3;2807:4;2799:6;2795:17;2791:27;2781:122;;2822:79;;:::i;:::-;2781:122;2939:6;2926:20;2964:78;3038:3;3030:6;3023:4;3015:6;3011:17;2964:78;:::i;:::-;2955:87;;2771:277;2710:338;;;;:::o;3054:90::-;3088:7;3131:5;3124:13;3117:21;3106:32;;3054:90;;;:::o;3150:116::-;3220:21;3235:5;3220:21;:::i;:::-;3213:5;3210:32;3200:60;;3256:1;3253;3246:12;3200:60;3150:116;:::o;3272:133::-;3315:5;3353:6;3340:20;3331:29;;3369:30;3393:5;3369:30;:::i;:::-;3272:133;;;;:::o;3411:791::-;3494:6;3502;3510;3559:2;3547:9;3538:7;3534:23;3530:32;3527:119;;;3565:79;;:::i;:::-;3527:119;3685:1;3710:53;3755:7;3746:6;3735:9;3731:22;3710:53;:::i;:::-;3700:63;;3656:117;3840:2;3829:9;3825:18;3812:32;3871:18;3863:6;3860:30;3857:117;;;3893:79;;:::i;:::-;3857:117;3998:62;4052:7;4043:6;4032:9;4028:22;3998:62;:::i;:::-;3988:72;;3783:287;4109:2;4135:50;4177:7;4168:6;4157:9;4153:22;4135:50;:::i;:::-;4125:60;;4080:115;3411:791;;;;;:::o;4208:329::-;4267:6;4316:2;4304:9;4295:7;4291:23;4287:32;4284:119;;;4322:79;;:::i;:::-;4284:119;4442:1;4467:53;4512:7;4503:6;4492:9;4488:22;4467:53;:::i;:::-;4457:63;;4413:117;4208:329;;;;:::o;4543:118::-;4630:24;4648:5;4630:24;:::i;:::-;4625:3;4618:37;4543:118;;:::o;4667:222::-;4760:4;4798:2;4787:9;4783:18;4775:26;;4811:71;4879:1;4868:9;4864:17;4855:6;4811:71;:::i;:::-;4667:222;;;;:::o;4895:169::-;4979:11;5013:6;5008:3;5001:19;5053:4;5048:3;5044:14;5029:29;;4895:169;;;;:::o;5070:234::-;5210:34;5206:1;5198:6;5194:14;5187:58;5279:17;5274:2;5266:6;5262:15;5255:42;5070:234;:::o;5310:366::-;5452:3;5473:67;5537:2;5532:3;5473:67;:::i;:::-;5466:74;;5549:93;5638:3;5549:93;:::i;:::-;5667:2;5662:3;5658:12;5651:19;;5310:366;;;:::o;5682:419::-;5848:4;5886:2;5875:9;5871:18;5863:26;;5935:9;5929:4;5925:20;5921:1;5910:9;5906:17;5899:47;5963:131;6089:4;5963:131;:::i;:::-;5955:139;;5682:419;;;:::o;6107:332::-;6228:4;6266:2;6255:9;6251:18;6243:26;;6279:71;6347:1;6336:9;6332:17;6323:6;6279:71;:::i;:::-;6360:72;6428:2;6417:9;6413:18;6404:6;6360:72;:::i;:::-;6107:332;;;;;:::o;6445:98::-;6496:6;6530:5;6524:12;6514:22;;6445:98;;;:::o;6549:147::-;6650:11;6687:3;6672:18;;6549:147;;;;:::o;6702:246::-;6783:1;6793:113;6807:6;6804:1;6801:13;6793:113;;;6892:1;6887:3;6883:11;6877:18;6873:1;6868:3;6864:11;6857:39;6829:2;6826:1;6822:10;6817:15;;6793:113;;;6940:1;6931:6;6926:3;6922:16;6915:27;6764:184;6702:246;;;:::o;6954:386::-;7058:3;7086:38;7118:5;7086:38;:::i;:::-;7140:88;7221:6;7216:3;7140:88;:::i;:::-;7133:95;;7237:65;7295:6;7290:3;7283:4;7276:5;7272:16;7237:65;:::i;:::-;7327:6;7322:3;7318:16;7311:23;;7062:278;6954:386;;;;:::o;7346:271::-;7476:3;7498:93;7587:3;7578:6;7498:93;:::i;:::-;7491:100;;7608:3;7601:10;;7346:271;;;;:::o;7623:162::-;7763:14;7759:1;7751:6;7747:14;7740:38;7623:162;:::o;7791:366::-;7933:3;7954:67;8018:2;8013:3;7954:67;:::i;:::-;7947:74;;8030:93;8119:3;8030:93;:::i;:::-;8148:2;8143:3;8139:12;8132:19;;7791:366;;;:::o;8163:419::-;8329:4;8367:2;8356:9;8352:18;8344:26;;8416:9;8410:4;8406:20;8402:1;8391:9;8387:17;8380:47;8444:131;8570:4;8444:131;:::i;:::-;8436:139;;8163:419;;;:::o;8588:225::-;8728:34;8724:1;8716:6;8712:14;8705:58;8797:8;8792:2;8784:6;8780:15;8773:33;8588:225;:::o;8819:366::-;8961:3;8982:67;9046:2;9041:3;8982:67;:::i;:::-;8975:74;;9058:93;9147:3;9058:93;:::i;:::-;9176:2;9171:3;9167:12;9160:19;;8819:366;;;:::o;9191:419::-;9357:4;9395:2;9384:9;9380:18;9372:26;;9444:9;9438:4;9434:20;9430:1;9419:9;9415:17;9408:47;9472:131;9598:4;9472:131;:::i;:::-;9464:139;;9191:419;;;:::o

Swarm Source

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