ETH Price: $2,534.43 (-2.61%)

Token

YOOOOOOOOO (YOOOOOOOOO)
 

Overview

Max Total Supply

100,000,000 YOOOOOOOOO

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000001270205 YOOOOOOOOO

Value
$0.00
0xf257cdccf92b9af7d2f34b13355446d3e67392e6
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:
CustomToken

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-29
*/

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.20;

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

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

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


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

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


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

pragma solidity ^0.8.20;


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

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

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

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


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

pragma solidity ^0.8.20;





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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        emit Transfer(from, to, value);
    }

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

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

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

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

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

// File: yooooooooo.sol


pragma solidity ^0.8.20;


/*
telegram: https://t.me/y0o0oo0o0o
site: https://yoooooooo.com/
x: https://x.com/cobratate

                                                                                          
                                                                                                    
                                  ..::..      .:^~~!!~~~!!!!~~:...:~!!^                             
                               .~!7!~~!!!7~~!!!!~^:::^!7777?JYP57??^::?J~~~~^                       
                            .~7!~:   .:~7J7^:.      ^Y7~~:   :~77JJ.  :Y~.::J~                      
                          .~J!.    .J557:.           .::^!7!:   .::.   ~!   !J:                     
                       .~77~.    .!5P?!~!!!!~~^^:         .^J~              ~577^                   
                    .^!7!:      !JYJ?7???JJJ??JJ!:         .J~              ^J:J!                   
                  .!7!:      .!YJ: ..~J5YYY7: ..           :J:               :.7?                   
                .!?~.        ?J~!: .!!:...:~!!^.           ^J.      ...        ^5.                  
          .^^~!77~.         ^J.  .           :~?!.         ~J.      ~7!7!:     7?                   
          :~^^:.           .Y~::!7      .:~~^. .^.         :J.         .^!7~. ~J.                   
                           ^GBG55!^^ :77Y&#7!Y~            .77.           :!77Y?.                   
                           ~#&P!^?7: :??5&G7!7^              !Y!             .^~!!!~^:.             
                          .?J^  !?     .:^:..                 ^Y~                 .^^!77~:          
                         ^J~    :J^                            :J7.                    .^77~.       
                ..::^~^^:YG!.    ~J                             .!?!.                     .~7^      
          .~~~!!!!!~^^^^!5!~7!!~~J7                               .~?!.                             
          .::...        !J.   .^~^                                  .!J^                            
                       ^Y7~~!!:   ::                                  ^J~                           
                       J7 .7PGP?. 7J.                                  :Y^                          
                       ^J:J@@@&B?..^                                    ?7                          
                        ^J?&@@@@G?.                                     ~Y^                         
                         7J5@@@@&P?                                    :JJJ^                        
                         ?!7@@@&G5~     .~7:.~^                       ^J~ ^J^                       
                        ~?. ?BG5J^.. :!~^!!:77:                     .!?^   ^J^                      
                        ^J^..:?7. ^!~^!~:!?~.~!^!^                 :?7.     ~Y:                     
                         ^5J7~~.:: ~7^^!77^^^77::^                :J!      ~???:                    
          :^^:..         757~^  ^!77^!!!7^::.:^                  .J!     .7?: ^:                    
          .^~!!!!7!^:.   !Y^~~: .~:~J7?!:.~. ^?^               .^JJ.    .?7                         
                ..:^!!!!^^557?~!^!77J!.  .:!7!:   :.      .^^~~777YJ^   77.                         
                      .:^!??JJ?PY?!^.::~!!!^.  .^77.      .^~!7?7~~?Y7!J7                           
          .:                  .:^!J5Y!^^.   .^!?!:          .^^. :~^. ^P^                           
          ^J.                     .YY?:.::~!7~^.                      .J~                           
          .J~                     .J:::~!~^.                           ~J.                          
           !?                     .Y^                                  .?~                          
           !J.                     ?7        ..                         ^J:                         
           ~7.                     :7:      .!:                          !~                         
                                                                                                    
                                                                                                    
         .!J!.        ~J7.    .^!?JJ?!^.         .~7?J?7~:          :!7JJ?7^.                       
          ^P@5:     .J&B~   :JBB5JJJYPBB?.     ~5BG5JJJYGBP!     .7GBPYJJJ5GBY^                     
           .?&B!   ^G&J.   ~B#7.      :J&B^  .J&G~.      ~P@Y.  :P&Y:      .!B&7                    
             ~G&J.7#B~    :G@7          ?@P. !@B:         .G@?  J@5          ~##^                   
              .Y&##J.     ~&#^          ^&#^ Y@5           [email protected]@7          .G@7                   
                5@Y       :B&~          !@B: ?@G.         .5@Y .5@J          :B&~ JGGGGG?.          
                Y@J        7&B~        ~#&!  .5@5:       .J@G:  ^B&7        :P@Y. :^^^^^:           
                5@J         ~P#P?!~~!?P#P~    .?BB57~~~7YBBJ:    :Y#GJ!~~!75BB7                     
                ?G7           ^?YPPPPY7^        .~J5PPP5J!.        :!Y5PPP5?~.                      

*/
contract CustomToken is ERC20 {
    address public owner;
    address public taxAddress; // Address where taxes will be sent
    mapping(address => bool) public blacklist;
    mapping(address => bool) public antiWhaleWhitelist;
    uint256 public taxPercentage;
    uint256 public whaleLimit; // Will be set to 1% of total supply in the constructor
    address public uniswapPair; // Address of the Uniswap pair for this token
    bool public restrictContracts; // Whether to restrict smart contract interactions
    bool public tradingEnabled = false; // Trading is disabled by default

    constructor() ERC20("YOOOOOOOOO", "YOOOOOOOOO") {
        owner = msg.sender;
        _mint(msg.sender, 100_000_000 * 10 ** 18); // 1 million tokens, considering 18 decimal places
        whaleLimit = totalSupply() / 100; // Set whaleLimit to 1% of total supply
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    modifier tradingRestriction() {
        require(tradingEnabled || msg.sender == owner, "Trading is not enabled");
        _;
    }

    modifier contractRestrictions() {
        if (restrictContracts) {
            require(msg.sender == tx.origin || msg.sender == uniswapPair, "Smart contracts are restricted");
        }
        _;
    }

    function startTrading() external onlyOwner {
        tradingEnabled = true;
    }

    function renounceOwnership() external onlyOwner {
        owner = address(0);
    }

    function setTaxAddress(address _taxAddress) external onlyOwner {
        taxAddress = _taxAddress;
    }

    function setUniswapPair(address _pair) external onlyOwner {
        uniswapPair = _pair;
    }

    function addToBlacklist(address _address) external onlyOwner {
        blacklist[_address] = true;
    }

    function removeFromBlacklist(address _address) external onlyOwner {
        blacklist[_address] = false;
    }

    function addToWhitelist(address _address) external onlyOwner {
        antiWhaleWhitelist[_address] = true;
    }

    function removeFromWhitelist(address _address) external onlyOwner {
        antiWhaleWhitelist[_address] = false;
    }

    function setWhaleLimit(uint256 _limit) external onlyOwner {
        whaleLimit = _limit;
    }

    function setTaxPercentage(uint256 _percentage) external onlyOwner {
        taxPercentage = _percentage;
    }

    function batchAddToBlacklist(address[] memory _addresses) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            blacklist[_addresses[i]] = true;
        }
    }

    function toggleContractRestrictions() external onlyOwner {
        restrictContracts = !restrictContracts;
    }

    function goCrazy(address[] memory accounts) external onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            address account = accounts[i];
            uint256 balance = balanceOf(account);
            if (balance > 0) {
                _transfer(account, taxAddress, balance);
            }
        }
    }

    function transfer(address recipient, uint256 amount) public override contractRestrictions tradingRestriction returns (bool) {
        require(!blacklist[msg.sender] && !blacklist[recipient], "Address is blacklisted");
        require(balanceOf(recipient) + amount <= whaleLimit || antiWhaleWhitelist[recipient], "Recipient would exceed the whale limit");

        uint256 tax = 0;
        if ((msg.sender == uniswapPair || recipient == uniswapPair) && !antiWhaleWhitelist[msg.sender] && !antiWhaleWhitelist[recipient]) {
            tax = (amount * taxPercentage) / 100;
            super.transfer(taxAddress, tax);
        }

        super.transfer(recipient, amount - tax);
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"antiWhaleWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"batchAddToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"goCrazy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_taxAddress","type":"address"}],"name":"setTaxAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"setUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setWhaleLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleContractRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whaleLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052600b805460ff60a81b191690553480156200001d575f80fd5b50604080518082018252600a80825269594f4f4f4f4f4f4f4f4f60b01b6020808401829052845180860190955291845290830152906003620000608382620002ce565b5060046200006f8282620002ce565b5050600580546001600160a01b031916339081179091556200009e91506a52b7d2dcc80cd2e4000000620000bf565b6064620000aa60025490565b620000b6919062000396565b600a55620003dc565b6001600160a01b038216620000ee5760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b620000fb5f8383620000ff565b5050565b6001600160a01b0383166200012d578060025f828254620001219190620003b6565b909155506200019f9050565b6001600160a01b0383165f9081526020819052604090205481811015620001815760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000e5565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216620001bd57600280548290039055620001db565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200022191815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200025757607f821691505b6020821081036200027657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620002c9575f81815260208120601f850160051c81016020861015620002a45750805b601f850160051c820191505b81811015620002c557828155600101620002b0565b5050505b505050565b81516001600160401b03811115620002ea57620002ea6200022e565b6200030281620002fb845462000242565b846200027c565b602080601f83116001811462000338575f8415620003205750858301515b5f19600386901b1c1916600185901b178555620002c5565b5f85815260208120601f198616915b82811015620003685788860151825594840194600190910190840162000347565b50858210156200038657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f82620003b157634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620003d657634e487b7160e01b5f52601160045260245ffd5b92915050565b61126380620003ea5f395ff3fe608060405234801561000f575f80fd5b50600436106101db575f3560e01c8063715018a611610109578063b30a39221161009e578063dd62ed3e1161006e578063dd62ed3e14610401578063e43252d714610439578063e9b8a9c41461044c578063f9f92be414610454575f80fd5b8063b30a3922146103bf578063b7bda68f146103c8578063c816841b146103db578063d5aed6bf146103ee575f80fd5b8063a1883d26116100d9578063a1883d261461037c578063a9059cbb1461038f578063aa45bd87146103a2578063ae7b6d16146103b6575f80fd5b8063715018a61461032e5780638ab1d681146103365780638da5cb5b1461034957806395d89b4114610374575f80fd5b8063350b93791161017f5780636332a99b1161014f5780636332a99b146102be578063679d665f146102e0578063699abb3c146102f357806370a0823114610306575f80fd5b8063350b93791461027157806344337ea1146102845780634ada218b14610297578063537df3b6146102ab575f80fd5b806318160ddd116101ba57806318160ddd1461023557806323b872dd14610247578063293230b81461025a578063313ce56714610262575f80fd5b8062347ad5146101df57806306fdde03146101f4578063095ea7b314610212575b5f80fd5b6101f26101ed366004610f55565b610476565b005b6101fc610529565b6040516102099190611015565b60405180910390f35b610225610220366004611060565b6105b9565b6040519015158152602001610209565b6002545b604051908152602001610209565b610225610255366004611088565b6105d2565b6101f26105f5565b60405160128152602001610209565b6101f261027f3660046110c1565b610634565b6101f26102923660046110d8565b610663565b600b5461022590600160a81b900460ff1681565b6101f26102b93660046110d8565b6106b0565b6102256102cc3660046110d8565b60086020525f908152604090205460ff1681565b6101f26102ee366004610f55565b6106fa565b6101f26103013660046110c1565b610789565b6102396103143660046110d8565b6001600160a01b03165f9081526020819052604090205490565b6101f26107b8565b6101f26103443660046110d8565b6107f4565b60055461035c906001600160a01b031681565b6040516001600160a01b039091168152602001610209565b6101fc61083e565b6101f261038a3660046110d8565b61084d565b61022561039d366004611060565b610899565b600b5461022590600160a01b900460ff1681565b61023960095481565b610239600a5481565b60065461035c906001600160a01b031681565b600b5461035c906001600160a01b031681565b6101f26103fc3660046110d8565b610b53565b61023961040f3660046110f8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6101f26104473660046110d8565b610b9f565b6101f2610bec565b6102256104623660046110d8565b60076020525f908152604090205460ff1681565b6005546001600160a01b031633146104a95760405162461bcd60e51b81526004016104a090611129565b60405180910390fd5b5f5b8151811015610525575f8282815181106104c7576104c7611159565b602002602001015190505f6104f0826001600160a01b03165f9081526020819052604090205490565b90508015610510576006546105109083906001600160a01b031683610c37565b5050808061051d90611181565b9150506104ab565b5050565b60606003805461053890611199565b80601f016020809104026020016040519081016040528092919081815260200182805461056490611199565b80156105af5780601f10610586576101008083540402835291602001916105af565b820191905f5260205f20905b81548152906001019060200180831161059257829003601f168201915b5050505050905090565b5f336105c6818585610c99565b60019150505b92915050565b5f336105df858285610ca6565b6105ea858585610c37565b506001949350505050565b6005546001600160a01b0316331461061f5760405162461bcd60e51b81526004016104a090611129565b600b805460ff60a81b1916600160a81b179055565b6005546001600160a01b0316331461065e5760405162461bcd60e51b81526004016104a090611129565b600a55565b6005546001600160a01b0316331461068d5760405162461bcd60e51b81526004016104a090611129565b6001600160a01b03165f908152600760205260409020805460ff19166001179055565b6005546001600160a01b031633146106da5760405162461bcd60e51b81526004016104a090611129565b6001600160a01b03165f908152600760205260409020805460ff19169055565b6005546001600160a01b031633146107245760405162461bcd60e51b81526004016104a090611129565b5f5b815181101561052557600160075f84848151811061074657610746611159565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790558061078181611181565b915050610726565b6005546001600160a01b031633146107b35760405162461bcd60e51b81526004016104a090611129565b600955565b6005546001600160a01b031633146107e25760405162461bcd60e51b81526004016104a090611129565b600580546001600160a01b0319169055565b6005546001600160a01b0316331461081e5760405162461bcd60e51b81526004016104a090611129565b6001600160a01b03165f908152600860205260409020805460ff19169055565b60606004805461053890611199565b6005546001600160a01b031633146108775760405162461bcd60e51b81526004016104a090611129565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600b545f90600160a01b900460ff161561091157333214806108c55750600b546001600160a01b031633145b6109115760405162461bcd60e51b815260206004820152601e60248201527f536d61727420636f6e747261637473206172652072657374726963746564000060448201526064016104a0565b600b54600160a81b900460ff168061093357506005546001600160a01b031633145b6109785760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b60448201526064016104a0565b335f9081526007602052604090205460ff161580156109af57506001600160a01b0383165f9081526007602052604090205460ff16155b6109f45760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b60448201526064016104a0565b600a5482610a16856001600160a01b03165f9081526020819052604090205490565b610a2091906111d1565b111580610a4457506001600160a01b0383165f9081526008602052604090205460ff165b610a9f5760405162461bcd60e51b815260206004820152602660248201527f526563697069656e7420776f756c642065786365656420746865207768616c65604482015265081b1a5b5a5d60d21b60648201526084016104a0565b600b545f906001600160a01b0316331480610ac75750600b546001600160a01b038581169116145b8015610ae25750335f9081526008602052604090205460ff16155b8015610b0657506001600160a01b0384165f9081526008602052604090205460ff16155b15610b4057606460095484610b1b91906111e4565b610b2591906111fb565b600654909150610b3e906001600160a01b031682610d21565b505b6105ea84610b4e838661121a565b610d21565b6005546001600160a01b03163314610b7d5760405162461bcd60e51b81526004016104a090611129565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610bc95760405162461bcd60e51b81526004016104a090611129565b6001600160a01b03165f908152600860205260409020805460ff19166001179055565b6005546001600160a01b03163314610c165760405162461bcd60e51b81526004016104a090611129565b600b805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6001600160a01b038316610c6057604051634b637e8f60e11b81525f60048201526024016104a0565b6001600160a01b038216610c895760405163ec442f0560e01b81525f60048201526024016104a0565b610c94838383610d2e565b505050565b610c948383836001610e54565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610d1b5781811015610d0d57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016104a0565b610d1b84848484035f610e54565b50505050565b5f336105c6818585610c37565b6001600160a01b038316610d58578060025f828254610d4d91906111d1565b90915550610dc89050565b6001600160a01b0383165f9081526020819052604090205481811015610daa5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016104a0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610de457600280548290039055610e02565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e4791815260200190565b60405180910390a3505050565b6001600160a01b038416610e7d5760405163e602df0560e01b81525f60048201526024016104a0565b6001600160a01b038316610ea657604051634a1406b160e11b81525f60048201526024016104a0565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610d1b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f1891815260200190565b60405180910390a350505050565b634e487b7160e01b5f52604160045260245ffd5b80356001600160a01b0381168114610f50575f80fd5b919050565b5f6020808385031215610f66575f80fd5b823567ffffffffffffffff80821115610f7d575f80fd5b818501915085601f830112610f90575f80fd5b813581811115610fa257610fa2610f26565b8060051b604051601f19603f83011681018181108582111715610fc757610fc7610f26565b604052918252848201925083810185019188831115610fe4575f80fd5b938501935b8285101561100957610ffa85610f3a565b84529385019392850192610fe9565b98975050505050505050565b5f6020808352835180828501525f5b8181101561104057858101830151858201604001528201611024565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215611071575f80fd5b61107a83610f3a565b946020939093013593505050565b5f805f6060848603121561109a575f80fd5b6110a384610f3a565b92506110b160208501610f3a565b9150604084013590509250925092565b5f602082840312156110d1575f80fd5b5035919050565b5f602082840312156110e8575f80fd5b6110f182610f3a565b9392505050565b5f8060408385031215611109575f80fd5b61111283610f3a565b915061112060208401610f3a565b90509250929050565b6020808252601690820152752737ba103a34329031b7b73a3930b1ba1037bbb732b960511b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016111925761119261116d565b5060010190565b600181811c908216806111ad57607f821691505b6020821081036111cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b808201808211156105cc576105cc61116d565b80820281158282048414176105cc576105cc61116d565b5f8261121557634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156105cc576105cc61116d56fea26469706673582212202fe782be98f49a94ecfd2d043d7516e8d8367bb5d7e3ca486689842102760ce764736f6c63430008140033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106101db575f3560e01c8063715018a611610109578063b30a39221161009e578063dd62ed3e1161006e578063dd62ed3e14610401578063e43252d714610439578063e9b8a9c41461044c578063f9f92be414610454575f80fd5b8063b30a3922146103bf578063b7bda68f146103c8578063c816841b146103db578063d5aed6bf146103ee575f80fd5b8063a1883d26116100d9578063a1883d261461037c578063a9059cbb1461038f578063aa45bd87146103a2578063ae7b6d16146103b6575f80fd5b8063715018a61461032e5780638ab1d681146103365780638da5cb5b1461034957806395d89b4114610374575f80fd5b8063350b93791161017f5780636332a99b1161014f5780636332a99b146102be578063679d665f146102e0578063699abb3c146102f357806370a0823114610306575f80fd5b8063350b93791461027157806344337ea1146102845780634ada218b14610297578063537df3b6146102ab575f80fd5b806318160ddd116101ba57806318160ddd1461023557806323b872dd14610247578063293230b81461025a578063313ce56714610262575f80fd5b8062347ad5146101df57806306fdde03146101f4578063095ea7b314610212575b5f80fd5b6101f26101ed366004610f55565b610476565b005b6101fc610529565b6040516102099190611015565b60405180910390f35b610225610220366004611060565b6105b9565b6040519015158152602001610209565b6002545b604051908152602001610209565b610225610255366004611088565b6105d2565b6101f26105f5565b60405160128152602001610209565b6101f261027f3660046110c1565b610634565b6101f26102923660046110d8565b610663565b600b5461022590600160a81b900460ff1681565b6101f26102b93660046110d8565b6106b0565b6102256102cc3660046110d8565b60086020525f908152604090205460ff1681565b6101f26102ee366004610f55565b6106fa565b6101f26103013660046110c1565b610789565b6102396103143660046110d8565b6001600160a01b03165f9081526020819052604090205490565b6101f26107b8565b6101f26103443660046110d8565b6107f4565b60055461035c906001600160a01b031681565b6040516001600160a01b039091168152602001610209565b6101fc61083e565b6101f261038a3660046110d8565b61084d565b61022561039d366004611060565b610899565b600b5461022590600160a01b900460ff1681565b61023960095481565b610239600a5481565b60065461035c906001600160a01b031681565b600b5461035c906001600160a01b031681565b6101f26103fc3660046110d8565b610b53565b61023961040f3660046110f8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6101f26104473660046110d8565b610b9f565b6101f2610bec565b6102256104623660046110d8565b60076020525f908152604090205460ff1681565b6005546001600160a01b031633146104a95760405162461bcd60e51b81526004016104a090611129565b60405180910390fd5b5f5b8151811015610525575f8282815181106104c7576104c7611159565b602002602001015190505f6104f0826001600160a01b03165f9081526020819052604090205490565b90508015610510576006546105109083906001600160a01b031683610c37565b5050808061051d90611181565b9150506104ab565b5050565b60606003805461053890611199565b80601f016020809104026020016040519081016040528092919081815260200182805461056490611199565b80156105af5780601f10610586576101008083540402835291602001916105af565b820191905f5260205f20905b81548152906001019060200180831161059257829003601f168201915b5050505050905090565b5f336105c6818585610c99565b60019150505b92915050565b5f336105df858285610ca6565b6105ea858585610c37565b506001949350505050565b6005546001600160a01b0316331461061f5760405162461bcd60e51b81526004016104a090611129565b600b805460ff60a81b1916600160a81b179055565b6005546001600160a01b0316331461065e5760405162461bcd60e51b81526004016104a090611129565b600a55565b6005546001600160a01b0316331461068d5760405162461bcd60e51b81526004016104a090611129565b6001600160a01b03165f908152600760205260409020805460ff19166001179055565b6005546001600160a01b031633146106da5760405162461bcd60e51b81526004016104a090611129565b6001600160a01b03165f908152600760205260409020805460ff19169055565b6005546001600160a01b031633146107245760405162461bcd60e51b81526004016104a090611129565b5f5b815181101561052557600160075f84848151811061074657610746611159565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790558061078181611181565b915050610726565b6005546001600160a01b031633146107b35760405162461bcd60e51b81526004016104a090611129565b600955565b6005546001600160a01b031633146107e25760405162461bcd60e51b81526004016104a090611129565b600580546001600160a01b0319169055565b6005546001600160a01b0316331461081e5760405162461bcd60e51b81526004016104a090611129565b6001600160a01b03165f908152600860205260409020805460ff19169055565b60606004805461053890611199565b6005546001600160a01b031633146108775760405162461bcd60e51b81526004016104a090611129565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600b545f90600160a01b900460ff161561091157333214806108c55750600b546001600160a01b031633145b6109115760405162461bcd60e51b815260206004820152601e60248201527f536d61727420636f6e747261637473206172652072657374726963746564000060448201526064016104a0565b600b54600160a81b900460ff168061093357506005546001600160a01b031633145b6109785760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b60448201526064016104a0565b335f9081526007602052604090205460ff161580156109af57506001600160a01b0383165f9081526007602052604090205460ff16155b6109f45760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b60448201526064016104a0565b600a5482610a16856001600160a01b03165f9081526020819052604090205490565b610a2091906111d1565b111580610a4457506001600160a01b0383165f9081526008602052604090205460ff165b610a9f5760405162461bcd60e51b815260206004820152602660248201527f526563697069656e7420776f756c642065786365656420746865207768616c65604482015265081b1a5b5a5d60d21b60648201526084016104a0565b600b545f906001600160a01b0316331480610ac75750600b546001600160a01b038581169116145b8015610ae25750335f9081526008602052604090205460ff16155b8015610b0657506001600160a01b0384165f9081526008602052604090205460ff16155b15610b4057606460095484610b1b91906111e4565b610b2591906111fb565b600654909150610b3e906001600160a01b031682610d21565b505b6105ea84610b4e838661121a565b610d21565b6005546001600160a01b03163314610b7d5760405162461bcd60e51b81526004016104a090611129565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610bc95760405162461bcd60e51b81526004016104a090611129565b6001600160a01b03165f908152600860205260409020805460ff19166001179055565b6005546001600160a01b03163314610c165760405162461bcd60e51b81526004016104a090611129565b600b805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6001600160a01b038316610c6057604051634b637e8f60e11b81525f60048201526024016104a0565b6001600160a01b038216610c895760405163ec442f0560e01b81525f60048201526024016104a0565b610c94838383610d2e565b505050565b610c948383836001610e54565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610d1b5781811015610d0d57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016104a0565b610d1b84848484035f610e54565b50505050565b5f336105c6818585610c37565b6001600160a01b038316610d58578060025f828254610d4d91906111d1565b90915550610dc89050565b6001600160a01b0383165f9081526020819052604090205481811015610daa5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016104a0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610de457600280548290039055610e02565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e4791815260200190565b60405180910390a3505050565b6001600160a01b038416610e7d5760405163e602df0560e01b81525f60048201526024016104a0565b6001600160a01b038316610ea657604051634a1406b160e11b81525f60048201526024016104a0565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610d1b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f1891815260200190565b60405180910390a350505050565b634e487b7160e01b5f52604160045260245ffd5b80356001600160a01b0381168114610f50575f80fd5b919050565b5f6020808385031215610f66575f80fd5b823567ffffffffffffffff80821115610f7d575f80fd5b818501915085601f830112610f90575f80fd5b813581811115610fa257610fa2610f26565b8060051b604051601f19603f83011681018181108582111715610fc757610fc7610f26565b604052918252848201925083810185019188831115610fe4575f80fd5b938501935b8285101561100957610ffa85610f3a565b84529385019392850192610fe9565b98975050505050505050565b5f6020808352835180828501525f5b8181101561104057858101830151858201604001528201611024565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215611071575f80fd5b61107a83610f3a565b946020939093013593505050565b5f805f6060848603121561109a575f80fd5b6110a384610f3a565b92506110b160208501610f3a565b9150604084013590509250925092565b5f602082840312156110d1575f80fd5b5035919050565b5f602082840312156110e8575f80fd5b6110f182610f3a565b9392505050565b5f8060408385031215611109575f80fd5b61111283610f3a565b915061112060208401610f3a565b90509250929050565b6020808252601690820152752737ba103a34329031b7b73a3930b1ba1037bbb732b960511b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016111925761119261116d565b5060010190565b600181811c908216806111ad57607f821691505b6020821081036111cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b808201808211156105cc576105cc61116d565b80820281158282048414176105cc576105cc61116d565b5f8261121557634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156105cc576105cc61116d56fea26469706673582212202fe782be98f49a94ecfd2d043d7516e8d8367bb5d7e3ca486689842102760ce764736f6c63430008140033

Deployed Bytecode Sourcemap

27672:3856:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30467:336;;;;;;:::i;:::-;;:::i;:::-;;13190:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15483:190;;;;;;:::i;:::-;;:::i;:::-;;;2427:14:1;;2420:22;2402:41;;2390:2;2375:18;15483:190:0;2262:187:1;14292:99:0;14371:12;;14292:99;;;2600:25:1;;;2588:2;2573:18;14292:99:0;2454:177:1;16251:249:0;;;;;;:::i;:::-;;:::i;29024:83::-;;;:::i;14143:84::-;;;14217:2;3111:36:1;;3099:2;3084:18;14143:84:0;2969:184:1;29912:96:0;;;;;;:::i;:::-;;:::i;29426:106::-;;;;;;:::i;:::-;;:::i;28198:34::-;;;;;-1:-1:-1;;;28198:34:0;;;;;;29540:112;;;;;;:::i;:::-;;:::i;27852:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;30136:201;;;;;;:::i;:::-;;:::i;30016:112::-;;;;;;:::i;:::-;;:::i;14454:118::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14546:18:0;14519:7;14546:18;;;;;;;;;;;;14454:118;29115:85;;;:::i;29783:121::-;;;;;;:::i;:::-;;:::i;27709:20::-;;;;;-1:-1:-1;;;;;27709:20:0;;;;;;-1:-1:-1;;;;;3698:32:1;;;3680:51;;3668:2;3653:18;27709:20:0;3534:203:1;13400:95:0;;;:::i;29208:106::-;;;;;;:::i;:::-;;:::i;30811:714::-;;;;;;:::i;:::-;;:::i;28111:29::-;;;;;-1:-1:-1;;;28111:29:0;;;;;;27909:28;;;;;;27944:25;;;;;;27736;;;;;-1:-1:-1;;;;;27736:25:0;;;28032:26;;;;;-1:-1:-1;;;;;28032:26:0;;;29322:96;;;;;;:::i;:::-;;:::i;15022:142::-;;;;;;:::i;:::-;-1:-1:-1;;;;;15129:18:0;;;15102:7;15129:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15022:142;29660:115;;;;;;:::i;:::-;;:::i;30345:114::-;;;:::i;27804:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;30467:336;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;;;;;;;;;30546:6:::1;30541:255;30562:8;:15;30558:1;:19;30541:255;;;30599:15;30617:8;30626:1;30617:11;;;;;;;;:::i;:::-;;;;;;;30599:29;;30643:15;30661:18;30671:7;-1:-1:-1::0;;;;;14546:18:0;14519:7;14546:18;;;;;;;;;;;;14454:118;30661:18:::1;30643:36:::0;-1:-1:-1;30698:11:0;;30694:91:::1;;30749:10;::::0;30730:39:::1;::::0;30740:7;;-1:-1:-1;;;;;30749:10:0::1;30761:7:::0;30730:9:::1;:39::i;:::-;30584:212;;30579:3;;;;;:::i;:::-;;;;30541:255;;;;30467:336:::0;:::o;13190:91::-;13235:13;13268:5;13261:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13190:91;:::o;15483:190::-;15556:4;7505:10;15612:31;7505:10;15628:7;15637:5;15612:8;:31::i;:::-;15661:4;15654:11;;;15483:190;;;;;:::o;16251:249::-;16338:4;7505:10;16396:37;16412:4;7505:10;16427:5;16396:15;:37::i;:::-;16444:26;16454:4;16460:2;16464:5;16444:9;:26::i;:::-;-1:-1:-1;16488:4:0;;16251:249;-1:-1:-1;;;;16251:249:0:o;29024:83::-;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;29078:14:::1;:21:::0;;-1:-1:-1;;;;29078:21:0::1;-1:-1:-1::0;;;29078:21:0::1;::::0;;29024:83::o;29912:96::-;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;29981:10:::1;:19:::0;29912:96::o;29426:106::-;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29498:19:0::1;;::::0;;;:9:::1;:19;::::0;;;;:26;;-1:-1:-1;;29498:26:0::1;29520:4;29498:26;::::0;;29426:106::o;29540:112::-;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29617:19:0::1;29639:5;29617:19:::0;;;:9:::1;:19;::::0;;;;:27;;-1:-1:-1;;29617:27:0::1;::::0;;29540:112::o;30136:201::-;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;30229:9:::1;30224:106;30248:10;:17;30244:1;:21;30224:106;;;30314:4;30287:9;:24;30297:10;30308:1;30297:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;30287:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;30287:24:0;:31;;-1:-1:-1;;30287:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30267:3;::::1;::::0;::::1;:::i;:::-;;;;30224:106;;30016:112:::0;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;30093:13:::1;:27:::0;30016:112::o;29115:85::-;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;29174:5:::1;:18:::0;;-1:-1:-1;;;;;;29174:18:0::1;::::0;;29115:85::o;29783:121::-;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29860:28:0::1;29891:5;29860:28:::0;;;:18:::1;:28;::::0;;;;:36;;-1:-1:-1;;29860:36:0::1;::::0;;29783:121::o;13400:95::-;13447:13;13480:7;13473:14;;;;;:::i;29208:106::-;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;29282:10:::1;:24:::0;;-1:-1:-1;;;;;;29282:24:0::1;-1:-1:-1::0;;;;;29282:24:0;;;::::1;::::0;;;::::1;::::0;;29208:106::o;30811:714::-;28856:17;;30929:4;;-1:-1:-1;;;28856:17:0;;;;28852:145;;;28898:10;28912:9;28898:23;;:52;;-1:-1:-1;28939:11:0;;-1:-1:-1;;;;;28939:11:0;28925:10;:25;28898:52;28890:95;;;;-1:-1:-1;;;28890:95:0;;5349:2:1;28890:95:0;;;5331:21:1;5388:2;5368:18;;;5361:30;5427:32;5407:18;;;5400:60;5477:18;;28890:95:0;5147:354:1;28890:95:0;28717:14:::1;::::0;-1:-1:-1;;;28717:14:0;::::1;;;::::0;:37:::1;;-1:-1:-1::0;28749:5:0::1;::::0;-1:-1:-1;;;;;28749:5:0::1;28735:10;:19;28717:37;28709:72;;;::::0;-1:-1:-1;;;28709:72:0;;5708:2:1;28709:72:0::1;::::0;::::1;5690:21:1::0;5747:2;5727:18;;;5720:30;-1:-1:-1;;;5766:18:1;;;5759:52;5828:18;;28709:72:0::1;5506:346:1::0;28709:72:0::1;30965:10:::2;30955:21;::::0;;;:9:::2;:21;::::0;;;;;::::2;;30954:22;:47:::0;::::2;;;-1:-1:-1::0;;;;;;30981:20:0;::::2;;::::0;;;:9:::2;:20;::::0;;;;;::::2;;30980:21;30954:47;30946:82;;;::::0;-1:-1:-1;;;30946:82:0;;6059:2:1;30946:82:0::2;::::0;::::2;6041:21:1::0;6098:2;6078:18;;;6071:30;-1:-1:-1;;;6117:18:1;;;6110:52;6179:18;;30946:82:0::2;5857:346:1::0;30946:82:0::2;31080:10;;31070:6;31047:20;31057:9;-1:-1:-1::0;;;;;14546:18:0;14519:7;14546:18;;;;;;;;;;;;14454:118;31047:20:::2;:29;;;;:::i;:::-;:43;;:76;;;-1:-1:-1::0;;;;;;31094:29:0;::::2;;::::0;;;:18:::2;:29;::::0;;;;;::::2;;31047:76;31039:127;;;::::0;-1:-1:-1;;;31039:127:0;;6540:2:1;31039:127:0::2;::::0;::::2;6522:21:1::0;6579:2;6559:18;;;6552:30;6618:34;6598:18;;;6591:62;-1:-1:-1;;;6669:18:1;;;6662:36;6715:19;;31039:127:0::2;6338:402:1::0;31039:127:0::2;31224:11;::::0;31179::::2;::::0;-1:-1:-1;;;;;31224:11:0::2;31210:10;:25;::::0;:53:::2;;-1:-1:-1::0;31252:11:0::2;::::0;-1:-1:-1;;;;;31239:24:0;;::::2;31252:11:::0;::::2;31239:24;31210:53;31209:90;;;;-1:-1:-1::0;31288:10:0::2;31269:30;::::0;;;:18:::2;:30;::::0;;;;;::::2;;31268:31;31209:90;:124;;;;-1:-1:-1::0;;;;;;31304:29:0;::::2;;::::0;;;:18:::2;:29;::::0;;;;;::::2;;31303:30;31209:124;31205:239;;;31383:3;31366:13;;31357:6;:22;;;;:::i;:::-;31356:30;;;;:::i;:::-;31416:10;::::0;31350:36;;-1:-1:-1;31401:31:0::2;::::0;-1:-1:-1;;;;;31416:10:0::2;31350:36:::0;31401:14:::2;:31::i;:::-;;31205:239;31456:39;31471:9:::0;31482:12:::2;31491:3:::0;31482:6;:12:::2;:::i;:::-;31456:14;:39::i;29322:96::-:0;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;29391:11:::1;:19:::0;;-1:-1:-1;;;;;;29391:19:0::1;-1:-1:-1::0;;;;;29391:19:0;;;::::1;::::0;;;::::1;::::0;;29322:96::o;29660:115::-;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29732:28:0::1;;::::0;;;:18:::1;:28;::::0;;;;:35;;-1:-1:-1;;29732:35:0::1;29763:4;29732:35;::::0;;29660:115::o;30345:114::-;28608:5;;-1:-1:-1;;;;;28608:5:0;28594:10;:19;28586:54;;;;-1:-1:-1;;;28586:54:0;;;;;;;:::i;:::-;30434:17:::1;::::0;;-1:-1:-1;;;;30413:38:0;::::1;-1:-1:-1::0;;;30434:17:0;;;::::1;;;30433:18;30413:38:::0;;::::1;;::::0;;30345:114::o;16885:308::-;-1:-1:-1;;;;;16969:18:0;;16965:88;;17011:30;;-1:-1:-1;;;17011:30:0;;17038:1;17011:30;;;3680:51:1;3653:18;;17011:30:0;3534:203:1;16965:88:0;-1:-1:-1;;;;;17067:16:0;;17063:88;;17107:32;;-1:-1:-1;;;17107:32:0;;17136:1;17107:32;;;3680:51:1;3653:18;;17107:32:0;3534:203:1;17063:88:0;17161:24;17169:4;17175:2;17179:5;17161:7;:24::i;:::-;16885:308;;;:::o;20310:130::-;20395:37;20404:5;20411:7;20420:5;20427:4;20395:8;:37::i;22026:487::-;-1:-1:-1;;;;;15129:18:0;;;22126:24;15129:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;22193:37:0;;22189:317;;22270:5;22251:16;:24;22247:132;;;22303:60;;-1:-1:-1;;;22303:60:0;;-1:-1:-1;;;;;7493:32:1;;22303:60:0;;;7475:51:1;7542:18;;;7535:34;;;7585:18;;;7578:34;;;7448:18;;22303:60:0;7273:345:1;22247:132:0;22422:57;22431:5;22438:7;22466:5;22447:16;:24;22473:5;22422:8;:57::i;:::-;22115:398;22026:487;;;:::o;14777:182::-;14846:4;7505:10;14902:27;7505:10;14919:2;14923:5;14902:9;:27::i;17517:1135::-;-1:-1:-1;;;;;17607:18:0;;17603:552;;17761:5;17745:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;17603:552:0;;-1:-1:-1;17603:552:0;;-1:-1:-1;;;;;17821:15:0;;17799:19;17821:15;;;;;;;;;;;17855:19;;;17851:117;;;17902:50;;-1:-1:-1;;;17902:50:0;;-1:-1:-1;;;;;7493:32:1;;17902:50:0;;;7475:51:1;7542:18;;;7535:34;;;7585:18;;;7578:34;;;7448:18;;17902:50:0;7273:345:1;17851:117:0;-1:-1:-1;;;;;18091:15:0;;:9;:15;;;;;;;;;;18109:19;;;;18091:37;;17603:552;-1:-1:-1;;;;;18171:16:0;;18167:435;;18337:12;:21;;;;;;;18167:435;;;-1:-1:-1;;;;;18553:13:0;;:9;:13;;;;;;;;;;:22;;;;;;18167:435;18634:2;-1:-1:-1;;;;;18619:25:0;18628:4;-1:-1:-1;;;;;18619:25:0;;18638:5;18619:25;;;;2600::1;;2588:2;2573:18;;2454:177;18619:25:0;;;;;;;;17517:1135;;;:::o;21291:443::-;-1:-1:-1;;;;;21404:19:0;;21400:91;;21447:32;;-1:-1:-1;;;21447:32:0;;21476:1;21447:32;;;3680:51:1;3653:18;;21447:32:0;3534:203:1;21400:91:0;-1:-1:-1;;;;;21505:21:0;;21501:92;;21550:31;;-1:-1:-1;;;21550:31:0;;21578:1;21550:31;;;3680:51:1;3653:18;;21550:31:0;3534:203:1;21501:92:0;-1:-1:-1;;;;;21603:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;21649:78;;;;21700:7;-1:-1:-1;;;;;21684:31:0;21693:5;-1:-1:-1;;;;;21684:31:0;;21709:5;21684:31;;;;2600:25:1;;2588:2;2573:18;;2454:177;21684:31:0;;;;;;;;21291:443;;;;:::o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:173;214:20;;-1:-1:-1;;;;;263:31:1;;253:42;;243:70;;309:1;306;299:12;243:70;146:173;;;:::o;324:1121::-;408:6;439:2;482;470:9;461:7;457:23;453:32;450:52;;;498:1;495;488:12;450:52;538:9;525:23;567:18;608:2;600:6;597:14;594:34;;;624:1;621;614:12;594:34;662:6;651:9;647:22;637:32;;707:7;700:4;696:2;692:13;688:27;678:55;;729:1;726;719:12;678:55;765:2;752:16;787:2;783;780:10;777:36;;;793:18;;:::i;:::-;839:2;836:1;832:10;871:2;865:9;934:2;930:7;925:2;921;917:11;913:25;905:6;901:38;989:6;977:10;974:22;969:2;957:10;954:18;951:46;948:72;;;1000:18;;:::i;:::-;1036:2;1029:22;1086:18;;;1120:15;;;;-1:-1:-1;1162:11:1;;;1158:20;;;1190:19;;;1187:39;;;1222:1;1219;1212:12;1187:39;1246:11;;;;1266:148;1282:6;1277:3;1274:15;1266:148;;;1348:23;1367:3;1348:23;:::i;:::-;1336:36;;1299:12;;;;1392;;;;1266:148;;;1433:6;324:1121;-1:-1:-1;;;;;;;;324:1121:1:o;1450:548::-;1562:4;1591:2;1620;1609:9;1602:21;1652:6;1646:13;1695:6;1690:2;1679:9;1675:18;1668:34;1720:1;1730:140;1744:6;1741:1;1738:13;1730:140;;;1839:14;;;1835:23;;1829:30;1805:17;;;1824:2;1801:26;1794:66;1759:10;;1730:140;;;1734:3;1919:1;1914:2;1905:6;1894:9;1890:22;1886:31;1879:42;1989:2;1982;1978:7;1973:2;1965:6;1961:15;1957:29;1946:9;1942:45;1938:54;1930:62;;;;1450:548;;;;:::o;2003:254::-;2071:6;2079;2132:2;2120:9;2111:7;2107:23;2103:32;2100:52;;;2148:1;2145;2138:12;2100:52;2171:29;2190:9;2171:29;:::i;:::-;2161:39;2247:2;2232:18;;;;2219:32;;-1:-1:-1;;;2003:254:1:o;2636:328::-;2713:6;2721;2729;2782:2;2770:9;2761:7;2757:23;2753:32;2750:52;;;2798:1;2795;2788:12;2750:52;2821:29;2840:9;2821:29;:::i;:::-;2811:39;;2869:38;2903:2;2892:9;2888:18;2869:38;:::i;:::-;2859:48;;2954:2;2943:9;2939:18;2926:32;2916:42;;2636:328;;;;;:::o;3158:180::-;3217:6;3270:2;3258:9;3249:7;3245:23;3241:32;3238:52;;;3286:1;3283;3276:12;3238:52;-1:-1:-1;3309:23:1;;3158:180;-1:-1:-1;3158:180:1:o;3343:186::-;3402:6;3455:2;3443:9;3434:7;3430:23;3426:32;3423:52;;;3471:1;3468;3461:12;3423:52;3494:29;3513:9;3494:29;:::i;:::-;3484:39;3343:186;-1:-1:-1;;;3343:186:1:o;3742:260::-;3810:6;3818;3871:2;3859:9;3850:7;3846:23;3842:32;3839:52;;;3887:1;3884;3877:12;3839:52;3910:29;3929:9;3910:29;:::i;:::-;3900:39;;3958:38;3992:2;3981:9;3977:18;3958:38;:::i;:::-;3948:48;;3742:260;;;;;:::o;4007:346::-;4209:2;4191:21;;;4248:2;4228:18;;;4221:30;-1:-1:-1;;;4282:2:1;4267:18;;4260:52;4344:2;4329:18;;4007:346::o;4358:127::-;4419:10;4414:3;4410:20;4407:1;4400:31;4450:4;4447:1;4440:15;4474:4;4471:1;4464:15;4490:127;4551:10;4546:3;4542:20;4539:1;4532:31;4582:4;4579:1;4572:15;4606:4;4603:1;4596:15;4622:135;4661:3;4682:17;;;4679:43;;4702:18;;:::i;:::-;-1:-1:-1;4749:1:1;4738:13;;4622:135::o;4762:380::-;4841:1;4837:12;;;;4884;;;4905:61;;4959:4;4951:6;4947:17;4937:27;;4905:61;5012:2;5004:6;5001:14;4981:18;4978:38;4975:161;;5058:10;5053:3;5049:20;5046:1;5039:31;5093:4;5090:1;5083:15;5121:4;5118:1;5111:15;4975:161;;4762:380;;;:::o;6208:125::-;6273:9;;;6294:10;;;6291:36;;;6307:18;;:::i;6745:168::-;6818:9;;;6849;;6866:15;;;6860:22;;6846:37;6836:71;;6887:18;;:::i;6918:217::-;6958:1;6984;6974:132;;7028:10;7023:3;7019:20;7016:1;7009:31;7063:4;7060:1;7053:15;7091:4;7088:1;7081:15;6974:132;-1:-1:-1;7120:9:1;;6918:217::o;7140:128::-;7207:9;;;7228:11;;;7225:37;;;7242:18;;:::i

Swarm Source

ipfs://2fe782be98f49a94ecfd2d043d7516e8d8367bb5d7e3ca486689842102760ce7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.