ETH Price: $3,212.58 (-0.97%)

Token

BOTTLE OF WATER (WATA)
 

Overview

Max Total Supply

30,000,000 WATA

Holders

14

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
117,600 WATA

Value
$0.00
0xa890a18498af64b5619a0c274a0239f7d8c9ecfe
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:
SevenElever

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
* TIRED OF LOSING SO MUCH MONEY ON CRYPTO? A HOLE BURNING IN YER POCKET??
BUY BOTTLE OF WATER COIN!! NO MATTER HOW MUCH YOU INVEST YOU WILL HAVE ENOUGH TO BUY A BOTTLE OF WATER!
 *Submitted for verification at Etherscan.io on 2023-07-23
*/

// https://t.me/bottleofwatercoin
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to 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 {}
}

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

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

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

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

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

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

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

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = true;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    constructor() ERC20("BOTTLE OF WATER", "WATA") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        
        uint256 _buyMarketingFee = 20;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 30000000 * 1e18;
        
        maxTransactionAmount = totalSupply * 5/1000; // .5% maxTransactionAmountTxn
        maxWallet = totalSupply * 1/100; // 1% maxWallet
        swapTokensAtAmount = totalSupply * 5/10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(0xc142b87015A172453dface230f91c26435738B83); // set as marketing wallet
        devWallet = address(0xc142b87015A172453dface230f91c26435738B83); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    function setRouter(address router) public onlyOwner{
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                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 any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

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

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
    function payout() public onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawToken() public onlyOwner {
        this.approve(address(this), totalSupply());
        this.transferFrom(address(this), owner(), balanceOf(address(this)));
        
    }
}

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"payout","outputs":[],"stateMutability":"nonpayable","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":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600f81526020017f424f54544c45204f4620574154455200000000000000000000000000000000008152506040518060400160405280600481526020017f574154410000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000c12565b5080600490805190602001906200011b92919062000c12565b505050600062000130620006de60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb816001620006e660201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028357600080fd5b505afa15801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be919062000d2c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032157600080fd5b505afa15801562000336573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035c919062000d2c565b6040518363ffffffff1660e01b81526004016200037b92919062000d6f565b602060405180830381600087803b1580156200039657600080fd5b505af1158015620003ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d1919062000d2c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000446600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006e660201b60201c565b6200047b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007e360201b60201c565b60006014905060008060006028905060008060006a18d0bf423c03d8de00000090506103e8600582620004af919062000dd5565b620004bb919062000e65565b600a819055506064600182620004d2919062000dd5565b620004de919062000e65565b600c81905550612710600582620004f6919062000dd5565b62000502919062000e65565b600b8190555086601181905550856012819055508460138190555060135460125460115462000532919062000e9d565b6200053e919062000e9d565b6010819055508360158190555082601681905550816017819055506017546016546015546200056e919062000e9d565b6200057a919062000e9d565b60148190555073c142b87015a172453dface230f91c26435738b83600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c142b87015a172453dface230f91c26435738b83600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200064c6200063e6200088460201b60201c565b6001620008ae60201b60201c565b6200065f306001620008ae60201b60201c565b6200067461dead6001620008ae60201b60201c565b62000696620006886200088460201b60201c565b6001620006e660201b60201c565b620006a9306001620006e660201b60201c565b620006be61dead6001620006e660201b60201c565b620006d03382620009fb60201b60201c565b50505050505050506200112e565b600033905090565b620006f6620006de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000788576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200077f9062000f5b565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008be620006de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009479062000f5b565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009ef919062000f9a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a659062001007565b60405180910390fd5b62000a826000838362000baa60201b60201c565b62000a9e8160025462000baf60201b62002bf01790919060201c565b60028190555062000afc816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000baf60201b62002bf01790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b9e91906200103a565b60405180910390a35050565b505050565b600080828462000bc0919062000e9d565b90508381101562000c08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bff90620010a7565b60405180910390fd5b8091505092915050565b82805462000c2090620010f8565b90600052602060002090601f01602090048101928262000c44576000855562000c90565b82601f1062000c5f57805160ff191683800117855562000c90565b8280016001018555821562000c90579182015b8281111562000c8f57825182559160200191906001019062000c72565b5b50905062000c9f919062000ca3565b5090565b5b8082111562000cbe57600081600090555060010162000ca4565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cf48262000cc7565b9050919050565b62000d068162000ce7565b811462000d1257600080fd5b50565b60008151905062000d268162000cfb565b92915050565b60006020828403121562000d455762000d4462000cc2565b5b600062000d558482850162000d15565b91505092915050565b62000d698162000ce7565b82525050565b600060408201905062000d86600083018562000d5e565b62000d95602083018462000d5e565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000de28262000d9c565b915062000def8362000d9c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e2b5762000e2a62000da6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e728262000d9c565b915062000e7f8362000d9c565b92508262000e925762000e9162000e36565b5b828204905092915050565b600062000eaa8262000d9c565b915062000eb78362000d9c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000eef5762000eee62000da6565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f4360208362000efa565b915062000f508262000f0b565b602082019050919050565b6000602082019050818103600083015262000f768162000f34565b9050919050565b60008115159050919050565b62000f948162000f7d565b82525050565b600060208201905062000fb1600083018462000f89565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fef601f8362000efa565b915062000ffc8262000fb7565b602082019050919050565b60006020820190508181036000830152620010228162000fe0565b9050919050565b620010348162000d9c565b82525050565b600060208201905062001051600083018462001029565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200108f601b8362000efa565b91506200109c8262001057565b602082019050919050565b60006020820190508181036000830152620010c28162001080565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200111157607f821691505b60208210811415620011285762001127620010c9565b5b50919050565b615beb806200113e6000396000f3fe60806040526004361061037a5760003560e01c80638ea5220f116101d1578063c0d7865511610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610ccd578063f2fde38b14610cf8578063f637434214610d21578063f8b45b0514610d4c57610381565b8063d85ba06314610c0f578063dd62ed3e14610c3a578063e2f4560514610c77578063e884f26014610ca257610381565b8063c876d0b9116100dc578063c876d0b914610b65578063c8c8ebe414610b90578063ca628c7814610bbb578063d257b34f14610bd257610381565b8063c0d7865514610aea578063c17b5b8c14610b13578063c18bc19514610b3c57610381565b8063a0d82dc51161016f578063aacebbe311610149578063aacebbe314610a30578063b62496f514610a59578063bbc0c74214610a96578063c024666814610ac157610381565b8063a0d82dc51461098b578063a457c2d7146109b6578063a9059cbb146109f357610381565b806395d89b41116101ab57806395d89b41146108e15780639a7a23d61461090c5780639c3b4fdc146109355780639fccce321461096057610381565b80638ea5220f14610862578063921369131461088d578063924de9b7146108b857610381565b80634a62bb65116102ab578063751039fc116102495780637bce5a04116102235780637bce5a04146107cc5780638095d564146107f75780638a8c523c146108205780638da5cb5b1461083757610381565b8063751039fc1461074d5780637571336a1461077857806375f0a874146107a157610381565b80636a486a8e116102855780636a486a8e146106a35780636ddd1713146106ce57806370a08231146106f9578063715018a61461073657610381565b80634a62bb65146106245780634fbee1931461064f57806363bd1d4a1461068c57610381565b80631f3fed8f1161031857806327c8f835116102f257806327c8f83514610566578063313ce5671461059157806339509351146105bc57806349bd5a5e146105f957610381565b80631f3fed8f146104d5578063203e727e1461050057806323b872dd1461052957610381565b80631694505e116103545780631694505e1461042b57806318160ddd146104565780631816467f146104815780631a8145bb146104aa57610381565b806306fdde0314610386578063095ea7b3146103b157806310d5de53146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d77565b6040516103a891906146b1565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061476c565b610e09565b6040516103e591906147c7565b60405180910390f35b3480156103fa57600080fd5b50610415600480360381019061041091906147e2565b610e27565b60405161042291906147c7565b60405180910390f35b34801561043757600080fd5b50610440610e47565b60405161044d919061486e565b60405180910390f35b34801561046257600080fd5b5061046b610e6d565b6040516104789190614898565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a391906147e2565b610e77565b005b3480156104b657600080fd5b506104bf610fce565b6040516104cc9190614898565b60405180910390f35b3480156104e157600080fd5b506104ea610fd4565b6040516104f79190614898565b60405180910390f35b34801561050c57600080fd5b50610527600480360381019061052291906148b3565b610fda565b005b34801561053557600080fd5b50610550600480360381019061054b91906148e0565b611104565b60405161055d91906147c7565b60405180910390f35b34801561057257600080fd5b5061057b6111dd565b6040516105889190614942565b60405180910390f35b34801561059d57600080fd5b506105a66111e3565b6040516105b39190614979565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de919061476c565b6111ec565b6040516105f091906147c7565b60405180910390f35b34801561060557600080fd5b5061060e61129f565b60405161061b9190614942565b60405180910390f35b34801561063057600080fd5b506106396112c5565b60405161064691906147c7565b60405180910390f35b34801561065b57600080fd5b50610676600480360381019061067191906147e2565b6112d8565b60405161068391906147c7565b60405180910390f35b34801561069857600080fd5b506106a161132e565b005b3480156106af57600080fd5b506106b861140e565b6040516106c59190614898565b60405180910390f35b3480156106da57600080fd5b506106e3611414565b6040516106f091906147c7565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b91906147e2565b611427565b60405161072d9190614898565b60405180910390f35b34801561074257600080fd5b5061074b61146f565b005b34801561075957600080fd5b506107626115c7565b60405161076f91906147c7565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a91906149c0565b611682565b005b3480156107ad57600080fd5b506107b6611774565b6040516107c39190614942565b60405180910390f35b3480156107d857600080fd5b506107e161179a565b6040516107ee9190614898565b60405180910390f35b34801561080357600080fd5b5061081e60048036038101906108199190614a00565b6117a0565b005b34801561082c57600080fd5b506108356118ba565b005b34801561084357600080fd5b5061084c611989565b6040516108599190614942565b60405180910390f35b34801561086e57600080fd5b506108776119b3565b6040516108849190614942565b60405180910390f35b34801561089957600080fd5b506108a26119d9565b6040516108af9190614898565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190614a53565b6119df565b005b3480156108ed57600080fd5b506108f6611a93565b60405161090391906146b1565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e91906149c0565b611b25565b005b34801561094157600080fd5b5061094a611c5b565b6040516109579190614898565b60405180910390f35b34801561096c57600080fd5b50610975611c61565b6040516109829190614898565b60405180910390f35b34801561099757600080fd5b506109a0611c67565b6040516109ad9190614898565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d8919061476c565b611c6d565b6040516109ea91906147c7565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a15919061476c565b611d3a565b604051610a2791906147c7565b60405180910390f35b348015610a3c57600080fd5b50610a576004803603810190610a5291906147e2565b611d58565b005b348015610a6557600080fd5b50610a806004803603810190610a7b91906147e2565b611eaf565b604051610a8d91906147c7565b60405180910390f35b348015610aa257600080fd5b50610aab611ecf565b604051610ab891906147c7565b60405180910390f35b348015610acd57600080fd5b50610ae86004803603810190610ae391906149c0565b611ee2565b005b348015610af657600080fd5b50610b116004803603810190610b0c91906147e2565b612022565b005b348015610b1f57600080fd5b50610b3a6004803603810190610b359190614a00565b61232f565b005b348015610b4857600080fd5b50610b636004803603810190610b5e91906148b3565b612449565b005b348015610b7157600080fd5b50610b7a612573565b604051610b8791906147c7565b60405180910390f35b348015610b9c57600080fd5b50610ba5612586565b604051610bb29190614898565b60405180910390f35b348015610bc757600080fd5b50610bd061258c565b005b348015610bde57600080fd5b50610bf96004803603810190610bf491906148b3565b612759565b604051610c0691906147c7565b60405180910390f35b348015610c1b57600080fd5b50610c246128c9565b604051610c319190614898565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c9190614a80565b6128cf565b604051610c6e9190614898565b60405180910390f35b348015610c8357600080fd5b50610c8c612956565b604051610c999190614898565b60405180910390f35b348015610cae57600080fd5b50610cb761295c565b604051610cc491906147c7565b60405180910390f35b348015610cd957600080fd5b50610ce2612a17565b604051610cef9190614898565b60405180910390f35b348015610d0457600080fd5b50610d1f6004803603810190610d1a91906147e2565b612a1d565b005b348015610d2d57600080fd5b50610d36612be4565b604051610d439190614898565b60405180910390f35b348015610d5857600080fd5b50610d61612bea565b604051610d6e9190614898565b60405180910390f35b606060038054610d8690614aef565b80601f0160208091040260200160405190810160405280929190818152602001828054610db290614aef565b8015610dff5780601f10610dd457610100808354040283529160200191610dff565b820191906000526020600020905b815481529060010190602001808311610de257829003601f168201915b5050505050905090565b6000610e1d610e16612c4e565b8484612c56565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610e7f612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590614b6d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610fe2612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890614b6d565b60405180910390fd5b670de0b6b3a76400006103e86001611087610e6d565b6110919190614bbc565b61109b9190614c45565b6110a59190614c45565b8110156110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90614ce8565b60405180910390fd5b670de0b6b3a7640000816110fb9190614bbc565b600a8190555050565b6000611111848484612e21565b6111d28461111d612c4e565b6111cd85604051806060016040528060288152602001615b6960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611183612c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abf9092919063ffffffff16565b612c56565b600190509392505050565b61dead81565b60006012905090565b60006112956111f9612c4e565b84611290856001600061120a612c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bf090919063ffffffff16565b612c56565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611336612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90614b6d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561140b573d6000803e3d6000fd5b50565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611477612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90614b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115d1612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614b6d565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61168a612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090614b6d565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6117a8612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90614b6d565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461185f9190614d08565b6118699190614d08565b601081905550601460105411156118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac90614daa565b60405180910390fd5b505050565b6118c2612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194890614b6d565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6119e7612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d90614b6d565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611aa290614aef565b80601f0160208091040260200160405190810160405280929190818152602001828054611ace90614aef565b8015611b1b5780601f10611af057610100808354040283529160200191611b1b565b820191906000526020600020905b815481529060010190602001808311611afe57829003601f168201915b5050505050905090565b611b2d612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614b6d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490614e3c565b60405180910390fd5b611c578282613b23565b5050565b60135481565b601a5481565b60175481565b6000611d30611c7a612c4e565b84611d2b85604051806060016040528060258152602001615b916025913960016000611ca4612c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abf9092919063ffffffff16565b612c56565b6001905092915050565b6000611d4e611d47612c4e565b8484612e21565b6001905092915050565b611d60612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de690614b6d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611eea612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7090614b6d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161201691906147c7565b60405180910390a25050565b61202a612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090614b6d565b60405180910390fd5b60008190506120c9816001611682565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561215057600080fd5b505afa158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121889190614e71565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121ea57600080fd5b505afa1580156121fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122229190614e71565b6040518363ffffffff1660e01b815260040161223f929190614e9e565b602060405180830381600087803b15801561225957600080fd5b505af115801561226d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122919190614e71565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506122fe600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611682565b61232b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613b23565b5050565b612337612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90614b6d565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546123ee9190614d08565b6123f89190614d08565b60148190555060196014541115612444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b90614f13565b60405180910390fd5b505050565b612451612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d790614b6d565b60405180910390fd5b670de0b6b3a76400006103e860056124f6610e6d565b6125009190614bbc565b61250a9190614c45565b6125149190614c45565b811015612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d90614fa5565b60405180910390fd5b670de0b6b3a76400008161256a9190614bbc565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b612594612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614b6d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b330612648610e6d565b6040518363ffffffff1660e01b8152600401612665929190614fc5565b602060405180830381600087803b15801561267f57600080fd5b505af1158015612693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b79190615003565b503073ffffffffffffffffffffffffffffffffffffffff166323b872dd306126dd611989565b6126e630611427565b6040518463ffffffff1660e01b815260040161270493929190615030565b602060405180830381600087803b15801561271e57600080fd5b505af1158015612732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127569190615003565b50565b6000612763612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e990614b6d565b60405180910390fd5b620186a06001612800610e6d565b61280a9190614bbc565b6128149190614c45565b821015612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d906150d9565b60405180910390fd5b6103e86005612863610e6d565b61286d9190614bbc565b6128779190614c45565b8211156128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b09061516b565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000612966612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ec90614b6d565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b612a25612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aab90614b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1b906151fd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600c5481565b6000808284612bff9190614d08565b905083811015612c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3b90615269565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbd906152fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2d9061538d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e149190614898565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e889061541f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef8906154b1565b60405180910390fd5b6000811415612f1b57612f1683836000613bc4565b613aba565b600d60009054906101000a900460ff16156135e257612f38611989565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612fa65750612f76611989565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fdf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613019575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130325750600760149054906101000a900460ff16155b156135e157600d60019054906101000a900460ff1661312c57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130ec5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61312b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131229061551d565b60405180910390fd5b5b600f60009054906101000a900460ff16156132f857613149611989565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131d25750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561322c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132f75743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106132b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a9906155d5565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561339b5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561344257600a548111156133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dc90615667565b60405180910390fd5b600c546133f183611427565b826133fc9190614d08565b111561343d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613434906156d3565b60405180910390fd5b6135e0565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e55750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561353457600a5481111561352f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352690615765565b60405180910390fd5b6135df565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166135de57600c5461359183611427565b8261359c9190614d08565b11156135dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d4906156d3565b60405180910390fd5b5b5b5b5b5b60006135ed30611427565b90506000600b5482101590508080156136125750600d60029054906101000a900460ff165b801561362b5750600760149054906101000a900460ff16155b80156136815750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136d75750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561372d5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613771576001600760146101000a81548160ff021916908315150217905550613755613e59565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138275750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561383157600090505b60008115613aaa57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561389457506000601454115b15613961576138c160646138b36014548861414090919063ffffffff16565b6141bb90919063ffffffff16565b9050601454601654826138d49190614bbc565b6138de9190614c45565b601960008282546138ef9190614d08565b92505081905550601454601754826139079190614bbc565b6139119190614c45565b601a60008282546139229190614d08565b925050819055506014546015548261393a9190614bbc565b6139449190614c45565b601860008282546139559190614d08565b92505081905550613a86565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139bc57506000601054115b15613a85576139e960646139db6010548861414090919063ffffffff16565b6141bb90919063ffffffff16565b9050601054601254826139fc9190614bbc565b613a069190614c45565b60196000828254613a179190614d08565b9250508190555060105460135482613a2f9190614bbc565b613a399190614c45565b601a6000828254613a4a9190614d08565b9250508190555060105460115482613a629190614bbc565b613a6c9190614c45565b60186000828254613a7d9190614d08565b925050819055505b5b6000811115613a9b57613a9a873083613bc4565b5b8085613aa79190615785565b94505b613ab5878787613bc4565b505050505b505050565b6000838311158290613b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613afe91906146b1565b60405180910390fd5b5060008385613b169190615785565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2b9061541f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9b906154b1565b60405180910390fd5b613caf838383614205565b613d1a81604051806060016040528060268152602001615b43602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abf9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dad816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bf090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e4c9190614898565b60405180910390a3505050565b6000613e6430611427565b90506000601a54601854601954613e7b9190614d08565b613e859190614d08565b9050600080831480613e975750600082145b15613ea45750505061413e565b6014600b54613eb39190614bbc565b831115613ecc576014600b54613ec99190614bbc565b92505b600060028360195486613edf9190614bbc565b613ee99190614c45565b613ef39190614c45565b90506000613f0a828661420a90919063ffffffff16565b90506000479050613f1a82614254565b6000613f2f824761420a90919063ffffffff16565b90506000613f5a87613f4c6018548561414090919063ffffffff16565b6141bb90919063ffffffff16565b90506000613f8588613f77601a548661414090919063ffffffff16565b6141bb90919063ffffffff16565b90506000818385613f969190615785565b613fa09190615785565b9050600060198190555060006018819055506000601a81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051614000906157ea565b60006040518083038185875af1925050503d806000811461403d576040519150601f19603f3d011682016040523d82523d6000602084013e614042565b606091505b5050809850506000871180156140585750600081115b156140a55761406787826144a6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260195460405161409c939291906157ff565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140eb906157ea565b60006040518083038185875af1925050503d8060008114614128576040519150601f19603f3d011682016040523d82523d6000602084013e61412d565b606091505b505080985050505050505050505050505b565b60008083141561415357600090506141b5565b600082846141619190614bbc565b90508284826141709190614c45565b146141b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141a7906158a8565b60405180910390fd5b809150505b92915050565b60006141fd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506145b5565b905092915050565b505050565b600061424c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613abf565b905092915050565b6000600267ffffffffffffffff811115614271576142706158c8565b5b60405190808252806020026020018201604052801561429f5781602001602082028036833780820191505090505b50905030816000815181106142b7576142b66158f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561435957600080fd5b505afa15801561436d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143919190614e71565b816001815181106143a5576143a46158f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061440c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612c56565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614470959493929190615a1f565b600060405180830381600087803b15801561448a57600080fd5b505af115801561449e573d6000803e3d6000fd5b505050505050565b6144d330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612c56565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161455c96959493929190615a79565b6060604051808303818588803b15801561457557600080fd5b505af1158015614589573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145ae9190615aef565b5050505050565b600080831182906145fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145f391906146b1565b60405180910390fd5b506000838561460b9190614c45565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614652578082015181840152602081019050614637565b83811115614661576000848401525b50505050565b6000601f19601f8301169050919050565b600061468382614618565b61468d8185614623565b935061469d818560208601614634565b6146a681614667565b840191505092915050565b600060208201905081810360008301526146cb8184614678565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614703826146d8565b9050919050565b614713816146f8565b811461471e57600080fd5b50565b6000813590506147308161470a565b92915050565b6000819050919050565b61474981614736565b811461475457600080fd5b50565b60008135905061476681614740565b92915050565b60008060408385031215614783576147826146d3565b5b600061479185828601614721565b92505060206147a285828601614757565b9150509250929050565b60008115159050919050565b6147c1816147ac565b82525050565b60006020820190506147dc60008301846147b8565b92915050565b6000602082840312156147f8576147f76146d3565b5b600061480684828501614721565b91505092915050565b6000819050919050565b600061483461482f61482a846146d8565b61480f565b6146d8565b9050919050565b600061484682614819565b9050919050565b60006148588261483b565b9050919050565b6148688161484d565b82525050565b6000602082019050614883600083018461485f565b92915050565b61489281614736565b82525050565b60006020820190506148ad6000830184614889565b92915050565b6000602082840312156148c9576148c86146d3565b5b60006148d784828501614757565b91505092915050565b6000806000606084860312156148f9576148f86146d3565b5b600061490786828701614721565b935050602061491886828701614721565b925050604061492986828701614757565b9150509250925092565b61493c816146f8565b82525050565b60006020820190506149576000830184614933565b92915050565b600060ff82169050919050565b6149738161495d565b82525050565b600060208201905061498e600083018461496a565b92915050565b61499d816147ac565b81146149a857600080fd5b50565b6000813590506149ba81614994565b92915050565b600080604083850312156149d7576149d66146d3565b5b60006149e585828601614721565b92505060206149f6858286016149ab565b9150509250929050565b600080600060608486031215614a1957614a186146d3565b5b6000614a2786828701614757565b9350506020614a3886828701614757565b9250506040614a4986828701614757565b9150509250925092565b600060208284031215614a6957614a686146d3565b5b6000614a77848285016149ab565b91505092915050565b60008060408385031215614a9757614a966146d3565b5b6000614aa585828601614721565b9250506020614ab685828601614721565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b0757607f821691505b60208210811415614b1b57614b1a614ac0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b57602083614623565b9150614b6282614b21565b602082019050919050565b60006020820190508181036000830152614b8681614b4a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bc782614736565b9150614bd283614736565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c0b57614c0a614b8d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c5082614736565b9150614c5b83614736565b925082614c6b57614c6a614c16565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614cd2602f83614623565b9150614cdd82614c76565b604082019050919050565b60006020820190508181036000830152614d0181614cc5565b9050919050565b6000614d1382614736565b9150614d1e83614736565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d5357614d52614b8d565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614d94601d83614623565b9150614d9f82614d5e565b602082019050919050565b60006020820190508181036000830152614dc381614d87565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614e26603983614623565b9150614e3182614dca565b604082019050919050565b60006020820190508181036000830152614e5581614e19565b9050919050565b600081519050614e6b8161470a565b92915050565b600060208284031215614e8757614e866146d3565b5b6000614e9584828501614e5c565b91505092915050565b6000604082019050614eb36000830185614933565b614ec06020830184614933565b9392505050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614efd601d83614623565b9150614f0882614ec7565b602082019050919050565b60006020820190508181036000830152614f2c81614ef0565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614f8f602483614623565b9150614f9a82614f33565b604082019050919050565b60006020820190508181036000830152614fbe81614f82565b9050919050565b6000604082019050614fda6000830185614933565b614fe76020830184614889565b9392505050565b600081519050614ffd81614994565b92915050565b600060208284031215615019576150186146d3565b5b600061502784828501614fee565b91505092915050565b60006060820190506150456000830186614933565b6150526020830185614933565b61505f6040830184614889565b949350505050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006150c3603583614623565b91506150ce82615067565b604082019050919050565b600060208201905081810360008301526150f2816150b6565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615155603483614623565b9150615160826150f9565b604082019050919050565b6000602082019050818103600083015261518481615148565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151e7602683614623565b91506151f28261518b565b604082019050919050565b60006020820190508181036000830152615216816151da565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615253601b83614623565b915061525e8261521d565b602082019050919050565b6000602082019050818103600083015261528281615246565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152e5602483614623565b91506152f082615289565b604082019050919050565b60006020820190508181036000830152615314816152d8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615377602283614623565b91506153828261531b565b604082019050919050565b600060208201905081810360008301526153a68161536a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615409602583614623565b9150615414826153ad565b604082019050919050565b60006020820190508181036000830152615438816153fc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061549b602383614623565b91506154a68261543f565b604082019050919050565b600060208201905081810360008301526154ca8161548e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615507601683614623565b9150615512826154d1565b602082019050919050565b60006020820190508181036000830152615536816154fa565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006155bf604983614623565b91506155ca8261553d565b606082019050919050565b600060208201905081810360008301526155ee816155b2565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615651603583614623565b915061565c826155f5565b604082019050919050565b6000602082019050818103600083015261568081615644565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006156bd601383614623565b91506156c882615687565b602082019050919050565b600060208201905081810360008301526156ec816156b0565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061574f603683614623565b915061575a826156f3565b604082019050919050565b6000602082019050818103600083015261577e81615742565b9050919050565b600061579082614736565b915061579b83614736565b9250828210156157ae576157ad614b8d565b5b828203905092915050565b600081905092915050565b50565b60006157d46000836157b9565b91506157df826157c4565b600082019050919050565b60006157f5826157c7565b9150819050919050565b60006060820190506158146000830186614889565b6158216020830185614889565b61582e6040830184614889565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615892602183614623565b915061589d82615836565b604082019050919050565b600060208201905081810360008301526158c181615885565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061594b61594661594184615926565b61480f565b614736565b9050919050565b61595b81615930565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615996816146f8565b82525050565b60006159a8838361598d565b60208301905092915050565b6000602082019050919050565b60006159cc82615961565b6159d6818561596c565b93506159e18361597d565b8060005b83811015615a125781516159f9888261599c565b9750615a04836159b4565b9250506001810190506159e5565b5085935050505092915050565b600060a082019050615a346000830188614889565b615a416020830187615952565b8181036040830152615a5381866159c1565b9050615a626060830185614933565b615a6f6080830184614889565b9695505050505050565b600060c082019050615a8e6000830189614933565b615a9b6020830188614889565b615aa86040830187615952565b615ab56060830186615952565b615ac26080830185614933565b615acf60a0830184614889565b979650505050505050565b600081519050615ae981614740565b92915050565b600080600060608486031215615b0857615b076146d3565b5b6000615b1686828701615ada565b9350506020615b2786828701615ada565b9250506040615b3886828701615ada565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122082dd0d86bbb941b3967e9bf1cf5713e16d6fb12a3337b6340f3c940eb18b208664736f6c63430008090033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80638ea5220f116101d1578063c0d7865511610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610ccd578063f2fde38b14610cf8578063f637434214610d21578063f8b45b0514610d4c57610381565b8063d85ba06314610c0f578063dd62ed3e14610c3a578063e2f4560514610c77578063e884f26014610ca257610381565b8063c876d0b9116100dc578063c876d0b914610b65578063c8c8ebe414610b90578063ca628c7814610bbb578063d257b34f14610bd257610381565b8063c0d7865514610aea578063c17b5b8c14610b13578063c18bc19514610b3c57610381565b8063a0d82dc51161016f578063aacebbe311610149578063aacebbe314610a30578063b62496f514610a59578063bbc0c74214610a96578063c024666814610ac157610381565b8063a0d82dc51461098b578063a457c2d7146109b6578063a9059cbb146109f357610381565b806395d89b41116101ab57806395d89b41146108e15780639a7a23d61461090c5780639c3b4fdc146109355780639fccce321461096057610381565b80638ea5220f14610862578063921369131461088d578063924de9b7146108b857610381565b80634a62bb65116102ab578063751039fc116102495780637bce5a04116102235780637bce5a04146107cc5780638095d564146107f75780638a8c523c146108205780638da5cb5b1461083757610381565b8063751039fc1461074d5780637571336a1461077857806375f0a874146107a157610381565b80636a486a8e116102855780636a486a8e146106a35780636ddd1713146106ce57806370a08231146106f9578063715018a61461073657610381565b80634a62bb65146106245780634fbee1931461064f57806363bd1d4a1461068c57610381565b80631f3fed8f1161031857806327c8f835116102f257806327c8f83514610566578063313ce5671461059157806339509351146105bc57806349bd5a5e146105f957610381565b80631f3fed8f146104d5578063203e727e1461050057806323b872dd1461052957610381565b80631694505e116103545780631694505e1461042b57806318160ddd146104565780631816467f146104815780631a8145bb146104aa57610381565b806306fdde0314610386578063095ea7b3146103b157806310d5de53146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d77565b6040516103a891906146b1565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061476c565b610e09565b6040516103e591906147c7565b60405180910390f35b3480156103fa57600080fd5b50610415600480360381019061041091906147e2565b610e27565b60405161042291906147c7565b60405180910390f35b34801561043757600080fd5b50610440610e47565b60405161044d919061486e565b60405180910390f35b34801561046257600080fd5b5061046b610e6d565b6040516104789190614898565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a391906147e2565b610e77565b005b3480156104b657600080fd5b506104bf610fce565b6040516104cc9190614898565b60405180910390f35b3480156104e157600080fd5b506104ea610fd4565b6040516104f79190614898565b60405180910390f35b34801561050c57600080fd5b50610527600480360381019061052291906148b3565b610fda565b005b34801561053557600080fd5b50610550600480360381019061054b91906148e0565b611104565b60405161055d91906147c7565b60405180910390f35b34801561057257600080fd5b5061057b6111dd565b6040516105889190614942565b60405180910390f35b34801561059d57600080fd5b506105a66111e3565b6040516105b39190614979565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de919061476c565b6111ec565b6040516105f091906147c7565b60405180910390f35b34801561060557600080fd5b5061060e61129f565b60405161061b9190614942565b60405180910390f35b34801561063057600080fd5b506106396112c5565b60405161064691906147c7565b60405180910390f35b34801561065b57600080fd5b50610676600480360381019061067191906147e2565b6112d8565b60405161068391906147c7565b60405180910390f35b34801561069857600080fd5b506106a161132e565b005b3480156106af57600080fd5b506106b861140e565b6040516106c59190614898565b60405180910390f35b3480156106da57600080fd5b506106e3611414565b6040516106f091906147c7565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b91906147e2565b611427565b60405161072d9190614898565b60405180910390f35b34801561074257600080fd5b5061074b61146f565b005b34801561075957600080fd5b506107626115c7565b60405161076f91906147c7565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a91906149c0565b611682565b005b3480156107ad57600080fd5b506107b6611774565b6040516107c39190614942565b60405180910390f35b3480156107d857600080fd5b506107e161179a565b6040516107ee9190614898565b60405180910390f35b34801561080357600080fd5b5061081e60048036038101906108199190614a00565b6117a0565b005b34801561082c57600080fd5b506108356118ba565b005b34801561084357600080fd5b5061084c611989565b6040516108599190614942565b60405180910390f35b34801561086e57600080fd5b506108776119b3565b6040516108849190614942565b60405180910390f35b34801561089957600080fd5b506108a26119d9565b6040516108af9190614898565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190614a53565b6119df565b005b3480156108ed57600080fd5b506108f6611a93565b60405161090391906146b1565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e91906149c0565b611b25565b005b34801561094157600080fd5b5061094a611c5b565b6040516109579190614898565b60405180910390f35b34801561096c57600080fd5b50610975611c61565b6040516109829190614898565b60405180910390f35b34801561099757600080fd5b506109a0611c67565b6040516109ad9190614898565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d8919061476c565b611c6d565b6040516109ea91906147c7565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a15919061476c565b611d3a565b604051610a2791906147c7565b60405180910390f35b348015610a3c57600080fd5b50610a576004803603810190610a5291906147e2565b611d58565b005b348015610a6557600080fd5b50610a806004803603810190610a7b91906147e2565b611eaf565b604051610a8d91906147c7565b60405180910390f35b348015610aa257600080fd5b50610aab611ecf565b604051610ab891906147c7565b60405180910390f35b348015610acd57600080fd5b50610ae86004803603810190610ae391906149c0565b611ee2565b005b348015610af657600080fd5b50610b116004803603810190610b0c91906147e2565b612022565b005b348015610b1f57600080fd5b50610b3a6004803603810190610b359190614a00565b61232f565b005b348015610b4857600080fd5b50610b636004803603810190610b5e91906148b3565b612449565b005b348015610b7157600080fd5b50610b7a612573565b604051610b8791906147c7565b60405180910390f35b348015610b9c57600080fd5b50610ba5612586565b604051610bb29190614898565b60405180910390f35b348015610bc757600080fd5b50610bd061258c565b005b348015610bde57600080fd5b50610bf96004803603810190610bf491906148b3565b612759565b604051610c0691906147c7565b60405180910390f35b348015610c1b57600080fd5b50610c246128c9565b604051610c319190614898565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c9190614a80565b6128cf565b604051610c6e9190614898565b60405180910390f35b348015610c8357600080fd5b50610c8c612956565b604051610c999190614898565b60405180910390f35b348015610cae57600080fd5b50610cb761295c565b604051610cc491906147c7565b60405180910390f35b348015610cd957600080fd5b50610ce2612a17565b604051610cef9190614898565b60405180910390f35b348015610d0457600080fd5b50610d1f6004803603810190610d1a91906147e2565b612a1d565b005b348015610d2d57600080fd5b50610d36612be4565b604051610d439190614898565b60405180910390f35b348015610d5857600080fd5b50610d61612bea565b604051610d6e9190614898565b60405180910390f35b606060038054610d8690614aef565b80601f0160208091040260200160405190810160405280929190818152602001828054610db290614aef565b8015610dff5780601f10610dd457610100808354040283529160200191610dff565b820191906000526020600020905b815481529060010190602001808311610de257829003601f168201915b5050505050905090565b6000610e1d610e16612c4e565b8484612c56565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610e7f612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590614b6d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610fe2612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890614b6d565b60405180910390fd5b670de0b6b3a76400006103e86001611087610e6d565b6110919190614bbc565b61109b9190614c45565b6110a59190614c45565b8110156110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90614ce8565b60405180910390fd5b670de0b6b3a7640000816110fb9190614bbc565b600a8190555050565b6000611111848484612e21565b6111d28461111d612c4e565b6111cd85604051806060016040528060288152602001615b6960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611183612c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abf9092919063ffffffff16565b612c56565b600190509392505050565b61dead81565b60006012905090565b60006112956111f9612c4e565b84611290856001600061120a612c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bf090919063ffffffff16565b612c56565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611336612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90614b6d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561140b573d6000803e3d6000fd5b50565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611477612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90614b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115d1612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614b6d565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61168a612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090614b6d565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6117a8612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90614b6d565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461185f9190614d08565b6118699190614d08565b601081905550601460105411156118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac90614daa565b60405180910390fd5b505050565b6118c2612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194890614b6d565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6119e7612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d90614b6d565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611aa290614aef565b80601f0160208091040260200160405190810160405280929190818152602001828054611ace90614aef565b8015611b1b5780601f10611af057610100808354040283529160200191611b1b565b820191906000526020600020905b815481529060010190602001808311611afe57829003601f168201915b5050505050905090565b611b2d612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614b6d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490614e3c565b60405180910390fd5b611c578282613b23565b5050565b60135481565b601a5481565b60175481565b6000611d30611c7a612c4e565b84611d2b85604051806060016040528060258152602001615b916025913960016000611ca4612c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abf9092919063ffffffff16565b612c56565b6001905092915050565b6000611d4e611d47612c4e565b8484612e21565b6001905092915050565b611d60612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de690614b6d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611eea612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7090614b6d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161201691906147c7565b60405180910390a25050565b61202a612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090614b6d565b60405180910390fd5b60008190506120c9816001611682565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561215057600080fd5b505afa158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121889190614e71565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121ea57600080fd5b505afa1580156121fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122229190614e71565b6040518363ffffffff1660e01b815260040161223f929190614e9e565b602060405180830381600087803b15801561225957600080fd5b505af115801561226d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122919190614e71565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506122fe600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611682565b61232b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613b23565b5050565b612337612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90614b6d565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546123ee9190614d08565b6123f89190614d08565b60148190555060196014541115612444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b90614f13565b60405180910390fd5b505050565b612451612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d790614b6d565b60405180910390fd5b670de0b6b3a76400006103e860056124f6610e6d565b6125009190614bbc565b61250a9190614c45565b6125149190614c45565b811015612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d90614fa5565b60405180910390fd5b670de0b6b3a76400008161256a9190614bbc565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b612594612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614b6d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b330612648610e6d565b6040518363ffffffff1660e01b8152600401612665929190614fc5565b602060405180830381600087803b15801561267f57600080fd5b505af1158015612693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b79190615003565b503073ffffffffffffffffffffffffffffffffffffffff166323b872dd306126dd611989565b6126e630611427565b6040518463ffffffff1660e01b815260040161270493929190615030565b602060405180830381600087803b15801561271e57600080fd5b505af1158015612732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127569190615003565b50565b6000612763612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e990614b6d565b60405180910390fd5b620186a06001612800610e6d565b61280a9190614bbc565b6128149190614c45565b821015612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d906150d9565b60405180910390fd5b6103e86005612863610e6d565b61286d9190614bbc565b6128779190614c45565b8211156128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b09061516b565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000612966612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ec90614b6d565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b612a25612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aab90614b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1b906151fd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600c5481565b6000808284612bff9190614d08565b905083811015612c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3b90615269565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbd906152fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2d9061538d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e149190614898565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e889061541f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef8906154b1565b60405180910390fd5b6000811415612f1b57612f1683836000613bc4565b613aba565b600d60009054906101000a900460ff16156135e257612f38611989565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612fa65750612f76611989565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fdf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613019575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130325750600760149054906101000a900460ff16155b156135e157600d60019054906101000a900460ff1661312c57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130ec5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61312b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131229061551d565b60405180910390fd5b5b600f60009054906101000a900460ff16156132f857613149611989565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131d25750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561322c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132f75743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106132b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a9906155d5565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561339b5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561344257600a548111156133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dc90615667565b60405180910390fd5b600c546133f183611427565b826133fc9190614d08565b111561343d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613434906156d3565b60405180910390fd5b6135e0565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e55750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561353457600a5481111561352f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352690615765565b60405180910390fd5b6135df565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166135de57600c5461359183611427565b8261359c9190614d08565b11156135dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d4906156d3565b60405180910390fd5b5b5b5b5b5b60006135ed30611427565b90506000600b5482101590508080156136125750600d60029054906101000a900460ff165b801561362b5750600760149054906101000a900460ff16155b80156136815750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136d75750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561372d5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613771576001600760146101000a81548160ff021916908315150217905550613755613e59565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138275750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561383157600090505b60008115613aaa57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561389457506000601454115b15613961576138c160646138b36014548861414090919063ffffffff16565b6141bb90919063ffffffff16565b9050601454601654826138d49190614bbc565b6138de9190614c45565b601960008282546138ef9190614d08565b92505081905550601454601754826139079190614bbc565b6139119190614c45565b601a60008282546139229190614d08565b925050819055506014546015548261393a9190614bbc565b6139449190614c45565b601860008282546139559190614d08565b92505081905550613a86565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139bc57506000601054115b15613a85576139e960646139db6010548861414090919063ffffffff16565b6141bb90919063ffffffff16565b9050601054601254826139fc9190614bbc565b613a069190614c45565b60196000828254613a179190614d08565b9250508190555060105460135482613a2f9190614bbc565b613a399190614c45565b601a6000828254613a4a9190614d08565b9250508190555060105460115482613a629190614bbc565b613a6c9190614c45565b60186000828254613a7d9190614d08565b925050819055505b5b6000811115613a9b57613a9a873083613bc4565b5b8085613aa79190615785565b94505b613ab5878787613bc4565b505050505b505050565b6000838311158290613b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613afe91906146b1565b60405180910390fd5b5060008385613b169190615785565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2b9061541f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9b906154b1565b60405180910390fd5b613caf838383614205565b613d1a81604051806060016040528060268152602001615b43602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abf9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dad816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bf090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e4c9190614898565b60405180910390a3505050565b6000613e6430611427565b90506000601a54601854601954613e7b9190614d08565b613e859190614d08565b9050600080831480613e975750600082145b15613ea45750505061413e565b6014600b54613eb39190614bbc565b831115613ecc576014600b54613ec99190614bbc565b92505b600060028360195486613edf9190614bbc565b613ee99190614c45565b613ef39190614c45565b90506000613f0a828661420a90919063ffffffff16565b90506000479050613f1a82614254565b6000613f2f824761420a90919063ffffffff16565b90506000613f5a87613f4c6018548561414090919063ffffffff16565b6141bb90919063ffffffff16565b90506000613f8588613f77601a548661414090919063ffffffff16565b6141bb90919063ffffffff16565b90506000818385613f969190615785565b613fa09190615785565b9050600060198190555060006018819055506000601a81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051614000906157ea565b60006040518083038185875af1925050503d806000811461403d576040519150601f19603f3d011682016040523d82523d6000602084013e614042565b606091505b5050809850506000871180156140585750600081115b156140a55761406787826144a6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260195460405161409c939291906157ff565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140eb906157ea565b60006040518083038185875af1925050503d8060008114614128576040519150601f19603f3d011682016040523d82523d6000602084013e61412d565b606091505b505080985050505050505050505050505b565b60008083141561415357600090506141b5565b600082846141619190614bbc565b90508284826141709190614c45565b146141b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141a7906158a8565b60405180910390fd5b809150505b92915050565b60006141fd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506145b5565b905092915050565b505050565b600061424c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613abf565b905092915050565b6000600267ffffffffffffffff811115614271576142706158c8565b5b60405190808252806020026020018201604052801561429f5781602001602082028036833780820191505090505b50905030816000815181106142b7576142b66158f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561435957600080fd5b505afa15801561436d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143919190614e71565b816001815181106143a5576143a46158f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061440c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612c56565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614470959493929190615a1f565b600060405180830381600087803b15801561448a57600080fd5b505af115801561449e573d6000803e3d6000fd5b505050505050565b6144d330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612c56565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161455c96959493929190615a79565b6060604051808303818588803b15801561457557600080fd5b505af1158015614589573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145ae9190615aef565b5050505050565b600080831182906145fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145f391906146b1565b60405180910390fd5b506000838561460b9190614c45565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614652578082015181840152602081019050614637565b83811115614661576000848401525b50505050565b6000601f19601f8301169050919050565b600061468382614618565b61468d8185614623565b935061469d818560208601614634565b6146a681614667565b840191505092915050565b600060208201905081810360008301526146cb8184614678565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614703826146d8565b9050919050565b614713816146f8565b811461471e57600080fd5b50565b6000813590506147308161470a565b92915050565b6000819050919050565b61474981614736565b811461475457600080fd5b50565b60008135905061476681614740565b92915050565b60008060408385031215614783576147826146d3565b5b600061479185828601614721565b92505060206147a285828601614757565b9150509250929050565b60008115159050919050565b6147c1816147ac565b82525050565b60006020820190506147dc60008301846147b8565b92915050565b6000602082840312156147f8576147f76146d3565b5b600061480684828501614721565b91505092915050565b6000819050919050565b600061483461482f61482a846146d8565b61480f565b6146d8565b9050919050565b600061484682614819565b9050919050565b60006148588261483b565b9050919050565b6148688161484d565b82525050565b6000602082019050614883600083018461485f565b92915050565b61489281614736565b82525050565b60006020820190506148ad6000830184614889565b92915050565b6000602082840312156148c9576148c86146d3565b5b60006148d784828501614757565b91505092915050565b6000806000606084860312156148f9576148f86146d3565b5b600061490786828701614721565b935050602061491886828701614721565b925050604061492986828701614757565b9150509250925092565b61493c816146f8565b82525050565b60006020820190506149576000830184614933565b92915050565b600060ff82169050919050565b6149738161495d565b82525050565b600060208201905061498e600083018461496a565b92915050565b61499d816147ac565b81146149a857600080fd5b50565b6000813590506149ba81614994565b92915050565b600080604083850312156149d7576149d66146d3565b5b60006149e585828601614721565b92505060206149f6858286016149ab565b9150509250929050565b600080600060608486031215614a1957614a186146d3565b5b6000614a2786828701614757565b9350506020614a3886828701614757565b9250506040614a4986828701614757565b9150509250925092565b600060208284031215614a6957614a686146d3565b5b6000614a77848285016149ab565b91505092915050565b60008060408385031215614a9757614a966146d3565b5b6000614aa585828601614721565b9250506020614ab685828601614721565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b0757607f821691505b60208210811415614b1b57614b1a614ac0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b57602083614623565b9150614b6282614b21565b602082019050919050565b60006020820190508181036000830152614b8681614b4a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bc782614736565b9150614bd283614736565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c0b57614c0a614b8d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c5082614736565b9150614c5b83614736565b925082614c6b57614c6a614c16565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614cd2602f83614623565b9150614cdd82614c76565b604082019050919050565b60006020820190508181036000830152614d0181614cc5565b9050919050565b6000614d1382614736565b9150614d1e83614736565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d5357614d52614b8d565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614d94601d83614623565b9150614d9f82614d5e565b602082019050919050565b60006020820190508181036000830152614dc381614d87565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614e26603983614623565b9150614e3182614dca565b604082019050919050565b60006020820190508181036000830152614e5581614e19565b9050919050565b600081519050614e6b8161470a565b92915050565b600060208284031215614e8757614e866146d3565b5b6000614e9584828501614e5c565b91505092915050565b6000604082019050614eb36000830185614933565b614ec06020830184614933565b9392505050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614efd601d83614623565b9150614f0882614ec7565b602082019050919050565b60006020820190508181036000830152614f2c81614ef0565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614f8f602483614623565b9150614f9a82614f33565b604082019050919050565b60006020820190508181036000830152614fbe81614f82565b9050919050565b6000604082019050614fda6000830185614933565b614fe76020830184614889565b9392505050565b600081519050614ffd81614994565b92915050565b600060208284031215615019576150186146d3565b5b600061502784828501614fee565b91505092915050565b60006060820190506150456000830186614933565b6150526020830185614933565b61505f6040830184614889565b949350505050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006150c3603583614623565b91506150ce82615067565b604082019050919050565b600060208201905081810360008301526150f2816150b6565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615155603483614623565b9150615160826150f9565b604082019050919050565b6000602082019050818103600083015261518481615148565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151e7602683614623565b91506151f28261518b565b604082019050919050565b60006020820190508181036000830152615216816151da565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615253601b83614623565b915061525e8261521d565b602082019050919050565b6000602082019050818103600083015261528281615246565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152e5602483614623565b91506152f082615289565b604082019050919050565b60006020820190508181036000830152615314816152d8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615377602283614623565b91506153828261531b565b604082019050919050565b600060208201905081810360008301526153a68161536a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615409602583614623565b9150615414826153ad565b604082019050919050565b60006020820190508181036000830152615438816153fc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061549b602383614623565b91506154a68261543f565b604082019050919050565b600060208201905081810360008301526154ca8161548e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615507601683614623565b9150615512826154d1565b602082019050919050565b60006020820190508181036000830152615536816154fa565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006155bf604983614623565b91506155ca8261553d565b606082019050919050565b600060208201905081810360008301526155ee816155b2565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615651603583614623565b915061565c826155f5565b604082019050919050565b6000602082019050818103600083015261568081615644565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006156bd601383614623565b91506156c882615687565b602082019050919050565b600060208201905081810360008301526156ec816156b0565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061574f603683614623565b915061575a826156f3565b604082019050919050565b6000602082019050818103600083015261577e81615742565b9050919050565b600061579082614736565b915061579b83614736565b9250828210156157ae576157ad614b8d565b5b828203905092915050565b600081905092915050565b50565b60006157d46000836157b9565b91506157df826157c4565b600082019050919050565b60006157f5826157c7565b9150819050919050565b60006060820190506158146000830186614889565b6158216020830185614889565b61582e6040830184614889565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615892602183614623565b915061589d82615836565b604082019050919050565b600060208201905081810360008301526158c181615885565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061594b61594661594184615926565b61480f565b614736565b9050919050565b61595b81615930565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615996816146f8565b82525050565b60006159a8838361598d565b60208301905092915050565b6000602082019050919050565b60006159cc82615961565b6159d6818561596c565b93506159e18361597d565b8060005b83811015615a125781516159f9888261599c565b9750615a04836159b4565b9250506001810190506159e5565b5085935050505092915050565b600060a082019050615a346000830188614889565b615a416020830187615952565b8181036040830152615a5381866159c1565b9050615a626060830185614933565b615a6f6080830184614889565b9695505050505050565b600060c082019050615a8e6000830189614933565b615a9b6020830188614889565b615aa86040830187615952565b615ab56060830186615952565b615ac26080830185614933565b615acf60a0830184614889565b979650505050505050565b600081519050615ae981614740565b92915050565b600080600060608486031215615b0857615b076146d3565b5b6000615b1686828701615ada565b9350506020615b2786828701615ada565b9250506040615b3886828701615ada565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122082dd0d86bbb941b3967e9bf1cf5713e16d6fb12a3337b6340f3c940eb18b208664736f6c63430008090033

Deployed Bytecode Sourcemap

29586:16194:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7742:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9909:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30936:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29667:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8862:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38203:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30715:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30675;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35752:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10560:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29750:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8704:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11324:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29715:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30031:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38372:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45473:105;;;;;;;;;;;;;:::i;:::-;;30526:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30111:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9033:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22207:148;;;;;;;;;;;;;:::i;:::-;;34965:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36221:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29842:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30415;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36578:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34797:112;;;;;;;;;;;;;:::i;:::-;;21565:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29879:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30561:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36465:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7961:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37535:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30489:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30755:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30637:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12045:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9373:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37983:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31158:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30071:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37345:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34217:526;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36959:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35994:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30333:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29916:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45586:191;;;;;;;;;;;;;:::i;:::-;;35359:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30381:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9611:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29958:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35150:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30452:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22510:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30599:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29998:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7742:100;7796:13;7829:5;7822:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7742:100;:::o;9909:169::-;9992:4;10009:39;10018:12;:10;:12::i;:::-;10032:7;10041:6;10009:8;:39::i;:::-;10066:4;10059:11;;9909:169;;;;:::o;30936:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29667:41::-;;;;;;;;;;;;;:::o;8862:108::-;8923:7;8950:12;;8943:19;;8862:108;:::o;38203:157::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38310:9:::1;;;;;;;;;;;38282:38;;38299:9;38282:38;;;;;;;;;;;;38343:9;38331;;:21;;;;;;;;;;;;;;;;;;38203:157:::0;:::o;30715:33::-;;;;:::o;30675:::-;;;;:::o;35752:234::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35871:4:::1;35865;35861:1;35845:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35844:31;;;;:::i;:::-;35834:6;:41;;35826:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35971:6;35961;:17;;;;:::i;:::-;35938:20;:40;;;;35752:234:::0;:::o;10560:355::-;10700:4;10717:36;10727:6;10735:9;10746:6;10717:9;:36::i;:::-;10764:121;10773:6;10781:12;:10;:12::i;:::-;10795:89;10833:6;10795:89;;;;;;;;;;;;;;;;;:11;:19;10807:6;10795:19;;;;;;;;;;;;;;;:33;10815:12;:10;:12::i;:::-;10795:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10764:8;:121::i;:::-;10903:4;10896:11;;10560:355;;;;;:::o;29750:53::-;29796:6;29750:53;:::o;8704:93::-;8762:5;8787:2;8780:9;;8704:93;:::o;11324:218::-;11412:4;11429:83;11438:12;:10;:12::i;:::-;11452:7;11461:50;11500:10;11461:11;:25;11473:12;:10;:12::i;:::-;11461:25;;;;;;;;;;;;;;;:34;11487:7;11461:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11429:8;:83::i;:::-;11530:4;11523:11;;11324:218;;;;:::o;29715:28::-;;;;;;;;;;;;;:::o;30031:33::-;;;;;;;;;;;;;:::o;38372:125::-;38437:4;38461:19;:28;38481:7;38461:28;;;;;;;;;;;;;;;;;;;;;;;;;38454:35;;38372:125;;;:::o;45473:105::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45527:10:::1;45519:28;;:51;45548:21;45519:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45473:105::o:0;30526:28::-;;;;:::o;30111:30::-;;;;;;;;;;;;;:::o;9033:127::-;9107:7;9134:9;:18;9144:7;9134:18;;;;;;;;;;;;;;;;9127:25;;9033:127;;;:::o;22207:148::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22314:1:::1;22277:40;;22298:6;;;;;;;;;;;22277:40;;;;;;;;;;;;22345:1;22328:6;;:19;;;;;;;;;;;;;;;;;;22207:148::o:0;34965:120::-;35017:4;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35050:5:::1;35033:14;;:22;;;;;;;;;;;;;;;;;;35073:4;35066:11;;34965:120:::0;:::o;36221:144::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36353:4:::1;36311:31;:39;36343:6;36311:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36221:144:::0;;:::o;29842:30::-;;;;;;;;;;;;;:::o;30415:::-;;;;:::o;36578:369::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36712:13:::1;36694:15;:31;;;;36754:13;36736:15;:31;;;;36790:7;36778:9;:19;;;;36859:9;;36841:15;;36823;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36808:12;:60;;;;36903:2;36887:12;;:18;;36879:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36578:369:::0;;;:::o;34797:112::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34868:4:::1;34852:13;;:20;;;;;;;;;;;;;;;;;;34897:4;34883:11;;:18;;;;;;;;;;;;;;;;;;34797:112::o:0;21565:79::-;21603:7;21630:6;;;;;;;;;;;21623:13;;21565:79;:::o;29879:24::-;;;;;;;;;;;;;:::o;30561:31::-;;;;:::o;36465:101::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36551:7:::1;36537:11;;:21;;;;;;;;;;;;;;;;;;36465:101:::0;:::o;7961:104::-;8017:13;8050:7;8043:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7961:104;:::o;37535:244::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37642:13:::1;;;;;;;;;;;37634:21;;:4;:21;;;;37626:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37730:41;37759:4;37765:5;37730:28;:41::i;:::-;37535:244:::0;;:::o;30489:24::-;;;;:::o;30755:27::-;;;;:::o;30637:25::-;;;;:::o;12045:269::-;12138:4;12155:129;12164:12;:10;:12::i;:::-;12178:7;12187:96;12226:15;12187:96;;;;;;;;;;;;;;;;;:11;:25;12199:12;:10;:12::i;:::-;12187:25;;;;;;;;;;;;;;;:34;12213:7;12187:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12155:8;:129::i;:::-;12302:4;12295:11;;12045:269;;;;:::o;9373:175::-;9459:4;9476:42;9486:12;:10;:12::i;:::-;9500:9;9511:6;9476:9;:42::i;:::-;9536:4;9529:11;;9373:175;;;;:::o;37983:208::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38120:15:::1;;;;;;;;;;;38077:59;;38100:18;38077:59;;;;;;;;;;;;38165:18;38147:15;;:36;;;;;;;;;;;;;;;;;;37983:208:::0;:::o;31158:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30071:33::-;;;;;;;;;;;;;:::o;37345:182::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37461:8:::1;37430:19;:28;37450:7;37430:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37501:7;37485:34;;;37510:8;37485:34;;;;;;:::i;:::-;;;;;;;;37345:182:::0;;:::o;34217:526::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34279:35:::1;34336:6;34279:64;;34364:58;34398:16;34417:4;34364:25;:58::i;:::-;34451:16;34433:15;;:34;;;;;;;;;;;;;;;;;;34522:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34504:56;;;34569:4;34576:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34504:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34488:13;;:112;;;;;;;;;;;;;;;;;;34611:55;34645:13;;;;;;;;;;;34661:4;34611:25;:55::i;:::-;34677:58;34714:13;;;;;;;;;;;34730:4;34677:28;:58::i;:::-;34268:475;34217:526:::0;:::o;36959:378::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37095:13:::1;37076:16;:32;;;;37138:13;37119:16;:32;;;;37175:7;37162:10;:20;;;;37247:10;;37228:16;;37209;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;37193:13;:64;;;;37293:2;37276:13;;:19;;37268:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36959:378:::0;;;:::o;35994:215::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36116:4:::1;36110;36106:1;36090:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36089:31;;;;:::i;:::-;36079:6;:41;;36071:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36194:6;36184;:17;;;;:::i;:::-;36172:9;:29;;;;35994:215:::0;:::o;30333:39::-;;;;;;;;;;;;;:::o;29916:35::-;;;;:::o;45586:191::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45639:4:::1;:12;;;45660:4;45667:13;:11;:13::i;:::-;45639:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45692:4;:17;;;45718:4;45725:7;:5;:7::i;:::-;45734:24;45752:4;45734:9;:24::i;:::-;45692:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45586:191::o:0;35359:381::-;35440:4;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35496:6:::1;35492:1;35476:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35463:9;:39;;35455:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35611:4;35607:1;35591:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35578:9;:37;;35570:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35703:9;35682:18;:30;;;;35729:4;35722:11;;35359:381:::0;;;:::o;30381:27::-;;;;:::o;9611:151::-;9700:7;9727:11;:18;9739:5;9727:18;;;;;;;;;;;;;;;:27;9746:7;9727:27;;;;;;;;;;;;;;;;9720:34;;9611:151;;;;:::o;29958:33::-;;;;:::o;35150:134::-;35210:4;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35249:5:::1;35226:20;;:28;;;;;;;;;;;;;;;;;;35272:4;35265:11;;35150:134:::0;:::o;30452:30::-;;;;:::o;22510:244::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22619:1:::1;22599:22;;:8;:22;;;;22591:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22709:8;22680:38;;22701:6;;;;;;;;;;;22680:38;;;;;;;;;;;;22738:8;22729:6;;:17;;;;;;;;;;;;;;;;;;22510:244:::0;:::o;30599:31::-;;;;:::o;29998:24::-;;;;:::o;16609:181::-;16667:7;16687:9;16703:1;16699;:5;;;;:::i;:::-;16687:17;;16728:1;16723;:6;;16715:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16781:1;16774:8;;;16609:181;;;;:::o;378:98::-;431:7;458:10;451:17;;378:98;:::o;15231:380::-;15384:1;15367:19;;:5;:19;;;;15359:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15465:1;15446:21;;:7;:21;;;;15438:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15549:6;15519:11;:18;15531:5;15519:18;;;;;;;;;;;;;;;:27;15538:7;15519:27;;;;;;;;;;;;;;;:36;;;;15587:7;15571:32;;15580:5;15571:32;;;15596:6;15571:32;;;;;;:::i;:::-;;;;;;;;15231:380;;;:::o;38509:4134::-;38657:1;38641:18;;:4;:18;;;;38633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38734:1;38720:16;;:2;:16;;;;38712:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38811:1;38801:6;:11;38798:92;;;38829:28;38845:4;38851:2;38855:1;38829:15;:28::i;:::-;38872:7;;38798:92;38913:14;;;;;;;;;;;38910:1841;;;38973:7;:5;:7::i;:::-;38965:15;;:4;:15;;;;:49;;;;;39007:7;:5;:7::i;:::-;39001:13;;:2;:13;;;;38965:49;:86;;;;;39049:1;39035:16;;:2;:16;;;;38965:86;:128;;;;;39086:6;39072:21;;:2;:21;;;;38965:128;:158;;;;;39115:8;;;;;;;;;;;39114:9;38965:158;38943:1797;;;39161:13;;;;;;;;;;;39157:148;;39206:19;:25;39226:4;39206:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39235:19;:23;39255:2;39235:23;;;;;;;;;;;;;;;;;;;;;;;;;39206:52;39198:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39157:148;39463:20;;;;;;;;;;;39459:423;;;39517:7;:5;:7::i;:::-;39511:13;;:2;:13;;;;:47;;;;;39542:15;;;;;;;;;;;39528:30;;:2;:30;;;;39511:47;:79;;;;;39576:13;;;;;;;;;;;39562:28;;:2;:28;;;;39511:79;39507:356;;;39668:12;39626:28;:39;39655:9;39626:39;;;;;;;;;;;;;;;;:54;39618:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39827:12;39785:28;:39;39814:9;39785:39;;;;;;;;;;;;;;;:54;;;;39507:356;39459:423;39951:25;:31;39977:4;39951:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39987:31;:35;40019:2;39987:35;;;;;;;;;;;;;;;;;;;;;;;;;39986:36;39951:71;39947:778;;;40069:20;;40059:6;:30;;40051:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40208:9;;40191:13;40201:2;40191:9;:13::i;:::-;40182:6;:22;;;;:::i;:::-;:35;;40174:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39947:778;;;40335:25;:29;40361:2;40335:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40369:31;:37;40401:4;40369:37;;;;;;;;;;;;;;;;;;;;;;;;;40368:38;40335:71;40331:394;;;40453:20;;40443:6;:30;;40435:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40331:394;;;40579:31;:35;40611:2;40579:35;;;;;;;;;;;;;;;;;;;;;;;;;40575:150;;40672:9;;40655:13;40665:2;40655:9;:13::i;:::-;40646:6;:22;;;;:::i;:::-;:35;;40638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40575:150;40331:394;39947:778;38943:1797;38910:1841;40785:28;40816:24;40834:4;40816:9;:24::i;:::-;40785:55;;40861:12;40900:18;;40876:20;:42;;40861:57;;40949:7;:35;;;;;40973:11;;;;;;;;;;;40949:35;:61;;;;;41002:8;;;;;;;;;;;41001:9;40949:61;:110;;;;;41028:25;:31;41054:4;41028:31;;;;;;;;;;;;;;;;;;;;;;;;;41027:32;40949:110;:153;;;;;41077:19;:25;41097:4;41077:25;;;;;;;;;;;;;;;;;;;;;;;;;41076:26;40949:153;:194;;;;;41120:19;:23;41140:2;41120:23;;;;;;;;;;;;;;;;;;;;;;;;;41119:24;40949:194;40931:338;;;41181:4;41170:8;;:15;;;;;;;;;;;;;;;;;;41214:10;:8;:10::i;:::-;41252:5;41241:8;;:16;;;;;;;;;;;;;;;;;;40931:338;41281:12;41297:8;;;;;;;;;;;41296:9;41281:24;;41406:19;:25;41426:4;41406:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41435:19;:23;41455:2;41435:23;;;;;;;;;;;;;;;;;;;;;;;;;41406:52;41403:99;;;41485:5;41475:15;;41403:99;41522:12;41626:7;41623:967;;;41677:25;:29;41703:2;41677:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41726:1;41710:13;;:17;41677:50;41673:748;;;41754:34;41784:3;41754:25;41765:13;;41754:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41747:41;;41855:13;;41836:16;;41829:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41807:18;;:61;;;;;;;:::i;:::-;;;;;;;;41923:13;;41910:10;;41903:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;41887:12;;:49;;;;;;;:::i;:::-;;;;;;;;42003:13;;41984:16;;41977:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41955:18;;:61;;;;;;;:::i;:::-;;;;;;;;41673:748;;;42077:25;:31;42103:4;42077:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42127:1;42112:12;;:16;42077:51;42074:347;;;42153:33;42182:3;42153:24;42164:12;;42153:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42146:40;;42249:12;;42231:15;;42224:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42202:18;;:59;;;;;;;:::i;:::-;;;;;;;;42315:12;;42303:9;;42296:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;42280:12;;:47;;;;;;;:::i;:::-;;;;;;;;42393:12;;42375:15;;42368:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42346:18;;:59;;;;;;;:::i;:::-;;;;;;;;42074:347;41673:748;42459:1;42452:4;:8;42449:93;;;42484:42;42500:4;42514;42521;42484:15;:42::i;:::-;42449:93;42574:4;42564:14;;;;;:::i;:::-;;;41623:967;42602:33;42618:4;42624:2;42628:6;42602:15;:33::i;:::-;38622:4021;;;;38509:4134;;;;:::o;17512:192::-;17598:7;17631:1;17626;:6;;17634:12;17618:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17658:9;17674:1;17670;:5;;;;:::i;:::-;17658:17;;17695:1;17688:8;;;17512:192;;;;;:::o;37787:188::-;37904:5;37870:25;:31;37896:4;37870:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37961:5;37927:40;;37955:4;37927:40;;;;;;;;;;;;37787:188;;:::o;12804:573::-;12962:1;12944:20;;:6;:20;;;;12936:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13046:1;13025:23;;:9;:23;;;;13017:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13101:47;13122:6;13130:9;13141:6;13101:20;:47::i;:::-;13181:71;13203:6;13181:71;;;;;;;;;;;;;;;;;:9;:17;13191:6;13181:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13161:9;:17;13171:6;13161:17;;;;;;;;;;;;;;;:91;;;;13286:32;13311:6;13286:9;:20;13296:9;13286:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13263:9;:20;13273:9;13263:20;;;;;;;;;;;;;;;:55;;;;13351:9;13334:35;;13343:6;13334:35;;;13362:6;13334:35;;;;;;:::i;:::-;;;;;;;;12804:573;;;:::o;43805:1656::-;43844:23;43870:24;43888:4;43870:9;:24::i;:::-;43844:50;;43905:25;43975:12;;43954:18;;43933;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;43905:82;;43998:12;44053:1;44034:15;:20;:46;;;;44079:1;44058:17;:22;44034:46;44031:60;;;44083:7;;;;;44031:60;44145:2;44124:18;;:23;;;;:::i;:::-;44106:15;:41;44103:111;;;44200:2;44179:18;;:23;;;;:::i;:::-;44161:41;;44103:111;44283:23;44368:1;44348:17;44327:18;;44309:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44283:86;;44380:26;44409:36;44429:15;44409;:19;;:36;;;;:::i;:::-;44380:65;;44466:25;44494:21;44466:49;;44528:36;44545:18;44528:16;:36::i;:::-;44586:18;44607:44;44633:17;44607:21;:25;;:44;;;;:::i;:::-;44586:65;;44672:23;44698:57;44737:17;44698:34;44713:18;;44698:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44672:83;;44766:17;44786:51;44819:17;44786:28;44801:12;;44786:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44766:71;;44868:23;44925:9;44907:15;44894:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44868:66;;44976:1;44955:18;:22;;;;45009:1;44988:18;:22;;;;45036:1;45021:12;:16;;;;45079:9;;;;;;;;;;;45071:23;;45102:9;45071:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45058:58;;;;;45158:1;45140:15;:19;:42;;;;;45181:1;45163:15;:19;45140:42;45137:210;;;45198:46;45211:15;45228;45198:12;:46::i;:::-;45264:71;45279:18;45299:15;45316:18;;45264:71;;;;;;;;:::i;:::-;;;;;;;;45137:210;45398:15;;;;;;;;;;;45390:29;;45427:21;45390:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45377:76;;;;;43833:1628;;;;;;;;;;43805:1656;:::o;17963:471::-;18021:7;18271:1;18266;:6;18262:47;;;18296:1;18289:8;;;;18262:47;18321:9;18337:1;18333;:5;;;;:::i;:::-;18321:17;;18366:1;18361;18357;:5;;;;:::i;:::-;:10;18349:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18425:1;18418:8;;;17963:471;;;;;:::o;18910:132::-;18968:7;18995:39;18999:1;19002;18995:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18988:46;;18910:132;;;;:::o;16214:125::-;;;;:::o;17073:136::-;17131:7;17158:43;17162:1;17165;17158:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17151:50;;17073:136;;;;:::o;42651:601::-;42779:21;42817:1;42803:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42779:40;;42848:4;42830;42835:1;42830:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42874:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42864:4;42869:1;42864:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42909:62;42926:4;42941:15;;;;;;;;;;;42959:11;42909:8;:62::i;:::-;43010:15;;;;;;;;;;;:66;;;43091:11;43117:1;43161:4;43188;43208:15;43010:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42706:546;42651:601;:::o;43276:521::-;43424:62;43441:4;43456:15;;;;;;;;;;;43474:11;43424:8;:62::i;:::-;43529:15;;;;;;;;;;;:31;;;43568:9;43601:4;43621:11;43647:1;43690;43733:15;;;;;;;;;;;43763;43529:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43276:521;;:::o;19538:278::-;19624:7;19656:1;19652;:5;19659:12;19644:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19683:9;19699:1;19695;:5;;;;:::i;:::-;19683:17;;19807:1;19800:8;;;19538:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:305::-;12561:3;12580:20;12598:1;12580:20;:::i;:::-;12575:25;;12614:20;12632:1;12614:20;:::i;:::-;12609:25;;12768:1;12700:66;12696:74;12693:1;12690:81;12687:107;;;12774:18;;:::i;:::-;12687:107;12818:1;12815;12811:9;12804:16;;12521:305;;;;:::o;12832:179::-;12972:31;12968:1;12960:6;12956:14;12949:55;12832:179;:::o;13017:366::-;13159:3;13180:67;13244:2;13239:3;13180:67;:::i;:::-;13173:74;;13256:93;13345:3;13256:93;:::i;:::-;13374:2;13369:3;13365:12;13358:19;;13017:366;;;:::o;13389:419::-;13555:4;13593:2;13582:9;13578:18;13570:26;;13642:9;13636:4;13632:20;13628:1;13617:9;13613:17;13606:47;13670:131;13796:4;13670:131;:::i;:::-;13662:139;;13389:419;;;:::o;13814:244::-;13954:34;13950:1;13942:6;13938:14;13931:58;14023:27;14018:2;14010:6;14006:15;13999:52;13814:244;:::o;14064:366::-;14206:3;14227:67;14291:2;14286:3;14227:67;:::i;:::-;14220:74;;14303:93;14392:3;14303:93;:::i;:::-;14421:2;14416:3;14412:12;14405:19;;14064:366;;;:::o;14436:419::-;14602:4;14640:2;14629:9;14625:18;14617:26;;14689:9;14683:4;14679:20;14675:1;14664:9;14660:17;14653:47;14717:131;14843:4;14717:131;:::i;:::-;14709:139;;14436:419;;;:::o;14861:143::-;14918:5;14949:6;14943:13;14934:22;;14965:33;14992:5;14965:33;:::i;:::-;14861:143;;;;:::o;15010:351::-;15080:6;15129:2;15117:9;15108:7;15104:23;15100:32;15097:119;;;15135:79;;:::i;:::-;15097:119;15255:1;15280:64;15336:7;15327:6;15316:9;15312:22;15280:64;:::i;:::-;15270:74;;15226:128;15010:351;;;;:::o;15367:332::-;15488:4;15526:2;15515:9;15511:18;15503:26;;15539:71;15607:1;15596:9;15592:17;15583:6;15539:71;:::i;:::-;15620:72;15688:2;15677:9;15673:18;15664:6;15620:72;:::i;:::-;15367:332;;;;;:::o;15705:179::-;15845:31;15841:1;15833:6;15829:14;15822:55;15705:179;:::o;15890:366::-;16032:3;16053:67;16117:2;16112:3;16053:67;:::i;:::-;16046:74;;16129:93;16218:3;16129:93;:::i;:::-;16247:2;16242:3;16238:12;16231:19;;15890:366;;;:::o;16262:419::-;16428:4;16466:2;16455:9;16451:18;16443:26;;16515:9;16509:4;16505:20;16501:1;16490:9;16486:17;16479:47;16543:131;16669:4;16543:131;:::i;:::-;16535:139;;16262:419;;;:::o;16687:223::-;16827:34;16823:1;16815:6;16811:14;16804:58;16896:6;16891:2;16883:6;16879:15;16872:31;16687:223;:::o;16916:366::-;17058:3;17079:67;17143:2;17138:3;17079:67;:::i;:::-;17072:74;;17155:93;17244:3;17155:93;:::i;:::-;17273:2;17268:3;17264:12;17257:19;;16916:366;;;:::o;17288:419::-;17454:4;17492:2;17481:9;17477:18;17469:26;;17541:9;17535:4;17531:20;17527:1;17516:9;17512:17;17505:47;17569:131;17695:4;17569:131;:::i;:::-;17561:139;;17288:419;;;:::o;17713:332::-;17834:4;17872:2;17861:9;17857:18;17849:26;;17885:71;17953:1;17942:9;17938:17;17929:6;17885:71;:::i;:::-;17966:72;18034:2;18023:9;18019:18;18010:6;17966:72;:::i;:::-;17713:332;;;;;:::o;18051:137::-;18105:5;18136:6;18130:13;18121:22;;18152:30;18176:5;18152:30;:::i;:::-;18051:137;;;;:::o;18194:345::-;18261:6;18310:2;18298:9;18289:7;18285:23;18281:32;18278:119;;;18316:79;;:::i;:::-;18278:119;18436:1;18461:61;18514:7;18505:6;18494:9;18490:22;18461:61;:::i;:::-;18451:71;;18407:125;18194:345;;;;:::o;18545:442::-;18694:4;18732:2;18721:9;18717:18;18709:26;;18745:71;18813:1;18802:9;18798:17;18789:6;18745:71;:::i;:::-;18826:72;18894:2;18883:9;18879:18;18870:6;18826:72;:::i;:::-;18908;18976:2;18965:9;18961:18;18952:6;18908:72;:::i;:::-;18545:442;;;;;;:::o;18993:240::-;19133:34;19129:1;19121:6;19117:14;19110:58;19202:23;19197:2;19189:6;19185:15;19178:48;18993:240;:::o;19239:366::-;19381:3;19402:67;19466:2;19461:3;19402:67;:::i;:::-;19395:74;;19478:93;19567:3;19478:93;:::i;:::-;19596:2;19591:3;19587:12;19580:19;;19239:366;;;:::o;19611:419::-;19777:4;19815:2;19804:9;19800:18;19792:26;;19864:9;19858:4;19854:20;19850:1;19839:9;19835:17;19828:47;19892:131;20018:4;19892:131;:::i;:::-;19884:139;;19611:419;;;:::o;20036:239::-;20176:34;20172:1;20164:6;20160:14;20153:58;20245:22;20240:2;20232:6;20228:15;20221:47;20036:239;:::o;20281:366::-;20423:3;20444:67;20508:2;20503:3;20444:67;:::i;:::-;20437:74;;20520:93;20609:3;20520:93;:::i;:::-;20638:2;20633:3;20629:12;20622:19;;20281:366;;;:::o;20653:419::-;20819:4;20857:2;20846:9;20842:18;20834:26;;20906:9;20900:4;20896:20;20892:1;20881:9;20877:17;20870:47;20934:131;21060:4;20934:131;:::i;:::-;20926:139;;20653:419;;;:::o;21078:225::-;21218:34;21214:1;21206:6;21202:14;21195:58;21287:8;21282:2;21274:6;21270:15;21263:33;21078:225;:::o;21309:366::-;21451:3;21472:67;21536:2;21531:3;21472:67;:::i;:::-;21465:74;;21548:93;21637:3;21548:93;:::i;:::-;21666:2;21661:3;21657:12;21650:19;;21309:366;;;:::o;21681:419::-;21847:4;21885:2;21874:9;21870:18;21862:26;;21934:9;21928:4;21924:20;21920:1;21909:9;21905:17;21898:47;21962:131;22088:4;21962:131;:::i;:::-;21954:139;;21681:419;;;:::o;22106:177::-;22246:29;22242:1;22234:6;22230:14;22223:53;22106:177;:::o;22289:366::-;22431:3;22452:67;22516:2;22511:3;22452:67;:::i;:::-;22445:74;;22528:93;22617:3;22528:93;:::i;:::-;22646:2;22641:3;22637:12;22630:19;;22289:366;;;:::o;22661:419::-;22827:4;22865:2;22854:9;22850:18;22842:26;;22914:9;22908:4;22904:20;22900:1;22889:9;22885:17;22878:47;22942:131;23068:4;22942:131;:::i;:::-;22934:139;;22661:419;;;:::o;23086:223::-;23226:34;23222:1;23214:6;23210:14;23203:58;23295:6;23290:2;23282:6;23278:15;23271:31;23086:223;:::o;23315:366::-;23457:3;23478:67;23542:2;23537:3;23478:67;:::i;:::-;23471:74;;23554:93;23643:3;23554:93;:::i;:::-;23672:2;23667:3;23663:12;23656:19;;23315:366;;;:::o;23687:419::-;23853:4;23891:2;23880:9;23876:18;23868:26;;23940:9;23934:4;23930:20;23926:1;23915:9;23911:17;23904:47;23968:131;24094:4;23968:131;:::i;:::-;23960:139;;23687:419;;;:::o;24112:221::-;24252:34;24248:1;24240:6;24236:14;24229:58;24321:4;24316:2;24308:6;24304:15;24297:29;24112:221;:::o;24339:366::-;24481:3;24502:67;24566:2;24561:3;24502:67;:::i;:::-;24495:74;;24578:93;24667:3;24578:93;:::i;:::-;24696:2;24691:3;24687:12;24680:19;;24339:366;;;:::o;24711:419::-;24877:4;24915:2;24904:9;24900:18;24892:26;;24964:9;24958:4;24954:20;24950:1;24939:9;24935:17;24928:47;24992:131;25118:4;24992:131;:::i;:::-;24984:139;;24711:419;;;:::o;25136:224::-;25276:34;25272:1;25264:6;25260:14;25253:58;25345:7;25340:2;25332:6;25328:15;25321:32;25136:224;:::o;25366:366::-;25508:3;25529:67;25593:2;25588:3;25529:67;:::i;:::-;25522:74;;25605:93;25694:3;25605:93;:::i;:::-;25723:2;25718:3;25714:12;25707:19;;25366:366;;;:::o;25738:419::-;25904:4;25942:2;25931:9;25927:18;25919:26;;25991:9;25985:4;25981:20;25977:1;25966:9;25962:17;25955:47;26019:131;26145:4;26019:131;:::i;:::-;26011:139;;25738:419;;;:::o;26163:222::-;26303:34;26299:1;26291:6;26287:14;26280:58;26372:5;26367:2;26359:6;26355:15;26348:30;26163:222;:::o;26391:366::-;26533:3;26554:67;26618:2;26613:3;26554:67;:::i;:::-;26547:74;;26630:93;26719:3;26630:93;:::i;:::-;26748:2;26743:3;26739:12;26732:19;;26391:366;;;:::o;26763:419::-;26929:4;26967:2;26956:9;26952:18;26944:26;;27016:9;27010:4;27006:20;27002:1;26991:9;26987:17;26980:47;27044:131;27170:4;27044:131;:::i;:::-;27036:139;;26763:419;;;:::o;27188:172::-;27328:24;27324:1;27316:6;27312:14;27305:48;27188:172;:::o;27366:366::-;27508:3;27529:67;27593:2;27588:3;27529:67;:::i;:::-;27522:74;;27605:93;27694:3;27605:93;:::i;:::-;27723:2;27718:3;27714:12;27707:19;;27366:366;;;:::o;27738:419::-;27904:4;27942:2;27931:9;27927:18;27919:26;;27991:9;27985:4;27981:20;27977:1;27966:9;27962:17;27955:47;28019:131;28145:4;28019:131;:::i;:::-;28011:139;;27738:419;;;:::o;28163:297::-;28303:34;28299:1;28291:6;28287:14;28280:58;28372:34;28367:2;28359:6;28355:15;28348:59;28441:11;28436:2;28428:6;28424:15;28417:36;28163:297;:::o;28466:366::-;28608:3;28629:67;28693:2;28688:3;28629:67;:::i;:::-;28622:74;;28705:93;28794:3;28705:93;:::i;:::-;28823:2;28818:3;28814:12;28807:19;;28466:366;;;:::o;28838:419::-;29004:4;29042:2;29031:9;29027:18;29019:26;;29091:9;29085:4;29081:20;29077:1;29066:9;29062:17;29055:47;29119:131;29245:4;29119:131;:::i;:::-;29111:139;;28838:419;;;:::o;29263:240::-;29403:34;29399:1;29391:6;29387:14;29380:58;29472:23;29467:2;29459:6;29455:15;29448:48;29263:240;:::o;29509:366::-;29651:3;29672:67;29736:2;29731:3;29672:67;:::i;:::-;29665:74;;29748:93;29837:3;29748:93;:::i;:::-;29866:2;29861:3;29857:12;29850:19;;29509:366;;;:::o;29881:419::-;30047:4;30085:2;30074:9;30070:18;30062:26;;30134:9;30128:4;30124:20;30120:1;30109:9;30105:17;30098:47;30162:131;30288:4;30162:131;:::i;:::-;30154:139;;29881:419;;;:::o;30306:169::-;30446:21;30442:1;30434:6;30430:14;30423:45;30306:169;:::o;30481:366::-;30623:3;30644:67;30708:2;30703:3;30644:67;:::i;:::-;30637:74;;30720:93;30809:3;30720:93;:::i;:::-;30838:2;30833:3;30829:12;30822:19;;30481:366;;;:::o;30853:419::-;31019:4;31057:2;31046:9;31042:18;31034:26;;31106:9;31100:4;31096:20;31092:1;31081:9;31077:17;31070:47;31134:131;31260:4;31134:131;:::i;:::-;31126:139;;30853:419;;;:::o;31278:241::-;31418:34;31414:1;31406:6;31402:14;31395:58;31487:24;31482:2;31474:6;31470:15;31463:49;31278:241;:::o;31525:366::-;31667:3;31688:67;31752:2;31747:3;31688:67;:::i;:::-;31681:74;;31764:93;31853:3;31764:93;:::i;:::-;31882:2;31877:3;31873:12;31866:19;;31525:366;;;:::o;31897:419::-;32063:4;32101:2;32090:9;32086:18;32078:26;;32150:9;32144:4;32140:20;32136:1;32125:9;32121:17;32114:47;32178:131;32304:4;32178:131;:::i;:::-;32170:139;;31897:419;;;:::o;32322:191::-;32362:4;32382:20;32400:1;32382:20;:::i;:::-;32377:25;;32416:20;32434:1;32416:20;:::i;:::-;32411:25;;32455:1;32452;32449:8;32446:34;;;32460:18;;:::i;:::-;32446:34;32505:1;32502;32498:9;32490:17;;32322:191;;;;:::o;32519:147::-;32620:11;32657:3;32642:18;;32519:147;;;;:::o;32672:114::-;;:::o;32792:398::-;32951:3;32972:83;33053:1;33048:3;32972:83;:::i;:::-;32965:90;;33064:93;33153:3;33064:93;:::i;:::-;33182:1;33177:3;33173:11;33166:18;;32792:398;;;:::o;33196:379::-;33380:3;33402:147;33545:3;33402:147;:::i;:::-;33395:154;;33566:3;33559:10;;33196:379;;;:::o;33581:442::-;33730:4;33768:2;33757:9;33753:18;33745:26;;33781:71;33849:1;33838:9;33834:17;33825:6;33781:71;:::i;:::-;33862:72;33930:2;33919:9;33915:18;33906:6;33862:72;:::i;:::-;33944;34012:2;34001:9;33997:18;33988:6;33944:72;:::i;:::-;33581:442;;;;;;:::o;34029:220::-;34169:34;34165:1;34157:6;34153:14;34146:58;34238:3;34233:2;34225:6;34221:15;34214:28;34029:220;:::o;34255:366::-;34397:3;34418:67;34482:2;34477:3;34418:67;:::i;:::-;34411:74;;34494:93;34583:3;34494:93;:::i;:::-;34612:2;34607:3;34603:12;34596:19;;34255:366;;;:::o;34627:419::-;34793:4;34831:2;34820:9;34816:18;34808:26;;34880:9;34874:4;34870:20;34866:1;34855:9;34851:17;34844:47;34908:131;35034:4;34908:131;:::i;:::-;34900:139;;34627:419;;;:::o;35052:180::-;35100:77;35097:1;35090:88;35197:4;35194:1;35187:15;35221:4;35218:1;35211:15;35238:180;35286:77;35283:1;35276:88;35383:4;35380:1;35373:15;35407:4;35404:1;35397:15;35424:85;35469:7;35498:5;35487:16;;35424:85;;;:::o;35515:158::-;35573:9;35606:61;35624:42;35633:32;35659:5;35633:32;:::i;:::-;35624:42;:::i;:::-;35606:61;:::i;:::-;35593:74;;35515:158;;;:::o;35679:147::-;35774:45;35813:5;35774:45;:::i;:::-;35769:3;35762:58;35679:147;;:::o;35832:114::-;35899:6;35933:5;35927:12;35917:22;;35832:114;;;:::o;35952:184::-;36051:11;36085:6;36080:3;36073:19;36125:4;36120:3;36116:14;36101:29;;35952:184;;;;:::o;36142:132::-;36209:4;36232:3;36224:11;;36262:4;36257:3;36253:14;36245:22;;36142:132;;;:::o;36280:108::-;36357:24;36375:5;36357:24;:::i;:::-;36352:3;36345:37;36280:108;;:::o;36394:179::-;36463:10;36484:46;36526:3;36518:6;36484:46;:::i;:::-;36562:4;36557:3;36553:14;36539:28;;36394:179;;;;:::o;36579:113::-;36649:4;36681;36676:3;36672:14;36664:22;;36579:113;;;:::o;36728:732::-;36847:3;36876:54;36924:5;36876:54;:::i;:::-;36946:86;37025:6;37020:3;36946:86;:::i;:::-;36939:93;;37056:56;37106:5;37056:56;:::i;:::-;37135:7;37166:1;37151:284;37176:6;37173:1;37170:13;37151:284;;;37252:6;37246:13;37279:63;37338:3;37323:13;37279:63;:::i;:::-;37272:70;;37365:60;37418:6;37365:60;:::i;:::-;37355:70;;37211:224;37198:1;37195;37191:9;37186:14;;37151:284;;;37155:14;37451:3;37444:10;;36852:608;;;36728:732;;;;:::o;37466:831::-;37729:4;37767:3;37756:9;37752:19;37744:27;;37781:71;37849:1;37838:9;37834:17;37825:6;37781:71;:::i;:::-;37862:80;37938:2;37927:9;37923:18;37914:6;37862:80;:::i;:::-;37989:9;37983:4;37979:20;37974:2;37963:9;37959:18;37952:48;38017:108;38120:4;38111:6;38017:108;:::i;:::-;38009:116;;38135:72;38203:2;38192:9;38188:18;38179:6;38135:72;:::i;:::-;38217:73;38285:3;38274:9;38270:19;38261:6;38217:73;:::i;:::-;37466:831;;;;;;;;:::o;38303:807::-;38552:4;38590:3;38579:9;38575:19;38567:27;;38604:71;38672:1;38661:9;38657:17;38648:6;38604:71;:::i;:::-;38685:72;38753:2;38742:9;38738:18;38729:6;38685:72;:::i;:::-;38767:80;38843:2;38832:9;38828:18;38819:6;38767:80;:::i;:::-;38857;38933:2;38922:9;38918:18;38909:6;38857:80;:::i;:::-;38947:73;39015:3;39004:9;39000:19;38991:6;38947:73;:::i;:::-;39030;39098:3;39087:9;39083:19;39074:6;39030:73;:::i;:::-;38303:807;;;;;;;;;:::o;39116:143::-;39173:5;39204:6;39198:13;39189:22;;39220:33;39247:5;39220:33;:::i;:::-;39116:143;;;;:::o;39265:663::-;39353:6;39361;39369;39418:2;39406:9;39397:7;39393:23;39389:32;39386:119;;;39424:79;;:::i;:::-;39386:119;39544:1;39569:64;39625:7;39616:6;39605:9;39601:22;39569:64;:::i;:::-;39559:74;;39515:128;39682:2;39708:64;39764:7;39755:6;39744:9;39740:22;39708:64;:::i;:::-;39698:74;;39653:129;39821:2;39847:64;39903:7;39894:6;39883:9;39879:22;39847:64;:::i;:::-;39837:74;;39792:129;39265:663;;;;;:::o

Swarm Source

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