ETH Price: $3,153.20 (+0.43%)
Gas: 2 Gwei

Token

SCHLONG (SCHLONG)
 

Overview

Max Total Supply

20,000,000,000 SCHLONG

Holders

82

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
bartbaker.eth
Balance
97,246,176.817965984322855843 SCHLONG

Value
$0.00
0x2f4e6d42ff6a68497656d8788ea2bcc7d04658b1
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:
SCHLONG

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-14
*/

pragma solidity ^0.8.5;


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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

contract SCHLONG is ERC20, Ownable {

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    address public marketingWallet;
    address public charityWallet;
    address public devWallet= 0x063C2F0910d84223E8F79c437F835cF3800f5Fd5;

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

    bool public swapEnabled;
    bool public limitsEnabled;
    bool public txDelayEnabled;
    bool public tradingEnabled;

    uint256 public buyTotalFees = 2; 
    uint256 public buyDivisorFees = 4;
    
    uint256 public sellWindow1 = 3 minutes;   
    uint256 public sellWindow2 = 6 minutes; 
    uint256 public sellWindow3 = 9 minutes; 
    uint256 public sellWindow4 = 12 minutes; 
    
    uint256 public sellLiquidityFeeWindow1 = 6;
    uint256 public sellLiquidityFeeWindow2 = 5;
    uint256 public sellLiquidityFeeWindow3 = 3;
    uint256 public sellLiquidityFeeWindow4 = 2;

    uint256 public sellMarketingFeeWindow1 = 4;
    uint256 public sellMarketingFeeWindow2 = 3;
    uint256 public sellMarketingFeeWindow3 = 1;
    uint256 public sellMarketingFeeWindow4 = 1;

    uint256 public sellCharityFee = 1;
    uint256 public sellDevFee = 1; 
 
    uint256 public tokensForLiquidity;   
    uint256 public tokensForMarketing;
    uint256 public tokensForCharity;
    uint256 public tokensForDev;

    bool private swapping;
    
    /******************/

    // exclude from fees and max transaction amount, track latest buy and transfer...
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;

    mapping(address => uint256) private _latestSwapIn;
    mapping(address => uint256) private _latestTransfer; 

    event UpdateUniswapV2Router(address indexed newAddr, address indexed oldAddr);
    event ExcludeFromFees(address indexed newAddr, bool isExcluded);
    event Blacklisted(address newAddr, bool isBlacklisted);
    event SetAutomatedMarketMakerPair(address indexed newAddr, bool indexed isPair);
    event MarketingWalletUpdated(address indexed newAddr, address indexed oldAddr);
    event CharityWalletUpdated(address indexed newAddr, address indexed oldAddr);

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

    constructor() ERC20("SCHLONG", "SCHLONG") {
        
        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 totalSupply = 20000000000 ether;
        
        maxTransactionAmount = totalSupply * 1 / 1000; //.1% 
        maxWallet = totalSupply * 5 / 1000; //.5% 
        swapTokensAtAmount = totalSupply * 5 / 100000; //.005% 
        
        marketingWallet = address(owner());
        charityWallet = address(owner());   

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

        limitsEnabled = true;
        txDelayEnabled = true;
        
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTradingAndSwapping() external onlyOwner returns (bool) {
        require(!tradingEnabled && !swapEnabled, 
        "trading and swapping must not be enabled already");

        tradingEnabled = true;
        swapEnabled = true;
        return true;
    }
    
    function removeLimits() external onlyOwner returns (bool) {
        require(!limitsEnabled, 
        "limits must not be removed already");

        limitsEnabled = false;
        return true;
    }
    
    function disableTransferDelay() external onlyOwner returns (bool) {
        require(txDelayEnabled, 
        "tx delay must not already be enabled");

        txDelayEnabled = false;
        return true;
    }

    function updateBlacklist(address addr, bool isBlacklisted) external onlyOwner returns (bool) {
        require(addr != address(0), 
        "must not blacklist the zero address");

        blacklist[addr] = isBlacklisted;
        emit Blacklisted(addr, isBlacklisted);
        return true;
    }
    
    function updateSwapTokensAtAmount(uint256 amount) external onlyOwner returns (bool) {
  	    require(amount >= totalSupply() * 1 / 100000, 
        "swap amount cannot be lower than 0.001% total supply.");

  	    require(amount <= totalSupply() * 5 / 1000, 
        "swap amount cannot be higher than 0.5% total supply.");

  	    swapTokensAtAmount = amount;
  	    return true;
  	}
    
    function updateMaxTransactionAmount(uint256 amount) external onlyOwner returns (bool) {
        require(amount >= (totalSupply() * 1 / 1000) / 1e18, 
        "must not be set to lower than 0.1%");

        maxTransactionAmount = amount * (10**18);
        return true;
    }

    function updateMaxWalletAmount(uint256 amount) external onlyOwner returns (bool) {
        require(amount >= (totalSupply() * 5 / 1000) / 1e18, 
        "must be set to lower than 0.5%");

        maxWallet = amount * (10**18);
        return true;
    }

    function updateMarketingWallet(address addr) external onlyOwner returns (bool) {
        emit MarketingWalletUpdated(addr, marketingWallet);
        marketingWallet = addr;
        return true;
    }
    
    function updateCharityWallet(address addr) external onlyOwner returns (bool) {
        emit CharityWalletUpdated(addr, charityWallet);
        charityWallet = addr;
        return true;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner returns (bool) {
        swapEnabled = enabled;
        return true;
    }
    
    function updateBuyTotalFees(uint256 fee) external onlyOwner returns (bool) {  
        require(fee <= 10, 
        "must not be higher than 10%");

        buyTotalFees = fee;
        return true;
    }

    function updateBuyDivisorFees(uint256 divisor) external onlyOwner returns (bool) {  
        buyDivisorFees = divisor;
        return true;
    }

    function updateCharitySellFee(uint256 fee) external onlyOwner returns (bool) {  
        require(fee <= 10, 
        "must not be higher than 10%");

        sellCharityFee = fee;
        return true;
    }

    function updateSellWindows(
        uint256 window1, 
        uint256 window2, 
        uint256 window3, 
        uint256 window4) 
        external 
        onlyOwner
        returns (bool) 
    {
        sellWindow1 = window1;
        sellWindow2 = window2;
        sellWindow3 = window3;
        sellWindow4 = window4;
        return true;
    }

    function updateLiquidityFeeForSellWindows(
        uint256 fee1, 
        uint256 fee2, 
        uint256 fee3, 
        uint256 fee4) 
        external 
        onlyOwner 
        returns (bool) 
    {
        require(
            fee1 <= 10 && 
            fee2 <= 10 && 
            fee3 <= 10 && 
            fee4 <= 10,
            "must not be higher than 10%");

        sellLiquidityFeeWindow1 = fee1;
        sellLiquidityFeeWindow2 = fee2;
        sellLiquidityFeeWindow3 = fee3;
        sellLiquidityFeeWindow4 = fee4;
        return true;
    }

   function updateMarketingFeeForSellWindows(
        uint256 fee1, 
        uint256 fee2, 
        uint256 fee3, 
        uint256 fee4) 
        external 
        onlyOwner 
        returns (bool) 
    {
        require(
            fee1 <= 10 && 
            fee2 <= 10 && 
            fee3 <= 10 && 
            fee4 <= 10,
            "must not be higher than 10%");

        sellMarketingFeeWindow1 = fee1;
        sellMarketingFeeWindow2 = fee2;
        sellMarketingFeeWindow3 = fee3;
        sellMarketingFeeWindow4 = fee4;
        return true;
    }
 
    function excludeFromMaxTransaction(address addr, bool isExcluded) public onlyOwner returns (bool) {
        _isExcludedMaxTransactionAmount[addr] = isExcluded;
        return true;
    }

    function excludeFromFees(address addr, bool isExcluded) public onlyOwner returns (bool) {
        _isExcludedFromFees[addr] = isExcluded;
        emit ExcludeFromFees(addr, isExcluded);
        return true;
    }

    function setAutomatedMarketMakerPair(address addr, bool isPair) public onlyOwner returns (bool) {
        require(addr != uniswapV2Pair, 
        "the uniswapV2Pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(addr, isPair);
        return true;
    }

    function isExcludedFromFees(address addr) public view returns(bool) {
        return _isExcludedFromFees[addr];
    }
    
    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");

        require(!blacklist[from],
        "sender must not be blacklisted");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if (limitsEnabled){

            if (from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping)
                {
                    
                if (!tradingEnabled) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], 
                    "trading is not active.");
                }

                if (txDelayEnabled) {
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_latestTransfer[tx.origin] < block.number, 
                        "_transfer: transfer delay enabled. Only one purchase per block allowed.");
    
                        _latestTransfer[tx.origin] = block.number;
                    }
                }
                 
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, 
                        "buy transfer amount exceeds the max transaction amount.");
                        require(amount + balanceOf(to) <= maxWallet, 
                        "max wallet exceeded");
                }
                
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, 
                        "sell transfer amount exceeds the max transaction amount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, 
                    "max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        bool takeFee = !swapping;

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

        if (takeFee) {

            //on sell
            if (automatedMarketMakerPairs[to]) {

                (
                    uint256 sellTotalFees, 
                    uint256 currentLiquidityFee, 
                    uint256 currentMarketingFee
                ) 

                = getSellFeesAccount(from);

                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * currentLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * currentMarketingFee / sellTotalFees;
                tokensForCharity += fees * sellCharityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
            }
            //on buy
            if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {

        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees / buyDivisorFees;
                tokensForCharity += fees / buyDivisorFees;
                tokensForMarketing += fees / buyDivisorFees;
                tokensForDev += fees / buyDivisorFees;
                _latestSwapIn[to] = block.timestamp;
            }
            
            if (fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function _setAutomatedMarketMakerPair(address addr, bool isPair) private {
        automatedMarketMakerPairs[addr] = isPair;
        emit SetAutomatedMarketMakerPair(addr, isPair);
    }

    function _swapTokensForETH(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        //make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

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

        uint256 tokensToSwap = 
        (
            tokensForLiquidity + 
            tokensForMarketing + 
            tokensForCharity + 
            tokensForDev
        );

        bool success;
        
        if (contractBalance == 0 || tokensToSwap == 0) { return; }

        if (contractBalance > swapTokensAtAmount * 20){
            contractBalance = swapTokensAtAmount * 20;
        }
        
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / tokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        
        uint256 initialETHBalance = address(this).balance;

        _swapTokensForETH(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        
        uint256 ethForMarketing = ethBalance * tokensForMarketing / tokensToSwap;
        uint256 ethForCharity = ethBalance * tokensForCharity / tokensToSwap; 
        uint256 ethForDev = ethBalance * tokensForDev / tokensToSwap;
        
        uint256 ethForLiquidity = 
        (
            ethBalance - 
            ethForMarketing - 
            ethForCharity - 
            ethForDev
        );
        
        delete tokensForLiquidity;
        delete tokensForMarketing;
        delete tokensForCharity;
        delete tokensForDev;
        
        (success,) = address(charityWallet).call{value: ethForCharity}("");
        (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}("");
    }
    
    function getSellFeesAccount(address addr) 
        public 
        view 
        returns (
        uint256 SellFeeTotal, 
        uint256 CurrentLiquidityFee, 
        uint256 CurrentMarketingFee) 
    {
        uint256 feesWithoutLiquidityAndMarketing = sellCharityFee + sellDevFee;

        if (block.timestamp < _latestSwapIn[addr] + sellWindow1) {
            
            return (
                (
                sellLiquidityFeeWindow1 + 
                sellMarketingFeeWindow1 + 
                feesWithoutLiquidityAndMarketing
                ), 

                sellLiquidityFeeWindow1, 
                sellMarketingFeeWindow1
            );
        }

        if (block.timestamp > _latestSwapIn[addr] + sellWindow1
            && block.timestamp < _latestSwapIn[addr] + sellWindow2)  {
            
            return (
                (
                sellLiquidityFeeWindow2 + 
                sellMarketingFeeWindow2 + 
                feesWithoutLiquidityAndMarketing), 

                sellLiquidityFeeWindow2, 
                sellMarketingFeeWindow2
            );
        }

        if (block.timestamp > _latestSwapIn[addr] + sellWindow2
            && block.timestamp < _latestSwapIn[addr] + sellWindow3) {
            
            return (
                (
                sellLiquidityFeeWindow3 + 
                sellMarketingFeeWindow3 + 
                feesWithoutLiquidityAndMarketing), 

                sellLiquidityFeeWindow3, 
                sellMarketingFeeWindow3
            );
        }
        if (block.timestamp > _latestSwapIn[addr] + sellWindow3) {
            
            return (
                (
                sellLiquidityFeeWindow4 + 
                sellMarketingFeeWindow4 + 
                feesWithoutLiquidityAndMarketing),

                sellLiquidityFeeWindow4, 
                sellMarketingFeeWindow4
            );
        }
    }
}

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":false,"internalType":"address","name":"newAddr","type":"address"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"Blacklisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddr","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddr","type":"address"}],"name":"CharityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddr","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddr","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddr","type":"address"}],"name":"MarketingWalletUpdated","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":"newAddr","type":"address"},{"indexed":true,"internalType":"bool","name":"isPair","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":"newAddr","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddr","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDivisorFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"enableTradingAndSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getSellFeesAccount","outputs":[{"internalType":"uint256","name":"SellFeeTotal","type":"uint256"},{"internalType":"uint256","name":"CurrentLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"CurrentMarketingFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFeeWindow1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFeeWindow2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFeeWindow3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFeeWindow4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFeeWindow1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFeeWindow2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFeeWindow3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFeeWindow4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellWindow1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellWindow2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellWindow3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellWindow4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isPair","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"tokensForCharity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"updateBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"updateBuyDivisorFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"updateBuyTotalFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"updateCharitySellFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"updateCharityWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee1","type":"uint256"},{"internalType":"uint256","name":"fee2","type":"uint256"},{"internalType":"uint256","name":"fee3","type":"uint256"},{"internalType":"uint256","name":"fee4","type":"uint256"}],"name":"updateLiquidityFeeForSellWindows","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee1","type":"uint256"},{"internalType":"uint256","name":"fee2","type":"uint256"},{"internalType":"uint256","name":"fee3","type":"uint256"},{"internalType":"uint256","name":"fee4","type":"uint256"}],"name":"updateMarketingFeeForSellWindows","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"updateMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"window1","type":"uint256"},{"internalType":"uint256","name":"window2","type":"uint256"},{"internalType":"uint256","name":"window3","type":"uint256"},{"internalType":"uint256","name":"window4","type":"uint256"}],"name":"updateSellWindows","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600b80546001600160a01b03191673063c2f0910d84223e8f79c437f835cf3800f5fd5179055600260108190556004601181905560b460125561016860135561021c6014556102d06015556006601655600560175560036018819055601992909255601a55601b556001601c819055601d819055601e819055601f553480156200008d57600080fd5b506040805180820182526007808252665343484c4f4e4760c81b602080840182815285518087019096529285528401528151919291620000d091600391620006f1565b508051620000e6906004906020840190620006f1565b50505062000103620000fd6200042f60201b60201c565b62000433565b737a250d5630b4cf539739df2c5dacb4c659f2488d6200012581600162000485565b50806001600160a01b03166080816001600160a01b031660601b81525050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200017d57600080fd5b505afa15801562000192573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b8919062000797565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020157600080fd5b505afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000797565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200028557600080fd5b505af11580156200029a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c0919062000797565b600880546001600160a01b0319166001600160a01b03929092169182179055620002ec90600162000485565b5060085462000306906001600160a01b0316600162000506565b6b409f9cbc7c4a04c2200000006103e86200032382600162000807565b6200032f9190620007e4565b600c556103e86200034282600562000807565b6200034e9190620007e4565b600e55620186a06200036282600562000807565b6200036e9190620007e4565b600d55600554600980546001600160a01b03199081166001600160a01b03909316928317909155600a805490911682179055620003ad9060016200055a565b50620003bb3060016200055a565b50620003cb61dead60016200055a565b50620003eb620003e36005546001600160a01b031690565b600162000485565b50620003f930600162000485565b506200040961dead600162000485565b50600f805462ffff001916620101001790556200042733826200060c565b50506200087c565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546000906001600160a01b03163314620004d75760405162461bcd60e51b8152602060048201819052602482015260008051602062003b4e83398151915260448201526064015b60405180910390fd5b506001600160a01b0382166000908152602660205260409020805482151560ff19909116179055600192915050565b6001600160a01b038216600081815260066020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546000906001600160a01b03163314620005a85760405162461bcd60e51b8152602060048201819052602482015260008051602062003b4e8339815191526044820152606401620004ce565b6001600160a01b038316600081815260256020908152604091829020805460ff191686151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a250600192915050565b6001600160a01b038216620006645760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004ce565b8060026000828254620006789190620007c9565b90915550506001600160a01b03821660009081526020819052604081208054839290620006a7908490620007c9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620006ff9062000829565b90600052602060002090601f0160209004810192826200072357600085556200076e565b82601f106200073e57805160ff19168380011785556200076e565b828001600101855582156200076e579182015b828111156200076e57825182559160200191906001019062000751565b506200077c92915062000780565b5090565b5b808211156200077c576000815560010162000781565b600060208284031215620007aa57600080fd5b81516001600160a01b0381168114620007c257600080fd5b9392505050565b60008219821115620007df57620007df62000866565b500190565b6000826200080257634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161562000824576200082462000866565b500290565b600181811c908216806200083e57607f821691505b602082108114156200086057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c613289620008c5600039600081816104bb01528181611fae01528181612b8501528181612c4d01528181612c8901528181612d030152612d6001526132896000f3fe6080604052600436106103fe5760003560e01c806375f0a87411610213578063b4ba405411610123578063d85ba063116100ab578063e884f2601161007a578063e884f26014610ba6578063eb8851e714610bbb578063f2fde38b14610bd1578063f8b45b0514610bf1578063f9f92be414610c0757600080fd5b8063d85ba06314610b44578063db3d516f14610b5a578063dd62ed3e14610b70578063e2f4560514610b9057600080fd5b8063c364b784116100f2578063c364b78414610ab8578063c770c74614610ace578063c8c8ebe414610aee578063c94ac63314610b04578063d257b34f14610b2457600080fd5b8063b4ba405414610a32578063b62496f514610a48578063c024666814610a78578063c18bc19514610a9857600080fd5b806395d89b41116101a6578063a0d82dc511610175578063a0d82dc51461099c578063a457c2d7146109b2578063a9059cbb146109d2578063aa498023146109f2578063aacebbe314610a1257600080fd5b806395d89b41146109315780639a7a23d6146109465780639ade4f7e146109665780639fccce321461098657600080fd5b80638ea5220f116101e25780638ea5220f146108bb5780639155e083146108db578063924de9b7146108fb57806394f10eb11461091b57600080fd5b806375f0a874146108485780637b208769146108685780638b005eda146108885780638da5cb5b1461089d57600080fd5b80633e65d4aa1161030e5780634fbee193116102a157806370a082311161027057806370a08231146107b057806371287bcf146107e6578063715018a6146107fc578063751039fc146108135780637571336a1461082857600080fd5b80634fbee193146107315780635859bdc21461076a57806364c3549f146107805780636ddd17131461079657600080fd5b8063490a423a116102dd578063490a423a146106ba57806349bd5a5e146106da5780634ada218b146106fa5780634cc0fbb31461071b57600080fd5b80633e65d4aa1461063357806344249f041461065357806346e6d0fd1461066957806348e9566e1461067f57600080fd5b80631f3fed8f11610391578063313ce56711610360578063313ce567146105ac5780633582ad23146105c8578063359a5811146105e757806339509351146105fd5780633c2e54d81461061d57600080fd5b80631f3fed8f1461054057806323b872dd146105565780632cdf5797146105765780632cf116261461058c57600080fd5b80631694505e116103cd5780631694505e146104a957806318160ddd146104f55780631a8145bb1461050a5780631d0026941461052057600080fd5b806306fdde031461040a578063095ea7b3146104355780630d7f1441146104655780631348f54f1461048957600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061041f610c37565b60405161042c9190612fad565b60405180910390f35b34801561044157600080fd5b50610455610450366004612eed565b610cc9565b604051901515815260200161042c565b34801561047157600080fd5b5061047b601e5481565b60405190815260200161042c565b34801561049557600080fd5b506104556104a4366004612f34565b610ce1565b3480156104b557600080fd5b506104dd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161042c565b34801561050157600080fd5b5060025461047b565b34801561051657600080fd5b5061047b60205481565b34801561052c57600080fd5b5061045561053b366004612f7b565b610d46565b34801561054c57600080fd5b5061047b60215481565b34801561056257600080fd5b50610455610571366004612e77565b610dd3565b34801561058257600080fd5b5061047b601a5481565b34801561059857600080fd5b506104556105a7366004612f34565b610df7565b3480156105b857600080fd5b506040516012815260200161042c565b3480156105d457600080fd5b50600f5461045590610100900460ff1681565b3480156105f357600080fd5b5061047b60125481565b34801561060957600080fd5b50610455610618366004612eed565b610e2d565b34801561062957600080fd5b5061047b60185481565b34801561063f57600080fd5b5061045561064e366004612dfd565b610e4f565b34801561065f57600080fd5b5061047b60225481565b34801561067557600080fd5b5061047b601b5481565b34801561068b57600080fd5b5061069f61069a366004612dfd565b610edc565b6040805193845260208401929092529082015260600161042c565b3480156106c657600080fd5b50600f546104559062010000900460ff1681565b3480156106e657600080fd5b506008546104dd906001600160a01b031681565b34801561070657600080fd5b50600f54610455906301000000900460ff1681565b34801561072757600080fd5b5061047b601d5481565b34801561073d57600080fd5b5061045561074c366004612dfd565b6001600160a01b031660009081526025602052604090205460ff1690565b34801561077657600080fd5b5061047b60195481565b34801561078c57600080fd5b5061047b60165481565b3480156107a257600080fd5b50600f546104559060ff1681565b3480156107bc57600080fd5b5061047b6107cb366004612dfd565b6001600160a01b031660009081526020819052604090205490565b3480156107f257600080fd5b5061047b60135481565b34801561080857600080fd5b506108116110c5565b005b34801561081f57600080fd5b506104556110fb565b34801561083457600080fd5b50610455610843366004612eb8565b61119c565b34801561085457600080fd5b506009546104dd906001600160a01b031681565b34801561087457600080fd5b50600a546104dd906001600160a01b031681565b34801561089457600080fd5b506104556111f8565b3480156108a957600080fd5b506005546001600160a01b03166104dd565b3480156108c757600080fd5b50600b546104dd906001600160a01b031681565b3480156108e757600080fd5b506104556108f6366004612eb8565b6112c0565b34801561090757600080fd5b50610455610916366004612f19565b6113b7565b34801561092757600080fd5b5061047b60115481565b34801561093d57600080fd5b5061041f6113fb565b34801561095257600080fd5b50610455610961366004612eb8565b61140a565b34801561097257600080fd5b50610455610981366004612f34565b6114d9565b34801561099257600080fd5b5061047b60235481565b3480156109a857600080fd5b5061047b601f5481565b3480156109be57600080fd5b506104556109cd366004612eed565b611530565b3480156109de57600080fd5b506104556109ed366004612eed565b6115ab565b3480156109fe57600080fd5b50610455610a0d366004612f34565b6115b9565b348015610a1e57600080fd5b50610455610a2d366004612dfd565b611691565b348015610a3e57600080fd5b5061047b60175481565b348015610a5457600080fd5b50610455610a63366004612dfd565b60066020526000908152604090205460ff1681565b348015610a8457600080fd5b50610455610a93366004612eb8565b61171e565b348015610aa457600080fd5b50610455610ab3366004612f34565b6117af565b348015610ac457600080fd5b5061047b60155481565b348015610ada57600080fd5b50610455610ae9366004612f7b565b61187c565b348015610afa57600080fd5b5061047b600c5481565b348015610b1057600080fd5b50610455610b1f366004612f7b565b611909565b348015610b3057600080fd5b50610455610b3f366004612f34565b61194e565b348015610b5057600080fd5b5061047b60105481565b348015610b6657600080fd5b5061047b601c5481565b348015610b7c57600080fd5b5061047b610b8b366004612e3e565b611aa0565b348015610b9c57600080fd5b5061047b600d5481565b348015610bb257600080fd5b50610455611acb565b348015610bc757600080fd5b5061047b60145481565b348015610bdd57600080fd5b50610811610bec366004612dfd565b611b6e565b348015610bfd57600080fd5b5061047b600e5481565b348015610c1357600080fd5b50610455610c22366004612dfd565b60076020526000908152604090205460ff1681565b606060038054610c46906131d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c72906131d7565b8015610cbf5780601f10610c9457610100808354040283529160200191610cbf565b820191906000526020600020905b815481529060010190602001808311610ca257829003601f168201915b5050505050905090565b600033610cd7818585611c09565b5060019392505050565b6005546000906001600160a01b03163314610d175760405162461bcd60e51b8152600401610d0e9061307c565b60405180910390fd5b600a821115610d385760405162461bcd60e51b8152600401610d0e90613045565b50601081905560015b919050565b6005546000906001600160a01b03163314610d735760405162461bcd60e51b8152600401610d0e9061307c565b600a8511158015610d855750600a8411155b8015610d925750600a8311155b8015610d9f5750600a8211155b610dbb5760405162461bcd60e51b8152600401610d0e90613045565b50601a93909355601b91909155601c55601d55600190565b600033610de1858285611d2d565b610dec858585611da7565b506001949350505050565b6005546000906001600160a01b03163314610e245760405162461bcd60e51b8152600401610d0e9061307c565b50601155600190565b600033610cd7818585610e408383611aa0565b610e4a9190613167565b611c09565b6005546000906001600160a01b03163314610e7c5760405162461bcd60e51b8152600401610d0e9061307c565b600a546040516001600160a01b03918216918416907fc20073d1c4443096c55d22a3812db7261aa6911634e1a0850f068d0c9923402d90600090a350600a80546001600160a01b0383166001600160a01b03199091161790556001919050565b600080600080601f54601e54610ef29190613167565b6012546001600160a01b038716600090815260276020526040902054919250610f1a91613167565b421015610f4e5780601a54601654610f329190613167565b610f3c9190613167565b601654601a54935093509350506110be565b6012546001600160a01b038616600090815260276020526040902054610f749190613167565b42118015610fa657506013546001600160a01b038616600090815260276020526040902054610fa39190613167565b42105b15610fd85780601b54601754610fbc9190613167565b610fc69190613167565b601754601b54935093509350506110be565b6013546001600160a01b038616600090815260276020526040902054610ffe9190613167565b4211801561103057506014546001600160a01b03861660009081526027602052604090205461102d9190613167565b42105b156110625780601c546018546110469190613167565b6110509190613167565b601854601c54935093509350506110be565b6014546001600160a01b0386166000908152602760205260409020546110889190613167565b4211156110bc5780601d546019546110a09190613167565b6110aa9190613167565b601954601d54935093509350506110be565b505b9193909250565b6005546001600160a01b031633146110ef5760405162461bcd60e51b8152600401610d0e9061307c565b6110f9600061266c565b565b6005546000906001600160a01b031633146111285760405162461bcd60e51b8152600401610d0e9061307c565b600f54610100900460ff161561118b5760405162461bcd60e51b815260206004820152602260248201527f6c696d697473206d757374206e6f742062652072656d6f76656420616c726561604482015261647960f01b6064820152608401610d0e565b50600f805461ff0019169055600190565b6005546000906001600160a01b031633146111c95760405162461bcd60e51b8152600401610d0e9061307c565b506001600160a01b0382166000908152602660205260409020805482151560ff19909116179055600192915050565b6005546000906001600160a01b031633146112255760405162461bcd60e51b8152600401610d0e9061307c565b600f546301000000900460ff161580156112425750600f5460ff16155b6112a75760405162461bcd60e51b815260206004820152603060248201527f74726164696e6720616e64207377617070696e67206d757374206e6f7420626560448201526f20656e61626c656420616c726561647960801b6064820152608401610d0e565b50600f805463ff0000ff19166301000001179055600190565b6005546000906001600160a01b031633146112ed5760405162461bcd60e51b8152600401610d0e9061307c565b6001600160a01b03831661134f5760405162461bcd60e51b815260206004820152602360248201527f6d757374206e6f7420626c61636b6c69737420746865207a65726f206164647260448201526265737360e81b6064820152608401610d0e565b6001600160a01b038316600081815260076020908152604091829020805460ff19168615159081179091558251938452908301527fcf3473b85df1594d47b6958f29a32bea0abff9dd68296f7bf33443646793cfd8910160405180910390a150600192915050565b6005546000906001600160a01b031633146113e45760405162461bcd60e51b8152600401610d0e9061307c565b50600f805460ff1916911515919091179055600190565b606060048054610c46906131d7565b6005546000906001600160a01b031633146114375760405162461bcd60e51b8152600401610d0e9061307c565b6008546001600160a01b03848116911614156114c65760405162461bcd60e51b815260206004820152604260248201527f74686520756e69737761705632506169722063616e6e6f742062652072656d6f60448201527f7665642066726f6d206175746f6d617465644d61726b65744d616b6572506169606482015261727360f01b608482015260a401610d0e565b6114d083836126be565b50600192915050565b6005546000906001600160a01b031633146115065760405162461bcd60e51b8152600401610d0e9061307c565b600a8211156115275760405162461bcd60e51b8152600401610d0e90613045565b50601e55600190565b6000338161153e8286611aa0565b90508381101561159e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d0e565b610dec8286868403611c09565b600033610cd7818585611da7565b6005546000906001600160a01b031633146115e65760405162461bcd60e51b8152600401610d0e9061307c565b670de0b6b3a76400006103e86115fb60025490565b6116069060016131a1565b611610919061317f565b61161a919061317f565b8210156116745760405162461bcd60e51b815260206004820152602260248201527f6d757374206e6f742062652073657420746f206c6f776572207468616e20302e604482015261312560f01b6064820152608401610d0e565b61168682670de0b6b3a76400006131a1565b600c55506001919050565b6005546000906001600160a01b031633146116be5760405162461bcd60e51b8152600401610d0e9061307c565b6009546040516001600160a01b03918216918416907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a350600980546001600160a01b0383166001600160a01b03199091161790556001919050565b6005546000906001600160a01b0316331461174b5760405162461bcd60e51b8152600401610d0e9061307c565b6001600160a01b038316600081815260256020908152604091829020805460ff191686151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a250600192915050565b6005546000906001600160a01b031633146117dc5760405162461bcd60e51b8152600401610d0e9061307c565b670de0b6b3a76400006103e86117f160025490565b6117fc9060056131a1565b611806919061317f565b611810919061317f565b82101561185f5760405162461bcd60e51b815260206004820152601e60248201527f6d7573742062652073657420746f206c6f776572207468616e20302e352500006044820152606401610d0e565b61187182670de0b6b3a76400006131a1565b600e55506001919050565b6005546000906001600160a01b031633146118a95760405162461bcd60e51b8152600401610d0e9061307c565b600a85111580156118bb5750600a8411155b80156118c85750600a8311155b80156118d55750600a8211155b6118f15760405162461bcd60e51b8152600401610d0e90613045565b50601693909355601791909155601855601955600190565b6005546000906001600160a01b031633146119365760405162461bcd60e51b8152600401610d0e9061307c565b50601293909355601391909155601455601555600190565b6005546000906001600160a01b0316331461197b5760405162461bcd60e51b8152600401610d0e9061307c565b620186a061198860025490565b6119939060016131a1565b61199d919061317f565b821015611a0a5760405162461bcd60e51b815260206004820152603560248201527f7377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d0e565b6103e8611a1660025490565b611a219060056131a1565b611a2b919061317f565b821115611a975760405162461bcd60e51b815260206004820152603460248201527f7377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d0e565b50600d55600190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546000906001600160a01b03163314611af85760405162461bcd60e51b8152600401610d0e9061307c565b600f5462010000900460ff16611b5c5760405162461bcd60e51b8152602060048201526024808201527f74782064656c6179206d757374206e6f7420616c726561647920626520656e61604482015263189b195960e21b6064820152608401610d0e565b50600f805462ff000019169055600190565b6005546001600160a01b03163314611b985760405162461bcd60e51b8152600401610d0e9061307c565b6001600160a01b038116611bfd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d0e565b611c068161266c565b50565b6001600160a01b038316611c6b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d0e565b6001600160a01b038216611ccc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d0e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611d398484611aa0565b90506000198114611da15781811015611d945760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d0e565b611da18484848403611c09565b50505050565b6001600160a01b038316611dcd5760405162461bcd60e51b8152600401610d0e906130b1565b6001600160a01b038216611df35760405162461bcd60e51b8152600401610d0e90613002565b6001600160a01b03831660009081526007602052604090205460ff1615611e5c5760405162461bcd60e51b815260206004820152601e60248201527f73656e646572206d757374206e6f7420626520626c61636b6c697374656400006044820152606401610d0e565b80611e7257611e6d83836000612712565b505050565b600f54610100900460ff161561231e576005546001600160a01b03848116911614801590611eae57506005546001600160a01b03838116911614155b8015611ec257506001600160a01b03821615155b8015611ed957506001600160a01b03821661dead14155b8015611ee8575060245460ff16155b1561231e57600f546301000000900460ff16611f82576001600160a01b03831660009081526025602052604090205460ff1680611f3d57506001600160a01b03821660009081526025602052604090205460ff165b611f825760405162461bcd60e51b81526020600482015260166024820152753a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d0e565b600f5462010000900460ff16156120a9576005546001600160a01b03838116911614801590611fe357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611ffd57506008546001600160a01b03838116911614155b156120a9573260009081526028602052604090205443116120965760405162461bcd60e51b815260206004820152604760248201527f5f7472616e736665723a207472616e736665722064656c617920656e61626c6560448201527f642e204f6e6c79206f6e652070757263686173652070657220626c6f636b2061606482015266363637bbb2b21760c91b608482015260a401610d0e565b3260009081526028602052604090204390555b6001600160a01b03831660009081526006602052604090205460ff1680156120ea57506001600160a01b03821660009081526026602052604090205460ff16155b156121d657600c548111156121675760405162461bcd60e51b815260206004820152603760248201527f627579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d6178207472616e73616374696f6e20616d6f756e742e0000000000000000006064820152608401610d0e565b600e546001600160a01b03831660009081526020819052604090205461218d9083613167565b11156121d15760405162461bcd60e51b81526020600482015260136024820152721b585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610d0e565b61231e565b6001600160a01b03821660009081526006602052604090205460ff16801561221757506001600160a01b03831660009081526026602052604090205460ff16155b1561229457600c548111156121d15760405162461bcd60e51b815260206004820152603860248201527f73656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d6178207472616e73616374696f6e20616d6f756e742e00000000000000006064820152608401610d0e565b6001600160a01b03821660009081526026602052604090205460ff1661231e57600e546001600160a01b0383166000908152602081905260409020546122da9083613167565b111561231e5760405162461bcd60e51b81526020600482015260136024820152721b585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610d0e565b30600090815260208190526040902054600d54811080159081906123445750600f5460ff165b8015612353575060245460ff16155b801561237857506001600160a01b03851660009081526006602052604090205460ff16155b801561239d57506001600160a01b03851660009081526025602052604090205460ff16155b80156123c257506001600160a01b03841660009081526025602052604090205460ff16155b156123e7576024805460ff191660011790556123dc612866565b6024805460ff191690555b6024546001600160a01b03861660009081526025602052604090205460ff9182161591168061242e57506001600160a01b03851660009081526025602052604090205460ff165b15612437575060005b60008115612658576001600160a01b03861660009081526006602052604090205460ff161561254657600080600061246e8a610edc565b919450925090506064612481848a6131a1565b61248b919061317f565b93508261249883866131a1565b6124a2919061317f565b602060008282546124b39190613167565b909155508390506124c482866131a1565b6124ce919061317f565b602160008282546124df9190613167565b9091555050601e5483906124f390866131a1565b6124fd919061317f565b6022600082825461250e9190613167565b9091555050601f54839061252290866131a1565b61252c919061317f565b6023600082825461253d9190613167565b90915550505050505b6001600160a01b03871660009081526006602052604090205460ff16801561257057506000601054115b1561263a5760646010548661258591906131a1565b61258f919061317f565b90506011548161259f919061317f565b602060008282546125b09190613167565b90915550506011546125c2908261317f565b602260008282546125d39190613167565b90915550506011546125e5908261317f565b602160008282546125f69190613167565b9091555050601154612608908261317f565b602360008282546126199190613167565b90915550506001600160a01b03861660009081526027602052604090204290555b801561264b5761264b873083612712565b61265581866131c0565b94505b612663878787612712565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260066020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166127385760405162461bcd60e51b8152600401610d0e906130b1565b6001600160a01b03821661275e5760405162461bcd60e51b8152600401610d0e90613002565b6001600160a01b038316600090815260208190526040902054818110156127d65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d0e565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061280d908490613167565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161285991815260200190565b60405180910390a3611da1565b30600090815260208190526040812054905060006023546022546021546020546128909190613167565b61289a9190613167565b6128a49190613167565b905060008215806128b3575081155b156128bd57505050565b600d546128cb9060146131a1565b8311156128e357600d546128e09060146131a1565b92505b6000600283602054866128f691906131a1565b612900919061317f565b61290a919061317f565b9050600061291882866131c0565b90504761292482612b2e565b600061293082476131c0565b90506000866021548361294391906131a1565b61294d919061317f565b90506000876022548461296091906131a1565b61296a919061317f565b90506000886023548561297d91906131a1565b612987919061317f565b90506000818361299786886131c0565b6129a191906131c0565b6129ab91906131c0565b60006020819055602181905560228190556023819055600a546040519293506001600160a01b031691859181818185875af1925050503d8060008114612a0d576040519150601f19603f3d011682016040523d82523d6000602084013e612a12565b606091505b5050600b54604051919a506001600160a01b0316908390600081818185875af1925050503d8060008114612a62576040519150601f19603f3d011682016040523d82523d6000602084013e612a67565b606091505b50909950508715801590612a7b5750600081115b15612acc57612a8a8882612cfd565b60208054604080518a81529283018490528201527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6009546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612b19576040519150601f19603f3d011682016040523d82523d6000602084013e612b1e565b606091505b5050505050505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b6357612b63613228565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612bdc57600080fd5b505afa158015612bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c149190612e21565b81600181518110612c2757612c27613228565b60200260200101906001600160a01b031690816001600160a01b031681525050612c72307f000000000000000000000000000000000000000000000000000000000000000084611c09565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612cc79085906000908690309042906004016130f6565b600060405180830381600087803b158015612ce157600080fd5b505af1158015612cf5573d6000803e3d6000fd5b505050505050565b612d28307f000000000000000000000000000000000000000000000000000000000000000084611c09565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015612dad57600080fd5b505af1158015612dc1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de69190612f4d565b5050505050565b80358015158114610d4157600080fd5b600060208284031215612e0f57600080fd5b8135612e1a8161323e565b9392505050565b600060208284031215612e3357600080fd5b8151612e1a8161323e565b60008060408385031215612e5157600080fd5b8235612e5c8161323e565b91506020830135612e6c8161323e565b809150509250929050565b600080600060608486031215612e8c57600080fd5b8335612e978161323e565b92506020840135612ea78161323e565b929592945050506040919091013590565b60008060408385031215612ecb57600080fd5b8235612ed68161323e565b9150612ee460208401612ded565b90509250929050565b60008060408385031215612f0057600080fd5b8235612f0b8161323e565b946020939093013593505050565b600060208284031215612f2b57600080fd5b612e1a82612ded565b600060208284031215612f4657600080fd5b5035919050565b600080600060608486031215612f6257600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215612f9157600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b81811015612fda57858101830151858201604001528201612fbe565b81811115612fec576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601b908201527f6d757374206e6f7420626520686967686572207468616e203130250000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131465784516001600160a01b031683529383019391830191600101613121565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561317a5761317a613212565b500190565b60008261319c57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156131bb576131bb613212565b500290565b6000828210156131d2576131d2613212565b500390565b600181811c908216806131eb57607f821691505b6020821081141561320c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611c0657600080fdfea2646970667358221220b0c8abcef1aecc3ea962a1c2137ddf4d409831763101ed6725d73c2d021f86c064736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103fe5760003560e01c806375f0a87411610213578063b4ba405411610123578063d85ba063116100ab578063e884f2601161007a578063e884f26014610ba6578063eb8851e714610bbb578063f2fde38b14610bd1578063f8b45b0514610bf1578063f9f92be414610c0757600080fd5b8063d85ba06314610b44578063db3d516f14610b5a578063dd62ed3e14610b70578063e2f4560514610b9057600080fd5b8063c364b784116100f2578063c364b78414610ab8578063c770c74614610ace578063c8c8ebe414610aee578063c94ac63314610b04578063d257b34f14610b2457600080fd5b8063b4ba405414610a32578063b62496f514610a48578063c024666814610a78578063c18bc19514610a9857600080fd5b806395d89b41116101a6578063a0d82dc511610175578063a0d82dc51461099c578063a457c2d7146109b2578063a9059cbb146109d2578063aa498023146109f2578063aacebbe314610a1257600080fd5b806395d89b41146109315780639a7a23d6146109465780639ade4f7e146109665780639fccce321461098657600080fd5b80638ea5220f116101e25780638ea5220f146108bb5780639155e083146108db578063924de9b7146108fb57806394f10eb11461091b57600080fd5b806375f0a874146108485780637b208769146108685780638b005eda146108885780638da5cb5b1461089d57600080fd5b80633e65d4aa1161030e5780634fbee193116102a157806370a082311161027057806370a08231146107b057806371287bcf146107e6578063715018a6146107fc578063751039fc146108135780637571336a1461082857600080fd5b80634fbee193146107315780635859bdc21461076a57806364c3549f146107805780636ddd17131461079657600080fd5b8063490a423a116102dd578063490a423a146106ba57806349bd5a5e146106da5780634ada218b146106fa5780634cc0fbb31461071b57600080fd5b80633e65d4aa1461063357806344249f041461065357806346e6d0fd1461066957806348e9566e1461067f57600080fd5b80631f3fed8f11610391578063313ce56711610360578063313ce567146105ac5780633582ad23146105c8578063359a5811146105e757806339509351146105fd5780633c2e54d81461061d57600080fd5b80631f3fed8f1461054057806323b872dd146105565780632cdf5797146105765780632cf116261461058c57600080fd5b80631694505e116103cd5780631694505e146104a957806318160ddd146104f55780631a8145bb1461050a5780631d0026941461052057600080fd5b806306fdde031461040a578063095ea7b3146104355780630d7f1441146104655780631348f54f1461048957600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061041f610c37565b60405161042c9190612fad565b60405180910390f35b34801561044157600080fd5b50610455610450366004612eed565b610cc9565b604051901515815260200161042c565b34801561047157600080fd5b5061047b601e5481565b60405190815260200161042c565b34801561049557600080fd5b506104556104a4366004612f34565b610ce1565b3480156104b557600080fd5b506104dd7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161042c565b34801561050157600080fd5b5060025461047b565b34801561051657600080fd5b5061047b60205481565b34801561052c57600080fd5b5061045561053b366004612f7b565b610d46565b34801561054c57600080fd5b5061047b60215481565b34801561056257600080fd5b50610455610571366004612e77565b610dd3565b34801561058257600080fd5b5061047b601a5481565b34801561059857600080fd5b506104556105a7366004612f34565b610df7565b3480156105b857600080fd5b506040516012815260200161042c565b3480156105d457600080fd5b50600f5461045590610100900460ff1681565b3480156105f357600080fd5b5061047b60125481565b34801561060957600080fd5b50610455610618366004612eed565b610e2d565b34801561062957600080fd5b5061047b60185481565b34801561063f57600080fd5b5061045561064e366004612dfd565b610e4f565b34801561065f57600080fd5b5061047b60225481565b34801561067557600080fd5b5061047b601b5481565b34801561068b57600080fd5b5061069f61069a366004612dfd565b610edc565b6040805193845260208401929092529082015260600161042c565b3480156106c657600080fd5b50600f546104559062010000900460ff1681565b3480156106e657600080fd5b506008546104dd906001600160a01b031681565b34801561070657600080fd5b50600f54610455906301000000900460ff1681565b34801561072757600080fd5b5061047b601d5481565b34801561073d57600080fd5b5061045561074c366004612dfd565b6001600160a01b031660009081526025602052604090205460ff1690565b34801561077657600080fd5b5061047b60195481565b34801561078c57600080fd5b5061047b60165481565b3480156107a257600080fd5b50600f546104559060ff1681565b3480156107bc57600080fd5b5061047b6107cb366004612dfd565b6001600160a01b031660009081526020819052604090205490565b3480156107f257600080fd5b5061047b60135481565b34801561080857600080fd5b506108116110c5565b005b34801561081f57600080fd5b506104556110fb565b34801561083457600080fd5b50610455610843366004612eb8565b61119c565b34801561085457600080fd5b506009546104dd906001600160a01b031681565b34801561087457600080fd5b50600a546104dd906001600160a01b031681565b34801561089457600080fd5b506104556111f8565b3480156108a957600080fd5b506005546001600160a01b03166104dd565b3480156108c757600080fd5b50600b546104dd906001600160a01b031681565b3480156108e757600080fd5b506104556108f6366004612eb8565b6112c0565b34801561090757600080fd5b50610455610916366004612f19565b6113b7565b34801561092757600080fd5b5061047b60115481565b34801561093d57600080fd5b5061041f6113fb565b34801561095257600080fd5b50610455610961366004612eb8565b61140a565b34801561097257600080fd5b50610455610981366004612f34565b6114d9565b34801561099257600080fd5b5061047b60235481565b3480156109a857600080fd5b5061047b601f5481565b3480156109be57600080fd5b506104556109cd366004612eed565b611530565b3480156109de57600080fd5b506104556109ed366004612eed565b6115ab565b3480156109fe57600080fd5b50610455610a0d366004612f34565b6115b9565b348015610a1e57600080fd5b50610455610a2d366004612dfd565b611691565b348015610a3e57600080fd5b5061047b60175481565b348015610a5457600080fd5b50610455610a63366004612dfd565b60066020526000908152604090205460ff1681565b348015610a8457600080fd5b50610455610a93366004612eb8565b61171e565b348015610aa457600080fd5b50610455610ab3366004612f34565b6117af565b348015610ac457600080fd5b5061047b60155481565b348015610ada57600080fd5b50610455610ae9366004612f7b565b61187c565b348015610afa57600080fd5b5061047b600c5481565b348015610b1057600080fd5b50610455610b1f366004612f7b565b611909565b348015610b3057600080fd5b50610455610b3f366004612f34565b61194e565b348015610b5057600080fd5b5061047b60105481565b348015610b6657600080fd5b5061047b601c5481565b348015610b7c57600080fd5b5061047b610b8b366004612e3e565b611aa0565b348015610b9c57600080fd5b5061047b600d5481565b348015610bb257600080fd5b50610455611acb565b348015610bc757600080fd5b5061047b60145481565b348015610bdd57600080fd5b50610811610bec366004612dfd565b611b6e565b348015610bfd57600080fd5b5061047b600e5481565b348015610c1357600080fd5b50610455610c22366004612dfd565b60076020526000908152604090205460ff1681565b606060038054610c46906131d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c72906131d7565b8015610cbf5780601f10610c9457610100808354040283529160200191610cbf565b820191906000526020600020905b815481529060010190602001808311610ca257829003601f168201915b5050505050905090565b600033610cd7818585611c09565b5060019392505050565b6005546000906001600160a01b03163314610d175760405162461bcd60e51b8152600401610d0e9061307c565b60405180910390fd5b600a821115610d385760405162461bcd60e51b8152600401610d0e90613045565b50601081905560015b919050565b6005546000906001600160a01b03163314610d735760405162461bcd60e51b8152600401610d0e9061307c565b600a8511158015610d855750600a8411155b8015610d925750600a8311155b8015610d9f5750600a8211155b610dbb5760405162461bcd60e51b8152600401610d0e90613045565b50601a93909355601b91909155601c55601d55600190565b600033610de1858285611d2d565b610dec858585611da7565b506001949350505050565b6005546000906001600160a01b03163314610e245760405162461bcd60e51b8152600401610d0e9061307c565b50601155600190565b600033610cd7818585610e408383611aa0565b610e4a9190613167565b611c09565b6005546000906001600160a01b03163314610e7c5760405162461bcd60e51b8152600401610d0e9061307c565b600a546040516001600160a01b03918216918416907fc20073d1c4443096c55d22a3812db7261aa6911634e1a0850f068d0c9923402d90600090a350600a80546001600160a01b0383166001600160a01b03199091161790556001919050565b600080600080601f54601e54610ef29190613167565b6012546001600160a01b038716600090815260276020526040902054919250610f1a91613167565b421015610f4e5780601a54601654610f329190613167565b610f3c9190613167565b601654601a54935093509350506110be565b6012546001600160a01b038616600090815260276020526040902054610f749190613167565b42118015610fa657506013546001600160a01b038616600090815260276020526040902054610fa39190613167565b42105b15610fd85780601b54601754610fbc9190613167565b610fc69190613167565b601754601b54935093509350506110be565b6013546001600160a01b038616600090815260276020526040902054610ffe9190613167565b4211801561103057506014546001600160a01b03861660009081526027602052604090205461102d9190613167565b42105b156110625780601c546018546110469190613167565b6110509190613167565b601854601c54935093509350506110be565b6014546001600160a01b0386166000908152602760205260409020546110889190613167565b4211156110bc5780601d546019546110a09190613167565b6110aa9190613167565b601954601d54935093509350506110be565b505b9193909250565b6005546001600160a01b031633146110ef5760405162461bcd60e51b8152600401610d0e9061307c565b6110f9600061266c565b565b6005546000906001600160a01b031633146111285760405162461bcd60e51b8152600401610d0e9061307c565b600f54610100900460ff161561118b5760405162461bcd60e51b815260206004820152602260248201527f6c696d697473206d757374206e6f742062652072656d6f76656420616c726561604482015261647960f01b6064820152608401610d0e565b50600f805461ff0019169055600190565b6005546000906001600160a01b031633146111c95760405162461bcd60e51b8152600401610d0e9061307c565b506001600160a01b0382166000908152602660205260409020805482151560ff19909116179055600192915050565b6005546000906001600160a01b031633146112255760405162461bcd60e51b8152600401610d0e9061307c565b600f546301000000900460ff161580156112425750600f5460ff16155b6112a75760405162461bcd60e51b815260206004820152603060248201527f74726164696e6720616e64207377617070696e67206d757374206e6f7420626560448201526f20656e61626c656420616c726561647960801b6064820152608401610d0e565b50600f805463ff0000ff19166301000001179055600190565b6005546000906001600160a01b031633146112ed5760405162461bcd60e51b8152600401610d0e9061307c565b6001600160a01b03831661134f5760405162461bcd60e51b815260206004820152602360248201527f6d757374206e6f7420626c61636b6c69737420746865207a65726f206164647260448201526265737360e81b6064820152608401610d0e565b6001600160a01b038316600081815260076020908152604091829020805460ff19168615159081179091558251938452908301527fcf3473b85df1594d47b6958f29a32bea0abff9dd68296f7bf33443646793cfd8910160405180910390a150600192915050565b6005546000906001600160a01b031633146113e45760405162461bcd60e51b8152600401610d0e9061307c565b50600f805460ff1916911515919091179055600190565b606060048054610c46906131d7565b6005546000906001600160a01b031633146114375760405162461bcd60e51b8152600401610d0e9061307c565b6008546001600160a01b03848116911614156114c65760405162461bcd60e51b815260206004820152604260248201527f74686520756e69737761705632506169722063616e6e6f742062652072656d6f60448201527f7665642066726f6d206175746f6d617465644d61726b65744d616b6572506169606482015261727360f01b608482015260a401610d0e565b6114d083836126be565b50600192915050565b6005546000906001600160a01b031633146115065760405162461bcd60e51b8152600401610d0e9061307c565b600a8211156115275760405162461bcd60e51b8152600401610d0e90613045565b50601e55600190565b6000338161153e8286611aa0565b90508381101561159e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d0e565b610dec8286868403611c09565b600033610cd7818585611da7565b6005546000906001600160a01b031633146115e65760405162461bcd60e51b8152600401610d0e9061307c565b670de0b6b3a76400006103e86115fb60025490565b6116069060016131a1565b611610919061317f565b61161a919061317f565b8210156116745760405162461bcd60e51b815260206004820152602260248201527f6d757374206e6f742062652073657420746f206c6f776572207468616e20302e604482015261312560f01b6064820152608401610d0e565b61168682670de0b6b3a76400006131a1565b600c55506001919050565b6005546000906001600160a01b031633146116be5760405162461bcd60e51b8152600401610d0e9061307c565b6009546040516001600160a01b03918216918416907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a350600980546001600160a01b0383166001600160a01b03199091161790556001919050565b6005546000906001600160a01b0316331461174b5760405162461bcd60e51b8152600401610d0e9061307c565b6001600160a01b038316600081815260256020908152604091829020805460ff191686151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a250600192915050565b6005546000906001600160a01b031633146117dc5760405162461bcd60e51b8152600401610d0e9061307c565b670de0b6b3a76400006103e86117f160025490565b6117fc9060056131a1565b611806919061317f565b611810919061317f565b82101561185f5760405162461bcd60e51b815260206004820152601e60248201527f6d7573742062652073657420746f206c6f776572207468616e20302e352500006044820152606401610d0e565b61187182670de0b6b3a76400006131a1565b600e55506001919050565b6005546000906001600160a01b031633146118a95760405162461bcd60e51b8152600401610d0e9061307c565b600a85111580156118bb5750600a8411155b80156118c85750600a8311155b80156118d55750600a8211155b6118f15760405162461bcd60e51b8152600401610d0e90613045565b50601693909355601791909155601855601955600190565b6005546000906001600160a01b031633146119365760405162461bcd60e51b8152600401610d0e9061307c565b50601293909355601391909155601455601555600190565b6005546000906001600160a01b0316331461197b5760405162461bcd60e51b8152600401610d0e9061307c565b620186a061198860025490565b6119939060016131a1565b61199d919061317f565b821015611a0a5760405162461bcd60e51b815260206004820152603560248201527f7377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d0e565b6103e8611a1660025490565b611a219060056131a1565b611a2b919061317f565b821115611a975760405162461bcd60e51b815260206004820152603460248201527f7377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d0e565b50600d55600190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546000906001600160a01b03163314611af85760405162461bcd60e51b8152600401610d0e9061307c565b600f5462010000900460ff16611b5c5760405162461bcd60e51b8152602060048201526024808201527f74782064656c6179206d757374206e6f7420616c726561647920626520656e61604482015263189b195960e21b6064820152608401610d0e565b50600f805462ff000019169055600190565b6005546001600160a01b03163314611b985760405162461bcd60e51b8152600401610d0e9061307c565b6001600160a01b038116611bfd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d0e565b611c068161266c565b50565b6001600160a01b038316611c6b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d0e565b6001600160a01b038216611ccc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d0e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611d398484611aa0565b90506000198114611da15781811015611d945760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d0e565b611da18484848403611c09565b50505050565b6001600160a01b038316611dcd5760405162461bcd60e51b8152600401610d0e906130b1565b6001600160a01b038216611df35760405162461bcd60e51b8152600401610d0e90613002565b6001600160a01b03831660009081526007602052604090205460ff1615611e5c5760405162461bcd60e51b815260206004820152601e60248201527f73656e646572206d757374206e6f7420626520626c61636b6c697374656400006044820152606401610d0e565b80611e7257611e6d83836000612712565b505050565b600f54610100900460ff161561231e576005546001600160a01b03848116911614801590611eae57506005546001600160a01b03838116911614155b8015611ec257506001600160a01b03821615155b8015611ed957506001600160a01b03821661dead14155b8015611ee8575060245460ff16155b1561231e57600f546301000000900460ff16611f82576001600160a01b03831660009081526025602052604090205460ff1680611f3d57506001600160a01b03821660009081526025602052604090205460ff165b611f825760405162461bcd60e51b81526020600482015260166024820152753a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d0e565b600f5462010000900460ff16156120a9576005546001600160a01b03838116911614801590611fe357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611ffd57506008546001600160a01b03838116911614155b156120a9573260009081526028602052604090205443116120965760405162461bcd60e51b815260206004820152604760248201527f5f7472616e736665723a207472616e736665722064656c617920656e61626c6560448201527f642e204f6e6c79206f6e652070757263686173652070657220626c6f636b2061606482015266363637bbb2b21760c91b608482015260a401610d0e565b3260009081526028602052604090204390555b6001600160a01b03831660009081526006602052604090205460ff1680156120ea57506001600160a01b03821660009081526026602052604090205460ff16155b156121d657600c548111156121675760405162461bcd60e51b815260206004820152603760248201527f627579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d6178207472616e73616374696f6e20616d6f756e742e0000000000000000006064820152608401610d0e565b600e546001600160a01b03831660009081526020819052604090205461218d9083613167565b11156121d15760405162461bcd60e51b81526020600482015260136024820152721b585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610d0e565b61231e565b6001600160a01b03821660009081526006602052604090205460ff16801561221757506001600160a01b03831660009081526026602052604090205460ff16155b1561229457600c548111156121d15760405162461bcd60e51b815260206004820152603860248201527f73656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d6178207472616e73616374696f6e20616d6f756e742e00000000000000006064820152608401610d0e565b6001600160a01b03821660009081526026602052604090205460ff1661231e57600e546001600160a01b0383166000908152602081905260409020546122da9083613167565b111561231e5760405162461bcd60e51b81526020600482015260136024820152721b585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610d0e565b30600090815260208190526040902054600d54811080159081906123445750600f5460ff165b8015612353575060245460ff16155b801561237857506001600160a01b03851660009081526006602052604090205460ff16155b801561239d57506001600160a01b03851660009081526025602052604090205460ff16155b80156123c257506001600160a01b03841660009081526025602052604090205460ff16155b156123e7576024805460ff191660011790556123dc612866565b6024805460ff191690555b6024546001600160a01b03861660009081526025602052604090205460ff9182161591168061242e57506001600160a01b03851660009081526025602052604090205460ff165b15612437575060005b60008115612658576001600160a01b03861660009081526006602052604090205460ff161561254657600080600061246e8a610edc565b919450925090506064612481848a6131a1565b61248b919061317f565b93508261249883866131a1565b6124a2919061317f565b602060008282546124b39190613167565b909155508390506124c482866131a1565b6124ce919061317f565b602160008282546124df9190613167565b9091555050601e5483906124f390866131a1565b6124fd919061317f565b6022600082825461250e9190613167565b9091555050601f54839061252290866131a1565b61252c919061317f565b6023600082825461253d9190613167565b90915550505050505b6001600160a01b03871660009081526006602052604090205460ff16801561257057506000601054115b1561263a5760646010548661258591906131a1565b61258f919061317f565b90506011548161259f919061317f565b602060008282546125b09190613167565b90915550506011546125c2908261317f565b602260008282546125d39190613167565b90915550506011546125e5908261317f565b602160008282546125f69190613167565b9091555050601154612608908261317f565b602360008282546126199190613167565b90915550506001600160a01b03861660009081526027602052604090204290555b801561264b5761264b873083612712565b61265581866131c0565b94505b612663878787612712565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260066020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166127385760405162461bcd60e51b8152600401610d0e906130b1565b6001600160a01b03821661275e5760405162461bcd60e51b8152600401610d0e90613002565b6001600160a01b038316600090815260208190526040902054818110156127d65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d0e565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061280d908490613167565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161285991815260200190565b60405180910390a3611da1565b30600090815260208190526040812054905060006023546022546021546020546128909190613167565b61289a9190613167565b6128a49190613167565b905060008215806128b3575081155b156128bd57505050565b600d546128cb9060146131a1565b8311156128e357600d546128e09060146131a1565b92505b6000600283602054866128f691906131a1565b612900919061317f565b61290a919061317f565b9050600061291882866131c0565b90504761292482612b2e565b600061293082476131c0565b90506000866021548361294391906131a1565b61294d919061317f565b90506000876022548461296091906131a1565b61296a919061317f565b90506000886023548561297d91906131a1565b612987919061317f565b90506000818361299786886131c0565b6129a191906131c0565b6129ab91906131c0565b60006020819055602181905560228190556023819055600a546040519293506001600160a01b031691859181818185875af1925050503d8060008114612a0d576040519150601f19603f3d011682016040523d82523d6000602084013e612a12565b606091505b5050600b54604051919a506001600160a01b0316908390600081818185875af1925050503d8060008114612a62576040519150601f19603f3d011682016040523d82523d6000602084013e612a67565b606091505b50909950508715801590612a7b5750600081115b15612acc57612a8a8882612cfd565b60208054604080518a81529283018490528201527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6009546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612b19576040519150601f19603f3d011682016040523d82523d6000602084013e612b1e565b606091505b5050505050505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b6357612b63613228565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612bdc57600080fd5b505afa158015612bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c149190612e21565b81600181518110612c2757612c27613228565b60200260200101906001600160a01b031690816001600160a01b031681525050612c72307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c09565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612cc79085906000908690309042906004016130f6565b600060405180830381600087803b158015612ce157600080fd5b505af1158015612cf5573d6000803e3d6000fd5b505050505050565b612d28307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c09565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015612dad57600080fd5b505af1158015612dc1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de69190612f4d565b5050505050565b80358015158114610d4157600080fd5b600060208284031215612e0f57600080fd5b8135612e1a8161323e565b9392505050565b600060208284031215612e3357600080fd5b8151612e1a8161323e565b60008060408385031215612e5157600080fd5b8235612e5c8161323e565b91506020830135612e6c8161323e565b809150509250929050565b600080600060608486031215612e8c57600080fd5b8335612e978161323e565b92506020840135612ea78161323e565b929592945050506040919091013590565b60008060408385031215612ecb57600080fd5b8235612ed68161323e565b9150612ee460208401612ded565b90509250929050565b60008060408385031215612f0057600080fd5b8235612f0b8161323e565b946020939093013593505050565b600060208284031215612f2b57600080fd5b612e1a82612ded565b600060208284031215612f4657600080fd5b5035919050565b600080600060608486031215612f6257600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215612f9157600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b81811015612fda57858101830151858201604001528201612fbe565b81811115612fec576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601b908201527f6d757374206e6f7420626520686967686572207468616e203130250000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131465784516001600160a01b031683529383019391830191600101613121565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561317a5761317a613212565b500190565b60008261319c57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156131bb576131bb613212565b500290565b6000828210156131d2576131d2613212565b500390565b600181811c908216806131eb57607f821691505b6020821081141561320c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611c0657600080fdfea2646970667358221220b0c8abcef1aecc3ea962a1c2137ddf4d409831763101ed6725d73c2d021f86c064736f6c63430008070033

Deployed Bytecode Sourcemap

24791:19350:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13996:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16347:201;;;;;;;;;;-1:-1:-1;16347:201:0;;;;;:::i;:::-;;:::i;:::-;;;4736:14:1;;4729:22;4711:41;;4699:2;4684:18;16347:201:0;4571:187:1;26268:33:0;;;;;;;;;;;;;;;;;;;15754:25:1;;;15742:2;15727:18;26268:33:0;15608:177:1;31585:208:0;;;;;;;;;;-1:-1:-1;31585:208:0;;;;;:::i;:::-;;:::i;25099:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3626:32:1;;;3608:51;;3596:2;3581:18;25099:51:0;3462:203:1;15116:108:0;;;;;;;;;;-1:-1:-1;15204:12:0;;15116:108;;26348:33;;;;;;;;;;;;;;;;33130:576;;;;;;;;;;-1:-1:-1;33130:576:0;;;;;:::i;:::-;;:::i;26391:33::-;;;;;;;;;;;;;;;;17128:295;;;;;;;;;;-1:-1:-1;17128:295:0;;;;;:::i;:::-;;:::i;26070:42::-;;;;;;;;;;;;;;;;31801:148;;;;;;;;;;-1:-1:-1;31801:148:0;;;;;:::i;:::-;;:::i;14958:93::-;;;;;;;;;;-1:-1:-1;14958:93:0;;15041:2;17241:36:1;;17229:2;17214:18;14958:93:0;17099:184:1;25494:25:0;;;;;;;;;;-1:-1:-1;25494:25:0;;;;;;;;;;;25679:38;;;;;;;;;;;;;;;;17832:238;;;;;;;;;;-1:-1:-1;17832:238:0;;;;;:::i;:::-;;:::i;25970:42::-;;;;;;;;;;;;;;;;31141:195;;;;;;;;;;-1:-1:-1;31141:195:0;;;;;:::i;:::-;;:::i;26431:31::-;;;;;;;;;;;;;;;;26119:42;;;;;;;;;;;;;;;;42172:1966;;;;;;;;;;-1:-1:-1;42172:1966:0;;;;;:::i;:::-;;:::i;:::-;;;;16977:25:1;;;17033:2;17018:18;;17011:34;;;;17061:18;;;17054:34;16965:2;16950:18;42172:1966:0;16775:319:1;25526:26:0;;;;;;;;;;-1:-1:-1;25526:26:0;;;;;;;;;;;25157:28;;;;;;;;;;-1:-1:-1;25157:28:0;;;;-1:-1:-1;;;;;25157:28:0;;;25559:26;;;;;;;;;;-1:-1:-1;25559:26:0;;;;;;;;;;;26217:42;;;;;;;;;;;;;;;;34446:119;;;;;;;;;;-1:-1:-1;34446:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;34532:25:0;34508:4;34532:25;;;:19;:25;;;;;;;;;34446:119;26019:42;;;;;;;;;;;;;;;;25872;;;;;;;;;;;;;;;;25464:23;;;;;;;;;;-1:-1:-1;25464:23:0;;;;;;;;15287:127;;;;;;;;;;-1:-1:-1;15287:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15388:18:0;15361:7;15388:18;;;;;;;;;;;;15287:127;25727:38;;;;;;;;;;;;;;;;12399:103;;;;;;;;;;;;;:::i;:::-;;29211:204;;;;;;;;;;;;;:::i;33715:189::-;;;;;;;;;;-1:-1:-1;33715:189:0;;;;;:::i;:::-;;:::i;25194:30::-;;;;;;;;;;-1:-1:-1;25194:30:0;;;;-1:-1:-1;;;;;25194:30:0;;;25231:28;;;;;;;;;;-1:-1:-1;25231:28:0;;;;-1:-1:-1;;;;;25231:28:0;;;28923:276;;;;;;;;;;;;;:::i;11748:87::-;;;;;;;;;;-1:-1:-1;11821:6:0;;-1:-1:-1;;;;;11821:6:0;11748:87;;25266:68;;;;;;;;;;-1:-1:-1;25266:68:0;;;;-1:-1:-1;;;;;25266:68:0;;;29650:302;;;;;;;;;;-1:-1:-1;29650:302:0;;;;;:::i;:::-;;:::i;31436:137::-;;;;;;;;;;-1:-1:-1;31436:137:0;;;;;:::i;:::-;;:::i;25633:33::-;;;;;;;;;;;;;;;;14215:104;;;;;;;;;;;;;:::i;34136:302::-;;;;;;;;;;-1:-1:-1;34136:302:0;;;;;:::i;:::-;;:::i;31957:212::-;;;;;;;;;;-1:-1:-1;31957:212:0;;;;;:::i;:::-;;:::i;26469:27::-;;;;;;;;;;;;;;;;26308:29;;;;;;;;;;;;;;;;18573:436;;;;;;;;;;-1:-1:-1;18573:436:0;;;;;:::i;:::-;;:::i;15620:193::-;;;;;;;;;;-1:-1:-1;15620:193:0;;;;;:::i;:::-;;:::i;30370:280::-;;;;;;;;;;-1:-1:-1;30370:280:0;;;;;:::i;:::-;;:::i;30926:203::-;;;;;;;;;;-1:-1:-1;30926:203:0;;;;;:::i;:::-;;:::i;25921:42::-;;;;;;;;;;;;;;;;24983:58;;;;;;;;;;-1:-1:-1;24983:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33912:216;;;;;;;;;;-1:-1:-1;33912:216:0;;;;;:::i;:::-;;:::i;30658:260::-;;;;;;;;;;-1:-1:-1;30658:260:0;;;;;:::i;:::-;;:::i;25819:39::-;;;;;;;;;;;;;;;;32547:576;;;;;;;;;;-1:-1:-1;32547:576:0;;;;;:::i;:::-;;:::i;25349:35::-;;;;;;;;;;;;;;;;32177:362;;;;;;;;;;-1:-1:-1;32177:362:0;;;;;:::i;:::-;;:::i;29964:394::-;;;;;;;;;;-1:-1:-1;29964:394:0;;;;;:::i;:::-;;:::i;25594:31::-;;;;;;;;;;;;;;;;26168:42;;;;;;;;;;;;;;;;15876:151;;;;;;;;;;-1:-1:-1;15876:151:0;;;;;:::i;:::-;;:::i;25391:33::-;;;;;;;;;;;;;;;;29427:215;;;;;;;;;;;;;:::i;25773:38::-;;;;;;;;;;;;;;;;12657:201;;;;;;;;;;-1:-1:-1;12657:201:0;;;;;:::i;:::-;;:::i;25431:24::-;;;;;;;;;;;;;;;;25048:42;;;;;;;;;;-1:-1:-1;25048:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13996:100;14050:13;14083:5;14076:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13996:100;:::o;16347:201::-;16430:4;11202:10;16486:32;11202:10;16502:7;16511:6;16486:8;:32::i;:::-;-1:-1:-1;16536:4:0;;16347:201;-1:-1:-1;;;16347:201:0:o;31585:208::-;11821:6;;31654:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;;;;;;;;;31688:2:::1;31681:3;:9;;31673:59;;;;-1:-1:-1::0;;;31673:59:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;31745:12:0::1;:18:::0;;;31781:4:::1;12039:1;31585:208:::0;;;:::o;33130:576::-;11821:6;;33326:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;33379:2:::1;33371:4;:10;;:38;;;;;33407:2;33399:4;:10;;33371:38;:66;;;;;33435:2;33427:4;:10;;33371:66;:94;;;;;33463:2;33455:4;:10;;33371:94;33349:161;;;;-1:-1:-1::0;;;33349:161:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;33523:23:0::1;:30:::0;;;;33564:23:::1;:30:::0;;;;33605:23:::1;:30:::0;33646:23:::1;:30:::0;33694:4:::1;::::0;33130:576::o;17128:295::-;17259:4;11202:10;17317:38;17333:4;11202:10;17348:6;17317:15;:38::i;:::-;17366:27;17376:4;17382:2;17386:6;17366:9;:27::i;:::-;-1:-1:-1;17411:4:0;;17128:295;-1:-1:-1;;;;17128:295:0:o;31801:148::-;11821:6;;31876:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;-1:-1:-1;31895:14:0::1;:24:::0;31937:4:::1;::::0;31801:148::o;17832:238::-;17920:4;11202:10;17976:64;11202:10;17992:7;18029:10;18001:25;11202:10;17992:7;18001:9;:25::i;:::-;:38;;;;:::i;:::-;17976:8;:64::i;31141:195::-;11821:6;;31212:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;31261:13:::1;::::0;31234:41:::1;::::0;-1:-1:-1;;;;;31261:13:0;;::::1;::::0;31234:41;::::1;::::0;::::1;::::0;31261:13:::1;::::0;31234:41:::1;-1:-1:-1::0;31286:13:0::1;:20:::0;;-1:-1:-1;;;;;31286:20:0;::::1;-1:-1:-1::0;;;;;;31286:20:0;;::::1;;::::0;;;31141:195;;;:::o;42172:1966::-;42275:20;42307:27;42346;42392:40;42452:10;;42435:14;;:27;;;;:::i;:::-;42519:11;;-1:-1:-1;;;;;42497:19:0;;;;;;:13;:19;;;;;;42392:70;;-1:-1:-1;42497:33:0;;;:::i;:::-;42479:15;:51;42475:385;;;42694:32;42650:23;;42606;;:67;;;;:::i;:::-;:120;;;;:::i;:::-;42767:23;;42810;;42561:287;;;;;;;;;42475:385;42916:11;;-1:-1:-1;;;;;42894:19:0;;;;;;:13;:19;;;;;;:33;;42916:11;42894:33;:::i;:::-;42876:15;:51;:119;;;;-1:-1:-1;42984:11:0;;-1:-1:-1;;;;;42962:19:0;;;;;;:13;:19;;;;;;:33;;42984:11;42962:33;:::i;:::-;42944:15;:51;42876:119;42872:436;;;43160:32;43116:23;;43072;;:67;;;;:::i;:::-;:120;;;;:::i;:::-;43215:23;;43258;;43027:269;;;;;;;;;42872:436;43364:11;;-1:-1:-1;;;;;43342:19:0;;;;;;:13;:19;;;;;;:33;;43364:11;43342:33;:::i;:::-;43324:15;:51;:119;;;;-1:-1:-1;43432:11:0;;-1:-1:-1;;;;;43410:19:0;;;;;;:13;:19;;;;;;:33;;43432:11;43410:33;:::i;:::-;43392:15;:51;43324:119;43320:435;;;43607:32;43563:23;;43519;;:67;;;;:::i;:::-;:120;;;;:::i;:::-;43662:23;;43705;;43474:269;;;;;;;;;43320:435;43809:11;;-1:-1:-1;;;;;43787:19:0;;;;;;:13;:19;;;;;;:33;;43809:11;43787:33;:::i;:::-;43769:15;:51;43765:366;;;43984:32;43940:23;;43896;;:67;;;;:::i;:::-;:120;;;;:::i;:::-;44038:23;;44081;;43851:268;;;;;;;;;43765:366;42381:1757;42172:1966;;;;;;:::o;12399:103::-;11821:6;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;12464:30:::1;12491:1;12464:18;:30::i;:::-;12399:103::o:0;29211:204::-;11821:6;;29263:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;29289:13:::1;::::0;::::1;::::0;::::1;;;29288:14;29280:71;;;::::0;-1:-1:-1;;;29280:71:0;;13712:2:1;29280:71:0::1;::::0;::::1;13694:21:1::0;13751:2;13731:18;;;13724:30;13790:34;13770:18;;;13763:62;-1:-1:-1;;;13841:18:1;;;13834:32;13883:19;;29280:71:0::1;13510:398:1::0;29280:71:0::1;-1:-1:-1::0;29364:13:0::1;:21:::0;;-1:-1:-1;;29364:21:0::1;::::0;;:13:::1;29211:204:::0;:::o;33715:189::-;11821:6;;33807:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;33824:37:0;::::1;;::::0;;;:31:::1;:37;::::0;;;;:50;;;::::1;;-1:-1:-1::0;;33824:50:0;;::::1;;::::0;;;33715:189;;;;:::o;28923:276::-;11821:6;;28987:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;29013:14:::1;::::0;;;::::1;;;29012:15;:31:::0;::::1;;;-1:-1:-1::0;29032:11:0::1;::::0;::::1;;29031:12;29012:31;29004:102;;;::::0;-1:-1:-1;;;29004:102:0;;13295:2:1;29004:102:0::1;::::0;::::1;13277:21:1::0;13334:2;13314:18;;;13307:30;13373:34;13353:18;;;13346:62;-1:-1:-1;;;13424:18:1;;;13417:46;13480:19;;29004:102:0::1;13093:412:1::0;29004:102:0::1;-1:-1:-1::0;29119:14:0::1;:21:::0;;-1:-1:-1;;29151:18:0;;;;;-1:-1:-1;;28923:276:0:o;29650:302::-;11821:6;;29737:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29762:18:0;::::1;29754:76;;;::::0;-1:-1:-1;;;29754:76:0;;14115:2:1;29754:76:0::1;::::0;::::1;14097:21:1::0;14154:2;14134:18;;;14127:30;14193:34;14173:18;;;14166:62;-1:-1:-1;;;14244:18:1;;;14237:33;14287:19;;29754:76:0::1;13913:399:1::0;29754:76:0::1;-1:-1:-1::0;;;;;29843:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;;;;:31;;-1:-1:-1;;29843:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29890:32;;3838:51:1;;;3905:18;;;3898:50;29890:32:0::1;::::0;3811:18:1;29890:32:0::1;;;;;;;-1:-1:-1::0;29940:4:0::1;29650:302:::0;;;;:::o;31436:137::-;11821:6;;31505:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;-1:-1:-1;31522:11:0::1;:21:::0;;-1:-1:-1;;31522:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;31436:137:0:o;14215:104::-;14271:13;14304:7;14297:14;;;;;:::i;34136:302::-;11821:6;;34226:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;34259:13:::1;::::0;-1:-1:-1;;;;;34251:21:0;;::::1;34259:13:::0;::::1;34251:21;;34243:110;;;::::0;-1:-1:-1;;;34243:110:0;;9975:2:1;34243:110:0::1;::::0;::::1;9957:21:1::0;10014:2;9994:18;;;9987:30;10053:34;10033:18;;;10026:62;10124:34;10104:18;;;10097:62;-1:-1:-1;;;10175:19:1;;;10168:33;10218:19;;34243:110:0::1;9773:470:1::0;34243:110:0::1;34366:42;34395:4;34401:6;34366:28;:42::i;:::-;-1:-1:-1::0;34426:4:0::1;34136:302:::0;;;;:::o;31957:212::-;11821:6;;32028:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;32062:2:::1;32055:3;:9;;32047:59;;;;-1:-1:-1::0;;;32047:59:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;32119:14:0::1;:20:::0;32157:4:::1;::::0;31957:212::o;18573:436::-;18666:4;11202:10;18666:4;18749:25;11202:10;18766:7;18749:9;:25::i;:::-;18722:52;;18813:15;18793:16;:35;;18785:85;;;;-1:-1:-1;;;18785:85:0;;15404:2:1;18785:85:0;;;15386:21:1;15443:2;15423:18;;;15416:30;15482:34;15462:18;;;15455:62;-1:-1:-1;;;15533:18:1;;;15526:35;15578:19;;18785:85:0;15202:401:1;18785:85:0;18906:60;18915:5;18922:7;18950:15;18931:16;:34;18906:8;:60::i;15620:193::-;15699:4;11202:10;15755:28;11202:10;15772:2;15776:6;15755:9;:28::i;30370:280::-;11821:6;;30450:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;30514:4:::1;30506;30486:13;15204:12:::0;;;15116:108;30486:13:::1;:17;::::0;30502:1:::1;30486:17;:::i;:::-;:24;;;;:::i;:::-;30485:33;;;;:::i;:::-;30475:6;:43;;30467:100;;;::::0;-1:-1:-1;;;30467:100:0;;12487:2:1;30467:100:0::1;::::0;::::1;12469:21:1::0;12526:2;12506:18;;;12499:30;12565:34;12545:18;;;12538:62;-1:-1:-1;;;12616:18:1;;;12609:32;12658:19;;30467:100:0::1;12285:398:1::0;30467:100:0::1;30603:17;:6:::0;30613::::1;30603:17;:::i;:::-;30580:20;:40:::0;-1:-1:-1;30638:4:0::1;30370:280:::0;;;:::o;30926:203::-;11821:6;;30999:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;31050:15:::1;::::0;31021:45:::1;::::0;-1:-1:-1;;;;;31050:15:0;;::::1;::::0;31021:45;::::1;::::0;::::1;::::0;31050:15:::1;::::0;31021:45:::1;-1:-1:-1::0;31077:15:0::1;:22:::0;;-1:-1:-1;;;;;31077:22:0;::::1;-1:-1:-1::0;;;;;;31077:22:0;;::::1;;::::0;;;30926:203;;;:::o;33912:216::-;11821:6;;33994:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34011:25:0;::::1;;::::0;;;:19:::1;:25;::::0;;;;;;;;:38;;-1:-1:-1;;34011:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34065:33;;4711:41:1;;;34065:33:0::1;::::0;4684:18:1;34065:33:0::1;;;;;;;-1:-1:-1::0;34116:4:0::1;33912:216:::0;;;;:::o;30658:260::-;11821:6;;30733:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;30797:4:::1;30789;30769:13;15204:12:::0;;;15116:108;30769:13:::1;:17;::::0;30785:1:::1;30769:17;:::i;:::-;:24;;;;:::i;:::-;30768:33;;;;:::i;:::-;30758:6;:43;;30750:96;;;::::0;-1:-1:-1;;;30750:96:0;;6553:2:1;30750:96:0::1;::::0;::::1;6535:21:1::0;6592:2;6572:18;;;6565:30;6631:32;6611:18;;;6604:60;6681:18;;30750:96:0::1;6351:354:1::0;30750:96:0::1;30871:17;:6:::0;30881::::1;30871:17;:::i;:::-;30859:9;:29:::0;-1:-1:-1;30906:4:0::1;30658:260:::0;;;:::o;32547:576::-;11821:6;;32743:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;32796:2:::1;32788:4;:10;;:38;;;;;32824:2;32816:4;:10;;32788:38;:66;;;;;32852:2;32844:4;:10;;32788:66;:94;;;;;32880:2;32872:4;:10;;32788:94;32766:161;;;;-1:-1:-1::0;;;32766:161:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;32940:23:0::1;:30:::0;;;;32981:23:::1;:30:::0;;;;33022:23:::1;:30:::0;33063:23:::1;:30:::0;33111:4:::1;::::0;32547:576::o;32177:362::-;11821:6;;32369:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;-1:-1:-1;32392:11:0::1;:21:::0;;;;32424:11:::1;:21:::0;;;;32456:11:::1;:21:::0;32488:11:::1;:21:::0;32527:4:::1;::::0;32177:362::o;29964:394::-;11821:6;;30042:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;30096:6:::1;30076:13;15204:12:::0;;;15116:108;30076:13:::1;:17;::::0;30092:1:::1;30076:17;:::i;:::-;:26;;;;:::i;:::-;30066:6;:36;;30058:112;;;::::0;-1:-1:-1;;;30058:112:0;;6912:2:1;30058:112:0::1;::::0;::::1;6894:21:1::0;6951:2;6931:18;;;6924:30;6990:34;6970:18;;;6963:62;-1:-1:-1;;;7041:18:1;;;7034:51;7102:19;;30058:112:0::1;6710:417:1::0;30058:112:0::1;30220:4;30200:13;15204:12:::0;;;15116:108;30200:13:::1;:17;::::0;30216:1:::1;30200:17;:::i;:::-;:24;;;;:::i;:::-;30190:6;:34;;30182:109;;;::::0;-1:-1:-1;;;30182:109:0;;10450:2:1;30182:109:0::1;::::0;::::1;10432:21:1::0;10489:2;10469:18;;;10462:30;10528:34;10508:18;;;10501:62;-1:-1:-1;;;10579:18:1;;;10572:50;10639:19;;30182:109:0::1;10248:416:1::0;30182:109:0::1;-1:-1:-1::0;30303:18:0::1;:27:::0;30347:4:::1;::::0;29964:394::o;15876:151::-;-1:-1:-1;;;;;15992:18:0;;;15965:7;15992:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15876:151::o;29427:215::-;11821:6;;29487:4;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;29512:14:::1;::::0;;;::::1;;;29504:73;;;::::0;-1:-1:-1;;;29504:73:0;;14519:2:1;29504:73:0::1;::::0;::::1;14501:21:1::0;14558:2;14538:18;;;14531:30;14597:34;14577:18;;;14570:62;-1:-1:-1;;;14648:18:1;;;14641:34;14692:19;;29504:73:0::1;14317:400:1::0;29504:73:0::1;-1:-1:-1::0;29590:14:0::1;:22:::0;;-1:-1:-1;;29590:22:0::1;::::0;;;29427:215;:::o;12657:201::-;11821:6;;-1:-1:-1;;;;;11821:6:0;11202:10;11968:23;11960:68;;;;-1:-1:-1;;;11960:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12746:22:0;::::1;12738:73;;;::::0;-1:-1:-1;;;12738:73:0;;7334:2:1;12738:73:0::1;::::0;::::1;7316:21:1::0;7373:2;7353:18;;;7346:30;7412:34;7392:18;;;7385:62;-1:-1:-1;;;7463:18:1;;;7456:36;7509:19;;12738:73:0::1;7132:402:1::0;12738:73:0::1;12822:28;12841:8;12822:18;:28::i;:::-;12657:201:::0;:::o;22207:380::-;-1:-1:-1;;;;;22343:19:0;;22335:68;;;;-1:-1:-1;;;22335:68:0;;12890:2:1;22335:68:0;;;12872:21:1;12929:2;12909:18;;;12902:30;12968:34;12948:18;;;12941:62;-1:-1:-1;;;13019:18:1;;;13012:34;13063:19;;22335:68:0;12688:400:1;22335:68:0;-1:-1:-1;;;;;22422:21:0;;22414:68;;;;-1:-1:-1;;;22414:68:0;;7741:2:1;22414:68:0;;;7723:21:1;7780:2;7760:18;;;7753:30;7819:34;7799:18;;;7792:62;-1:-1:-1;;;7870:18:1;;;7863:32;7912:19;;22414:68:0;7539:398:1;22414:68:0;-1:-1:-1;;;;;22495:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22547:32;;15754:25:1;;;22547:32:0;;15727:18:1;22547:32:0;;;;;;;22207:380;;;:::o;22878:453::-;23013:24;23040:25;23050:5;23057:7;23040:9;:25::i;:::-;23013:52;;-1:-1:-1;;23080:16:0;:37;23076:248;;23162:6;23142:16;:26;;23134:68;;;;-1:-1:-1;;;23134:68:0;;8495:2:1;23134:68:0;;;8477:21:1;8534:2;8514:18;;;8507:30;8573:31;8553:18;;;8546:59;8622:18;;23134:68:0;8293:353:1;23134:68:0;23246:51;23255:5;23262:7;23290:6;23271:16;:25;23246:8;:51::i;:::-;23002:329;22878:453;;;:::o;34577:4355::-;-1:-1:-1;;;;;34729:18:0;;34721:78;;;;-1:-1:-1;;;34721:78:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34820:16:0;;34812:74;;;;-1:-1:-1;;;34812:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34908:15:0;;;;;;:9;:15;;;;;;;;34907:16;34899:68;;;;-1:-1:-1;;;34899:68:0;;9260:2:1;34899:68:0;;;9242:21:1;9299:2;9279:18;;;9272:30;9338:32;9318:18;;;9311:60;9388:18;;34899:68:0;9058:354:1;34899:68:0;34992:11;34989:92;;35020:28;35036:4;35042:2;35046:1;35020:15;:28::i;:::-;34577:4355;;;:::o;34989:92::-;35105:13;;;;;;;35101:1790;;;11821:6;;-1:-1:-1;;;;;35140:15:0;;;11821:6;;35140:15;;;;:49;;-1:-1:-1;11821:6:0;;-1:-1:-1;;;;;35176:13:0;;;11821:6;;35176:13;;35140:49;:86;;;;-1:-1:-1;;;;;;35210:16:0;;;;35140:86;:128;;;;-1:-1:-1;;;;;;35247:21:0;;35261:6;35247:21;;35140:128;:158;;;;-1:-1:-1;35290:8:0;;;;35289:9;35140:158;35136:1744;;;35363:14;;;;;;;35358:173;;-1:-1:-1;;;;;35410:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;35439:23:0;;;;;;:19;:23;;;;;;;;35410:52;35402:109;;;;-1:-1:-1;;;35402:109:0;;8144:2:1;35402:109:0;;;8126:21:1;8183:2;8163:18;;;8156:30;-1:-1:-1;;;8202:18:1;;;8195:52;8264:18;;35402:109:0;7942:346:1;35402:109:0;35555:14;;;;;;;35551:423;;;11821:6;;-1:-1:-1;;;;;35598:13:0;;;11821:6;;35598:13;;;;:47;;;35629:15;-1:-1:-1;;;;;35615:30:0;:2;-1:-1:-1;;;;;35615:30:0;;;35598:47;:79;;;;-1:-1:-1;35663:13:0;;-1:-1:-1;;;;;35649:28:0;;;35663:13;;35649:28;;35598:79;35594:361;;;35730:9;35714:26;;;;:15;:26;;;;;;35743:12;-1:-1:-1;35706:151:0;;;;-1:-1:-1;;;35706:151:0;;14924:2:1;35706:151:0;;;14906:21:1;14963:2;14943:18;;;14936:30;15002:34;14982:18;;;14975:62;15073:34;15053:18;;;15046:62;-1:-1:-1;;;15124:19:1;;;15117:38;15172:19;;35706:151:0;14722:475:1;35706:151:0;35906:9;35890:26;;;;:15;:26;;;;;35919:12;35890:41;;35594:361;-1:-1:-1;;;;;36015:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;36051:35:0;;;;;;:31;:35;;;;;;;;36050:36;36015:71;36011:854;;;36133:20;;36123:6;:30;;36115:124;;;;-1:-1:-1;;;36115:124:0;;10871:2:1;36115:124:0;;;10853:21:1;10910:2;10890:18;;;10883:30;10949:34;10929:18;;;10922:62;11020:25;11000:18;;;10993:53;11063:19;;36115:124:0;10669:419:1;36115:124:0;36300:9;;-1:-1:-1;;;;;15388:18:0;;15361:7;15388:18;;;;;;;;;;;36274:22;;:6;:22;:::i;:::-;:35;;36266:93;;;;-1:-1:-1;;;36266:93:0;;6205:2:1;36266:93:0;;;6187:21:1;6244:2;6224:18;;;6217:30;-1:-1:-1;;;6263:18:1;;;6256:49;6322:18;;36266:93:0;6003:343:1;36266:93:0;36011:854;;;-1:-1:-1;;;;;36424:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;36458:37:0;;;;;;:31;:37;;;;;;;;36457:38;36424:71;36420:445;;;36542:20;;36532:6;:30;;36524:125;;;;-1:-1:-1;;;36524:125:0;;11656:2:1;36524:125:0;;;11638:21:1;11695:2;11675:18;;;11668:30;11734:34;11714:18;;;11707:62;11805:26;11785:18;;;11778:54;11849:19;;36524:125:0;11454:420:1;36420:445:0;-1:-1:-1;;;;;36697:35:0;;;;;;:31;:35;;;;;;;;36692:173;;36790:9;;-1:-1:-1;;;;;15388:18:0;;15361:7;15388:18;;;;;;;;;;;36764:22;;:6;:22;:::i;:::-;:35;;36756:89;;;;-1:-1:-1;;;36756:89:0;;6205:2:1;36756:89:0;;;6187:21:1;6244:2;6224:18;;;6217:30;-1:-1:-1;;;6263:18:1;;;6256:49;6322:18;;36756:89:0;6003:343:1;36756:89:0;36954:4;36905:28;15388:18;;;;;;;;;;;37010;;36986:42;;;;;;;37045:35;;-1:-1:-1;37069:11:0;;;;37045:35;:61;;;;-1:-1:-1;37098:8:0;;;;37097:9;37045:61;:110;;;;-1:-1:-1;;;;;;37124:31:0;;;;;;:25;:31;;;;;;;;37123:32;37045:110;:153;;;;-1:-1:-1;;;;;;37173:25:0;;;;;;:19;:25;;;;;;;;37172:26;37045:153;:194;;;;-1:-1:-1;;;;;;37216:23:0;;;;;;:19;:23;;;;;;;;37215:24;37045:194;37041:315;;;37266:8;:15;;-1:-1:-1;;37266:15:0;37277:4;37266:15;;;37303:10;:8;:10::i;:::-;37328:8;:16;;-1:-1:-1;;37328:16:0;;;37041:315;37384:8;;-1:-1:-1;;;;;37409:25:0;;37368:12;37409:25;;;:19;:25;;;;;;37384:8;;;;37383:9;;37409:25;;:52;;-1:-1:-1;;;;;;37438:23:0;;;;;;:19;:23;;;;;;;;37409:52;37405:100;;;-1:-1:-1;37488:5:0;37405:100;37525:12;37558:7;37554:1325;;;-1:-1:-1;;;;;37611:29:0;;;;;;:25;:29;;;;;;;;37607:650;;;37686:21;37731:27;37782;37851:24;37870:4;37851:18;:24::i;:::-;37663:212;;-1:-1:-1;37663:212:0;-1:-1:-1;37663:212:0;-1:-1:-1;37928:3:0;37903:22;37663:212;37903:6;:22;:::i;:::-;:28;;;;:::i;:::-;37896:35;-1:-1:-1;38001:13:0;37972:26;37979:19;37896:35;37972:26;:::i;:::-;:42;;;;:::i;:::-;37950:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;38084:13:0;;-1:-1:-1;38055:26:0;38062:19;38055:4;:26;:::i;:::-;:42;;;;:::i;:::-;38033:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;38143:14:0;;38160:13;;38136:21;;:4;:21;:::i;:::-;:37;;;;:::i;:::-;38116:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;38215:10:0;;38228:13;;38208:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;38192:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;37607:650:0;-1:-1:-1;;;;;38297:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;38347:1;38332:12;;:16;38297:51;38293:416;;;38399:3;38384:12;;38375:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;38368:34;;38447:14;;38440:4;:21;;;;:::i;:::-;38418:18;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;;38507:14:0;;38500:21;;:4;:21;:::i;:::-;38480:16;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;;38569:14:0;;38562:21;;:4;:21;:::i;:::-;38540:18;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;;38625:14:0;;38618:21;;:4;:21;:::i;:::-;38602:12;;:37;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;38658:17:0;;;;;;:13;:17;;;;;38678:15;38658:35;;38293:416;38741:8;;38737:94;;38773:42;38789:4;38803;38810;38773:15;:42::i;:::-;38853:14;38863:4;38853:14;;:::i;:::-;;;37554:1325;38891:33;38907:4;38913:2;38917:6;38891:15;:33::i;:::-;34710:4222;;;;34577:4355;;;:::o;13018:191::-;13111:6;;;-1:-1:-1;;;;;13128:17:0;;;-1:-1:-1;;;;;;13128:17:0;;;;;;;13161:40;;13111:6;;;13128:17;13111:6;;13161:40;;13092:16;;13161:40;13081:128;13018:191;:::o;38940:189::-;-1:-1:-1;;;;;39024:31:0;;;;;;:25;:31;;;;;;:40;;-1:-1:-1;;39024:40:0;;;;;;;;;;39080:41;;39024:40;;:31;39080:41;;;38940:189;;:::o;19488:671::-;-1:-1:-1;;;;;19619:18:0;;19611:68;;;;-1:-1:-1;;;19611:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19698:16:0;;19690:64;;;;-1:-1:-1;;;19690:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19840:15:0;;19818:19;19840:15;;;;;;;;;;;19874:21;;;;19866:72;;;;-1:-1:-1;;;19866:72:0;;8853:2:1;19866:72:0;;;8835:21:1;8892:2;8872:18;;;8865:30;8931:34;8911:18;;;8904:62;-1:-1:-1;;;8982:18:1;;;8975:36;9028:19;;19866:72:0;8651:402:1;19866:72:0;-1:-1:-1;;;;;19974:15:0;;;:9;:15;;;;;;;;;;;19992:20;;;19974:38;;20034:13;;;;;;;;:23;;20006:6;;19974:9;20034:23;;20006:6;;20034:23;:::i;:::-;;;;;;;;20090:2;-1:-1:-1;;;;;20075:26:0;20084:4;-1:-1:-1;;;;;20075:26:0;;20094:6;20075:26;;;;15754:25:1;;15742:2;15727:18;;15608:177;20075:26:0;;;;;;;;20114:37;34577:4355;40125:2035;40208:4;40164:23;15388:18;;;;;;;;;;;40164:50;;40227:20;40378:12;;40345:16;;40310:18;;40275;;:53;;;;:::i;:::-;:86;;;;:::i;:::-;:115;;;;:::i;:::-;40227:174;-1:-1:-1;40414:12:0;40451:20;;;:41;;-1:-1:-1;40475:17:0;;40451:41;40447:58;;;40496:7;;;40125:2035::o;40447:58::-;40539:18;;:23;;40560:2;40539:23;:::i;:::-;40521:15;:41;40517:114;;;40596:18;;:23;;40617:2;40596:23;:::i;:::-;40578:41;;40517:114;40651:23;40731:1;40716:12;40695:18;;40677:15;:36;;;;:::i;:::-;:51;;;;:::i;:::-;:55;;;;:::i;:::-;40651:81;-1:-1:-1;40743:26:0;40772:33;40651:81;40772:15;:33;:::i;:::-;40743:62;-1:-1:-1;40854:21:0;40888:37;40743:62;40888:17;:37::i;:::-;40947:18;40968:41;40992:17;40968:21;:41;:::i;:::-;40947:62;;41030:23;41090:12;41069:18;;41056:10;:31;;;;:::i;:::-;:46;;;;:::i;:::-;41030:72;;41113:21;41169:12;41150:16;;41137:10;:29;;;;:::i;:::-;:44;;;;:::i;:::-;41113:68;;41193:17;41241:12;41226;;41213:10;:25;;;;:::i;:::-;:40;;;;:::i;:::-;41193:60;-1:-1:-1;41274:23:0;41193:60;41384:13;41325:42;41352:15;41325:10;:42;:::i;:::-;:72;;;;:::i;:::-;:98;;;;:::i;:::-;41455:25;41462:18;41455:25;;;41498:18;41491:25;;;41534:16;41527:23;;;41568:12;41561:19;;;41622:13;;41614:53;;41274:160;;-1:-1:-1;;;;;;41622:13:0;;41649;;41614:53;41455:25;41614:53;41649:13;41622;41614:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41699:9:0;;41691:45;;41601:66;;-1:-1:-1;;;;;;41699:9:0;;41722;;41691:45;;;;41722:9;41699;41691:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41678:58:0;;-1:-1:-1;;41761:19:0;;;;;:42;;;41802:1;41784:15;:19;41761:42;41757:299;;;41820:47;41834:15;41851;41820:13;:47::i;:::-;42007:18;;;41901:143;;;16977:25:1;;;17018:18;;;17011:34;;;17061:18;;17054:34;41901:143:0;;16965:2:1;16950:18;41901:143:0;;;;;;;41757:299;42097:15;;42089:63;;-1:-1:-1;;;;;42097:15:0;;;;42126:21;;42089:63;;;;42126:21;42097:15;42089:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;40125:2035:0:o;39137:514::-;39230:16;;;39244:1;39230:16;;;;;;;;39206:21;;39230:16;;;;;;;;;;-1:-1:-1;39230:16:0;39206:40;;39275:4;39257;39262:1;39257:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;39257:23:0;;;-1:-1:-1;;;;;39257:23:0;;;;;39301:15;-1:-1:-1;;;;;39301:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39291:4;39296:1;39291:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;39291:32:0;;;-1:-1:-1;;;;;39291:32:0;;;;;39336:62;39353:4;39368:15;39386:11;39336:8;:62::i;:::-;39436:197;;-1:-1:-1;;;39436:197:0;;-1:-1:-1;;;;;39436:15:0;:66;;;;:197;;39517:11;;39543:1;;39560:4;;39587;;39607:15;;39436:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39193:458;39137:514;:::o;39663:454::-;39745:62;39762:4;39777:15;39795:11;39745:8;:62::i;:::-;39849:260;;-1:-1:-1;;;39849:260:0;;39921:4;39849:260;;;4300:34:1;4350:18;;;4343:34;;;39967:1:0;4393:18:1;;;4386:34;;;4436:18;;;4429:34;40061:6:0;4479:19:1;;;4472:44;40083:15:0;4532:19:1;;;4525:35;39849:15:0;-1:-1:-1;;;;;39849:31:0;;;;39888:9;;4234:19:1;;39849:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39663:454;;:::o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;179:247;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;:::-;415:5;179:247;-1:-1:-1;;;179:247:1:o;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1606:6;1614;1667:2;1655:9;1646:7;1642:23;1638:32;1635:52;;;1683:1;1680;1673:12;1635:52;1722:9;1709:23;1741:31;1766:5;1741:31;:::i;:::-;1791:5;-1:-1:-1;1815:35:1;1846:2;1831:18;;1815:35;:::i;:::-;1805:45;;1541:315;;;;;:::o;1861:::-;1929:6;1937;1990:2;1978:9;1969:7;1965:23;1961:32;1958:52;;;2006:1;2003;1996:12;1958:52;2045:9;2032:23;2064:31;2089:5;2064:31;:::i;:::-;2114:5;2166:2;2151:18;;;;2138:32;;-1:-1:-1;;;1861:315:1:o;2181:180::-;2237:6;2290:2;2278:9;2269:7;2265:23;2261:32;2258:52;;;2306:1;2303;2296:12;2258:52;2329:26;2345:9;2329:26;:::i;2366:180::-;2425:6;2478:2;2466:9;2457:7;2453:23;2449:32;2446:52;;;2494:1;2491;2484:12;2446:52;-1:-1:-1;2517:23:1;;2366:180;-1:-1:-1;2366:180:1:o;2551:306::-;2639:6;2647;2655;2708:2;2696:9;2687:7;2683:23;2679:32;2676:52;;;2724:1;2721;2714:12;2676:52;2753:9;2747:16;2737:26;;2803:2;2792:9;2788:18;2782:25;2772:35;;2847:2;2836:9;2832:18;2826:25;2816:35;;2551:306;;;;;:::o;2862:385::-;2948:6;2956;2964;2972;3025:3;3013:9;3004:7;3000:23;2996:33;2993:53;;;3042:1;3039;3032:12;2993:53;-1:-1:-1;;3065:23:1;;;3135:2;3120:18;;3107:32;;-1:-1:-1;3186:2:1;3171:18;;3158:32;;3237:2;3222:18;3209:32;;-1:-1:-1;2862:385:1;-1:-1:-1;2862:385:1:o;4997:597::-;5109:4;5138:2;5167;5156:9;5149:21;5199:6;5193:13;5242:6;5237:2;5226:9;5222:18;5215:34;5267:1;5277:140;5291:6;5288:1;5285:13;5277:140;;;5386:14;;;5382:23;;5376:30;5352:17;;;5371:2;5348:26;5341:66;5306:10;;5277:140;;;5435:6;5432:1;5429:13;5426:91;;;5505:1;5500:2;5491:6;5480:9;5476:22;5472:31;5465:42;5426:91;-1:-1:-1;5578:2:1;5557:15;-1:-1:-1;;5553:29:1;5538:45;;;;5585:2;5534:54;;4997:597;-1:-1:-1;;;4997:597:1:o;5599:399::-;5801:2;5783:21;;;5840:2;5820:18;;;5813:30;5879:34;5874:2;5859:18;;5852:62;-1:-1:-1;;;5945:2:1;5930:18;;5923:33;5988:3;5973:19;;5599:399::o;9417:351::-;9619:2;9601:21;;;9658:2;9638:18;;;9631:30;9697:29;9692:2;9677:18;;9670:57;9759:2;9744:18;;9417:351::o;11093:356::-;11295:2;11277:21;;;11314:18;;;11307:30;11373:34;11368:2;11353:18;;11346:62;11440:2;11425:18;;11093:356::o;11879:401::-;12081:2;12063:21;;;12120:2;12100:18;;;12093:30;12159:34;12154:2;12139:18;;12132:62;-1:-1:-1;;;12225:2:1;12210:18;;12203:35;12270:3;12255:19;;11879:401::o;15790:980::-;16052:4;16100:3;16089:9;16085:19;16131:6;16120:9;16113:25;16157:2;16195:6;16190:2;16179:9;16175:18;16168:34;16238:3;16233:2;16222:9;16218:18;16211:31;16262:6;16297;16291:13;16328:6;16320;16313:22;16366:3;16355:9;16351:19;16344:26;;16405:2;16397:6;16393:15;16379:29;;16426:1;16436:195;16450:6;16447:1;16444:13;16436:195;;;16515:13;;-1:-1:-1;;;;;16511:39:1;16499:52;;16606:15;;;;16571:12;;;;16547:1;16465:9;16436:195;;;-1:-1:-1;;;;;;;16687:32:1;;;;16682:2;16667:18;;16660:60;-1:-1:-1;;;16751:3:1;16736:19;16729:35;16648:3;15790:980;-1:-1:-1;;;15790:980:1:o;17288:128::-;17328:3;17359:1;17355:6;17352:1;17349:13;17346:39;;;17365:18;;:::i;:::-;-1:-1:-1;17401:9:1;;17288:128::o;17421:217::-;17461:1;17487;17477:132;;17531:10;17526:3;17522:20;17519:1;17512:31;17566:4;17563:1;17556:15;17594:4;17591:1;17584:15;17477:132;-1:-1:-1;17623:9:1;;17421:217::o;17643:168::-;17683:7;17749:1;17745;17741:6;17737:14;17734:1;17731:21;17726:1;17719:9;17712:17;17708:45;17705:71;;;17756:18;;:::i;:::-;-1:-1:-1;17796:9:1;;17643:168::o;17816:125::-;17856:4;17884:1;17881;17878:8;17875:34;;;17889:18;;:::i;:::-;-1:-1:-1;17926:9:1;;17816:125::o;17946:380::-;18025:1;18021:12;;;;18068;;;18089:61;;18143:4;18135:6;18131:17;18121:27;;18089:61;18196:2;18188:6;18185:14;18165:18;18162:38;18159:161;;;18242:10;18237:3;18233:20;18230:1;18223:31;18277:4;18274:1;18267:15;18305:4;18302:1;18295:15;18159:161;;17946:380;;;:::o;18331:127::-;18392:10;18387:3;18383:20;18380:1;18373:31;18423:4;18420:1;18413:15;18447:4;18444:1;18437:15;18463:127;18524:10;18519:3;18515:20;18512:1;18505:31;18555:4;18552:1;18545:15;18579:4;18576:1;18569:15;18727:131;-1:-1:-1;;;;;18802:31:1;;18792:42;;18782:70;;18848:1;18845;18838:12

Swarm Source

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