ETH Price: $2,508.47 (-1.26%)

Token

Blitz (BLITZ)
 

Overview

Max Total Supply

100,000,000 BLITZ

Holders

79

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: BLITZ 10
Balance
472,500.525545899039642653 BLITZ

Value
$0.00
0x2046588a9c11d61bf0e89a5d7ef2575de77eba67
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:
BlitzToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-08
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;
pragma experimental ABIEncoderV2;

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

// pragma solidity ^0.8.0;

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

// pragma solidity ^0.8.0;

// import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * 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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        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);
    }
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

// pragma solidity ^0.8.0;

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

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

// pragma solidity ^0.8.0;

// import "../IERC20.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);
}

// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

// pragma solidity ^0.8.0;

// import "./IERC20.sol";
// import "./extensions/IERC20Metadata.sol";
// import "../../utils/Context.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].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual 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 {}
}

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

// pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.5.0;

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.6.2;

// import './IUniswapV2Router01.sol';

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public operationsWallet;
    address public futureComplianceWallet;
    address public marketingWallet;
    address public communitySportsFundWallet;
    address public autoBuyBotBuybacksWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 private buyOperationsFee;
    uint256 private buyFutureComplianceFee;
    uint256 private buyMarketingFee;
    uint256 private buyCommunitySportsFundFee;
    uint256 private buyAutoBuyBotBuybacksFee;

    uint256 public sellTotalFees;
    uint256 private sellOperationsFee;
    uint256 private sellFutureComplianceFee;
    uint256 private sellMarketingFee;
    uint256 private sellCommunitySportsFundFee;
    uint256 private sellAutoBuyBotBuybacksFee;

    uint256 private tokensForOperations;
    uint256 private tokensForFutureCompliance;
    uint256 private tokensForMarketing;
    uint256 private tokensForCommunitySportsFund;
    uint256 private tokensForAutoBuyBotBuybacks;
    uint256 private previousFee;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event operationsWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event futureComplianceWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event communitySportsFundWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event autoBuyBotBuybacksWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20("Blitz", "BLITZ") {
        uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        uint256 totalSupply = 100_000_000 ether;

        maxTransactionAmount = (totalSupply * 1) / 100;
        maxWallet = (totalSupply * 1) / 100;
        swapTokensAtAmount = (totalSupply * 1) / 1000;

        buyOperationsFee = 300;
        buyFutureComplianceFee = 200;
        buyMarketingFee = 500;
        buyCommunitySportsFundFee = 500;
        buyAutoBuyBotBuybacksFee = 500;
        buyTotalFees =
            buyOperationsFee +
            buyFutureComplianceFee +
            buyMarketingFee +
            buyCommunitySportsFundFee +
            buyAutoBuyBotBuybacksFee;

        sellOperationsFee = 500;
        sellFutureComplianceFee = 400;
        sellMarketingFee = 700;
        sellCommunitySportsFundFee = 700;
        sellAutoBuyBotBuybacksFee = 700;
        sellTotalFees =
            sellOperationsFee +
            sellFutureComplianceFee +
            sellMarketingFee +
            sellCommunitySportsFundFee +
            sellAutoBuyBotBuybacksFee;

        previousFee = sellTotalFees;

        operationsWallet = 0xD39618d5e773c6B144F81f028599470Ff7A3E23D;
        futureComplianceWallet = 0x7C23B73898d029D008bE635F8923b7Ce7ad1c8f3;
        marketingWallet = 0x47420e3c1340880Cd41eA3C5add6169dF2F9E4C0;
        communitySportsFundWallet = 0xc9f689bF1eCC2c262549589276e5F284B4393957;
        autoBuyBotBuybacksWallet = 0xF2be3FcA476f9EE7D98528Cda75eCf5751DfDe53;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        excludeFromFees(operationsWallet, true);
        excludeFromFees(futureComplianceWallet, true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(communitySportsFundWallet, true);
        excludeFromFees(autoBuyBotBuybacksWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(operationsWallet, true);
        excludeFromMaxTransaction(futureComplianceWallet, true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(communitySportsFundWallet, true);
        excludeFromMaxTransaction(autoBuyBotBuybacksWallet, true);

        _mint(owner(), (totalSupply * 90) / 100);
        _mint(address(this), (totalSupply * 10) / 100);
    }

    receive() external payable {}

    function burn(uint256 amount) external {
        _burn(msg.sender, amount);
    }

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Trading already active.");

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        _approve(address(this), address(uniswapV2Pair), type(uint256).max);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        tradingActive = true;
        swapEnabled = true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "ERC20: Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "ERC20: Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxWalletAndTxnAmount(
        uint256 newTxnNum,
        uint256 newMaxWalletNum
    ) external onlyOwner {
        require(
            newTxnNum >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxTxn lower than 0.5%"
        );
        require(
            newMaxWalletNum >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newMaxWalletNum;
        maxTransactionAmount = newTxnNum;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateBuyFees(
        uint256 _operationsFee,
        uint256 _futureComplianceFee,
        uint256 _marketingFee,
        uint256 _communitySportsFundFee,
        uint256 _autoBuyBotBuybacksFee
    ) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyFutureComplianceFee = _futureComplianceFee;
        buyMarketingFee = _marketingFee;
        buyCommunitySportsFundFee = _communitySportsFundFee;
        buyAutoBuyBotBuybacksFee = _autoBuyBotBuybacksFee;
        buyTotalFees =
            buyOperationsFee +
            buyFutureComplianceFee +
            buyMarketingFee +
            buyCommunitySportsFundFee +
            buyAutoBuyBotBuybacksFee;
        require(buyTotalFees <= 1000, "ERC20: Must keep fees at 10% or less");
    }

    function updateSellFees(
        uint256 _operationsFee,
        uint256 _futureComplianceFee,
        uint256 _marketingFee,
        uint256 _communitySportsFundFee,
        uint256 _autoBuyBotBuybacksFee
    ) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellFutureComplianceFee = _futureComplianceFee;
        sellMarketingFee = _marketingFee;
        sellCommunitySportsFundFee = _communitySportsFundFee;
        sellAutoBuyBotBuybacksFee = _autoBuyBotBuybacksFee;
        sellTotalFees =
            sellOperationsFee +
            sellFutureComplianceFee +
            sellMarketingFee +
            sellCommunitySportsFundFee +
            sellAutoBuyBotBuybacksFee;
        previousFee = sellTotalFees;
        require(sellTotalFees <= 1000, "ERC20: Must keep fees at 10% or less");
    }

    function updateOperationsWallet(address _operationsWallet)
        external
        onlyOwner
    {
        require(_operationsWallet != address(0), "ERC20: Address 0");
        address oldWallet = operationsWallet;
        operationsWallet = _operationsWallet;
        emit operationsWalletUpdated(operationsWallet, oldWallet);
    }

    function updateFutureComplianceWallet(address _futureComplianceWallet)
        external
        onlyOwner
    {
        require(_futureComplianceWallet != address(0), "ERC20: Address 0");
        address oldWallet = futureComplianceWallet;
        futureComplianceWallet = _futureComplianceWallet;
        emit futureComplianceWalletUpdated(futureComplianceWallet, oldWallet);
    }

    function updateMarketingWallet(address _marketingWallet)
        external
        onlyOwner
    {
        require(_marketingWallet != address(0), "ERC20: Address 0");
        address oldWallet = marketingWallet;
        marketingWallet = _marketingWallet;
        emit marketingWalletUpdated(marketingWallet, oldWallet);
    }

    function updateCommunitySportsFundWallet(address _communitySportsFundWallet)
        external
        onlyOwner
    {
        require(_communitySportsFundWallet != address(0), "ERC20: Address 0");
        address oldWallet = communitySportsFundWallet;
        communitySportsFundWallet = _communitySportsFundWallet;
        emit communitySportsFundWalletUpdated(
            communitySportsFundWallet,
            oldWallet
        );
    }

    function updateAutoBuyBotBuybacksWallet(address _autoBuyBotBuybacksWallet)
        external
        onlyOwner
    {
        require(_autoBuyBotBuybacksWallet != address(0), "ERC20: Address 0");
        address oldWallet = autoBuyBotBuybacksWallet;
        autoBuyBotBuybacksWallet = _autoBuyBotBuybacksWallet;
        emit autoBuyBotBuybacksWalletUpdated(
            autoBuyBotBuybacksWallet,
            oldWallet
        );
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function withdrawStuckETH() public onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }

    function withdrawStuckTokens(address tkn) public onlyOwner {
        require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
        uint256 amount = IERC20(tkn).balanceOf(address(this));
        IERC20(tkn).transfer(msg.sender, amount);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != deadAddress &&
            !swapping
        ) {
            if (!tradingActive) {
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "ERC20: Trading is not active."
                );
            }

            //when buy
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "ERC20: Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
            //when sell
            else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "ERC20: Sell transfer amount exceeds the maxTransactionAmount."
                );
            } else if (!_isExcludedMaxTransactionAmount[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(10000);
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
                tokensForFutureCompliance +=
                    (fees * sellFutureComplianceFee) /
                    sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForCommunitySportsFund +=
                    (fees * sellCommunitySportsFundFee) /
                    sellTotalFees;
                tokensForAutoBuyBotBuybacks +=
                    (fees * sellAutoBuyBotBuybacksFee) /
                    sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(10000);
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
                tokensForFutureCompliance +=
                    (fees * buyFutureComplianceFee) /
                    buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForCommunitySportsFund +=
                    (fees * buyCommunitySportsFundFee) /
                    buyTotalFees;
                tokensForAutoBuyBotBuybacks +=
                    (fees * buyAutoBuyBotBuybacksFee) /
                    buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
        sellTotalFees = previousFee;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));

        uint256 totalTokensToSwap = tokensForOperations +
            tokensForFutureCompliance +
            tokensForMarketing +
            tokensForCommunitySportsFund +
            tokensForAutoBuyBotBuybacks;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 10) {
            contractBalance = swapTokensAtAmount * 10;
        }

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(
            totalTokensToSwap
        );

        uint256 ethForFutureCompliance = ethBalance
            .mul(tokensForFutureCompliance)
            .div(totalTokensToSwap);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForCommunitySportsFund = ethBalance
            .mul(tokensForCommunitySportsFund)
            .div(totalTokensToSwap);

        tokensForOperations = 0;
        tokensForFutureCompliance = 0;
        tokensForMarketing = 0;
        tokensForCommunitySportsFund = 0;
        tokensForAutoBuyBotBuybacks = 0;

        (success, ) = address(operationsWallet).call{value: ethForOperations}(
            ""
        );

        (success, ) = address(futureComplianceWallet).call{
            value: ethForFutureCompliance
        }("");

        (success, ) = address(marketingWallet).call{value: ethForMarketing}("");

        (success, ) = address(communitySportsFundWallet).call{
            value: ethForCommunitySportsFund
        }("");

        (success, ) = address(autoBuyBotBuybacksWallet).call{
            value: address(this).balance
        }("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"autoBuyBotBuybacksWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"communitySportsFundWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"futureComplianceWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"operationsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBuyBotBuybacksWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communitySportsFundWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"futureComplianceWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_autoBuyBotBuybacksWallet","type":"address"}],"name":"updateAutoBuyBotBuybacksWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_futureComplianceFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_communitySportsFundFee","type":"uint256"},{"internalType":"uint256","name":"_autoBuyBotBuybacksFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_communitySportsFundWallet","type":"address"}],"name":"updateCommunitySportsFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_futureComplianceWallet","type":"address"}],"name":"updateFutureComplianceWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsWallet","type":"address"}],"name":"updateOperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_futureComplianceFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_communitySportsFundFee","type":"uint256"},{"internalType":"uint256","name":"_autoBuyBotBuybacksFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600f805461ffff191690553480156200001c57600080fd5b5060405180604001604052806005815260200164213634ba3d60d91b81525060405180604001604052806005815260200164212624aa2d60d91b81525081600390816200006a91906200083e565b5060046200007982826200083e565b50505062000096620000906200045460201b60201c565b62000458565b737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052620000c0903090600019620004aa565b6a52b7d2dcc80cd2e40000006064620000db82600162000920565b620000e7919062000940565b600c556064620000f982600162000920565b62000105919062000940565b600e556103e86200011882600162000920565b62000124919062000940565b600d5561012c601181905560c860128190556101f4601381905560148190556015819055918291829162000159919062000963565b62000165919062000963565b62000171919062000963565b6200017d919062000963565b6010556101f4601781905561019060188190556102bc6019819055601a819055601b8190559182918291620001b3919062000963565b620001bf919062000963565b620001cb919062000963565b620001d7919062000963565b6016819055602155600780546001600160a01b031990811673d39618d5e773c6b144f81f028599470ff7a3e23d17909155600880548216737c23b73898d029d008be635f8923b7ce7ad1c8f31790556009805482167347420e3c1340880cd41ea3c5add6169df2f9e4c0179055600a8054821673c9f689bf1ecc2c262549589276e5f284b4393957179055600b805490911673f2be3fca476f9ee7d98528cda75ecf5751dfde53179055620002a0620002986005546001600160a01b031690565b6001620005d6565b620002ad306001620005d6565b620002bc61dead6001620005d6565b600754620002d5906001600160a01b03166001620005d6565b600854620002ee906001600160a01b03166001620005d6565b60095462000307906001600160a01b03166001620005d6565b600a5462000320906001600160a01b03166001620005d6565b600b5462000339906001600160a01b03166001620005d6565b62000358620003506005546001600160a01b031690565b60016200063f565b620003653060016200063f565b6200037461dead60016200063f565b608051620003849060016200063f565b6007546200039d906001600160a01b031660016200063f565b600854620003b6906001600160a01b031660016200063f565b600954620003cf906001600160a01b031660016200063f565b600a54620003e8906001600160a01b031660016200063f565b600b5462000401906001600160a01b031660016200063f565b62000439620004186005546001600160a01b031690565b60646200042784605a62000920565b62000433919062000940565b62000674565b6200044d3060646200042784600a62000920565b5062000979565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316620005125760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620005755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000509565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b620005e062000737565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6200064962000737565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6001600160a01b038216620006cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000509565b8060026000828254620006e0919062000963565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620007935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000509565b565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007c557607f821691505b602082108103620007e657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200079557600081815260208120601f850160051c81016020861015620008155750805b601f850160051c820191505b81811015620008365782815560010162000821565b505050505050565b81516001600160401b038111156200085a576200085a6200079a565b62000872816200086b8454620007b0565b84620007ec565b602080601f831160018114620008aa5760008415620008915750858301515b600019600386901b1c1916600185901b17855562000836565b600085815260208120601f198616915b82811015620008db57888601518255948401946001909101908401620008ba565b5085821015620008fa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200093a576200093a6200090a565b92915050565b6000826200095e57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200093a576200093a6200090a565b608051612cf9620009c6600039600081816102ef01528181610ace01528181610b5f01528181610c9701528181610d46015281816126c90152818161278201526127be0152612cf96000f3fe6080604052600436106102765760003560e01c80638a8c523c1161014f578063c8c8ebe4116100c1578063f170d7fd1161007a578063f170d7fd14610779578063f2fde38b14610799578063f5648a4f146107b9578063f8b45b05146107ce578063fd72e22a146107e4578063ff935af61461080457600080fd5b8063c8c8ebe4146106d7578063cb963728146106ed578063d257b34f1461070d578063d85ba0631461072d578063dd62ed3e14610743578063e2f456051461076357600080fd5b8063a457c2d711610113578063a457c2d71461061d578063a9059cbb1461063d578063aacebbe31461065d578063bbc0c7421461067d578063c024666814610697578063c6071135146106b757600080fd5b80638a8c523c146105955780638da5cb5b146105aa57806395376050146105c857806395d89b41146105e857806396188399146105fd57600080fd5b806349bd5a5e116101e85780636a486a8e116101ac5780636a486a8e146104d55780636ddd1713146104eb57806370a082311461050a578063715018a6146105405780637571336a1461055557806375f0a8741461057557600080fd5b806349bd5a5e1461041c5780634d8f105e1461043c5780634fbee1931461045c57806354ae67471461049557806355062e84146104b557600080fd5b806327c8f8351161023a57806327c8f8351461036857806330d5d18d1461037e578063313ce567146103a057806339509351146103bc57806342966c68146103dc57806343c8d20e146103fc57600080fd5b806306fdde0314610282578063095ea7b3146102ad5780631694505e146102dd57806318160ddd1461032957806323b872dd1461034857600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610824565b6040516102a4919061283e565b60405180910390f35b3480156102b957600080fd5b506102cd6102c83660046128a1565b6108b6565b60405190151581526020016102a4565b3480156102e957600080fd5b506103117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a4565b34801561033557600080fd5b506002545b6040519081526020016102a4565b34801561035457600080fd5b506102cd6103633660046128cd565b6108d0565b34801561037457600080fd5b5061031161dead81565b34801561038a57600080fd5b5061039e61039936600461290e565b6108f4565b005b3480156103ac57600080fd5b50604051601281526020016102a4565b3480156103c857600080fd5b506102cd6103d73660046128a1565b61097c565b3480156103e857600080fd5b5061039e6103f736600461292b565b61099e565b34801561040857600080fd5b50600a54610311906001600160a01b031681565b34801561042857600080fd5b50600654610311906001600160a01b031681565b34801561044857600080fd5b5061039e61045736600461290e565b6109ab565b34801561046857600080fd5b506102cd61047736600461290e565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156104a157600080fd5b50600b54610311906001600160a01b031681565b3480156104c157600080fd5b50600854610311906001600160a01b031681565b3480156104e157600080fd5b5061033a60165481565b3480156104f757600080fd5b50600f546102cd90610100900460ff1681565b34801561051657600080fd5b5061033a61052536600461290e565b6001600160a01b031660009081526020819052604090205490565b34801561054c57600080fd5b5061039e610a2a565b34801561056157600080fd5b5061039e610570366004612952565b610a3e565b34801561058157600080fd5b50600954610311906001600160a01b031681565b3480156105a157600080fd5b5061039e610a71565b3480156105b657600080fd5b506005546001600160a01b0316610311565b3480156105d457600080fd5b5061039e6105e336600461290e565b610e4a565b3480156105f457600080fd5b50610297610ec9565b34801561060957600080fd5b5061039e61061836600461298b565b610ed8565b34801561062957600080fd5b506102cd6106383660046128a1565b610fed565b34801561064957600080fd5b506102cd6106583660046128a1565b611068565b34801561066957600080fd5b5061039e61067836600461290e565b611076565b34801561068957600080fd5b50600f546102cd9060ff1681565b3480156106a357600080fd5b5061039e6106b2366004612952565b6110f5565b3480156106c357600080fd5b5061039e6106d236600461290e565b61115c565b3480156106e357600080fd5b5061033a600c5481565b3480156106f957600080fd5b5061039e61070836600461290e565b6111db565b34801561071957600080fd5b506102cd61072836600461292b565b61136b565b34801561073957600080fd5b5061033a60105481565b34801561074f57600080fd5b5061033a61075e3660046129ad565b6114ab565b34801561076f57600080fd5b5061033a600d5481565b34801561078557600080fd5b5061039e6107943660046129db565b6114d6565b3480156107a557600080fd5b5061039e6107b436600461290e565b61154f565b3480156107c557600080fd5b5061039e6115c5565b3480156107da57600080fd5b5061033a600e5481565b3480156107f057600080fd5b50600754610311906001600160a01b031681565b34801561081057600080fd5b5061039e61081f3660046129db565b61161a565b60606003805461083390612a16565b80601f016020809104026020016040519081016040528092919081815260200182805461085f90612a16565b80156108ac5780601f10610881576101008083540402835291602001916108ac565b820191906000526020600020905b81548152906001019060200180831161088f57829003601f168201915b5050505050905090565b6000336108c4818585611691565b60019150505b92915050565b6000336108de8582856117b5565b6108e9858585611829565b506001949350505050565b6108fc612015565b6001600160a01b03811661092b5760405162461bcd60e51b815260040161092290612a50565b60405180910390fd5b600780546001600160a01b038381166001600160a01b03198316811790935560405191169182917fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c90600090a35050565b6000336108c481858561098f83836114ab565b6109999190612a90565b611691565b6109a8338261206f565b50565b6109b3612015565b6001600160a01b0381166109d95760405162461bcd60e51b815260040161092290612a50565b600b80546001600160a01b038381166001600160a01b03198316811790935560405191169182917f0e3726396feec2fa47939776b508974e9dfae46f6c9a754b385edc044815951d90600090a35050565b610a32612015565b610a3c60006121a1565b565b610a46612015565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b610a79612015565b600f5460ff1615610acc5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c7265616479206163746976652e0000000000000000006044820152606401610922565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4e9190612aa3565b6001600160a01b031663c9c65396307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdf9190612aa3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c509190612aa3565b600680546001600160a01b0319166001600160a01b03929092169182179055610c7d903090600019611691565b60065460405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af1158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d159190612ac0565b50600654610d2d906001600160a01b031660016121f3565b600654610d44906001600160a01b03166001610a3e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7194730610d94306001600160a01b031660009081526020819052604090205490565b600080610da96005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610e11573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e369190612add565b5050600f805461ffff191661010117905550565b610e52612015565b6001600160a01b038116610e785760405162461bcd60e51b815260040161092290612a50565b600880546001600160a01b038381166001600160a01b03198316811790935560405191169182917f1f4ec6f376ccea6c86163d8834072c9e7dd1141ba34848d1b9a0325b12c8619a90600090a35050565b60606004805461083390612a16565b610ee0612015565b6103e8610eec60025490565b610ef7906005612b0b565b610f019190612b22565b821015610f615760405162461bcd60e51b815260206004820152602860248201527f45524332303a2043616e6e6f7420736574206d617854786e206c6f776572207460448201526768616e20302e352560c01b6064820152608401610922565b6103e8610f6d60025490565b610f78906005612b0b565b610f829190612b22565b811015610fe55760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f776560448201526a72207468616e20302e352560a81b6064820152608401610922565b600e55600c55565b60003381610ffb82866114ab565b90508381101561105b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610922565b6108e98286868403611691565b6000336108c4818585611829565b61107e612015565b6001600160a01b0381166110a45760405162461bcd60e51b815260040161092290612a50565b600980546001600160a01b038381166001600160a01b03198316811790935560405191169182917fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a35050565b6110fd612015565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611164612015565b6001600160a01b03811661118a5760405162461bcd60e51b815260040161092290612a50565b600a80546001600160a01b038381166001600160a01b03198316811790935560405191169182917f7ae422255ce5ebea0273d064020e021db7f43ec474afaa7c3640b97033f3ac8290600090a35050565b6111e3612015565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561122a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124e9190612b44565b116112875760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610922565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156112ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f29190612b44565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113669190612ac0565b505050565b6000611375612015565b620186a061138260025490565b61138d906001612b0b565b6113979190612b22565b82101561140c5760405162461bcd60e51b815260206004820152603c60248201527f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f7760448201527f6572207468616e20302e3030312520746f74616c20737570706c792e000000006064820152608401610922565b6103e861141860025490565b611423906005612b0b565b61142d9190612b22565b8211156114a25760405162461bcd60e51b815260206004820152603b60248201527f45524332303a205377617020616d6f756e742063616e6e6f742062652068696760448201527f686572207468616e20302e352520746f74616c20737570706c792e00000000006064820152608401610922565b50600d55600190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6114de612015565b601185905560128490556013839055601482905560158190558082846115048789612a90565b61150e9190612a90565b6115189190612a90565b6115229190612a90565b60108190556103e810156115485760405162461bcd60e51b815260040161092290612b5d565b5050505050565b611557612015565b6001600160a01b0381166115bc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610922565b6109a8816121a1565b6115cd612015565b604051600090339047908381818185875af1925050503d806000811461160f576040519150601f19603f3d011682016040523d82523d6000602084013e611614565b606091505b50505050565b611622612015565b601785905560188490556019839055601a829055601b8190558082846116488789612a90565b6116529190612a90565b61165c9190612a90565b6116669190612a90565b601681905560218190556103e810156115485760405162461bcd60e51b815260040161092290612b5d565b6001600160a01b0383166116f35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610922565b6001600160a01b0382166117545760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610922565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006117c184846114ab565b90506000198114611614578181101561181c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610922565b6116148484848403611691565b6001600160a01b03831661184f5760405162461bcd60e51b815260040161092290612ba1565b6001600160a01b0382166118755760405162461bcd60e51b815260040161092290612be6565b806000036118895761136683836000612247565b6005546001600160a01b038481169116148015906118b557506005546001600160a01b03838116911614155b80156118c957506001600160a01b03821615155b80156118e057506001600160a01b03821661dead14155b80156118f65750600654600160a01b900460ff16155b15611c1957600f5460ff16611990576001600160a01b03831660009081526022602052604090205460ff168061194457506001600160a01b03821660009081526022602052604090205460ff165b6119905760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e0000006044820152606401610922565b6001600160a01b03831660009081526024602052604090205460ff1680156119d157506001600160a01b03821660009081526023602052604090205460ff16155b15611ac757600c54811115611a4e5760405162461bcd60e51b815260206004820152603c60248201527f45524332303a20427579207472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e742e000000006064820152608401610922565b600e546001600160a01b038316600090815260208190526040902054611a749083612a90565b1115611ac25760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c65742065786365656465640000000000006044820152606401610922565b611c19565b6001600160a01b03821660009081526024602052604090205460ff168015611b0857506001600160a01b03831660009081526023602052604090205460ff16155b15611b8557600c54811115611ac25760405162461bcd60e51b815260206004820152603d60248201527f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560448201527f65647320746865206d61785472616e73616374696f6e416d6f756e742e0000006064820152608401610922565b6001600160a01b03821660009081526023602052604090205460ff16611c1957600e546001600160a01b038316600090815260208190526040902054611bcb9083612a90565b1115611c195760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c65742065786365656465640000000000006044820152606401610922565b30600090815260208190526040902054600d5481108015908190611c445750600f54610100900460ff165b8015611c5a5750600654600160a01b900460ff16155b8015611c7f57506001600160a01b03851660009081526024602052604090205460ff16155b8015611ca457506001600160a01b03851660009081526022602052604090205460ff16155b8015611cc957506001600160a01b03841660009081526022602052604090205460ff16155b15611cf7576006805460ff60a01b1916600160a01b179055611ce9612371565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526022602052604090205460ff600160a01b909204821615911680611d4557506001600160a01b03851660009081526022602052604090205460ff165b15611d4e575060005b60008115611ffb576001600160a01b03861660009081526024602052604090205460ff168015611d8057506000601654115b15611e9f57611da6612710611da06016548861265390919063ffffffff16565b90612666565b905060165460175482611db99190612b0b565b611dc39190612b22565b601c6000828254611dd49190612a90565b9091555050601654601854611de99083612b0b565b611df39190612b22565b601d6000828254611e049190612a90565b9091555050601654601954611e199083612b0b565b611e239190612b22565b601e6000828254611e349190612a90565b9091555050601654601a54611e499083612b0b565b611e539190612b22565b601f6000828254611e649190612a90565b9091555050601654601b54611e799083612b0b565b611e839190612b22565b60206000828254611e949190612a90565b90915550611fdd9050565b6001600160a01b03871660009081526024602052604090205460ff168015611ec957506000601054115b15611fdd57611ee9612710611da06010548861265390919063ffffffff16565b905060105460115482611efc9190612b0b565b611f069190612b22565b601c6000828254611f179190612a90565b9091555050601054601254611f2c9083612b0b565b611f369190612b22565b601d6000828254611f479190612a90565b9091555050601054601354611f5c9083612b0b565b611f669190612b22565b601e6000828254611f779190612a90565b9091555050601054601454611f8c9083612b0b565b611f969190612b22565b601f6000828254611fa79190612a90565b9091555050601054601554611fbc9083612b0b565b611fc69190612b22565b60206000828254611fd79190612a90565b90915550505b8015611fee57611fee873083612247565b611ff88186612c29565b94505b612006878787612247565b50506021546016555050505050565b6005546001600160a01b03163314610a3c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610922565b6001600160a01b0382166120cf5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610922565b6001600160a01b038216600090815260208190526040902054818110156121435760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610922565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260246020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661226d5760405162461bcd60e51b815260040161092290612ba1565b6001600160a01b0382166122935760405162461bcd60e51b815260040161092290612be6565b6001600160a01b0383166000908152602081905260409020548181101561230b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610922565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611614565b3060009081526020819052604081205490506000602054601f54601e54601d54601c5461239e9190612a90565b6123a89190612a90565b6123b29190612a90565b6123bc9190612a90565b905060008215806123cb575081155b156123d557505050565b600d546123e390600a612b0b565b8311156123fb57600d546123f890600a612b0b565b92505b4761240584612672565b60006124114783612832565b9050600061242e85611da0601c548561265390919063ffffffff16565b9050600061244b86611da0601d548661265390919063ffffffff16565b9050600061246887611da0601e548761265390919063ffffffff16565b9050600061248588611da0601f548861265390919063ffffffff16565b6000601c819055601d819055601e819055601f81905560208190556007546040519293506001600160a01b031691869181818185875af1925050503d80600081146124ec576040519150601f19603f3d011682016040523d82523d6000602084013e6124f1565b606091505b50506008546040519198506001600160a01b0316908490600081818185875af1925050503d8060008114612541576040519150601f19603f3d011682016040523d82523d6000602084013e612546565b606091505b50506009546040519198506001600160a01b0316908390600081818185875af1925050503d8060008114612596576040519150601f19603f3d011682016040523d82523d6000602084013e61259b565b606091505b5050600a546040519198506001600160a01b0316908290600081818185875af1925050503d80600081146125eb576040519150601f19603f3d011682016040523d82523d6000602084013e6125f0565b606091505b5050600b546040519198506001600160a01b0316904790600081818185875af1925050503d8060008114612640576040519150601f19603f3d011682016040523d82523d6000602084013e612645565b606091505b505050505050505050505050565b600061265f8284612b0b565b9392505050565b600061265f8284612b22565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126a7576126a7612c3c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127499190612aa3565b8160018151811061275c5761275c612c3c565b60200260200101906001600160a01b031690816001600160a01b0316815250506127a7307f000000000000000000000000000000000000000000000000000000000000000084611691565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906127fc908590600090869030904290600401612c52565b600060405180830381600087803b15801561281657600080fd5b505af115801561282a573d6000803e3d6000fd5b505050505050565b600061265f8284612c29565b600060208083528351808285015260005b8181101561286b5785810183015185820160400152820161284f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146109a857600080fd5b600080604083850312156128b457600080fd5b82356128bf8161288c565b946020939093013593505050565b6000806000606084860312156128e257600080fd5b83356128ed8161288c565b925060208401356128fd8161288c565b929592945050506040919091013590565b60006020828403121561292057600080fd5b813561265f8161288c565b60006020828403121561293d57600080fd5b5035919050565b80151581146109a857600080fd5b6000806040838503121561296557600080fd5b82356129708161288c565b9150602083013561298081612944565b809150509250929050565b6000806040838503121561299e57600080fd5b50508035926020909101359150565b600080604083850312156129c057600080fd5b82356129cb8161288c565b915060208301356129808161288c565b600080600080600060a086880312156129f357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c90821680612a2a57607f821691505b602082108103612a4a57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f045524332303a204164647265737320360841b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156108ca576108ca612a7a565b600060208284031215612ab557600080fd5b815161265f8161288c565b600060208284031215612ad257600080fd5b815161265f81612944565b600080600060608486031215612af257600080fd5b8351925060208401519150604084015190509250925092565b80820281158282048414176108ca576108ca612a7a565b600082612b3f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612b5657600080fd5b5051919050565b60208082526024908201527f45524332303a204d757374206b656570206665657320617420313025206f72206040820152636c65737360e01b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156108ca576108ca612a7a565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612ca25784516001600160a01b031683529383019391830191600101612c7d565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220c666e3b3451df06c04b01b7bef552416e32639299c17ce2ce0fdf96f256f4cad64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102765760003560e01c80638a8c523c1161014f578063c8c8ebe4116100c1578063f170d7fd1161007a578063f170d7fd14610779578063f2fde38b14610799578063f5648a4f146107b9578063f8b45b05146107ce578063fd72e22a146107e4578063ff935af61461080457600080fd5b8063c8c8ebe4146106d7578063cb963728146106ed578063d257b34f1461070d578063d85ba0631461072d578063dd62ed3e14610743578063e2f456051461076357600080fd5b8063a457c2d711610113578063a457c2d71461061d578063a9059cbb1461063d578063aacebbe31461065d578063bbc0c7421461067d578063c024666814610697578063c6071135146106b757600080fd5b80638a8c523c146105955780638da5cb5b146105aa57806395376050146105c857806395d89b41146105e857806396188399146105fd57600080fd5b806349bd5a5e116101e85780636a486a8e116101ac5780636a486a8e146104d55780636ddd1713146104eb57806370a082311461050a578063715018a6146105405780637571336a1461055557806375f0a8741461057557600080fd5b806349bd5a5e1461041c5780634d8f105e1461043c5780634fbee1931461045c57806354ae67471461049557806355062e84146104b557600080fd5b806327c8f8351161023a57806327c8f8351461036857806330d5d18d1461037e578063313ce567146103a057806339509351146103bc57806342966c68146103dc57806343c8d20e146103fc57600080fd5b806306fdde0314610282578063095ea7b3146102ad5780631694505e146102dd57806318160ddd1461032957806323b872dd1461034857600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610824565b6040516102a4919061283e565b60405180910390f35b3480156102b957600080fd5b506102cd6102c83660046128a1565b6108b6565b60405190151581526020016102a4565b3480156102e957600080fd5b506103117f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102a4565b34801561033557600080fd5b506002545b6040519081526020016102a4565b34801561035457600080fd5b506102cd6103633660046128cd565b6108d0565b34801561037457600080fd5b5061031161dead81565b34801561038a57600080fd5b5061039e61039936600461290e565b6108f4565b005b3480156103ac57600080fd5b50604051601281526020016102a4565b3480156103c857600080fd5b506102cd6103d73660046128a1565b61097c565b3480156103e857600080fd5b5061039e6103f736600461292b565b61099e565b34801561040857600080fd5b50600a54610311906001600160a01b031681565b34801561042857600080fd5b50600654610311906001600160a01b031681565b34801561044857600080fd5b5061039e61045736600461290e565b6109ab565b34801561046857600080fd5b506102cd61047736600461290e565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156104a157600080fd5b50600b54610311906001600160a01b031681565b3480156104c157600080fd5b50600854610311906001600160a01b031681565b3480156104e157600080fd5b5061033a60165481565b3480156104f757600080fd5b50600f546102cd90610100900460ff1681565b34801561051657600080fd5b5061033a61052536600461290e565b6001600160a01b031660009081526020819052604090205490565b34801561054c57600080fd5b5061039e610a2a565b34801561056157600080fd5b5061039e610570366004612952565b610a3e565b34801561058157600080fd5b50600954610311906001600160a01b031681565b3480156105a157600080fd5b5061039e610a71565b3480156105b657600080fd5b506005546001600160a01b0316610311565b3480156105d457600080fd5b5061039e6105e336600461290e565b610e4a565b3480156105f457600080fd5b50610297610ec9565b34801561060957600080fd5b5061039e61061836600461298b565b610ed8565b34801561062957600080fd5b506102cd6106383660046128a1565b610fed565b34801561064957600080fd5b506102cd6106583660046128a1565b611068565b34801561066957600080fd5b5061039e61067836600461290e565b611076565b34801561068957600080fd5b50600f546102cd9060ff1681565b3480156106a357600080fd5b5061039e6106b2366004612952565b6110f5565b3480156106c357600080fd5b5061039e6106d236600461290e565b61115c565b3480156106e357600080fd5b5061033a600c5481565b3480156106f957600080fd5b5061039e61070836600461290e565b6111db565b34801561071957600080fd5b506102cd61072836600461292b565b61136b565b34801561073957600080fd5b5061033a60105481565b34801561074f57600080fd5b5061033a61075e3660046129ad565b6114ab565b34801561076f57600080fd5b5061033a600d5481565b34801561078557600080fd5b5061039e6107943660046129db565b6114d6565b3480156107a557600080fd5b5061039e6107b436600461290e565b61154f565b3480156107c557600080fd5b5061039e6115c5565b3480156107da57600080fd5b5061033a600e5481565b3480156107f057600080fd5b50600754610311906001600160a01b031681565b34801561081057600080fd5b5061039e61081f3660046129db565b61161a565b60606003805461083390612a16565b80601f016020809104026020016040519081016040528092919081815260200182805461085f90612a16565b80156108ac5780601f10610881576101008083540402835291602001916108ac565b820191906000526020600020905b81548152906001019060200180831161088f57829003601f168201915b5050505050905090565b6000336108c4818585611691565b60019150505b92915050565b6000336108de8582856117b5565b6108e9858585611829565b506001949350505050565b6108fc612015565b6001600160a01b03811661092b5760405162461bcd60e51b815260040161092290612a50565b60405180910390fd5b600780546001600160a01b038381166001600160a01b03198316811790935560405191169182917fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c90600090a35050565b6000336108c481858561098f83836114ab565b6109999190612a90565b611691565b6109a8338261206f565b50565b6109b3612015565b6001600160a01b0381166109d95760405162461bcd60e51b815260040161092290612a50565b600b80546001600160a01b038381166001600160a01b03198316811790935560405191169182917f0e3726396feec2fa47939776b508974e9dfae46f6c9a754b385edc044815951d90600090a35050565b610a32612015565b610a3c60006121a1565b565b610a46612015565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b610a79612015565b600f5460ff1615610acc5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c7265616479206163746976652e0000000000000000006044820152606401610922565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4e9190612aa3565b6001600160a01b031663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdf9190612aa3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c509190612aa3565b600680546001600160a01b0319166001600160a01b03929092169182179055610c7d903090600019611691565b60065460405163095ea7b360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af1158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d159190612ac0565b50600654610d2d906001600160a01b031660016121f3565b600654610d44906001600160a01b03166001610a3e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7194730610d94306001600160a01b031660009081526020819052604090205490565b600080610da96005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610e11573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e369190612add565b5050600f805461ffff191661010117905550565b610e52612015565b6001600160a01b038116610e785760405162461bcd60e51b815260040161092290612a50565b600880546001600160a01b038381166001600160a01b03198316811790935560405191169182917f1f4ec6f376ccea6c86163d8834072c9e7dd1141ba34848d1b9a0325b12c8619a90600090a35050565b60606004805461083390612a16565b610ee0612015565b6103e8610eec60025490565b610ef7906005612b0b565b610f019190612b22565b821015610f615760405162461bcd60e51b815260206004820152602860248201527f45524332303a2043616e6e6f7420736574206d617854786e206c6f776572207460448201526768616e20302e352560c01b6064820152608401610922565b6103e8610f6d60025490565b610f78906005612b0b565b610f829190612b22565b811015610fe55760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f776560448201526a72207468616e20302e352560a81b6064820152608401610922565b600e55600c55565b60003381610ffb82866114ab565b90508381101561105b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610922565b6108e98286868403611691565b6000336108c4818585611829565b61107e612015565b6001600160a01b0381166110a45760405162461bcd60e51b815260040161092290612a50565b600980546001600160a01b038381166001600160a01b03198316811790935560405191169182917fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a35050565b6110fd612015565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611164612015565b6001600160a01b03811661118a5760405162461bcd60e51b815260040161092290612a50565b600a80546001600160a01b038381166001600160a01b03198316811790935560405191169182917f7ae422255ce5ebea0273d064020e021db7f43ec474afaa7c3640b97033f3ac8290600090a35050565b6111e3612015565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561122a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124e9190612b44565b116112875760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610922565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156112ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f29190612b44565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113669190612ac0565b505050565b6000611375612015565b620186a061138260025490565b61138d906001612b0b565b6113979190612b22565b82101561140c5760405162461bcd60e51b815260206004820152603c60248201527f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f7760448201527f6572207468616e20302e3030312520746f74616c20737570706c792e000000006064820152608401610922565b6103e861141860025490565b611423906005612b0b565b61142d9190612b22565b8211156114a25760405162461bcd60e51b815260206004820152603b60248201527f45524332303a205377617020616d6f756e742063616e6e6f742062652068696760448201527f686572207468616e20302e352520746f74616c20737570706c792e00000000006064820152608401610922565b50600d55600190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6114de612015565b601185905560128490556013839055601482905560158190558082846115048789612a90565b61150e9190612a90565b6115189190612a90565b6115229190612a90565b60108190556103e810156115485760405162461bcd60e51b815260040161092290612b5d565b5050505050565b611557612015565b6001600160a01b0381166115bc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610922565b6109a8816121a1565b6115cd612015565b604051600090339047908381818185875af1925050503d806000811461160f576040519150601f19603f3d011682016040523d82523d6000602084013e611614565b606091505b50505050565b611622612015565b601785905560188490556019839055601a829055601b8190558082846116488789612a90565b6116529190612a90565b61165c9190612a90565b6116669190612a90565b601681905560218190556103e810156115485760405162461bcd60e51b815260040161092290612b5d565b6001600160a01b0383166116f35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610922565b6001600160a01b0382166117545760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610922565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006117c184846114ab565b90506000198114611614578181101561181c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610922565b6116148484848403611691565b6001600160a01b03831661184f5760405162461bcd60e51b815260040161092290612ba1565b6001600160a01b0382166118755760405162461bcd60e51b815260040161092290612be6565b806000036118895761136683836000612247565b6005546001600160a01b038481169116148015906118b557506005546001600160a01b03838116911614155b80156118c957506001600160a01b03821615155b80156118e057506001600160a01b03821661dead14155b80156118f65750600654600160a01b900460ff16155b15611c1957600f5460ff16611990576001600160a01b03831660009081526022602052604090205460ff168061194457506001600160a01b03821660009081526022602052604090205460ff165b6119905760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e0000006044820152606401610922565b6001600160a01b03831660009081526024602052604090205460ff1680156119d157506001600160a01b03821660009081526023602052604090205460ff16155b15611ac757600c54811115611a4e5760405162461bcd60e51b815260206004820152603c60248201527f45524332303a20427579207472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e742e000000006064820152608401610922565b600e546001600160a01b038316600090815260208190526040902054611a749083612a90565b1115611ac25760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c65742065786365656465640000000000006044820152606401610922565b611c19565b6001600160a01b03821660009081526024602052604090205460ff168015611b0857506001600160a01b03831660009081526023602052604090205460ff16155b15611b8557600c54811115611ac25760405162461bcd60e51b815260206004820152603d60248201527f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560448201527f65647320746865206d61785472616e73616374696f6e416d6f756e742e0000006064820152608401610922565b6001600160a01b03821660009081526023602052604090205460ff16611c1957600e546001600160a01b038316600090815260208190526040902054611bcb9083612a90565b1115611c195760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c65742065786365656465640000000000006044820152606401610922565b30600090815260208190526040902054600d5481108015908190611c445750600f54610100900460ff165b8015611c5a5750600654600160a01b900460ff16155b8015611c7f57506001600160a01b03851660009081526024602052604090205460ff16155b8015611ca457506001600160a01b03851660009081526022602052604090205460ff16155b8015611cc957506001600160a01b03841660009081526022602052604090205460ff16155b15611cf7576006805460ff60a01b1916600160a01b179055611ce9612371565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526022602052604090205460ff600160a01b909204821615911680611d4557506001600160a01b03851660009081526022602052604090205460ff165b15611d4e575060005b60008115611ffb576001600160a01b03861660009081526024602052604090205460ff168015611d8057506000601654115b15611e9f57611da6612710611da06016548861265390919063ffffffff16565b90612666565b905060165460175482611db99190612b0b565b611dc39190612b22565b601c6000828254611dd49190612a90565b9091555050601654601854611de99083612b0b565b611df39190612b22565b601d6000828254611e049190612a90565b9091555050601654601954611e199083612b0b565b611e239190612b22565b601e6000828254611e349190612a90565b9091555050601654601a54611e499083612b0b565b611e539190612b22565b601f6000828254611e649190612a90565b9091555050601654601b54611e799083612b0b565b611e839190612b22565b60206000828254611e949190612a90565b90915550611fdd9050565b6001600160a01b03871660009081526024602052604090205460ff168015611ec957506000601054115b15611fdd57611ee9612710611da06010548861265390919063ffffffff16565b905060105460115482611efc9190612b0b565b611f069190612b22565b601c6000828254611f179190612a90565b9091555050601054601254611f2c9083612b0b565b611f369190612b22565b601d6000828254611f479190612a90565b9091555050601054601354611f5c9083612b0b565b611f669190612b22565b601e6000828254611f779190612a90565b9091555050601054601454611f8c9083612b0b565b611f969190612b22565b601f6000828254611fa79190612a90565b9091555050601054601554611fbc9083612b0b565b611fc69190612b22565b60206000828254611fd79190612a90565b90915550505b8015611fee57611fee873083612247565b611ff88186612c29565b94505b612006878787612247565b50506021546016555050505050565b6005546001600160a01b03163314610a3c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610922565b6001600160a01b0382166120cf5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610922565b6001600160a01b038216600090815260208190526040902054818110156121435760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610922565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260246020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661226d5760405162461bcd60e51b815260040161092290612ba1565b6001600160a01b0382166122935760405162461bcd60e51b815260040161092290612be6565b6001600160a01b0383166000908152602081905260409020548181101561230b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610922565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611614565b3060009081526020819052604081205490506000602054601f54601e54601d54601c5461239e9190612a90565b6123a89190612a90565b6123b29190612a90565b6123bc9190612a90565b905060008215806123cb575081155b156123d557505050565b600d546123e390600a612b0b565b8311156123fb57600d546123f890600a612b0b565b92505b4761240584612672565b60006124114783612832565b9050600061242e85611da0601c548561265390919063ffffffff16565b9050600061244b86611da0601d548661265390919063ffffffff16565b9050600061246887611da0601e548761265390919063ffffffff16565b9050600061248588611da0601f548861265390919063ffffffff16565b6000601c819055601d819055601e819055601f81905560208190556007546040519293506001600160a01b031691869181818185875af1925050503d80600081146124ec576040519150601f19603f3d011682016040523d82523d6000602084013e6124f1565b606091505b50506008546040519198506001600160a01b0316908490600081818185875af1925050503d8060008114612541576040519150601f19603f3d011682016040523d82523d6000602084013e612546565b606091505b50506009546040519198506001600160a01b0316908390600081818185875af1925050503d8060008114612596576040519150601f19603f3d011682016040523d82523d6000602084013e61259b565b606091505b5050600a546040519198506001600160a01b0316908290600081818185875af1925050503d80600081146125eb576040519150601f19603f3d011682016040523d82523d6000602084013e6125f0565b606091505b5050600b546040519198506001600160a01b0316904790600081818185875af1925050503d8060008114612640576040519150601f19603f3d011682016040523d82523d6000602084013e612645565b606091505b505050505050505050505050565b600061265f8284612b0b565b9392505050565b600061265f8284612b22565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126a7576126a7612c3c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127499190612aa3565b8160018151811061275c5761275c612c3c565b60200260200101906001600160a01b031690816001600160a01b0316815250506127a7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611691565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906127fc908590600090869030904290600401612c52565b600060405180830381600087803b15801561281657600080fd5b505af115801561282a573d6000803e3d6000fd5b505050505050565b600061265f8284612c29565b600060208083528351808285015260005b8181101561286b5785810183015185820160400152820161284f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146109a857600080fd5b600080604083850312156128b457600080fd5b82356128bf8161288c565b946020939093013593505050565b6000806000606084860312156128e257600080fd5b83356128ed8161288c565b925060208401356128fd8161288c565b929592945050506040919091013590565b60006020828403121561292057600080fd5b813561265f8161288c565b60006020828403121561293d57600080fd5b5035919050565b80151581146109a857600080fd5b6000806040838503121561296557600080fd5b82356129708161288c565b9150602083013561298081612944565b809150509250929050565b6000806040838503121561299e57600080fd5b50508035926020909101359150565b600080604083850312156129c057600080fd5b82356129cb8161288c565b915060208301356129808161288c565b600080600080600060a086880312156129f357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c90821680612a2a57607f821691505b602082108103612a4a57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f045524332303a204164647265737320360841b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156108ca576108ca612a7a565b600060208284031215612ab557600080fd5b815161265f8161288c565b600060208284031215612ad257600080fd5b815161265f81612944565b600080600060608486031215612af257600080fd5b8351925060208401519150604084015190509250925092565b80820281158282048414176108ca576108ca612a7a565b600082612b3f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612b5657600080fd5b5051919050565b60208082526024908201527f45524332303a204d757374206b656570206665657320617420313025206f72206040820152636c65737360e01b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156108ca576108ca612a7a565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612ca25784516001600160a01b031683529383019391830191600101612c7d565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220c666e3b3451df06c04b01b7bef552416e32639299c17ce2ce0fdf96f256f4cad64736f6c63430008110033

Deployed Bytecode Sourcemap

34704:18980:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9439:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11940:242;;;;;;;;;;-1:-1:-1;11940:242:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;11940:242:0;1023:187:1;34784:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1406:32:1;;;1388:51;;1376:2;1361:18;34784:51:0;1215:230:1;10568:108:0;;;;;;;;;;-1:-1:-1;10656:12:0;;10568:108;;;1596:25:1;;;1584:2;1569:18;10568:108:0;1450:177:1;12762:295:0;;;;;;;;;;-1:-1:-1;12762:295:0;;;;;:::i;:::-;;:::i;34877:53::-;;;;;;;;;;;;34923:6;34877:53;;43777:342;;;;;;;;;;-1:-1:-1;43777:342:0;;;;;:::i;:::-;;:::i;:::-;;10410:93;;;;;;;;;;-1:-1:-1;10410:93:0;;10493:2;2695:36:1;;2683:2;2668:18;10410:93:0;2553:184:1;13466:270:0;;;;;;;;;;-1:-1:-1;13466:270:0;;;;;:::i;:::-;;:::i;39911:83::-;;;;;;;;;;-1:-1:-1;39911:83:0;;;;;:::i;:::-;;:::i;35088:40::-;;;;;;;;;;-1:-1:-1;35088:40:0;;;;-1:-1:-1;;;;;35088:40:0;;;34842:28;;;;;;;;;;-1:-1:-1;34842:28:0;;;;-1:-1:-1;;;;;34842:28:0;;;45326:443;;;;;;;;;;-1:-1:-1;45326:443:0;;;;;:::i;:::-;;:::i;46617:126::-;;;;;;;;;;-1:-1:-1;46617:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;46707:28:0;46683:4;46707:28;;;:19;:28;;;;;;;;;46617:126;35135:39;;;;;;;;;;-1:-1:-1;35135:39:0;;;;-1:-1:-1;;;;;35135:39:0;;;35007:37;;;;;;;;;;-1:-1:-1;35007:37:0;;;;-1:-1:-1;;;;;35007:37:0;;;35631:28;;;;;;;;;;;;;;;;35338:31;;;;;;;;;;-1:-1:-1;35338:31:0;;;;;;;;;;;10739:177;;;;;;;;;;-1:-1:-1;10739:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;10890:18:0;10858:7;10890:18;;;;;;;;;;;;10739:177;2819:103;;;;;;;;;;;;;:::i;41949:167::-;;;;;;;;;;-1:-1:-1;41949:167:0;;;;;:::i;:::-;;:::i;35051:30::-;;;;;;;;;;-1:-1:-1;35051:30:0;;;;-1:-1:-1;;;;;35051:30:0;;;40002:905;;;;;;;;;;;;;:::i;2178:87::-;;;;;;;;;;-1:-1:-1;2251:6:0;;-1:-1:-1;;;;;2251:6:0;2178:87;;44127:390;;;;;;;;;;-1:-1:-1;44127:390:0;;;;;:::i;:::-;;:::i;9658:104::-;;;;;;;;;;;;;:::i;41434:507::-;;;;;;;;;;-1:-1:-1;41434:507:0;;;;;:::i;:::-;;:::i;14239:505::-;;;;;;;;;;-1:-1:-1;14239:505:0;;;;;:::i;:::-;;:::i;11122:234::-;;;;;;;;;;-1:-1:-1;11122:234:0;;;;;:::i;:::-;;:::i;44525:334::-;;;;;;;;;;-1:-1:-1;44525:334:0;;;;;:::i;:::-;;:::i;35298:33::-;;;;;;;;;;-1:-1:-1;35298:33:0;;;;;;;;45777:182;;;;;;;;;;-1:-1:-1;45777:182:0;;;;;:::i;:::-;;:::i;44867:451::-;;;;;;;;;;-1:-1:-1;44867:451:0;;;;;:::i;:::-;;:::i;35183:35::-;;;;;;;;;;;;;;;;46158:255;;;;;;;;;;-1:-1:-1;46158:255:0;;;;;:::i;:::-;;:::i;40915:511::-;;;;;;;;;;-1:-1:-1;40915:511:0;;;;;:::i;:::-;;:::i;35378:27::-;;;;;;;;;;;;;;;;11419:201;;;;;;;;;;-1:-1:-1;11419:201:0;;;;;:::i;:::-;;:::i;35225:33::-;;;;;;;;;;;;;;;;42124:793;;;;;;;;;;-1:-1:-1;42124:793:0;;;;;:::i;:::-;;:::i;3077:238::-;;;;;;;;;;-1:-1:-1;3077:238:0;;;;;:::i;:::-;;:::i;45967:183::-;;;;;;;;;;;;;:::i;35265:24::-;;;;;;;;;;;;;;;;34969:31;;;;;;;;;;-1:-1:-1;34969:31:0;;;;-1:-1:-1;;;;;34969:31:0;;;42925:844;;;;;;;;;;-1:-1:-1;42925:844:0;;;;;:::i;:::-;;:::i;9439:100::-;9493:13;9526:5;9519:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9439:100;:::o;11940:242::-;12059:4;803:10;12120:32;803:10;12136:7;12145:6;12120:8;:32::i;:::-;12170:4;12163:11;;;11940:242;;;;;:::o;12762:295::-;12893:4;803:10;12951:38;12967:4;803:10;12982:6;12951:15;:38::i;:::-;13000:27;13010:4;13016:2;13020:6;13000:9;:27::i;:::-;-1:-1:-1;13045:4:0;;12762:295;-1:-1:-1;;;;12762:295:0:o;43777:342::-;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;43897:31:0;::::1;43889:60;;;;-1:-1:-1::0;;;43889:60:0::1;;;;;;;:::i;:::-;;;;;;;;;43980:16;::::0;;-1:-1:-1;;;;;44007:36:0;;::::1;-1:-1:-1::0;;;;;;44007:36:0;::::1;::::0;::::1;::::0;;;44059:52:::1;::::0;43980:16;::::1;::::0;;;44059:52:::1;::::0;43960:17:::1;::::0;44059:52:::1;43878:241;43777:342:::0;:::o;13466:270::-;13581:4;803:10;13642:64;803:10;13658:7;13695:10;13667:25;803:10;13658:7;13667:9;:25::i;:::-;:38;;;;:::i;:::-;13642:8;:64::i;39911:83::-;39961:25;39967:10;39979:6;39961:5;:25::i;:::-;39911:83;:::o;45326:443::-;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;45462:39:0;::::1;45454:68;;;;-1:-1:-1::0;;;45454:68:0::1;;;;;;;:::i;:::-;45553:24;::::0;;-1:-1:-1;;;;;45588:52:0;;::::1;-1:-1:-1::0;;;;;;45588:52:0;::::1;::::0;::::1;::::0;;;45656:105:::1;::::0;45553:24;::::1;::::0;;;45656:105:::1;::::0;45533:17:::1;::::0;45656:105:::1;45443:326;45326:443:::0;:::o;2819:103::-;2064:13;:11;:13::i;:::-;2884:30:::1;2911:1;2884:18;:30::i;:::-;2819:103::o:0;41949:167::-;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;42062:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;42062:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41949:167::o;40002:905::-;2064:13;:11;:13::i;:::-;40066::::1;::::0;::::1;;40065:14;40057:50;;;::::0;-1:-1:-1;;;40057:50:0;;5736:2:1;40057:50:0::1;::::0;::::1;5718:21:1::0;5775:2;5755:18;;;5748:30;5814:25;5794:18;;;5787:53;5857:18;;40057:50:0::1;5534:347:1::0;40057:50:0::1;40154:15;-1:-1:-1::0;;;;;40154:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40136:55:0::1;;40214:4;40234:15;-1:-1:-1::0;;;;;40234:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40136:131;::::0;-1:-1:-1;;;;;;40136:131:0::1;::::0;;;;;;-1:-1:-1;;;;;6372:15:1;;;40136:131:0::1;::::0;::::1;6354:34:1::0;6424:15;;6404:18;;;6397:43;6289:18;;40136:131:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40120:13;:147:::0;;-1:-1:-1;;;;;;40120:147:0::1;-1:-1:-1::0;;;;;40120:147:0;;;::::1;::::0;;::::1;::::0;;40278:66:::1;::::0;40295:4:::1;::::0;-1:-1:-1;;40278:8:0::1;:66::i;:::-;40362:13;::::0;40355:111:::1;::::0;-1:-1:-1;;;40355:111:0;;-1:-1:-1;;;;;40407:15:0::1;6643:32:1::0;;40355:111:0::1;::::0;::::1;6625:51:1::0;-1:-1:-1;;6692:18:1;;;6685:34;40362:13:0;;::::1;::::0;40355:29:::1;::::0;6598:18:1;;40355:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;40516:13:0::1;::::0;40479:58:::1;::::0;-1:-1:-1;;;;;40516:13:0::1;::::0;40479:28:::1;:58::i;:::-;40582:13;::::0;40548:55:::1;::::0;-1:-1:-1;;;;;40582:13:0::1;::::0;40548:25:::1;:55::i;:::-;40616:15;-1:-1:-1::0;;;;;40616:31:0::1;;40655:21;40700:4;40720:24;40738:4;-1:-1:-1::0;;;;;10890:18:0;10858:7;10890:18;;;;;;;;;;;;10739:177;40720:24:::1;40759:1;40775::::0;40791:7:::1;2251:6:::0;;-1:-1:-1;;;;;2251:6:0;;2178:87;40791:7:::1;40616:223;::::0;::::1;::::0;;;-1:-1:-1;;;;;;40616:223:0;;;-1:-1:-1;;;;;7339:15:1;;;40616:223:0::1;::::0;::::1;7321:34:1::0;7371:18;;;7364:34;;;;7414:18;;;7407:34;;;;7457:18;;;7450:34;7521:15;;;7500:19;;;7493:44;40813:15:0::1;7553:19:1::0;;;7546:35;7255:19;;40616:223:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;40850:13:0::1;:20:::0;;-1:-1:-1;;40881:18:0;;;;;-1:-1:-1;40002:905:0:o;44127:390::-;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;44259:37:0;::::1;44251:66;;;;-1:-1:-1::0;;;44251:66:0::1;;;;;;;:::i;:::-;44348:22;::::0;;-1:-1:-1;;;;;44381:48:0;;::::1;-1:-1:-1::0;;;;;;44381:48:0;::::1;::::0;::::1;::::0;;;44445:64:::1;::::0;44348:22;::::1;::::0;;;44445:64:::1;::::0;44328:17:::1;::::0;44445:64:::1;44240:277;44127:390:::0;:::o;9658:104::-;9714:13;9747:7;9740:14;;;;;:::i;41434:507::-;2064:13;:11;:13::i;:::-;41628:4:::1;41607:13;10656:12:::0;;;10568:108;41607:13:::1;:17;::::0;41623:1:::1;41607:17;:::i;:::-;41606:26;;;;:::i;:::-;41592:9;:41;;41570:131;;;::::0;-1:-1:-1;;;41570:131:0;;8500:2:1;41570:131:0::1;::::0;::::1;8482:21:1::0;8539:2;8519:18;;;8512:30;8578:34;8558:18;;;8551:62;-1:-1:-1;;;8629:18:1;;;8622:38;8677:19;;41570:131:0::1;8298:404:1::0;41570:131:0::1;41776:4;41755:13;10656:12:::0;;;10568:108;41755:13:::1;:17;::::0;41771:1:::1;41755:17;:::i;:::-;41754:26;;;;:::i;:::-;41734:15;:47;;41712:140;;;::::0;-1:-1:-1;;;41712:140:0;;8909:2:1;41712:140:0::1;::::0;::::1;8891:21:1::0;8948:2;8928:18;;;8921:30;8987:34;8967:18;;;8960:62;-1:-1:-1;;;9038:18:1;;;9031:41;9089:19;;41712:140:0::1;8707:407:1::0;41712:140:0::1;41863:9;:27:::0;41901:20:::1;:32:::0;41434:507::o;14239:505::-;14359:4;803:10;14359:4;14447:25;803:10;14464:7;14447:9;:25::i;:::-;14420:52;;14525:15;14505:16;:35;;14483:122;;;;-1:-1:-1;;;14483:122:0;;9321:2:1;14483:122:0;;;9303:21:1;9360:2;9340:18;;;9333:30;9399:34;9379:18;;;9372:62;-1:-1:-1;;;9450:18:1;;;9443:35;9495:19;;14483:122:0;9119:401:1;14483:122:0;14641:60;14650:5;14657:7;14685:15;14666:16;:34;14641:8;:60::i;11122:234::-;11237:4;803:10;11298:28;803:10;11315:2;11319:6;11298:9;:28::i;44525:334::-;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;44643:30:0;::::1;44635:59;;;;-1:-1:-1::0;;;44635:59:0::1;;;;;;;:::i;:::-;44725:15;::::0;;-1:-1:-1;;;;;44751:34:0;;::::1;-1:-1:-1::0;;;;;;44751:34:0;::::1;::::0;::::1;::::0;;;44801:50:::1;::::0;44725:15;::::1;::::0;;;44801:50:::1;::::0;44705:17:::1;::::0;44801:50:::1;44624:235;44525:334:::0;:::o;45777:182::-;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;45862:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;45862:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;45917:34;;1163:41:1;;;45917:34:0::1;::::0;1136:18:1;45917:34:0::1;;;;;;;45777:182:::0;;:::o;44867:451::-;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;45005:40:0;::::1;44997:69;;;;-1:-1:-1::0;;;44997:69:0::1;;;;;;;:::i;:::-;45097:25;::::0;;-1:-1:-1;;;;;45133:54:0;;::::1;-1:-1:-1::0;;;;;;45133:54:0;::::1;::::0;::::1;::::0;;;45203:107:::1;::::0;45097:25;::::1;::::0;;;45203:107:::1;::::0;45077:17:::1;::::0;45203:107:::1;44986:332;44867:451:::0;:::o;46158:255::-;2064:13;:11;:13::i;:::-;46236:36:::1;::::0;-1:-1:-1;;;46236:36:0;;46266:4:::1;46236:36;::::0;::::1;1388:51:1::0;46275:1:0::1;::::0;-1:-1:-1;;;;;46236:21:0;::::1;::::0;::::1;::::0;1361:18:1;;46236:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;46228:62;;;::::0;-1:-1:-1;;;46228:62:0;;9916:2:1;46228:62:0::1;::::0;::::1;9898:21:1::0;9955:1;9935:18;;;9928:29;-1:-1:-1;;;9973:18:1;;;9966:39;10022:18;;46228:62:0::1;9714:332:1::0;46228:62:0::1;46318:36;::::0;-1:-1:-1;;;46318:36:0;;46348:4:::1;46318:36;::::0;::::1;1388:51:1::0;46301:14:0::1;::::0;-1:-1:-1;;;;;46318:21:0;::::1;::::0;::::1;::::0;1361:18:1;;46318:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46365:40;::::0;-1:-1:-1;;;46365:40:0;;46386:10:::1;46365:40;::::0;::::1;6625:51:1::0;6692:18;;;6685:34;;;46301:53:0;;-1:-1:-1;;;;;;46365:20:0;::::1;::::0;::::1;::::0;6598:18:1;;46365:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46217:196;46158:255:::0;:::o;40915:511::-;41023:4;2064:13;:11;:13::i;:::-;41102:6:::1;41081:13;10656:12:::0;;;10568:108;41081:13:::1;:17;::::0;41097:1:::1;41081:17;:::i;:::-;41080:28;;;;:::i;:::-;41067:9;:41;;41045:151;;;::::0;-1:-1:-1;;;41045:151:0;;10253:2:1;41045:151:0::1;::::0;::::1;10235:21:1::0;10292:2;10272:18;;;10265:30;10331:34;10311:18;;;10304:62;10402:30;10382:18;;;10375:58;10450:19;;41045:151:0::1;10051:424:1::0;41045:151:0::1;41264:4;41243:13;10656:12:::0;;;10568:108;41243:13:::1;:17;::::0;41259:1:::1;41243:17;:::i;:::-;41242:26;;;;:::i;:::-;41229:9;:39;;41207:148;;;::::0;-1:-1:-1;;;41207:148:0;;10682:2:1;41207:148:0::1;::::0;::::1;10664:21:1::0;10721:2;10701:18;;;10694:30;10760:34;10740:18;;;10733:62;10831:29;10811:18;;;10804:57;10878:19;;41207:148:0::1;10480:423:1::0;41207:148:0::1;-1:-1:-1::0;41366:18:0::1;:30:::0;41414:4:::1;::::0;40915:511::o;11419:201::-;-1:-1:-1;;;;;11585:18:0;;;11553:7;11585:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11419:201::o;42124:793::-;2064:13;:11;:13::i;:::-;42371:16:::1;:33:::0;;;42415:22:::1;:45:::0;;;42471:15:::1;:31:::0;;;42513:25:::1;:51:::0;;;42575:24:::1;:49:::0;;;42602:22;42541:23;42489:13;42663:54:::1;42440:20:::0;42390:14;42663:54:::1;:::i;:::-;:85;;;;:::i;:::-;:126;;;;:::i;:::-;:166;;;;:::i;:::-;42635:12;:194:::0;;;42864:4:::1;-1:-1:-1::0;42848:20:0::1;42840:69;;;;-1:-1:-1::0;;;42840:69:0::1;;;;;;;:::i;:::-;42124:793:::0;;;;;:::o;3077:238::-;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;3180:22:0;::::1;3158:110;;;::::0;-1:-1:-1;;;3158:110:0;;11515:2:1;3158:110:0::1;::::0;::::1;11497:21:1::0;11554:2;11534:18;;;11527:30;11593:34;11573:18;;;11566:62;-1:-1:-1;;;11644:18:1;;;11637:36;11690:19;;3158:110:0::1;11313:402:1::0;3158:110:0::1;3279:28;3298:8;3279:18;:28::i;45967:183::-:0;2064:13;:11;:13::i;:::-;46060:82:::1;::::0;46023:12:::1;::::0;46068:10:::1;::::0;46092:21:::1;::::0;46023:12;46060:82;46023:12;46060:82;46092:21;46068:10;46060:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;45967:183:0:o;42925:844::-;2064:13;:11;:13::i;:::-;43173:17:::1;:34:::0;;;43218:23:::1;:46:::0;;;43275:16:::1;:32:::0;;;43318:26:::1;:52:::0;;;43381:25:::1;:50:::0;;;43409:22;43347:23;43294:13;43471:56:::1;43244:20:::0;43193:14;43471:56:::1;:::i;:::-;:88;;;;:::i;:::-;:130;;;;:::i;:::-;:171;;;;:::i;:::-;43442:13;:200:::0;;;43653:11:::1;:27:::0;;;43716:4:::1;-1:-1:-1::0;43699:21:0::1;43691:70;;;;-1:-1:-1::0;;;43691:70:0::1;;;;;;;:::i;18372:380::-:0;-1:-1:-1;;;;;18508:19:0;;18500:68;;;;-1:-1:-1;;;18500:68:0;;12132:2:1;18500:68:0;;;12114:21:1;12171:2;12151:18;;;12144:30;12210:34;12190:18;;;12183:62;-1:-1:-1;;;12261:18:1;;;12254:34;12305:19;;18500:68:0;11930:400:1;18500:68:0;-1:-1:-1;;;;;18587:21:0;;18579:68;;;;-1:-1:-1;;;18579:68:0;;12537:2:1;18579:68:0;;;12519:21:1;12576:2;12556:18;;;12549:30;12615:34;12595:18;;;12588:62;-1:-1:-1;;;12666:18:1;;;12659:32;12708:19;;18579:68:0;12335:398:1;18579:68:0;-1:-1:-1;;;;;18660:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18712:32;;1596:25:1;;;18712:32:0;;1569:18:1;18712:32:0;;;;;;;18372:380;;;:::o;19043:502::-;19178:24;19205:25;19215:5;19222:7;19205:9;:25::i;:::-;19178:52;;-1:-1:-1;;19245:16:0;:37;19241:297;;19345:6;19325:16;:26;;19299:117;;;;-1:-1:-1;;;19299:117:0;;12940:2:1;19299:117:0;;;12922:21:1;12979:2;12959:18;;;12952:30;13018:31;12998:18;;;12991:59;13067:18;;19299:117:0;12738:353:1;19299:117:0;19460:51;19469:5;19476:7;19504:6;19485:16;:25;19460:8;:51::i;46751:4376::-;-1:-1:-1;;;;;46883:18:0;;46875:68;;;;-1:-1:-1;;;46875:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46962:16:0;;46954:64;;;;-1:-1:-1;;;46954:64:0;;;;;;;:::i;:::-;47035:6;47045:1;47035:11;47031:93;;47063:28;47079:4;47085:2;47089:1;47063:15;:28::i;47031:93::-;2251:6;;-1:-1:-1;;;;;47154:15:0;;;2251:6;;47154:15;;;;:45;;-1:-1:-1;2251:6:0;;-1:-1:-1;;;;;47186:13:0;;;2251:6;;47186:13;;47154:45;:78;;;;-1:-1:-1;;;;;;47216:16:0;;;;47154:78;:112;;;;-1:-1:-1;;;;;;47249:17:0;;34923:6;47249:17;;47154:112;:138;;;;-1:-1:-1;47284:8:0;;-1:-1:-1;;;47284:8:0;;;;47283:9;47154:138;47136:1511;;;47324:13;;;;47319:210;;-1:-1:-1;;;;;47388:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;47417:23:0;;;;;;:19;:23;;;;;;;;47388:52;47358:155;;;;-1:-1:-1;;;47358:155:0;;14108:2:1;47358:155:0;;;14090:21:1;14147:2;14127:18;;;14120:30;14186:31;14166:18;;;14159:59;14235:18;;47358:155:0;13906:353:1;47358:155:0;-1:-1:-1;;;;;47591:31:0;;;;;;:25;:31;;;;;;;;:88;;;;-1:-1:-1;;;;;;47644:35:0;;;;;;:31;:35;;;;;;;;47643:36;47591:88;47569:1067;;;47754:20;;47744:6;:30;;47714:164;;;;-1:-1:-1;;;47714:164:0;;14466:2:1;47714:164:0;;;14448:21:1;14505:2;14485:18;;;14478:30;14544:34;14524:18;;;14517:62;14615:30;14595:18;;;14588:58;14663:19;;47714:164:0;14264:424:1;47714:164:0;47953:9;;-1:-1:-1;;;;;10890:18:0;;10858:7;10890:18;;;;;;;;;;;47927:22;;:6;:22;:::i;:::-;:35;;47897:135;;;;-1:-1:-1;;;47897:135:0;;14895:2:1;47897:135:0;;;14877:21:1;14934:2;14914:18;;;14907:30;14973:28;14953:18;;;14946:56;15019:18;;47897:135:0;14693:350:1;47897:135:0;47569:1067;;;-1:-1:-1;;;;;48114:29:0;;;;;;:25;:29;;;;;;;;:88;;;;-1:-1:-1;;;;;;48165:37:0;;;;;;:31;:37;;;;;;;;48164:38;48114:88;48092:544;;;48277:20;;48267:6;:30;;48237:165;;;;-1:-1:-1;;;48237:165:0;;15250:2:1;48237:165:0;;;15232:21:1;15289:2;15269:18;;;15262:30;15328:34;15308:18;;;15301:62;15399:31;15379:18;;;15372:59;15448:19;;48237:165:0;15048:425:1;48092:544:0;-1:-1:-1;;;;;48429:35:0;;;;;;:31;:35;;;;;;;;48424:212;;48541:9;;-1:-1:-1;;;;;10890:18:0;;10858:7;10890:18;;;;;;;;;;;48515:22;;:6;:22;:::i;:::-;:35;;48485:135;;;;-1:-1:-1;;;48485:135:0;;14895:2:1;48485:135:0;;;14877:21:1;14934:2;14914:18;;;14907:30;14973:28;14953:18;;;14946:56;15019:18;;48485:135:0;14693:350:1;48485:135:0;48708:4;48659:28;10890:18;;;;;;;;;;;48766;;48742:42;;;;;;;48815:35;;-1:-1:-1;48839:11:0;;;;;;;48815:35;:61;;;;-1:-1:-1;48868:8:0;;-1:-1:-1;;;48868:8:0;;;;48867:9;48815:61;:110;;;;-1:-1:-1;;;;;;48894:31:0;;;;;;:25;:31;;;;;;;;48893:32;48815:110;:153;;;;-1:-1:-1;;;;;;48943:25:0;;;;;;:19;:25;;;;;;;;48942:26;48815:153;:194;;;;-1:-1:-1;;;;;;48986:23:0;;;;;;:19;:23;;;;;;;;48985:24;48815:194;48797:326;;;49036:8;:15;;-1:-1:-1;;;;49036:15:0;-1:-1:-1;;;49036:15:0;;;49068:10;:8;:10::i;:::-;49095:8;:16;;-1:-1:-1;;;;49095:16:0;;;48797:326;49151:8;;-1:-1:-1;;;;;49176:25:0;;49135:12;49176:25;;;:19;:25;;;;;;49151:8;-1:-1:-1;;;49151:8:0;;;;;49150:9;;49176:25;;:52;;-1:-1:-1;;;;;;49205:23:0;;;;;;:19;:23;;;;;;;;49176:52;49172:100;;;-1:-1:-1;49255:5:0;49172:100;49284:12;49317:7;49313:1723;;;-1:-1:-1;;;;;49369:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;49418:1;49402:13;;:17;49369:50;49365:1522;;;49447:36;49477:5;49447:25;49458:13;;49447:6;:10;;:25;;;;:::i;:::-;:29;;:36::i;:::-;49440:43;;49596:13;;49554:17;;49547:4;:24;;;;:::i;:::-;49546:63;;;;:::i;:::-;49502:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;49734:13:0;;49686:23;;49679:30;;:4;:30;:::i;:::-;49678:69;;;;:::i;:::-;49628:25;;:119;;;;;;;:::i;:::-;;;;-1:-1:-1;;49816:13:0;;49796:16;;49789:23;;:4;:23;:::i;:::-;49788:41;;;;:::i;:::-;49766:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;49960:13:0;;49909:26;;49902:33;;:4;:33;:::i;:::-;49901:72;;;;:::i;:::-;49848:28;;:125;;;;;;;:::i;:::-;;;;-1:-1:-1;;50102:13:0;;50052:25;;50045:32;;:4;:32;:::i;:::-;50044:71;;;;:::i;:::-;49992:27;;:123;;;;;;;:::i;:::-;;;;-1:-1:-1;49365:1522:0;;-1:-1:-1;49365:1522:0;;-1:-1:-1;;;;;50177:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;50227:1;50212:12;;:16;50177:51;50173:714;;;50256:35;50285:5;50256:24;50267:12;;50256:6;:10;;:24;;;;:::i;:35::-;50249:42;;50361:12;;50341:16;;50334:4;:23;;;;:::i;:::-;50333:40;;;;:::i;:::-;50310:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;50497:12:0;;50450:22;;50443:29;;:4;:29;:::i;:::-;50442:67;;;;:::i;:::-;50392:25;;:117;;;;;;;:::i;:::-;;;;-1:-1:-1;;50577:12:0;;50558:15;;50551:22;;:4;:22;:::i;:::-;50550:39;;;;:::i;:::-;50528:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;50719:12:0;;50669:25;;50662:32;;:4;:32;:::i;:::-;50661:70;;;;:::i;:::-;50608:28;;:123;;;;;;;:::i;:::-;;;;-1:-1:-1;;50859:12:0;;50810:24;;50803:31;;:4;:31;:::i;:::-;50802:69;;;;:::i;:::-;50750:27;;:121;;;;;;;:::i;:::-;;;;-1:-1:-1;;50173:714:0;50907:8;;50903:91;;50936:42;50952:4;50966;50973;50936:15;:42::i;:::-;51010:14;51020:4;51010:14;;:::i;:::-;;;49313:1723;51048:33;51064:4;51070:2;51074:6;51048:15;:33::i;:::-;-1:-1:-1;;51108:11:0;;51092:13;:27;-1:-1:-1;;;;;46751:4376:0:o;2343:132::-;2251:6;;-1:-1:-1;;;;;2251:6:0;803:10;2407:23;2399:68;;;;-1:-1:-1;;;2399:68:0;;15813:2:1;2399:68:0;;;15795:21:1;;;15832:18;;;15825:30;15891:34;15871:18;;;15864:62;15943:18;;2399:68:0;15611:356:1;17259:675:0;-1:-1:-1;;;;;17343:21:0;;17335:67;;;;-1:-1:-1;;;17335:67:0;;16174:2:1;17335:67:0;;;16156:21:1;16213:2;16193:18;;;16186:30;16252:34;16232:18;;;16225:62;-1:-1:-1;;;16303:18:1;;;16296:31;16344:19;;17335:67:0;15972:397:1;17335:67:0;-1:-1:-1;;;;;17502:18:0;;17477:22;17502:18;;;;;;;;;;;17539:24;;;;17531:71;;;;-1:-1:-1;;;17531:71:0;;16576:2:1;17531:71:0;;;16558:21:1;16615:2;16595:18;;;16588:30;16654:34;16634:18;;;16627:62;-1:-1:-1;;;16705:18:1;;;16698:32;16747:19;;17531:71:0;16374:398:1;17531:71:0;-1:-1:-1;;;;;17638:18:0;;:9;:18;;;;;;;;;;;17659:23;;;17638:44;;17777:12;:22;;;;;;;17828:37;1596:25:1;;;17638:9:0;;:18;17828:37;;1569:18:1;17828:37:0;;;;;;;46365:40:::1;46217:196;46158:255:::0;:::o;3475:191::-;3568:6;;;-1:-1:-1;;;;;3585:17:0;;;-1:-1:-1;;;;;;3585:17:0;;;;;;;3618:40;;3568:6;;;3585:17;3568:6;;3618:40;;3549:16;;3618:40;3538:128;3475:191;:::o;46421:188::-;-1:-1:-1;;;;;46504:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;46504:39:0;;;;;;;;;;46561:40;;46504:39;;:31;46561:40;;;46421:188;;:::o;15214:877::-;-1:-1:-1;;;;;15345:18:0;;15337:68;;;;-1:-1:-1;;;15337:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15424:16:0;;15416:64;;;;-1:-1:-1;;;15416:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15566:15:0;;15544:19;15566:15;;;;;;;;;;;15614:21;;;;15592:109;;;;-1:-1:-1;;;15592:109:0;;16979:2:1;15592:109:0;;;16961:21:1;17018:2;16998:18;;;16991:30;17057:34;17037:18;;;17030:62;-1:-1:-1;;;17108:18:1;;;17101:36;17154:19;;15592:109:0;16777:402:1;15592:109:0;-1:-1:-1;;;;;15737:15:0;;;:9;:15;;;;;;;;;;;15755:20;;;15737:38;;15955:13;;;;;;;;;;:23;;;;;;16007:26;;1596:25:1;;;15955:13:0;;16007:26;;1569:18:1;16007:26:0;;;;;;;16046:37;46158:255;51644:2037;51727:4;51683:23;10890:18;;;;;;;;;;;51683:50;;51746:25;51928:27;;51884:28;;51850:18;;51809:25;;51774:19;;:60;;;;:::i;:::-;:94;;;;:::i;:::-;:138;;;;:::i;:::-;:181;;;;:::i;:::-;51746:209;-1:-1:-1;51966:12:0;51995:20;;;:46;;-1:-1:-1;52019:22:0;;51995:46;51991:85;;;52058:7;;;51644:2037::o;51991:85::-;52110:18;;:23;;52131:2;52110:23;:::i;:::-;52092:15;:41;52088:115;;;52168:18;;:23;;52189:2;52168:23;:::i;:::-;52150:41;;52088:115;52243:21;52277:33;52294:15;52277:16;:33::i;:::-;52323:18;52344:44;:21;52370:17;52344:25;:44::i;:::-;52323:65;;52401:24;52428:82;52482:17;52428:35;52443:19;;52428:10;:14;;:35;;;;:::i;:82::-;52401:109;;52523:30;52556:92;52630:17;52556:55;52585:25;;52556:10;:28;;:55;;;;:::i;:92::-;52523:125;;52661:23;52687:81;52740:17;52687:34;52702:18;;52687:10;:14;;:34;;;;:::i;:81::-;52661:107;;52781:33;52817:95;52894:17;52817:58;52846:28;;52817:10;:28;;:58;;;;:::i;:95::-;52947:1;52925:19;:23;;;52959:25;:29;;;52999:18;:22;;;53032:28;:32;;;53075:27;:31;;;53141:16;;53133:83;;52781:131;;-1:-1:-1;;;;;;53141:16:0;;53171;;53133:83;52947:1;53133:83;53171:16;53141;53133:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;53251:22:0;;53243:95;;53119:97;;-1:-1:-1;;;;;;53251:22:0;;53301;;53243:95;;;;53301:22;53251;53243:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;53373:15:0;;53365:57;;53229:109;;-1:-1:-1;;;;;;53373:15:0;;53402;;53365:57;;;;53402:15;53373;53365:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;53457:25:0;;53449:101;;53351:71;;-1:-1:-1;;;;;;53457:25:0;;53510;;53449:101;;;;53510:25;53457;53449:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;53585:24:0;;53577:96;;53435:115;;-1:-1:-1;;;;;;53585:24:0;;53637:21;;53577:96;;;;53637:21;53585:24;53577:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;51644:2037:0:o;24720:98::-;24778:7;24805:5;24809:1;24805;:5;:::i;:::-;24798:12;24720:98;-1:-1:-1;;;24720:98:0:o;25119:::-;25177:7;25204:5;25208:1;25204;:5;:::i;51135:501::-;51225:16;;;51239:1;51225:16;;;;;;;;51201:21;;51225:16;;;;;;;;;;-1:-1:-1;51225:16:0;51201:40;;51270:4;51252;51257:1;51252:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;51252:23:0;;;-1:-1:-1;;;;;51252:23:0;;;;;51296:15;-1:-1:-1;;;;;51296:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51286:4;51291:1;51286:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;51286:32:0;;;-1:-1:-1;;;;;51286:32:0;;;;;51331:62;51348:4;51363:15;51381:11;51331:8;:62::i;:::-;51432:196;;-1:-1:-1;;;51432:196:0;;-1:-1:-1;;;;;51432:15:0;:66;;;;:196;;51513:11;;51539:1;;51555:4;;51582;;51602:15;;51432:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51190:446;51135:501;:::o;24363:98::-;24421:7;24448:5;24452:1;24448;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2301:247::-;2360:6;2413:2;2401:9;2392:7;2388:23;2384:32;2381:52;;;2429:1;2426;2419:12;2381:52;2468:9;2455:23;2487:31;2512:5;2487:31;:::i;2742:180::-;2801:6;2854:2;2842:9;2833:7;2829:23;2825:32;2822:52;;;2870:1;2867;2860:12;2822:52;-1:-1:-1;2893:23:1;;2742:180;-1:-1:-1;2742:180:1:o;2927:118::-;3013:5;3006:13;2999:21;2992:5;2989:32;2979:60;;3035:1;3032;3025:12;3050:382;3115:6;3123;3176:2;3164:9;3155:7;3151:23;3147:32;3144:52;;;3192:1;3189;3182:12;3144:52;3231:9;3218:23;3250:31;3275:5;3250:31;:::i;:::-;3300:5;-1:-1:-1;3357:2:1;3342:18;;3329:32;3370:30;3329:32;3370:30;:::i;:::-;3419:7;3409:17;;;3050:382;;;;;:::o;3437:248::-;3505:6;3513;3566:2;3554:9;3545:7;3541:23;3537:32;3534:52;;;3582:1;3579;3572:12;3534:52;-1:-1:-1;;3605:23:1;;;3675:2;3660:18;;;3647:32;;-1:-1:-1;3437:248:1:o;3690:388::-;3758:6;3766;3819:2;3807:9;3798:7;3794:23;3790:32;3787:52;;;3835:1;3832;3825:12;3787:52;3874:9;3861:23;3893:31;3918:5;3893:31;:::i;:::-;3943:5;-1:-1:-1;4000:2:1;3985:18;;3972:32;4013:33;3972:32;4013:33;:::i;4083:454::-;4178:6;4186;4194;4202;4210;4263:3;4251:9;4242:7;4238:23;4234:33;4231:53;;;4280:1;4277;4270:12;4231:53;-1:-1:-1;;4303:23:1;;;4373:2;4358:18;;4345:32;;-1:-1:-1;4424:2:1;4409:18;;4396:32;;4475:2;4460:18;;4447:32;;-1:-1:-1;4526:3:1;4511:19;4498:33;;-1:-1:-1;4083:454:1;-1:-1:-1;4083:454:1:o;4542:380::-;4621:1;4617:12;;;;4664;;;4685:61;;4739:4;4731:6;4727:17;4717:27;;4685:61;4792:2;4784:6;4781:14;4761:18;4758:38;4755:161;;4838:10;4833:3;4829:20;4826:1;4819:31;4873:4;4870:1;4863:15;4901:4;4898:1;4891:15;4755:161;;4542:380;;;:::o;4927:340::-;5129:2;5111:21;;;5168:2;5148:18;;;5141:30;-1:-1:-1;;;5202:2:1;5187:18;;5180:46;5258:2;5243:18;;4927:340::o;5272:127::-;5333:10;5328:3;5324:20;5321:1;5314:31;5364:4;5361:1;5354:15;5388:4;5385:1;5378:15;5404:125;5469:9;;;5490:10;;;5487:36;;;5503:18;;:::i;5886:251::-;5956:6;6009:2;5997:9;5988:7;5984:23;5980:32;5977:52;;;6025:1;6022;6015:12;5977:52;6057:9;6051:16;6076:31;6101:5;6076:31;:::i;6730:245::-;6797:6;6850:2;6838:9;6829:7;6825:23;6821:32;6818:52;;;6866:1;6863;6856:12;6818:52;6898:9;6892:16;6917:28;6939:5;6917:28;:::i;7592:306::-;7680:6;7688;7696;7749:2;7737:9;7728:7;7724:23;7720:32;7717:52;;;7765:1;7762;7755:12;7717:52;7794:9;7788:16;7778:26;;7844:2;7833:9;7829:18;7823:25;7813:35;;7888:2;7877:9;7873:18;7867:25;7857:35;;7592:306;;;;;:::o;7903:168::-;7976:9;;;8007;;8024:15;;;8018:22;;8004:37;7994:71;;8045:18;;:::i;8076:217::-;8116:1;8142;8132:132;;8186:10;8181:3;8177:20;8174:1;8167:31;8221:4;8218:1;8211:15;8249:4;8246:1;8239:15;8132:132;-1:-1:-1;8278:9:1;;8076:217::o;9525:184::-;9595:6;9648:2;9636:9;9627:7;9623:23;9619:32;9616:52;;;9664:1;9661;9654:12;9616:52;-1:-1:-1;9687:16:1;;9525:184;-1:-1:-1;9525:184:1:o;10908:400::-;11110:2;11092:21;;;11149:2;11129:18;;;11122:30;11188:34;11183:2;11168:18;;11161:62;-1:-1:-1;;;11254:2:1;11239:18;;11232:34;11298:3;11283:19;;10908:400::o;13096:401::-;13298:2;13280:21;;;13337:2;13317:18;;;13310:30;13376:34;13371:2;13356:18;;13349:62;-1:-1:-1;;;13442:2:1;13427:18;;13420:35;13487:3;13472:19;;13096:401::o;13502:399::-;13704:2;13686:21;;;13743:2;13723:18;;;13716:30;13782:34;13777:2;13762:18;;13755:62;-1:-1:-1;;;13848:2:1;13833:18;;13826:33;13891:3;13876:19;;13502:399::o;15478:128::-;15545:9;;;15566:11;;;15563:37;;;15580:18;;:::i;17316:127::-;17377:10;17372:3;17368:20;17365:1;17358:31;17408:4;17405:1;17398:15;17432:4;17429:1;17422:15;17448:980;17710:4;17758:3;17747:9;17743:19;17789:6;17778:9;17771:25;17815:2;17853:6;17848:2;17837:9;17833:18;17826:34;17896:3;17891:2;17880:9;17876:18;17869:31;17920:6;17955;17949:13;17986:6;17978;17971:22;18024:3;18013:9;18009:19;18002:26;;18063:2;18055:6;18051:15;18037:29;;18084:1;18094:195;18108:6;18105:1;18102:13;18094:195;;;18173:13;;-1:-1:-1;;;;;18169:39:1;18157:52;;18264:15;;;;18229:12;;;;18205:1;18123:9;18094:195;;;-1:-1:-1;;;;;;;18345:32:1;;;;18340:2;18325:18;;18318:60;-1:-1:-1;;;18409:3:1;18394:19;18387:35;18306:3;17448:980;-1:-1:-1;;;17448:980:1:o

Swarm Source

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