ETH Price: $3,470.28 (+0.55%)

Token

Capital Invest (INV)
 

Overview

Max Total Supply

100,000 INV

Holders

96

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
530.130895294778896845 INV

Value
$0.00
0x18a0a25a8c1aad394f70bccf1bf8be107236eebb
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:
INV

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 Capital Invest $INV


Tokenomics
Supply - 100,000 $INV
Max Transation - 1,000 $INV
Max Wallet - 2,000 $INV
Buy/Sell Tax - 5%

Socials
http://capitalinvest.bz/
https://twitter.com/CapitalInvest69
https://t.me/CapitalInvestERC
*/

// 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
     * transacgtion 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 changeOwnership(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 INV is ERC20, Ownable  {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketingAddressWallet;
    address public devWallet;
    
    uint256 public transationLimit;
    uint256 public swapTokensAtAmount;
    uint256 public walletLimit;
    
    uint256 public percentForLPBurn = 1; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 1360000000000 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 43210 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = true;
    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 buyMarketingFeesTax;
    uint256 public buyLiquidityFeesTax;
    uint256 public buyDevFeesTax;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFeesTax;
    uint256 public sellLiquiidtyFeesTax;
    uint256 public sellDevFeesTax;
    
    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 _isExcludedtransationLimit;

    // 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 marketingAddressWalletUpdated(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("Capital Invest", unicode"INV") {
        
        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 _buyMarketingFeesTax = 10;
        uint256 _buyLiquidityFeesTax = 0;
        uint256 _buyDevFeesTax = 0;

        uint256 _sellMarketingFeesTax = 49;
        uint256 _sellLiquiidtyFeesTax = 0;
        uint256 _sellDevFeesTax = 0;
        
        uint256 totalSupply = 1 * 1e5 * 1e18;
        
        //transationLimit 
        transationLimit = totalSupply / 50; 
        walletLimit = totalSupply / 50; 
        swapTokensAtAmount = totalSupply * 10 / 1000; 

        buyMarketingFeesTax = _buyMarketingFeesTax;
        buyLiquidityFeesTax = _buyLiquidityFeesTax;
        buyDevFeesTax = _buyDevFeesTax;
        buyTotalFees = buyMarketingFeesTax + buyLiquidityFeesTax + buyDevFeesTax;
        
        sellMarketingFeesTax = _sellMarketingFeesTax;
        sellLiquiidtyFeesTax = _sellLiquiidtyFeesTax;
        sellDevFeesTax = _sellDevFeesTax;
        sellTotalFees = sellMarketingFeesTax + sellLiquiidtyFeesTax + sellDevFeesTax;
        
        marketingAddressWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // 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 {

    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    // 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() * 10 / 1000, "Swap amount cannot be higher than 1% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set transationLimit lower than 0.1%");
        transationLimit = newNum * (10**18);
    }

    function updatewalletLimitAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set walletLimit lower than 0.5%");
        walletLimit = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedtransationLimit[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 {
        buyMarketingFeesTax = _marketingFee;
        buyLiquidityFeesTax = _liquidityFee;
        buyDevFeesTax = _devFee;
        buyTotalFees = buyMarketingFeesTax + buyLiquidityFeesTax + buyDevFeesTax;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFeesTax = _marketingFee;
        sellLiquiidtyFeesTax = _liquidityFee;
        sellDevFeesTax = _devFee;
        sellTotalFees = sellMarketingFeesTax + sellLiquiidtyFeesTax + sellDevFeesTax;
        require(sellTotalFees <= 99, "Must keep fees at 99% 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 updatemarketingAddressWallet(address newmarketingAddressWallet) external onlyOwner {
        emit marketingAddressWalletUpdated(newmarketingAddressWallet, marketingAddressWallet);
        marketingAddressWallet = newmarketingAddressWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
    

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

    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] && !_isExcludedtransationLimit[to]) {
                        require(amount <= transationLimit, "Buy transfer amount exceeds the transationLimit.");
                        require(amount + balanceOf(to) <= walletLimit, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedtransationLimit[from]) {
                        require(amount <= transationLimit, "Sell transfer amount exceeds the transationLimit.");
                }
                else if(!_isExcludedtransationLimit[to]){
                    require(amount + balanceOf(to) <= walletLimit, "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;
        }
        
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        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 * sellLiquiidtyFeesTax / sellTotalFees;
                tokensForDev += fees * sellDevFeesTax / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFeesTax / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFeesTax / buyTotalFees;
                tokensForDev += fees * buyDevFeesTax / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFeesTax / 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
            deadAddress,
            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(marketingAddressWallet).call{value: address(this).balance}("");
    }
    
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal returns (bool){
        
        lastLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

}

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":"sniper","type":"address"}],"name":"BoughtEarly","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":"marketingAddressWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedtransationLimit","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":"buyDevFeesTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFeesTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFeesTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwnership","outputs":[],"stateMutability":"nonpayable","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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddressWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFeesTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquiidtyFeesTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFeesTax","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":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"transationLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"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":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","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":[{"internalType":"address","name":"newmarketingAddressWallet","type":"address"}],"name":"updatemarketingAddressWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatewalletLimitAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b556000600c60006101000a81548160ff02191690831515021790555065013ca6512000600d5562278f58600f556001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000ae57600080fd5b506040518060400160405280600e81526020017f4361706974616c20496e766573740000000000000000000000000000000000008152506040518060400160405280600381526020017f494e56000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200013392919062000bc1565b5080600490805190602001906200014c92919062000bc1565b5050506000620001616200068d60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200022c8160016200069560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a757600080fd5b505afa158015620002bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e2919062000cdb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034557600080fd5b505afa1580156200035a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000380919062000cdb565b6040518363ffffffff1660e01b81526004016200039f92919062000d1e565b602060405180830381600087803b158015620003ba57600080fd5b505af1158015620003cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f5919062000cdb565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200043d60a05160016200069560201b60201c565b6200045260a05160016200079260201b60201c565b6000600a9050600080600060319050600080600069152d02c7e14af6800000905060328162000482919062000db3565b60088190555060328162000497919062000db3565b600a819055506103e8600a82620004af919062000deb565b620004bb919062000db3565b600981905550866015819055508560168190555084601781905550601754601654601554620004eb919062000e4c565b620004f7919062000e4c565b6014819055508360198190555082601a8190555081601b81905550601b54601a5460195462000527919062000e4c565b62000533919062000e4c565b601881905550620005496200083360201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005996200083360201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005fb620005ed6200083360201b60201c565b60016200085d60201b60201c565b6200060e3060016200085d60201b60201c565b6200062361dead60016200085d60201b60201c565b62000645620006376200083360201b60201c565b60016200069560201b60201c565b620006583060016200069560201b60201c565b6200066d61dead60016200069560201b60201c565b6200067f3382620009aa60201b60201c565b5050505050505050620010dd565b600033905090565b620006a56200068d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000737576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072e9062000f0a565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200086d6200068d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008f69062000f0a565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200099e919062000f49565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a149062000fb6565b60405180910390fd5b62000a316000838362000b5960201b60201c565b62000a4d8160025462000b5e60201b620028c21790919060201c565b60028190555062000aab816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b5e60201b620028c21790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b4d919062000fe9565b60405180910390a35050565b505050565b600080828462000b6f919062000e4c565b90508381101562000bb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bae9062001056565b60405180910390fd5b8091505092915050565b82805462000bcf90620010a7565b90600052602060002090601f01602090048101928262000bf3576000855562000c3f565b82601f1062000c0e57805160ff191683800117855562000c3f565b8280016001018555821562000c3f579182015b8281111562000c3e57825182559160200191906001019062000c21565b5b50905062000c4e919062000c52565b5090565b5b8082111562000c6d57600081600090555060010162000c53565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ca38262000c76565b9050919050565b62000cb58162000c96565b811462000cc157600080fd5b50565b60008151905062000cd58162000caa565b92915050565b60006020828403121562000cf45762000cf362000c71565b5b600062000d048482850162000cc4565b91505092915050565b62000d188162000c96565b82525050565b600060408201905062000d35600083018562000d0d565b62000d44602083018462000d0d565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dc08262000d4b565b915062000dcd8362000d4b565b92508262000de05762000ddf62000d55565b5b828204905092915050565b600062000df88262000d4b565b915062000e058362000d4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e415762000e4062000d84565b5b828202905092915050565b600062000e598262000d4b565b915062000e668362000d4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e9e5762000e9d62000d84565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ef260208362000ea9565b915062000eff8262000eba565b602082019050919050565b6000602082019050818103600083015262000f258162000ee3565b9050919050565b60008115159050919050565b62000f438162000f2c565b82525050565b600060208201905062000f60600083018462000f38565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f9e601f8362000ea9565b915062000fab8262000f66565b602082019050919050565b6000602082019050818103600083015262000fd18162000f8f565b9050919050565b62000fe38162000d4b565b82525050565b600060208201905062001000600083018462000fd8565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200103e601b8362000ea9565b91506200104b8262001006565b602082019050919050565b6000602082019050818103600083015262001071816200102f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010c057607f821691505b60208210811415620010d757620010d662001078565b5b50919050565b60805160a051615c3b62001150600039600081816116d40152818161204b01528181612eab01528181613f3501528181613ffd015261402a015260008181610f2f01528181612e530152818161429401528181614384015281816143ab01528181614447015261446e0152615c3b6000f3fe6080604052600436106103a65760003560e01c80637571336a116101e7578063b62496f51161010d578063d257b34f116100a0578063e2f456051161006f578063e2f4560514610dcb578063e884f26014610df6578063f5fc6a7214610e21578063f6a06ead14610e4c576103ad565b8063d257b34f14610cfb578063d85ba06314610d38578063dd62ed3e14610d63578063de95539914610da0576103ad565b8063c4aa65d0116100dc578063c4aa65d014610c3f578063c876d0b914610c68578063cde9eb0914610c93578063d175410014610cd0576103ad565b8063b62496f514610b85578063bbc0c74214610bc2578063c024666814610bed578063c17b5b8c14610c16576103ad565b806395d89b41116101855780639fccce32116101545780639fccce3214610ab5578063a457c2d714610ae0578063a4c82a0014610b1d578063a9059cbb14610b48576103ad565b806395d89b4114610a0b5780639a6a1c9b14610a365780639a7a23d614610a615780639ec22c0e14610a8a576103ad565b80638da5cb5b116101c15780638da5cb5b146109615780638e8d4c791461098c5780638ea5220f146109b7578063924de9b7146109e2576103ad565b80637571336a146108f85780638095d564146109215780638a8c523c1461094a576103ad565b80632c3e486c116102cc5780634a62bb651161026a57806370a082311161023957806370a0823114610850578063715018a61461088d578063730c1888146108a4578063751039fc146108cd576103ad565b80634a62bb65146107925780634fbee193146107bd5780636a486a8e146107fa5780636ddd171314610825576103ad565b8063354eff95116102a6578063354eff95146106d657806339509351146106ff5780633c8463a11461073c57806349bd5a5e14610767576103ad565b80632c3e486c146106555780632e82f1a014610680578063313ce567146106ab576103ad565b8063199ffc721161034457806323b872dd1161031357806323b872dd1461059957806327c8f835146105d657806327eb9824146106015780632af4c31e1461062c576103ad565b8063199ffc72146104ef5780631a8145bb1461051a5780631f3fed8f14610545578063203e727e14610570576103ad565b80631694505e116103805780631694505e1461044557806318160ddd146104705780631816467f1461049b578063184c16c5146104c4576103ad565b806306fdde03146103b2578063095ea7b3146103dd57806312a85e981461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e77565b6040516103d49190614628565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff91906146e3565b610f09565b604051610411919061473e565b60405180910390f35b34801561042657600080fd5b5061042f610f27565b60405161043c9190614768565b60405180910390f35b34801561045157600080fd5b5061045a610f2d565b60405161046791906147e2565b60405180910390f35b34801561047c57600080fd5b50610485610f51565b6040516104929190614768565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd91906147fd565b610f5b565b005b3480156104d057600080fd5b506104d96110b2565b6040516104e69190614768565b60405180910390f35b3480156104fb57600080fd5b506105046110b8565b6040516105119190614768565b60405180910390f35b34801561052657600080fd5b5061052f6110be565b60405161053c9190614768565b60405180910390f35b34801561055157600080fd5b5061055a6110c4565b6040516105679190614768565b60405180910390f35b34801561057c57600080fd5b506105976004803603810190610592919061482a565b6110ca565b005b3480156105a557600080fd5b506105c060048036038101906105bb9190614857565b6111f4565b6040516105cd919061473e565b60405180910390f35b3480156105e257600080fd5b506105eb6112cd565b6040516105f891906148b9565b60405180910390f35b34801561060d57600080fd5b506106166112d3565b6040516106239190614768565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e91906147fd565b6112d9565b005b34801561066157600080fd5b5061066a6114a0565b6040516106779190614768565b60405180910390f35b34801561068c57600080fd5b506106956114a6565b6040516106a2919061473e565b60405180910390f35b3480156106b757600080fd5b506106c06114b9565b6040516106cd91906148f0565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f891906147fd565b6114c2565b005b34801561070b57600080fd5b50610726600480360381019061072191906146e3565b611619565b604051610733919061473e565b60405180910390f35b34801561074857600080fd5b506107516116cc565b60405161075e9190614768565b60405180910390f35b34801561077357600080fd5b5061077c6116d2565b60405161078991906148b9565b60405180910390f35b34801561079e57600080fd5b506107a76116f6565b6040516107b4919061473e565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df91906147fd565b611709565b6040516107f1919061473e565b60405180910390f35b34801561080657600080fd5b5061080f61175f565b60405161081c9190614768565b60405180910390f35b34801561083157600080fd5b5061083a611765565b604051610847919061473e565b60405180910390f35b34801561085c57600080fd5b50610877600480360381019061087291906147fd565b611778565b6040516108849190614768565b60405180910390f35b34801561089957600080fd5b506108a26117c0565b005b3480156108b057600080fd5b506108cb60048036038101906108c69190614937565b611918565b005b3480156108d957600080fd5b506108e2611a73565b6040516108ef919061473e565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a919061498a565b611b2e565b005b34801561092d57600080fd5b50610948600480360381019061094391906149ca565b611c20565b005b34801561095657600080fd5b5061095f611d3a565b005b34801561096d57600080fd5b50610976611e10565b60405161098391906148b9565b60405180910390f35b34801561099857600080fd5b506109a1611e3a565b6040516109ae9190614768565b60405180910390f35b3480156109c357600080fd5b506109cc611e40565b6040516109d991906148b9565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a049190614a1d565b611e66565b005b348015610a1757600080fd5b50610a20611f1a565b604051610a2d9190614628565b60405180910390f35b348015610a4257600080fd5b50610a4b611fac565b604051610a589190614768565b60405180910390f35b348015610a6d57600080fd5b50610a886004803603810190610a83919061498a565b611fb2565b005b348015610a9657600080fd5b50610a9f6120e6565b604051610aac9190614768565b60405180910390f35b348015610ac157600080fd5b50610aca6120ec565b604051610ad79190614768565b60405180910390f35b348015610aec57600080fd5b50610b076004803603810190610b0291906146e3565b6120f2565b604051610b14919061473e565b60405180910390f35b348015610b2957600080fd5b50610b326121bf565b604051610b3f9190614768565b60405180910390f35b348015610b5457600080fd5b50610b6f6004803603810190610b6a91906146e3565b6121c5565b604051610b7c919061473e565b60405180910390f35b348015610b9157600080fd5b50610bac6004803603810190610ba791906147fd565b6121e3565b604051610bb9919061473e565b60405180910390f35b348015610bce57600080fd5b50610bd7612203565b604051610be4919061473e565b60405180910390f35b348015610bf957600080fd5b50610c146004803603810190610c0f919061498a565b612216565b005b348015610c2257600080fd5b50610c3d6004803603810190610c3891906149ca565b612356565b005b348015610c4b57600080fd5b50610c666004803603810190610c61919061482a565b612470565b005b348015610c7457600080fd5b50610c7d61259a565b604051610c8a919061473e565b60405180910390f35b348015610c9f57600080fd5b50610cba6004803603810190610cb591906147fd565b6125ad565b604051610cc7919061473e565b60405180910390f35b348015610cdc57600080fd5b50610ce56125cc565b604051610cf291906148b9565b60405180910390f35b348015610d0757600080fd5b50610d226004803603810190610d1d919061482a565b6125f2565b604051610d2f919061473e565b60405180910390f35b348015610d4457600080fd5b50610d4d612762565b604051610d5a9190614768565b60405180910390f35b348015610d6f57600080fd5b50610d8a6004803603810190610d859190614a4a565b612768565b604051610d979190614768565b60405180910390f35b348015610dac57600080fd5b50610db56127ef565b604051610dc29190614768565b60405180910390f35b348015610dd757600080fd5b50610de06127f5565b604051610ded9190614768565b60405180910390f35b348015610e0257600080fd5b50610e0b6127fb565b604051610e18919061473e565b60405180910390f35b348015610e2d57600080fd5b50610e366128b6565b604051610e439190614768565b60405180910390f35b348015610e5857600080fd5b50610e616128bc565b604051610e6e9190614768565b60405180910390f35b606060038054610e8690614ab9565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb290614ab9565b8015610eff5780601f10610ed457610100808354040283529160200191610eff565b820191906000526020600020905b815481529060010190602001808311610ee257829003601f168201915b5050505050905090565b6000610f1d610f16612920565b8484612928565b6001905092915050565b60155481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f63612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe990614b37565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110d2612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890614b37565b60405180910390fd5b670de0b6b3a76400006103e86001611177610f51565b6111819190614b86565b61118b9190614c0f565b6111959190614c0f565b8110156111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90614cb2565b60405180910390fd5b670de0b6b3a7640000816111eb9190614b86565b60088190555050565b6000611201848484612af3565b6112c28461120d612920565b6112bd85604051806060016040528060288152602001615bb960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611273612920565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461388b9092919063ffffffff16565b612928565b600190509392505050565b61dead81565b601b5481565b6112e1612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790614b37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790614d44565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b6114ca612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155090614b37565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f80c648a299e275682540ffbfd63ba2999fe73e142c9962b6a6dd0792c610179660405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006116c2611626612920565b846116bd8560016000611637612920565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128c290919063ffffffff16565b612928565b6001905092915050565b600a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117c8612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e90614b37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611920612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690614b37565b60405180910390fd5b6102588310156119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb90614dd6565b60405180910390fd5b6103e88211158015611a07575060008210155b611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90614e68565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b6000611a7d612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614b37565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611b36612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90614b37565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c28612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90614b37565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611cdf9190614e88565b611ce99190614e88565b60148190555060196014541115611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90614f2a565b60405180910390fd5b505050565b611d42612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc890614b37565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e6e612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef490614b37565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611f2990614ab9565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5590614ab9565b8015611fa25780601f10611f7757610100808354040283529160200191611fa2565b820191906000526020600020905b815481529060010190602001808311611f8557829003601f168201915b5050505050905090565b60175481565b611fba612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090614b37565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614fbc565b60405180910390fd5b6120e282826138ef565b5050565b60105481565b601e5481565b60006121b56120ff612920565b846121b085604051806060016040528060258152602001615be16025913960016000612129612920565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461388b9092919063ffffffff16565b612928565b6001905092915050565b600e5481565b60006121d96121d2612920565b8484612af3565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61221e612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a490614b37565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161234a919061473e565b60405180910390a25050565b61235e612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e490614b37565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a546019546124159190614e88565b61241f9190614e88565b6018819055506063601854111561246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246290615028565b60405180910390fd5b505050565b612478612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fe90614b37565b60405180910390fd5b670de0b6b3a76400006103e8600561251d610f51565b6125279190614b86565b6125319190614c0f565b61253b9190614c0f565b81101561257d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612574906150ba565b60405180910390fd5b670de0b6b3a7640000816125919190614b86565b600a8190555050565b601360009054906101000a900460ff1681565b602080528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006125fc612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614b37565b60405180910390fd5b620186a06001612699610f51565b6126a39190614b86565b6126ad9190614c0f565b8210156126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e69061514c565b60405180910390fd5b6103e8600a6126fc610f51565b6127069190614b86565b6127109190614c0f565b821115612752576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612749906151de565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60165481565b60095481565b6000612805612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b90614b37565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60085481565b60195481565b60008082846128d19190614e88565b905083811015612916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290d9061524a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298f906152dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff9061536e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ae69190614768565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5a90615400565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bca90615492565b60405180910390fd5b6000811415612bed57612be883836000613990565b613886565b601160009054906101000a900460ff16156132b057612c0a611e10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c785750612c48611e10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ceb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d045750600560149054906101000a900460ff16155b156132af57601160019054906101000a900460ff16612dfe57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dbe5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df4906154fe565b60405180910390fd5b5b601360009054906101000a900460ff1615612fc657612e1b611e10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ea257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612efa57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fc55743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f77906155b6565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130695750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613110576008548111156130b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130aa90615648565b60405180910390fd5b600a546130bf83611778565b826130ca9190614e88565b111561310b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613102906156b4565b60405180910390fd5b6132ae565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b35750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613202576008548111156131fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f490615746565b60405180910390fd5b6132ad565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132ac57600a5461325f83611778565b8261326a9190614e88565b11156132ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a2906156b4565b60405180910390fd5b5b5b5b5b5b60006132bb30611778565b9050600060095482101590508080156132e05750601160029054906101000a900460ff165b80156132f95750600560149054906101000a900460ff16155b801561334f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133a55750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133fb5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561343f576001600560146101000a81548160ff021916908315150217905550613423613c25565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156134a55750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156134bd5750600c60009054906101000a900460ff165b80156134d85750600d54600e546134d49190614e88565b4210155b801561352e5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561353d5761353b613f0c565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135f35750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135fd57600090505b6000811561387657602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561366057506000601854115b1561372d5761368d606461367f601854886140e190919063ffffffff16565b61415c90919063ffffffff16565b9050601854601a54826136a09190614b86565b6136aa9190614c0f565b601d60008282546136bb9190614e88565b92505081905550601854601b54826136d39190614b86565b6136dd9190614c0f565b601e60008282546136ee9190614e88565b92505081905550601854601954826137069190614b86565b6137109190614c0f565b601c60008282546137219190614e88565b92505081905550613852565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561378857506000601454115b15613851576137b560646137a7601454886140e190919063ffffffff16565b61415c90919063ffffffff16565b9050601454601654826137c89190614b86565b6137d29190614c0f565b601d60008282546137e39190614e88565b92505081905550601454601754826137fb9190614b86565b6138059190614c0f565b601e60008282546138169190614e88565b925050819055506014546015548261382e9190614b86565b6138389190614c0f565b601c60008282546138499190614e88565b925050819055505b5b600081111561386757613866873083613990565b5b80856138739190615766565b94505b613881878787613990565b505050505b505050565b60008383111582906138d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ca9190614628565b60405180910390fd5b50600083856138e29190615766565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f790615400565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6790615492565b60405180910390fd5b613a7b8383836141a6565b613ae681604051806060016040528060268152602001615b93602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461388b9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b79816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128c290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c189190614768565b60405180910390a3505050565b6000613c3030611778565b90506000601e54601c54601d54613c479190614e88565b613c519190614e88565b9050600080831480613c635750600082145b15613c7057505050613f0a565b6014600954613c7f9190614b86565b831115613c98576014600954613c959190614b86565b92505b6000600283601d5486613cab9190614b86565b613cb59190614c0f565b613cbf9190614c0f565b90506000613cd682866141ab90919063ffffffff16565b90506000479050613ce6826141f5565b6000613cfb82476141ab90919063ffffffff16565b90506000613d2687613d18601c54856140e190919063ffffffff16565b61415c90919063ffffffff16565b90506000613d5188613d43601e54866140e190919063ffffffff16565b61415c90919063ffffffff16565b90506000818385613d629190615766565b613d6c9190615766565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613dcc906157cb565b60006040518083038185875af1925050503d8060008114613e09576040519150601f19603f3d011682016040523d82523d6000602084013e613e0e565b606091505b505080985050600087118015613e245750600081115b15613e7157613e338782614441565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613e68939291906157e0565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613eb7906157cb565b60006040518083038185875af1925050503d8060008114613ef4576040519150601f19603f3d011682016040523d82523d6000602084013e613ef9565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401613f7091906148b9565b60206040518083038186803b158015613f8857600080fd5b505afa158015613f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc0919061582c565b90506000613fed612710613fdf600b54856140e190919063ffffffff16565b61415c90919063ffffffff16565b90506000811115614026576140257f000000000000000000000000000000000000000000000000000000000000000061dead83613990565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561409357600080fd5b505af11580156140a7573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b6000808314156140f45760009050614156565b600082846141029190614b86565b90508284826141119190614c0f565b14614151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614148906158cb565b60405180910390fd5b809150505b92915050565b600061419e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061452c565b905092915050565b505050565b60006141ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061388b565b905092915050565b6000600267ffffffffffffffff811115614212576142116158eb565b5b6040519080825280602002602001820160405280156142405781602001602082028036833780820191505090505b50905030816000815181106142585761425761591a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156142f857600080fd5b505afa15801561430c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614330919061595e565b816001815181106143445761434361591a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143a9307f000000000000000000000000000000000000000000000000000000000000000084612928565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161440b959493929190615a84565b600060405180830381600087803b15801561442557600080fd5b505af1158015614439573d6000803e3d6000fd5b505050505050565b61446c307f000000000000000000000000000000000000000000000000000000000000000084612928565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016144d396959493929190615ade565b6060604051808303818588803b1580156144ec57600080fd5b505af1158015614500573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145259190615b3f565b5050505050565b60008083118290614573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161456a9190614628565b60405180910390fd5b50600083856145829190614c0f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145c95780820151818401526020810190506145ae565b838111156145d8576000848401525b50505050565b6000601f19601f8301169050919050565b60006145fa8261458f565b614604818561459a565b93506146148185602086016145ab565b61461d816145de565b840191505092915050565b6000602082019050818103600083015261464281846145ef565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061467a8261464f565b9050919050565b61468a8161466f565b811461469557600080fd5b50565b6000813590506146a781614681565b92915050565b6000819050919050565b6146c0816146ad565b81146146cb57600080fd5b50565b6000813590506146dd816146b7565b92915050565b600080604083850312156146fa576146f961464a565b5b600061470885828601614698565b9250506020614719858286016146ce565b9150509250929050565b60008115159050919050565b61473881614723565b82525050565b6000602082019050614753600083018461472f565b92915050565b614762816146ad565b82525050565b600060208201905061477d6000830184614759565b92915050565b6000819050919050565b60006147a86147a361479e8461464f565b614783565b61464f565b9050919050565b60006147ba8261478d565b9050919050565b60006147cc826147af565b9050919050565b6147dc816147c1565b82525050565b60006020820190506147f760008301846147d3565b92915050565b6000602082840312156148135761481261464a565b5b600061482184828501614698565b91505092915050565b6000602082840312156148405761483f61464a565b5b600061484e848285016146ce565b91505092915050565b6000806000606084860312156148705761486f61464a565b5b600061487e86828701614698565b935050602061488f86828701614698565b92505060406148a0868287016146ce565b9150509250925092565b6148b38161466f565b82525050565b60006020820190506148ce60008301846148aa565b92915050565b600060ff82169050919050565b6148ea816148d4565b82525050565b600060208201905061490560008301846148e1565b92915050565b61491481614723565b811461491f57600080fd5b50565b6000813590506149318161490b565b92915050565b6000806000606084860312156149505761494f61464a565b5b600061495e868287016146ce565b935050602061496f868287016146ce565b925050604061498086828701614922565b9150509250925092565b600080604083850312156149a1576149a061464a565b5b60006149af85828601614698565b92505060206149c085828601614922565b9150509250929050565b6000806000606084860312156149e3576149e261464a565b5b60006149f1868287016146ce565b9350506020614a02868287016146ce565b9250506040614a13868287016146ce565b9150509250925092565b600060208284031215614a3357614a3261464a565b5b6000614a4184828501614922565b91505092915050565b60008060408385031215614a6157614a6061464a565b5b6000614a6f85828601614698565b9250506020614a8085828601614698565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614ad157607f821691505b60208210811415614ae557614ae4614a8a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b2160208361459a565b9150614b2c82614aeb565b602082019050919050565b60006020820190508181036000830152614b5081614b14565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b91826146ad565b9150614b9c836146ad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bd557614bd4614b57565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c1a826146ad565b9150614c25836146ad565b925082614c3557614c34614be0565b5b828204905092915050565b7f43616e6e6f7420736574207472616e736174696f6e4c696d6974206c6f77657260008201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b6000614c9c602a8361459a565b9150614ca782614c40565b604082019050919050565b60006020820190508181036000830152614ccb81614c8f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d2e60268361459a565b9150614d3982614cd2565b604082019050919050565b60006020820190508181036000830152614d5d81614d21565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614dc060338361459a565b9150614dcb82614d64565b604082019050919050565b60006020820190508181036000830152614def81614db3565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614e5260308361459a565b9150614e5d82614df6565b604082019050919050565b60006020820190508181036000830152614e8181614e45565b9050919050565b6000614e93826146ad565b9150614e9e836146ad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ed357614ed2614b57565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614f14601d8361459a565b9150614f1f82614ede565b602082019050919050565b60006020820190508181036000830152614f4381614f07565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fa660398361459a565b9150614fb182614f4a565b604082019050919050565b60006020820190508181036000830152614fd581614f99565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000615012601d8361459a565b915061501d82614fdc565b602082019050919050565b6000602082019050818103600083015261504181615005565b9050919050565b7f43616e6e6f74207365742077616c6c65744c696d6974206c6f7765722074686160008201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b60006150a460268361459a565b91506150af82615048565b604082019050919050565b600060208201905081810360008301526150d381615097565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061513660358361459a565b9150615141826150da565b604082019050919050565b6000602082019050818103600083015261516581615129565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b60006151c860328361459a565b91506151d38261516c565b604082019050919050565b600060208201905081810360008301526151f7816151bb565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615234601b8361459a565b915061523f826151fe565b602082019050919050565b6000602082019050818103600083015261526381615227565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152c660248361459a565b91506152d18261526a565b604082019050919050565b600060208201905081810360008301526152f5816152b9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061535860228361459a565b9150615363826152fc565b604082019050919050565b600060208201905081810360008301526153878161534b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153ea60258361459a565b91506153f58261538e565b604082019050919050565b60006020820190508181036000830152615419816153dd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061547c60238361459a565b915061548782615420565b604082019050919050565b600060208201905081810360008301526154ab8161546f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154e860168361459a565b91506154f3826154b2565b602082019050919050565b60006020820190508181036000830152615517816154db565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006155a060498361459a565b91506155ab8261551e565b606082019050919050565b600060208201905081810360008301526155cf81615593565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f7472616e736174696f6e4c696d69742e00000000000000000000000000000000602082015250565b600061563260308361459a565b915061563d826155d6565b604082019050919050565b6000602082019050818103600083015261566181615625565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061569e60138361459a565b91506156a982615668565b602082019050919050565b600060208201905081810360008301526156cd81615691565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f207472616e736174696f6e4c696d69742e000000000000000000000000000000602082015250565b600061573060318361459a565b915061573b826156d4565b604082019050919050565b6000602082019050818103600083015261575f81615723565b9050919050565b6000615771826146ad565b915061577c836146ad565b92508282101561578f5761578e614b57565b5b828203905092915050565b600081905092915050565b50565b60006157b560008361579a565b91506157c0826157a5565b600082019050919050565b60006157d6826157a8565b9150819050919050565b60006060820190506157f56000830186614759565b6158026020830185614759565b61580f6040830184614759565b949350505050565b600081519050615826816146b7565b92915050565b6000602082840312156158425761584161464a565b5b600061585084828501615817565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006158b560218361459a565b91506158c082615859565b604082019050919050565b600060208201905081810360008301526158e4816158a8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061595881614681565b92915050565b6000602082840312156159745761597361464a565b5b600061598284828501615949565b91505092915050565b6000819050919050565b60006159b06159ab6159a68461598b565b614783565b6146ad565b9050919050565b6159c081615995565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6159fb8161466f565b82525050565b6000615a0d83836159f2565b60208301905092915050565b6000602082019050919050565b6000615a31826159c6565b615a3b81856159d1565b9350615a46836159e2565b8060005b83811015615a77578151615a5e8882615a01565b9750615a6983615a19565b925050600181019050615a4a565b5085935050505092915050565b600060a082019050615a996000830188614759565b615aa660208301876159b7565b8181036040830152615ab88186615a26565b9050615ac760608301856148aa565b615ad46080830184614759565b9695505050505050565b600060c082019050615af360008301896148aa565b615b006020830188614759565b615b0d60408301876159b7565b615b1a60608301866159b7565b615b2760808301856148aa565b615b3460a0830184614759565b979650505050505050565b600080600060608486031215615b5857615b5761464a565b5b6000615b6686828701615817565b9350506020615b7786828701615817565b9250506040615b8886828701615817565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208c20413f1b8ab0858395fd29ce8620eac5609207e6bca9d6170336d4a5a23b2f64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80637571336a116101e7578063b62496f51161010d578063d257b34f116100a0578063e2f456051161006f578063e2f4560514610dcb578063e884f26014610df6578063f5fc6a7214610e21578063f6a06ead14610e4c576103ad565b8063d257b34f14610cfb578063d85ba06314610d38578063dd62ed3e14610d63578063de95539914610da0576103ad565b8063c4aa65d0116100dc578063c4aa65d014610c3f578063c876d0b914610c68578063cde9eb0914610c93578063d175410014610cd0576103ad565b8063b62496f514610b85578063bbc0c74214610bc2578063c024666814610bed578063c17b5b8c14610c16576103ad565b806395d89b41116101855780639fccce32116101545780639fccce3214610ab5578063a457c2d714610ae0578063a4c82a0014610b1d578063a9059cbb14610b48576103ad565b806395d89b4114610a0b5780639a6a1c9b14610a365780639a7a23d614610a615780639ec22c0e14610a8a576103ad565b80638da5cb5b116101c15780638da5cb5b146109615780638e8d4c791461098c5780638ea5220f146109b7578063924de9b7146109e2576103ad565b80637571336a146108f85780638095d564146109215780638a8c523c1461094a576103ad565b80632c3e486c116102cc5780634a62bb651161026a57806370a082311161023957806370a0823114610850578063715018a61461088d578063730c1888146108a4578063751039fc146108cd576103ad565b80634a62bb65146107925780634fbee193146107bd5780636a486a8e146107fa5780636ddd171314610825576103ad565b8063354eff95116102a6578063354eff95146106d657806339509351146106ff5780633c8463a11461073c57806349bd5a5e14610767576103ad565b80632c3e486c146106555780632e82f1a014610680578063313ce567146106ab576103ad565b8063199ffc721161034457806323b872dd1161031357806323b872dd1461059957806327c8f835146105d657806327eb9824146106015780632af4c31e1461062c576103ad565b8063199ffc72146104ef5780631a8145bb1461051a5780631f3fed8f14610545578063203e727e14610570576103ad565b80631694505e116103805780631694505e1461044557806318160ddd146104705780631816467f1461049b578063184c16c5146104c4576103ad565b806306fdde03146103b2578063095ea7b3146103dd57806312a85e981461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e77565b6040516103d49190614628565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff91906146e3565b610f09565b604051610411919061473e565b60405180910390f35b34801561042657600080fd5b5061042f610f27565b60405161043c9190614768565b60405180910390f35b34801561045157600080fd5b5061045a610f2d565b60405161046791906147e2565b60405180910390f35b34801561047c57600080fd5b50610485610f51565b6040516104929190614768565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd91906147fd565b610f5b565b005b3480156104d057600080fd5b506104d96110b2565b6040516104e69190614768565b60405180910390f35b3480156104fb57600080fd5b506105046110b8565b6040516105119190614768565b60405180910390f35b34801561052657600080fd5b5061052f6110be565b60405161053c9190614768565b60405180910390f35b34801561055157600080fd5b5061055a6110c4565b6040516105679190614768565b60405180910390f35b34801561057c57600080fd5b506105976004803603810190610592919061482a565b6110ca565b005b3480156105a557600080fd5b506105c060048036038101906105bb9190614857565b6111f4565b6040516105cd919061473e565b60405180910390f35b3480156105e257600080fd5b506105eb6112cd565b6040516105f891906148b9565b60405180910390f35b34801561060d57600080fd5b506106166112d3565b6040516106239190614768565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e91906147fd565b6112d9565b005b34801561066157600080fd5b5061066a6114a0565b6040516106779190614768565b60405180910390f35b34801561068c57600080fd5b506106956114a6565b6040516106a2919061473e565b60405180910390f35b3480156106b757600080fd5b506106c06114b9565b6040516106cd91906148f0565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f891906147fd565b6114c2565b005b34801561070b57600080fd5b50610726600480360381019061072191906146e3565b611619565b604051610733919061473e565b60405180910390f35b34801561074857600080fd5b506107516116cc565b60405161075e9190614768565b60405180910390f35b34801561077357600080fd5b5061077c6116d2565b60405161078991906148b9565b60405180910390f35b34801561079e57600080fd5b506107a76116f6565b6040516107b4919061473e565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df91906147fd565b611709565b6040516107f1919061473e565b60405180910390f35b34801561080657600080fd5b5061080f61175f565b60405161081c9190614768565b60405180910390f35b34801561083157600080fd5b5061083a611765565b604051610847919061473e565b60405180910390f35b34801561085c57600080fd5b50610877600480360381019061087291906147fd565b611778565b6040516108849190614768565b60405180910390f35b34801561089957600080fd5b506108a26117c0565b005b3480156108b057600080fd5b506108cb60048036038101906108c69190614937565b611918565b005b3480156108d957600080fd5b506108e2611a73565b6040516108ef919061473e565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a919061498a565b611b2e565b005b34801561092d57600080fd5b50610948600480360381019061094391906149ca565b611c20565b005b34801561095657600080fd5b5061095f611d3a565b005b34801561096d57600080fd5b50610976611e10565b60405161098391906148b9565b60405180910390f35b34801561099857600080fd5b506109a1611e3a565b6040516109ae9190614768565b60405180910390f35b3480156109c357600080fd5b506109cc611e40565b6040516109d991906148b9565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a049190614a1d565b611e66565b005b348015610a1757600080fd5b50610a20611f1a565b604051610a2d9190614628565b60405180910390f35b348015610a4257600080fd5b50610a4b611fac565b604051610a589190614768565b60405180910390f35b348015610a6d57600080fd5b50610a886004803603810190610a83919061498a565b611fb2565b005b348015610a9657600080fd5b50610a9f6120e6565b604051610aac9190614768565b60405180910390f35b348015610ac157600080fd5b50610aca6120ec565b604051610ad79190614768565b60405180910390f35b348015610aec57600080fd5b50610b076004803603810190610b0291906146e3565b6120f2565b604051610b14919061473e565b60405180910390f35b348015610b2957600080fd5b50610b326121bf565b604051610b3f9190614768565b60405180910390f35b348015610b5457600080fd5b50610b6f6004803603810190610b6a91906146e3565b6121c5565b604051610b7c919061473e565b60405180910390f35b348015610b9157600080fd5b50610bac6004803603810190610ba791906147fd565b6121e3565b604051610bb9919061473e565b60405180910390f35b348015610bce57600080fd5b50610bd7612203565b604051610be4919061473e565b60405180910390f35b348015610bf957600080fd5b50610c146004803603810190610c0f919061498a565b612216565b005b348015610c2257600080fd5b50610c3d6004803603810190610c3891906149ca565b612356565b005b348015610c4b57600080fd5b50610c666004803603810190610c61919061482a565b612470565b005b348015610c7457600080fd5b50610c7d61259a565b604051610c8a919061473e565b60405180910390f35b348015610c9f57600080fd5b50610cba6004803603810190610cb591906147fd565b6125ad565b604051610cc7919061473e565b60405180910390f35b348015610cdc57600080fd5b50610ce56125cc565b604051610cf291906148b9565b60405180910390f35b348015610d0757600080fd5b50610d226004803603810190610d1d919061482a565b6125f2565b604051610d2f919061473e565b60405180910390f35b348015610d4457600080fd5b50610d4d612762565b604051610d5a9190614768565b60405180910390f35b348015610d6f57600080fd5b50610d8a6004803603810190610d859190614a4a565b612768565b604051610d979190614768565b60405180910390f35b348015610dac57600080fd5b50610db56127ef565b604051610dc29190614768565b60405180910390f35b348015610dd757600080fd5b50610de06127f5565b604051610ded9190614768565b60405180910390f35b348015610e0257600080fd5b50610e0b6127fb565b604051610e18919061473e565b60405180910390f35b348015610e2d57600080fd5b50610e366128b6565b604051610e439190614768565b60405180910390f35b348015610e5857600080fd5b50610e616128bc565b604051610e6e9190614768565b60405180910390f35b606060038054610e8690614ab9565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb290614ab9565b8015610eff5780601f10610ed457610100808354040283529160200191610eff565b820191906000526020600020905b815481529060010190602001808311610ee257829003601f168201915b5050505050905090565b6000610f1d610f16612920565b8484612928565b6001905092915050565b60155481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f63612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe990614b37565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110d2612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890614b37565b60405180910390fd5b670de0b6b3a76400006103e86001611177610f51565b6111819190614b86565b61118b9190614c0f565b6111959190614c0f565b8110156111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90614cb2565b60405180910390fd5b670de0b6b3a7640000816111eb9190614b86565b60088190555050565b6000611201848484612af3565b6112c28461120d612920565b6112bd85604051806060016040528060288152602001615bb960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611273612920565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461388b9092919063ffffffff16565b612928565b600190509392505050565b61dead81565b601b5481565b6112e1612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790614b37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790614d44565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b6114ca612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155090614b37565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f80c648a299e275682540ffbfd63ba2999fe73e142c9962b6a6dd0792c610179660405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006116c2611626612920565b846116bd8560016000611637612920565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128c290919063ffffffff16565b612928565b6001905092915050565b600a5481565b7f0000000000000000000000002a4468937fb9edf56fc1ddaa78059dc2fc81be1681565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117c8612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e90614b37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611920612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690614b37565b60405180910390fd5b6102588310156119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb90614dd6565b60405180910390fd5b6103e88211158015611a07575060008210155b611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90614e68565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b6000611a7d612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614b37565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611b36612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90614b37565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c28612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90614b37565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611cdf9190614e88565b611ce99190614e88565b60148190555060196014541115611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90614f2a565b60405180910390fd5b505050565b611d42612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc890614b37565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e6e612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef490614b37565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611f2990614ab9565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5590614ab9565b8015611fa25780601f10611f7757610100808354040283529160200191611fa2565b820191906000526020600020905b815481529060010190602001808311611f8557829003601f168201915b5050505050905090565b60175481565b611fba612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090614b37565b60405180910390fd5b7f0000000000000000000000002a4468937fb9edf56fc1ddaa78059dc2fc81be1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614fbc565b60405180910390fd5b6120e282826138ef565b5050565b60105481565b601e5481565b60006121b56120ff612920565b846121b085604051806060016040528060258152602001615be16025913960016000612129612920565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461388b9092919063ffffffff16565b612928565b6001905092915050565b600e5481565b60006121d96121d2612920565b8484612af3565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61221e612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a490614b37565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161234a919061473e565b60405180910390a25050565b61235e612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e490614b37565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a546019546124159190614e88565b61241f9190614e88565b6018819055506063601854111561246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246290615028565b60405180910390fd5b505050565b612478612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fe90614b37565b60405180910390fd5b670de0b6b3a76400006103e8600561251d610f51565b6125279190614b86565b6125319190614c0f565b61253b9190614c0f565b81101561257d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612574906150ba565b60405180910390fd5b670de0b6b3a7640000816125919190614b86565b600a8190555050565b601360009054906101000a900460ff1681565b602080528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006125fc612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614b37565b60405180910390fd5b620186a06001612699610f51565b6126a39190614b86565b6126ad9190614c0f565b8210156126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e69061514c565b60405180910390fd5b6103e8600a6126fc610f51565b6127069190614b86565b6127109190614c0f565b821115612752576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612749906151de565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60165481565b60095481565b6000612805612920565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b90614b37565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60085481565b60195481565b60008082846128d19190614e88565b905083811015612916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290d9061524a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298f906152dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff9061536e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ae69190614768565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5a90615400565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bca90615492565b60405180910390fd5b6000811415612bed57612be883836000613990565b613886565b601160009054906101000a900460ff16156132b057612c0a611e10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c785750612c48611e10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ceb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d045750600560149054906101000a900460ff16155b156132af57601160019054906101000a900460ff16612dfe57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dbe5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df4906154fe565b60405180910390fd5b5b601360009054906101000a900460ff1615612fc657612e1b611e10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ea257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612efa57507f0000000000000000000000002a4468937fb9edf56fc1ddaa78059dc2fc81be1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fc55743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f77906155b6565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130695750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613110576008548111156130b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130aa90615648565b60405180910390fd5b600a546130bf83611778565b826130ca9190614e88565b111561310b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613102906156b4565b60405180910390fd5b6132ae565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b35750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613202576008548111156131fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f490615746565b60405180910390fd5b6132ad565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132ac57600a5461325f83611778565b8261326a9190614e88565b11156132ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a2906156b4565b60405180910390fd5b5b5b5b5b5b60006132bb30611778565b9050600060095482101590508080156132e05750601160029054906101000a900460ff165b80156132f95750600560149054906101000a900460ff16155b801561334f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133a55750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133fb5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561343f576001600560146101000a81548160ff021916908315150217905550613423613c25565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156134a55750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156134bd5750600c60009054906101000a900460ff165b80156134d85750600d54600e546134d49190614e88565b4210155b801561352e5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561353d5761353b613f0c565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135f35750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135fd57600090505b6000811561387657602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561366057506000601854115b1561372d5761368d606461367f601854886140e190919063ffffffff16565b61415c90919063ffffffff16565b9050601854601a54826136a09190614b86565b6136aa9190614c0f565b601d60008282546136bb9190614e88565b92505081905550601854601b54826136d39190614b86565b6136dd9190614c0f565b601e60008282546136ee9190614e88565b92505081905550601854601954826137069190614b86565b6137109190614c0f565b601c60008282546137219190614e88565b92505081905550613852565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561378857506000601454115b15613851576137b560646137a7601454886140e190919063ffffffff16565b61415c90919063ffffffff16565b9050601454601654826137c89190614b86565b6137d29190614c0f565b601d60008282546137e39190614e88565b92505081905550601454601754826137fb9190614b86565b6138059190614c0f565b601e60008282546138169190614e88565b925050819055506014546015548261382e9190614b86565b6138389190614c0f565b601c60008282546138499190614e88565b925050819055505b5b600081111561386757613866873083613990565b5b80856138739190615766565b94505b613881878787613990565b505050505b505050565b60008383111582906138d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ca9190614628565b60405180910390fd5b50600083856138e29190615766565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f790615400565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6790615492565b60405180910390fd5b613a7b8383836141a6565b613ae681604051806060016040528060268152602001615b93602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461388b9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b79816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128c290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c189190614768565b60405180910390a3505050565b6000613c3030611778565b90506000601e54601c54601d54613c479190614e88565b613c519190614e88565b9050600080831480613c635750600082145b15613c7057505050613f0a565b6014600954613c7f9190614b86565b831115613c98576014600954613c959190614b86565b92505b6000600283601d5486613cab9190614b86565b613cb59190614c0f565b613cbf9190614c0f565b90506000613cd682866141ab90919063ffffffff16565b90506000479050613ce6826141f5565b6000613cfb82476141ab90919063ffffffff16565b90506000613d2687613d18601c54856140e190919063ffffffff16565b61415c90919063ffffffff16565b90506000613d5188613d43601e54866140e190919063ffffffff16565b61415c90919063ffffffff16565b90506000818385613d629190615766565b613d6c9190615766565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613dcc906157cb565b60006040518083038185875af1925050503d8060008114613e09576040519150601f19603f3d011682016040523d82523d6000602084013e613e0e565b606091505b505080985050600087118015613e245750600081115b15613e7157613e338782614441565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613e68939291906157e0565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613eb7906157cb565b60006040518083038185875af1925050503d8060008114613ef4576040519150601f19603f3d011682016040523d82523d6000602084013e613ef9565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000002a4468937fb9edf56fc1ddaa78059dc2fc81be166040518263ffffffff1660e01b8152600401613f7091906148b9565b60206040518083038186803b158015613f8857600080fd5b505afa158015613f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc0919061582c565b90506000613fed612710613fdf600b54856140e190919063ffffffff16565b61415c90919063ffffffff16565b90506000811115614026576140257f0000000000000000000000002a4468937fb9edf56fc1ddaa78059dc2fc81be1661dead83613990565b5b60007f0000000000000000000000002a4468937fb9edf56fc1ddaa78059dc2fc81be1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561409357600080fd5b505af11580156140a7573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b6000808314156140f45760009050614156565b600082846141029190614b86565b90508284826141119190614c0f565b14614151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614148906158cb565b60405180910390fd5b809150505b92915050565b600061419e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061452c565b905092915050565b505050565b60006141ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061388b565b905092915050565b6000600267ffffffffffffffff811115614212576142116158eb565b5b6040519080825280602002602001820160405280156142405781602001602082028036833780820191505090505b50905030816000815181106142585761425761591a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156142f857600080fd5b505afa15801561430c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614330919061595e565b816001815181106143445761434361591a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143a9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612928565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161440b959493929190615a84565b600060405180830381600087803b15801561442557600080fd5b505af1158015614439573d6000803e3d6000fd5b505050505050565b61446c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612928565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016144d396959493929190615ade565b6060604051808303818588803b1580156144ec57600080fd5b505af1158015614500573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145259190615b3f565b5050505050565b60008083118290614573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161456a9190614628565b60405180910390fd5b50600083856145829190614c0f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145c95780820151818401526020810190506145ae565b838111156145d8576000848401525b50505050565b6000601f19601f8301169050919050565b60006145fa8261458f565b614604818561459a565b93506146148185602086016145ab565b61461d816145de565b840191505092915050565b6000602082019050818103600083015261464281846145ef565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061467a8261464f565b9050919050565b61468a8161466f565b811461469557600080fd5b50565b6000813590506146a781614681565b92915050565b6000819050919050565b6146c0816146ad565b81146146cb57600080fd5b50565b6000813590506146dd816146b7565b92915050565b600080604083850312156146fa576146f961464a565b5b600061470885828601614698565b9250506020614719858286016146ce565b9150509250929050565b60008115159050919050565b61473881614723565b82525050565b6000602082019050614753600083018461472f565b92915050565b614762816146ad565b82525050565b600060208201905061477d6000830184614759565b92915050565b6000819050919050565b60006147a86147a361479e8461464f565b614783565b61464f565b9050919050565b60006147ba8261478d565b9050919050565b60006147cc826147af565b9050919050565b6147dc816147c1565b82525050565b60006020820190506147f760008301846147d3565b92915050565b6000602082840312156148135761481261464a565b5b600061482184828501614698565b91505092915050565b6000602082840312156148405761483f61464a565b5b600061484e848285016146ce565b91505092915050565b6000806000606084860312156148705761486f61464a565b5b600061487e86828701614698565b935050602061488f86828701614698565b92505060406148a0868287016146ce565b9150509250925092565b6148b38161466f565b82525050565b60006020820190506148ce60008301846148aa565b92915050565b600060ff82169050919050565b6148ea816148d4565b82525050565b600060208201905061490560008301846148e1565b92915050565b61491481614723565b811461491f57600080fd5b50565b6000813590506149318161490b565b92915050565b6000806000606084860312156149505761494f61464a565b5b600061495e868287016146ce565b935050602061496f868287016146ce565b925050604061498086828701614922565b9150509250925092565b600080604083850312156149a1576149a061464a565b5b60006149af85828601614698565b92505060206149c085828601614922565b9150509250929050565b6000806000606084860312156149e3576149e261464a565b5b60006149f1868287016146ce565b9350506020614a02868287016146ce565b9250506040614a13868287016146ce565b9150509250925092565b600060208284031215614a3357614a3261464a565b5b6000614a4184828501614922565b91505092915050565b60008060408385031215614a6157614a6061464a565b5b6000614a6f85828601614698565b9250506020614a8085828601614698565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614ad157607f821691505b60208210811415614ae557614ae4614a8a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b2160208361459a565b9150614b2c82614aeb565b602082019050919050565b60006020820190508181036000830152614b5081614b14565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b91826146ad565b9150614b9c836146ad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bd557614bd4614b57565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c1a826146ad565b9150614c25836146ad565b925082614c3557614c34614be0565b5b828204905092915050565b7f43616e6e6f7420736574207472616e736174696f6e4c696d6974206c6f77657260008201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b6000614c9c602a8361459a565b9150614ca782614c40565b604082019050919050565b60006020820190508181036000830152614ccb81614c8f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d2e60268361459a565b9150614d3982614cd2565b604082019050919050565b60006020820190508181036000830152614d5d81614d21565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614dc060338361459a565b9150614dcb82614d64565b604082019050919050565b60006020820190508181036000830152614def81614db3565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614e5260308361459a565b9150614e5d82614df6565b604082019050919050565b60006020820190508181036000830152614e8181614e45565b9050919050565b6000614e93826146ad565b9150614e9e836146ad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ed357614ed2614b57565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614f14601d8361459a565b9150614f1f82614ede565b602082019050919050565b60006020820190508181036000830152614f4381614f07565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fa660398361459a565b9150614fb182614f4a565b604082019050919050565b60006020820190508181036000830152614fd581614f99565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000615012601d8361459a565b915061501d82614fdc565b602082019050919050565b6000602082019050818103600083015261504181615005565b9050919050565b7f43616e6e6f74207365742077616c6c65744c696d6974206c6f7765722074686160008201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b60006150a460268361459a565b91506150af82615048565b604082019050919050565b600060208201905081810360008301526150d381615097565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061513660358361459a565b9150615141826150da565b604082019050919050565b6000602082019050818103600083015261516581615129565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b60006151c860328361459a565b91506151d38261516c565b604082019050919050565b600060208201905081810360008301526151f7816151bb565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615234601b8361459a565b915061523f826151fe565b602082019050919050565b6000602082019050818103600083015261526381615227565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152c660248361459a565b91506152d18261526a565b604082019050919050565b600060208201905081810360008301526152f5816152b9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061535860228361459a565b9150615363826152fc565b604082019050919050565b600060208201905081810360008301526153878161534b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153ea60258361459a565b91506153f58261538e565b604082019050919050565b60006020820190508181036000830152615419816153dd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061547c60238361459a565b915061548782615420565b604082019050919050565b600060208201905081810360008301526154ab8161546f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154e860168361459a565b91506154f3826154b2565b602082019050919050565b60006020820190508181036000830152615517816154db565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006155a060498361459a565b91506155ab8261551e565b606082019050919050565b600060208201905081810360008301526155cf81615593565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f7472616e736174696f6e4c696d69742e00000000000000000000000000000000602082015250565b600061563260308361459a565b915061563d826155d6565b604082019050919050565b6000602082019050818103600083015261566181615625565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061569e60138361459a565b91506156a982615668565b602082019050919050565b600060208201905081810360008301526156cd81615691565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f207472616e736174696f6e4c696d69742e000000000000000000000000000000602082015250565b600061573060318361459a565b915061573b826156d4565b604082019050919050565b6000602082019050818103600083015261575f81615723565b9050919050565b6000615771826146ad565b915061577c836146ad565b92508282101561578f5761578e614b57565b5b828203905092915050565b600081905092915050565b50565b60006157b560008361579a565b91506157c0826157a5565b600082019050919050565b60006157d6826157a8565b9150819050919050565b60006060820190506157f56000830186614759565b6158026020830185614759565b61580f6040830184614759565b949350505050565b600081519050615826816146b7565b92915050565b6000602082840312156158425761584161464a565b5b600061585084828501615817565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006158b560218361459a565b91506158c082615859565b604082019050919050565b600060208201905081810360008301526158e4816158a8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061595881614681565b92915050565b6000602082840312156159745761597361464a565b5b600061598284828501615949565b91505092915050565b6000819050919050565b60006159b06159ab6159a68461598b565b614783565b6146ad565b9050919050565b6159c081615995565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6159fb8161466f565b82525050565b6000615a0d83836159f2565b60208301905092915050565b6000602082019050919050565b6000615a31826159c6565b615a3b81856159d1565b9350615a46836159e2565b8060005b83811015615a77578151615a5e8882615a01565b9750615a6983615a19565b925050600181019050615a4a565b5085935050505092915050565b600060a082019050615a996000830188614759565b615aa660208301876159b7565b8181036040830152615ab88186615a26565b9050615ac760608301856148aa565b615ad46080830184614759565b9695505050505050565b600060c082019050615af360008301896148aa565b615b006020830188614759565b615b0d60408301876159b7565b615b1a60608301866159b7565b615b2760808301856148aa565b615b3460a0830184614759565b979650505050505050565b600080600060608486031215615b5857615b5761464a565b5b6000615b6686828701615817565b9350506020615b7786828701615817565b9250506040615b8886828701615817565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208c20413f1b8ab0858395fd29ce8620eac5609207e6bca9d6170336d4a5a23b2f64736f6c63430008090033

Deployed Bytecode Sourcemap

29555:17384:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7709:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9876:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30703:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29629:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8829:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38101:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30219:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30021:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31027:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30987;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35562:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10527:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29732:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30945:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22477:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30116:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30076:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8671:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37832:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11291:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29982:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29687:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30320:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38272:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30826:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30399:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9000:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22174:148;;;;;;;;;;;;;:::i;:::-;;45671:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34771:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36027:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36379:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34560:155;;;;;;;;;;;;;:::i;:::-;;21532:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30903:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29868:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36266:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7928:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30785:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37384:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30276:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31067:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12012:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30177:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9340:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31465:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30360:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37194:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36784:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35794:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30621:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31248:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29824:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35165:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30669:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9578:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30744:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29942:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34956:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29905:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30861:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7709:100;7763:13;7796:5;7789:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7709:100;:::o;9876:169::-;9959:4;9976:39;9985:12;:10;:12::i;:::-;9999:7;10008:6;9976:8;:39::i;:::-;10033:4;10026:11;;9876:169;;;;:::o;30703:34::-;;;;:::o;29629:51::-;;;:::o;8829:108::-;8890:7;8917:12;;8910:19;;8829:108;:::o;38101:157::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38208:9:::1;;;;;;;;;;;38180:38;;38197:9;38180:38;;;;;;;;;;;;38241:9;38229;;:21;;;;;;;;;;;;;;;;;;38101:157:::0;:::o;30219:50::-;;;;:::o;30021:35::-;;;;:::o;31027:33::-;;;;:::o;30987:::-;;;;:::o;35562:224::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35681:4:::1;35675;35671:1;35655:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35654:31;;;;:::i;:::-;35644:6;:41;;35636:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;35771:6;35761;:17;;;;:::i;:::-;35743:15;:35;;;;35562:224:::0;:::o;10527:355::-;10667:4;10684:36;10694:6;10702:9;10713:6;10684:9;:36::i;:::-;10731:121;10740:6;10748:12;:10;:12::i;:::-;10762:89;10800:6;10762:89;;;;;;;;;;;;;;;;;:11;:19;10774:6;10762:19;;;;;;;;;;;;;;;:33;10782:12;:10;:12::i;:::-;10762:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10731:8;:121::i;:::-;10870:4;10863:11;;10527:355;;;;;:::o;29732:53::-;29778:6;29732:53;:::o;30945:29::-;;;;:::o;22477:242::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22584:1:::1;22564:22;;:8;:22;;;;22556:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22674:8;22645:38;;22666:6;;;;;;;;;;;22645:38;;;;;;;;;;;;22703:8;22694:6;;:17;;;;;;;;;;;;;;;;;;22477:242:::0;:::o;30116:54::-;;;;:::o;30076:33::-;;;;;;;;;;;;;:::o;8671:93::-;8729:5;8754:2;8747:9;;8671:93;:::o;37832:257::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37997:22:::1;;;;;;;;;;;37940:80;;37970:25;37940:80;;;;;;;;;;;;38056:25;38031:22;;:50;;;;;;;;;;;;;;;;;;37832:257:::0;:::o;11291:218::-;11379:4;11396:83;11405:12;:10;:12::i;:::-;11419:7;11428:50;11467:10;11428:11;:25;11440:12;:10;:12::i;:::-;11428:25;;;;;;;;;;;;;;;:34;11454:7;11428:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11396:8;:83::i;:::-;11497:4;11490:11;;11291:218;;;;:::o;29982:26::-;;;;:::o;29687:38::-;;;:::o;30320:33::-;;;;;;;;;;;;;:::o;38272:125::-;38337:4;38361:19;:28;38381:7;38361:28;;;;;;;;;;;;;;;;;;;;;;;;;38354:35;;38272:125;;;:::o;30826:28::-;;;;:::o;30399:30::-;;;;;;;;;;;;;:::o;9000:127::-;9074:7;9101:9;:18;9111:7;9101:18;;;;;;;;;;;;;;;;9094:25;;9000:127;;;:::o;22174:148::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22281:1:::1;22244:40;;22265:6;;;;;;;;;;;22244:40;;;;;;;;;;;;22312:1;22295:6;;:19;;;;;;;;;;;;;;;;;;22174:148::o:0;45671:447::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45825:3:::1;45802:19;:26;;45794:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;45915:4;45903:8;:16;;:33;;;;;45935:1;45923:8;:13;;45903:33;45895:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;46018:19;46000:15;:37;;;;46067:8;46048:16;:27;;;;46102:8;46086:13;;:24;;;;;;;;;;;;;;;;;;45671:447:::0;;;:::o;34771:120::-;34823:4;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34856:5:::1;34839:14;;:22;;;;;;;;;;;;;;;;;;34879:4;34872:11;;34771:120:::0;:::o;36027:139::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36154:4:::1;36117:26;:34;36144:6;36117:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;36027:139:::0;;:::o;36379:393::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36517:13:::1;36495:19;:35;;;;36563:13;36541:19;:35;;;;36603:7;36587:13;:23;;;;36680:13;;36658:19;;36636;;:41;;;;:::i;:::-;:57;;;;:::i;:::-;36621:12;:72;;;;36728:2;36712:12;;:18;;36704:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36379:393:::0;;;:::o;34560:155::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34631:4:::1;34615:13;;:20;;;;;;;;;;;;;;;;;;34660:4;34646:11;;:18;;;;;;;;;;;;;;;;;;34692:15;34675:14;:32;;;;34560:155::o:0;21532:79::-;21570:7;21597:6;;;;;;;;;;;21590:13;;21532:79;:::o;30903:35::-;;;;:::o;29868:24::-;;;;;;;;;;;;;:::o;36266:101::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36352:7:::1;36338:11;;:21;;;;;;;;;;;;;;;;;;36266:101:::0;:::o;7928:104::-;7984:13;8017:7;8010:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7928:104;:::o;30785:28::-;;;;:::o;37384:244::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37491:13:::1;37483:21;;:4;:21;;;;37475:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37579:41;37608:4;37614:5;37579:28;:41::i;:::-;37384:244:::0;;:::o;30276:35::-;;;;:::o;31067:27::-;;;;:::o;12012:269::-;12105:4;12122:129;12131:12;:10;:12::i;:::-;12145:7;12154:96;12193:15;12154:96;;;;;;;;;;;;;;;;;:11;:25;12166:12;:10;:12::i;:::-;12154:25;;;;;;;;;;;;;;;:34;12180:7;12154:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12122:8;:129::i;:::-;12269:4;12262:11;;12012:269;;;;:::o;30177:29::-;;;;:::o;9340:175::-;9426:4;9443:42;9453:12;:10;:12::i;:::-;9467:9;9478:6;9443:9;:42::i;:::-;9503:4;9496:11;;9340:175;;;;:::o;31465:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30360:32::-;;;;;;;;;;;;;:::o;37194:182::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37310:8:::1;37279:19;:28;37299:7;37279:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37350:7;37334:34;;;37359:8;37334:34;;;;;;:::i;:::-;;;;;;;;37194:182:::0;;:::o;36784:402::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36924:13:::1;36901:20;:36;;;;36971:13;36948:20;:36;;;;37012:7;36995:14;:24;;;;37092:14;;37069:20;;37046;;:43;;;;:::i;:::-;:60;;;;:::i;:::-;37030:13;:76;;;;37142:2;37125:13;;:19;;37117:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36784:402:::0;;;:::o;35794:221::-;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35918:4:::1;35912;35908:1;35892:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35891:31;;;;:::i;:::-;35881:6;:41;;35873:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;36000:6;35990;:17;;;;:::i;:::-;35976:11;:31;;;;35794:221:::0;:::o;30621:39::-;;;;;;;;;;;;;:::o;31248:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;29824:37::-;;;;;;;;;;;;;:::o;35165:385::-;35246:4;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35303:6:::1;35299:1;35283:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35270:9;:39;;35262:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35420:4;35415:2;35399:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;35386:9;:38;;35378:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35511:9;35490:18;:30;;;;35538:4;35531:11;;35165:385:::0;;;:::o;30669:27::-;;;;:::o;9578:151::-;9667:7;9694:11;:18;9706:5;9694:18;;;;;;;;;;;;;;;:27;9713:7;9694:27;;;;;;;;;;;;;;;;9687:34;;9578:151;;;;:::o;30744:34::-;;;;:::o;29942:33::-;;;;:::o;34956:134::-;35016:4;21754:12;:10;:12::i;:::-;21744:22;;:6;;;;;;;;;;;:22;;;21736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35055:5:::1;35032:20;;:28;;;;;;;;;;;;;;;;;;35078:4;35071:11;;34956:134:::0;:::o;29905:30::-;;;;:::o;30861:35::-;;;;:::o;16576:181::-;16634:7;16654:9;16670:1;16666;:5;;;;:::i;:::-;16654:17;;16695:1;16690;:6;;16682:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16748:1;16741:8;;;16576:181;;;;:::o;344:98::-;397:7;424:10;417:17;;344:98;:::o;15198:380::-;15351:1;15334:19;;:5;:19;;;;15326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15432:1;15413:21;;:7;:21;;;;15405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15516:6;15486:11;:18;15498:5;15486:18;;;;;;;;;;;;;;;:27;15505:7;15486:27;;;;;;;;;;;;;;;:36;;;;15554:7;15538:32;;15547:5;15538:32;;;15563:6;15538:32;;;;;;:::i;:::-;;;;;;;;15198:380;;;:::o;38459:4369::-;38607:1;38591:18;;:4;:18;;;;38583:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38684:1;38670:16;;:2;:16;;;;38662:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38761:1;38751:6;:11;38748:92;;;38779:28;38795:4;38801:2;38805:1;38779:15;:28::i;:::-;38822:7;;38748:92;38863:14;;;;;;;;;;;38860:1810;;;38923:7;:5;:7::i;:::-;38915:15;;:4;:15;;;;:49;;;;;38957:7;:5;:7::i;:::-;38951:13;;:2;:13;;;;38915:49;:86;;;;;38999:1;38985:16;;:2;:16;;;;38915:86;:128;;;;;39036:6;39022:21;;:2;:21;;;;38915:128;:158;;;;;39065:8;;;;;;;;;;;39064:9;38915:158;38893:1766;;;39111:13;;;;;;;;;;;39107:148;;39156:19;:25;39176:4;39156:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39185:19;:23;39205:2;39185:23;;;;;;;;;;;;;;;;;;;;;;;;;39156:52;39148:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39107:148;39413:20;;;;;;;;;;;39409:423;;;39467:7;:5;:7::i;:::-;39461:13;;:2;:13;;;;:47;;;;;39492:15;39478:30;;:2;:30;;;;39461:47;:79;;;;;39526:13;39512:28;;:2;:28;;;;39461:79;39457:356;;;39618:12;39576:28;:39;39605:9;39576:39;;;;;;;;;;;;;;;;:54;39568:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39777:12;39735:28;:39;39764:9;39735:39;;;;;;;;;;;;;;;:54;;;;39457:356;39409:423;39901:25;:31;39927:4;39901:31;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;39937:26;:30;39964:2;39937:30;;;;;;;;;;;;;;;;;;;;;;;;;39936:31;39901:66;39897:747;;;40014:15;;40004:6;:25;;39996:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;40143:11;;40126:13;40136:2;40126:9;:13::i;:::-;40117:6;:22;;;;:::i;:::-;:37;;40109:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;39897:747;;;40272:25;:29;40298:2;40272:29;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;40306:26;:32;40333:4;40306:32;;;;;;;;;;;;;;;;;;;;;;;;;40305:33;40272:66;40268:376;;;40385:15;;40375:6;:25;;40367:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40268:376;;;40501:26;:30;40528:2;40501:30;;;;;;;;;;;;;;;;;;;;;;;;;40497:147;;40589:11;;40572:13;40582:2;40572:9;:13::i;:::-;40563:6;:22;;;;:::i;:::-;:37;;40555:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40497:147;40268:376;39897:747;38893:1766;38860:1810;40710:28;40741:24;40759:4;40741:9;:24::i;:::-;40710:55;;40786:12;40825:18;;40801:20;:42;;40786:57;;40874:7;:35;;;;;40898:11;;;;;;;;;;;40874:35;:61;;;;;40927:8;;;;;;;;;;;40926:9;40874:61;:110;;;;;40953:25;:31;40979:4;40953:31;;;;;;;;;;;;;;;;;;;;;;;;;40952:32;40874:110;:153;;;;;41002:19;:25;41022:4;41002:25;;;;;;;;;;;;;;;;;;;;;;;;;41001:26;40874:153;:194;;;;;41045:19;:23;41065:2;41045:23;;;;;;;;;;;;;;;;;;;;;;;;;41044:24;40874:194;40856:338;;;41106:4;41095:8;;:15;;;;;;;;;;;;;;;;;;41139:10;:8;:10::i;:::-;41177:5;41166:8;;:16;;;;;;;;;;;;;;;;;;40856:338;41218:8;;;;;;;;;;;41217:9;:42;;;;;41230:25;:29;41256:2;41230:29;;;;;;;;;;;;;;;;;;;;;;;;;41217:42;:59;;;;;41263:13;;;;;;;;;;;41217:59;:114;;;;;41316:15;;41299:14;;:32;;;;:::i;:::-;41280:15;:51;;41217:114;:144;;;;;41336:19;:25;41356:4;41336:25;;;;;;;;;;;;;;;;;;;;;;;;;41335:26;41217:144;41214:204;;;41377:29;:27;:29::i;:::-;;41214:204;41430:12;41446:8;;;;;;;;;;;41445:9;41430:24;;41555:19;:25;41575:4;41555:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41584:19;:23;41604:2;41584:23;;;;;;;;;;;;;;;;;;;;;;;;;41555:52;41552:99;;;41634:5;41624:15;;41552:99;41671:12;41775:7;41772:1003;;;41826:25;:29;41852:2;41826:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41875:1;41859:13;;:17;41826:50;41822:778;;;41903:34;41933:3;41903:25;41914:13;;41903:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41896:41;;42008:13;;41985:20;;41978:4;:27;;;;:::i;:::-;:43;;;;:::i;:::-;41956:18;;:65;;;;;;;:::i;:::-;;;;;;;;42080:13;;42063:14;;42056:4;:21;;;;:::i;:::-;:37;;;;:::i;:::-;42040:12;;:53;;;;;;;:::i;:::-;;;;;;;;42164:13;;42141:20;;42134:4;:27;;;;:::i;:::-;:43;;;;:::i;:::-;42112:18;;:65;;;;;;;:::i;:::-;;;;;;;;41822:778;;;42238:25;:31;42264:4;42238:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42288:1;42273:12;;:16;42238:51;42235:365;;;42317:33;42346:3;42317:24;42328:12;;42317:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42310:40;;42420:12;;42398:19;;42391:4;:26;;;;:::i;:::-;:41;;;;:::i;:::-;42369:18;;:63;;;;;;;:::i;:::-;;;;;;;;42490:12;;42474:13;;42467:4;:20;;;;:::i;:::-;:35;;;;:::i;:::-;42451:12;;:51;;;;;;;:::i;:::-;;;;;;;;42572:12;;42550:19;;42543:4;:26;;;;:::i;:::-;:41;;;;:::i;:::-;42521:18;;:63;;;;;;;:::i;:::-;;;;;;;;42235:365;41822:778;42638:1;42631:4;:8;42628:93;;;42663:42;42679:4;42693;42700;42663:15;:42::i;:::-;42628:93;42759:4;42749:14;;;;;:::i;:::-;;;41772:1003;42787:33;42803:4;42809:2;42813:6;42787:15;:33::i;:::-;38572:4256;;;;38459:4369;;;;:::o;17479:192::-;17565:7;17598:1;17593;:6;;17601:12;17585:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17625:9;17641:1;17637;:5;;;;:::i;:::-;17625:17;;17662:1;17655:8;;;17479:192;;;;;:::o;37636:188::-;37753:5;37719:25;:31;37745:4;37719:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37810:5;37776:40;;37804:4;37776:40;;;;;;;;;;;;37636:188;;:::o;12771:573::-;12929:1;12911:20;;:6;:20;;;;12903:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13013:1;12992:23;;:9;:23;;;;12984:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13068:47;13089:6;13097:9;13108:6;13068:20;:47::i;:::-;13148:71;13170:6;13148:71;;;;;;;;;;;;;;;;;:9;:17;13158:6;13148:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13128:9;:17;13138:6;13128:17;;;;;;;;;;;;;;;:91;;;;13253:32;13278:6;13253:9;:20;13263:9;13253:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13230:9;:20;13240:9;13230:20;;;;;;;;;;;;;;;:55;;;;13318:9;13301:35;;13310:6;13301:35;;;13329:6;13301:35;;;;;;:::i;:::-;;;;;;;;12771:573;;;:::o;43986:1673::-;44025:23;44051:24;44069:4;44051:9;:24::i;:::-;44025:50;;44086:25;44156:12;;44135:18;;44114;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;44086:82;;44179:12;44234:1;44215:15;:20;:46;;;;44260:1;44239:17;:22;44215:46;44212:60;;;44264:7;;;;;44212:60;44326:2;44305:18;;:23;;;;:::i;:::-;44287:15;:41;44284:111;;;44381:2;44360:18;;:23;;;;:::i;:::-;44342:41;;44284:111;44464:23;44549:1;44529:17;44508:18;;44490:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44464:86;;44561:26;44590:36;44610:15;44590;:19;;:36;;;;:::i;:::-;44561:65;;44647:25;44675:21;44647:49;;44709:36;44726:18;44709:16;:36::i;:::-;44767:18;44788:44;44814:17;44788:21;:25;;:44;;;;:::i;:::-;44767:65;;44853:23;44879:57;44918:17;44879:34;44894:18;;44879:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44853:83;;44947:17;44967:51;45000:17;44967:28;44982:12;;44967:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44947:71;;45049:23;45106:9;45088:15;45075:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;45049:66;;45167:1;45146:18;:22;;;;45200:1;45179:18;:22;;;;45227:1;45212:12;:16;;;;45270:9;;;;;;;;;;;45262:23;;45293:9;45262:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45249:58;;;;;45349:1;45331:15;:19;:42;;;;;45372:1;45354:15;:19;45331:42;45328:210;;;45389:46;45402:15;45419;45389:12;:46::i;:::-;45455:71;45470:18;45490:15;45507:18;;45455:71;;;;;;;;:::i;:::-;;;;;;;;45328:210;45589:22;;;;;;;;;;;45581:36;;45625:21;45581:70;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45568:83;;;;;44014:1645;;;;;;;;;;43986:1673;:::o;46130:804::-;46187:4;46230:15;46213:14;:32;;;;46308:28;46339:4;:14;;;46354:13;46339:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46308:60;;46426:20;46449:53;46496:5;46449:42;46474:16;;46449:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;46426:76;;46630:1;46615:12;:16;46611:109;;;46647:61;46663:13;46686:6;46695:12;46647:15;:61::i;:::-;46611:109;46803:19;46840:13;46803:51;;46865:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46892:12;;;;;;;;;;46922:4;46915:11;;;;;46130:804;:::o;17930:471::-;17988:7;18238:1;18233;:6;18229:47;;;18263:1;18256:8;;;;18229:47;18288:9;18304:1;18300;:5;;;;:::i;:::-;18288:17;;18333:1;18328;18324;:5;;;;:::i;:::-;:10;18316:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18392:1;18385:8;;;17930:471;;;;;:::o;18877:132::-;18935:7;18962:39;18966:1;18969;18962:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18955:46;;18877:132;;;;:::o;16181:125::-;;;;:::o;17040:136::-;17098:7;17125:43;17129:1;17132;17125:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17118:50;;17040:136;;;;:::o;42836:601::-;42964:21;43002:1;42988:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42964:40;;43033:4;43015;43020:1;43015:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43059:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43049:4;43054:1;43049:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43094:62;43111:4;43126:15;43144:11;43094:8;:62::i;:::-;43195:15;:66;;;43276:11;43302:1;43346:4;43373;43393:15;43195:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42891:546;42836:601;:::o;43461:517::-;43609:62;43626:4;43641:15;43659:11;43609:8;:62::i;:::-;43714:15;:31;;;43753:9;43786:4;43806:11;43832:1;43875;29778:6;43944:15;43714:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43461:517;;:::o;19505:278::-;19591:7;19623:1;19619;:5;19626:12;19611:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19650:9;19666:1;19662;:5;;;;:::i;:::-;19650:17;;19774:1;19767:8;;;19505: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:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:329::-;4883:6;4932:2;4920:9;4911:7;4907:23;4903:32;4900:119;;;4938:79;;:::i;:::-;4900:119;5058:1;5083:53;5128:7;5119:6;5108:9;5104:22;5083:53;:::i;:::-;5073:63;;5029:117;4824:329;;;;:::o;5159:::-;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:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:619::-;8332:6;8340;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8621:118;8778:2;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8749:118;8255:619;;;;;:::o;8880:323::-;8936:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:50;9178:7;9169:6;9158:9;9154:22;9136:50;:::i;:::-;9126:60;;9082:114;8880:323;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:182::-;10341:34;10337:1;10329:6;10325:14;10318:58;10201:182;:::o;10389:366::-;10531:3;10552:67;10616:2;10611:3;10552:67;:::i;:::-;10545:74;;10628:93;10717:3;10628:93;:::i;:::-;10746:2;10741:3;10737:12;10730:19;;10389:366;;;:::o;10761:419::-;10927:4;10965:2;10954:9;10950:18;10942:26;;11014:9;11008:4;11004:20;11000:1;10989:9;10985:17;10978:47;11042:131;11168:4;11042:131;:::i;:::-;11034:139;;10761:419;;;:::o;11186:180::-;11234:77;11231:1;11224:88;11331:4;11328:1;11321:15;11355:4;11352:1;11345:15;11372:348;11412:7;11435:20;11453:1;11435:20;:::i;:::-;11430:25;;11469:20;11487:1;11469:20;:::i;:::-;11464:25;;11657:1;11589:66;11585:74;11582:1;11579:81;11574:1;11567:9;11560:17;11556:105;11553:131;;;11664:18;;:::i;:::-;11553:131;11712:1;11709;11705:9;11694:20;;11372:348;;;;:::o;11726:180::-;11774:77;11771:1;11764:88;11871:4;11868:1;11861:15;11895:4;11892:1;11885:15;11912:185;11952:1;11969:20;11987:1;11969:20;:::i;:::-;11964:25;;12003:20;12021:1;12003:20;:::i;:::-;11998:25;;12042:1;12032:35;;12047:18;;:::i;:::-;12032:35;12089:1;12086;12082:9;12077:14;;11912:185;;;;:::o;12103:229::-;12243:34;12239:1;12231:6;12227:14;12220:58;12312:12;12307:2;12299:6;12295:15;12288:37;12103:229;:::o;12338:366::-;12480:3;12501:67;12565:2;12560:3;12501:67;:::i;:::-;12494:74;;12577:93;12666:3;12577:93;:::i;:::-;12695:2;12690:3;12686:12;12679:19;;12338:366;;;:::o;12710:419::-;12876:4;12914:2;12903:9;12899:18;12891:26;;12963:9;12957:4;12953:20;12949:1;12938:9;12934:17;12927:47;12991:131;13117:4;12991:131;:::i;:::-;12983:139;;12710:419;;;:::o;13135:225::-;13275:34;13271:1;13263:6;13259:14;13252:58;13344:8;13339:2;13331:6;13327:15;13320:33;13135:225;:::o;13366:366::-;13508:3;13529:67;13593:2;13588:3;13529:67;:::i;:::-;13522:74;;13605:93;13694:3;13605:93;:::i;:::-;13723:2;13718:3;13714:12;13707:19;;13366:366;;;:::o;13738:419::-;13904:4;13942:2;13931:9;13927:18;13919:26;;13991:9;13985:4;13981:20;13977:1;13966:9;13962:17;13955:47;14019:131;14145:4;14019:131;:::i;:::-;14011:139;;13738:419;;;:::o;14163:238::-;14303:34;14299:1;14291:6;14287:14;14280:58;14372:21;14367:2;14359:6;14355:15;14348:46;14163:238;:::o;14407:366::-;14549:3;14570:67;14634:2;14629:3;14570:67;:::i;:::-;14563:74;;14646:93;14735:3;14646:93;:::i;:::-;14764:2;14759:3;14755:12;14748:19;;14407:366;;;:::o;14779:419::-;14945:4;14983:2;14972:9;14968:18;14960:26;;15032:9;15026:4;15022:20;15018:1;15007:9;15003:17;14996:47;15060:131;15186:4;15060:131;:::i;:::-;15052:139;;14779:419;;;:::o;15204:235::-;15344:34;15340:1;15332:6;15328:14;15321:58;15413:18;15408:2;15400:6;15396:15;15389:43;15204:235;:::o;15445:366::-;15587:3;15608:67;15672:2;15667:3;15608:67;:::i;:::-;15601:74;;15684:93;15773:3;15684:93;:::i;:::-;15802:2;15797:3;15793:12;15786:19;;15445:366;;;:::o;15817:419::-;15983:4;16021:2;16010:9;16006:18;15998:26;;16070:9;16064:4;16060:20;16056:1;16045:9;16041:17;16034:47;16098:131;16224:4;16098:131;:::i;:::-;16090:139;;15817:419;;;:::o;16242:305::-;16282:3;16301:20;16319:1;16301:20;:::i;:::-;16296:25;;16335:20;16353:1;16335:20;:::i;:::-;16330:25;;16489:1;16421:66;16417:74;16414:1;16411:81;16408:107;;;16495:18;;:::i;:::-;16408:107;16539:1;16536;16532:9;16525:16;;16242:305;;;;:::o;16553:179::-;16693:31;16689:1;16681:6;16677:14;16670:55;16553:179;:::o;16738:366::-;16880:3;16901:67;16965:2;16960:3;16901:67;:::i;:::-;16894:74;;16977:93;17066:3;16977:93;:::i;:::-;17095:2;17090:3;17086:12;17079:19;;16738:366;;;:::o;17110:419::-;17276:4;17314:2;17303:9;17299:18;17291:26;;17363:9;17357:4;17353:20;17349:1;17338:9;17334:17;17327:47;17391:131;17517:4;17391:131;:::i;:::-;17383:139;;17110:419;;;:::o;17535:244::-;17675:34;17671:1;17663:6;17659:14;17652:58;17744:27;17739:2;17731:6;17727:15;17720:52;17535:244;:::o;17785:366::-;17927:3;17948:67;18012:2;18007:3;17948:67;:::i;:::-;17941:74;;18024:93;18113:3;18024:93;:::i;:::-;18142:2;18137:3;18133:12;18126:19;;17785:366;;;:::o;18157:419::-;18323:4;18361:2;18350:9;18346:18;18338:26;;18410:9;18404:4;18400:20;18396:1;18385:9;18381:17;18374:47;18438:131;18564:4;18438:131;:::i;:::-;18430:139;;18157:419;;;:::o;18582:179::-;18722:31;18718:1;18710:6;18706:14;18699:55;18582:179;:::o;18767:366::-;18909:3;18930:67;18994:2;18989:3;18930:67;:::i;:::-;18923:74;;19006:93;19095:3;19006:93;:::i;:::-;19124:2;19119:3;19115:12;19108:19;;18767:366;;;:::o;19139:419::-;19305:4;19343:2;19332:9;19328:18;19320:26;;19392:9;19386:4;19382:20;19378:1;19367:9;19363:17;19356:47;19420:131;19546:4;19420:131;:::i;:::-;19412:139;;19139:419;;;:::o;19564:225::-;19704:34;19700:1;19692:6;19688:14;19681:58;19773:8;19768:2;19760:6;19756:15;19749:33;19564:225;:::o;19795:366::-;19937:3;19958:67;20022:2;20017:3;19958:67;:::i;:::-;19951:74;;20034:93;20123:3;20034:93;:::i;:::-;20152:2;20147:3;20143:12;20136:19;;19795:366;;;:::o;20167:419::-;20333:4;20371:2;20360:9;20356:18;20348:26;;20420:9;20414:4;20410:20;20406:1;20395:9;20391:17;20384:47;20448:131;20574:4;20448:131;:::i;:::-;20440:139;;20167:419;;;:::o;20592:240::-;20732:34;20728:1;20720:6;20716:14;20709:58;20801:23;20796:2;20788:6;20784:15;20777:48;20592:240;:::o;20838:366::-;20980:3;21001:67;21065:2;21060:3;21001:67;:::i;:::-;20994:74;;21077:93;21166:3;21077:93;:::i;:::-;21195:2;21190:3;21186:12;21179:19;;20838:366;;;:::o;21210:419::-;21376:4;21414:2;21403:9;21399:18;21391:26;;21463:9;21457:4;21453:20;21449:1;21438:9;21434:17;21427:47;21491:131;21617:4;21491:131;:::i;:::-;21483:139;;21210:419;;;:::o;21635:237::-;21775:34;21771:1;21763:6;21759:14;21752:58;21844:20;21839:2;21831:6;21827:15;21820:45;21635:237;:::o;21878:366::-;22020:3;22041:67;22105:2;22100:3;22041:67;:::i;:::-;22034:74;;22117:93;22206:3;22117:93;:::i;:::-;22235:2;22230:3;22226:12;22219:19;;21878:366;;;:::o;22250:419::-;22416:4;22454:2;22443:9;22439:18;22431:26;;22503:9;22497:4;22493:20;22489:1;22478:9;22474:17;22467:47;22531:131;22657:4;22531:131;:::i;:::-;22523:139;;22250:419;;;:::o;22675:177::-;22815:29;22811:1;22803:6;22799:14;22792:53;22675:177;:::o;22858:366::-;23000:3;23021:67;23085:2;23080:3;23021:67;:::i;:::-;23014:74;;23097:93;23186:3;23097:93;:::i;:::-;23215:2;23210:3;23206:12;23199:19;;22858:366;;;:::o;23230:419::-;23396:4;23434:2;23423:9;23419:18;23411:26;;23483:9;23477:4;23473:20;23469:1;23458:9;23454:17;23447:47;23511:131;23637:4;23511:131;:::i;:::-;23503:139;;23230:419;;;:::o;23655:223::-;23795:34;23791:1;23783:6;23779:14;23772:58;23864:6;23859:2;23851:6;23847:15;23840:31;23655:223;:::o;23884:366::-;24026:3;24047:67;24111:2;24106:3;24047:67;:::i;:::-;24040:74;;24123:93;24212:3;24123:93;:::i;:::-;24241:2;24236:3;24232:12;24225:19;;23884:366;;;:::o;24256:419::-;24422:4;24460:2;24449:9;24445:18;24437:26;;24509:9;24503:4;24499:20;24495:1;24484:9;24480:17;24473:47;24537:131;24663:4;24537:131;:::i;:::-;24529:139;;24256:419;;;:::o;24681:221::-;24821:34;24817:1;24809:6;24805:14;24798:58;24890:4;24885:2;24877:6;24873:15;24866:29;24681:221;:::o;24908:366::-;25050:3;25071:67;25135:2;25130:3;25071:67;:::i;:::-;25064:74;;25147:93;25236:3;25147:93;:::i;:::-;25265:2;25260:3;25256:12;25249:19;;24908:366;;;:::o;25280:419::-;25446:4;25484:2;25473:9;25469:18;25461:26;;25533:9;25527:4;25523:20;25519:1;25508:9;25504:17;25497:47;25561:131;25687:4;25561:131;:::i;:::-;25553:139;;25280:419;;;:::o;25705:224::-;25845:34;25841:1;25833:6;25829:14;25822:58;25914:7;25909:2;25901:6;25897:15;25890:32;25705:224;:::o;25935:366::-;26077:3;26098:67;26162:2;26157:3;26098:67;:::i;:::-;26091:74;;26174:93;26263:3;26174:93;:::i;:::-;26292:2;26287:3;26283:12;26276:19;;25935:366;;;:::o;26307:419::-;26473:4;26511:2;26500:9;26496:18;26488:26;;26560:9;26554:4;26550:20;26546:1;26535:9;26531:17;26524:47;26588:131;26714:4;26588:131;:::i;:::-;26580:139;;26307:419;;;:::o;26732:222::-;26872:34;26868:1;26860:6;26856:14;26849:58;26941:5;26936:2;26928:6;26924:15;26917:30;26732:222;:::o;26960:366::-;27102:3;27123:67;27187:2;27182:3;27123:67;:::i;:::-;27116:74;;27199:93;27288:3;27199:93;:::i;:::-;27317:2;27312:3;27308:12;27301:19;;26960:366;;;:::o;27332:419::-;27498:4;27536:2;27525:9;27521:18;27513:26;;27585:9;27579:4;27575:20;27571:1;27560:9;27556:17;27549:47;27613:131;27739:4;27613:131;:::i;:::-;27605:139;;27332:419;;;:::o;27757:172::-;27897:24;27893:1;27885:6;27881:14;27874:48;27757:172;:::o;27935:366::-;28077:3;28098:67;28162:2;28157:3;28098:67;:::i;:::-;28091:74;;28174:93;28263:3;28174:93;:::i;:::-;28292:2;28287:3;28283:12;28276:19;;27935:366;;;:::o;28307:419::-;28473:4;28511:2;28500:9;28496:18;28488:26;;28560:9;28554:4;28550:20;28546:1;28535:9;28531:17;28524:47;28588:131;28714:4;28588:131;:::i;:::-;28580:139;;28307:419;;;:::o;28732:297::-;28872:34;28868:1;28860:6;28856:14;28849:58;28941:34;28936:2;28928:6;28924:15;28917:59;29010:11;29005:2;28997:6;28993:15;28986:36;28732:297;:::o;29035:366::-;29177:3;29198:67;29262:2;29257:3;29198:67;:::i;:::-;29191:74;;29274:93;29363:3;29274:93;:::i;:::-;29392:2;29387:3;29383:12;29376:19;;29035:366;;;:::o;29407:419::-;29573:4;29611:2;29600:9;29596:18;29588:26;;29660:9;29654:4;29650:20;29646:1;29635:9;29631:17;29624:47;29688:131;29814:4;29688:131;:::i;:::-;29680:139;;29407:419;;;:::o;29832:235::-;29972:34;29968:1;29960:6;29956:14;29949:58;30041:18;30036:2;30028:6;30024:15;30017:43;29832:235;:::o;30073:366::-;30215:3;30236:67;30300:2;30295:3;30236:67;:::i;:::-;30229:74;;30312:93;30401:3;30312:93;:::i;:::-;30430:2;30425:3;30421:12;30414:19;;30073:366;;;:::o;30445:419::-;30611:4;30649:2;30638:9;30634:18;30626:26;;30698:9;30692:4;30688:20;30684:1;30673:9;30669:17;30662:47;30726:131;30852:4;30726:131;:::i;:::-;30718:139;;30445:419;;;:::o;30870:169::-;31010:21;31006:1;30998:6;30994:14;30987:45;30870:169;:::o;31045:366::-;31187:3;31208:67;31272:2;31267:3;31208:67;:::i;:::-;31201:74;;31284:93;31373:3;31284:93;:::i;:::-;31402:2;31397:3;31393:12;31386:19;;31045:366;;;:::o;31417:419::-;31583:4;31621:2;31610:9;31606:18;31598:26;;31670:9;31664:4;31660:20;31656:1;31645:9;31641:17;31634:47;31698:131;31824:4;31698:131;:::i;:::-;31690:139;;31417:419;;;:::o;31842:236::-;31982:34;31978:1;31970:6;31966:14;31959:58;32051:19;32046:2;32038:6;32034:15;32027:44;31842:236;:::o;32084:366::-;32226:3;32247:67;32311:2;32306:3;32247:67;:::i;:::-;32240:74;;32323:93;32412:3;32323:93;:::i;:::-;32441:2;32436:3;32432:12;32425:19;;32084:366;;;:::o;32456:419::-;32622:4;32660:2;32649:9;32645:18;32637:26;;32709:9;32703:4;32699:20;32695:1;32684:9;32680:17;32673:47;32737:131;32863:4;32737:131;:::i;:::-;32729:139;;32456:419;;;:::o;32881:191::-;32921:4;32941:20;32959:1;32941:20;:::i;:::-;32936:25;;32975:20;32993:1;32975:20;:::i;:::-;32970:25;;33014:1;33011;33008:8;33005:34;;;33019:18;;:::i;:::-;33005:34;33064:1;33061;33057:9;33049:17;;32881:191;;;;:::o;33078:147::-;33179:11;33216:3;33201:18;;33078:147;;;;:::o;33231:114::-;;:::o;33351:398::-;33510:3;33531:83;33612:1;33607:3;33531:83;:::i;:::-;33524:90;;33623:93;33712:3;33623:93;:::i;:::-;33741:1;33736:3;33732:11;33725:18;;33351:398;;;:::o;33755:379::-;33939:3;33961:147;34104:3;33961:147;:::i;:::-;33954:154;;34125:3;34118:10;;33755:379;;;:::o;34140:442::-;34289:4;34327:2;34316:9;34312:18;34304:26;;34340:71;34408:1;34397:9;34393:17;34384:6;34340:71;:::i;:::-;34421:72;34489:2;34478:9;34474:18;34465:6;34421:72;:::i;:::-;34503;34571:2;34560:9;34556:18;34547:6;34503:72;:::i;:::-;34140:442;;;;;;:::o;34588:143::-;34645:5;34676:6;34670:13;34661:22;;34692:33;34719:5;34692:33;:::i;:::-;34588:143;;;;:::o;34737:351::-;34807:6;34856:2;34844:9;34835:7;34831:23;34827:32;34824:119;;;34862:79;;:::i;:::-;34824:119;34982:1;35007:64;35063:7;35054:6;35043:9;35039:22;35007:64;:::i;:::-;34997:74;;34953:128;34737:351;;;;:::o;35094:220::-;35234:34;35230:1;35222:6;35218:14;35211:58;35303:3;35298:2;35290:6;35286:15;35279:28;35094:220;:::o;35320:366::-;35462:3;35483:67;35547:2;35542:3;35483:67;:::i;:::-;35476:74;;35559:93;35648:3;35559:93;:::i;:::-;35677:2;35672:3;35668:12;35661:19;;35320:366;;;:::o;35692:419::-;35858:4;35896:2;35885:9;35881:18;35873:26;;35945:9;35939:4;35935:20;35931:1;35920:9;35916:17;35909:47;35973:131;36099:4;35973:131;:::i;:::-;35965:139;;35692:419;;;:::o;36117:180::-;36165:77;36162:1;36155:88;36262:4;36259:1;36252:15;36286:4;36283:1;36276:15;36303:180;36351:77;36348:1;36341:88;36448:4;36445:1;36438:15;36472:4;36469:1;36462:15;36489:143;36546:5;36577:6;36571:13;36562:22;;36593:33;36620:5;36593:33;:::i;:::-;36489:143;;;;:::o;36638:351::-;36708:6;36757:2;36745:9;36736:7;36732:23;36728:32;36725:119;;;36763:79;;:::i;:::-;36725:119;36883:1;36908:64;36964:7;36955:6;36944:9;36940:22;36908:64;:::i;:::-;36898:74;;36854:128;36638:351;;;;:::o;36995:85::-;37040:7;37069:5;37058:16;;36995:85;;;:::o;37086:158::-;37144:9;37177:61;37195:42;37204:32;37230:5;37204:32;:::i;:::-;37195:42;:::i;:::-;37177:61;:::i;:::-;37164:74;;37086:158;;;:::o;37250:147::-;37345:45;37384:5;37345:45;:::i;:::-;37340:3;37333:58;37250:147;;:::o;37403:114::-;37470:6;37504:5;37498:12;37488:22;;37403:114;;;:::o;37523:184::-;37622:11;37656:6;37651:3;37644:19;37696:4;37691:3;37687:14;37672:29;;37523:184;;;;:::o;37713:132::-;37780:4;37803:3;37795:11;;37833:4;37828:3;37824:14;37816:22;;37713:132;;;:::o;37851:108::-;37928:24;37946:5;37928:24;:::i;:::-;37923:3;37916:37;37851:108;;:::o;37965:179::-;38034:10;38055:46;38097:3;38089:6;38055:46;:::i;:::-;38133:4;38128:3;38124:14;38110:28;;37965:179;;;;:::o;38150:113::-;38220:4;38252;38247:3;38243:14;38235:22;;38150:113;;;:::o;38299:732::-;38418:3;38447:54;38495:5;38447:54;:::i;:::-;38517:86;38596:6;38591:3;38517:86;:::i;:::-;38510:93;;38627:56;38677:5;38627:56;:::i;:::-;38706:7;38737:1;38722:284;38747:6;38744:1;38741:13;38722:284;;;38823:6;38817:13;38850:63;38909:3;38894:13;38850:63;:::i;:::-;38843:70;;38936:60;38989:6;38936:60;:::i;:::-;38926:70;;38782:224;38769:1;38766;38762:9;38757:14;;38722:284;;;38726:14;39022:3;39015:10;;38423:608;;;38299:732;;;;:::o;39037:831::-;39300:4;39338:3;39327:9;39323:19;39315:27;;39352:71;39420:1;39409:9;39405:17;39396:6;39352:71;:::i;:::-;39433:80;39509:2;39498:9;39494:18;39485:6;39433:80;:::i;:::-;39560:9;39554:4;39550:20;39545:2;39534:9;39530:18;39523:48;39588:108;39691:4;39682:6;39588:108;:::i;:::-;39580:116;;39706:72;39774:2;39763:9;39759:18;39750:6;39706:72;:::i;:::-;39788:73;39856:3;39845:9;39841:19;39832:6;39788:73;:::i;:::-;39037:831;;;;;;;;:::o;39874:807::-;40123:4;40161:3;40150:9;40146:19;40138:27;;40175:71;40243:1;40232:9;40228:17;40219:6;40175:71;:::i;:::-;40256:72;40324:2;40313:9;40309:18;40300:6;40256:72;:::i;:::-;40338:80;40414:2;40403:9;40399:18;40390:6;40338:80;:::i;:::-;40428;40504:2;40493:9;40489:18;40480:6;40428:80;:::i;:::-;40518:73;40586:3;40575:9;40571:19;40562:6;40518:73;:::i;:::-;40601;40669:3;40658:9;40654:19;40645:6;40601:73;:::i;:::-;39874:807;;;;;;;;;:::o;40687:663::-;40775:6;40783;40791;40840:2;40828:9;40819:7;40815:23;40811:32;40808:119;;;40846:79;;:::i;:::-;40808:119;40966:1;40991:64;41047:7;41038:6;41027:9;41023:22;40991:64;:::i;:::-;40981:74;;40937:128;41104:2;41130:64;41186:7;41177:6;41166:9;41162:22;41130:64;:::i;:::-;41120:74;;41075:129;41243:2;41269:64;41325:7;41316:6;41305:9;41301:22;41269:64;:::i;:::-;41259:74;;41214:129;40687:663;;;;;:::o

Swarm Source

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