ETH Price: $1,908.18 (-0.33%)
 

Overview

Max Total Supply

700,000,000,000,000 JESUS

Holders

5

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
JESUS

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-11-19
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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

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

// File @openzeppelin/contracts/access/[email protected]

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.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.
 *
 * 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @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 {
        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 {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _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/[email protected]
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

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

// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

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

// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.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}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * 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].
 *
 * 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.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    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(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override 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 `amount`.
     */
    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` 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 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * 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 `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + 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
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `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.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), 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);
    }

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 */
 
library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract JESUS is ERC20, Ownable {
    using SafeMath for uint256;

    uint256 public buyFee = 7; //0.7% percent fee on buy and sell
    uint256 public sellFee = 7;
    address public charityWallet = 0x353bd4704b8dE7B45d12E7dd33cD31725f120D7a;
    mapping (address => bool) public _isWhiteListedFromFee;


    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    constructor() ERC20("Jesus Coin", "JESUS") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // CREATE A UNISWAP PAIR FOR THIS NEW TOKEN
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        // SET THE REST OF THE CONTRACT VARIABLES
        uniswapV2Router = _uniswapV2Router;

        // MINT INITIAL SUPPLY
        _mint(msg.sender, 700000000000000 * 10 ** decimals());

        //Exclude owner from fees
        _isWhiteListedFromFee[owner()] = true;
        _isWhiteListedFromFee[charityWallet] = true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual override {
        uint256 transferAmount = amount;

        if(!_isWhiteListedFromFee[sender] && !_isWhiteListedFromFee[recipient]){

        if(buyFee > 0){
        if (sender == uniswapV2Pair) {
            // BUY FEE
            uint256 fee = amount.mul(buyFee).div(1000);
            transferAmount = amount.sub(fee);
            super._transfer(sender, charityWallet, fee);
        }
        }

        if(sellFee > 0){
        if (recipient == uniswapV2Pair) {
            // SELL FEE
            uint256 fee = amount.mul(sellFee).div(1000);
            transferAmount = amount.sub(fee);
            super._transfer(sender, charityWallet, fee);
        }
        }
        }
        super._transfer(sender, recipient, transferAmount);
    }

    function whiteListFromFee(address account) public onlyOwner {
        _isWhiteListedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner{
        _isWhiteListedFromFee[account] = false;
    }

    function changeTaxes(uint256 _buyTax, uint256 _sellTax) public onlyOwner {
        require(_buyTax <= 250, "Tax too high");
        require(_sellTax <= 250, "Tax too high");
        buyFee = _buyTax;
        sellFee = _sellTax;
    }

    function changeCharityWallet(address account) public onlyOwner {
        charityWallet = account;
    }

    function burnTokens(uint256 amount) public onlyOwner {
        _burn(msg.sender, amount);
    }
}

Contract Security Audit

Contract ABI

API
[{"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":"","type":"address"}],"name":"_isWhiteListedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"changeCharityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"}],"name":"changeTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"account","type":"address"}],"name":"includeInFee","outputs":[],"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":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whiteListFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405260076006556007805573353bd4704b8de7b45d12e7dd33cd31725f120d7a60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006d575f80fd5b506040518060400160405280600a81526020017f4a6573757320436f696e000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4a455355530000000000000000000000000000000000000000000000000000008152508160039081620000eb9190620008ee565b508060049081620000fd9190620008ee565b50505062000120620001146200042160201b60201c565b6200042860201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000182573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a8919062000a37565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000234919062000a37565b6040518363ffffffff1660e01b81526004016200025392919062000a78565b6020604051808303815f875af115801562000270573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000296919062000a37565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620003403362000312620004eb60201b60201c565b600a62000320919062000c2c565b66027ca57357c00062000334919062000c7c565b620004f360201b60201c565b600160095f620003556200065860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505062000daa565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000564576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200055b9062000d24565b60405180910390fd5b620005775f83836200068060201b60201c565b8060025f8282546200058a919062000d44565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000639919062000d8f565b60405180910390a3620006545f83836200068560201b60201c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200070657607f821691505b6020821081036200071c576200071b620006c1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620007807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000743565b6200078c868362000743565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620007d6620007d0620007ca84620007a4565b620007ad565b620007a4565b9050919050565b5f819050919050565b620007f183620007b6565b620008096200080082620007dd565b8484546200074f565b825550505050565b5f90565b6200081f62000811565b6200082c818484620007e6565b505050565b5b818110156200085357620008475f8262000815565b60018101905062000832565b5050565b601f821115620008a2576200086c8162000722565b620008778462000734565b8101602085101562000887578190505b6200089f620008968562000734565b83018262000831565b50505b505050565b5f82821c905092915050565b5f620008c45f1984600802620008a7565b1980831691505092915050565b5f620008de8383620008b3565b9150826002028217905092915050565b620008f9826200068a565b67ffffffffffffffff81111562000915576200091462000694565b5b620009218254620006ee565b6200092e82828562000857565b5f60209050601f83116001811462000964575f84156200094f578287015190505b6200095b8582620008d1565b865550620009ca565b601f198416620009748662000722565b5f5b828110156200099d5784890151825560018201915060208501945060208101905062000976565b86831015620009bd5784890151620009b9601f891682620008b3565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000a0182620009d6565b9050919050565b62000a1381620009f5565b811462000a1e575f80fd5b50565b5f8151905062000a318162000a08565b92915050565b5f6020828403121562000a4f5762000a4e620009d2565b5b5f62000a5e8482850162000a21565b91505092915050565b62000a7281620009f5565b82525050565b5f60408201905062000a8d5f83018562000a67565b62000a9c602083018462000a67565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000b2d5780860481111562000b055762000b0462000aa3565b5b600185161562000b155780820291505b808102905062000b258562000ad0565b945062000ae5565b94509492505050565b5f8262000b47576001905062000c19565b8162000b56575f905062000c19565b816001811462000b6f576002811462000b7a5762000bb0565b600191505062000c19565b60ff84111562000b8f5762000b8e62000aa3565b5b8360020a91508482111562000ba95762000ba862000aa3565b5b5062000c19565b5060208310610133831016604e8410600b841016171562000bea5782820a90508381111562000be45762000be362000aa3565b5b62000c19565b62000bf9848484600162000adc565b9250905081840481111562000c135762000c1262000aa3565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000c3882620007a4565b915062000c458362000c20565b925062000c747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b36565b905092915050565b5f62000c8882620007a4565b915062000c9583620007a4565b925082820262000ca581620007a4565b9150828204841483151762000cbf5762000cbe62000aa3565b5b5092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000d0c601f8362000cc6565b915062000d198262000cd6565b602082019050919050565b5f6020820190508181035f83015262000d3d8162000cfe565b9050919050565b5f62000d5082620007a4565b915062000d5d83620007a4565b925082820190508082111562000d785762000d7762000aa3565b5b92915050565b62000d8981620007a4565b82525050565b5f60208201905062000da45f83018462000d7e565b92915050565b60805160a05161233862000dda5f395f818161067701528181610e040152610ed101525f61058701526123385ff3fe608060405234801561000f575f80fd5b5060043610610171575f3560e01c80635f1a90aa116100dc57806395d89b4111610095578063dd62ed3e1161006f578063dd62ed3e1461044f578063ea2f0b371461047f578063f2fde38b1461049b578063fe2314d6146104b757610171565b806395d89b41146103d1578063a457c2d7146103ef578063a9059cbb1461041f57610171565b80635f1a90aa1461030f5780636d1b229d1461033f57806370a082311461035b578063715018a61461038b5780637b208769146103955780638da5cb5b146103b357610171565b8063313ce5671161012e578063313ce5671461024d57806337ec5a241461026b578063395093511461028757806347062402146102b757806349bd5a5e146102d5578063508f6dfb146102f357610171565b806306fdde0314610175578063095ea7b3146101935780631694505e146101c357806318160ddd146101e157806323b872dd146101ff5780632b14ca561461022f575b5f80fd5b61017d6104d3565b60405161018a9190611774565b60405180910390f35b6101ad60048036038101906101a89190611825565b610563565b6040516101ba919061187d565b60405180910390f35b6101cb610585565b6040516101d891906118f1565b60405180910390f35b6101e96105a9565b6040516101f69190611919565b60405180910390f35b61021960048036038101906102149190611932565b6105b2565b604051610226919061187d565b60405180910390f35b6102376105e0565b6040516102449190611919565b60405180910390f35b6102556105e6565b604051610262919061199d565b60405180910390f35b610285600480360381019061028091906119b6565b6105ee565b005b6102a1600480360381019061029c9190611825565b610639565b6040516102ae919061187d565b60405180910390f35b6102bf61066f565b6040516102cc9190611919565b60405180910390f35b6102dd610675565b6040516102ea91906119f0565b60405180910390f35b61030d600480360381019061030891906119b6565b610699565b005b610329600480360381019061032491906119b6565b6106f9565b604051610336919061187d565b60405180910390f35b61035960048036038101906103549190611a09565b610716565b005b610375600480360381019061037091906119b6565b61072b565b6040516103829190611919565b60405180910390f35b610393610770565b005b61039d610783565b6040516103aa91906119f0565b60405180910390f35b6103bb6107a8565b6040516103c891906119f0565b60405180910390f35b6103d96107d0565b6040516103e69190611774565b60405180910390f35b61040960048036038101906104049190611825565b610860565b604051610416919061187d565b60405180910390f35b61043960048036038101906104349190611825565b6108d5565b604051610446919061187d565b60405180910390f35b61046960048036038101906104649190611a34565b6108f7565b6040516104769190611919565b60405180910390f35b610499600480360381019061049491906119b6565b610979565b005b6104b560048036038101906104b091906119b6565b6109d8565b005b6104d160048036038101906104cc9190611a72565b610a5a565b005b6060600380546104e290611add565b80601f016020809104026020016040519081016040528092919081815260200182805461050e90611add565b80156105595780601f1061053057610100808354040283529160200191610559565b820191905f5260205f20905b81548152906001019060200180831161053c57829003601f168201915b5050505050905090565b5f8061056d610afc565b905061057a818585610b03565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f806105bc610afc565b90506105c9858285610cc6565b6105d4858585610d51565b60019150509392505050565b60075481565b5f6012905090565b6105f6610fa4565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f80610643610afc565b905061066481858561065585896108f7565b61065f9190611b3a565b610b03565b600191505092915050565b60065481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6106a1610fa4565b600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6009602052805f5260405f205f915054906101000a900460ff1681565b61071e610fa4565b6107283382611022565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610778610fa4565b6107815f6111e5565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546107df90611add565b80601f016020809104026020016040519081016040528092919081815260200182805461080b90611add565b80156108565780601f1061082d57610100808354040283529160200191610856565b820191905f5260205f20905b81548152906001019060200180831161083957829003601f168201915b5050505050905090565b5f8061086a610afc565b90505f61087782866108f7565b9050838110156108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b390611bdd565b60405180910390fd5b6108c98286868403610b03565b60019250505092915050565b5f806108df610afc565b90506108ec818585610d51565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610981610fa4565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6109e0610fa4565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4590611c6b565b60405180910390fd5b610a57816111e5565b50565b610a62610fa4565b60fa821115610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90611cd3565b60405180910390fd5b60fa811115610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190611cd3565b60405180910390fd5b81600681905550806007819055505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6890611d61565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690611def565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610cb99190611919565b60405180910390a3505050565b5f610cd184846108f7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d4b5781811015610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3490611e57565b60405180910390fd5b610d4a8484848403610b03565b5b50505050565b5f81905060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015610df3575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610f93575f6006541115610ec5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ec4575f610e7f6103e8610e71600654866112a890919063ffffffff16565b61131f90919063ffffffff16565b9050610e94818461136890919063ffffffff16565b9150610ec28560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836113b1565b505b5b5f6007541115610f92577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f91575f610f4c6103e8610f3e600754866112a890919063ffffffff16565b61131f90919063ffffffff16565b9050610f61818461136890919063ffffffff16565b9150610f8f8560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836113b1565b505b5b5b610f9e8484836113b1565b50505050565b610fac610afc565b73ffffffffffffffffffffffffffffffffffffffff16610fca6107a8565b73ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790611ebf565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108790611f4d565b60405180910390fd5b61109b825f8361161d565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111590611fdb565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111cd9190611919565b60405180910390a36111e0835f84611622565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8083036112b8575f9050611319565b5f82846112c59190611ff9565b90508284826112d49190612067565b14611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90612107565b60405180910390fd5b809150505b92915050565b5f61136083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611627565b905092915050565b5f6113a983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611688565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141690612195565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490612223565b60405180910390fd5b61149883838361161d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561151b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611512906122b1565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116049190611919565b60405180910390a3611617848484611622565b50505050565b505050565b505050565b5f808311829061166d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116649190611774565b60405180910390fd5b505f838561167b9190612067565b9050809150509392505050565b5f8383111582906116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c69190611774565b60405180910390fd5b505f83856116dd91906122cf565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611721578082015181840152602081019050611706565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611746826116ea565b61175081856116f4565b9350611760818560208601611704565b6117698161172c565b840191505092915050565b5f6020820190508181035f83015261178c818461173c565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117c182611798565b9050919050565b6117d1816117b7565b81146117db575f80fd5b50565b5f813590506117ec816117c8565b92915050565b5f819050919050565b611804816117f2565b811461180e575f80fd5b50565b5f8135905061181f816117fb565b92915050565b5f806040838503121561183b5761183a611794565b5b5f611848858286016117de565b925050602061185985828601611811565b9150509250929050565b5f8115159050919050565b61187781611863565b82525050565b5f6020820190506118905f83018461186e565b92915050565b5f819050919050565b5f6118b96118b46118af84611798565b611896565b611798565b9050919050565b5f6118ca8261189f565b9050919050565b5f6118db826118c0565b9050919050565b6118eb816118d1565b82525050565b5f6020820190506119045f8301846118e2565b92915050565b611913816117f2565b82525050565b5f60208201905061192c5f83018461190a565b92915050565b5f805f6060848603121561194957611948611794565b5b5f611956868287016117de565b9350506020611967868287016117de565b925050604061197886828701611811565b9150509250925092565b5f60ff82169050919050565b61199781611982565b82525050565b5f6020820190506119b05f83018461198e565b92915050565b5f602082840312156119cb576119ca611794565b5b5f6119d8848285016117de565b91505092915050565b6119ea816117b7565b82525050565b5f602082019050611a035f8301846119e1565b92915050565b5f60208284031215611a1e57611a1d611794565b5b5f611a2b84828501611811565b91505092915050565b5f8060408385031215611a4a57611a49611794565b5b5f611a57858286016117de565b9250506020611a68858286016117de565b9150509250929050565b5f8060408385031215611a8857611a87611794565b5b5f611a9585828601611811565b9250506020611aa685828601611811565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611af457607f821691505b602082108103611b0757611b06611ab0565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611b44826117f2565b9150611b4f836117f2565b9250828201905080821115611b6757611b66611b0d565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f611bc76025836116f4565b9150611bd282611b6d565b604082019050919050565b5f6020820190508181035f830152611bf481611bbb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611c556026836116f4565b9150611c6082611bfb565b604082019050919050565b5f6020820190508181035f830152611c8281611c49565b9050919050565b7f54617820746f6f206869676800000000000000000000000000000000000000005f82015250565b5f611cbd600c836116f4565b9150611cc882611c89565b602082019050919050565b5f6020820190508181035f830152611cea81611cb1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611d4b6024836116f4565b9150611d5682611cf1565b604082019050919050565b5f6020820190508181035f830152611d7881611d3f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f611dd96022836116f4565b9150611de482611d7f565b604082019050919050565b5f6020820190508181035f830152611e0681611dcd565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f611e41601d836116f4565b9150611e4c82611e0d565b602082019050919050565b5f6020820190508181035f830152611e6e81611e35565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611ea96020836116f4565b9150611eb482611e75565b602082019050919050565b5f6020820190508181035f830152611ed681611e9d565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f611f376021836116f4565b9150611f4282611edd565b604082019050919050565b5f6020820190508181035f830152611f6481611f2b565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f611fc56022836116f4565b9150611fd082611f6b565b604082019050919050565b5f6020820190508181035f830152611ff281611fb9565b9050919050565b5f612003826117f2565b915061200e836117f2565b925082820261201c816117f2565b9150828204841483151761203357612032611b0d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612071826117f2565b915061207c836117f2565b92508261208c5761208b61203a565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6120f16021836116f4565b91506120fc82612097565b604082019050919050565b5f6020820190508181035f83015261211e816120e5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61217f6025836116f4565b915061218a82612125565b604082019050919050565b5f6020820190508181035f8301526121ac81612173565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61220d6023836116f4565b9150612218826121b3565b604082019050919050565b5f6020820190508181035f83015261223a81612201565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61229b6026836116f4565b91506122a682612241565b604082019050919050565b5f6020820190508181035f8301526122c88161228f565b9050919050565b5f6122d9826117f2565b91506122e4836117f2565b92508282039050818111156122fc576122fb611b0d565b5b9291505056fea264697066735822122082c692169a8e492cbffa42e4a210750f0e9ad4e4be6c6175d1a565d1bd4e3fc164736f6c63430008160033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610171575f3560e01c80635f1a90aa116100dc57806395d89b4111610095578063dd62ed3e1161006f578063dd62ed3e1461044f578063ea2f0b371461047f578063f2fde38b1461049b578063fe2314d6146104b757610171565b806395d89b41146103d1578063a457c2d7146103ef578063a9059cbb1461041f57610171565b80635f1a90aa1461030f5780636d1b229d1461033f57806370a082311461035b578063715018a61461038b5780637b208769146103955780638da5cb5b146103b357610171565b8063313ce5671161012e578063313ce5671461024d57806337ec5a241461026b578063395093511461028757806347062402146102b757806349bd5a5e146102d5578063508f6dfb146102f357610171565b806306fdde0314610175578063095ea7b3146101935780631694505e146101c357806318160ddd146101e157806323b872dd146101ff5780632b14ca561461022f575b5f80fd5b61017d6104d3565b60405161018a9190611774565b60405180910390f35b6101ad60048036038101906101a89190611825565b610563565b6040516101ba919061187d565b60405180910390f35b6101cb610585565b6040516101d891906118f1565b60405180910390f35b6101e96105a9565b6040516101f69190611919565b60405180910390f35b61021960048036038101906102149190611932565b6105b2565b604051610226919061187d565b60405180910390f35b6102376105e0565b6040516102449190611919565b60405180910390f35b6102556105e6565b604051610262919061199d565b60405180910390f35b610285600480360381019061028091906119b6565b6105ee565b005b6102a1600480360381019061029c9190611825565b610639565b6040516102ae919061187d565b60405180910390f35b6102bf61066f565b6040516102cc9190611919565b60405180910390f35b6102dd610675565b6040516102ea91906119f0565b60405180910390f35b61030d600480360381019061030891906119b6565b610699565b005b610329600480360381019061032491906119b6565b6106f9565b604051610336919061187d565b60405180910390f35b61035960048036038101906103549190611a09565b610716565b005b610375600480360381019061037091906119b6565b61072b565b6040516103829190611919565b60405180910390f35b610393610770565b005b61039d610783565b6040516103aa91906119f0565b60405180910390f35b6103bb6107a8565b6040516103c891906119f0565b60405180910390f35b6103d96107d0565b6040516103e69190611774565b60405180910390f35b61040960048036038101906104049190611825565b610860565b604051610416919061187d565b60405180910390f35b61043960048036038101906104349190611825565b6108d5565b604051610446919061187d565b60405180910390f35b61046960048036038101906104649190611a34565b6108f7565b6040516104769190611919565b60405180910390f35b610499600480360381019061049491906119b6565b610979565b005b6104b560048036038101906104b091906119b6565b6109d8565b005b6104d160048036038101906104cc9190611a72565b610a5a565b005b6060600380546104e290611add565b80601f016020809104026020016040519081016040528092919081815260200182805461050e90611add565b80156105595780601f1061053057610100808354040283529160200191610559565b820191905f5260205f20905b81548152906001019060200180831161053c57829003601f168201915b5050505050905090565b5f8061056d610afc565b905061057a818585610b03565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b5f806105bc610afc565b90506105c9858285610cc6565b6105d4858585610d51565b60019150509392505050565b60075481565b5f6012905090565b6105f6610fa4565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f80610643610afc565b905061066481858561065585896108f7565b61065f9190611b3a565b610b03565b600191505092915050565b60065481565b7f000000000000000000000000b7aec1c9b972d8330c7920b35ffad9e3c0cece8681565b6106a1610fa4565b600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6009602052805f5260405f205f915054906101000a900460ff1681565b61071e610fa4565b6107283382611022565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610778610fa4565b6107815f6111e5565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546107df90611add565b80601f016020809104026020016040519081016040528092919081815260200182805461080b90611add565b80156108565780601f1061082d57610100808354040283529160200191610856565b820191905f5260205f20905b81548152906001019060200180831161083957829003601f168201915b5050505050905090565b5f8061086a610afc565b90505f61087782866108f7565b9050838110156108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b390611bdd565b60405180910390fd5b6108c98286868403610b03565b60019250505092915050565b5f806108df610afc565b90506108ec818585610d51565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610981610fa4565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6109e0610fa4565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4590611c6b565b60405180910390fd5b610a57816111e5565b50565b610a62610fa4565b60fa821115610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90611cd3565b60405180910390fd5b60fa811115610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190611cd3565b60405180910390fd5b81600681905550806007819055505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6890611d61565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690611def565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610cb99190611919565b60405180910390a3505050565b5f610cd184846108f7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d4b5781811015610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3490611e57565b60405180910390fd5b610d4a8484848403610b03565b5b50505050565b5f81905060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015610df3575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610f93575f6006541115610ec5577f000000000000000000000000b7aec1c9b972d8330c7920b35ffad9e3c0cece8673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ec4575f610e7f6103e8610e71600654866112a890919063ffffffff16565b61131f90919063ffffffff16565b9050610e94818461136890919063ffffffff16565b9150610ec28560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836113b1565b505b5b5f6007541115610f92577f000000000000000000000000b7aec1c9b972d8330c7920b35ffad9e3c0cece8673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f91575f610f4c6103e8610f3e600754866112a890919063ffffffff16565b61131f90919063ffffffff16565b9050610f61818461136890919063ffffffff16565b9150610f8f8560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836113b1565b505b5b5b610f9e8484836113b1565b50505050565b610fac610afc565b73ffffffffffffffffffffffffffffffffffffffff16610fca6107a8565b73ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790611ebf565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108790611f4d565b60405180910390fd5b61109b825f8361161d565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111590611fdb565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111cd9190611919565b60405180910390a36111e0835f84611622565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8083036112b8575f9050611319565b5f82846112c59190611ff9565b90508284826112d49190612067565b14611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90612107565b60405180910390fd5b809150505b92915050565b5f61136083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611627565b905092915050565b5f6113a983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611688565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141690612195565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490612223565b60405180910390fd5b61149883838361161d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561151b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611512906122b1565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116049190611919565b60405180910390a3611617848484611622565b50505050565b505050565b505050565b5f808311829061166d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116649190611774565b60405180910390fd5b505f838561167b9190612067565b9050809150509392505050565b5f8383111582906116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c69190611774565b60405180910390fd5b505f83856116dd91906122cf565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611721578082015181840152602081019050611706565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611746826116ea565b61175081856116f4565b9350611760818560208601611704565b6117698161172c565b840191505092915050565b5f6020820190508181035f83015261178c818461173c565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117c182611798565b9050919050565b6117d1816117b7565b81146117db575f80fd5b50565b5f813590506117ec816117c8565b92915050565b5f819050919050565b611804816117f2565b811461180e575f80fd5b50565b5f8135905061181f816117fb565b92915050565b5f806040838503121561183b5761183a611794565b5b5f611848858286016117de565b925050602061185985828601611811565b9150509250929050565b5f8115159050919050565b61187781611863565b82525050565b5f6020820190506118905f83018461186e565b92915050565b5f819050919050565b5f6118b96118b46118af84611798565b611896565b611798565b9050919050565b5f6118ca8261189f565b9050919050565b5f6118db826118c0565b9050919050565b6118eb816118d1565b82525050565b5f6020820190506119045f8301846118e2565b92915050565b611913816117f2565b82525050565b5f60208201905061192c5f83018461190a565b92915050565b5f805f6060848603121561194957611948611794565b5b5f611956868287016117de565b9350506020611967868287016117de565b925050604061197886828701611811565b9150509250925092565b5f60ff82169050919050565b61199781611982565b82525050565b5f6020820190506119b05f83018461198e565b92915050565b5f602082840312156119cb576119ca611794565b5b5f6119d8848285016117de565b91505092915050565b6119ea816117b7565b82525050565b5f602082019050611a035f8301846119e1565b92915050565b5f60208284031215611a1e57611a1d611794565b5b5f611a2b84828501611811565b91505092915050565b5f8060408385031215611a4a57611a49611794565b5b5f611a57858286016117de565b9250506020611a68858286016117de565b9150509250929050565b5f8060408385031215611a8857611a87611794565b5b5f611a9585828601611811565b9250506020611aa685828601611811565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611af457607f821691505b602082108103611b0757611b06611ab0565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611b44826117f2565b9150611b4f836117f2565b9250828201905080821115611b6757611b66611b0d565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f611bc76025836116f4565b9150611bd282611b6d565b604082019050919050565b5f6020820190508181035f830152611bf481611bbb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611c556026836116f4565b9150611c6082611bfb565b604082019050919050565b5f6020820190508181035f830152611c8281611c49565b9050919050565b7f54617820746f6f206869676800000000000000000000000000000000000000005f82015250565b5f611cbd600c836116f4565b9150611cc882611c89565b602082019050919050565b5f6020820190508181035f830152611cea81611cb1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611d4b6024836116f4565b9150611d5682611cf1565b604082019050919050565b5f6020820190508181035f830152611d7881611d3f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f611dd96022836116f4565b9150611de482611d7f565b604082019050919050565b5f6020820190508181035f830152611e0681611dcd565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f611e41601d836116f4565b9150611e4c82611e0d565b602082019050919050565b5f6020820190508181035f830152611e6e81611e35565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611ea96020836116f4565b9150611eb482611e75565b602082019050919050565b5f6020820190508181035f830152611ed681611e9d565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f611f376021836116f4565b9150611f4282611edd565b604082019050919050565b5f6020820190508181035f830152611f6481611f2b565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f611fc56022836116f4565b9150611fd082611f6b565b604082019050919050565b5f6020820190508181035f830152611ff281611fb9565b9050919050565b5f612003826117f2565b915061200e836117f2565b925082820261201c816117f2565b9150828204841483151761203357612032611b0d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612071826117f2565b915061207c836117f2565b92508261208c5761208b61203a565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6120f16021836116f4565b91506120fc82612097565b604082019050919050565b5f6020820190508181035f83015261211e816120e5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61217f6025836116f4565b915061218a82612125565b604082019050919050565b5f6020820190508181035f8301526121ac81612173565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61220d6023836116f4565b9150612218826121b3565b604082019050919050565b5f6020820190508181035f83015261223a81612201565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61229b6026836116f4565b91506122a682612241565b604082019050919050565b5f6020820190508181035f8301526122c88161228f565b9050919050565b5f6122d9826117f2565b91506122e4836117f2565b92508282039050818111156122fc576122fb611b0d565b5b9291505056fea264697066735822122082c692169a8e492cbffa42e4a210750f0e9ad4e4be6c6175d1a565d1bd4e3fc164736f6c63430008160033

Deployed Bytecode Sourcemap

34363:2745:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9343:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11760:226;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34683:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10463:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12566:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34505:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10305:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36895:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13270:263;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34438:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34741:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36405:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34618:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37008:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10634:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2753:103;;;:::i;:::-;;34538:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2105:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9562:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14036:498;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10983:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11264:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36529:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3011:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36649;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9343:100;9397:13;9430:5;9423:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9343:100;:::o;11760:226::-;11868:4;11885:13;11901:12;:10;:12::i;:::-;11885:28;;11924:32;11933:5;11940:7;11949:6;11924:8;:32::i;:::-;11974:4;11967:11;;;11760:226;;;;:::o;34683:51::-;;;:::o;10463:108::-;10524:7;10551:12;;10544:19;;10463:108;:::o;12566:295::-;12697:4;12714:15;12732:12;:10;:12::i;:::-;12714:30;;12755:38;12771:4;12777:7;12786:6;12755:15;:38::i;:::-;12804:27;12814:4;12820:2;12824:6;12804:9;:27::i;:::-;12849:4;12842:11;;;12566:295;;;;;:::o;34505:26::-;;;;:::o;10305:93::-;10363:5;10388:2;10381:9;;10305:93;:::o;36895:105::-;1991:13;:11;:13::i;:::-;36985:7:::1;36969:13;;:23;;;;;;;;;;;;;;;;;;36895:105:::0;:::o;13270:263::-;13383:4;13400:13;13416:12;:10;:12::i;:::-;13400:28;;13439:64;13448:5;13455:7;13492:10;13464:25;13474:5;13481:7;13464:9;:25::i;:::-;:38;;;;:::i;:::-;13439:8;:64::i;:::-;13521:4;13514:11;;;13270:263;;;;:::o;34438:25::-;;;;:::o;34741:38::-;;;:::o;36405:116::-;1991:13;:11;:13::i;:::-;36509:4:::1;36476:21;:30;36498:7;36476:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;36405:116:::0;:::o;34618:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;37008:97::-;1991:13;:11;:13::i;:::-;37072:25:::1;37078:10;37090:6;37072:5;:25::i;:::-;37008:97:::0;:::o;10634:143::-;10724:7;10751:9;:18;10761:7;10751:18;;;;;;;;;;;;;;;;10744:25;;10634:143;;;:::o;2753:103::-;1991:13;:11;:13::i;:::-;2818:30:::1;2845:1;2818:18;:30::i;:::-;2753:103::o:0;34538:73::-;;;;;;;;;;;;;:::o;2105:87::-;2151:7;2178:6;;;;;;;;;;;2171:13;;2105:87;:::o;9562:104::-;9618:13;9651:7;9644:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9562:104;:::o;14036:498::-;14154:4;14171:13;14187:12;:10;:12::i;:::-;14171:28;;14210:24;14237:25;14247:5;14254:7;14237:9;:25::i;:::-;14210:52;;14315:15;14295:16;:35;;14273:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14431:60;14440:5;14447:7;14475:15;14456:16;:34;14431:8;:60::i;:::-;14522:4;14515:11;;;;14036:498;;;;:::o;10983:218::-;11087:4;11104:13;11120:12;:10;:12::i;:::-;11104:28;;11143;11153:5;11160:2;11164:6;11143:9;:28::i;:::-;11189:4;11182:11;;;10983:218;;;;:::o;11264:176::-;11378:7;11405:11;:18;11417:5;11405:18;;;;;;;;;;;;;;;:27;11424:7;11405:27;;;;;;;;;;;;;;;;11398:34;;11264:176;;;;:::o;36529:112::-;1991:13;:11;:13::i;:::-;36628:5:::1;36595:21;:30;36617:7;36595:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;36529:112:::0;:::o;3011:238::-;1991:13;:11;:13::i;:::-;3134:1:::1;3114:22;;:8;:22;;::::0;3092:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3213:28;3232:8;3213:18;:28::i;:::-;3011:238:::0;:::o;36649:::-;1991:13;:11;:13::i;:::-;36752:3:::1;36741:7;:14;;36733:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;36803:3;36791:8;:15;;36783:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;36843:7;36834:6;:16;;;;36871:8;36861:7;:18;;;;36649:238:::0;;:::o;656:98::-;709:7;736:10;729:17;;656:98;:::o;18162:380::-;18315:1;18298:19;;:5;:19;;;18290:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18396:1;18377:21;;:7;:21;;;18369:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18480:6;18450:11;:18;18462:5;18450:18;;;;;;;;;;;;;;;:27;18469:7;18450:27;;;;;;;;;;;;;;;:36;;;;18518:7;18502:32;;18511:5;18502:32;;;18527:6;18502:32;;;;;;:::i;:::-;;;;;;;;18162:380;;;:::o;18833:502::-;18968:24;18995:25;19005:5;19012:7;18995:9;:25::i;:::-;18968:52;;19055:17;19035:16;:37;19031:297;;19135:6;19115:16;:26;;19089:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19250:51;19259:5;19266:7;19294:6;19275:16;:25;19250:8;:51::i;:::-;19031:297;18957:378;18833:502;;;:::o;35505:892::-;35646:22;35671:6;35646:31;;35694:21;:29;35716:6;35694:29;;;;;;;;;;;;;;;;;;;;;;;;;35693:30;:67;;;;;35728:21;:32;35750:9;35728:32;;;;;;;;;;;;;;;;;;;;;;;;;35727:33;35693:67;35690:639;;;35786:1;35777:6;;:10;35774:263;;;35813:13;35803:23;;:6;:23;;;35799:227;;35867:11;35881:28;35904:4;35881:18;35892:6;;35881;:10;;:18;;;;:::i;:::-;:22;;:28;;;;:::i;:::-;35867:42;;35941:15;35952:3;35941:6;:10;;:15;;;;:::i;:::-;35924:32;;35971:43;35987:6;35995:13;;;;;;;;;;;36010:3;35971:15;:43::i;:::-;35828:198;35799:227;35774:263;36062:1;36052:7;;:11;36049:269;;;36092:13;36079:26;;:9;:26;;;36075:232;;36147:11;36161:29;36185:4;36161:19;36172:7;;36161:6;:10;;:19;;;;:::i;:::-;:23;;:29;;;;:::i;:::-;36147:43;;36222:15;36233:3;36222:6;:10;;:15;;;;:::i;:::-;36205:32;;36252:43;36268:6;36276:13;;;;;;;;;;;36291:3;36252:15;:43::i;:::-;36107:200;36075:232;36049:269;35690:639;36339:50;36355:6;36363:9;36374:14;36339:15;:50::i;:::-;35635:762;35505:892;;;:::o;2270:132::-;2345:12;:10;:12::i;:::-;2334:23;;:7;:5;:7::i;:::-;:23;;;2326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2270:132::o;17049:675::-;17152:1;17133:21;;:7;:21;;;17125:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17205:49;17226:7;17243:1;17247:6;17205:20;:49::i;:::-;17267:22;17292:9;:18;17302:7;17292:18;;;;;;;;;;;;;;;;17267:43;;17347:6;17329:14;:24;;17321:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17466:6;17449:14;:23;17428:9;:18;17438:7;17428:18;;;;;;;;;;;;;;;:44;;;;17583:6;17567:12;;:22;;;;;;;;;;;17644:1;17618:37;;17627:7;17618:37;;;17648:6;17618:37;;;;;;:::i;:::-;;;;;;;;17668:48;17688:7;17705:1;17709:6;17668:19;:48::i;:::-;17114:610;17049:675;;:::o;3409:191::-;3483:16;3502:6;;;;;;;;;;;3483:25;;3528:8;3519:6;;:17;;;;;;;;;;;;;;;;;;3583:8;3552:40;;3573:8;3552:40;;;;;;;;;;;;3472:128;3409:191;:::o;22513:471::-;22571:7;22821:1;22816;:6;22812:47;;22846:1;22839:8;;;;22812:47;22871:9;22887:1;22883;:5;;;;:::i;:::-;22871:17;;22916:1;22911;22907;:5;;;;:::i;:::-;:10;22899:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22975:1;22968:8;;;22513:471;;;;;:::o;23460:132::-;23518:7;23545:39;23549:1;23552;23545:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;23538:46;;23460:132;;;;:::o;21623:136::-;21681:7;21708:43;21712:1;21715;21708:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;21701:50;;21623:136;;;;:::o;15004:877::-;15151:1;15135:18;;:4;:18;;;15127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15228:1;15214:16;;:2;:16;;;15206:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15283:38;15304:4;15310:2;15314:6;15283:20;:38::i;:::-;15334:19;15356:9;:15;15366:4;15356:15;;;;;;;;;;;;;;;;15334:37;;15419:6;15404:11;:21;;15382:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;15559:6;15545:11;:20;15527:9;:15;15537:4;15527:15;;;;;;;;;;;;;;;:38;;;;15762:6;15745:9;:13;15755:2;15745:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15812:2;15797:26;;15806:4;15797:26;;;15816:6;15797:26;;;;;;:::i;:::-;;;;;;;;15836:37;15856:4;15862:2;15866:6;15836:19;:37::i;:::-;15116:765;15004:877;;;:::o;19935:125::-;;;;:::o;20664:124::-;;;;:::o;24088:278::-;24174:7;24206:1;24202;:5;24209:12;24194:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24233:9;24249:1;24245;:5;;;;:::i;:::-;24233:17;;24357:1;24350:8;;;24088:278;;;;;:::o;22062:192::-;22148:7;22181:1;22176;:6;;22184:12;22168:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;22208:9;22224:1;22220;:5;;;;:::i;:::-;22208:17;;22245:1;22238:8;;;22062:192;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:86::-;5436:7;5476:4;5469:5;5465:16;5454:27;;5401:86;;;:::o;5493:112::-;5576:22;5592:5;5576:22;:::i;:::-;5571:3;5564:35;5493:112;;:::o;5611:214::-;5700:4;5738:2;5727:9;5723:18;5715:26;;5751:67;5815:1;5804:9;5800:17;5791:6;5751:67;:::i;:::-;5611:214;;;;:::o;5831:329::-;5890:6;5939:2;5927:9;5918:7;5914:23;5910:32;5907:119;;;5945:79;;:::i;:::-;5907:119;6065:1;6090:53;6135:7;6126:6;6115:9;6111:22;6090:53;:::i;:::-;6080:63;;6036:117;5831:329;;;;:::o;6166:118::-;6253:24;6271:5;6253:24;:::i;:::-;6248:3;6241:37;6166:118;;:::o;6290:222::-;6383:4;6421:2;6410:9;6406:18;6398:26;;6434:71;6502:1;6491:9;6487:17;6478:6;6434:71;:::i;:::-;6290:222;;;;:::o;6518:329::-;6577:6;6626:2;6614:9;6605:7;6601:23;6597:32;6594:119;;;6632:79;;:::i;:::-;6594:119;6752:1;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6723:117;6518:329;;;;:::o;6853:474::-;6921:6;6929;6978:2;6966:9;6957:7;6953:23;6949:32;6946:119;;;6984:79;;:::i;:::-;6946:119;7104:1;7129:53;7174:7;7165:6;7154:9;7150:22;7129:53;:::i;:::-;7119:63;;7075:117;7231:2;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7202:118;6853:474;;;;;:::o;7333:::-;7401:6;7409;7458:2;7446:9;7437:7;7433:23;7429:32;7426:119;;;7464:79;;:::i;:::-;7426:119;7584:1;7609:53;7654:7;7645:6;7634:9;7630:22;7609:53;:::i;:::-;7599:63;;7555:117;7711:2;7737:53;7782:7;7773:6;7762:9;7758:22;7737:53;:::i;:::-;7727:63;;7682:118;7333:474;;;;;:::o;7813:180::-;7861:77;7858:1;7851:88;7958:4;7955:1;7948:15;7982:4;7979:1;7972:15;7999:320;8043:6;8080:1;8074:4;8070:12;8060:22;;8127:1;8121:4;8117:12;8148:18;8138:81;;8204:4;8196:6;8192:17;8182:27;;8138:81;8266:2;8258:6;8255:14;8235:18;8232:38;8229:84;;8285:18;;:::i;:::-;8229:84;8050:269;7999:320;;;:::o;8325:180::-;8373:77;8370:1;8363:88;8470:4;8467:1;8460:15;8494:4;8491:1;8484:15;8511:191;8551:3;8570:20;8588:1;8570:20;:::i;:::-;8565:25;;8604:20;8622:1;8604:20;:::i;:::-;8599:25;;8647:1;8644;8640:9;8633:16;;8668:3;8665:1;8662:10;8659:36;;;8675:18;;:::i;:::-;8659:36;8511:191;;;;:::o;8708:224::-;8848:34;8844:1;8836:6;8832:14;8825:58;8917:7;8912:2;8904:6;8900:15;8893:32;8708:224;:::o;8938:366::-;9080:3;9101:67;9165:2;9160:3;9101:67;:::i;:::-;9094:74;;9177:93;9266:3;9177:93;:::i;:::-;9295:2;9290:3;9286:12;9279:19;;8938:366;;;:::o;9310:419::-;9476:4;9514:2;9503:9;9499:18;9491:26;;9563:9;9557:4;9553:20;9549:1;9538:9;9534:17;9527:47;9591:131;9717:4;9591:131;:::i;:::-;9583:139;;9310:419;;;:::o;9735:225::-;9875:34;9871:1;9863:6;9859:14;9852:58;9944:8;9939:2;9931:6;9927:15;9920:33;9735:225;:::o;9966:366::-;10108:3;10129:67;10193:2;10188:3;10129:67;:::i;:::-;10122:74;;10205:93;10294:3;10205:93;:::i;:::-;10323:2;10318:3;10314:12;10307:19;;9966:366;;;:::o;10338:419::-;10504:4;10542:2;10531:9;10527:18;10519:26;;10591:9;10585:4;10581:20;10577:1;10566:9;10562:17;10555:47;10619:131;10745:4;10619:131;:::i;:::-;10611:139;;10338:419;;;:::o;10763:162::-;10903:14;10899:1;10891:6;10887:14;10880:38;10763:162;:::o;10931:366::-;11073:3;11094:67;11158:2;11153:3;11094:67;:::i;:::-;11087:74;;11170:93;11259:3;11170:93;:::i;:::-;11288:2;11283:3;11279:12;11272:19;;10931:366;;;:::o;11303:419::-;11469:4;11507:2;11496:9;11492:18;11484:26;;11556:9;11550:4;11546:20;11542:1;11531:9;11527:17;11520:47;11584:131;11710:4;11584:131;:::i;:::-;11576:139;;11303:419;;;:::o;11728:223::-;11868:34;11864:1;11856:6;11852:14;11845:58;11937:6;11932:2;11924:6;11920:15;11913:31;11728:223;:::o;11957:366::-;12099:3;12120:67;12184:2;12179:3;12120:67;:::i;:::-;12113:74;;12196:93;12285:3;12196:93;:::i;:::-;12314:2;12309:3;12305:12;12298:19;;11957:366;;;:::o;12329:419::-;12495:4;12533:2;12522:9;12518:18;12510:26;;12582:9;12576:4;12572:20;12568:1;12557:9;12553:17;12546:47;12610:131;12736:4;12610:131;:::i;:::-;12602:139;;12329:419;;;:::o;12754:221::-;12894:34;12890:1;12882:6;12878:14;12871:58;12963:4;12958:2;12950:6;12946:15;12939:29;12754:221;:::o;12981:366::-;13123:3;13144:67;13208:2;13203:3;13144:67;:::i;:::-;13137:74;;13220:93;13309:3;13220:93;:::i;:::-;13338:2;13333:3;13329:12;13322:19;;12981:366;;;:::o;13353:419::-;13519:4;13557:2;13546:9;13542:18;13534:26;;13606:9;13600:4;13596:20;13592:1;13581:9;13577:17;13570:47;13634:131;13760:4;13634:131;:::i;:::-;13626:139;;13353:419;;;:::o;13778:179::-;13918:31;13914:1;13906:6;13902:14;13895:55;13778:179;:::o;13963:366::-;14105:3;14126:67;14190:2;14185:3;14126:67;:::i;:::-;14119:74;;14202:93;14291:3;14202:93;:::i;:::-;14320:2;14315:3;14311:12;14304:19;;13963:366;;;:::o;14335:419::-;14501:4;14539:2;14528:9;14524:18;14516:26;;14588:9;14582:4;14578:20;14574:1;14563:9;14559:17;14552:47;14616:131;14742:4;14616:131;:::i;:::-;14608:139;;14335:419;;;:::o;14760:182::-;14900:34;14896:1;14888:6;14884:14;14877:58;14760:182;:::o;14948:366::-;15090:3;15111:67;15175:2;15170:3;15111:67;:::i;:::-;15104:74;;15187:93;15276:3;15187:93;:::i;:::-;15305:2;15300:3;15296:12;15289:19;;14948:366;;;:::o;15320:419::-;15486:4;15524:2;15513:9;15509:18;15501:26;;15573:9;15567:4;15563:20;15559:1;15548:9;15544:17;15537:47;15601:131;15727:4;15601:131;:::i;:::-;15593:139;;15320:419;;;:::o;15745:220::-;15885:34;15881:1;15873:6;15869:14;15862:58;15954:3;15949:2;15941:6;15937:15;15930:28;15745:220;:::o;15971:366::-;16113:3;16134:67;16198:2;16193:3;16134:67;:::i;:::-;16127:74;;16210:93;16299:3;16210:93;:::i;:::-;16328:2;16323:3;16319:12;16312:19;;15971:366;;;:::o;16343:419::-;16509:4;16547:2;16536:9;16532:18;16524:26;;16596:9;16590:4;16586:20;16582:1;16571:9;16567:17;16560:47;16624:131;16750:4;16624:131;:::i;:::-;16616:139;;16343:419;;;:::o;16768:221::-;16908:34;16904:1;16896:6;16892:14;16885:58;16977:4;16972:2;16964:6;16960:15;16953:29;16768:221;:::o;16995:366::-;17137:3;17158:67;17222:2;17217:3;17158:67;:::i;:::-;17151:74;;17234:93;17323:3;17234:93;:::i;:::-;17352:2;17347:3;17343:12;17336:19;;16995:366;;;:::o;17367:419::-;17533:4;17571:2;17560:9;17556:18;17548:26;;17620:9;17614:4;17610:20;17606:1;17595:9;17591:17;17584:47;17648:131;17774:4;17648:131;:::i;:::-;17640:139;;17367:419;;;:::o;17792:410::-;17832:7;17855:20;17873:1;17855:20;:::i;:::-;17850:25;;17889:20;17907:1;17889:20;:::i;:::-;17884:25;;17944:1;17941;17937:9;17966:30;17984:11;17966:30;:::i;:::-;17955:41;;18145:1;18136:7;18132:15;18129:1;18126:22;18106:1;18099:9;18079:83;18056:139;;18175:18;;:::i;:::-;18056:139;17840:362;17792:410;;;;:::o;18208:180::-;18256:77;18253:1;18246:88;18353:4;18350:1;18343:15;18377:4;18374:1;18367:15;18394:185;18434:1;18451:20;18469:1;18451:20;:::i;:::-;18446:25;;18485:20;18503:1;18485:20;:::i;:::-;18480:25;;18524:1;18514:35;;18529:18;;:::i;:::-;18514:35;18571:1;18568;18564:9;18559:14;;18394:185;;;;:::o;18585:220::-;18725:34;18721:1;18713:6;18709:14;18702:58;18794:3;18789:2;18781:6;18777:15;18770:28;18585:220;:::o;18811:366::-;18953:3;18974:67;19038:2;19033:3;18974:67;:::i;:::-;18967:74;;19050:93;19139:3;19050:93;:::i;:::-;19168:2;19163:3;19159:12;19152:19;;18811:366;;;:::o;19183:419::-;19349:4;19387:2;19376:9;19372:18;19364:26;;19436:9;19430:4;19426:20;19422:1;19411:9;19407:17;19400:47;19464:131;19590:4;19464:131;:::i;:::-;19456:139;;19183:419;;;:::o;19608:224::-;19748:34;19744:1;19736:6;19732:14;19725:58;19817:7;19812:2;19804:6;19800:15;19793:32;19608:224;:::o;19838:366::-;19980:3;20001:67;20065:2;20060:3;20001:67;:::i;:::-;19994:74;;20077:93;20166:3;20077:93;:::i;:::-;20195:2;20190:3;20186:12;20179:19;;19838:366;;;:::o;20210:419::-;20376:4;20414:2;20403:9;20399:18;20391:26;;20463:9;20457:4;20453:20;20449:1;20438:9;20434:17;20427:47;20491:131;20617:4;20491:131;:::i;:::-;20483:139;;20210:419;;;:::o;20635:222::-;20775:34;20771:1;20763:6;20759:14;20752:58;20844:5;20839:2;20831:6;20827:15;20820:30;20635:222;:::o;20863:366::-;21005:3;21026:67;21090:2;21085:3;21026:67;:::i;:::-;21019:74;;21102:93;21191:3;21102:93;:::i;:::-;21220:2;21215:3;21211:12;21204:19;;20863:366;;;:::o;21235:419::-;21401:4;21439:2;21428:9;21424:18;21416:26;;21488:9;21482:4;21478:20;21474:1;21463:9;21459:17;21452:47;21516:131;21642:4;21516:131;:::i;:::-;21508:139;;21235:419;;;:::o;21660:225::-;21800:34;21796:1;21788:6;21784:14;21777:58;21869:8;21864:2;21856:6;21852:15;21845:33;21660:225;:::o;21891:366::-;22033:3;22054:67;22118:2;22113:3;22054:67;:::i;:::-;22047:74;;22130:93;22219:3;22130:93;:::i;:::-;22248:2;22243:3;22239:12;22232:19;;21891:366;;;:::o;22263:419::-;22429:4;22467:2;22456:9;22452:18;22444:26;;22516:9;22510:4;22506:20;22502:1;22491:9;22487:17;22480:47;22544:131;22670:4;22544:131;:::i;:::-;22536:139;;22263:419;;;:::o;22688:194::-;22728:4;22748:20;22766:1;22748:20;:::i;:::-;22743:25;;22782:20;22800:1;22782:20;:::i;:::-;22777:25;;22826:1;22823;22819:9;22811:17;;22850:1;22844:4;22841:11;22838:37;;;22855:18;;:::i;:::-;22838:37;22688:194;;;;:::o

Swarm Source

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