ETH Price: $2,644.78 (+0.70%)

Token

Pepedemic (PEPE-23)
 

Overview

Max Total Supply

1,000,000,000 PEPE-23

Holders

136

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.314343248667532936 PEPE-23

Value
$0.00
0xeA80cbc86Df841F0F1cB3Ff77006d03F9dcFF0aa
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:
Pepedemic

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 * SPDX-License-Identifier: MIT
- https://medium.com/@pepedemic2023
- https://twitter.com/pepedemic_eth
- https://pepedemic.info
- https://t.me/pepedemic_eth
 */
pragma solidity >=0.8.19;

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

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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;
        _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;
        }
        _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 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 {}
}

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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

interface IUniswapV2Router02 {
    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 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 Pepedemic is ERC20, Ownable {
    using SafeMath for uint256;

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

    // Swapback
    bool private swapping;
    bool public swapEnabled = false;
    uint256 public swapTokensAtAmount;
    uint256 public maxTokensForSwapback;

    //Anti-whale
    bool public limitsInEffect = true;
    bool public transferDelayEnabled = true;
    uint256 public maxWallet;
    uint256 public maxTransactionAmount;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    // Fee receivers
    address public lpWallet;
    address public marketingWallet;
    address public devWallet;

    bool public tradingActive = false;

    uint256 public totalFeesBuy;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public totalFeesSell;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isFeeExempt;
    mapping(address => bool) public _isTxLimitExempt;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Pepedemic", "PEPE-23") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1000000000 * 1e18;

        maxTransactionAmount = (totalSupply * 1) / 100; // 1% of total supply
        maxWallet = (totalSupply * 1) / 100; // 1% of total supply

        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapback trigger
        maxTokensForSwapback = (totalSupply * 10) / 1000; // 1% max swapback

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        totalFeesBuy = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        totalFeesSell = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0xf7CCAd6B22D038EC19a8Fc3066B201F85A2Ae19b); 
        devWallet = msg.sender;
        lpWallet = msg.sender;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingWallet, true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    bool launchMode = true;

    /// @notice Launches the token and enables trading. Irriversable.
    function enableTrading() external onlyOwner {
        require(launchMode,"");
        buyMarketingFee = 70;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        totalFeesBuy = buyMarketingFee + buyLiquidityFee + buyDevFee;
        tradingActive = true;
        swapEnabled = true;
    }

    function ThunderclapAndFlash() external onlyOwner {
        require(launchMode,"");
        launchMode = false;
        buyMarketingFee = 20;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        totalFeesBuy = buyMarketingFee + buyLiquidityFee + buyDevFee;
        tradingActive = true;
        swapEnabled = true;
    }

    /// @notice Removes the max wallet and max transaction limits
    function Godspeed() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    /// @notice Disables the Same wallet block transfer delay
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    /// @notice Changes the minimum balance of tokens the contract must have before swapping tokens for ETH. Base 100000, so 0.5% = 500.
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= 1,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= 500,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        require(
            newAmount <= maxTokensForSwapback,
            "Swap amount cannot be higher than maxTokensForSwapback"
        );
        swapTokensAtAmount = newAmount * totalSupply()/ 100000;
        return true;
    }

    /// @notice Changes the maximum amount of tokens the contract can swap for ETH. Base 10000, so 0.5% = 50.
    function updateMaxTokensForSwapback(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= swapTokensAtAmount,
            "Swap amount cannot be lower than swapTokensAtAmount"
        );
        maxTokensForSwapback = newAmount * totalSupply()/ 100000;
        return true;
    }

    /// @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
    /// @param newNum Base 1000, so 1% = 10
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    /// @notice Changes the maximum amount of tokens a wallet can hold
    /// @param newNum Base 1000, so 1% = 10
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= 5,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * totalSupply()/1000;
    }


    /// @notice Sets if a wallet is excluded from the max wallet and tx limits
    /// @param updAds The wallet to update
    /// @param isEx If the wallet is excluded or not
    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isTxLimitExempt[updAds] = isEx;
    }

    /// @notice Sets if the contract can sell tokens
    /// @param enabled set to false to disable selling
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }
    
    /// @notice Sets the fees for buys
    /// @param _marketingFee The fee for the marketing wallet
    /// @param _liquidityFee The fee for the liquidity pool
    /// @param _devFee The fee for the dev wallet
    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        totalFeesBuy = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(totalFeesBuy <= 75, "Must keep fees at 75% or less");
    }

    /// @notice Sets the fees for sells
    /// @param _marketingFee The fee for the marketing wallet
    /// @param _liquidityFee The fee for the liquidity pool
    /// @param _devFee The fee for the dev wallet
    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        totalFeesSell = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(totalFeesSell <= 75, "Must keep fees at 75% or less");
    }

    /// @notice Sets if a wallet is excluded from fees
    /// @param account The wallet to update
    /// @param excluded If the wallet is excluded or not
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isFeeExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /// @notice Sets an address as a new liquidity pair. You probably dont want to do this.
    /// @param pair The new pair
    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateLPWallet(address newLPWallet)
        external
        onlyOwner
    {
        lpWallet = newLPWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isFeeExempt[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 (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isFeeExempt[from] || _isFeeExempt[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isFeeExempt[from] || _isFeeExempt[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && totalFeesSell > 0) {
                fees = amount.mul(totalFeesSell).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / totalFeesSell;
                tokensForDev += (fees * sellDevFee) / totalFeesSell;
                tokensForMarketing += (fees * sellMarketingFee) / totalFeesSell;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && totalFeesBuy > 0) {
                fees = amount.mul(totalFeesBuy).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / totalFeesBuy;
                tokensForDev += (fees * buyDevFee) / totalFeesBuy;
                tokensForMarketing += (fees * buyMarketingFee) / totalFeesBuy;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        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, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lpWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

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

        if (contractBalance > maxTokensForSwapback) {
            contractBalance = maxTokensForSwapback;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","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"},{"inputs":[],"name":"Godspeed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ThunderclapAndFlash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","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":[{"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensForSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxTokensForSwapback","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526005805460ff60a81b191690556008805461ffff1916610101179055600e805460ff60a01b19169055601d805460ff191660011790553480156200004757600080fd5b50604051806040016040528060098152602001685065706564656d696360b81b81525060405180604001604052806007815260200166504550452d323360c81b81525081600390816200009b9190620007b1565b506004620000aa8282620007b1565b505050620000c7620000c16200045560201b60201c565b62000459565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000e9816001620004ab565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015a91906200087d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ce91906200087d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200021c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024291906200087d565b6001600160a01b031660a08190526200025d906001620004ab565b60a0516200026d90600162000525565b6002600080602881806b033b2e3c9fd0803ce8000000606462000292826001620008c5565b6200029e9190620008e5565b600a556064620002b0826001620008c5565b620002bc9190620008e5565b600955612710620002cf826005620008c5565b620002db9190620008e5565b6006556103e8620002ee82600a620008c5565b620002fa9190620008e5565b6007556010879055601186905560128590558462000319878962000908565b62000325919062000908565b600f556014849055601583905560168290558162000344848662000908565b62000350919062000908565b601355600d80546001600160a01b031990811673f7ccad6b22d038ec19a8fc3066b201f85a2ae19b17909155600e8054821633908117909155600c8054909216179055620003b2620003aa6005546001600160a01b031690565b600162000579565b620003bf30600162000579565b620003ce61dead600162000579565b600d54620003e7906001600160a01b0316600162000579565b62000406620003fe6005546001600160a01b031690565b6001620004ab565b62000413306001620004ab565b6200042261dead6001620004ab565b600d546200043b906001600160a01b03166001620004ab565b62000447338262000623565b50505050505050506200091e565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004fa5760405162461bcd60e51b815260206004820181905260248201526000805160206200367383398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005c45760405162461bcd60e51b81526020600482018190526024820152600080516020620036738339815191526044820152606401620004f1565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200067b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004f1565b80600260008282546200068f919062000908565b90915550506001600160a01b03821660009081526020819052604081208054839290620006be90849062000908565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200073857607f821691505b6020821081036200075957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200070857600081815260208120601f850160051c81016020861015620007885750805b601f850160051c820191505b81811015620007a95782815560010162000794565b505050505050565b81516001600160401b03811115620007cd57620007cd6200070d565b620007e581620007de845462000723565b846200075f565b602080601f8311600181146200081d5760008415620008045750858301515b600019600386901b1c1916600185901b178555620007a9565b600085815260208120601f198616915b828110156200084e578886015182559484019460019091019084016200082d565b50858210156200086d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200089057600080fd5b81516001600160a01b0381168114620008a857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008df57620008df620008af565b92915050565b6000826200090357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008df57620008df620008af565b60805160a051612cf76200097c60003960008181610584015281816111870152611b4901526000818161042d01528181611b0b01528181612669015281816127220152818161275e015281816127d801526128400152612cf76000f3fe6080604052600436106103905760003560e01c80638da5cb5b116101dc578063c024666811610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610a78578063f637434214610a98578063f8b45b0514610aae578063fbc10c5514610ac457600080fd5b8063dd62ed3e146109f1578063e2f4560514610a37578063e884f26014610a4d578063f11a24d314610a6257600080fd5b8063c538e1df116100dc578063c538e1df14610987578063c876d0b91461099c578063c8c8ebe4146109bb578063d257b34f146109d157600080fd5b8063c024666814610927578063c17b5b8c14610947578063c18bc1951461096757600080fd5b80639fccce321161017a578063a9059cbb11610149578063a9059cbb14610896578063aacebbe3146108b6578063b62496f5146108d6578063bbc0c7421461090657600080fd5b80639fccce321461081a578063a0c973f114610830578063a0d82dc514610860578063a457c2d71461087657600080fd5b8063924de9b7116101b6578063924de9b7146107af57806395d89b41146107cf5780639a7a23d6146107e45780639c3b4fdc1461080457600080fd5b80638da5cb5b1461075b5780638ea5220f14610779578063921369131461079957600080fd5b806349bd5a5e116102c1578063715018a61161025f5780637af8ed9c1161022e5780637af8ed9c146106f05780637bce5a04146107105780638095d564146107265780638a8c523c1461074657600080fd5b8063715018a6146106855780637571336a1461069a57806375f0a874146106ba57806377c18352146106da57600080fd5b80636204effa1161029b5780636204effa146105f95780636303516c1461060e5780636ddd17131461062e57806370a082311461064f57600080fd5b806349bd5a5e146105725780634a62bb65146105a65780634fbee193146105c057600080fd5b80631a8145bb1161032e57806323b872dd1161030857806323b872dd1461050057806327c8f83514610520578063313ce56714610536578063395093511461055257600080fd5b80631a8145bb146104b45780631f3fed8f146104ca578063203e727e146104e057600080fd5b80631694505e1161036a5780631694505e1461041b57806318160ddd146104675780631816467f1461047c57806319c59e2c1461049e57600080fd5b806306fdde031461039c578063095ea7b3146103c75780630e47e822146103f757600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610ae4565b6040516103be91906128b8565b60405180910390f35b3480156103d357600080fd5b506103e76103e236600461291b565b610b76565b60405190151581526020016103be565b34801561040357600080fd5b5061040d60135481565b6040519081526020016103be565b34801561042757600080fd5b5061044f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103be565b34801561047357600080fd5b5060025461040d565b34801561048857600080fd5b5061049c610497366004612947565b610b8d565b005b3480156104aa57600080fd5b5061040d600f5481565b3480156104c057600080fd5b5061040d60185481565b3480156104d657600080fd5b5061040d60175481565b3480156104ec57600080fd5b5061049c6104fb366004612964565b610c1d565b34801561050c57600080fd5b506103e761051b36600461297d565b610cfa565b34801561052c57600080fd5b5061044f61dead81565b34801561054257600080fd5b50604051601281526020016103be565b34801561055e57600080fd5b506103e761056d36600461291b565b610da4565b34801561057e57600080fd5b5061044f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b257600080fd5b506008546103e79060ff1681565b3480156105cc57600080fd5b506103e76105db366004612947565b6001600160a01b03166000908152601a602052604090205460ff1690565b34801561060557600080fd5b5061049c610de0565b34801561061a57600080fd5b50600c5461044f906001600160a01b031681565b34801561063a57600080fd5b506005546103e790600160a81b900460ff1681565b34801561065b57600080fd5b5061040d61066a366004612947565b6001600160a01b031660009081526020819052604090205490565b34801561069157600080fd5b5061049c610e94565b3480156106a657600080fd5b5061049c6106b53660046129ce565b610eca565b3480156106c657600080fd5b50600d5461044f906001600160a01b031681565b3480156106e657600080fd5b5061040d60075481565b3480156106fc57600080fd5b506103e761070b366004612964565b610f1f565b34801561071c57600080fd5b5061040d60105481565b34801561073257600080fd5b5061049c610741366004612a03565b610fe7565b34801561075257600080fd5b5061049c61108f565b34801561076757600080fd5b506005546001600160a01b031661044f565b34801561078557600080fd5b50600e5461044f906001600160a01b031681565b3480156107a557600080fd5b5061040d60145481565b3480156107bb57600080fd5b5061049c6107ca366004612a2f565b611104565b3480156107db57600080fd5b506103b161114c565b3480156107f057600080fd5b5061049c6107ff3660046129ce565b61115b565b34801561081057600080fd5b5061040d60125481565b34801561082657600080fd5b5061040d60195481565b34801561083c57600080fd5b506103e761084b366004612947565b601b6020526000908152604090205460ff1681565b34801561086c57600080fd5b5061040d60165481565b34801561088257600080fd5b506103e761089136600461291b565b61123a565b3480156108a257600080fd5b506103e76108b136600461291b565b6112d3565b3480156108c257600080fd5b5061049c6108d1366004612947565b6112e0565b3480156108e257600080fd5b506103e76108f1366004612947565b601c6020526000908152604090205460ff1681565b34801561091257600080fd5b50600e546103e790600160a01b900460ff1681565b34801561093357600080fd5b5061049c6109423660046129ce565b611367565b34801561095357600080fd5b5061049c610962366004612a03565b6113f0565b34801561097357600080fd5b5061049c610982366004612964565b611493565b34801561099357600080fd5b506103e7611540565b3480156109a857600080fd5b506008546103e790610100900460ff1681565b3480156109c757600080fd5b5061040d600a5481565b3480156109dd57600080fd5b506103e76109ec366004612964565b61157d565b3480156109fd57600080fd5b5061040d610a0c366004612a4a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a4357600080fd5b5061040d60065481565b348015610a5957600080fd5b506103e7611725565b348015610a6e57600080fd5b5061040d60115481565b348015610a8457600080fd5b5061049c610a93366004612947565b611763565b348015610aa457600080fd5b5061040d60155481565b348015610aba57600080fd5b5061040d60095481565b348015610ad057600080fd5b5061049c610adf366004612947565b6117fe565b606060038054610af390612a83565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1f90612a83565b8015610b6c5780601f10610b4157610100808354040283529160200191610b6c565b820191906000526020600020905b815481529060010190602001808311610b4f57829003601f168201915b5050505050905090565b6000610b8333848461184a565b5060015b92915050565b6005546001600160a01b03163314610bc05760405162461bcd60e51b8152600401610bb790612abd565b60405180910390fd5b600e546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c475760405162461bcd60e51b8152600401610bb790612abd565b670de0b6b3a76400006103e8610c5c60025490565b610c67906001612b08565b610c719190612b1f565b610c7b9190612b1f565b811015610ce25760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610bb7565b610cf481670de0b6b3a7640000612b08565b600a5550565b6000610d0784848461196e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d8c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bb7565b610d99853385840361184a565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b83918590610ddb908690612b41565b61184a565b6005546001600160a01b03163314610e0a5760405162461bcd60e51b8152600401610bb790612abd565b601d5460ff16610e365760405162461bcd60e51b81526020600482015260006024820152604401610bb7565b601d805460ff191690556014601081905560006011819055601281905590610e5f908290612b41565b610e699190612b41565b600f55600e805460ff60a01b1916600160a01b1790556005805460ff60a81b1916600160a81b179055565b6005546001600160a01b03163314610ebe5760405162461bcd60e51b8152600401610bb790612abd565b610ec860006121c8565b565b6005546001600160a01b03163314610ef45760405162461bcd60e51b8152600401610bb790612abd565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546000906001600160a01b03163314610f4c5760405162461bcd60e51b8152600401610bb790612abd565b600654821015610fba5760405162461bcd60e51b815260206004820152603360248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015272081cddd85c151bdad95b9cd05d105b5bdd5b9d606a1b6064820152608401610bb7565b620186a0610fc760025490565b610fd19084612b08565b610fdb9190612b1f565b6007555060015b919050565b6005546001600160a01b031633146110115760405162461bcd60e51b8152600401610bb790612abd565b6010839055601182905560128190558061102b8385612b41565b6110359190612b41565b600f819055604b101561108a5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420373525206f72206c6573730000006044820152606401610bb7565b505050565b6005546001600160a01b031633146110b95760405162461bcd60e51b8152600401610bb790612abd565b601d5460ff166110e55760405162461bcd60e51b81526020600482015260006024820152604401610bb7565b6046601081905560006011819055601281905590610e5f908290612b41565b6005546001600160a01b0316331461112e5760405162461bcd60e51b8152600401610bb790612abd565b60058054911515600160a81b0260ff60a81b19909216919091179055565b606060048054610af390612a83565b6005546001600160a01b031633146111855760405162461bcd60e51b8152600401610bb790612abd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361122c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bb7565b611236828261221a565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112bc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bb7565b6112c9338585840361184a565b5060019392505050565b6000610b8333848461196e565b6005546001600160a01b0316331461130a5760405162461bcd60e51b8152600401610bb790612abd565b600d546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113915760405162461bcd60e51b8152600401610bb790612abd565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610bb790612abd565b601483905560158290556016819055806114348385612b41565b61143e9190612b41565b6013819055604b101561108a5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420373525206f72206c6573730000006044820152606401610bb7565b6005546001600160a01b031633146114bd5760405162461bcd60e51b8152600401610bb790612abd565b600581101561151a5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610bb7565b6103e861152660025490565b6115309083612b08565b61153a9190612b1f565b60095550565b6005546000906001600160a01b0316331461156d5760405162461bcd60e51b8152600401610bb790612abd565b506008805460ff19169055600190565b6005546000906001600160a01b031633146115aa5760405162461bcd60e51b8152600401610bb790612abd565b60018210156116195760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bb7565b6101f48211156116885760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610bb7565b6007548211156116f95760405162461bcd60e51b815260206004820152603660248201527f5377617020616d6f756e742063616e6e6f7420626520686967686572207468616044820152756e206d6178546f6b656e73466f72537761706261636b60501b6064820152608401610bb7565b620186a061170660025490565b6117109084612b08565b61171a9190612b1f565b600655506001919050565b6005546000906001600160a01b031633146117525760405162461bcd60e51b8152600401610bb790612abd565b506008805461ff0019169055600190565b6005546001600160a01b0316331461178d5760405162461bcd60e51b8152600401610bb790612abd565b6001600160a01b0381166117f25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb7565b6117fb816121c8565b50565b6005546001600160a01b031633146118285760405162461bcd60e51b8152600401610bb790612abd565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118ac5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bb7565b6001600160a01b03821661190d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bb7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119945760405162461bcd60e51b8152600401610bb790612b54565b6001600160a01b0382166119ba5760405162461bcd60e51b8152600401610bb790612b99565b806000036119ce5761108a8383600061226e565b60085460ff1615611e92576005546001600160a01b03848116911614801590611a0557506005546001600160a01b03838116911614155b8015611a1957506001600160a01b03821615155b8015611a3057506001600160a01b03821661dead14155b8015611a465750600554600160a01b900460ff16155b15611e9257600e54600160a01b900460ff16611ae0576001600160a01b0383166000908152601a602052604090205460ff1680611a9b57506001600160a01b0382166000908152601a602052604090205460ff165b611ae05760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bb7565b600854610100900460ff1615611c2c576005546001600160a01b03838116911614801590611b4057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611b7e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611c2c57326000908152600b60205260409020544311611c195760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610bb7565b326000908152600b602052604090204390555b6001600160a01b0383166000908152601c602052604090205460ff168015611c6d57506001600160a01b0382166000908152601b602052604090205460ff16155b15611d5157600a54811115611ce25760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610bb7565b6009546001600160a01b038316600090815260208190526040902054611d089083612b41565b1115611d4c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bb7565b611e92565b6001600160a01b0382166000908152601c602052604090205460ff168015611d9257506001600160a01b0383166000908152601b602052604090205460ff16155b15611e0857600a54811115611d4c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610bb7565b6001600160a01b0382166000908152601b602052604090205460ff16611e92576009546001600160a01b038316600090815260208190526040902054611e4e9083612b41565b1115611e925760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bb7565b3060009081526020819052604090205460065481108015908190611ebf5750600554600160a81b900460ff165b8015611ed55750600554600160a01b900460ff16155b8015611efa57506001600160a01b0385166000908152601c602052604090205460ff16155b8015611f1f57506001600160a01b0385166000908152601a602052604090205460ff16155b8015611f4457506001600160a01b0384166000908152601a602052604090205460ff16155b15611f72576005805460ff60a01b1916600160a01b179055611f646123c3565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601a602052604090205460ff600160a01b909204821615911680611fc057506001600160a01b0385166000908152601a602052604090205460ff165b15611fc9575060005b600081156121b4576001600160a01b0386166000908152601c602052604090205460ff168015611ffb57506000601354115b156120b957612020606461201a601354886125e790919063ffffffff16565b906125fa565b9050601354601554826120339190612b08565b61203d9190612b1f565b6018600082825461204e9190612b41565b90915550506013546016546120639083612b08565b61206d9190612b1f565b6019600082825461207e9190612b41565b90915550506013546014546120939083612b08565b61209d9190612b1f565b601760008282546120ae9190612b41565b909155506121969050565b6001600160a01b0387166000908152601c602052604090205460ff1680156120e357506000600f54115b1561219657612102606461201a600f54886125e790919063ffffffff16565b9050600f54601154826121159190612b08565b61211f9190612b1f565b601860008282546121309190612b41565b9091555050600f546012546121459083612b08565b61214f9190612b1f565b601960008282546121609190612b41565b9091555050600f546010546121759083612b08565b61217f9190612b1f565b601760008282546121909190612b41565b90915550505b80156121a7576121a787308361226e565b6121b18186612bdc565b94505b6121bf87878761226e565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122945760405162461bcd60e51b8152600401610bb790612b54565b6001600160a01b0382166122ba5760405162461bcd60e51b8152600401610bb790612b99565b6001600160a01b038316600090815260208190526040902054818110156123325760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bb7565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612369908490612b41565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123b591815260200190565b60405180910390a350505050565b30600090815260208190526040812054905060006019546017546018546123ea9190612b41565b6123f49190612b41565b90506000821580612403575081155b1561240d57505050565b60075483111561241d5760075492505b6000600283601854866124309190612b08565b61243a9190612b1f565b6124449190612b1f565b905060006124528583612606565b90504761245e82612612565b600061246a4783612606565b905060006124878761201a601754856125e790919063ffffffff16565b905060006124a48861201a601954866125e790919063ffffffff16565b90506000816124b38486612bdc565b6124bd9190612bdc565b6000601881905560178190556019819055600e546040519293506001600160a01b031691849181818185875af1925050503d806000811461251a576040519150601f19603f3d011682016040523d82523d6000602084013e61251f565b606091505b509098505086158015906125335750600081115b156125865761254287826127d2565b601854604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600d546040516001600160a01b03909116904790600081818185875af1925050503d80600081146125d3576040519150601f19603f3d011682016040523d82523d6000602084013e6125d8565b606091505b50505050505050505050505050565b60006125f38284612b08565b9392505050565b60006125f38284612b1f565b60006125f38284612bdc565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061264757612647612bef565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e99190612c05565b816001815181106126fc576126fc612bef565b60200260200101906001600160a01b031690816001600160a01b031681525050612747307f00000000000000000000000000000000000000000000000000000000000000008461184a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061279c908590600090869030904290600401612c22565b600060405180830381600087803b1580156127b657600080fd5b505af11580156127ca573d6000803e3d6000fd5b505050505050565b6127fd307f00000000000000000000000000000000000000000000000000000000000000008461184a565b600c5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af115801561288c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128b19190612c93565b5050505050565b600060208083528351808285015260005b818110156128e5578581018301518582016040015282016128c9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146117fb57600080fd5b6000806040838503121561292e57600080fd5b823561293981612906565b946020939093013593505050565b60006020828403121561295957600080fd5b81356125f381612906565b60006020828403121561297657600080fd5b5035919050565b60008060006060848603121561299257600080fd5b833561299d81612906565b925060208401356129ad81612906565b929592945050506040919091013590565b80358015158114610fe257600080fd5b600080604083850312156129e157600080fd5b82356129ec81612906565b91506129fa602084016129be565b90509250929050565b600080600060608486031215612a1857600080fd5b505081359360208301359350604090920135919050565b600060208284031215612a4157600080fd5b6125f3826129be565b60008060408385031215612a5d57600080fd5b8235612a6881612906565b91506020830135612a7881612906565b809150509250929050565b600181811c90821680612a9757607f821691505b602082108103612ab757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b8757610b87612af2565b600082612b3c57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b8757610b87612af2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b8757610b87612af2565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612c1757600080fd5b81516125f381612906565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c725784516001600160a01b031683529383019391830191600101612c4d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ca857600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c35a510332c19d70132d97f3b304b80c0d40ea7345f1e4423fe05c002c55310e64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103905760003560e01c80638da5cb5b116101dc578063c024666811610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610a78578063f637434214610a98578063f8b45b0514610aae578063fbc10c5514610ac457600080fd5b8063dd62ed3e146109f1578063e2f4560514610a37578063e884f26014610a4d578063f11a24d314610a6257600080fd5b8063c538e1df116100dc578063c538e1df14610987578063c876d0b91461099c578063c8c8ebe4146109bb578063d257b34f146109d157600080fd5b8063c024666814610927578063c17b5b8c14610947578063c18bc1951461096757600080fd5b80639fccce321161017a578063a9059cbb11610149578063a9059cbb14610896578063aacebbe3146108b6578063b62496f5146108d6578063bbc0c7421461090657600080fd5b80639fccce321461081a578063a0c973f114610830578063a0d82dc514610860578063a457c2d71461087657600080fd5b8063924de9b7116101b6578063924de9b7146107af57806395d89b41146107cf5780639a7a23d6146107e45780639c3b4fdc1461080457600080fd5b80638da5cb5b1461075b5780638ea5220f14610779578063921369131461079957600080fd5b806349bd5a5e116102c1578063715018a61161025f5780637af8ed9c1161022e5780637af8ed9c146106f05780637bce5a04146107105780638095d564146107265780638a8c523c1461074657600080fd5b8063715018a6146106855780637571336a1461069a57806375f0a874146106ba57806377c18352146106da57600080fd5b80636204effa1161029b5780636204effa146105f95780636303516c1461060e5780636ddd17131461062e57806370a082311461064f57600080fd5b806349bd5a5e146105725780634a62bb65146105a65780634fbee193146105c057600080fd5b80631a8145bb1161032e57806323b872dd1161030857806323b872dd1461050057806327c8f83514610520578063313ce56714610536578063395093511461055257600080fd5b80631a8145bb146104b45780631f3fed8f146104ca578063203e727e146104e057600080fd5b80631694505e1161036a5780631694505e1461041b57806318160ddd146104675780631816467f1461047c57806319c59e2c1461049e57600080fd5b806306fdde031461039c578063095ea7b3146103c75780630e47e822146103f757600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610ae4565b6040516103be91906128b8565b60405180910390f35b3480156103d357600080fd5b506103e76103e236600461291b565b610b76565b60405190151581526020016103be565b34801561040357600080fd5b5061040d60135481565b6040519081526020016103be565b34801561042757600080fd5b5061044f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103be565b34801561047357600080fd5b5060025461040d565b34801561048857600080fd5b5061049c610497366004612947565b610b8d565b005b3480156104aa57600080fd5b5061040d600f5481565b3480156104c057600080fd5b5061040d60185481565b3480156104d657600080fd5b5061040d60175481565b3480156104ec57600080fd5b5061049c6104fb366004612964565b610c1d565b34801561050c57600080fd5b506103e761051b36600461297d565b610cfa565b34801561052c57600080fd5b5061044f61dead81565b34801561054257600080fd5b50604051601281526020016103be565b34801561055e57600080fd5b506103e761056d36600461291b565b610da4565b34801561057e57600080fd5b5061044f7f000000000000000000000000ecb1d89367a19210a707f28881c2ec6b01a6185581565b3480156105b257600080fd5b506008546103e79060ff1681565b3480156105cc57600080fd5b506103e76105db366004612947565b6001600160a01b03166000908152601a602052604090205460ff1690565b34801561060557600080fd5b5061049c610de0565b34801561061a57600080fd5b50600c5461044f906001600160a01b031681565b34801561063a57600080fd5b506005546103e790600160a81b900460ff1681565b34801561065b57600080fd5b5061040d61066a366004612947565b6001600160a01b031660009081526020819052604090205490565b34801561069157600080fd5b5061049c610e94565b3480156106a657600080fd5b5061049c6106b53660046129ce565b610eca565b3480156106c657600080fd5b50600d5461044f906001600160a01b031681565b3480156106e657600080fd5b5061040d60075481565b3480156106fc57600080fd5b506103e761070b366004612964565b610f1f565b34801561071c57600080fd5b5061040d60105481565b34801561073257600080fd5b5061049c610741366004612a03565b610fe7565b34801561075257600080fd5b5061049c61108f565b34801561076757600080fd5b506005546001600160a01b031661044f565b34801561078557600080fd5b50600e5461044f906001600160a01b031681565b3480156107a557600080fd5b5061040d60145481565b3480156107bb57600080fd5b5061049c6107ca366004612a2f565b611104565b3480156107db57600080fd5b506103b161114c565b3480156107f057600080fd5b5061049c6107ff3660046129ce565b61115b565b34801561081057600080fd5b5061040d60125481565b34801561082657600080fd5b5061040d60195481565b34801561083c57600080fd5b506103e761084b366004612947565b601b6020526000908152604090205460ff1681565b34801561086c57600080fd5b5061040d60165481565b34801561088257600080fd5b506103e761089136600461291b565b61123a565b3480156108a257600080fd5b506103e76108b136600461291b565b6112d3565b3480156108c257600080fd5b5061049c6108d1366004612947565b6112e0565b3480156108e257600080fd5b506103e76108f1366004612947565b601c6020526000908152604090205460ff1681565b34801561091257600080fd5b50600e546103e790600160a01b900460ff1681565b34801561093357600080fd5b5061049c6109423660046129ce565b611367565b34801561095357600080fd5b5061049c610962366004612a03565b6113f0565b34801561097357600080fd5b5061049c610982366004612964565b611493565b34801561099357600080fd5b506103e7611540565b3480156109a857600080fd5b506008546103e790610100900460ff1681565b3480156109c757600080fd5b5061040d600a5481565b3480156109dd57600080fd5b506103e76109ec366004612964565b61157d565b3480156109fd57600080fd5b5061040d610a0c366004612a4a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a4357600080fd5b5061040d60065481565b348015610a5957600080fd5b506103e7611725565b348015610a6e57600080fd5b5061040d60115481565b348015610a8457600080fd5b5061049c610a93366004612947565b611763565b348015610aa457600080fd5b5061040d60155481565b348015610aba57600080fd5b5061040d60095481565b348015610ad057600080fd5b5061049c610adf366004612947565b6117fe565b606060038054610af390612a83565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1f90612a83565b8015610b6c5780601f10610b4157610100808354040283529160200191610b6c565b820191906000526020600020905b815481529060010190602001808311610b4f57829003601f168201915b5050505050905090565b6000610b8333848461184a565b5060015b92915050565b6005546001600160a01b03163314610bc05760405162461bcd60e51b8152600401610bb790612abd565b60405180910390fd5b600e546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c475760405162461bcd60e51b8152600401610bb790612abd565b670de0b6b3a76400006103e8610c5c60025490565b610c67906001612b08565b610c719190612b1f565b610c7b9190612b1f565b811015610ce25760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610bb7565b610cf481670de0b6b3a7640000612b08565b600a5550565b6000610d0784848461196e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d8c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bb7565b610d99853385840361184a565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b83918590610ddb908690612b41565b61184a565b6005546001600160a01b03163314610e0a5760405162461bcd60e51b8152600401610bb790612abd565b601d5460ff16610e365760405162461bcd60e51b81526020600482015260006024820152604401610bb7565b601d805460ff191690556014601081905560006011819055601281905590610e5f908290612b41565b610e699190612b41565b600f55600e805460ff60a01b1916600160a01b1790556005805460ff60a81b1916600160a81b179055565b6005546001600160a01b03163314610ebe5760405162461bcd60e51b8152600401610bb790612abd565b610ec860006121c8565b565b6005546001600160a01b03163314610ef45760405162461bcd60e51b8152600401610bb790612abd565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546000906001600160a01b03163314610f4c5760405162461bcd60e51b8152600401610bb790612abd565b600654821015610fba5760405162461bcd60e51b815260206004820152603360248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015272081cddd85c151bdad95b9cd05d105b5bdd5b9d606a1b6064820152608401610bb7565b620186a0610fc760025490565b610fd19084612b08565b610fdb9190612b1f565b6007555060015b919050565b6005546001600160a01b031633146110115760405162461bcd60e51b8152600401610bb790612abd565b6010839055601182905560128190558061102b8385612b41565b6110359190612b41565b600f819055604b101561108a5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420373525206f72206c6573730000006044820152606401610bb7565b505050565b6005546001600160a01b031633146110b95760405162461bcd60e51b8152600401610bb790612abd565b601d5460ff166110e55760405162461bcd60e51b81526020600482015260006024820152604401610bb7565b6046601081905560006011819055601281905590610e5f908290612b41565b6005546001600160a01b0316331461112e5760405162461bcd60e51b8152600401610bb790612abd565b60058054911515600160a81b0260ff60a81b19909216919091179055565b606060048054610af390612a83565b6005546001600160a01b031633146111855760405162461bcd60e51b8152600401610bb790612abd565b7f000000000000000000000000ecb1d89367a19210a707f28881c2ec6b01a618556001600160a01b0316826001600160a01b03160361122c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bb7565b611236828261221a565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112bc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bb7565b6112c9338585840361184a565b5060019392505050565b6000610b8333848461196e565b6005546001600160a01b0316331461130a5760405162461bcd60e51b8152600401610bb790612abd565b600d546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113915760405162461bcd60e51b8152600401610bb790612abd565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610bb790612abd565b601483905560158290556016819055806114348385612b41565b61143e9190612b41565b6013819055604b101561108a5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420373525206f72206c6573730000006044820152606401610bb7565b6005546001600160a01b031633146114bd5760405162461bcd60e51b8152600401610bb790612abd565b600581101561151a5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610bb7565b6103e861152660025490565b6115309083612b08565b61153a9190612b1f565b60095550565b6005546000906001600160a01b0316331461156d5760405162461bcd60e51b8152600401610bb790612abd565b506008805460ff19169055600190565b6005546000906001600160a01b031633146115aa5760405162461bcd60e51b8152600401610bb790612abd565b60018210156116195760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bb7565b6101f48211156116885760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610bb7565b6007548211156116f95760405162461bcd60e51b815260206004820152603660248201527f5377617020616d6f756e742063616e6e6f7420626520686967686572207468616044820152756e206d6178546f6b656e73466f72537761706261636b60501b6064820152608401610bb7565b620186a061170660025490565b6117109084612b08565b61171a9190612b1f565b600655506001919050565b6005546000906001600160a01b031633146117525760405162461bcd60e51b8152600401610bb790612abd565b506008805461ff0019169055600190565b6005546001600160a01b0316331461178d5760405162461bcd60e51b8152600401610bb790612abd565b6001600160a01b0381166117f25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb7565b6117fb816121c8565b50565b6005546001600160a01b031633146118285760405162461bcd60e51b8152600401610bb790612abd565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118ac5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bb7565b6001600160a01b03821661190d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bb7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119945760405162461bcd60e51b8152600401610bb790612b54565b6001600160a01b0382166119ba5760405162461bcd60e51b8152600401610bb790612b99565b806000036119ce5761108a8383600061226e565b60085460ff1615611e92576005546001600160a01b03848116911614801590611a0557506005546001600160a01b03838116911614155b8015611a1957506001600160a01b03821615155b8015611a3057506001600160a01b03821661dead14155b8015611a465750600554600160a01b900460ff16155b15611e9257600e54600160a01b900460ff16611ae0576001600160a01b0383166000908152601a602052604090205460ff1680611a9b57506001600160a01b0382166000908152601a602052604090205460ff165b611ae05760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bb7565b600854610100900460ff1615611c2c576005546001600160a01b03838116911614801590611b4057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611b7e57507f000000000000000000000000ecb1d89367a19210a707f28881c2ec6b01a618556001600160a01b0316826001600160a01b031614155b15611c2c57326000908152600b60205260409020544311611c195760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610bb7565b326000908152600b602052604090204390555b6001600160a01b0383166000908152601c602052604090205460ff168015611c6d57506001600160a01b0382166000908152601b602052604090205460ff16155b15611d5157600a54811115611ce25760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610bb7565b6009546001600160a01b038316600090815260208190526040902054611d089083612b41565b1115611d4c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bb7565b611e92565b6001600160a01b0382166000908152601c602052604090205460ff168015611d9257506001600160a01b0383166000908152601b602052604090205460ff16155b15611e0857600a54811115611d4c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610bb7565b6001600160a01b0382166000908152601b602052604090205460ff16611e92576009546001600160a01b038316600090815260208190526040902054611e4e9083612b41565b1115611e925760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bb7565b3060009081526020819052604090205460065481108015908190611ebf5750600554600160a81b900460ff165b8015611ed55750600554600160a01b900460ff16155b8015611efa57506001600160a01b0385166000908152601c602052604090205460ff16155b8015611f1f57506001600160a01b0385166000908152601a602052604090205460ff16155b8015611f4457506001600160a01b0384166000908152601a602052604090205460ff16155b15611f72576005805460ff60a01b1916600160a01b179055611f646123c3565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601a602052604090205460ff600160a01b909204821615911680611fc057506001600160a01b0385166000908152601a602052604090205460ff165b15611fc9575060005b600081156121b4576001600160a01b0386166000908152601c602052604090205460ff168015611ffb57506000601354115b156120b957612020606461201a601354886125e790919063ffffffff16565b906125fa565b9050601354601554826120339190612b08565b61203d9190612b1f565b6018600082825461204e9190612b41565b90915550506013546016546120639083612b08565b61206d9190612b1f565b6019600082825461207e9190612b41565b90915550506013546014546120939083612b08565b61209d9190612b1f565b601760008282546120ae9190612b41565b909155506121969050565b6001600160a01b0387166000908152601c602052604090205460ff1680156120e357506000600f54115b1561219657612102606461201a600f54886125e790919063ffffffff16565b9050600f54601154826121159190612b08565b61211f9190612b1f565b601860008282546121309190612b41565b9091555050600f546012546121459083612b08565b61214f9190612b1f565b601960008282546121609190612b41565b9091555050600f546010546121759083612b08565b61217f9190612b1f565b601760008282546121909190612b41565b90915550505b80156121a7576121a787308361226e565b6121b18186612bdc565b94505b6121bf87878761226e565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122945760405162461bcd60e51b8152600401610bb790612b54565b6001600160a01b0382166122ba5760405162461bcd60e51b8152600401610bb790612b99565b6001600160a01b038316600090815260208190526040902054818110156123325760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bb7565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612369908490612b41565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123b591815260200190565b60405180910390a350505050565b30600090815260208190526040812054905060006019546017546018546123ea9190612b41565b6123f49190612b41565b90506000821580612403575081155b1561240d57505050565b60075483111561241d5760075492505b6000600283601854866124309190612b08565b61243a9190612b1f565b6124449190612b1f565b905060006124528583612606565b90504761245e82612612565b600061246a4783612606565b905060006124878761201a601754856125e790919063ffffffff16565b905060006124a48861201a601954866125e790919063ffffffff16565b90506000816124b38486612bdc565b6124bd9190612bdc565b6000601881905560178190556019819055600e546040519293506001600160a01b031691849181818185875af1925050503d806000811461251a576040519150601f19603f3d011682016040523d82523d6000602084013e61251f565b606091505b509098505086158015906125335750600081115b156125865761254287826127d2565b601854604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600d546040516001600160a01b03909116904790600081818185875af1925050503d80600081146125d3576040519150601f19603f3d011682016040523d82523d6000602084013e6125d8565b606091505b50505050505050505050505050565b60006125f38284612b08565b9392505050565b60006125f38284612b1f565b60006125f38284612bdc565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061264757612647612bef565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e99190612c05565b816001815181106126fc576126fc612bef565b60200260200101906001600160a01b031690816001600160a01b031681525050612747307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461184a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061279c908590600090869030904290600401612c22565b600060405180830381600087803b1580156127b657600080fd5b505af11580156127ca573d6000803e3d6000fd5b505050505050565b6127fd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461184a565b600c5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af115801561288c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128b19190612c93565b5050505050565b600060208083528351808285015260005b818110156128e5578581018301518582016040015282016128c9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146117fb57600080fd5b6000806040838503121561292e57600080fd5b823561293981612906565b946020939093013593505050565b60006020828403121561295957600080fd5b81356125f381612906565b60006020828403121561297657600080fd5b5035919050565b60008060006060848603121561299257600080fd5b833561299d81612906565b925060208401356129ad81612906565b929592945050506040919091013590565b80358015158114610fe257600080fd5b600080604083850312156129e157600080fd5b82356129ec81612906565b91506129fa602084016129be565b90509250929050565b600080600060608486031215612a1857600080fd5b505081359360208301359350604090920135919050565b600060208284031215612a4157600080fd5b6125f3826129be565b60008060408385031215612a5d57600080fd5b8235612a6881612906565b91506020830135612a7881612906565b809150509250929050565b600181811c90821680612a9757607f821691505b602082108103612ab757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b8757610b87612af2565b600082612b3c57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b8757610b87612af2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b8757610b87612af2565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612c1757600080fd5b81516125f381612906565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c725784516001600160a01b031683529383019391830191600101612c4d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ca857600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c35a510332c19d70132d97f3b304b80c0d40ea7345f1e4423fe05c002c55310e64736f6c63430008130033

Deployed Bytecode Sourcemap

24406:18933:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10842:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13009:169;;;;;;;;;;-1:-1:-1;13009:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;13009:169:0;1023:187:1;25424:28:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;25424:28:0;1215:177:1;24485:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1588:32:1;;;1570:51;;1558:2;1543:18;24485:51:0;1397:230:1;11962:108:0;;;;;;;;;;-1:-1:-1;12050:12:0;;11962:108;;35535:157;;;;;;;;;;-1:-1:-1;35535:157:0;;;;;:::i;:::-;;:::i;:::-;;25283:27;;;;;;;;;;;;;;;;25609:33;;;;;;;;;;;;;;;;25569;;;;;;;;;;;;;;;;31719:275;;;;;;;;;;-1:-1:-1;31719:275:0;;;;;:::i;:::-;;:::i;13660:492::-;;;;;;;;;;-1:-1:-1;13660:492:0;;;;;:::i;:::-;;:::i;24588:53::-;;;;;;;;;;;;24634:6;24588:53;;11804:93;;;;;;;;;;-1:-1:-1;11804:93:0;;11887:2;2880:36:1;;2868:2;2853:18;11804:93:0;2738:184:1;14561:215:0;;;;;;;;;;-1:-1:-1;14561:215:0;;;;;:::i;:::-;;:::i;24543:38::-;;;;;;;;;;;;;;;24835:33;;;;;;;;;;-1:-1:-1;24835:33:0;;;;;;;;35700:119;;;;;;;;;;-1:-1:-1;35700:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;35790:21:0;35766:4;35790:21;;;:12;:21;;;;;;;;;35700:119;29582:336;;;;;;;;;;;;;:::i;25141:23::-;;;;;;;;;;-1:-1:-1;25141:23:0;;;;-1:-1:-1;;;;;25141:23:0;;;24695:31;;;;;;;;;;-1:-1:-1;24695:31:0;;;;-1:-1:-1;;;24695:31:0;;;;;;12133:127;;;;;;;;;;-1:-1:-1;12133:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12234:18:0;12207:7;12234:18;;;;;;;;;;;;12133:127;21866:103;;;;;;;;;;;;;:::i;32539:152::-;;;;;;;;;;-1:-1:-1;32539:152:0;;;;;:::i;:::-;;:::i;25171:30::-;;;;;;;;;;-1:-1:-1;25171:30:0;;;;-1:-1:-1;;;;;25171:30:0;;;24773:35;;;;;;;;;;;;;;;;31200:361;;;;;;;;;;-1:-1:-1;31200:361:0;;;;;:::i;:::-;;:::i;25317:30::-;;;;;;;;;;;;;;;;33136:403;;;;;;;;;;-1:-1:-1;33136:403:0;;;;;:::i;:::-;;:::i;29273:301::-;;;;;;;;;;;;;:::i;21215:87::-;;;;;;;;;;-1:-1:-1;21288:6:0;;-1:-1:-1;;;;;21288:6:0;21215:87;;25208:24;;;;;;;;;;-1:-1:-1;25208:24:0;;;;-1:-1:-1;;;;;25208:24:0;;;25459:31;;;;;;;;;;;;;;;;32809:100;;;;;;;;;;-1:-1:-1;32809:100:0;;;;;:::i;:::-;;:::i;11061:104::-;;;;;;;;;;;;;:::i;34652:304::-;;;;;;;;;;-1:-1:-1;34652:304:0;;;;;:::i;:::-;;:::i;25391:24::-;;;;;;;;;;;;;;;;25649:27;;;;;;;;;;;;;;;;25818:48;;;;;;;;;;-1:-1:-1;25818:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25535:25;;;;;;;;;;;;;;;;15279:413;;;;;;;;;;-1:-1:-1;15279:413:0;;;;;:::i;:::-;;:::i;12473:175::-;;;;;;;;;;-1:-1:-1;12473:175:0;;;;;:::i;:::-;;:::i;35160:231::-;;;;;;;;;;-1:-1:-1;35160:231:0;;;;;:::i;:::-;;:::i;26024:57::-;;;;;;;;;;-1:-1:-1;26024:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25241:33;;;;;;;;;;-1:-1:-1;25241:33:0;;;;-1:-1:-1;;;25241:33:0;;;;;;34342:175;;;;;;;;;;-1:-1:-1;34342:175:0;;;;;:::i;:::-;;:::i;33763:412::-;;;;;;;;;;-1:-1:-1;33763:412:0;;;;;:::i;:::-;;:::i;32119:232::-;;;;;;;;;;-1:-1:-1;32119:232:0;;;;;:::i;:::-;;:::i;29993:117::-;;;;;;;;;;;;;:::i;24875:39::-;;;;;;;;;;-1:-1:-1;24875:39:0;;;;;;;;;;;24952:35;;;;;;;;;;;;;;;;30462:619;;;;;;;;;;-1:-1:-1;30462:619:0;;;;;:::i;:::-;;:::i;12711:151::-;;;;;;;;;;-1:-1:-1;12711:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;12827:18:0;;;12800:7;12827:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12711:151;24733:33;;;;;;;;;;;;;;;;30181:135;;;;;;;;;;;;;:::i;25354:30::-;;;;;;;;;;;;;;;;22124:201;;;;;;;;;;-1:-1:-1;22124:201:0;;;;;:::i;:::-;;:::i;25497:31::-;;;;;;;;;;;;;;;;24921:24;;;;;;;;;;;;;;;;35399:128;;;;;;;;;;-1:-1:-1;35399:128:0;;;;;:::i;:::-;;:::i;10842:100::-;10896:13;10929:5;10922:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10842:100;:::o;13009:169::-;13092:4;13109:39;3412:10;13132:7;13141:6;13109:8;:39::i;:::-;-1:-1:-1;13166:4:0;13009:169;;;;;:::o;35535:157::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;;;;;;;;;35642:9:::1;::::0;35614:38:::1;::::0;-1:-1:-1;;;;;35642:9:0;;::::1;::::0;35614:38;::::1;::::0;::::1;::::0;35642:9:::1;::::0;35614:38:::1;35663:9;:21:::0;;-1:-1:-1;;;;;;35663:21:0::1;-1:-1:-1::0;;;;;35663:21:0;;;::::1;::::0;;;::::1;::::0;;35535:157::o;31719:275::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;31856:4:::1;31848;31827:13;12050:12:::0;;;11962:108;31827:13:::1;:17;::::0;31843:1:::1;31827:17;:::i;:::-;31826:26;;;;:::i;:::-;31825:35;;;;:::i;:::-;31815:6;:45;;31793:142;;;::::0;-1:-1:-1;;;31793:142:0;;5786:2:1;31793:142:0::1;::::0;::::1;5768:21:1::0;5825:2;5805:18;;;5798:30;5864:34;5844:18;;;5837:62;-1:-1:-1;;;5915:18:1;;;5908:45;5970:19;;31793:142:0::1;5584:411:1::0;31793:142:0::1;31969:17;:6:::0;31979::::1;31969:17;:::i;:::-;31946:20;:40:::0;-1:-1:-1;31719:275:0:o;13660:492::-;13800:4;13817:36;13827:6;13835:9;13846:6;13817:9;:36::i;:::-;-1:-1:-1;;;;;13893:19:0;;13866:24;13893:19;;;:11;:19;;;;;;;;3412:10;13893:33;;;;;;;;13945:26;;;;13937:79;;;;-1:-1:-1;;;13937:79:0;;6202:2:1;13937:79:0;;;6184:21:1;6241:2;6221:18;;;6214:30;6280:34;6260:18;;;6253:62;-1:-1:-1;;;6331:18:1;;;6324:38;6379:19;;13937:79:0;6000:404:1;13937:79:0;14052:57;14061:6;3412:10;14102:6;14083:16;:25;14052:8;:57::i;:::-;-1:-1:-1;14140:4:0;;13660:492;-1:-1:-1;;;;13660:492:0:o;14561:215::-;3412:10;14649:4;14698:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14698:34:0;;;;;;;;;;14649:4;;14666:80;;14689:7;;14698:47;;14735:10;;14698:47;:::i;:::-;14666:8;:80::i;29582:336::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;29651:10:::1;::::0;::::1;;29643:22;;;::::0;-1:-1:-1;;;29643:22:0;;6741:2:1;29643:22:0::1;::::0;::::1;6723:21:1::0;-1:-1:-1;6760:18:1;;;6753:29;6799:18;;29643:22:0::1;6539:284:1::0;29643:22:0::1;29676:10;:18:::0;;-1:-1:-1;;29676:18:0::1;::::0;;29723:2:::1;29705:15;:20:::0;;;29689:5:::1;29736:15;:19:::0;;;29766:9:::1;:13:::0;;;29689:5;29805:33:::1;::::0;29689:5;;29805:33:::1;:::i;:::-;:45;;;;:::i;:::-;29790:12;:60:::0;29861:13:::1;:20:::0;;-1:-1:-1;;;;29861:20:0::1;-1:-1:-1::0;;;29861:20:0::1;::::0;;29892:11:::1;:18:::0;;-1:-1:-1;;;;29892:18:0::1;-1:-1:-1::0;;;29892:18:0::1;::::0;;29582:336::o;21866:103::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;21931:30:::1;21958:1;21931:18;:30::i;:::-;21866:103::o:0;32539:152::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32652:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;32652:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32539:152::o;31200:361::-;21288:6;;31310:4;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;31367:18:::1;;31354:9;:31;;31332:132;;;::::0;-1:-1:-1;;;31332:132:0;;7030:2:1;31332:132:0::1;::::0;::::1;7012:21:1::0;7069:2;7049:18;;;7042:30;7108:34;7088:18;;;7081:62;-1:-1:-1;;;7159:18:1;;;7152:49;7218:19;;31332:132:0::1;6828:415:1::0;31332:132:0::1;31525:6;31510:13;12050:12:::0;;;11962:108;31510:13:::1;31498:25;::::0;:9;:25:::1;:::i;:::-;:33;;;;:::i;:::-;31475:20;:56:::0;-1:-1:-1;31549:4:0::1;21506:1;31200:361:::0;;;:::o;33136:403::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;33286:15:::1;:31:::0;;;33328:15:::1;:31:::0;;;33370:9:::1;:19:::0;;;33382:7;33415:33:::1;33346:13:::0;33304;33415:33:::1;:::i;:::-;:45;;;;:::i;:::-;33400:12;:60:::0;;;33495:2:::1;-1:-1:-1::0;33479:18:0::1;33471:60;;;::::0;-1:-1:-1;;;33471:60:0;;7450:2:1;33471:60:0::1;::::0;::::1;7432:21:1::0;7489:2;7469:18;;;7462:30;7528:31;7508:18;;;7501:59;7577:18;;33471:60:0::1;7248:353:1::0;33471:60:0::1;33136:403:::0;;;:::o;29273:301::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;29336:10:::1;::::0;::::1;;29328:22;;;::::0;-1:-1:-1;;;29328:22:0;;6741:2:1;29328:22:0::1;::::0;::::1;6723:21:1::0;-1:-1:-1;6760:18:1;;;6753:29;6799:18;;29328:22:0::1;6539:284:1::0;29328:22:0::1;29379:2;29361:15;:20:::0;;;29410:1:::1;29392:15;:19:::0;;;29422:9:::1;:13:::0;;;29410:1;29461:33:::1;::::0;29410:1;;29461:33:::1;:::i;32809:100::-:0;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;32880:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;32880:21:0::1;-1:-1:-1::0;;;;32880:21:0;;::::1;::::0;;;::::1;::::0;;32809:100::o;11061:104::-;11117:13;11150:7;11143:14;;;;;:::i;34652:304::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;34796:13:::1;-1:-1:-1::0;;;;;34788:21:0::1;:4;-1:-1:-1::0;;;;;34788:21:0::1;::::0;34766:128:::1;;;::::0;-1:-1:-1;;;34766:128:0;;7808:2:1;34766:128:0::1;::::0;::::1;7790:21:1::0;7847:2;7827:18;;;7820:30;7886:34;7866:18;;;7859:62;7957:27;7937:18;;;7930:55;8002:19;;34766:128:0::1;7606:421:1::0;34766:128:0::1;34907:41;34936:4;34942:5;34907:28;:41::i;:::-;34652:304:::0;;:::o;15279:413::-;3412:10;15372:4;15416:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15416:34:0;;;;;;;;;;15469:35;;;;15461:85;;;;-1:-1:-1;;;15461:85:0;;8234:2:1;15461:85:0;;;8216:21:1;8273:2;8253:18;;;8246:30;8312:34;8292:18;;;8285:62;-1:-1:-1;;;8363:18:1;;;8356:35;8408:19;;15461:85:0;8032:401:1;15461:85:0;15582:67;3412:10;15605:7;15633:15;15614:16;:34;15582:8;:67::i;:::-;-1:-1:-1;15680:4:0;;15279:413;-1:-1:-1;;;15279:413:0:o;12473:175::-;12559:4;12576:42;3412:10;12600:9;12611:6;12576:9;:42::i;35160:231::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;35320:15:::1;::::0;35277:59:::1;::::0;-1:-1:-1;;;;;35320:15:0;;::::1;::::0;35277:59;::::1;::::0;::::1;::::0;35320:15:::1;::::0;35277:59:::1;35347:15;:36:::0;;-1:-1:-1;;;;;;35347:36:0::1;-1:-1:-1::0;;;;;35347:36:0;;;::::1;::::0;;;::::1;::::0;;35160:231::o;34342:175::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34427:21:0;::::1;;::::0;;;:12:::1;:21;::::0;;;;;;;;:32;;-1:-1:-1;;34427:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34475:34;;1163:41:1;;;34475:34:0::1;::::0;1136:18:1;34475:34:0::1;;;;;;;34342:175:::0;;:::o;33763:412::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;33914:16:::1;:32:::0;;;33957:16:::1;:32:::0;;;34000:10:::1;:20:::0;;;34013:7;34047:35:::1;33976:13:::0;33933;34047:35:::1;:::i;:::-;:48;;;;:::i;:::-;34031:13;:64:::0;;;34131:2:::1;-1:-1:-1::0;34114:19:0::1;34106:61;;;::::0;-1:-1:-1;;;34106:61:0;;7450:2:1;34106:61:0::1;::::0;::::1;7432:21:1::0;7489:2;7469:18;;;7462:30;7528:31;7508:18;;;7501:59;7577:18;;34106:61:0::1;7248:353:1::0;32119:232:0;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;32228:1:::1;32218:6;:11;;32196:97;;;::::0;-1:-1:-1;;;32196:97:0;;8640:2:1;32196:97:0::1;::::0;::::1;8622:21:1::0;8679:2;8659:18;;;8652:30;8718:34;8698:18;;;8691:62;-1:-1:-1;;;8769:18:1;;;8762:34;8813:19;;32196:97:0::1;8438:400:1::0;32196:97:0::1;32339:4;32325:13;12050:12:::0;;;11962:108;32325:13:::1;32316:22;::::0;:6;:22:::1;:::i;:::-;:27;;;;:::i;:::-;32304:9;:39:::0;-1:-1:-1;32119:232:0:o;29993:117::-;21288:6;;30041:4;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;-1:-1:-1;30058:14:0::1;:22:::0;;-1:-1:-1;;30058:22:0::1;::::0;;;29993:117;:::o;30462:619::-;21288:6;;30570:4;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;30627:1:::1;30614:9;:14;;30592:117;;;::::0;-1:-1:-1;;;30592:117:0;;9045:2:1;30592:117:0::1;::::0;::::1;9027:21:1::0;9084:2;9064:18;;;9057:30;9123:34;9103:18;;;9096:62;-1:-1:-1;;;9174:18:1;;;9167:51;9235:19;;30592:117:0::1;8843:417:1::0;30592:117:0::1;30755:3;30742:9;:16;;30720:118;;;::::0;-1:-1:-1;;;30720:118:0;;9467:2:1;30720:118:0::1;::::0;::::1;9449:21:1::0;9506:2;9486:18;;;9479:30;9545:34;9525:18;;;9518:62;-1:-1:-1;;;9596:18:1;;;9589:50;9656:19;;30720:118:0::1;9265:416:1::0;30720:118:0::1;30884:20;;30871:9;:33;;30849:137;;;::::0;-1:-1:-1;;;30849:137:0;;9888:2:1;30849:137:0::1;::::0;::::1;9870:21:1::0;9927:2;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;-1:-1:-1;;;10017:18:1;;;10010:52;10079:19;;30849:137:0::1;9686:418:1::0;30849:137:0::1;31045:6;31030:13;12050:12:::0;;;11962:108;31030:13:::1;31018:25;::::0;:9;:25:::1;:::i;:::-;:33;;;;:::i;:::-;30997:18;:54:::0;-1:-1:-1;31069:4:0::1;30462:619:::0;;;:::o;30181:135::-;21288:6;;30241:4;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;-1:-1:-1;30258:20:0::1;:28:::0;;-1:-1:-1;;30258:28:0::1;::::0;;:20:::1;30181:135:::0;:::o;22124:201::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22213:22:0;::::1;22205:73;;;::::0;-1:-1:-1;;;22205:73:0;;10311:2:1;22205:73:0::1;::::0;::::1;10293:21:1::0;10350:2;10330:18;;;10323:30;10389:34;10369:18;;;10362:62;-1:-1:-1;;;10440:18:1;;;10433:36;10486:19;;22205:73:0::1;10109:402:1::0;22205:73:0::1;22289:28;22308:8;22289:18;:28::i;:::-;22124:201:::0;:::o;35399:128::-;21288:6;;-1:-1:-1;;;;;21288:6:0;3412:10;21435:23;21427:68;;;;-1:-1:-1;;;21427:68:0;;;;;;;:::i;:::-;35497:8:::1;:22:::0;;-1:-1:-1;;;;;;35497:22:0::1;-1:-1:-1::0;;;;;35497:22:0;;;::::1;::::0;;;::::1;::::0;;35399:128::o;18963:380::-;-1:-1:-1;;;;;19099:19:0;;19091:68;;;;-1:-1:-1;;;19091:68:0;;10718:2:1;19091:68:0;;;10700:21:1;10757:2;10737:18;;;10730:30;10796:34;10776:18;;;10769:62;-1:-1:-1;;;10847:18:1;;;10840:34;10891:19;;19091:68:0;10516:400:1;19091:68:0;-1:-1:-1;;;;;19178:21:0;;19170:68;;;;-1:-1:-1;;;19170:68:0;;11123:2:1;19170:68:0;;;11105:21:1;11162:2;11142:18;;;11135:30;11201:34;11181:18;;;11174:62;-1:-1:-1;;;11252:18:1;;;11245:32;11294:19;;19170:68:0;10921:398:1;19170:68:0;-1:-1:-1;;;;;19251:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19303:32;;1361:25:1;;;19303:32:0;;1334:18:1;19303:32:0;;;;;;;18963:380;;;:::o;35827:4630::-;-1:-1:-1;;;;;35959:18:0;;35951:68;;;;-1:-1:-1;;;35951:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36038:16:0;;36030:64;;;;-1:-1:-1;;;36030:64:0;;;;;;;:::i;:::-;36111:6;36121:1;36111:11;36107:93;;36139:28;36155:4;36161:2;36165:1;36139:15;:28::i;36107:93::-;36216:14;;;;36212:2428;;;21288:6;;-1:-1:-1;;;;;36269:15:0;;;21288:6;;36269:15;;;;:49;;-1:-1:-1;21288:6:0;;-1:-1:-1;;;;;36305:13:0;;;21288:6;;36305:13;;36269:49;:86;;;;-1:-1:-1;;;;;;36339:16:0;;;;36269:86;:128;;;;-1:-1:-1;;;;;;36376:21:0;;36390:6;36376:21;;36269:128;:158;;;;-1:-1:-1;36419:8:0;;-1:-1:-1;;;36419:8:0;;;;36418:9;36269:158;36247:2382;;;36467:13;;-1:-1:-1;;;36467:13:0;;;;36462:209;;-1:-1:-1;;;;;36539:18:0;;;;;;:12;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;36561:16:0;;;;;;:12;:16;;;;;;;;36539:38;36505:146;;;;-1:-1:-1;;;36505:146:0;;12336:2:1;36505:146:0;;;12318:21:1;12375:2;12355:18;;;12348:30;-1:-1:-1;;;12394:18:1;;;12387:52;12456:18;;36505:146:0;12134:346:1;36505:146:0;36827:20;;;;;;;36823:641;;;21288:6;;-1:-1:-1;;;;;36902:13:0;;;21288:6;;36902:13;;;;:72;;;36958:15;-1:-1:-1;;;;;36944:30:0;:2;-1:-1:-1;;;;;36944:30:0;;;36902:72;:129;;;;;37017:13;-1:-1:-1;;;;;37003:28:0;:2;-1:-1:-1;;;;;37003:28:0;;;36902:129;36872:573;;;37149:9;37120:39;;;;:28;:39;;;;;;37195:12;-1:-1:-1;37082:258:0;;;;-1:-1:-1;;;37082:258:0;;12687:2:1;37082:258:0;;;12669:21:1;12726:2;12706:18;;;12699:30;12765:34;12745:18;;;12738:62;12836:34;12816:18;;;12809:62;-1:-1:-1;;;12887:19:1;;;12880:40;12937:19;;37082:258:0;12485:477:1;37082:258:0;37396:9;37367:39;;;;:28;:39;;;;;37409:12;37367:54;;36872:573;-1:-1:-1;;;;;37538:31:0;;;;;;:25;:31;;;;;;;;:77;;;;-1:-1:-1;;;;;;37595:20:0;;;;;;:16;:20;;;;;;;;37594:21;37538:77;37512:1102;;;37702:20;;37692:6;:30;;37658:169;;;;-1:-1:-1;;;37658:169:0;;13169:2:1;37658:169:0;;;13151:21:1;13208:2;13188:18;;;13181:30;13247:34;13227:18;;;13220:62;-1:-1:-1;;;13298:18:1;;;13291:51;13359:19;;37658:169:0;12967:417:1;37658:169:0;37910:9;;-1:-1:-1;;;;;12234:18:0;;12207:7;12234:18;;;;;;;;;;;37884:22;;:6;:22;:::i;:::-;:35;;37850:140;;;;-1:-1:-1;;;37850:140:0;;13591:2:1;37850:140:0;;;13573:21:1;13630:2;13610:18;;;13603:30;-1:-1:-1;;;13649:18:1;;;13642:49;13708:18;;37850:140:0;13389:343:1;37850:140:0;37512:1102;;;-1:-1:-1;;;;;38088:29:0;;;;;;:25;:29;;;;;;;;:77;;;;-1:-1:-1;;;;;;38143:22:0;;;;;;:16;:22;;;;;;;;38142:23;38088:77;38062:552;;;38252:20;;38242:6;:30;;38208:170;;;;-1:-1:-1;;;38208:170:0;;13939:2:1;38208:170:0;;;13921:21:1;13978:2;13958:18;;;13951:30;14017:34;13997:18;;;13990:62;-1:-1:-1;;;14068:18:1;;;14061:52;14130:19;;38208:170:0;13737:418:1;38062:552:0;-1:-1:-1;;;;;38409:20:0;;;;;;:16;:20;;;;;;;;38404:210;;38514:9;;-1:-1:-1;;;;;12234:18:0;;12207:7;12234:18;;;;;;;;;;;38488:22;;:6;:22;:::i;:::-;:35;;38454:140;;;;-1:-1:-1;;;38454:140:0;;13591:2:1;38454:140:0;;;13573:21:1;13630:2;13610:18;;;13603:30;-1:-1:-1;;;13649:18:1;;;13642:49;13708:18;;38454:140:0;13389:343:1;38454:140:0;38701:4;38652:28;12234:18;;;;;;;;;;;38759;;38735:42;;;;;;;38808:35;;-1:-1:-1;38832:11:0;;-1:-1:-1;;;38832:11:0;;;;38808:35;:61;;;;-1:-1:-1;38861:8:0;;-1:-1:-1;;;38861:8:0;;;;38860:9;38808:61;:110;;;;-1:-1:-1;;;;;;38887:31:0;;;;;;:25;:31;;;;;;;;38886:32;38808:110;:146;;;;-1:-1:-1;;;;;;38936:18:0;;;;;;:12;:18;;;;;;;;38935:19;38808:146;:180;;;;-1:-1:-1;;;;;;38972:16:0;;;;;;:12;:16;;;;;;;;38971:17;38808:180;38790:312;;;39015:8;:15;;-1:-1:-1;;;;39015:15:0;-1:-1:-1;;;39015:15:0;;;39047:10;:8;:10::i;:::-;39074:8;:16;;-1:-1:-1;;;;39074:16:0;;;38790:312;39130:8;;-1:-1:-1;;;;;39240:18:0;;39114:12;39240:18;;;:12;:18;;;;;;39130:8;-1:-1:-1;;;39130:8:0;;;;;39129:9;;39240:18;;:38;;-1:-1:-1;;;;;;39262:16:0;;;;;;:12;:16;;;;;;;;39240:38;39236:86;;;-1:-1:-1;39305:5:0;39236:86;39334:12;39439:7;39435:969;;;-1:-1:-1;;;;;39491:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;39540:1;39524:13;;:17;39491:50;39487:768;;;39569:34;39599:3;39569:25;39580:13;;39569:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;39562:41;;39672:13;;39652:16;;39645:4;:23;;;;:::i;:::-;39644:41;;;;:::i;:::-;39622:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;39742:13:0;;39728:10;;39721:17;;:4;:17;:::i;:::-;39720:35;;;;:::i;:::-;39704:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;39824:13:0;;39804:16;;39797:23;;:4;:23;:::i;:::-;39796:41;;;;:::i;:::-;39774:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;39487:768:0;;-1:-1:-1;39487:768:0;;-1:-1:-1;;;;;39899:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;39949:1;39934:12;;:16;39899:51;39895:360;;;39978:33;40007:3;39978:24;39989:12;;39978:6;:10;;:24;;;;:::i;:33::-;39971:40;;40079:12;;40060:15;;40053:4;:22;;;;:::i;:::-;40052:39;;;;:::i;:::-;40030:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;40147:12:0;;40134:9;;40127:16;;:4;:16;:::i;:::-;40126:33;;;;:::i;:::-;40110:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;40227:12:0;;40208:15;;40201:22;;:4;:22;:::i;:::-;40200:39;;;;:::i;:::-;40178:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;39895:360:0;40275:8;;40271:91;;40304:42;40320:4;40334;40341;40304:15;:42::i;:::-;40378:14;40388:4;40378:14;;:::i;:::-;;;39435:969;40416:33;40432:4;40438:2;40442:6;40416:15;:33::i;:::-;35940:4517;;;;35827:4630;;;:::o;22485:191::-;22578:6;;;-1:-1:-1;;;;;22595:17:0;;;-1:-1:-1;;;;;;22595:17:0;;;;;;;22628:40;;22578:6;;;22595:17;22578:6;;22628:40;;22559:16;;22628:40;22548:128;22485:191;:::o;34964:188::-;-1:-1:-1;;;;;35047:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;35047:39:0;;;;;;;;;;35104:40;;35047:39;;:31;35104:40;;;34964:188;;:::o;16182:733::-;-1:-1:-1;;;;;16322:20:0;;16314:70;;;;-1:-1:-1;;;16314:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16403:23:0;;16395:71;;;;-1:-1:-1;;;16395:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16563:17:0;;16539:21;16563:17;;;;;;;;;;;16599:23;;;;16591:74;;;;-1:-1:-1;;;16591:74:0;;14495:2:1;16591:74:0;;;14477:21:1;14534:2;14514:18;;;14507:30;14573:34;14553:18;;;14546:62;-1:-1:-1;;;14624:18:1;;;14617:36;14670:19;;16591:74:0;14293:402:1;16591:74:0;-1:-1:-1;;;;;16701:17:0;;;:9;:17;;;;;;;;;;;16721:22;;;16701:42;;16765:20;;;;;;;;:30;;16737:6;;16701:9;16765:30;;16737:6;;16765:30;:::i;:::-;;;;;;;;16830:9;-1:-1:-1;;;;;16813:35:0;16822:6;-1:-1:-1;;;;;16813:35:0;;16841:6;16813:35;;;;1361:25:1;;1349:2;1334:18;;1215:177;16813:35:0;;;;;;;;16303:612;16182:733;;;:::o;41584:1750::-;41667:4;41623:23;12234:18;;;;;;;;;;;41623:50;;41684:25;41780:12;;41746:18;;41712;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;41684:108;-1:-1:-1;41803:12:0;41832:20;;;:46;;-1:-1:-1;41856:22:0;;41832:46;41828:85;;;41895:7;;;41584:1750::o;41828:85::-;41947:20;;41929:15;:38;41925:109;;;42002:20;;41984:38;;41925:109;42095:23;42208:1;42175:17;42140:18;;42122:15;:36;;;;:::i;:::-;42121:71;;;;:::i;:::-;:88;;;;:::i;:::-;42095:114;-1:-1:-1;42220:26:0;42249:36;:15;42095:114;42249:19;:36::i;:::-;42220:65;-1:-1:-1;42326:21:0;42360:36;42220:65;42360:16;:36::i;:::-;42409:18;42430:44;:21;42456:17;42430:25;:44::i;:::-;42409:65;;42487:23;42513:81;42566:17;42513:34;42528:18;;42513:10;:14;;:34;;;;:::i;:81::-;42487:107;;42605:17;42625:51;42658:17;42625:28;42640:12;;42625:10;:14;;:28;;;;:::i;:51::-;42605:71;-1:-1:-1;42689:23:0;42605:71;42715:28;42728:15;42715:10;:28;:::i;:::-;:40;;;;:::i;:::-;42789:1;42768:18;:22;;;42801:18;:22;;;42834:12;:16;;;42885:9;;42877:45;;42689:66;;-1:-1:-1;;;;;;42885:9:0;;42908;;42877:45;42789:1;42877:45;42908:9;42885;42877:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42863:59:0;;-1:-1:-1;;42939:19:0;;;;;:42;;;42980:1;42962:15;:19;42939:42;42935:278;;;42998:46;43011:15;43028;42998:12;:46::i;:::-;43168:18;;43064:137;;;15112:25:1;;;15168:2;15153:18;;15146:34;;;15196:18;;;15189:34;;;;43064:137:0;;;;;;15100:2:1;43064:137:0;;;42935:278;43247:15;;43239:87;;-1:-1:-1;;;;;43247:15:0;;;;43290:21;;43239:87;;;;43290:21;43247:15;43239:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;41584:1750:0:o;6635:98::-;6693:7;6720:5;6724:1;6720;:5;:::i;:::-;6713:12;6635:98;-1:-1:-1;;;6635:98:0:o;7034:::-;7092:7;7119:5;7123:1;7119;:5;:::i;6278:98::-;6336:7;6363:5;6367:1;6363;:5;:::i;40465:589::-;40615:16;;;40629:1;40615:16;;;;;;;;40591:21;;40615:16;;;;;;;;;;-1:-1:-1;40615:16:0;40591:40;;40660:4;40642;40647:1;40642:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;40642:23:0;;;-1:-1:-1;;;;;40642:23:0;;;;;40686:15;-1:-1:-1;;;;;40686:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40676:4;40681:1;40676:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;40676:32:0;;;-1:-1:-1;;;;;40676:32:0;;;;;40721:62;40738:4;40753:15;40771:11;40721:8;:62::i;:::-;40822:224;;-1:-1:-1;;;40822:224:0;;-1:-1:-1;;;;;40822:15:0;:66;;;;:224;;40903:11;;40929:1;;40973:4;;41000;;41020:15;;40822:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40520:534;40465:589;:::o;41062:514::-;41210:62;41227:4;41242:15;41260:11;41210:8;:62::i;:::-;41519:8;;41315:253;;-1:-1:-1;;;41315:253:0;;41387:4;41315:253;;;17080:34:1;17130:18;;;17123:34;;;41433:1:0;17173:18:1;;;17166:34;;;17216:18;;;17209:34;-1:-1:-1;;;;;41519:8:0;;;17259:19:1;;;17252:44;41542:15:0;17312:19:1;;;17305:35;41315:15:0;:31;;;;;;41354:9;;17014:19:1;;41315:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41062:514;;:::o;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:247::-;1691:6;1744:2;1732:9;1723:7;1719:23;1715:32;1712:52;;;1760:1;1757;1750:12;1712:52;1799:9;1786:23;1818:31;1843:5;1818:31;:::i;1884:180::-;1943:6;1996:2;1984:9;1975:7;1971:23;1967:32;1964:52;;;2012:1;2009;2002:12;1964:52;-1:-1:-1;2035:23:1;;1884:180;-1:-1:-1;1884:180:1:o;2069:456::-;2146:6;2154;2162;2215:2;2203:9;2194:7;2190:23;2186:32;2183:52;;;2231:1;2228;2221:12;2183:52;2270:9;2257:23;2289:31;2314:5;2289:31;:::i;:::-;2339:5;-1:-1:-1;2396:2:1;2381:18;;2368:32;2409:33;2368:32;2409:33;:::i;:::-;2069:456;;2461:7;;-1:-1:-1;;;2515:2:1;2500:18;;;;2487:32;;2069:456::o;2927:160::-;2992:20;;3048:13;;3041:21;3031:32;;3021:60;;3077:1;3074;3067:12;3092:315;3157:6;3165;3218:2;3206:9;3197:7;3193:23;3189:32;3186:52;;;3234:1;3231;3224:12;3186:52;3273:9;3260:23;3292:31;3317:5;3292:31;:::i;:::-;3342:5;-1:-1:-1;3366:35:1;3397:2;3382:18;;3366:35;:::i;:::-;3356:45;;3092:315;;;;;:::o;3412:316::-;3489:6;3497;3505;3558:2;3546:9;3537:7;3533:23;3529:32;3526:52;;;3574:1;3571;3564:12;3526:52;-1:-1:-1;;3597:23:1;;;3667:2;3652:18;;3639:32;;-1:-1:-1;3718:2:1;3703:18;;;3690:32;;3412:316;-1:-1:-1;3412:316:1:o;3733:180::-;3789:6;3842:2;3830:9;3821:7;3817:23;3813:32;3810:52;;;3858:1;3855;3848:12;3810:52;3881:26;3897:9;3881:26;:::i;3918:388::-;3986:6;3994;4047:2;4035:9;4026:7;4022:23;4018:32;4015:52;;;4063:1;4060;4053:12;4015:52;4102:9;4089:23;4121:31;4146:5;4121:31;:::i;:::-;4171:5;-1:-1:-1;4228:2:1;4213:18;;4200:32;4241:33;4200:32;4241:33;:::i;:::-;4293:7;4283:17;;;3918:388;;;;;:::o;4311:380::-;4390:1;4386:12;;;;4433;;;4454:61;;4508:4;4500:6;4496:17;4486:27;;4454:61;4561:2;4553:6;4550:14;4530:18;4527:38;4524:161;;4607:10;4602:3;4598:20;4595:1;4588:31;4642:4;4639:1;4632:15;4670:4;4667:1;4660:15;4524:161;;4311:380;;;:::o;4696:356::-;4898:2;4880:21;;;4917:18;;;4910:30;4976:34;4971:2;4956:18;;4949:62;5043:2;5028:18;;4696:356::o;5057:127::-;5118:10;5113:3;5109:20;5106:1;5099:31;5149:4;5146:1;5139:15;5173:4;5170:1;5163:15;5189:168;5262:9;;;5293;;5310:15;;;5304:22;;5290:37;5280:71;;5331:18;;:::i;5362:217::-;5402:1;5428;5418:132;;5472:10;5467:3;5463:20;5460:1;5453:31;5507:4;5504:1;5497:15;5535:4;5532:1;5525:15;5418:132;-1:-1:-1;5564:9:1;;5362:217::o;6409:125::-;6474:9;;;6495:10;;;6492:36;;;6508:18;;:::i;11324:401::-;11526:2;11508:21;;;11565:2;11545:18;;;11538:30;11604:34;11599:2;11584:18;;11577:62;-1:-1:-1;;;11670:2:1;11655:18;;11648:35;11715:3;11700:19;;11324:401::o;11730:399::-;11932:2;11914:21;;;11971:2;11951:18;;;11944:30;12010:34;12005:2;11990:18;;11983:62;-1:-1:-1;;;12076:2:1;12061:18;;12054:33;12119:3;12104:19;;11730:399::o;14160:128::-;14227:9;;;14248:11;;;14245:37;;;14262:18;;:::i;15366:127::-;15427:10;15422:3;15418:20;15415:1;15408:31;15458:4;15455:1;15448:15;15482:4;15479:1;15472:15;15498:251;15568:6;15621:2;15609:9;15600:7;15596:23;15592:32;15589:52;;;15637:1;15634;15627:12;15589:52;15669:9;15663:16;15688:31;15713:5;15688:31;:::i;15754:980::-;16016:4;16064:3;16053:9;16049:19;16095:6;16084:9;16077:25;16121:2;16159:6;16154:2;16143:9;16139:18;16132:34;16202:3;16197:2;16186:9;16182:18;16175:31;16226:6;16261;16255:13;16292:6;16284;16277:22;16330:3;16319:9;16315:19;16308:26;;16369:2;16361:6;16357:15;16343:29;;16390:1;16400:195;16414:6;16411:1;16408:13;16400:195;;;16479:13;;-1:-1:-1;;;;;16475:39:1;16463:52;;16570:15;;;;16535:12;;;;16511:1;16429:9;16400:195;;;-1:-1:-1;;;;;;;16651:32:1;;;;16646:2;16631:18;;16624:60;-1:-1:-1;;;16715:3:1;16700:19;16693:35;16612:3;15754:980;-1:-1:-1;;;15754:980:1:o;17351:306::-;17439:6;17447;17455;17508:2;17496:9;17487:7;17483:23;17479:32;17476:52;;;17524:1;17521;17514:12;17476:52;17553:9;17547:16;17537:26;;17603:2;17592:9;17588:18;17582:25;17572:35;;17647:2;17636:9;17632:18;17626:25;17616:35;;17351:306;;;;;:::o

Swarm Source

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