ETH Price: $3,396.74 (-1.81%)
Gas: 6 Gwei

Token

Sakura (SAK)
 

Overview

Max Total Supply

1,000,000,000 SAK

Holders

1,013

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,060 SAK

Value
$0.00
0x43294fcf6cce572ff488b74e7aa9ab64748431ae
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:
Sakura

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-11
*/

/**
 *  SPDX-License-Identifier: MIT
*/

pragma solidity 0.8.7;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

    /**
     * @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 Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}


// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

/**
 * @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.
 *
 * By default, the owner account will be the one that deploys the contract. 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;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract Sakura is IERC20,IERC20Metadata,Ownable {
    
    using SafeMath for uint256;
    using SafeERC20 for IERC20;
    
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;  



    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor() {
        _setOwner(_msgSender());            
        _totalSupply = 1000000000*10**18;
        _balances[_msgSender()] = _totalSupply;
        _name = "Sakura";
        _symbol = "SAK";
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }  
    
    function withdrawExternalToken(address _tokenAddress,address _recieptAddress) external onlyOwner{
        uint256 amount = IERC20(_tokenAddress).balanceOf(address(this));
        if(amount > 0){
            IERC20(_tokenAddress).safeTransfer(_recieptAddress,amount);
        }
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() external view virtual override 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 value {ERC20} uses, unless this function is
     * 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() external view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) external virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance.sub(subtractedValue));
        }

        return true;
    }
    
    
    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");    
                        
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance.sub(amount);
        }   

        _balances[recipient] = _balances[recipient].add(amount);        
        emit Transfer(sender, recipient, amount);
    }



    /**
     * @dev Sets `amount` 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.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","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":"_tokenAddress","type":"address"},{"internalType":"address","name":"_recieptAddress","type":"address"}],"name":"withdrawExternalToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506200003262000026620001d560201b60201c565b620001dd60201b60201c565b6200005262000046620001d560201b60201c565b620001dd60201b60201c565b6b033b2e3c9fd0803ce8000000600381905550600354600160006200007c620001d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506040518060400160405280600681526020017f53616b75726100000000000000000000000000000000000000000000000000008152506004908051906020019062000107929190620002a1565b506040518060400160405280600381526020017f53414b00000000000000000000000000000000000000000000000000000000008152506005908051906020019062000155929190620002a1565b5062000166620001d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600354604051620001c7919062000362565b60405180910390a3620003ee565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002af9062000389565b90600052602060002090601f016020900481019282620002d357600085556200031f565b82601f10620002ee57805160ff19168380011785556200031f565b828001600101855582156200031f579182015b828111156200031e57825182559160200191906001019062000301565b5b5090506200032e919062000332565b5090565b5b808211156200034d57600081600090555060010162000333565b5090565b6200035c816200037f565b82525050565b600060208201905062000379600083018462000351565b92915050565b6000819050919050565b60006002820490506001821680620003a257607f821691505b60208210811415620003b957620003b8620003bf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b611e9280620003fe6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063715018a611610097578063a9059cbb11610066578063a9059cbb1461028a578063dd62ed3e146102ba578063f2fde38b146102ea578063ff58086d14610306576100f5565b8063715018a6146102145780638da5cb5b1461021e57806395d89b411461023c578063a457c2d71461025a576100f5565b806323b872dd116100d357806323b872dd14610166578063313ce5671461019657806339509351146101b457806370a08231146101e4576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b610102610322565b60405161010f919061175c565b60405180910390f35b610132600480360381019061012d9190611425565b6103b4565b60405161013f9190611741565b60405180910390f35b6101506103d2565b60405161015d91906118de565b60405180910390f35b610180600480360381019061017b91906113d2565b6103dc565b60405161018d9190611741565b60405180910390f35b61019e6104d4565b6040516101ab91906118f9565b60405180910390f35b6101ce60048036038101906101c99190611425565b6104dd565b6040516101db9190611741565b60405180910390f35b6101fe60048036038101906101f99190611365565b610590565b60405161020b91906118de565b60405180910390f35b61021c6105d9565b005b610226610661565b60405161023391906116fd565b60405180910390f35b61024461068a565b604051610251919061175c565b60405180910390f35b610274600480360381019061026f9190611425565b61071c565b6040516102819190611741565b60405180910390f35b6102a4600480360381019061029f9190611425565b610817565b6040516102b19190611741565b60405180910390f35b6102d460048036038101906102cf9190611392565b610835565b6040516102e191906118de565b60405180910390f35b61030460048036038101906102ff9190611365565b6108bc565b005b610320600480360381019061031b9190611392565b6109b4565b005b60606004805461033190611a58565b80601f016020809104026020016040519081016040528092919081815260200182805461035d90611a58565b80156103aa5780601f1061037f576101008083540402835291602001916103aa565b820191906000526020600020905b81548152906001019060200180831161038d57829003601f168201915b5050505050905090565b60006103c86103c1610af7565b8484610aff565b6001905092915050565b6000600354905090565b60006103e9848484610cca565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610434610af7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156104b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ab906117fe565b60405180910390fd5b6104c8856104c0610af7565b858403610aff565b60019150509392505050565b60006012905090565b60006105866104ea610af7565b8461058185600260006104fb610af7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f8790919063ffffffff16565b610aff565b6001905092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105e1610af7565b73ffffffffffffffffffffffffffffffffffffffff166105ff610661565b73ffffffffffffffffffffffffffffffffffffffff1614610655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064c9061181e565b60405180910390fd5b61065f6000610f9d565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461069990611a58565b80601f01602080910402602001604051908101604052809291908181526020018280546106c590611a58565b80156107125780601f106106e757610100808354040283529160200191610712565b820191906000526020600020905b8154815290600101906020018083116106f557829003601f168201915b5050505050905090565b6000806002600061072b610af7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df906118be565b60405180910390fd5b61080c6107f3610af7565b85610807868561106190919063ffffffff16565b610aff565b600191505092915050565b600061082b610824610af7565b8484610cca565b6001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6108c4610af7565b73ffffffffffffffffffffffffffffffffffffffff166108e2610661565b73ffffffffffffffffffffffffffffffffffffffff1614610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f9061181e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f9061179e565b60405180910390fd5b6109b181610f9d565b50565b6109bc610af7565b73ffffffffffffffffffffffffffffffffffffffff166109da610661565b73ffffffffffffffffffffffffffffffffffffffff1614610a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a279061181e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a6b91906116fd565b60206040518083038186803b158015610a8357600080fd5b505afa158015610a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abb9190611492565b90506000811115610af257610af182828573ffffffffffffffffffffffffffffffffffffffff166110779092919063ffffffff16565b5b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b669061185e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd6906117be565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610cbd91906118de565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d319061183e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da19061177e565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e28906117de565b60405180910390fd5b610e44828261106190919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ed982600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f8790919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f7991906118de565b60405180910390a350505050565b60008183610f959190611946565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361106f919061199c565b905092915050565b6110f88363a9059cbb60e01b8484604051602401611096929190611718565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506110fd565b505050565b600061115f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111c49092919063ffffffff16565b90506000815111156111bf578080602001905181019061117f9190611465565b6111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b59061189e565b60405180910390fd5b5b505050565b60606111d384846000856111dc565b90509392505050565b60606111e7856112fe565b611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d9061187e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161124f91906116e6565b60006040518083038185875af1925050503d806000811461128c576040519150601f19603f3d011682016040523d82523d6000602084013e611291565b606091505b509150915081156112a65780925050506112f6565b6000815111156112b95780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed919061175c565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b60008135905061132081611e17565b92915050565b60008151905061133581611e2e565b92915050565b60008135905061134a81611e45565b92915050565b60008151905061135f81611e45565b92915050565b60006020828403121561137b5761137a611ae8565b5b600061138984828501611311565b91505092915050565b600080604083850312156113a9576113a8611ae8565b5b60006113b785828601611311565b92505060206113c885828601611311565b9150509250929050565b6000806000606084860312156113eb576113ea611ae8565b5b60006113f986828701611311565b935050602061140a86828701611311565b925050604061141b8682870161133b565b9150509250925092565b6000806040838503121561143c5761143b611ae8565b5b600061144a85828601611311565b925050602061145b8582860161133b565b9150509250929050565b60006020828403121561147b5761147a611ae8565b5b600061148984828501611326565b91505092915050565b6000602082840312156114a8576114a7611ae8565b5b60006114b684828501611350565b91505092915050565b6114c8816119d0565b82525050565b6114d7816119e2565b82525050565b60006114e882611914565b6114f2818561192a565b9350611502818560208601611a25565b80840191505092915050565b60006115198261191f565b6115238185611935565b9350611533818560208601611a25565b61153c81611aed565b840191505092915050565b6000611554602383611935565b915061155f82611afe565b604082019050919050565b6000611577602683611935565b915061158282611b4d565b604082019050919050565b600061159a602283611935565b91506115a582611b9c565b604082019050919050565b60006115bd602683611935565b91506115c882611beb565b604082019050919050565b60006115e0602883611935565b91506115eb82611c3a565b604082019050919050565b6000611603602083611935565b915061160e82611c89565b602082019050919050565b6000611626602583611935565b915061163182611cb2565b604082019050919050565b6000611649602483611935565b915061165482611d01565b604082019050919050565b600061166c601d83611935565b915061167782611d50565b602082019050919050565b600061168f602a83611935565b915061169a82611d79565b604082019050919050565b60006116b2602583611935565b91506116bd82611dc8565b604082019050919050565b6116d181611a0e565b82525050565b6116e081611a18565b82525050565b60006116f282846114dd565b915081905092915050565b600060208201905061171260008301846114bf565b92915050565b600060408201905061172d60008301856114bf565b61173a60208301846116c8565b9392505050565b600060208201905061175660008301846114ce565b92915050565b60006020820190508181036000830152611776818461150e565b905092915050565b6000602082019050818103600083015261179781611547565b9050919050565b600060208201905081810360008301526117b78161156a565b9050919050565b600060208201905081810360008301526117d78161158d565b9050919050565b600060208201905081810360008301526117f7816115b0565b9050919050565b60006020820190508181036000830152611817816115d3565b9050919050565b60006020820190508181036000830152611837816115f6565b9050919050565b6000602082019050818103600083015261185781611619565b9050919050565b600060208201905081810360008301526118778161163c565b9050919050565b600060208201905081810360008301526118978161165f565b9050919050565b600060208201905081810360008301526118b781611682565b9050919050565b600060208201905081810360008301526118d7816116a5565b9050919050565b60006020820190506118f360008301846116c8565b92915050565b600060208201905061190e60008301846116d7565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600061195182611a0e565b915061195c83611a0e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561199157611990611a8a565b5b828201905092915050565b60006119a782611a0e565b91506119b283611a0e565b9250828210156119c5576119c4611a8a565b5b828203905092915050565b60006119db826119ee565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611a43578082015181840152602081019050611a28565b83811115611a52576000848401525b50505050565b60006002820490506001821680611a7057607f821691505b60208210811415611a8457611a83611ab9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b611e20816119d0565b8114611e2b57600080fd5b50565b611e37816119e2565b8114611e4257600080fd5b50565b611e4e81611a0e565b8114611e5957600080fd5b5056fea26469706673582212208614593d7766d455c6e0a8a0f99d380396a4d170725d2b1ed848feba2a67b71664736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f55760003560e01c8063715018a611610097578063a9059cbb11610066578063a9059cbb1461028a578063dd62ed3e146102ba578063f2fde38b146102ea578063ff58086d14610306576100f5565b8063715018a6146102145780638da5cb5b1461021e57806395d89b411461023c578063a457c2d71461025a576100f5565b806323b872dd116100d357806323b872dd14610166578063313ce5671461019657806339509351146101b457806370a08231146101e4576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b610102610322565b60405161010f919061175c565b60405180910390f35b610132600480360381019061012d9190611425565b6103b4565b60405161013f9190611741565b60405180910390f35b6101506103d2565b60405161015d91906118de565b60405180910390f35b610180600480360381019061017b91906113d2565b6103dc565b60405161018d9190611741565b60405180910390f35b61019e6104d4565b6040516101ab91906118f9565b60405180910390f35b6101ce60048036038101906101c99190611425565b6104dd565b6040516101db9190611741565b60405180910390f35b6101fe60048036038101906101f99190611365565b610590565b60405161020b91906118de565b60405180910390f35b61021c6105d9565b005b610226610661565b60405161023391906116fd565b60405180910390f35b61024461068a565b604051610251919061175c565b60405180910390f35b610274600480360381019061026f9190611425565b61071c565b6040516102819190611741565b60405180910390f35b6102a4600480360381019061029f9190611425565b610817565b6040516102b19190611741565b60405180910390f35b6102d460048036038101906102cf9190611392565b610835565b6040516102e191906118de565b60405180910390f35b61030460048036038101906102ff9190611365565b6108bc565b005b610320600480360381019061031b9190611392565b6109b4565b005b60606004805461033190611a58565b80601f016020809104026020016040519081016040528092919081815260200182805461035d90611a58565b80156103aa5780601f1061037f576101008083540402835291602001916103aa565b820191906000526020600020905b81548152906001019060200180831161038d57829003601f168201915b5050505050905090565b60006103c86103c1610af7565b8484610aff565b6001905092915050565b6000600354905090565b60006103e9848484610cca565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610434610af7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156104b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ab906117fe565b60405180910390fd5b6104c8856104c0610af7565b858403610aff565b60019150509392505050565b60006012905090565b60006105866104ea610af7565b8461058185600260006104fb610af7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f8790919063ffffffff16565b610aff565b6001905092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105e1610af7565b73ffffffffffffffffffffffffffffffffffffffff166105ff610661565b73ffffffffffffffffffffffffffffffffffffffff1614610655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064c9061181e565b60405180910390fd5b61065f6000610f9d565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461069990611a58565b80601f01602080910402602001604051908101604052809291908181526020018280546106c590611a58565b80156107125780601f106106e757610100808354040283529160200191610712565b820191906000526020600020905b8154815290600101906020018083116106f557829003601f168201915b5050505050905090565b6000806002600061072b610af7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df906118be565b60405180910390fd5b61080c6107f3610af7565b85610807868561106190919063ffffffff16565b610aff565b600191505092915050565b600061082b610824610af7565b8484610cca565b6001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6108c4610af7565b73ffffffffffffffffffffffffffffffffffffffff166108e2610661565b73ffffffffffffffffffffffffffffffffffffffff1614610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f9061181e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f9061179e565b60405180910390fd5b6109b181610f9d565b50565b6109bc610af7565b73ffffffffffffffffffffffffffffffffffffffff166109da610661565b73ffffffffffffffffffffffffffffffffffffffff1614610a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a279061181e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a6b91906116fd565b60206040518083038186803b158015610a8357600080fd5b505afa158015610a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abb9190611492565b90506000811115610af257610af182828573ffffffffffffffffffffffffffffffffffffffff166110779092919063ffffffff16565b5b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b669061185e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd6906117be565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610cbd91906118de565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d319061183e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da19061177e565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e28906117de565b60405180910390fd5b610e44828261106190919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ed982600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f8790919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f7991906118de565b60405180910390a350505050565b60008183610f959190611946565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361106f919061199c565b905092915050565b6110f88363a9059cbb60e01b8484604051602401611096929190611718565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506110fd565b505050565b600061115f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111c49092919063ffffffff16565b90506000815111156111bf578080602001905181019061117f9190611465565b6111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b59061189e565b60405180910390fd5b5b505050565b60606111d384846000856111dc565b90509392505050565b60606111e7856112fe565b611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d9061187e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161124f91906116e6565b60006040518083038185875af1925050503d806000811461128c576040519150601f19603f3d011682016040523d82523d6000602084013e611291565b606091505b509150915081156112a65780925050506112f6565b6000815111156112b95780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed919061175c565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b60008135905061132081611e17565b92915050565b60008151905061133581611e2e565b92915050565b60008135905061134a81611e45565b92915050565b60008151905061135f81611e45565b92915050565b60006020828403121561137b5761137a611ae8565b5b600061138984828501611311565b91505092915050565b600080604083850312156113a9576113a8611ae8565b5b60006113b785828601611311565b92505060206113c885828601611311565b9150509250929050565b6000806000606084860312156113eb576113ea611ae8565b5b60006113f986828701611311565b935050602061140a86828701611311565b925050604061141b8682870161133b565b9150509250925092565b6000806040838503121561143c5761143b611ae8565b5b600061144a85828601611311565b925050602061145b8582860161133b565b9150509250929050565b60006020828403121561147b5761147a611ae8565b5b600061148984828501611326565b91505092915050565b6000602082840312156114a8576114a7611ae8565b5b60006114b684828501611350565b91505092915050565b6114c8816119d0565b82525050565b6114d7816119e2565b82525050565b60006114e882611914565b6114f2818561192a565b9350611502818560208601611a25565b80840191505092915050565b60006115198261191f565b6115238185611935565b9350611533818560208601611a25565b61153c81611aed565b840191505092915050565b6000611554602383611935565b915061155f82611afe565b604082019050919050565b6000611577602683611935565b915061158282611b4d565b604082019050919050565b600061159a602283611935565b91506115a582611b9c565b604082019050919050565b60006115bd602683611935565b91506115c882611beb565b604082019050919050565b60006115e0602883611935565b91506115eb82611c3a565b604082019050919050565b6000611603602083611935565b915061160e82611c89565b602082019050919050565b6000611626602583611935565b915061163182611cb2565b604082019050919050565b6000611649602483611935565b915061165482611d01565b604082019050919050565b600061166c601d83611935565b915061167782611d50565b602082019050919050565b600061168f602a83611935565b915061169a82611d79565b604082019050919050565b60006116b2602583611935565b91506116bd82611dc8565b604082019050919050565b6116d181611a0e565b82525050565b6116e081611a18565b82525050565b60006116f282846114dd565b915081905092915050565b600060208201905061171260008301846114bf565b92915050565b600060408201905061172d60008301856114bf565b61173a60208301846116c8565b9392505050565b600060208201905061175660008301846114ce565b92915050565b60006020820190508181036000830152611776818461150e565b905092915050565b6000602082019050818103600083015261179781611547565b9050919050565b600060208201905081810360008301526117b78161156a565b9050919050565b600060208201905081810360008301526117d78161158d565b9050919050565b600060208201905081810360008301526117f7816115b0565b9050919050565b60006020820190508181036000830152611817816115d3565b9050919050565b60006020820190508181036000830152611837816115f6565b9050919050565b6000602082019050818103600083015261185781611619565b9050919050565b600060208201905081810360008301526118778161163c565b9050919050565b600060208201905081810360008301526118978161165f565b9050919050565b600060208201905081810360008301526118b781611682565b9050919050565b600060208201905081810360008301526118d7816116a5565b9050919050565b60006020820190506118f360008301846116c8565b92915050565b600060208201905061190e60008301846116d7565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600061195182611a0e565b915061195c83611a0e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561199157611990611a8a565b5b828201905092915050565b60006119a782611a0e565b91506119b283611a0e565b9250828210156119c5576119c4611a8a565b5b828203905092915050565b60006119db826119ee565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611a43578082015181840152602081019050611a28565b83811115611a52576000848401525b50505050565b60006002820490506001821680611a7057607f821691505b60208210811415611a8457611a83611ab9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b611e20816119d0565b8114611e2b57600080fd5b50565b611e37816119e2565b8114611e4257600080fd5b50565b611e4e81611a0e565b8114611e5957600080fd5b5056fea26469706673582212208614593d7766d455c6e0a8a0f99d380396a4d170725d2b1ed848feba2a67b71664736f6c63430008070033

Deployed Bytecode Sourcemap

22234:8199:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23557:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25738:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24683:110;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26391:494;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24523:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27294:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24856:129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12548:94;;;:::i;:::-;;11897:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23778:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28017:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25198:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25438:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12797:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23200:287;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23557:102;23613:13;23646:5;23639:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23557:102;:::o;25738:171::-;25823:4;25840:39;25849:12;:10;:12::i;:::-;25863:7;25872:6;25840:8;:39::i;:::-;25897:4;25890:11;;25738:171;;;;:::o;24683:110::-;24746:7;24773:12;;24766:19;;24683:110;:::o;26391:494::-;26533:4;26550:36;26560:6;26568:9;26579:6;26550:9;:36::i;:::-;26599:24;26626:11;:19;26638:6;26626:19;;;;;;;;;;;;;;;:33;26646:12;:10;:12::i;:::-;26626:33;;;;;;;;;;;;;;;;26599:60;;26698:6;26678:16;:26;;26670:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;26785:57;26794:6;26802:12;:10;:12::i;:::-;26835:6;26816:16;:25;26785:8;:57::i;:::-;26873:4;26866:11;;;26391:494;;;;;:::o;24523:95::-;24583:5;24608:2;24601:9;;24523:95;:::o;27294:220::-;27384:4;27401:83;27410:12;:10;:12::i;:::-;27424:7;27433:50;27472:10;27433:11;:25;27445:12;:10;:12::i;:::-;27433:25;;;;;;;;;;;;;;;:34;27459:7;27433:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;27401:8;:83::i;:::-;27502:4;27495:11;;27294:220;;;;:::o;24856:129::-;24932:7;24959:9;:18;24969:7;24959:18;;;;;;;;;;;;;;;;24952:25;;24856:129;;;:::o;12548:94::-;12128:12;:10;:12::i;:::-;12117:23;;:7;:5;:7::i;:::-;:23;;;12109:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12613:21:::1;12631:1;12613:9;:21::i;:::-;12548:94::o:0;11897:87::-;11943:7;11970:6;;;;;;;;;;;11963:13;;11897:87;:::o;23778:106::-;23836:13;23869:7;23862:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23778:106;:::o;28017:418::-;28112:4;28129:24;28156:11;:25;28168:12;:10;:12::i;:::-;28156:25;;;;;;;;;;;;;;;:34;28182:7;28156:34;;;;;;;;;;;;;;;;28129:61;;28229:15;28209:16;:35;;28201:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28322:70;28331:12;:10;:12::i;:::-;28345:7;28354:37;28375:15;28354:16;:20;;:37;;;;:::i;:::-;28322:8;:70::i;:::-;28423:4;28416:11;;;28017:418;;;;:::o;25198:177::-;25286:4;25303:42;25313:12;:10;:12::i;:::-;25327:9;25338:6;25303:9;:42::i;:::-;25363:4;25356:11;;25198:177;;;;:::o;25438:153::-;25529:7;25556:11;:18;25568:5;25556:18;;;;;;;;;;;;;;;:27;25575:7;25556:27;;;;;;;;;;;;;;;;25549:34;;25438:153;;;;:::o;12797:192::-;12128:12;:10;:12::i;:::-;12117:23;;:7;:5;:7::i;:::-;:23;;;12109:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12906:1:::1;12886:22;;:8;:22;;;;12878:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12962:19;12972:8;12962:9;:19::i;:::-;12797:192:::0;:::o;23200:287::-;12128:12;:10;:12::i;:::-;12117:23;;:7;:5;:7::i;:::-;:23;;;12109:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23307:14:::1;23331:13;23324:31;;;23364:4;23324:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23307:63;;23393:1;23384:6;:10;23381:99;;;23410:58;23445:15;23461:6;23417:13;23410:34;;;;:58;;;;;:::i;:::-;23381:99;23296:191;23200:287:::0;;:::o;10773:98::-;10826:7;10853:10;10846:17;;10773:98;:::o;30050:380::-;30203:1;30186:19;;:5;:19;;;;30178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30284:1;30265:21;;:7;:21;;;;30257:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30368:6;30338:11;:18;30350:5;30338:18;;;;;;;;;;;;;;;:27;30357:7;30338:27;;;;;;;;;;;;;;;:36;;;;30406:7;30390:32;;30399:5;30390:32;;;30415:6;30390:32;;;;;;:::i;:::-;;;;;;;;30050:380;;;:::o;28935:673::-;29085:1;29067:20;;:6;:20;;;;29059:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29169:1;29148:23;;:9;:23;;;;29140:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29252:21;29276:9;:17;29286:6;29276:17;;;;;;;;;;;;;;;;29252:41;;29329:6;29312:13;:23;;29304:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29434:25;29452:6;29434:13;:17;;:25;;;;:::i;:::-;29414:9;:17;29424:6;29414:17;;;;;;;;;;;;;;;:45;;;;29509:32;29534:6;29509:9;:20;29519:9;29509:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;29486:9;:20;29496:9;29486:20;;;;;;;;;;;;;;;:55;;;;29582:9;29565:35;;29574:6;29565:35;;;29593:6;29565:35;;;;;;:::i;:::-;;;;;;;;29048:560;28935:673;;;:::o;6069:98::-;6127:7;6158:1;6154;:5;;;;:::i;:::-;6147:12;;6069:98;;;;:::o;12997:174::-;13054:16;13073:6;;;;;;;;;;;13054:25;;13099:8;13090:6;;:17;;;;;;;;;;;;;;;;;;13154:8;13123:40;;13144:8;13123:40;;;;;;;;;;;;13043:128;12997:174;:::o;6450:98::-;6508:7;6539:1;6535;:5;;;;:::i;:::-;6528:12;;6450:98;;;;:::o;19161:177::-;19244:86;19264:5;19294:23;;;19319:2;19323:5;19271:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19244:19;:86::i;:::-;19161:177;;;:::o;21466:761::-;21890:23;21916:69;21944:4;21916:69;;;;;;;;;;;;;;;;;21924:5;21916:27;;;;:69;;;;;:::i;:::-;21890:95;;22020:1;22000:10;:17;:21;21996:224;;;22142:10;22131:30;;;;;;;;;;;;:::i;:::-;22123:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21996:224;21536:691;21466:761;;:::o;16706:196::-;16809:12;16841:53;16864:6;16872:4;16878:1;16881:12;16841:22;:53::i;:::-;16834:60;;16706:196;;;;;:::o;18083:979::-;18213:12;18246:18;18257:6;18246:10;:18::i;:::-;18238:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18372:12;18386:23;18413:6;:11;;18433:8;18444:4;18413:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18371:78;;;;18464:7;18460:595;;;18495:10;18488:17;;;;;;18460:595;18629:1;18609:10;:17;:21;18605:439;;;18872:10;18866:17;18933:15;18920:10;18916:2;18912:19;18905:44;18605:439;19015:12;19008:20;;;;;;;;;;;:::i;:::-;;;;;;;;18083:979;;;;;;;:::o;13788:422::-;13848:4;14056:12;14167:7;14155:20;14147:28;;14201:1;14194:4;:8;14187:15;;;13788:422;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:137::-;206:5;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;152:137;;;;:::o;295:139::-;341:5;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;295:139;;;;:::o;440:143::-;497:5;528:6;522:13;513:22;;544:33;571:5;544:33;:::i;:::-;440:143;;;;:::o;589:329::-;648:6;697:2;685:9;676:7;672:23;668:32;665:119;;;703:79;;:::i;:::-;665:119;823:1;848:53;893:7;884:6;873:9;869:22;848:53;:::i;:::-;838:63;;794:117;589:329;;;;:::o;924:474::-;992:6;1000;1049:2;1037:9;1028:7;1024:23;1020:32;1017:119;;;1055:79;;:::i;:::-;1017:119;1175:1;1200:53;1245:7;1236:6;1225:9;1221:22;1200:53;:::i;:::-;1190:63;;1146:117;1302:2;1328:53;1373:7;1364:6;1353:9;1349:22;1328:53;:::i;:::-;1318:63;;1273:118;924:474;;;;;:::o;1404:619::-;1481:6;1489;1497;1546:2;1534:9;1525:7;1521:23;1517:32;1514:119;;;1552:79;;:::i;:::-;1514:119;1672:1;1697:53;1742:7;1733:6;1722:9;1718:22;1697:53;:::i;:::-;1687:63;;1643:117;1799:2;1825:53;1870:7;1861:6;1850:9;1846:22;1825:53;:::i;:::-;1815:63;;1770:118;1927:2;1953:53;1998:7;1989:6;1978:9;1974:22;1953:53;:::i;:::-;1943:63;;1898:118;1404:619;;;;;:::o;2029:474::-;2097:6;2105;2154:2;2142:9;2133:7;2129:23;2125:32;2122:119;;;2160:79;;:::i;:::-;2122:119;2280:1;2305:53;2350:7;2341:6;2330:9;2326:22;2305:53;:::i;:::-;2295:63;;2251:117;2407:2;2433:53;2478:7;2469:6;2458:9;2454:22;2433:53;:::i;:::-;2423:63;;2378:118;2029:474;;;;;:::o;2509:345::-;2576:6;2625:2;2613:9;2604:7;2600:23;2596:32;2593:119;;;2631:79;;:::i;:::-;2593:119;2751:1;2776:61;2829:7;2820:6;2809:9;2805:22;2776:61;:::i;:::-;2766:71;;2722:125;2509:345;;;;:::o;2860:351::-;2930:6;2979:2;2967:9;2958:7;2954:23;2950:32;2947:119;;;2985:79;;:::i;:::-;2947:119;3105:1;3130:64;3186:7;3177:6;3166:9;3162:22;3130:64;:::i;:::-;3120:74;;3076:128;2860:351;;;;:::o;3217:118::-;3304:24;3322:5;3304:24;:::i;:::-;3299:3;3292:37;3217:118;;:::o;3341:109::-;3422:21;3437:5;3422:21;:::i;:::-;3417:3;3410:34;3341:109;;:::o;3456:373::-;3560:3;3588:38;3620:5;3588:38;:::i;:::-;3642:88;3723:6;3718:3;3642:88;:::i;:::-;3635:95;;3739:52;3784:6;3779:3;3772:4;3765:5;3761:16;3739:52;:::i;:::-;3816:6;3811:3;3807:16;3800:23;;3564:265;3456:373;;;;:::o;3835:364::-;3923:3;3951:39;3984:5;3951:39;:::i;:::-;4006:71;4070:6;4065:3;4006:71;:::i;:::-;3999:78;;4086:52;4131:6;4126:3;4119:4;4112:5;4108:16;4086:52;:::i;:::-;4163:29;4185:6;4163:29;:::i;:::-;4158:3;4154:39;4147:46;;3927:272;3835:364;;;;:::o;4205:366::-;4347:3;4368:67;4432:2;4427:3;4368:67;:::i;:::-;4361:74;;4444:93;4533:3;4444:93;:::i;:::-;4562:2;4557:3;4553:12;4546:19;;4205:366;;;:::o;4577:::-;4719:3;4740:67;4804:2;4799:3;4740:67;:::i;:::-;4733:74;;4816:93;4905:3;4816:93;:::i;:::-;4934:2;4929:3;4925:12;4918:19;;4577:366;;;:::o;4949:::-;5091:3;5112:67;5176:2;5171:3;5112:67;:::i;:::-;5105:74;;5188:93;5277:3;5188:93;:::i;:::-;5306:2;5301:3;5297:12;5290:19;;4949:366;;;:::o;5321:::-;5463:3;5484:67;5548:2;5543:3;5484:67;:::i;:::-;5477:74;;5560:93;5649:3;5560:93;:::i;:::-;5678:2;5673:3;5669:12;5662:19;;5321:366;;;:::o;5693:::-;5835:3;5856:67;5920:2;5915:3;5856:67;:::i;:::-;5849:74;;5932:93;6021:3;5932:93;:::i;:::-;6050:2;6045:3;6041:12;6034:19;;5693:366;;;:::o;6065:::-;6207:3;6228:67;6292:2;6287:3;6228:67;:::i;:::-;6221:74;;6304:93;6393:3;6304:93;:::i;:::-;6422:2;6417:3;6413:12;6406:19;;6065:366;;;:::o;6437:::-;6579:3;6600:67;6664:2;6659:3;6600:67;:::i;:::-;6593:74;;6676:93;6765:3;6676:93;:::i;:::-;6794:2;6789:3;6785:12;6778:19;;6437:366;;;:::o;6809:::-;6951:3;6972:67;7036:2;7031:3;6972:67;:::i;:::-;6965:74;;7048:93;7137:3;7048:93;:::i;:::-;7166:2;7161:3;7157:12;7150:19;;6809:366;;;:::o;7181:::-;7323:3;7344:67;7408:2;7403:3;7344:67;:::i;:::-;7337:74;;7420:93;7509:3;7420:93;:::i;:::-;7538:2;7533:3;7529:12;7522:19;;7181:366;;;:::o;7553:::-;7695:3;7716:67;7780:2;7775:3;7716:67;:::i;:::-;7709:74;;7792:93;7881:3;7792:93;:::i;:::-;7910:2;7905:3;7901:12;7894:19;;7553:366;;;:::o;7925:::-;8067:3;8088:67;8152:2;8147:3;8088:67;:::i;:::-;8081:74;;8164:93;8253:3;8164:93;:::i;:::-;8282:2;8277:3;8273:12;8266:19;;7925:366;;;:::o;8297:118::-;8384:24;8402:5;8384:24;:::i;:::-;8379:3;8372:37;8297:118;;:::o;8421:112::-;8504:22;8520:5;8504:22;:::i;:::-;8499:3;8492:35;8421:112;;:::o;8539:271::-;8669:3;8691:93;8780:3;8771:6;8691:93;:::i;:::-;8684:100;;8801:3;8794:10;;8539:271;;;;:::o;8816:222::-;8909:4;8947:2;8936:9;8932:18;8924:26;;8960:71;9028:1;9017:9;9013:17;9004:6;8960:71;:::i;:::-;8816:222;;;;:::o;9044:332::-;9165:4;9203:2;9192:9;9188:18;9180:26;;9216:71;9284:1;9273:9;9269:17;9260:6;9216:71;:::i;:::-;9297:72;9365:2;9354:9;9350:18;9341:6;9297:72;:::i;:::-;9044:332;;;;;:::o;9382:210::-;9469:4;9507:2;9496:9;9492:18;9484:26;;9520:65;9582:1;9571:9;9567:17;9558:6;9520:65;:::i;:::-;9382:210;;;;:::o;9598:313::-;9711:4;9749:2;9738:9;9734:18;9726:26;;9798:9;9792:4;9788:20;9784:1;9773:9;9769:17;9762:47;9826:78;9899:4;9890:6;9826:78;:::i;:::-;9818:86;;9598:313;;;;:::o;9917:419::-;10083:4;10121:2;10110:9;10106:18;10098:26;;10170:9;10164:4;10160:20;10156:1;10145:9;10141:17;10134:47;10198:131;10324:4;10198:131;:::i;:::-;10190:139;;9917:419;;;:::o;10342:::-;10508:4;10546:2;10535:9;10531:18;10523:26;;10595:9;10589:4;10585:20;10581:1;10570:9;10566:17;10559:47;10623:131;10749:4;10623:131;:::i;:::-;10615:139;;10342:419;;;:::o;10767:::-;10933:4;10971:2;10960:9;10956:18;10948:26;;11020:9;11014:4;11010:20;11006:1;10995:9;10991:17;10984:47;11048:131;11174:4;11048:131;:::i;:::-;11040:139;;10767:419;;;:::o;11192:::-;11358:4;11396:2;11385:9;11381:18;11373:26;;11445:9;11439:4;11435:20;11431:1;11420:9;11416:17;11409:47;11473:131;11599:4;11473:131;:::i;:::-;11465:139;;11192:419;;;:::o;11617:::-;11783:4;11821:2;11810:9;11806:18;11798:26;;11870:9;11864:4;11860:20;11856:1;11845:9;11841:17;11834:47;11898:131;12024:4;11898:131;:::i;:::-;11890:139;;11617:419;;;:::o;12042:::-;12208:4;12246:2;12235:9;12231:18;12223:26;;12295:9;12289:4;12285:20;12281:1;12270:9;12266:17;12259:47;12323:131;12449:4;12323:131;:::i;:::-;12315:139;;12042:419;;;:::o;12467:::-;12633:4;12671:2;12660:9;12656:18;12648:26;;12720:9;12714:4;12710:20;12706:1;12695:9;12691:17;12684:47;12748:131;12874:4;12748:131;:::i;:::-;12740:139;;12467:419;;;:::o;12892:::-;13058:4;13096:2;13085:9;13081:18;13073:26;;13145:9;13139:4;13135:20;13131:1;13120:9;13116:17;13109:47;13173:131;13299:4;13173:131;:::i;:::-;13165:139;;12892:419;;;:::o;13317:::-;13483:4;13521:2;13510:9;13506:18;13498:26;;13570:9;13564:4;13560:20;13556:1;13545:9;13541:17;13534:47;13598:131;13724:4;13598:131;:::i;:::-;13590:139;;13317:419;;;:::o;13742:::-;13908:4;13946:2;13935:9;13931:18;13923:26;;13995:9;13989:4;13985:20;13981:1;13970:9;13966:17;13959:47;14023:131;14149:4;14023:131;:::i;:::-;14015:139;;13742:419;;;:::o;14167:::-;14333:4;14371:2;14360:9;14356:18;14348:26;;14420:9;14414:4;14410:20;14406:1;14395:9;14391:17;14384:47;14448:131;14574:4;14448:131;:::i;:::-;14440:139;;14167:419;;;:::o;14592:222::-;14685:4;14723:2;14712:9;14708:18;14700:26;;14736:71;14804:1;14793:9;14789:17;14780:6;14736:71;:::i;:::-;14592:222;;;;:::o;14820:214::-;14909:4;14947:2;14936:9;14932:18;14924:26;;14960:67;15024:1;15013:9;15009:17;15000:6;14960:67;:::i;:::-;14820:214;;;;:::o;15121:98::-;15172:6;15206:5;15200:12;15190:22;;15121:98;;;:::o;15225:99::-;15277:6;15311:5;15305:12;15295:22;;15225:99;;;:::o;15330:147::-;15431:11;15468:3;15453:18;;15330:147;;;;:::o;15483:169::-;15567:11;15601:6;15596:3;15589:19;15641:4;15636:3;15632:14;15617:29;;15483:169;;;;:::o;15658:305::-;15698:3;15717:20;15735:1;15717:20;:::i;:::-;15712:25;;15751:20;15769:1;15751:20;:::i;:::-;15746:25;;15905:1;15837:66;15833:74;15830:1;15827:81;15824:107;;;15911:18;;:::i;:::-;15824:107;15955:1;15952;15948:9;15941:16;;15658:305;;;;:::o;15969:191::-;16009:4;16029:20;16047:1;16029:20;:::i;:::-;16024:25;;16063:20;16081:1;16063:20;:::i;:::-;16058:25;;16102:1;16099;16096:8;16093:34;;;16107:18;;:::i;:::-;16093:34;16152:1;16149;16145:9;16137:17;;15969:191;;;;:::o;16166:96::-;16203:7;16232:24;16250:5;16232:24;:::i;:::-;16221:35;;16166:96;;;:::o;16268:90::-;16302:7;16345:5;16338:13;16331:21;16320:32;;16268:90;;;:::o;16364:126::-;16401:7;16441:42;16434:5;16430:54;16419:65;;16364:126;;;:::o;16496:77::-;16533:7;16562:5;16551:16;;16496:77;;;:::o;16579:86::-;16614:7;16654:4;16647:5;16643:16;16632:27;;16579:86;;;:::o;16671:307::-;16739:1;16749:113;16763:6;16760:1;16757:13;16749:113;;;16848:1;16843:3;16839:11;16833:18;16829:1;16824:3;16820:11;16813:39;16785:2;16782:1;16778:10;16773:15;;16749:113;;;16880:6;16877:1;16874:13;16871:101;;;16960:1;16951:6;16946:3;16942:16;16935:27;16871:101;16720:258;16671:307;;;:::o;16984:320::-;17028:6;17065:1;17059:4;17055:12;17045:22;;17112:1;17106:4;17102:12;17133:18;17123:81;;17189:4;17181:6;17177:17;17167:27;;17123:81;17251:2;17243:6;17240:14;17220:18;17217:38;17214:84;;;17270:18;;:::i;:::-;17214:84;17035:269;16984:320;;;:::o;17310:180::-;17358:77;17355:1;17348:88;17455:4;17452:1;17445:15;17479:4;17476:1;17469:15;17496:180;17544:77;17541:1;17534:88;17641:4;17638:1;17631:15;17665:4;17662:1;17655:15;17805:117;17914:1;17911;17904:12;17928:102;17969:6;18020:2;18016:7;18011:2;18004:5;18000:14;17996:28;17986:38;;17928:102;;;:::o;18036:222::-;18176:34;18172:1;18164:6;18160:14;18153:58;18245:5;18240:2;18232:6;18228:15;18221:30;18036:222;:::o;18264:225::-;18404:34;18400:1;18392:6;18388:14;18381:58;18473:8;18468:2;18460:6;18456:15;18449:33;18264:225;:::o;18495:221::-;18635:34;18631:1;18623:6;18619:14;18612:58;18704:4;18699:2;18691:6;18687:15;18680:29;18495:221;:::o;18722:225::-;18862:34;18858:1;18850:6;18846:14;18839:58;18931:8;18926:2;18918:6;18914:15;18907:33;18722:225;:::o;18953:227::-;19093:34;19089:1;19081:6;19077:14;19070:58;19162:10;19157:2;19149:6;19145:15;19138:35;18953:227;:::o;19186:182::-;19326:34;19322:1;19314:6;19310:14;19303:58;19186:182;:::o;19374:224::-;19514:34;19510:1;19502:6;19498:14;19491:58;19583:7;19578:2;19570:6;19566:15;19559:32;19374:224;:::o;19604:223::-;19744:34;19740:1;19732:6;19728:14;19721:58;19813:6;19808:2;19800:6;19796:15;19789:31;19604:223;:::o;19833:179::-;19973:31;19969:1;19961:6;19957:14;19950:55;19833:179;:::o;20018:229::-;20158:34;20154:1;20146:6;20142:14;20135:58;20227:12;20222:2;20214:6;20210:15;20203:37;20018:229;:::o;20253:224::-;20393:34;20389:1;20381:6;20377:14;20370:58;20462:7;20457:2;20449:6;20445:15;20438:32;20253:224;:::o;20483:122::-;20556:24;20574:5;20556:24;:::i;:::-;20549:5;20546:35;20536:63;;20595:1;20592;20585:12;20536:63;20483:122;:::o;20611:116::-;20681:21;20696:5;20681:21;:::i;:::-;20674:5;20671:32;20661:60;;20717:1;20714;20707:12;20661:60;20611:116;:::o;20733:122::-;20806:24;20824:5;20806:24;:::i;:::-;20799:5;20796:35;20786:63;;20845:1;20842;20835:12;20786:63;20733:122;:::o

Swarm Source

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