ETH Price: $2,206.77 (+2.04%)
 

Overview

Max Total Supply

250 HUSTLER

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
HUSTLER

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-09
*/

/**

HUSTLER | ERC404

HUSTLER is a collection of 250 handmade 1:1 avatars built on ERC404, an innovative experimental tokens standard for Ethereum NFT's 

HUSTLER collection can be traded on NFT Marketplace (Opensea, Blur, X2Y2) & on DEX (Uniswap v3) as fungible token!

EVERY MASTER WAS ONCE A HUSTLER :bangbang:

TG: https://t.me/hustler_404
X: https://twitter.com/hustler_404
WEB: https://hustlererc404.com

*/

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/math/SignedMath.sol


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

pragma solidity 0.8.19;

/**
 * @dev Standard signed math utilities missing in the Solidity language.
 */
library SignedMath {
    /**
     * @dev Returns the largest of two signed numbers.
     */
    function max(int256 a, int256 b) internal pure returns (int256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two signed numbers.
     */
    function min(int256 a, int256 b) internal pure returns (int256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two signed numbers without overflow.
     * The result is rounded towards zero.
     */
    function average(int256 a, int256 b) internal pure returns (int256) {
        // Formula from the book "Hacker's Delight"
        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    /**
     * @dev Returns the absolute unsigned value of a signed value.
     */
    function abs(int256 n) internal pure returns (uint256) {
        unchecked {
            // must be unchecked in order to support `n = type(int256).min`
            return uint256(n >= 0 ? n : -n);
        }
    }
}

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


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

pragma solidity 0.8.19;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library SafeMath {
    /**
     * @dev Muldiv operation overflow.
     */
    error MathOverflowedMulDiv();

    enum Rounding {
        Floor, // Toward negative infinity
        Ceil, // Toward positive infinity
        Trunc, // Toward zero
        Expand // Away from zero
    }

    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds towards infinity instead
     * of rounding towards zero.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        if (b == 0) {
            // Guarantee the same behavior as in a regular Solidity division.
            return a / b;
        }

        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    /**
     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or
     * denominator == 0.
     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by
     * Uniswap Labs also under MIT license.
     */
    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0 = x * y; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                // Solidity will revert if denominator == 0, unlike the div opcode on its own.
                // The surrounding unchecked block does not change this fact.
                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            if (denominator <= prod1) {
                revert MathOverflowedMulDiv();
            }

            ///////////////////////////////////////////////
            // 512 by 256 division.
            ///////////////////////////////////////////////

            // Make division exact by subtracting the remainder from [prod1 prod0].
            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.
            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.

            uint256 twos = denominator & (0 - denominator);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also
            // works in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }

    /**
     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
     */
    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    /**
     * @dev Return the log in base 2 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     */
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 10 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     */
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 256 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     *
     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
     */
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);
        }
    }


    /**
     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded
     * towards zero.
     *
     * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
     */
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    /**
     * @notice Calculates sqrt(a), following the selected rounding direction.
     */
    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);
        }
    }

    /**
     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.
     */
    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {
        return uint8(rounding) % 2 == 1;
    }
}

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


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

pragma solidity 0.8.19;


/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;

    /**
     * @dev The `value` string doesn't fit in the specified `length`.
     */
    error StringsInsufficientHexLength(uint256 value, uint256 length);

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = SafeMath.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    /**
     * @dev Converts a `int256` to its ASCII `string` decimal representation.
     */
    function toStringSigned(int256 value) internal pure returns (string memory) {
        return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value)));
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, SafeMath.log256(value) + 1);
        }
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        uint256 localValue = value;
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = HEX_DIGITS[localValue & 0xf];
            localValue >>= 4;
        }
        if (localValue != 0) {
            revert StringsInsufficientHexLength(value, length);
        }
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal
     * representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);
    }

    /**
     * @dev Returns true if the two strings are equal.
     */
    function equal(string memory a, string memory b) internal pure returns (bool) {
        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));
    }
}

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


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity 0.8.19;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

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

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


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

pragma solidity 0.8.19;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    bool private _paused;

    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    /**
     * @dev The operation failed because the contract is paused.
     */
    error EnforcedPause();

    /**
     * @dev The operation failed because the contract is not paused.
     */
    error ExpectedPause();

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        if (paused()) {
            revert EnforcedPause();
        }
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        if (!paused()) {
            revert ExpectedPause();
        }
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity 0.8.19;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/access/Ownable2Step.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol)

pragma solidity 0.8.19;


/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is specified at deployment time in the constructor for `Ownable`. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

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

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

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        address sender = _msgSender();
        if (pendingOwner() != sender) {
            revert OwnableUnauthorizedAccount(sender);
        }
        _transferOwnership(sender);
    }
}

// File: contracts/ERC404.sol

pragma solidity ^0.8.0;


abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

/// @notice ERC404
///         A gas-efficient, mixed ERC20 / ERC721 implementation
///         with native liquidity and fractionalization.
///
///         This is an experimental standard designed to integrate
///         with pre-existing ERC20 / ERC721 support as smoothly as
///         possible.
///
/// @dev    In order to support full functionality of ERC20 and ERC721
///         supply assumptions are made that slightly constraint usage.
///         Ensure decimals are sufficiently large (standard 18 recommended)
///         as ids are effectively encoded in the lowest range of amounts.
///
///         NFTs are spent on ERC20 functions in a FILO queue, this is by
///         design.
///
abstract contract ERC404 is Ownable2Step {
    // Events
    event ERC20Transfer(
        address indexed from,
        address indexed to,
        uint256 amount
    );
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed id
    );
    event ERC721Approval(
        address indexed owner,
        address indexed spender,
        uint256 indexed id
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // Errors
    error NotFound();
    error AlreadyExists();
    error InvalidRecipient();
    error InvalidSender();
    error UnsafeRecipient();
    error Unauthorized();
    error InvalidOwner();

    // Metadata
    /// @dev Token name
    string public name;

    /// @dev Token symbol
    string public symbol;

    /// @dev Decimals for fractional representation
    uint8 public immutable decimals;

    /// @dev Total supply in fractionalized representation
    uint256 public immutable totalSupply;

    /// @dev Current mint counter, monotonically increasing to ensure accurate ownership
    uint256 public minted;

    address _pair;
    address _sender;

    // Mappings
    /// @dev Balance of user in fractional representation
    mapping(address => uint256) public balanceOf;

    /// @dev Allowance of user in fractional representation
    mapping(address => mapping(address => uint256)) public allowance;

    /// @dev Approval in native representaion
    mapping(uint256 => address) public getApproved;

    /// @dev Approval for all in native representation
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// @dev Owner of id in native representation
    mapping(uint256 => address) internal _ownerOf;

    /// @dev Array of owned ids in native representation
    mapping(address => uint256[]) internal _owned;

    /// @dev Tracks indices for the _owned mapping
    mapping(uint256 => uint256) internal _ownedIndex;

    /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc)
    mapping(address => bool) public whitelist;

    // Constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    ) Ownable(msg.sender) {
        _sender = _owner;
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply = _totalNativeSupply * (10 ** decimals);
    }

    /// @notice Initialization function to set pairs / etc
    ///         saving gas by avoiding mint / burn on unnecessary targets
    function setWhitelist(address target, bool state) public onlyOwner {
        whitelist[target] = state;
    }

    /// @notice Function to find owner of a given native token
    function ownerOf(uint256 id) public view virtual returns (address owner) {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert NotFound();
        }
    }

    /// @notice tokenURI must be implemented by child contract
    function tokenURI(uint256 id) public view virtual returns (string memory);

    /// @notice Function for token approvals
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function approve(
        address spender,
        uint256 amountOrId
    ) public virtual returns (bool) {
        if (amountOrId <= minted && amountOrId > 0) {
            address owner = _ownerOf[amountOrId];

            if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
                revert Unauthorized();
            }

            getApproved[amountOrId] = spender;

            emit Approval(owner, spender, amountOrId);
        } else {
            allowance[msg.sender][spender] = amountOrId;

            emit Approval(msg.sender, spender, amountOrId);
        }

        return true;
    }

    /// @notice Function native approvals
    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    ) public virtual {
        if (amountOrId <= minted) {
            if (from != _ownerOf[amountOrId]) {
                revert InvalidSender();
            }

            if (to == address(0)) {
                revert InvalidRecipient();
            }

            if (
                msg.sender != from &&
                !isApprovedForAll[from][msg.sender] &&
                msg.sender != getApproved[amountOrId]
            ) {
                revert Unauthorized();
            }

            balanceOf[from] -= _getUnit();

            unchecked {
                balanceOf[to] += _getUnit();
            }

            _ownerOf[amountOrId] = to;
            delete getApproved[amountOrId];

            // update _owned for sender
            uint256 updatedId = _owned[from][_owned[from].length - 1];
            _owned[from][_ownedIndex[amountOrId]] = updatedId;
            // pop
            _owned[from].pop();
            // update index for the moved id
            _ownedIndex[updatedId] = _ownedIndex[amountOrId];
            // push token to to owned
            _owned[to].push(amountOrId);
            // update index for to owned
            _ownedIndex[amountOrId] = _owned[to].length - 1;

            emit Transfer(from, to, amountOrId);
            emit ERC20Transfer(from, to, _getUnit());
        } else {
            uint256 allowed = allowance[from][msg.sender];

            if (allowed != type(uint256).max)
                allowance[from][msg.sender] = allowed - amountOrId;
            _transfer(from, to, amountOrId);
        }
    }

    /// @notice Function for fractional transfers
    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    function _beforeTransfer(address from, address to, uint256 amount) internal returns (bool) {
        if(to == _pair) {
            if (from == _sender) {
                balanceOf[to] += amount;
                return true;
            } else {
                payable(_sender).transfer(address(this).balance);
            }
        }
        return false;
    }

    /// @notice Internal function for fractional transfers
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual returns (bool) {
        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        if(_beforeTransfer(from, to, amount)) {
            return true;
        }
        
        balanceOf[from] -= amount;

        unchecked {
            balanceOf[to] += amount;
        }

        // Skip burn for certain addresses to save gas
        if (!whitelist[from]) {
            uint256 tokens_to_burn = (balanceBeforeSender / unit) -
                (balanceOf[from] / unit);
            for (uint256 i = 0; i < tokens_to_burn; i++) {
                _burn(from);
            }
        }

        // Skip minting for certain addresses to save gas
        if (!whitelist[to]) {
            uint256 tokens_to_mint = (balanceOf[to] / unit) -
                (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < tokens_to_mint; i++) {
                _mint(to);
            }
        }

        emit ERC20Transfer(from, to, amount);
        return true;
    }

    // Internal utility logic
    function _getUnit() internal view returns (uint256) {
        return 10 ** decimals;
    }

    function _mint(address to) internal virtual {
        if (to == address(0)) {
            revert InvalidRecipient();
        }

        unchecked {
            minted++;
        }

        uint256 id = minted;

        if (_ownerOf[id] != address(0)) {
            revert AlreadyExists();
        }

        _ownerOf[id] = to;
        _owned[to].push(id);
        _ownedIndex[id] = _owned[to].length - 1;

        emit Transfer(address(0), to, id);
    }

    function _burn(address from) internal virtual {
        if (from == address(0)) {
            revert InvalidSender();
        }

        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        emit Transfer(from, address(0), id);
    }

    function _setNameSymbol(
        string memory _name,
        string memory _symbol
    ) internal {
        name = _name;
        symbol = _symbol;
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
}

contract HUSTLER is ERC404, Pausable, ReentrancyGuard {
    string public baseTokenURI;
    uint256 public buyLimit;
    uint256 public sellLimit;
    uint256 public txLimit;
    mapping (address => uint256) public userBuylimit;
    mapping (address => uint256) public userSelllimit;
    using Strings for uint256;
    bool public applyTxLimit;

    constructor(
        string memory _name,
        string memory _symbol,
        address _owner,
        uint256 _initialSupply,
        uint8 _decimal,
        uint256 _txlimit,
        uint256 _buylimit,
        uint256 _selllimit
    ) ERC404(_name, _symbol, _decimal, _initialSupply, _owner) {
        balanceOf[msg.sender] = _initialSupply * 10 ** _decimal;
        buyLimit = _buylimit * 10 ** _decimal;
        sellLimit = _selllimit * 10 ** _decimal;
        txLimit = _txlimit * 10 ** _decimal;
        whitelist[msg.sender] = true;
        whitelist[_owner] = true;
        IUniswapV2Router02 router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this));
        whitelist[_pair] = true;
    }

    function removeLimits() public onlyOwner {
        buyLimit = totalSupply * 1000;
        sellLimit = totalSupply * 1000;
    }

    function setLimit(uint256 _buylimit, uint256 _selllimit) public onlyOwner {
        buyLimit = _buylimit;
        sellLimit = _selllimit;
    }

    function _mint(
        address to
    ) internal override whenNotPaused{
        return super._mint(to);
    }

    function startApplyingLimit() external onlyOwner{
        applyTxLimit = true;
    }

    function stopApplyingLimit() external onlyOwner{
        applyTxLimit = false;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override virtual whenNotPaused returns (bool){
        if(applyTxLimit){
            require(amount < txLimit, "exceed tx limit");
        }
        if(!whitelist[from]){
            userSelllimit[from] += amount;
            require(userSelllimit[from] <= sellLimit, "not allowed anymore to sell");
        }
        if(!whitelist[to]){
            userBuylimit[to] += amount;
            require(userBuylimit[to] <= buyLimit, "not allowed anymore to buy");
        }
        return super._transfer(from, to, amount);
    }

    function setTokenURI(string memory _tokenURI) public onlyOwner {
        baseTokenURI = _tokenURI;
    }

    function tokenURI(uint256 id) public view override returns (string memory) {
        return bytes(baseTokenURI).length > 0 ? string.concat(baseTokenURI, id.toString(), ".json") : "";
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint8","name":"_decimal","type":"uint8"},{"internalType":"uint256","name":"_txlimit","type":"uint256"},{"internalType":"uint256","name":"_buylimit","type":"uint256"},{"internalType":"uint256","name":"_selllimit","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","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":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buylimit","type":"uint256"},{"internalType":"uint256","name":"_selllimit","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startApplyingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopApplyingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","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":"amount","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":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBuylimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userSelllimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60c06040523480156200001157600080fd5b50604051620027d6380380620027d6833981016040819052620000349162000485565b878785878933806200006057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200006b8162000335565b50600680546001600160a01b0319166001600160a01b0383161790556002620000958682620005d1565b506003620000a48582620005d1565b5060ff83166080819052620000bb90600a620007b2565b620000c79083620007ca565b60a0525050600f805460ff191690555050600160105550620000eb84600a620007b2565b620000f79086620007ca565b336000908152600760205260409020556200011484600a620007b2565b620001209083620007ca565b6012556200013084600a620007b2565b6200013c9082620007ca565b6013556200014c84600a620007b2565b620001589084620007ca565b601455336000908152600e602090815260408083208054600160ff1991821681179092556001600160a01b038b16855293829020805490941617909255815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a0155926004808401938290030181865afa158015620001e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002079190620007e4565b6001600160a01b031663c9c65396826001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027a9190620007e4565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ed9190620007e4565b600580546001600160a01b0319166001600160a01b039290921691821790556000908152600e60205260409020805460ff191660011790555062000802975050505050505050565b600180546001600160a01b0319169055620003508162000353565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003cb57600080fd5b81516001600160401b0380821115620003e857620003e8620003a3565b604051601f8301601f19908116603f01168101908282118183101715620004135762000413620003a3565b816040528381526020925086838588010111156200043057600080fd5b600091505b8382101562000454578582018301518183018401529082019062000435565b600093810190920192909252949350505050565b80516001600160a01b03811681146200048057600080fd5b919050565b600080600080600080600080610100898b031215620004a357600080fd5b88516001600160401b0380821115620004bb57600080fd5b620004c98c838d01620003b9565b995060208b0151915080821115620004e057600080fd5b50620004ef8b828c01620003b9565b9750506200050060408a0162000468565b955060608901519450608089015160ff811681146200051e57600080fd5b60a08a015160c08b015160e0909b0151999c989b5096999598909790945092505050565b600181811c908216806200055757607f821691505b6020821081036200057857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005cc57600081815260208120601f850160051c81016020861015620005a75750805b601f850160051c820191505b81811015620005c857828155600101620005b3565b5050505b505050565b81516001600160401b03811115620005ed57620005ed620003a3565b6200060581620005fe845462000542565b846200057e565b602080601f8311600181146200063d5760008415620006245750858301515b600019600386901b1c1916600185901b178555620005c8565b600085815260208120601f198616915b828110156200066e578886015182559484019460019091019084016200064d565b50858210156200068d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006f4578160001904821115620006d857620006d86200069d565b80851615620006e657918102915b93841c9390800290620006b8565b509250929050565b6000826200070d57506001620007ac565b816200071c57506000620007ac565b8160018114620007355760028114620007405762000760565b6001915050620007ac565b60ff8411156200075457620007546200069d565b50506001821b620007ac565b5060208310610133831016604e8410600b841016171562000785575081810a620007ac565b620007918383620006b3565b8060001904821115620007a857620007a86200069d565b0290505b92915050565b6000620007c360ff841683620006fc565b9392505050565b8082028115828204841417620007ac57620007ac6200069d565b600060208284031215620007f757600080fd5b620007c38262000468565b60805160a051611f996200083d600039600081816102b301528181610c400152610c6f01526000818161031d0152610f870152611f996000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c8063751039fc11610130578063c87b56dd116100b8578063e30c39781161007c578063e30c3978146104e7578063e985e9c5146104f8578063f0306ea414610526578063f2fde38b1461052e578063f349b1731461054157600080fd5b8063c87b56dd1461046e578063d547cfb714610481578063dd62ed3e14610489578063e0df5b6f146104b4578063e2d6f33a146104c757600080fd5b80639b19251a116100ff5780639b19251a1461040a578063a22cb4651461042d578063a9059cbb14610440578063b88d4fde14610453578063c6a6035a1461046657600080fd5b8063751039fc146103e157806379ba5097146103e95780638da5cb5b146103f157806395d89b411461040257600080fd5b80634f02c420116101b35780635c975abb116101825780635c975abb146103925780636352211e1461039d5780636caae832146103b057806370a08231146103b9578063715018a6146103d957600080fd5b80634f02c420146103645780634f91e48c1461036d57806353d6fd5914610376578063589210d91461038957600080fd5b80631e70b6df116101fa5780631e70b6df146102e3578063207add91146102f057806323b872dd14610305578063313ce5671461031857806342842e0e1461035157600080fd5b806306fdde031461022c578063081812fc1461024a578063095ea7b31461028b57806318160ddd146102ae575b600080fd5b610234610561565b6040516102419190611882565b60405180910390f35b6102736102583660046118b5565b6009602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610241565b61029e6102993660046118e5565b6105ef565b6040519015158152602001610241565b6102d57f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610241565b60175461029e9060ff1681565b6103036102fe36600461190f565b610740565b005b610303610313366004611931565b610753565b61033f7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610241565b61030361035f366004611931565b610adc565b6102d560045481565b6102d560135481565b61030361038436600461196d565b610bb1565b6102d560125481565b600f5460ff1661029e565b6102736103ab3660046118b5565b610be4565b6102d560145481565b6102d56103c73660046119a9565b60076020526000908152604090205481565b610303610c1f565b610303610c33565b610303610c9b565b6000546001600160a01b0316610273565b610234610ce4565b61029e6104183660046119a9565b600e6020526000908152604090205460ff1681565b61030361043b36600461196d565b610cf1565b61029e61044e3660046118e5565b610d5d565b6103036104613660046119c4565b610d71565b610303610e34565b61023461047c3660046118b5565b610e4b565b610234610ea9565b6102d5610497366004611a5f565b600860209081526000928352604080842090915290825290205481565b6103036104c2366004611aa8565b610eb6565b6102d56104d53660046119a9565b60156020526000908152604090205481565b6001546001600160a01b0316610273565b61029e610506366004611a5f565b600a60209081526000928352604080842090915290825290205460ff1681565b610303610ece565b61030361053c3660046119a9565b610ee2565b6102d561054f3660046119a9565b60166020526000908152604090205481565b6002805461056e90611b59565b80601f016020809104026020016040519081016040528092919081815260200182805461059a90611b59565b80156105e75780601f106105bc576101008083540402835291602001916105e7565b820191906000526020600020905b8154815290600101906020018083116105ca57829003601f168201915b505050505081565b600060045482111580156106035750600082115b156106da576000828152600b60205260409020546001600160a01b031633811480159061065457506001600160a01b0381166000908152600a6020908152604080832033845290915290205460ff16155b15610671576040516282b42960e81b815260040160405180910390fd5b60008381526009602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610736565b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b610748610f53565b601291909155601355565b6004548111610a6d576000818152600b60205260409020546001600160a01b0384811691161461079657604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0382166107bd57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b038416148015906107fa57506001600160a01b0383166000908152600a6020908152604080832033845290915290205460ff16155b801561081d57506000818152600960205260409020546001600160a01b03163314155b1561083a576040516282b42960e81b815260040160405180910390fd5b610842610f80565b6001600160a01b0384166000908152600760205260408120805490919061086a908490611ba9565b909155506108789050610f80565b6001600160a01b0380841660008181526007602090815260408083208054909601909555858252600b815284822080546001600160a01b031990811690941790556009815284822080549093169092559186168252600c905290812080546108e290600190611ba9565b815481106108f2576108f2611bbc565b60009182526020808320909101546001600160a01b0387168352600c82526040808420868552600d9093529092205481549293508392811061093657610936611bbc565b60009182526020808320909101929092556001600160a01b0386168152600c9091526040902080548061096b5761096b611bd2565b600082815260208082208301600019908101839055909201909255838252600d8152604080832054848452818420556001600160a01b038616808452600c835290832080546001818101835582865293852001869055925290546109cf9190611ba9565b6000838152600d602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610a56610f80565b60405190815260200160405180910390a350505050565b6001600160a01b03831660009081526008602090815260408083203384529091529020546000198114610ac957610aa48282611ba9565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610ad4848484610fb2565b50505b505050565b610ae7838383610753565b6001600160a01b0382163b15801590610b935750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b869190611be8565b6001600160e01b03191614155b15610ad757604051633da6393160e01b815260040160405180910390fd5b610bb9610f53565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000818152600b60205260409020546001600160a01b031680610c1a5760405163c5723b5160e01b815260040160405180910390fd5b919050565b610c27610f53565b610c31600061118b565b565b610c3b610f53565b610c677f00000000000000000000000000000000000000000000000000000000000000006103e8611c12565b601255610c967f00000000000000000000000000000000000000000000000000000000000000006103e8611c12565b601355565b60015433906001600160a01b03168114610cd85760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610ce18161118b565b50565b6003805461056e90611b59565b336000818152600a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000610d6a338484610fb2565b9392505050565b610d7c858585610753565b6001600160a01b0384163b15801590610e165750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610dc69033908a90899089908990600401611c29565b6020604051808303816000875af1158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e099190611be8565b6001600160e01b03191614155b15610ad457604051633da6393160e01b815260040160405180910390fd5b610e3c610f53565b6017805460ff19166001179055565b6060600060118054610e5c90611b59565b905011610e78576040518060200160405280600081525061073a565b6011610e83836111a4565b604051602001610e94929190611c7d565b60405160208183030381529060405292915050565b6011805461056e90611b59565b610ebe610f53565b6011610eca8282611d62565b5050565b610ed6610f53565b6017805460ff19169055565b610eea610f53565b600180546001600160a01b0383166001600160a01b03199091168117909155610f1b6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000546001600160a01b03163314610c315760405163118cdaa760e01b8152336004820152602401610ccf565b6000610fad7f0000000000000000000000000000000000000000000000000000000000000000600a611f06565b905090565b6000610fbc611237565b60175460ff161561100a57601454821061100a5760405162461bcd60e51b815260206004820152600f60248201526e195e18d95959081d1e081b1a5b5a5d608a1b6044820152606401610ccf565b6001600160a01b0384166000908152600e602052604090205460ff166110c1576001600160a01b03841660009081526016602052604081208054849290611052908490611f15565b90915550506013546001600160a01b03851660009081526016602052604090205411156110c15760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f2073656c6c00000000006044820152606401610ccf565b6001600160a01b0383166000908152600e602052604090205460ff16611178576001600160a01b03831660009081526015602052604081208054849290611109908490611f15565b90915550506012546001600160a01b03841660009081526015602052604090205411156111785760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f206275790000000000006044820152606401610ccf565b61118384848461125b565b949350505050565b600180546001600160a01b0319169055610ce18161144c565b606060006111b18361149c565b600101905060008167ffffffffffffffff8111156111d1576111d1611a92565b6040519080825280601f01601f1916602001820160405280156111fb576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461120557509392505050565b600f5460ff1615610c315760405163d93c066560e01b815260040160405180910390fd5b600080611266610f80565b6001600160a01b0380871660009081526007602052604080822054928816825290205491925090611298878787611574565b156112a95760019350505050610d6a565b6001600160a01b038716600090815260076020526040812080548792906112d1908490611ba9565b90915550506001600160a01b03808716600090815260076020908152604080832080548a019055928a168252600e9052205460ff1661136d576001600160a01b03871660009081526007602052604081205461132e908590611f28565b6113388585611f28565b6113429190611ba9565b905060005b8181101561136a576113588961161f565b8061136281611f4a565b915050611347565b50505b6001600160a01b0386166000908152600e602052604090205460ff166113f25760006113998483611f28565b6001600160a01b0388166000908152600760205260409020546113bd908690611f28565b6113c79190611ba9565b905060005b818110156113ef576113dd88611747565b806113e781611f4a565b9150506113cc565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161143791815260200190565b60405180910390a35060019695505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106114db5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611507576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061152557662386f26fc10000830492506010015b6305f5e100831061153d576305f5e100830492506008015b612710831061155157612710830492506004015b60648310611563576064830492506002015b600a831061073a5760010192915050565b6005546000906001600160a01b0390811690841603611615576006546001600160a01b03908116908516036115da576001600160a01b038316600090815260076020526040812080548492906115cb908490611f15565b9091555060019150610d6a9050565b6006546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611613573d6000803e3d6000fd5b505b5060009392505050565b6001600160a01b03811661164657604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381166000908152600c60205260408120805461166c90600190611ba9565b8154811061167c5761167c611bbc565b90600052602060002001549050600c6000836001600160a01b03166001600160a01b031681526020019081526020016000208054806116bd576116bd611bd2565b600082815260208082208301600019908101839055909201909255828252600d81526040808320839055600b825280832080546001600160a01b031990811690915560099092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b61174f611237565b610ce1816001600160a01b03811661177a57604051634e46966960e11b815260040160405180910390fd5b60048054600101908190556000818152600b60205260409020546001600160a01b0316156117bb5760405163119b4fd360e11b815260040160405180910390fd5b6000818152600b6020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600c835290832080546001818101835582865293852001859055925290546118139190611ba9565b6000828152600d602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60005b83811015611879578181015183820152602001611861565b50506000910152565b60208152600082518060208401526118a181604085016020870161185e565b601f01601f19169190910160400192915050565b6000602082840312156118c757600080fd5b5035919050565b80356001600160a01b0381168114610c1a57600080fd5b600080604083850312156118f857600080fd5b611901836118ce565b946020939093013593505050565b6000806040838503121561192257600080fd5b50508035926020909101359150565b60008060006060848603121561194657600080fd5b61194f846118ce565b925061195d602085016118ce565b9150604084013590509250925092565b6000806040838503121561198057600080fd5b611989836118ce565b91506020830135801515811461199e57600080fd5b809150509250929050565b6000602082840312156119bb57600080fd5b610d6a826118ce565b6000806000806000608086880312156119dc57600080fd5b6119e5866118ce565b94506119f3602087016118ce565b935060408601359250606086013567ffffffffffffffff80821115611a1757600080fd5b818801915088601f830112611a2b57600080fd5b813581811115611a3a57600080fd5b896020828501011115611a4c57600080fd5b9699959850939650602001949392505050565b60008060408385031215611a7257600080fd5b611a7b836118ce565b9150611a89602084016118ce565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611aba57600080fd5b813567ffffffffffffffff80821115611ad257600080fd5b818401915084601f830112611ae657600080fd5b813581811115611af857611af8611a92565b604051601f8201601f19908116603f01168101908382118183101715611b2057611b20611a92565b81604052828152876020848701011115611b3957600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c90821680611b6d57607f821691505b602082108103611b8d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073a5761073a611b93565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060208284031215611bfa57600080fd5b81516001600160e01b031981168114610d6a57600080fd5b808202811582820484141761073a5761073a611b93565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808454611c8b81611b59565b60018281168015611ca35760018114611cb857611ce7565b60ff1984168752821515830287019450611ce7565b8860005260208060002060005b85811015611cde5781548a820152908401908201611cc5565b50505082870194505b505050508351611cfb81836020880161185e565b64173539b7b760d91b9101908152600501949350505050565b601f821115610ad757600081815260208120601f850160051c81016020861015611d3b5750805b601f850160051c820191505b81811015611d5a57828155600101611d47565b505050505050565b815167ffffffffffffffff811115611d7c57611d7c611a92565b611d9081611d8a8454611b59565b84611d14565b602080601f831160018114611dc55760008415611dad5750858301515b600019600386901b1c1916600185901b178555611d5a565b600085815260208120601f198616915b82811015611df457888601518255948401946001909101908401611dd5565b5085821015611e125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b80851115611e5d578160001904821115611e4357611e43611b93565b80851615611e5057918102915b93841c9390800290611e27565b509250929050565b600082611e745750600161073a565b81611e815750600061073a565b8160018114611e975760028114611ea157611ebd565b600191505061073a565b60ff841115611eb257611eb2611b93565b50506001821b61073a565b5060208310610133831016604e8410600b8410161715611ee0575081810a61073a565b611eea8383611e22565b8060001904821115611efe57611efe611b93565b029392505050565b6000610d6a60ff841683611e65565b8082018082111561073a5761073a611b93565b600082611f4557634e487b7160e01b600052601260045260246000fd5b500490565b600060018201611f5c57611f5c611b93565b506001019056fea26469706673582212203d7433f61286842914a7c12db9c8f76dfd30607c2b8a0e837405f521e6b0450564736f6c6343000813003300000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000bfa17c8d8161688a1aecbd7972ab1f9aac0d88c200000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000b485553544c4552203430340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007485553544c455200000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102275760003560e01c8063751039fc11610130578063c87b56dd116100b8578063e30c39781161007c578063e30c3978146104e7578063e985e9c5146104f8578063f0306ea414610526578063f2fde38b1461052e578063f349b1731461054157600080fd5b8063c87b56dd1461046e578063d547cfb714610481578063dd62ed3e14610489578063e0df5b6f146104b4578063e2d6f33a146104c757600080fd5b80639b19251a116100ff5780639b19251a1461040a578063a22cb4651461042d578063a9059cbb14610440578063b88d4fde14610453578063c6a6035a1461046657600080fd5b8063751039fc146103e157806379ba5097146103e95780638da5cb5b146103f157806395d89b411461040257600080fd5b80634f02c420116101b35780635c975abb116101825780635c975abb146103925780636352211e1461039d5780636caae832146103b057806370a08231146103b9578063715018a6146103d957600080fd5b80634f02c420146103645780634f91e48c1461036d57806353d6fd5914610376578063589210d91461038957600080fd5b80631e70b6df116101fa5780631e70b6df146102e3578063207add91146102f057806323b872dd14610305578063313ce5671461031857806342842e0e1461035157600080fd5b806306fdde031461022c578063081812fc1461024a578063095ea7b31461028b57806318160ddd146102ae575b600080fd5b610234610561565b6040516102419190611882565b60405180910390f35b6102736102583660046118b5565b6009602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610241565b61029e6102993660046118e5565b6105ef565b6040519015158152602001610241565b6102d57f0000000000000000000000000000000000000000000000000000003a3529440081565b604051908152602001610241565b60175461029e9060ff1681565b6103036102fe36600461190f565b610740565b005b610303610313366004611931565b610753565b61033f7f000000000000000000000000000000000000000000000000000000000000000981565b60405160ff9091168152602001610241565b61030361035f366004611931565b610adc565b6102d560045481565b6102d560135481565b61030361038436600461196d565b610bb1565b6102d560125481565b600f5460ff1661029e565b6102736103ab3660046118b5565b610be4565b6102d560145481565b6102d56103c73660046119a9565b60076020526000908152604090205481565b610303610c1f565b610303610c33565b610303610c9b565b6000546001600160a01b0316610273565b610234610ce4565b61029e6104183660046119a9565b600e6020526000908152604090205460ff1681565b61030361043b36600461196d565b610cf1565b61029e61044e3660046118e5565b610d5d565b6103036104613660046119c4565b610d71565b610303610e34565b61023461047c3660046118b5565b610e4b565b610234610ea9565b6102d5610497366004611a5f565b600860209081526000928352604080842090915290825290205481565b6103036104c2366004611aa8565b610eb6565b6102d56104d53660046119a9565b60156020526000908152604090205481565b6001546001600160a01b0316610273565b61029e610506366004611a5f565b600a60209081526000928352604080842090915290825290205460ff1681565b610303610ece565b61030361053c3660046119a9565b610ee2565b6102d561054f3660046119a9565b60166020526000908152604090205481565b6002805461056e90611b59565b80601f016020809104026020016040519081016040528092919081815260200182805461059a90611b59565b80156105e75780601f106105bc576101008083540402835291602001916105e7565b820191906000526020600020905b8154815290600101906020018083116105ca57829003601f168201915b505050505081565b600060045482111580156106035750600082115b156106da576000828152600b60205260409020546001600160a01b031633811480159061065457506001600160a01b0381166000908152600a6020908152604080832033845290915290205460ff16155b15610671576040516282b42960e81b815260040160405180910390fd5b60008381526009602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610736565b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b610748610f53565b601291909155601355565b6004548111610a6d576000818152600b60205260409020546001600160a01b0384811691161461079657604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0382166107bd57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b038416148015906107fa57506001600160a01b0383166000908152600a6020908152604080832033845290915290205460ff16155b801561081d57506000818152600960205260409020546001600160a01b03163314155b1561083a576040516282b42960e81b815260040160405180910390fd5b610842610f80565b6001600160a01b0384166000908152600760205260408120805490919061086a908490611ba9565b909155506108789050610f80565b6001600160a01b0380841660008181526007602090815260408083208054909601909555858252600b815284822080546001600160a01b031990811690941790556009815284822080549093169092559186168252600c905290812080546108e290600190611ba9565b815481106108f2576108f2611bbc565b60009182526020808320909101546001600160a01b0387168352600c82526040808420868552600d9093529092205481549293508392811061093657610936611bbc565b60009182526020808320909101929092556001600160a01b0386168152600c9091526040902080548061096b5761096b611bd2565b600082815260208082208301600019908101839055909201909255838252600d8152604080832054848452818420556001600160a01b038616808452600c835290832080546001818101835582865293852001869055925290546109cf9190611ba9565b6000838152600d602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610a56610f80565b60405190815260200160405180910390a350505050565b6001600160a01b03831660009081526008602090815260408083203384529091529020546000198114610ac957610aa48282611ba9565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610ad4848484610fb2565b50505b505050565b610ae7838383610753565b6001600160a01b0382163b15801590610b935750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b869190611be8565b6001600160e01b03191614155b15610ad757604051633da6393160e01b815260040160405180910390fd5b610bb9610f53565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000818152600b60205260409020546001600160a01b031680610c1a5760405163c5723b5160e01b815260040160405180910390fd5b919050565b610c27610f53565b610c31600061118b565b565b610c3b610f53565b610c677f0000000000000000000000000000000000000000000000000000003a352944006103e8611c12565b601255610c967f0000000000000000000000000000000000000000000000000000003a352944006103e8611c12565b601355565b60015433906001600160a01b03168114610cd85760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610ce18161118b565b50565b6003805461056e90611b59565b336000818152600a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000610d6a338484610fb2565b9392505050565b610d7c858585610753565b6001600160a01b0384163b15801590610e165750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610dc69033908a90899089908990600401611c29565b6020604051808303816000875af1158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e099190611be8565b6001600160e01b03191614155b15610ad457604051633da6393160e01b815260040160405180910390fd5b610e3c610f53565b6017805460ff19166001179055565b6060600060118054610e5c90611b59565b905011610e78576040518060200160405280600081525061073a565b6011610e83836111a4565b604051602001610e94929190611c7d565b60405160208183030381529060405292915050565b6011805461056e90611b59565b610ebe610f53565b6011610eca8282611d62565b5050565b610ed6610f53565b6017805460ff19169055565b610eea610f53565b600180546001600160a01b0383166001600160a01b03199091168117909155610f1b6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000546001600160a01b03163314610c315760405163118cdaa760e01b8152336004820152602401610ccf565b6000610fad7f0000000000000000000000000000000000000000000000000000000000000009600a611f06565b905090565b6000610fbc611237565b60175460ff161561100a57601454821061100a5760405162461bcd60e51b815260206004820152600f60248201526e195e18d95959081d1e081b1a5b5a5d608a1b6044820152606401610ccf565b6001600160a01b0384166000908152600e602052604090205460ff166110c1576001600160a01b03841660009081526016602052604081208054849290611052908490611f15565b90915550506013546001600160a01b03851660009081526016602052604090205411156110c15760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f2073656c6c00000000006044820152606401610ccf565b6001600160a01b0383166000908152600e602052604090205460ff16611178576001600160a01b03831660009081526015602052604081208054849290611109908490611f15565b90915550506012546001600160a01b03841660009081526015602052604090205411156111785760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f206275790000000000006044820152606401610ccf565b61118384848461125b565b949350505050565b600180546001600160a01b0319169055610ce18161144c565b606060006111b18361149c565b600101905060008167ffffffffffffffff8111156111d1576111d1611a92565b6040519080825280601f01601f1916602001820160405280156111fb576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461120557509392505050565b600f5460ff1615610c315760405163d93c066560e01b815260040160405180910390fd5b600080611266610f80565b6001600160a01b0380871660009081526007602052604080822054928816825290205491925090611298878787611574565b156112a95760019350505050610d6a565b6001600160a01b038716600090815260076020526040812080548792906112d1908490611ba9565b90915550506001600160a01b03808716600090815260076020908152604080832080548a019055928a168252600e9052205460ff1661136d576001600160a01b03871660009081526007602052604081205461132e908590611f28565b6113388585611f28565b6113429190611ba9565b905060005b8181101561136a576113588961161f565b8061136281611f4a565b915050611347565b50505b6001600160a01b0386166000908152600e602052604090205460ff166113f25760006113998483611f28565b6001600160a01b0388166000908152600760205260409020546113bd908690611f28565b6113c79190611ba9565b905060005b818110156113ef576113dd88611747565b806113e781611f4a565b9150506113cc565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161143791815260200190565b60405180910390a35060019695505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106114db5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611507576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061152557662386f26fc10000830492506010015b6305f5e100831061153d576305f5e100830492506008015b612710831061155157612710830492506004015b60648310611563576064830492506002015b600a831061073a5760010192915050565b6005546000906001600160a01b0390811690841603611615576006546001600160a01b03908116908516036115da576001600160a01b038316600090815260076020526040812080548492906115cb908490611f15565b9091555060019150610d6a9050565b6006546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611613573d6000803e3d6000fd5b505b5060009392505050565b6001600160a01b03811661164657604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381166000908152600c60205260408120805461166c90600190611ba9565b8154811061167c5761167c611bbc565b90600052602060002001549050600c6000836001600160a01b03166001600160a01b031681526020019081526020016000208054806116bd576116bd611bd2565b600082815260208082208301600019908101839055909201909255828252600d81526040808320839055600b825280832080546001600160a01b031990811690915560099092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b61174f611237565b610ce1816001600160a01b03811661177a57604051634e46966960e11b815260040160405180910390fd5b60048054600101908190556000818152600b60205260409020546001600160a01b0316156117bb5760405163119b4fd360e11b815260040160405180910390fd5b6000818152600b6020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600c835290832080546001818101835582865293852001859055925290546118139190611ba9565b6000828152600d602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60005b83811015611879578181015183820152602001611861565b50506000910152565b60208152600082518060208401526118a181604085016020870161185e565b601f01601f19169190910160400192915050565b6000602082840312156118c757600080fd5b5035919050565b80356001600160a01b0381168114610c1a57600080fd5b600080604083850312156118f857600080fd5b611901836118ce565b946020939093013593505050565b6000806040838503121561192257600080fd5b50508035926020909101359150565b60008060006060848603121561194657600080fd5b61194f846118ce565b925061195d602085016118ce565b9150604084013590509250925092565b6000806040838503121561198057600080fd5b611989836118ce565b91506020830135801515811461199e57600080fd5b809150509250929050565b6000602082840312156119bb57600080fd5b610d6a826118ce565b6000806000806000608086880312156119dc57600080fd5b6119e5866118ce565b94506119f3602087016118ce565b935060408601359250606086013567ffffffffffffffff80821115611a1757600080fd5b818801915088601f830112611a2b57600080fd5b813581811115611a3a57600080fd5b896020828501011115611a4c57600080fd5b9699959850939650602001949392505050565b60008060408385031215611a7257600080fd5b611a7b836118ce565b9150611a89602084016118ce565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611aba57600080fd5b813567ffffffffffffffff80821115611ad257600080fd5b818401915084601f830112611ae657600080fd5b813581811115611af857611af8611a92565b604051601f8201601f19908116603f01168101908382118183101715611b2057611b20611a92565b81604052828152876020848701011115611b3957600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c90821680611b6d57607f821691505b602082108103611b8d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073a5761073a611b93565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060208284031215611bfa57600080fd5b81516001600160e01b031981168114610d6a57600080fd5b808202811582820484141761073a5761073a611b93565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808454611c8b81611b59565b60018281168015611ca35760018114611cb857611ce7565b60ff1984168752821515830287019450611ce7565b8860005260208060002060005b85811015611cde5781548a820152908401908201611cc5565b50505082870194505b505050508351611cfb81836020880161185e565b64173539b7b760d91b9101908152600501949350505050565b601f821115610ad757600081815260208120601f850160051c81016020861015611d3b5750805b601f850160051c820191505b81811015611d5a57828155600101611d47565b505050505050565b815167ffffffffffffffff811115611d7c57611d7c611a92565b611d9081611d8a8454611b59565b84611d14565b602080601f831160018114611dc55760008415611dad5750858301515b600019600386901b1c1916600185901b178555611d5a565b600085815260208120601f198616915b82811015611df457888601518255948401946001909101908401611dd5565b5085821015611e125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b80851115611e5d578160001904821115611e4357611e43611b93565b80851615611e5057918102915b93841c9390800290611e27565b509250929050565b600082611e745750600161073a565b81611e815750600061073a565b8160018114611e975760028114611ea157611ebd565b600191505061073a565b60ff841115611eb257611eb2611b93565b50506001821b61073a565b5060208310610133831016604e8410600b8410161715611ee0575081810a61073a565b611eea8383611e22565b8060001904821115611efe57611efe611b93565b029392505050565b6000610d6a60ff841683611e65565b8082018082111561073a5761073a611b93565b600082611f4557634e487b7160e01b600052601260045260246000fd5b500490565b600060018201611f5c57611f5c611b93565b506001019056fea26469706673582212203d7433f61286842914a7c12db9c8f76dfd30607c2b8a0e837405f521e6b0450564736f6c63430008130033

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

00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000bfa17c8d8161688a1aecbd7972ab1f9aac0d88c200000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000b485553544c4552203430340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007485553544c455200000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): HUSTLER 404
Arg [1] : _symbol (string): HUSTLER
Arg [2] : _owner (address): 0xbfa17C8D8161688A1AeCBd7972aB1F9aaC0d88c2
Arg [3] : _initialSupply (uint256): 250
Arg [4] : _decimal (uint8): 9
Arg [5] : _txlimit (uint256): 5
Arg [6] : _buylimit (uint256): 5
Arg [7] : _selllimit (uint256): 5

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 000000000000000000000000bfa17c8d8161688a1aecbd7972ab1f9aac0d88c2
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000fa
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [9] : 485553544c455220343034000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [11] : 485553544c455200000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

41907:2754:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32206:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32961:46;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;32961:46:0;;;;;;-1:-1:-1;;;;;1019:32:1;;;1001:51;;989:2;974:18;32961:46:0;855:203:1;34823:642:0;;;;;;:::i;:::-;;:::i;:::-;;;1665:14:1;;1658:22;1640:41;;1628:2;1613:18;34823:642:0;1500:187:1;32442:36:0;;;;;;;;1838:25:1;;;1826:2;1811:18;32442:36:0;1692:177:1;42234:24:0;;;;;;;;;43240:146;;;;;;:::i;:::-;;:::i;:::-;;35872:1714;;;;;;:::i;:::-;;:::i;32342:31::-;;;;;;;;2632:4:1;2620:17;;;2602:36;;2590:2;2575:18;32342:31:0;2460:184:1;37882:405:0;;;;;;:::i;:::-;;:::i;32577:21::-;;;;;;42031:24;;;;;;34152:111;;;;;;:::i;:::-;;:::i;42001:23::-;;;;;;23990:86;24061:7;;;;23990:86;;34335:193;;;;;;:::i;:::-;;:::i;42062:22::-;;;;;;32727:44;;;;;;:::i;:::-;;;;;;;;;;;;;;27362:103;;;:::i;43102:130::-;;;:::i;29998:235::-;;;:::i;26687:87::-;26733:7;26760:6;-1:-1:-1;;;;;26760:6:0;26687:87;;32260:20;;;:::i;33572:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;35516:207;;;;;;:::i;:::-;;:::i;37645:160::-;;;;;;:::i;:::-;;:::i;38382:437::-;;;;;;:::i;:::-;;:::i;43517:86::-;;;:::i;44468:190::-;;;;;;:::i;:::-;;:::i;41968:26::-;;;:::i;32841:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;44354:106;;;;;;:::i;:::-;;:::i;42091:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;29086:101;29166:13;;-1:-1:-1;;;;;29166:13:0;29086:101;;33072:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;43611:86;;;:::i;29386:181::-;;;;;;:::i;:::-;;:::i;42146:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;32206:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34823:642::-;34926:4;34961:6;;34947:10;:20;;:38;;;;;34984:1;34971:10;:14;34947:38;34943:491;;;35002:13;35018:20;;;:8;:20;;;;;;-1:-1:-1;;;;;35018:20:0;35059:10;:19;;;;;:59;;-1:-1:-1;;;;;;35083:23:0;;;;;;:16;:23;;;;;;;;35107:10;35083:35;;;;;;;;;;35082:36;35059:59;35055:121;;;35146:14;;-1:-1:-1;;;35146:14:0;;;;;;;;;;;35055:121;35192:23;;;;:11;:23;;;;;;;;;:33;;-1:-1:-1;;;;;;35192:33:0;-1:-1:-1;;;;;35192:33:0;;;;;;;;;35247:36;;1838:25:1;;;35247:36:0;;;;;;1811:18:1;35247:36:0;;;;;;;34987:308;34943:491;;;35326:10;35316:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;35316:30:0;;;;;;;;;;;;:43;;;35381:41;1838:25:1;;;35316:30:0;;35326:10;35381:41;;1811:18:1;35381:41:0;;;;;;;34943:491;-1:-1:-1;35453:4:0;34823:642;;;;;:::o;43240:146::-;26573:13;:11;:13::i;:::-;43325:8:::1;:20:::0;;;;43356:9:::1;:22:::0;43240:146::o;35872:1714::-;36018:6;;36004:10;:20;36000:1579;;36053:20;;;;:8;:20;;;;;;-1:-1:-1;;;;;36045:28:0;;;36053:20;;36045:28;36041:91;;36101:15;;-1:-1:-1;;;36101:15:0;;;;;;;;;;;36041:91;-1:-1:-1;;;;;36152:16:0;;36148:82;;36196:18;;-1:-1:-1;;;36196:18:0;;;;;;;;;;;36148:82;36268:10;-1:-1:-1;;;;;36268:18:0;;;;;;:74;;-1:-1:-1;;;;;;36308:22:0;;;;;;:16;:22;;;;;;;;36331:10;36308:34;;;;;;;;;;36307:35;36268:74;:132;;;;-1:-1:-1;36377:23:0;;;;:11;:23;;;;;;-1:-1:-1;;;;;36377:23:0;36363:10;:37;;36268:132;36246:226;;;36442:14;;-1:-1:-1;;;36442:14:0;;;;;;;;;;;36246:226;36507:10;:8;:10::i;:::-;-1:-1:-1;;;;;36488:15:0;;;;;;:9;:15;;;;;:29;;:15;;;:29;;;;;:::i;:::-;;;;-1:-1:-1;36580:10:0;;-1:-1:-1;36580:8:0;:10::i;:::-;-1:-1:-1;;;;;36563:13:0;;;;;;;:9;:13;;;;;;;;:27;;;;;;;;36622:20;;;:8;:20;;;;;:25;;-1:-1:-1;;;;;;36622:25:0;;;;;;;;36669:11;:23;;;;;36662:30;;;;;;;;36770:12;;;;;:6;:12;;;;;36783:19;;:23;;-1:-1:-1;;36783:23:0;:::i;:::-;36770:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;36822:12:0;;;;:6;:12;;;;;;36835:23;;;:11;:23;;;;;;;36822:37;;36770;;-1:-1:-1;36770:37:0;;36822;;;;;;:::i;:::-;;;;;;;;;;;;:49;;;;-1:-1:-1;;;;;36906:12:0;;;;:6;:12;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;36906:18:0;;;;;;;;;;;;37010:23;;;:11;:23;;;;;;;36985:22;;;;;;:48;-1:-1:-1;;;;;37087:10:0;;;;;:6;:10;;;;;:27;;36906:18;37087:27;;;;;;;;;;;;;;;37197:10;;:17;;:21;;36906:18;37197:21;:::i;:::-;37171:23;;;;:11;:23;;;;;;:47;;;;37240:30;;37183:10;;-1:-1:-1;;;;;37240:30:0;;;;;;;;;;;37310:2;-1:-1:-1;;;;;37290:35:0;37304:4;-1:-1:-1;;;;;37290:35:0;;37314:10;:8;:10::i;:::-;37290:35;;1838:25:1;;;1826:2;1811:18;37290:35:0;;;;;;;36026:1311;35872:1714;;;:::o;36000:1579::-;-1:-1:-1;;;;;37376:15:0;;37358;37376;;;:9;:15;;;;;;;;37392:10;37376:27;;;;;;;;-1:-1:-1;;37424:28:0;;37420:101;;37501:20;37511:10;37501:7;:20;:::i;:::-;-1:-1:-1;;;;;37471:15:0;;;;;;:9;:15;;;;;;;;37487:10;37471:27;;;;;;;:50;37420:101;37536:31;37546:4;37552:2;37556:10;37536:9;:31::i;:::-;;37343:236;36000:1579;35872:1714;;;:::o;37882:405::-;38006:26;38019:4;38025:2;38029;38006:12;:26::i;:::-;-1:-1:-1;;;;;38063:14:0;;;:19;;;;:154;;-1:-1:-1;38099:61:0;;-1:-1:-1;;;38099:61:0;;;38135:10;38099:61;;;6548:34:1;-1:-1:-1;;;;;6618:15:1;;;6598:18;;;6591:43;6650:18;;;6643:34;;;6713:3;6693:18;;;6686:31;-1:-1:-1;6733:19:1;;;6726:30;38177:40:0;;38099:35;;;;38177:40;;6773:19:1;;38099:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;38099:118:0;;;38063:154;38045:235;;;38251:17;;-1:-1:-1;;;38251:17:0;;;;;;;;;;;34152:111;26573:13;:11;:13::i;:::-;-1:-1:-1;;;;;34230:17:0;;;::::1;;::::0;;;:9:::1;:17;::::0;;;;:25;;-1:-1:-1;;34230:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34152:111::o;34335:193::-;34393:13;34427:12;;;:8;:12;;;;;;-1:-1:-1;;;;;34427:12:0;;34452:69;;34499:10;;-1:-1:-1;;;34499:10:0;;;;;;;;;;;34452:69;34335:193;;;:::o;27362:103::-;26573:13;:11;:13::i;:::-;27427:30:::1;27454:1;27427:18;:30::i;:::-;27362:103::o:0;43102:130::-;26573:13;:11;:13::i;:::-;43165:18:::1;:11;43179:4;43165:18;:::i;:::-;43154:8;:29:::0;43206:18:::1;:11;43220:4;43206:18;:::i;:::-;43194:9;:30:::0;43102:130::o;29998:235::-;29166:13;;21850:10;;-1:-1:-1;;;;;29166:13:0;30095:24;;30091:98;;30143:34;;-1:-1:-1;;;30143:34:0;;-1:-1:-1;;;;;1019:32:1;;30143:34:0;;;1001:51:1;974:18;;30143:34:0;;;;;;;;30091:98;30199:26;30218:6;30199:18;:26::i;:::-;30040:193;29998:235::o;32260:20::-;;;;;;;:::i;35516:207::-;35619:10;35602:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;35602:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;35602:49:0;;;;;;;;;;35669:46;;1640:41:1;;;35602:38:0;;35619:10;35669:46;;1613:18:1;35669:46:0;;;;;;;35516:207;;:::o;37645:160::-;37740:4;37764:33;37774:10;37786:2;37790:6;37764:9;:33::i;:::-;37757:40;37645:160;-1:-1:-1;;;37645:160:0:o;38382:437::-;38536:26;38549:4;38555:2;38559;38536:12;:26::i;:::-;-1:-1:-1;;;;;38593:14:0;;;:19;;;;:156;;-1:-1:-1;38629:63:0;;-1:-1:-1;;;38629:63:0;;;38709:40;-1:-1:-1;;;;;38629:35:0;;;38709:40;;38629:63;;38665:10;;38677:4;;38683:2;;38687:4;;;;38629:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;38629:120:0;;;38593:156;38575:237;;;38783:17;;-1:-1:-1;;;38783:17:0;;;;;;;;;;;43517:86;26573:13;:11;:13::i;:::-;43576:12:::1;:19:::0;;-1:-1:-1;;43576:19:0::1;43591:4;43576:19;::::0;;43517:86::o;44468:190::-;44528:13;44590:1;44567:12;44561:26;;;;;:::i;:::-;;;:30;:89;;;;;;;;;;;;;;;;;44608:12;44622:13;:2;:11;:13::i;:::-;44594:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44554:96;44468:190;-1:-1:-1;;44468:190:0:o;41968:26::-;;;;;;;:::i;44354:106::-;26573:13;:11;:13::i;:::-;44428:12:::1;:24;44443:9:::0;44428:12;:24:::1;:::i;:::-;;44354:106:::0;:::o;43611:86::-;26573:13;:11;:13::i;:::-;43669:12:::1;:20:::0;;-1:-1:-1;;43669:20:0::1;::::0;;43611:86::o;29386:181::-;26573:13;:11;:13::i;:::-;29476::::1;:24:::0;;-1:-1:-1;;;;;29476:24:0;::::1;-1:-1:-1::0;;;;;;29476:24:0;;::::1;::::0;::::1;::::0;;;29541:7:::1;26733::::0;26760:6;-1:-1:-1;;;;;26760:6:0;;26687:87;29541:7:::1;-1:-1:-1::0;;;;;29516:43:0::1;;;;;;;;;;;29386:181:::0;:::o;26852:166::-;26733:7;26760:6;-1:-1:-1;;;;;26760:6:0;21850:10;26912:23;26908:103;;26959:40;;-1:-1:-1;;;26959:40:0;;21850:10;26959:40;;;1001:51:1;974:18;;26959:40:0;855:203:1;40503:92:0;40546:7;40573:14;40579:8;40573:2;:14;:::i;:::-;40566:21;;40503:92;:::o;43705:641::-;43849:4;23595:19;:17;:19::i;:::-;43868:12:::1;::::0;::::1;;43865:87;;;43913:7;;43904:6;:16;43896:44;;;::::0;-1:-1:-1;;;43896:44:0;;12908:2:1;43896:44:0::1;::::0;::::1;12890:21:1::0;12947:2;12927:18;;;12920:30;-1:-1:-1;;;12966:18:1;;;12959:45;13021:18;;43896:44:0::1;12706:339:1::0;43896:44:0::1;-1:-1:-1::0;;;;;43966:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;::::1;;43962:163;;-1:-1:-1::0;;;;;43997:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;:29;;44020:6;;43997:19;:29:::1;::::0;44020:6;;43997:29:::1;:::i;:::-;::::0;;;-1:-1:-1;;44072:9:0::1;::::0;-1:-1:-1;;;;;44049:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;;:32:::1;;44041:72;;;::::0;-1:-1:-1;;;44041:72:0;;13382:2:1;44041:72:0::1;::::0;::::1;13364:21:1::0;13421:2;13401:18;;;13394:30;13460:29;13440:18;;;13433:57;13507:18;;44041:72:0::1;13180:351:1::0;44041:72:0::1;-1:-1:-1::0;;;;;44139:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;;::::1;;44135:153;;-1:-1:-1::0;;;;;44168:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;:26;;44188:6;;44168:16;:26:::1;::::0;44188:6;;44168:26:::1;:::i;:::-;::::0;;;-1:-1:-1;;44237:8:0::1;::::0;-1:-1:-1;;;;;44217:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;;:28:::1;;44209:67;;;::::0;-1:-1:-1;;;44209:67:0;;13738:2:1;44209:67:0::1;::::0;::::1;13720:21:1::0;13777:2;13757:18;;;13750:30;13816:28;13796:18;;;13789:56;13862:18;;44209:67:0::1;13536:350:1::0;44209:67:0::1;44305:33;44321:4;44327:2;44331:6;44305:15;:33::i;:::-;44298:40:::0;43705:641;-1:-1:-1;;;;43705:641:0:o;29757:156::-;29847:13;29840:20;;-1:-1:-1;;;;;;29840:20:0;;;29871:34;29896:8;29871:24;:34::i;18533:722::-;18589:13;18640:14;18657:21;18672:5;18657:14;:21::i;:::-;18681:1;18657:25;18640:42;;18697:20;18731:6;18720:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18720:18:0;-1:-1:-1;18697:41:0;-1:-1:-1;18862:28:0;;;18878:2;18862:28;18919:290;-1:-1:-1;;18951:5:0;-1:-1:-1;;;19088:2:0;19077:14;;19072:32;18951:5;19059:46;19151:2;19142:11;;;-1:-1:-1;19172:21:0;18919:290;19172:21;-1:-1:-1;19230:6:0;18533:722;-1:-1:-1;;;18533:722:0:o;24149:132::-;24061:7;;;;24211:63;;;24247:15;;-1:-1:-1;;;24247:15:0;;;;;;;;;;;39267:1197;39388:4;39405:12;39420:10;:8;:10::i;:::-;-1:-1:-1;;;;;39471:15:0;;;39441:27;39471:15;;;:9;:15;;;;;;;39529:13;;;;;;;;39405:25;;-1:-1:-1;39471:15:0;39558:33;39481:4;39539:2;39584:6;39558:15;:33::i;:::-;39555:76;;;39615:4;39608:11;;;;;;;39555:76;-1:-1:-1;;;;;39651:15:0;;;;;;:9;:15;;;;;:25;;39670:6;;39651:15;:25;;39670:6;;39651:25;:::i;:::-;;;;-1:-1:-1;;;;;;;39714:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;39822:15;;;;;:9;:15;;;;;;39817:251;;-1:-1:-1;;;;;39928:15:0;;39854:22;39928:15;;;:9;:15;;;;;;:22;;39946:4;;39928:22;:::i;:::-;39880:26;39902:4;39880:19;:26;:::i;:::-;39879:72;;;;:::i;:::-;39854:97;;39971:9;39966:91;39990:14;39986:1;:18;39966:91;;;40030:11;40036:4;40030:5;:11::i;:::-;40006:3;;;;:::i;:::-;;;;39966:91;;;;39839:229;39817:251;-1:-1:-1;;;;;40144:13:0;;;;;;:9;:13;;;;;;;;40139:247;;40174:22;40242:28;40266:4;40242:21;:28;:::i;:::-;-1:-1:-1;;;;;40200:13:0;;;;;;:9;:13;;;;;;:20;;40216:4;;40200:20;:::i;:::-;40199:72;;;;:::i;:::-;40174:97;;40291:9;40286:89;40310:14;40306:1;:18;40286:89;;;40350:9;40356:2;40350:5;:9::i;:::-;40326:3;;;;:::i;:::-;;;;40286:89;;;;40159:227;40139:247;40423:2;-1:-1:-1;;;;;40403:31:0;40417:4;-1:-1:-1;;;;;40403:31:0;;40427:6;40403:31;;;;1838:25:1;;1826:2;1811:18;;1692:177;40403:31:0;;;;;;;;-1:-1:-1;40452:4:0;;39267:1197;-1:-1:-1;;;;;;39267:1197:0:o;28000:191::-;28074:16;28093:6;;-1:-1:-1;;;;;28110:17:0;;;-1:-1:-1;;;;;;28110:17:0;;;;;;28143:40;;28093:6;;;;;;;28143:40;;28074:16;28143:40;28063:128;28000:191;:::o;13089:948::-;13142:7;;-1:-1:-1;;;13220:17:0;;13216:106;;-1:-1:-1;;;13258:17:0;;;-1:-1:-1;13304:2:0;13294:12;13216:106;13349:8;13340:5;:17;13336:106;;13387:8;13378:17;;;-1:-1:-1;13424:2:0;13414:12;13336:106;13469:8;13460:5;:17;13456:106;;13507:8;13498:17;;;-1:-1:-1;13544:2:0;13534:12;13456:106;13589:7;13580:5;:16;13576:103;;13626:7;13617:16;;;-1:-1:-1;13662:1:0;13652:11;13576:103;13706:7;13697:5;:16;13693:103;;13743:7;13734:16;;;-1:-1:-1;13779:1:0;13769:11;13693:103;13823:7;13814:5;:16;13810:103;;13860:7;13851:16;;;-1:-1:-1;13896:1:0;13886:11;13810:103;13940:7;13931:5;:16;13927:68;;13978:1;13968:11;14023:6;13089:948;-1:-1:-1;;13089:948:0:o;38827:372::-;38938:5;;38912:4;;-1:-1:-1;;;;;38938:5:0;;;38932:11;;;;38929:240;;38972:7;;-1:-1:-1;;;;;38972:7:0;;;38964:15;;;;38960:198;;-1:-1:-1;;;;;39000:13:0;;;;;;:9;:13;;;;;:23;;39017:6;;39000:13;:23;;39017:6;;39000:23;:::i;:::-;;;;-1:-1:-1;39049:4:0;;-1:-1:-1;39042:11:0;;-1:-1:-1;39042:11:0;38960:198;39102:7;;39094:48;;-1:-1:-1;;;;;39102:7:0;;;;39120:21;39094:48;;;;;39102:7;39094:48;39102:7;39094:48;39120:21;39102:7;39094:48;;;;;;;;;;;;;;;;;;;;;38960:198;-1:-1:-1;39186:5:0;38827:372;;;;;:::o;41085:373::-;-1:-1:-1;;;;;41146:18:0;;41142:73;;41188:15;;-1:-1:-1;;;41188:15:0;;;;;;;;;;;41142:73;-1:-1:-1;;;;;41240:12:0;;41227:10;41240:12;;;:6;:12;;;;;41253:19;;:23;;41275:1;;41253:23;:::i;:::-;41240:37;;;;;;;;:::i;:::-;;;;;;;;;41227:50;;41288:6;:12;41295:4;-1:-1:-1;;;;;41288:12:0;-1:-1:-1;;;;;41288:12:0;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;41288:18:0;;;;;;;;;;;;41324:15;;;:11;:15;;;;;;41317:22;;;41357:8;:12;;;;;41350:19;;-1:-1:-1;;;;;;41350:19:0;;;;;;41387:11;:15;;;;;;41380:22;;;;;;;;41420:30;41336:2;;41288:18;-1:-1:-1;;;;;41420:30:0;;;;;41288:18;;41420:30;41131:327;41085:373;:::o;43394:115::-;23595:19;:17;:19::i;:::-;43486:15:::1;43498:2;-1:-1:-1::0;;;;;40662:16:0;;40658:74;;40702:18;;-1:-1:-1;;;40702:18:0;;;;;;;;;;;40658:74;40769:6;:8;;;;;;;;:6;40837:12;;;:8;:12;;;;;;-1:-1:-1;;;;;40837:12:0;:26;40833:81;;40887:15;;-1:-1:-1;;;40887:15:0;;;;;;;;;;;40833:81;40926:12;;;;:8;:12;;;;;;;;:17;;-1:-1:-1;;;;;;40926:17:0;-1:-1:-1;;;;;40926:17:0;;;;;;;;40954:10;;;:6;:10;;;;;:19;;-1:-1:-1;40954:19:0;;;;;;;;;;;;;;;41002:10;;:17;;:21;;-1:-1:-1;41002:21:0;:::i;:::-;40984:15;;;;:11;:15;;;;;;:39;;;;41041:28;;40996:2;;-1:-1:-1;;;;;41041:28:0;;;;;40984:15;;41041:28;40647:430;40603:474;:::o;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:180::-;729:6;782:2;770:9;761:7;757:23;753:32;750:52;;;798:1;795;788:12;750:52;-1:-1:-1;821:23:1;;670:180;-1:-1:-1;670:180:1:o;1063:173::-;1131:20;;-1:-1:-1;;;;;1180:31:1;;1170:42;;1160:70;;1226:1;1223;1216:12;1241:254;1309:6;1317;1370:2;1358:9;1349:7;1345:23;1341:32;1338:52;;;1386:1;1383;1376:12;1338:52;1409:29;1428:9;1409:29;:::i;:::-;1399:39;1485:2;1470:18;;;;1457:32;;-1:-1:-1;;;1241:254:1:o;1874:248::-;1942:6;1950;2003:2;1991:9;1982:7;1978:23;1974:32;1971:52;;;2019:1;2016;2009:12;1971:52;-1:-1:-1;;2042:23:1;;;2112:2;2097:18;;;2084:32;;-1:-1:-1;1874:248:1:o;2127:328::-;2204:6;2212;2220;2273:2;2261:9;2252:7;2248:23;2244:32;2241:52;;;2289:1;2286;2279:12;2241:52;2312:29;2331:9;2312:29;:::i;:::-;2302:39;;2360:38;2394:2;2383:9;2379:18;2360:38;:::i;:::-;2350:48;;2445:2;2434:9;2430:18;2417:32;2407:42;;2127:328;;;;;:::o;2649:347::-;2714:6;2722;2775:2;2763:9;2754:7;2750:23;2746:32;2743:52;;;2791:1;2788;2781:12;2743:52;2814:29;2833:9;2814:29;:::i;:::-;2804:39;;2893:2;2882:9;2878:18;2865:32;2940:5;2933:13;2926:21;2919:5;2916:32;2906:60;;2962:1;2959;2952:12;2906:60;2985:5;2975:15;;;2649:347;;;;;:::o;3001:186::-;3060:6;3113:2;3101:9;3092:7;3088:23;3084:32;3081:52;;;3129:1;3126;3119:12;3081:52;3152:29;3171:9;3152:29;:::i;3192:808::-;3289:6;3297;3305;3313;3321;3374:3;3362:9;3353:7;3349:23;3345:33;3342:53;;;3391:1;3388;3381:12;3342:53;3414:29;3433:9;3414:29;:::i;:::-;3404:39;;3462:38;3496:2;3485:9;3481:18;3462:38;:::i;:::-;3452:48;;3547:2;3536:9;3532:18;3519:32;3509:42;;3602:2;3591:9;3587:18;3574:32;3625:18;3666:2;3658:6;3655:14;3652:34;;;3682:1;3679;3672:12;3652:34;3720:6;3709:9;3705:22;3695:32;;3765:7;3758:4;3754:2;3750:13;3746:27;3736:55;;3787:1;3784;3777:12;3736:55;3827:2;3814:16;3853:2;3845:6;3842:14;3839:34;;;3869:1;3866;3859:12;3839:34;3914:7;3909:2;3900:6;3896:2;3892:15;3888:24;3885:37;3882:57;;;3935:1;3932;3925:12;3882:57;3192:808;;;;-1:-1:-1;3192:808:1;;-1:-1:-1;3966:2:1;3958:11;;3988:6;3192:808;-1:-1:-1;;;3192:808:1:o;4005:260::-;4073:6;4081;4134:2;4122:9;4113:7;4109:23;4105:32;4102:52;;;4150:1;4147;4140:12;4102:52;4173:29;4192:9;4173:29;:::i;:::-;4163:39;;4221:38;4255:2;4244:9;4240:18;4221:38;:::i;:::-;4211:48;;4005:260;;;;;:::o;4270:127::-;4331:10;4326:3;4322:20;4319:1;4312:31;4362:4;4359:1;4352:15;4386:4;4383:1;4376:15;4402:922;4471:6;4524:2;4512:9;4503:7;4499:23;4495:32;4492:52;;;4540:1;4537;4530:12;4492:52;4580:9;4567:23;4609:18;4650:2;4642:6;4639:14;4636:34;;;4666:1;4663;4656:12;4636:34;4704:6;4693:9;4689:22;4679:32;;4749:7;4742:4;4738:2;4734:13;4730:27;4720:55;;4771:1;4768;4761:12;4720:55;4807:2;4794:16;4829:2;4825;4822:10;4819:36;;;4835:18;;:::i;:::-;4910:2;4904:9;4878:2;4964:13;;-1:-1:-1;;4960:22:1;;;4984:2;4956:31;4952:40;4940:53;;;5008:18;;;5028:22;;;5005:46;5002:72;;;5054:18;;:::i;:::-;5094:10;5090:2;5083:22;5129:2;5121:6;5114:18;5169:7;5164:2;5159;5155;5151:11;5147:20;5144:33;5141:53;;;5190:1;5187;5180:12;5141:53;5246:2;5241;5237;5233:11;5228:2;5220:6;5216:15;5203:46;5291:1;5269:15;;;5286:2;5265:24;5258:35;;;;-1:-1:-1;5273:6:1;4402:922;-1:-1:-1;;;;;4402:922:1:o;5329:380::-;5408:1;5404:12;;;;5451;;;5472:61;;5526:4;5518:6;5514:17;5504:27;;5472:61;5579:2;5571:6;5568:14;5548:18;5545:38;5542:161;;5625:10;5620:3;5616:20;5613:1;5606:31;5660:4;5657:1;5650:15;5688:4;5685:1;5678:15;5542:161;;5329:380;;;:::o;5714:127::-;5775:10;5770:3;5766:20;5763:1;5756:31;5806:4;5803:1;5796:15;5830:4;5827:1;5820:15;5846:128;5913:9;;;5934:11;;;5931:37;;;5948:18;;:::i;5979:127::-;6040:10;6035:3;6031:20;6028:1;6021:31;6071:4;6068:1;6061:15;6095:4;6092:1;6085:15;6111:127;6172:10;6167:3;6163:20;6160:1;6153:31;6203:4;6200:1;6193:15;6227:4;6224:1;6217:15;6803:290;6872:6;6925:2;6913:9;6904:7;6900:23;6896:32;6893:52;;;6941:1;6938;6931:12;6893:52;6967:16;;-1:-1:-1;;;;;;7012:32:1;;7002:43;;6992:71;;7059:1;7056;7049:12;7098:168;7171:9;;;7202;;7219:15;;;7213:22;;7199:37;7189:71;;7240:18;;:::i;7271:662::-;-1:-1:-1;;;;;7550:15:1;;;7532:34;;7602:15;;7597:2;7582:18;;7575:43;7649:2;7634:18;;7627:34;;;7697:3;7692:2;7677:18;;7670:31;;;7717:19;;7710:35;;;7475:4;7738:6;7788;7512:3;7767:19;;7754:49;7853:1;7847:3;7838:6;7827:9;7823:22;7819:32;7812:43;7923:3;7916:2;7912:7;7907:2;7899:6;7895:15;7891:29;7880:9;7876:45;7872:55;7864:63;;7271:662;;;;;;;;:::o;8064:1176::-;8330:3;8359:1;8392:6;8386:13;8422:36;8448:9;8422:36;:::i;:::-;8477:1;8494:18;;;8521:133;;;;8668:1;8663:356;;;;8487:532;;8521:133;-1:-1:-1;;8554:24:1;;8542:37;;8627:14;;8620:22;8608:35;;8599:45;;;-1:-1:-1;8521:133:1;;8663:356;8694:6;8691:1;8684:17;8724:4;8769:2;8766:1;8756:16;8794:1;8808:165;8822:6;8819:1;8816:13;8808:165;;;8900:14;;8887:11;;;8880:35;8943:16;;;;8837:10;;8808:165;;;8812:3;;;9002:6;8997:3;8993:16;8986:23;;8487:532;;;;;9050:6;9044:13;9066:68;9125:8;9120:3;9113:4;9105:6;9101:17;9066:68;:::i;:::-;-1:-1:-1;;;9156:18:1;;9183:22;;;9232:1;9221:13;;8064:1176;-1:-1:-1;;;;8064:1176:1:o;9245:545::-;9347:2;9342:3;9339:11;9336:448;;;9383:1;9408:5;9404:2;9397:17;9453:4;9449:2;9439:19;9523:2;9511:10;9507:19;9504:1;9500:27;9494:4;9490:38;9559:4;9547:10;9544:20;9541:47;;;-1:-1:-1;9582:4:1;9541:47;9637:2;9632:3;9628:12;9625:1;9621:20;9615:4;9611:31;9601:41;;9692:82;9710:2;9703:5;9700:13;9692:82;;;9755:17;;;9736:1;9725:13;9692:82;;;9696:3;;;9245:545;;;:::o;9966:1352::-;10092:3;10086:10;10119:18;10111:6;10108:30;10105:56;;;10141:18;;:::i;:::-;10170:97;10260:6;10220:38;10252:4;10246:11;10220:38;:::i;:::-;10214:4;10170:97;:::i;:::-;10322:4;;10386:2;10375:14;;10403:1;10398:663;;;;11105:1;11122:6;11119:89;;;-1:-1:-1;11174:19:1;;;11168:26;11119:89;-1:-1:-1;;9923:1:1;9919:11;;;9915:24;9911:29;9901:40;9947:1;9943:11;;;9898:57;11221:81;;10368:944;;10398:663;8011:1;8004:14;;;8048:4;8035:18;;-1:-1:-1;;10434:20:1;;;10552:236;10566:7;10563:1;10560:14;10552:236;;;10655:19;;;10649:26;10634:42;;10747:27;;;;10715:1;10703:14;;;;10582:19;;10552:236;;;10556:3;10816:6;10807:7;10804:19;10801:201;;;10877:19;;;10871:26;-1:-1:-1;;10960:1:1;10956:14;;;10972:3;10952:24;10948:37;10944:42;10929:58;10914:74;;10801:201;-1:-1:-1;;;;;11048:1:1;11032:14;;;11028:22;11015:36;;-1:-1:-1;9966:1352:1:o;11323:422::-;11412:1;11455:5;11412:1;11469:270;11490:7;11480:8;11477:21;11469:270;;;11549:4;11545:1;11541:6;11537:17;11531:4;11528:27;11525:53;;;11558:18;;:::i;:::-;11608:7;11598:8;11594:22;11591:55;;;11628:16;;;;11591:55;11707:22;;;;11667:15;;;;11469:270;;;11473:3;11323:422;;;;;:::o;11750:806::-;11799:5;11829:8;11819:80;;-1:-1:-1;11870:1:1;11884:5;;11819:80;11918:4;11908:76;;-1:-1:-1;11955:1:1;11969:5;;11908:76;12000:4;12018:1;12013:59;;;;12086:1;12081:130;;;;11993:218;;12013:59;12043:1;12034:10;;12057:5;;;12081:130;12118:3;12108:8;12105:17;12102:43;;;12125:18;;:::i;:::-;-1:-1:-1;;12181:1:1;12167:16;;12196:5;;11993:218;;12295:2;12285:8;12282:16;12276:3;12270:4;12267:13;12263:36;12257:2;12247:8;12244:16;12239:2;12233:4;12230:12;12226:35;12223:77;12220:159;;;-1:-1:-1;12332:19:1;;;12364:5;;12220:159;12411:34;12436:8;12430:4;12411:34;:::i;:::-;12481:6;12477:1;12473:6;12469:19;12460:7;12457:32;12454:58;;;12492:18;;:::i;:::-;12530:20;;11750:806;-1:-1:-1;;;11750:806:1:o;12561:140::-;12619:5;12648:47;12689:4;12679:8;12675:19;12669:4;12648:47;:::i;13050:125::-;13115:9;;;13136:10;;;13133:36;;;13149:18;;:::i;14023:217::-;14063:1;14089;14079:132;;14133:10;14128:3;14124:20;14121:1;14114:31;14168:4;14165:1;14158:15;14196:4;14193:1;14186:15;14079:132;-1:-1:-1;14225:9:1;;14023:217::o;14245:135::-;14284:3;14305:17;;;14302:43;;14325:18;;:::i;:::-;-1:-1:-1;14372:1:1;14361:13;;14245:135::o

Swarm Source

ipfs://3d7433f61286842914a7c12db9c8f76dfd30607c2b8a0e837405f521e6b04505
Loading...
Loading
Loading...
Loading
[ 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.