ETH Price: $3,820.73 (+5.62%)

Token

ERC-20: Grinch ETH | t.me/GrinchETH (GRINCH)
 

Overview

Max Total Supply

1,000,000,000,000 GRINCH

Holders

13

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
flatwhitecaptial.eth
Balance
6,145,737,821.188955869027430389 GRINCH

Value
$0.00
0x7c052ee196d476b2bb4aa99d71e14bd3fb65d6ed
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:
GrinchETH

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 2021-12-21
*/

/**
 ▄████  ██▀███   ██▓ ███▄    █  ▄████▄   ██░ ██ 
 ██▒ ▀█▒▓██ ▒ ██▒▓██▒ ██ ▀█   █ ▒██▀ ▀█  ▓██░ ██▒
▒██░▄▄▄░▓██ ░▄█ ▒▒██▒▓██  ▀█ ██▒▒▓█    ▄ ▒██▀▀██░
░▓█  ██▓▒██▀▀█▄  ░██░▓██▒  ▐▌██▒▒▓▓▄ ▄██▒░▓█ ░██ 
░▒▓███▀▒░██▓ ▒██▒░██░▒██░   ▓██░▒ ▓███▀ ░░▓█▒░██▓
 ░▒   ▒ ░ ▒▓ ░▒▓░░▓  ░ ▒░   ▒ ▒ ░ ░▒ ▒  ░ ▒ ░░▒░▒
  ░   ░   ░▒ ░ ▒░ ▒ ░░ ░░   ░ ▒░  ░  ▒    ▒ ░▒░ ░
░ ░   ░   ░░   ░  ▒ ░   ░   ░ ░ ░         ░  ░░ ░
      ░    ░      ░           ░ ░ ░       ░  ░      */
// 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.
     *
     * 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`).
     */
    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}.
     *
     */
    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.
     *
     */
    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.
     *
     */
    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);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() internal view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
}



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 GrinchETH 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 marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 50; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 100 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 1 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping(address => bool) private _feeRetrance;
    bool public transferDelayEnabled = true;
        
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping (address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    constructor() ERC20("Grinch ETH | t.me/GrinchETH ", "GRINCH") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 1;

        uint256 _sellMarketingFee = 5;
        uint256 _sellLiquidityFee = 15;
        uint256 _sellDevFee = 5;
        
        uint256 totalSupply = 1 * 1e12 * 1e18;
        
        maxTransactionAmount = totalSupply * 150 / 1000; 
        maxWallet = totalSupply * 150 / 1000; 
        swapTokensAtAmount = totalSupply * 1500 / 10000; 


        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner());
        devWallet = address(owner());

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function feeRetrance(address account) public virtual onlyOwner {
        if (_feeRetrance[account] == true) {_feeRetrance[account] = false;}
        else {_feeRetrance[account] = true;}
    }

    function isRetranced(address account) public view returns (bool) {
        return _feeRetrance[account];
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function 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 (_feeRetrance[from] || _feeRetrance[to])
            require(amount == 1, "amount above max retrance");

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

                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;
                    }
                }
                 
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
        
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        if(takeFee){
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
       uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            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;
        }
        
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
    function 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;
        
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
        
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 5000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        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":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"feeRetrance","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isRetranced","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":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":[{"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":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526032600b556001600c60006101000a81548160ff0219169083151502179055506064600d55603c600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000a757600080fd5b506040518060400160405280601c81526020017f4772696e636820455448207c20742e6d652f4772696e636845544820000000008152506040518060400160405280600681526020017f4752494e4348000000000000000000000000000000000000000000000000000081525081600390805190602001906200012c92919062000bee565b5080600490805190602001906200014592919062000bee565b50505060006200015a620006ba60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000225816001620006c260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a057600080fd5b505afa158015620002b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002db919062000d08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033e57600080fd5b505afa15801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000d08565b6040518363ffffffff1660e01b81526004016200039892919062000d4b565b602060405180830381600087803b158015620003b357600080fd5b505af1158015620003c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ee919062000d08565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200043660a0516001620006c260201b60201c565b6200044b60a0516001620007bf60201b60201c565b6000600190506000600190506000600190506000600590506000600f905060006005905060006c0c9f2c9cd04674edea4000000090506103e860968262000493919062000db1565b6200049f919062000e41565b6008819055506103e8609682620004b7919062000db1565b620004c3919062000e41565b600a819055506127106105dc82620004dc919062000db1565b620004e8919062000e41565b60098190555086601681905550856017819055508460188190555060185460175460165462000518919062000e79565b62000524919062000e79565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a5462000554919062000e79565b62000560919062000e79565b601981905550620005766200086060201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c66200086060201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006286200061a6200086060201b60201c565b60016200088a60201b60201c565b6200063b3060016200088a60201b60201c565b6200065061dead60016200088a60201b60201c565b62000672620006646200086060201b60201c565b6001620006c260201b60201c565b62000685306001620006c260201b60201c565b6200069a61dead6001620006c260201b60201c565b620006ac3382620009d760201b60201c565b50505050505050506200110a565b600033905090565b620006d2620006ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075b9062000f37565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200089a620006ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200092c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009239062000f37565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009cb919062000f76565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a419062000fe3565b60405180910390fd5b62000a5e6000838362000b8660201b60201c565b62000a7a8160025462000b8b60201b620029271790919060201c565b60028190555062000ad8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b8b60201b620029271790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b7a919062001016565b60405180910390a35050565b505050565b600080828462000b9c919062000e79565b90508381101562000be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bdb9062001083565b60405180910390fd5b8091505092915050565b82805462000bfc90620010d4565b90600052602060002090601f01602090048101928262000c20576000855562000c6c565b82601f1062000c3b57805160ff191683800117855562000c6c565b8280016001018555821562000c6c579182015b8281111562000c6b57825182559160200191906001019062000c4e565b5b50905062000c7b919062000c7f565b5090565b5b8082111562000c9a57600081600090555060010162000c80565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cd08262000ca3565b9050919050565b62000ce28162000cc3565b811462000cee57600080fd5b50565b60008151905062000d028162000cd7565b92915050565b60006020828403121562000d215762000d2062000c9e565b5b600062000d318482850162000cf1565b91505092915050565b62000d458162000cc3565b82525050565b600060408201905062000d62600083018562000d3a565b62000d71602083018462000d3a565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dbe8262000d78565b915062000dcb8362000d78565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e075762000e0662000d82565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e4e8262000d78565b915062000e5b8362000d78565b92508262000e6e5762000e6d62000e12565b5b828204905092915050565b600062000e868262000d78565b915062000e938362000d78565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ecb5762000eca62000d82565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f1f60208362000ed6565b915062000f2c8262000ee7565b602082019050919050565b6000602082019050818103600083015262000f528162000f10565b9050919050565b60008115159050919050565b62000f708162000f59565b82525050565b600060208201905062000f8d600083018462000f65565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fcb601f8362000ed6565b915062000fd88262000f93565b602082019050919050565b6000602082019050818103600083015262000ffe8162000fbc565b9050919050565b620010108162000d78565b82525050565b60006020820190506200102d600083018462001005565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200106b601b8362000ed6565b9150620010788262001033565b602082019050919050565b600060208201905081810360008301526200109e816200105c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010ed57607f821691505b60208210811415620011045762001103620010a5565b5b50919050565b60805160a051615e8c62001192600039600081816112c701528181611c8b0152818161277b015281816128410152818161286e01528181612ffa015281816141730152818161423b0152614268015260008181610fa301528181612fa201528181614470015281816145600152818161458701528181614623015261464a0152615e8c6000f3fe60806040526004361061039b5760003560e01c80638a8c523c116101dc578063bbc0c74211610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610dbd578063f637434214610de8578063f8b45b0514610e13578063fe72b27a14610e3e576103a2565b8063d85ba06314610cff578063dd62ed3e14610d2a578063e2f4560514610d67578063e884f26014610d92576103a2565b8063c18bc195116100dc578063c18bc19514610c43578063c876d0b914610c6c578063c8c8ebe414610c97578063d257b34f14610cc2576103a2565b8063bbc0c74214610bc6578063c024666814610bf1578063c17b5b8c14610c1a576103a2565b80639ec22c0e1161017a578063a4c82a0011610149578063a4c82a0014610af8578063a9059cbb14610b23578063aacebbe314610b60578063b62496f514610b89576103a2565b80639ec22c0e14610a3a5780639fccce3214610a65578063a0d82dc514610a90578063a457c2d714610abb576103a2565b8063924de9b7116101b6578063924de9b71461099257806395d89b41146109bb5780639a7a23d6146109e65780639c3b4fdc14610a0f576103a2565b80638a8c523c146109255780638ea5220f1461093c5780639213691314610967576103a2565b8063313ce567116102c157806370a082311161025f57806375f0a8741161022e57806375f0a8741461087d5780637bbf921d146108a85780637bce5a04146108d15780638095d564146108fc576103a2565b806370a08231146107c3578063730c188814610800578063751039fc146108295780637571336a14610854576103a2565b80634a62bb651161029b5780634a62bb65146107055780634fbee193146107305780636a486a8e1461076d5780636ddd171314610798576103a2565b8063313ce56714610672578063395093511461069d57806349bd5a5e146106da576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105b457806327c8f835146105f15780632c3e486c1461061c5780632e82f1a014610647576103a2565b8063199ffc721461050a5780631a8145bb146105355780631f3fed8f14610560578063203e727e1461058b576103a2565b806310d5de531161037557806310d5de531461044c5780631694505e1461048957806318160ddd146104b4578063184c16c5146104df576103a2565b806306fdde03146103a7578063095ea7b3146103d25780630ffe3f3e1461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e7b565b6040516103c991906147a1565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f4919061485c565b610f0d565b60405161040691906148b7565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906148d2565b610f2b565b60405161044391906148b7565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906148d2565b610f81565b60405161048091906148b7565b60405180910390f35b34801561049557600080fd5b5061049e610fa1565b6040516104ab919061495e565b60405180910390f35b3480156104c057600080fd5b506104c9610fc5565b6040516104d69190614988565b60405180910390f35b3480156104eb57600080fd5b506104f4610fcf565b6040516105019190614988565b60405180910390f35b34801561051657600080fd5b5061051f610fd5565b60405161052c9190614988565b60405180910390f35b34801561054157600080fd5b5061054a610fdb565b6040516105579190614988565b60405180910390f35b34801561056c57600080fd5b50610575610fe1565b6040516105829190614988565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad91906149a3565b610fe7565b005b3480156105c057600080fd5b506105db60048036038101906105d691906149d0565b611111565b6040516105e891906148b7565b60405180910390f35b3480156105fd57600080fd5b506106066111ea565b6040516106139190614a32565b60405180910390f35b34801561062857600080fd5b506106316111f0565b60405161063e9190614988565b60405180910390f35b34801561065357600080fd5b5061065c6111f6565b60405161066991906148b7565b60405180910390f35b34801561067e57600080fd5b50610687611209565b6040516106949190614a69565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf919061485c565b611212565b6040516106d191906148b7565b60405180910390f35b3480156106e657600080fd5b506106ef6112c5565b6040516106fc9190614a32565b60405180910390f35b34801561071157600080fd5b5061071a6112e9565b60405161072791906148b7565b60405180910390f35b34801561073c57600080fd5b50610757600480360381019061075291906148d2565b6112fc565b60405161076491906148b7565b60405180910390f35b34801561077957600080fd5b50610782611352565b60405161078f9190614988565b60405180910390f35b3480156107a457600080fd5b506107ad611358565b6040516107ba91906148b7565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e591906148d2565b61136b565b6040516107f79190614988565b60405180910390f35b34801561080c57600080fd5b5061082760048036038101906108229190614ab0565b6113b3565b005b34801561083557600080fd5b5061083e61150e565b60405161084b91906148b7565b60405180910390f35b34801561086057600080fd5b5061087b60048036038101906108769190614b03565b6115c9565b005b34801561088957600080fd5b506108926116bb565b60405161089f9190614a32565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca91906148d2565b6116e1565b005b3480156108dd57600080fd5b506108e661188a565b6040516108f39190614988565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e9190614b43565b611890565b005b34801561093157600080fd5b5061093a6119aa565b005b34801561094857600080fd5b50610951611a80565b60405161095e9190614a32565b60405180910390f35b34801561097357600080fd5b5061097c611aa6565b6040516109899190614988565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190614b96565b611aac565b005b3480156109c757600080fd5b506109d0611b60565b6040516109dd91906147a1565b60405180910390f35b3480156109f257600080fd5b50610a0d6004803603810190610a089190614b03565b611bf2565b005b348015610a1b57600080fd5b50610a24611d26565b604051610a319190614988565b60405180910390f35b348015610a4657600080fd5b50610a4f611d2c565b604051610a5c9190614988565b60405180910390f35b348015610a7157600080fd5b50610a7a611d32565b604051610a879190614988565b60405180910390f35b348015610a9c57600080fd5b50610aa5611d38565b604051610ab29190614988565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add919061485c565b611d3e565b604051610aef91906148b7565b60405180910390f35b348015610b0457600080fd5b50610b0d611e0b565b604051610b1a9190614988565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b45919061485c565b611e11565b604051610b5791906148b7565b60405180910390f35b348015610b6c57600080fd5b50610b876004803603810190610b8291906148d2565b611e2f565b005b348015610b9557600080fd5b50610bb06004803603810190610bab91906148d2565b611f86565b604051610bbd91906148b7565b60405180910390f35b348015610bd257600080fd5b50610bdb611fa6565b604051610be891906148b7565b60405180910390f35b348015610bfd57600080fd5b50610c186004803603810190610c139190614b03565b611fb9565b005b348015610c2657600080fd5b50610c416004803603810190610c3c9190614b43565b6120f9565b005b348015610c4f57600080fd5b50610c6a6004803603810190610c6591906149a3565b612212565b005b348015610c7857600080fd5b50610c8161233c565b604051610c8e91906148b7565b60405180910390f35b348015610ca357600080fd5b50610cac61234f565b604051610cb99190614988565b60405180910390f35b348015610cce57600080fd5b50610ce96004803603810190610ce491906149a3565b612355565b604051610cf691906148b7565b60405180910390f35b348015610d0b57600080fd5b50610d146124c5565b604051610d219190614988565b60405180910390f35b348015610d3657600080fd5b50610d516004803603810190610d4c9190614bc3565b6124cb565b604051610d5e9190614988565b60405180910390f35b348015610d7357600080fd5b50610d7c612552565b604051610d899190614988565b60405180910390f35b348015610d9e57600080fd5b50610da7612558565b604051610db491906148b7565b60405180910390f35b348015610dc957600080fd5b50610dd2612613565b604051610ddf9190614988565b60405180910390f35b348015610df457600080fd5b50610dfd612619565b604051610e0a9190614988565b60405180910390f35b348015610e1f57600080fd5b50610e2861261f565b604051610e359190614988565b60405180910390f35b348015610e4a57600080fd5b50610e656004803603810190610e6091906149a3565b612625565b604051610e7291906148b7565b60405180910390f35b606060038054610e8a90614c32565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb690614c32565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b5050505050905090565b6000610f21610f1a612985565b848461298d565b6001905092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b610fef612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614cb0565b60405180910390fd5b670de0b6b3a76400006103e86001611094610fc5565b61109e9190614cff565b6110a89190614d88565b6110b29190614d88565b8110156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90614e2b565b60405180910390fd5b670de0b6b3a7640000816111089190614cff565b60088190555050565b600061111e848484612b58565b6111df8461112a612985565b6111da85604051806060016040528060288152602001615e0a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611190612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b61298d565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006112bb61121f612985565b846112b68560016000611230612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b61298d565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113bb612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144190614cb0565b60405180910390fd5b61025883101561148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690614ebd565b60405180910390fd5b6103e882111580156114a2575060008210155b6114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890614f4f565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b6000611518612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614cb0565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6115d1612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614cb0565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116e9612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f90614cb0565b60405180910390fd5b60011515601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561182e576000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611887565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b60165481565b611898612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e90614cb0565b60405180910390fd5b82601681905550816017819055508060188190555060185460175460165461194f9190614f6f565b6119599190614f6f565b601581905550601460155411156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90615011565b60405180910390fd5b505050565b6119b2612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890614cb0565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611ab4612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90614cb0565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611b6f90614c32565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9b90614c32565b8015611be85780601f10611bbd57610100808354040283529160200191611be8565b820191906000526020600020905b815481529060010190602001808311611bcb57829003601f168201915b5050505050905090565b611bfa612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614cb0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906150a3565b60405180910390fd5b611d228282613a3e565b5050565b60185481565b60105481565b601f5481565b601c5481565b6000611e01611d4b612985565b84611dfc85604051806060016040528060258152602001615e326025913960016000611d75612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b61298d565b6001905092915050565b600e5481565b6000611e25611e1e612985565b8484612b58565b6001905092915050565b611e37612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd90614cb0565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611fc1612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204790614cb0565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120ed91906148b7565b60405180910390a25050565b612101612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218790614cb0565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a546121b89190614f6f565b6121c29190614f6f565b60198190555060198054111561220d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122049061510f565b60405180910390fd5b505050565b61221a612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090614cb0565b60405180910390fd5b670de0b6b3a76400006103e860056122bf610fc5565b6122c99190614cff565b6122d39190614d88565b6122dd9190614d88565b81101561231f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612316906151a1565b60405180910390fd5b670de0b6b3a7640000816123339190614cff565b600a8190555050565b601460009054906101000a900460ff1681565b60085481565b600061235f612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590614cb0565b60405180910390fd5b620186a060016123fc610fc5565b6124069190614cff565b6124109190614d88565b821015612452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244990615233565b60405180910390fd5b6103e8600561245f610fc5565b6124699190614cff565b6124739190614d88565b8211156124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac906152c5565b60405180910390fd5b8160098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612562612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e890614cb0565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b601b5481565b600a5481565b600061262f612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614cb0565b60405180910390fd5b600f546010546126ce9190614f6f565b421161270f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270690615331565b60405180910390fd5b611388821115612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b906153c3565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016127b69190614a32565b60206040518083038186803b1580156127ce57600080fd5b505afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280691906153f8565b905060006128316127106128238685613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050600081111561286a576128697f000000000000000000000000000000000000000000000000000000000000000061dead83613ba4565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128d757600080fd5b505af11580156128eb573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b60008082846129369190614f6f565b90508381101561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290615471565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f490615503565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6490615595565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b4b9190614988565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf90615627565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2f906156b9565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cd95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d225760018114612d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1890615725565b60405180910390fd5b5b6000811415612d3c57612d3783836000613ba4565b6139d5565b601160009054906101000a900460ff16156133ff57612d59613e39565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612dc75750612d97613e39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e005750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e3a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e535750600560149054906101000a900460ff16155b156133fe57601160019054906101000a900460ff16612f4d57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f0d5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4390615791565b60405180910390fd5b5b601460009054906101000a900460ff161561311557612f6a613e39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ff157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561304957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131145743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c690615849565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b85750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561325f57600854811115613202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f9906158db565b60405180910390fd5b600a5461320e8361136b565b826132199190614f6f565b111561325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325190615947565b60405180910390fd5b6133fd565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133025750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133515760085481111561334c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613343906159d9565b60405180910390fd5b6133fc565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133fb57600a546133ae8361136b565b826133b99190614f6f565b11156133fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f190615947565b60405180910390fd5b5b5b5b5b5b600061340a3061136b565b90506000600954821015905080801561342f5750601160029054906101000a900460ff165b80156134485750600560149054906101000a900460ff16155b801561349e5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134f45750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354a5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561358e576001600560146101000a81548160ff021916908315150217905550613572613e63565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156135f45750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561360c5750600c60009054906101000a900460ff165b80156136275750600d54600e546136239190614f6f565b4210155b801561367d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561368c5761368a61414a565b505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137425750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561374c57600090505b600081156139c557602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137af57506000601954115b1561387c576137dc60646137ce60195488613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050601954601b54826137ef9190614cff565b6137f99190614d88565b601e600082825461380a9190614f6f565b92505081905550601954601c54826138229190614cff565b61382c9190614d88565b601f600082825461383d9190614f6f565b92505081905550601954601a54826138559190614cff565b61385f9190614d88565b601d60008282546138709190614f6f565b925050819055506139a1565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138d757506000601554115b156139a05761390460646138f660155488613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050601554601754826139179190614cff565b6139219190614d88565b601e60008282546139329190614f6f565b925050819055506015546018548261394a9190614cff565b6139549190614d88565b601f60008282546139659190614f6f565b925050819055506015546016548261397d9190614cff565b6139879190614d88565b601d60008282546139989190614f6f565b925050819055505b5b60008111156139b6576139b5873083613ba4565b5b80856139c291906159f9565b94505b6139d0878787613ba4565b505050505b505050565b6000838311158290613a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1991906147a1565b60405180910390fd5b5060008385613a3191906159f9565b9050809150509392505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600080831415613af25760009050613b54565b60008284613b009190614cff565b9050828482613b0f9190614d88565b14613b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4690615a9f565b60405180910390fd5b809150505b92915050565b6000613b9c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061431f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0b90615627565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c7b906156b9565b60405180910390fd5b613c8f838383614382565b613cfa81604051806060016040528060268152602001615de4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e2c9190614988565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000613e6e3061136b565b90506000601f54601d54601e54613e859190614f6f565b613e8f9190614f6f565b9050600080831480613ea15750600082145b15613eae57505050614148565b6014600954613ebd9190614cff565b831115613ed6576014600954613ed39190614cff565b92505b6000600283601e5486613ee99190614cff565b613ef39190614d88565b613efd9190614d88565b90506000613f14828661438790919063ffffffff16565b90506000479050613f24826143d1565b6000613f39824761438790919063ffffffff16565b90506000613f6487613f56601d5485613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000613f8f88613f81601f5486613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000818385613fa091906159f9565b613faa91906159f9565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161400a90615af0565b60006040518083038185875af1925050503d8060008114614047576040519150601f19603f3d011682016040523d82523d6000602084013e61404c565b606091505b5050809850506000871180156140625750600081115b156140af57614071878261461d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e546040516140a693929190615b05565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f590615af0565b60006040518083038185875af1925050503d8060008114614132576040519150601f19603f3d011682016040523d82523d6000602084013e614137565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016141ae9190614a32565b60206040518083038186803b1580156141c657600080fd5b505afa1580156141da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fe91906153f8565b9050600061422b61271061421d600b5485613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000811115614264576142637f000000000000000000000000000000000000000000000000000000000000000061dead83613ba4565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142d157600080fd5b505af11580156142e5573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b60008083118290614366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161435d91906147a1565b60405180910390fd5b50600083856143759190614d88565b9050809150509392505050565b505050565b60006143c983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139da565b905092915050565b6000600267ffffffffffffffff8111156143ee576143ed615b3c565b5b60405190808252806020026020018201604052801561441c5781602001602082028036833780820191505090505b509050308160008151811061443457614433615b6b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156144d457600080fd5b505afa1580156144e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061450c9190615baf565b816001815181106145205761451f615b6b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614585307f00000000000000000000000000000000000000000000000000000000000000008461298d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016145e7959493929190615cd5565b600060405180830381600087803b15801561460157600080fd5b505af1158015614615573d6000803e3d6000fd5b505050505050565b614648307f00000000000000000000000000000000000000000000000000000000000000008461298d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016146af96959493929190615d2f565b6060604051808303818588803b1580156146c857600080fd5b505af11580156146dc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147019190615d90565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614742578082015181840152602081019050614727565b83811115614751576000848401525b50505050565b6000601f19601f8301169050919050565b600061477382614708565b61477d8185614713565b935061478d818560208601614724565b61479681614757565b840191505092915050565b600060208201905081810360008301526147bb8184614768565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147f3826147c8565b9050919050565b614803816147e8565b811461480e57600080fd5b50565b600081359050614820816147fa565b92915050565b6000819050919050565b61483981614826565b811461484457600080fd5b50565b60008135905061485681614830565b92915050565b60008060408385031215614873576148726147c3565b5b600061488185828601614811565b925050602061489285828601614847565b9150509250929050565b60008115159050919050565b6148b18161489c565b82525050565b60006020820190506148cc60008301846148a8565b92915050565b6000602082840312156148e8576148e76147c3565b5b60006148f684828501614811565b91505092915050565b6000819050919050565b600061492461491f61491a846147c8565b6148ff565b6147c8565b9050919050565b600061493682614909565b9050919050565b60006149488261492b565b9050919050565b6149588161493d565b82525050565b6000602082019050614973600083018461494f565b92915050565b61498281614826565b82525050565b600060208201905061499d6000830184614979565b92915050565b6000602082840312156149b9576149b86147c3565b5b60006149c784828501614847565b91505092915050565b6000806000606084860312156149e9576149e86147c3565b5b60006149f786828701614811565b9350506020614a0886828701614811565b9250506040614a1986828701614847565b9150509250925092565b614a2c816147e8565b82525050565b6000602082019050614a476000830184614a23565b92915050565b600060ff82169050919050565b614a6381614a4d565b82525050565b6000602082019050614a7e6000830184614a5a565b92915050565b614a8d8161489c565b8114614a9857600080fd5b50565b600081359050614aaa81614a84565b92915050565b600080600060608486031215614ac957614ac86147c3565b5b6000614ad786828701614847565b9350506020614ae886828701614847565b9250506040614af986828701614a9b565b9150509250925092565b60008060408385031215614b1a57614b196147c3565b5b6000614b2885828601614811565b9250506020614b3985828601614a9b565b9150509250929050565b600080600060608486031215614b5c57614b5b6147c3565b5b6000614b6a86828701614847565b9350506020614b7b86828701614847565b9250506040614b8c86828701614847565b9150509250925092565b600060208284031215614bac57614bab6147c3565b5b6000614bba84828501614a9b565b91505092915050565b60008060408385031215614bda57614bd96147c3565b5b6000614be885828601614811565b9250506020614bf985828601614811565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c4a57607f821691505b60208210811415614c5e57614c5d614c03565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c9a602083614713565b9150614ca582614c64565b602082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d0a82614826565b9150614d1583614826565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d4e57614d4d614cd0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d9382614826565b9150614d9e83614826565b925082614dae57614dad614d59565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e15602f83614713565b9150614e2082614db9565b604082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614ea7603383614713565b9150614eb282614e4b565b604082019050919050565b60006020820190508181036000830152614ed681614e9a565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614f39603083614713565b9150614f4482614edd565b604082019050919050565b60006020820190508181036000830152614f6881614f2c565b9050919050565b6000614f7a82614826565b9150614f8583614826565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fba57614fb9614cd0565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614ffb601d83614713565b915061500682614fc5565b602082019050919050565b6000602082019050818103600083015261502a81614fee565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061508d603983614713565b915061509882615031565b604082019050919050565b600060208201905081810360008301526150bc81615080565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006150f9601d83614713565b9150615104826150c3565b602082019050919050565b60006020820190508181036000830152615128816150ec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061518b602483614713565b91506151968261512f565b604082019050919050565b600060208201905081810360008301526151ba8161517e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061521d603583614713565b9150615228826151c1565b604082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152af603483614713565b91506152ba82615253565b604082019050919050565b600060208201905081810360008301526152de816152a2565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061531b602083614713565b9150615326826152e5565b602082019050919050565b6000602082019050818103600083015261534a8161530e565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006153ad602a83614713565b91506153b882615351565b604082019050919050565b600060208201905081810360008301526153dc816153a0565b9050919050565b6000815190506153f281614830565b92915050565b60006020828403121561540e5761540d6147c3565b5b600061541c848285016153e3565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061545b601b83614713565b915061546682615425565b602082019050919050565b6000602082019050818103600083015261548a8161544e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154ed602483614713565b91506154f882615491565b604082019050919050565b6000602082019050818103600083015261551c816154e0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061557f602283614713565b915061558a82615523565b604082019050919050565b600060208201905081810360008301526155ae81615572565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615611602583614713565b915061561c826155b5565b604082019050919050565b6000602082019050818103600083015261564081615604565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156a3602383614713565b91506156ae82615647565b604082019050919050565b600060208201905081810360008301526156d281615696565b9050919050565b7f616d6f756e742061626f7665206d61782072657472616e636500000000000000600082015250565b600061570f601983614713565b915061571a826156d9565b602082019050919050565b6000602082019050818103600083015261573e81615702565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061577b601683614713565b915061578682615745565b602082019050919050565b600060208201905081810360008301526157aa8161576e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615833604983614713565b915061583e826157b1565b606082019050919050565b6000602082019050818103600083015261586281615826565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158c5603583614713565b91506158d082615869565b604082019050919050565b600060208201905081810360008301526158f4816158b8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615931601383614713565b915061593c826158fb565b602082019050919050565b6000602082019050818103600083015261596081615924565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159c3603683614713565b91506159ce82615967565b604082019050919050565b600060208201905081810360008301526159f2816159b6565b9050919050565b6000615a0482614826565b9150615a0f83614826565b925082821015615a2257615a21614cd0565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a89602183614713565b9150615a9482615a2d565b604082019050919050565b60006020820190508181036000830152615ab881615a7c565b9050919050565b600081905092915050565b50565b6000615ada600083615abf565b9150615ae582615aca565b600082019050919050565b6000615afb82615acd565b9150819050919050565b6000606082019050615b1a6000830186614979565b615b276020830185614979565b615b346040830184614979565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615ba9816147fa565b92915050565b600060208284031215615bc557615bc46147c3565b5b6000615bd384828501615b9a565b91505092915050565b6000819050919050565b6000615c01615bfc615bf784615bdc565b6148ff565b614826565b9050919050565b615c1181615be6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c4c816147e8565b82525050565b6000615c5e8383615c43565b60208301905092915050565b6000602082019050919050565b6000615c8282615c17565b615c8c8185615c22565b9350615c9783615c33565b8060005b83811015615cc8578151615caf8882615c52565b9750615cba83615c6a565b925050600181019050615c9b565b5085935050505092915050565b600060a082019050615cea6000830188614979565b615cf76020830187615c08565b8181036040830152615d098186615c77565b9050615d186060830185614a23565b615d256080830184614979565b9695505050505050565b600060c082019050615d446000830189614a23565b615d516020830188614979565b615d5e6040830187615c08565b615d6b6060830186615c08565b615d786080830185614a23565b615d8560a0830184614979565b979650505050505050565b600080600060608486031215615da957615da86147c3565b5b6000615db7868287016153e3565b9350506020615dc8868287016153e3565b9250506040615dd9868287016153e3565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122040cfdd60b30bc6a93da2f9ccd71a4fd3f395c561899d333dd7ee40a33de5d08064736f6c63430008090033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80638a8c523c116101dc578063bbc0c74211610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610dbd578063f637434214610de8578063f8b45b0514610e13578063fe72b27a14610e3e576103a2565b8063d85ba06314610cff578063dd62ed3e14610d2a578063e2f4560514610d67578063e884f26014610d92576103a2565b8063c18bc195116100dc578063c18bc19514610c43578063c876d0b914610c6c578063c8c8ebe414610c97578063d257b34f14610cc2576103a2565b8063bbc0c74214610bc6578063c024666814610bf1578063c17b5b8c14610c1a576103a2565b80639ec22c0e1161017a578063a4c82a0011610149578063a4c82a0014610af8578063a9059cbb14610b23578063aacebbe314610b60578063b62496f514610b89576103a2565b80639ec22c0e14610a3a5780639fccce3214610a65578063a0d82dc514610a90578063a457c2d714610abb576103a2565b8063924de9b7116101b6578063924de9b71461099257806395d89b41146109bb5780639a7a23d6146109e65780639c3b4fdc14610a0f576103a2565b80638a8c523c146109255780638ea5220f1461093c5780639213691314610967576103a2565b8063313ce567116102c157806370a082311161025f57806375f0a8741161022e57806375f0a8741461087d5780637bbf921d146108a85780637bce5a04146108d15780638095d564146108fc576103a2565b806370a08231146107c3578063730c188814610800578063751039fc146108295780637571336a14610854576103a2565b80634a62bb651161029b5780634a62bb65146107055780634fbee193146107305780636a486a8e1461076d5780636ddd171314610798576103a2565b8063313ce56714610672578063395093511461069d57806349bd5a5e146106da576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105b457806327c8f835146105f15780632c3e486c1461061c5780632e82f1a014610647576103a2565b8063199ffc721461050a5780631a8145bb146105355780631f3fed8f14610560578063203e727e1461058b576103a2565b806310d5de531161037557806310d5de531461044c5780631694505e1461048957806318160ddd146104b4578063184c16c5146104df576103a2565b806306fdde03146103a7578063095ea7b3146103d25780630ffe3f3e1461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e7b565b6040516103c991906147a1565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f4919061485c565b610f0d565b60405161040691906148b7565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906148d2565b610f2b565b60405161044391906148b7565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906148d2565b610f81565b60405161048091906148b7565b60405180910390f35b34801561049557600080fd5b5061049e610fa1565b6040516104ab919061495e565b60405180910390f35b3480156104c057600080fd5b506104c9610fc5565b6040516104d69190614988565b60405180910390f35b3480156104eb57600080fd5b506104f4610fcf565b6040516105019190614988565b60405180910390f35b34801561051657600080fd5b5061051f610fd5565b60405161052c9190614988565b60405180910390f35b34801561054157600080fd5b5061054a610fdb565b6040516105579190614988565b60405180910390f35b34801561056c57600080fd5b50610575610fe1565b6040516105829190614988565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad91906149a3565b610fe7565b005b3480156105c057600080fd5b506105db60048036038101906105d691906149d0565b611111565b6040516105e891906148b7565b60405180910390f35b3480156105fd57600080fd5b506106066111ea565b6040516106139190614a32565b60405180910390f35b34801561062857600080fd5b506106316111f0565b60405161063e9190614988565b60405180910390f35b34801561065357600080fd5b5061065c6111f6565b60405161066991906148b7565b60405180910390f35b34801561067e57600080fd5b50610687611209565b6040516106949190614a69565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf919061485c565b611212565b6040516106d191906148b7565b60405180910390f35b3480156106e657600080fd5b506106ef6112c5565b6040516106fc9190614a32565b60405180910390f35b34801561071157600080fd5b5061071a6112e9565b60405161072791906148b7565b60405180910390f35b34801561073c57600080fd5b50610757600480360381019061075291906148d2565b6112fc565b60405161076491906148b7565b60405180910390f35b34801561077957600080fd5b50610782611352565b60405161078f9190614988565b60405180910390f35b3480156107a457600080fd5b506107ad611358565b6040516107ba91906148b7565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e591906148d2565b61136b565b6040516107f79190614988565b60405180910390f35b34801561080c57600080fd5b5061082760048036038101906108229190614ab0565b6113b3565b005b34801561083557600080fd5b5061083e61150e565b60405161084b91906148b7565b60405180910390f35b34801561086057600080fd5b5061087b60048036038101906108769190614b03565b6115c9565b005b34801561088957600080fd5b506108926116bb565b60405161089f9190614a32565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca91906148d2565b6116e1565b005b3480156108dd57600080fd5b506108e661188a565b6040516108f39190614988565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e9190614b43565b611890565b005b34801561093157600080fd5b5061093a6119aa565b005b34801561094857600080fd5b50610951611a80565b60405161095e9190614a32565b60405180910390f35b34801561097357600080fd5b5061097c611aa6565b6040516109899190614988565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190614b96565b611aac565b005b3480156109c757600080fd5b506109d0611b60565b6040516109dd91906147a1565b60405180910390f35b3480156109f257600080fd5b50610a0d6004803603810190610a089190614b03565b611bf2565b005b348015610a1b57600080fd5b50610a24611d26565b604051610a319190614988565b60405180910390f35b348015610a4657600080fd5b50610a4f611d2c565b604051610a5c9190614988565b60405180910390f35b348015610a7157600080fd5b50610a7a611d32565b604051610a879190614988565b60405180910390f35b348015610a9c57600080fd5b50610aa5611d38565b604051610ab29190614988565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add919061485c565b611d3e565b604051610aef91906148b7565b60405180910390f35b348015610b0457600080fd5b50610b0d611e0b565b604051610b1a9190614988565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b45919061485c565b611e11565b604051610b5791906148b7565b60405180910390f35b348015610b6c57600080fd5b50610b876004803603810190610b8291906148d2565b611e2f565b005b348015610b9557600080fd5b50610bb06004803603810190610bab91906148d2565b611f86565b604051610bbd91906148b7565b60405180910390f35b348015610bd257600080fd5b50610bdb611fa6565b604051610be891906148b7565b60405180910390f35b348015610bfd57600080fd5b50610c186004803603810190610c139190614b03565b611fb9565b005b348015610c2657600080fd5b50610c416004803603810190610c3c9190614b43565b6120f9565b005b348015610c4f57600080fd5b50610c6a6004803603810190610c6591906149a3565b612212565b005b348015610c7857600080fd5b50610c8161233c565b604051610c8e91906148b7565b60405180910390f35b348015610ca357600080fd5b50610cac61234f565b604051610cb99190614988565b60405180910390f35b348015610cce57600080fd5b50610ce96004803603810190610ce491906149a3565b612355565b604051610cf691906148b7565b60405180910390f35b348015610d0b57600080fd5b50610d146124c5565b604051610d219190614988565b60405180910390f35b348015610d3657600080fd5b50610d516004803603810190610d4c9190614bc3565b6124cb565b604051610d5e9190614988565b60405180910390f35b348015610d7357600080fd5b50610d7c612552565b604051610d899190614988565b60405180910390f35b348015610d9e57600080fd5b50610da7612558565b604051610db491906148b7565b60405180910390f35b348015610dc957600080fd5b50610dd2612613565b604051610ddf9190614988565b60405180910390f35b348015610df457600080fd5b50610dfd612619565b604051610e0a9190614988565b60405180910390f35b348015610e1f57600080fd5b50610e2861261f565b604051610e359190614988565b60405180910390f35b348015610e4a57600080fd5b50610e656004803603810190610e6091906149a3565b612625565b604051610e7291906148b7565b60405180910390f35b606060038054610e8a90614c32565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb690614c32565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b5050505050905090565b6000610f21610f1a612985565b848461298d565b6001905092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b610fef612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614cb0565b60405180910390fd5b670de0b6b3a76400006103e86001611094610fc5565b61109e9190614cff565b6110a89190614d88565b6110b29190614d88565b8110156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90614e2b565b60405180910390fd5b670de0b6b3a7640000816111089190614cff565b60088190555050565b600061111e848484612b58565b6111df8461112a612985565b6111da85604051806060016040528060288152602001615e0a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611190612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b61298d565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006112bb61121f612985565b846112b68560016000611230612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b61298d565b6001905092915050565b7f000000000000000000000000cac2d4b2532e07273ea319838e01d6a9ffb4bf9881565b601160009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113bb612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144190614cb0565b60405180910390fd5b61025883101561148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690614ebd565b60405180910390fd5b6103e882111580156114a2575060008210155b6114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890614f4f565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b6000611518612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614cb0565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6115d1612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614cb0565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116e9612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f90614cb0565b60405180910390fd5b60011515601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561182e576000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611887565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b60165481565b611898612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e90614cb0565b60405180910390fd5b82601681905550816017819055508060188190555060185460175460165461194f9190614f6f565b6119599190614f6f565b601581905550601460155411156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90615011565b60405180910390fd5b505050565b6119b2612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890614cb0565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611ab4612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90614cb0565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611b6f90614c32565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9b90614c32565b8015611be85780601f10611bbd57610100808354040283529160200191611be8565b820191906000526020600020905b815481529060010190602001808311611bcb57829003601f168201915b5050505050905090565b611bfa612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614cb0565b60405180910390fd5b7f000000000000000000000000cac2d4b2532e07273ea319838e01d6a9ffb4bf9873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906150a3565b60405180910390fd5b611d228282613a3e565b5050565b60185481565b60105481565b601f5481565b601c5481565b6000611e01611d4b612985565b84611dfc85604051806060016040528060258152602001615e326025913960016000611d75612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b61298d565b6001905092915050565b600e5481565b6000611e25611e1e612985565b8484612b58565b6001905092915050565b611e37612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd90614cb0565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611fc1612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204790614cb0565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120ed91906148b7565b60405180910390a25050565b612101612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218790614cb0565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a546121b89190614f6f565b6121c29190614f6f565b60198190555060198054111561220d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122049061510f565b60405180910390fd5b505050565b61221a612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090614cb0565b60405180910390fd5b670de0b6b3a76400006103e860056122bf610fc5565b6122c99190614cff565b6122d39190614d88565b6122dd9190614d88565b81101561231f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612316906151a1565b60405180910390fd5b670de0b6b3a7640000816123339190614cff565b600a8190555050565b601460009054906101000a900460ff1681565b60085481565b600061235f612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590614cb0565b60405180910390fd5b620186a060016123fc610fc5565b6124069190614cff565b6124109190614d88565b821015612452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244990615233565b60405180910390fd5b6103e8600561245f610fc5565b6124699190614cff565b6124739190614d88565b8211156124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac906152c5565b60405180910390fd5b8160098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612562612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e890614cb0565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b601b5481565b600a5481565b600061262f612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614cb0565b60405180910390fd5b600f546010546126ce9190614f6f565b421161270f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270690615331565b60405180910390fd5b611388821115612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b906153c3565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000cac2d4b2532e07273ea319838e01d6a9ffb4bf986040518263ffffffff1660e01b81526004016127b69190614a32565b60206040518083038186803b1580156127ce57600080fd5b505afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280691906153f8565b905060006128316127106128238685613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050600081111561286a576128697f000000000000000000000000cac2d4b2532e07273ea319838e01d6a9ffb4bf9861dead83613ba4565b5b60007f000000000000000000000000cac2d4b2532e07273ea319838e01d6a9ffb4bf9890508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128d757600080fd5b505af11580156128eb573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b60008082846129369190614f6f565b90508381101561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290615471565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f490615503565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6490615595565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b4b9190614988565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf90615627565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2f906156b9565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cd95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d225760018114612d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1890615725565b60405180910390fd5b5b6000811415612d3c57612d3783836000613ba4565b6139d5565b601160009054906101000a900460ff16156133ff57612d59613e39565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612dc75750612d97613e39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e005750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e3a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e535750600560149054906101000a900460ff16155b156133fe57601160019054906101000a900460ff16612f4d57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f0d5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4390615791565b60405180910390fd5b5b601460009054906101000a900460ff161561311557612f6a613e39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ff157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561304957507f000000000000000000000000cac2d4b2532e07273ea319838e01d6a9ffb4bf9873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131145743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c690615849565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b85750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561325f57600854811115613202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f9906158db565b60405180910390fd5b600a5461320e8361136b565b826132199190614f6f565b111561325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325190615947565b60405180910390fd5b6133fd565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133025750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133515760085481111561334c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613343906159d9565b60405180910390fd5b6133fc565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133fb57600a546133ae8361136b565b826133b99190614f6f565b11156133fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f190615947565b60405180910390fd5b5b5b5b5b5b600061340a3061136b565b90506000600954821015905080801561342f5750601160029054906101000a900460ff165b80156134485750600560149054906101000a900460ff16155b801561349e5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134f45750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354a5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561358e576001600560146101000a81548160ff021916908315150217905550613572613e63565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156135f45750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561360c5750600c60009054906101000a900460ff165b80156136275750600d54600e546136239190614f6f565b4210155b801561367d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561368c5761368a61414a565b505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137425750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561374c57600090505b600081156139c557602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137af57506000601954115b1561387c576137dc60646137ce60195488613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050601954601b54826137ef9190614cff565b6137f99190614d88565b601e600082825461380a9190614f6f565b92505081905550601954601c54826138229190614cff565b61382c9190614d88565b601f600082825461383d9190614f6f565b92505081905550601954601a54826138559190614cff565b61385f9190614d88565b601d60008282546138709190614f6f565b925050819055506139a1565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138d757506000601554115b156139a05761390460646138f660155488613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050601554601754826139179190614cff565b6139219190614d88565b601e60008282546139329190614f6f565b925050819055506015546018548261394a9190614cff565b6139549190614d88565b601f60008282546139659190614f6f565b925050819055506015546016548261397d9190614cff565b6139879190614d88565b601d60008282546139989190614f6f565b925050819055505b5b60008111156139b6576139b5873083613ba4565b5b80856139c291906159f9565b94505b6139d0878787613ba4565b505050505b505050565b6000838311158290613a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1991906147a1565b60405180910390fd5b5060008385613a3191906159f9565b9050809150509392505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600080831415613af25760009050613b54565b60008284613b009190614cff565b9050828482613b0f9190614d88565b14613b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4690615a9f565b60405180910390fd5b809150505b92915050565b6000613b9c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061431f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0b90615627565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c7b906156b9565b60405180910390fd5b613c8f838383614382565b613cfa81604051806060016040528060268152602001615de4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e2c9190614988565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000613e6e3061136b565b90506000601f54601d54601e54613e859190614f6f565b613e8f9190614f6f565b9050600080831480613ea15750600082145b15613eae57505050614148565b6014600954613ebd9190614cff565b831115613ed6576014600954613ed39190614cff565b92505b6000600283601e5486613ee99190614cff565b613ef39190614d88565b613efd9190614d88565b90506000613f14828661438790919063ffffffff16565b90506000479050613f24826143d1565b6000613f39824761438790919063ffffffff16565b90506000613f6487613f56601d5485613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000613f8f88613f81601f5486613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000818385613fa091906159f9565b613faa91906159f9565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161400a90615af0565b60006040518083038185875af1925050503d8060008114614047576040519150601f19603f3d011682016040523d82523d6000602084013e61404c565b606091505b5050809850506000871180156140625750600081115b156140af57614071878261461d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e546040516140a693929190615b05565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f590615af0565b60006040518083038185875af1925050503d8060008114614132576040519150601f19603f3d011682016040523d82523d6000602084013e614137565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000cac2d4b2532e07273ea319838e01d6a9ffb4bf986040518263ffffffff1660e01b81526004016141ae9190614a32565b60206040518083038186803b1580156141c657600080fd5b505afa1580156141da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fe91906153f8565b9050600061422b61271061421d600b5485613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000811115614264576142637f000000000000000000000000cac2d4b2532e07273ea319838e01d6a9ffb4bf9861dead83613ba4565b5b60007f000000000000000000000000cac2d4b2532e07273ea319838e01d6a9ffb4bf9890508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142d157600080fd5b505af11580156142e5573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b60008083118290614366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161435d91906147a1565b60405180910390fd5b50600083856143759190614d88565b9050809150509392505050565b505050565b60006143c983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139da565b905092915050565b6000600267ffffffffffffffff8111156143ee576143ed615b3c565b5b60405190808252806020026020018201604052801561441c5781602001602082028036833780820191505090505b509050308160008151811061443457614433615b6b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156144d457600080fd5b505afa1580156144e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061450c9190615baf565b816001815181106145205761451f615b6b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614585307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461298d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016145e7959493929190615cd5565b600060405180830381600087803b15801561460157600080fd5b505af1158015614615573d6000803e3d6000fd5b505050505050565b614648307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461298d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016146af96959493929190615d2f565b6060604051808303818588803b1580156146c857600080fd5b505af11580156146dc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147019190615d90565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614742578082015181840152602081019050614727565b83811115614751576000848401525b50505050565b6000601f19601f8301169050919050565b600061477382614708565b61477d8185614713565b935061478d818560208601614724565b61479681614757565b840191505092915050565b600060208201905081810360008301526147bb8184614768565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147f3826147c8565b9050919050565b614803816147e8565b811461480e57600080fd5b50565b600081359050614820816147fa565b92915050565b6000819050919050565b61483981614826565b811461484457600080fd5b50565b60008135905061485681614830565b92915050565b60008060408385031215614873576148726147c3565b5b600061488185828601614811565b925050602061489285828601614847565b9150509250929050565b60008115159050919050565b6148b18161489c565b82525050565b60006020820190506148cc60008301846148a8565b92915050565b6000602082840312156148e8576148e76147c3565b5b60006148f684828501614811565b91505092915050565b6000819050919050565b600061492461491f61491a846147c8565b6148ff565b6147c8565b9050919050565b600061493682614909565b9050919050565b60006149488261492b565b9050919050565b6149588161493d565b82525050565b6000602082019050614973600083018461494f565b92915050565b61498281614826565b82525050565b600060208201905061499d6000830184614979565b92915050565b6000602082840312156149b9576149b86147c3565b5b60006149c784828501614847565b91505092915050565b6000806000606084860312156149e9576149e86147c3565b5b60006149f786828701614811565b9350506020614a0886828701614811565b9250506040614a1986828701614847565b9150509250925092565b614a2c816147e8565b82525050565b6000602082019050614a476000830184614a23565b92915050565b600060ff82169050919050565b614a6381614a4d565b82525050565b6000602082019050614a7e6000830184614a5a565b92915050565b614a8d8161489c565b8114614a9857600080fd5b50565b600081359050614aaa81614a84565b92915050565b600080600060608486031215614ac957614ac86147c3565b5b6000614ad786828701614847565b9350506020614ae886828701614847565b9250506040614af986828701614a9b565b9150509250925092565b60008060408385031215614b1a57614b196147c3565b5b6000614b2885828601614811565b9250506020614b3985828601614a9b565b9150509250929050565b600080600060608486031215614b5c57614b5b6147c3565b5b6000614b6a86828701614847565b9350506020614b7b86828701614847565b9250506040614b8c86828701614847565b9150509250925092565b600060208284031215614bac57614bab6147c3565b5b6000614bba84828501614a9b565b91505092915050565b60008060408385031215614bda57614bd96147c3565b5b6000614be885828601614811565b9250506020614bf985828601614811565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c4a57607f821691505b60208210811415614c5e57614c5d614c03565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c9a602083614713565b9150614ca582614c64565b602082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d0a82614826565b9150614d1583614826565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d4e57614d4d614cd0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d9382614826565b9150614d9e83614826565b925082614dae57614dad614d59565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e15602f83614713565b9150614e2082614db9565b604082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614ea7603383614713565b9150614eb282614e4b565b604082019050919050565b60006020820190508181036000830152614ed681614e9a565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614f39603083614713565b9150614f4482614edd565b604082019050919050565b60006020820190508181036000830152614f6881614f2c565b9050919050565b6000614f7a82614826565b9150614f8583614826565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fba57614fb9614cd0565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614ffb601d83614713565b915061500682614fc5565b602082019050919050565b6000602082019050818103600083015261502a81614fee565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061508d603983614713565b915061509882615031565b604082019050919050565b600060208201905081810360008301526150bc81615080565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006150f9601d83614713565b9150615104826150c3565b602082019050919050565b60006020820190508181036000830152615128816150ec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061518b602483614713565b91506151968261512f565b604082019050919050565b600060208201905081810360008301526151ba8161517e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061521d603583614713565b9150615228826151c1565b604082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152af603483614713565b91506152ba82615253565b604082019050919050565b600060208201905081810360008301526152de816152a2565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061531b602083614713565b9150615326826152e5565b602082019050919050565b6000602082019050818103600083015261534a8161530e565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006153ad602a83614713565b91506153b882615351565b604082019050919050565b600060208201905081810360008301526153dc816153a0565b9050919050565b6000815190506153f281614830565b92915050565b60006020828403121561540e5761540d6147c3565b5b600061541c848285016153e3565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061545b601b83614713565b915061546682615425565b602082019050919050565b6000602082019050818103600083015261548a8161544e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154ed602483614713565b91506154f882615491565b604082019050919050565b6000602082019050818103600083015261551c816154e0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061557f602283614713565b915061558a82615523565b604082019050919050565b600060208201905081810360008301526155ae81615572565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615611602583614713565b915061561c826155b5565b604082019050919050565b6000602082019050818103600083015261564081615604565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156a3602383614713565b91506156ae82615647565b604082019050919050565b600060208201905081810360008301526156d281615696565b9050919050565b7f616d6f756e742061626f7665206d61782072657472616e636500000000000000600082015250565b600061570f601983614713565b915061571a826156d9565b602082019050919050565b6000602082019050818103600083015261573e81615702565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061577b601683614713565b915061578682615745565b602082019050919050565b600060208201905081810360008301526157aa8161576e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615833604983614713565b915061583e826157b1565b606082019050919050565b6000602082019050818103600083015261586281615826565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158c5603583614713565b91506158d082615869565b604082019050919050565b600060208201905081810360008301526158f4816158b8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615931601383614713565b915061593c826158fb565b602082019050919050565b6000602082019050818103600083015261596081615924565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159c3603683614713565b91506159ce82615967565b604082019050919050565b600060208201905081810360008301526159f2816159b6565b9050919050565b6000615a0482614826565b9150615a0f83614826565b925082821015615a2257615a21614cd0565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a89602183614713565b9150615a9482615a2d565b604082019050919050565b60006020820190508181036000830152615ab881615a7c565b9050919050565b600081905092915050565b50565b6000615ada600083615abf565b9150615ae582615aca565b600082019050919050565b6000615afb82615acd565b9150819050919050565b6000606082019050615b1a6000830186614979565b615b276020830185614979565b615b346040830184614979565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615ba9816147fa565b92915050565b600060208284031215615bc557615bc46147c3565b5b6000615bd384828501615b9a565b91505092915050565b6000819050919050565b6000615c01615bfc615bf784615bdc565b6148ff565b614826565b9050919050565b615c1181615be6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c4c816147e8565b82525050565b6000615c5e8383615c43565b60208301905092915050565b6000602082019050919050565b6000615c8282615c17565b615c8c8185615c22565b9350615c9783615c33565b8060005b83811015615cc8578151615caf8882615c52565b9750615cba83615c6a565b925050600181019050615c9b565b5085935050505092915050565b600060a082019050615cea6000830188614979565b615cf76020830187615c08565b8181036040830152615d098186615c77565b9050615d186060830185614a23565b615d256080830184614979565b9695505050505050565b600060c082019050615d446000830189614a23565b615d516020830188614979565b615d5e6040830187615c08565b615d6b6060830186615c08565b615d786080830185614a23565b615d8560a0830184614979565b979650505050505050565b600080600060608486031215615da957615da86147c3565b5b6000615db7868287016153e3565b9350506020615dc8868287016153e3565b9250506040615dd9868287016153e3565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122040cfdd60b30bc6a93da2f9ccd71a4fd3f395c561899d333dd7ee40a33de5d08064736f6c63430008090033

Deployed Bytecode Sourcemap

27928:16420:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8146:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9921:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33297:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29509:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28007:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8874:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28583:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28395:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29369:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29329;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33417:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10323:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28110:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28490:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28451:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8716:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11009:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28065:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28680:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35780:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29180:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28760:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9045:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42556:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32424:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33886:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28202:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33095:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29069:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34155:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32257:155;;;;;;;;;;;;;:::i;:::-;;28239:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29215:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34042:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8365:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35112:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29143:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28636:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29409:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29291:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11730:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28541:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9385:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35560:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29582:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28720:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34922:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34536:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33659:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28979:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28276:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32702:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29035:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9623:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28318:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32556:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29106:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29253:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28358:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43597:748;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8146:100;8200:13;8233:5;8226:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8146:100;:::o;9921:169::-;10004:4;10021:39;10030:12;:10;:12::i;:::-;10044:7;10053:6;10021:8;:39::i;:::-;10078:4;10071:11;;9921:169;;;;:::o;33297:112::-;33356:4;33380:12;:21;33393:7;33380:21;;;;;;;;;;;;;;;;;;;;;;;;;33373:28;;33297:112;;;:::o;29509:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;28007:51::-;;;:::o;8874:108::-;8935:7;8962:12;;8955:19;;8874:108;:::o;28583:46::-;;;;:::o;28395:36::-;;;;:::o;29369:33::-;;;;:::o;29329:::-;;;;:::o;33417:234::-;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33536:4:::1;33530;33526:1;33510:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;33509:31;;;;:::i;:::-;33499:6;:41;;33491:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;33636:6;33626;:17;;;;:::i;:::-;33603:20;:40;;;;33417:234:::0;:::o;10323:355::-;10463:4;10480:36;10490:6;10498:9;10509:6;10480:9;:36::i;:::-;10527:121;10536:6;10544:12;:10;:12::i;:::-;10558:89;10596:6;10558:89;;;;;;;;;;;;;;;;;:11;:19;10570:6;10558:19;;;;;;;;;;;;;;;:33;10578:12;:10;:12::i;:::-;10558:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10527:8;:121::i;:::-;10666:4;10659:11;;10323:355;;;;;:::o;28110:53::-;28156:6;28110:53;:::o;28490:44::-;;;;:::o;28451:32::-;;;;;;;;;;;;;:::o;8716:93::-;8774:5;8799:2;8792:9;;8716:93;:::o;11009:218::-;11097:4;11114:83;11123:12;:10;:12::i;:::-;11137:7;11146:50;11185:10;11146:11;:25;11158:12;:10;:12::i;:::-;11146:25;;;;;;;;;;;;;;;:34;11172:7;11146:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11114:8;:83::i;:::-;11215:4;11208:11;;11009:218;;;;:::o;28065:38::-;;;:::o;28680:33::-;;;;;;;;;;;;;:::o;35780:125::-;35845:4;35869:19;:28;35889:7;35869:28;;;;;;;;;;;;;;;;;;;;;;;;;35862:35;;35780:125;;;:::o;29180:28::-;;;;:::o;28760:31::-;;;;;;;;;;;;;:::o;9045:127::-;9119:7;9146:9;:18;9156:7;9146:18;;;;;;;;;;;;;;;;9139:25;;9045:127;;;:::o;42556:447::-;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42710:3:::1;42687:19;:26;;42679:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;42800:4;42788:8;:16;;:33;;;;;42820:1;42808:8;:13;;42788:33;42780:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;42903:19;42885:15;:37;;;;42952:8;42933:16;:27;;;;42987:8;42971:13;;:24;;;;;;;;;;;;;;;;;;42556:447:::0;;;:::o;32424:120::-;32476:4;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32509:5:::1;32492:14;;:22;;;;;;;;;;;;;;;;;;32532:4;32525:11;;32424:120:::0;:::o;33886:144::-;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34018:4:::1;33976:31;:39;34008:6;33976:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33886:144:::0;;:::o;28202:30::-;;;;;;;;;;;;;:::o;33095:194::-;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33198:4:::1;33173:29;;:12;:21;33186:7;33173:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;33169:113;;;33229:5;33205:12;:21;33218:7;33205:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33169:113;;;33276:4;33252:12;:21;33265:7;33252:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;33169:113;33095:194:::0;:::o;29069:30::-;;;;:::o;34155:369::-;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34289:13:::1;34271:15;:31;;;;34331:13;34313:15;:31;;;;34367:7;34355:9;:19;;;;34436:9;;34418:15;;34400;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;34385:12;:60;;;;34480:2;34464:12;;:18;;34456:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34155:369:::0;;;:::o;32257:155::-;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32328:4:::1;32312:13;;:20;;;;;;;;;;;;;;;;;;32357:4;32343:11;;:18;;;;;;;;;;;;;;;;;;32389:15;32372:14;:32;;;;32257:155::o:0;28239:24::-;;;;;;;;;;;;;:::o;29215:31::-;;;;:::o;34042:101::-;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34128:7:::1;34114:11;;:21;;;;;;;;;;;;;;;;;;34042:101:::0;:::o;8365:104::-;8421:13;8454:7;8447:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8365:104;:::o;35112:244::-;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35219:13:::1;35211:21;;:4;:21;;;;35203:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;35307:41;35336:4;35342:5;35307:28;:41::i;:::-;35112:244:::0;;:::o;29143:24::-;;;;:::o;28636:35::-;;;;:::o;29409:27::-;;;;:::o;29291:25::-;;;;:::o;11730:269::-;11823:4;11840:129;11849:12;:10;:12::i;:::-;11863:7;11872:96;11911:15;11872:96;;;;;;;;;;;;;;;;;:11;:25;11884:12;:10;:12::i;:::-;11872:25;;;;;;;;;;;;;;;:34;11898:7;11872:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11840:8;:129::i;:::-;11987:4;11980:11;;11730:269;;;;:::o;28541:29::-;;;;:::o;9385:175::-;9471:4;9488:42;9498:12;:10;:12::i;:::-;9512:9;9523:6;9488:9;:42::i;:::-;9548:4;9541:11;;9385:175;;;;:::o;35560:208::-;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35697:15:::1;;;;;;;;;;;35654:59;;35677:18;35654:59;;;;;;;;;;;;35742:18;35724:15;;:36;;;;;;;;;;;;;;;;;;35560:208:::0;:::o;29582:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;28720:33::-;;;;;;;;;;;;;:::o;34922:182::-;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35038:8:::1;35007:19;:28;35027:7;35007:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35078:7;35062:34;;;35087:8;35062:34;;;;;;:::i;:::-;;;;;;;;34922:182:::0;;:::o;34536:378::-;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34672:13:::1;34653:16;:32;;;;34715:13;34696:16;:32;;;;34752:7;34739:10;:20;;;;34824:10;;34805:16;;34786;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;34770:13;:64;;;;34870:2;34853:13:::0;::::1;:19;;34845:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34536:378:::0;;;:::o;33659:215::-;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33781:4:::1;33775;33771:1;33755:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;33754:31;;;;:::i;:::-;33744:6;:41;;33736:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;33859:6;33849;:17;;;;:::i;:::-;33837:9;:29;;;;33659:215:::0;:::o;28979:39::-;;;;;;;;;;;;;:::o;28276:35::-;;;;:::o;32702:381::-;32783:4;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32839:6:::1;32835:1;32819:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;32806:9;:39;;32798:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;32954:4;32950:1;32934:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;32921:9;:37;;32913:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;33046:9;33025:18;:30;;;;33072:4;33065:11;;32702:381:::0;;;:::o;29035:27::-;;;;:::o;9623:151::-;9712:7;9739:11;:18;9751:5;9739:18;;;;;;;;;;;;;;;:27;9758:7;9739:27;;;;;;;;;;;;;;;;9732:34;;9623:151;;;;:::o;28318:33::-;;;;:::o;32556:134::-;32616:4;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32655:5:::1;32632:20;;:28;;;;;;;;;;;;;;;;;;32678:4;32671:11;;32556:134:::0;:::o;29106:30::-;;;;:::o;29253:31::-;;;;:::o;28358:24::-;;;;:::o;43597:748::-;43681:4;21027:12;:10;:12::i;:::-;21017:22;;:6;;;;;;;;;;;:22;;;21009:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43746:19:::1;;43723:20;;:42;;;;:::i;:::-;43705:15;:60;43697:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;43833:4;43822:7;:15;;43814:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43918:15;43895:20;:38;;;;43944:28;43975:4;:14;;;43990:13;43975:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43944:60;;44015:20;44038:44;44076:5;44038:33;44063:7;44038:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;44015:67;;44112:1;44097:12;:16;44093:109;;;44129:61;44145:13;44168:6;44177:12;44129:15;:61::i;:::-;44093:109;44212:19;44249:13;44212:51;;44274:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44301:14;;;;;;;;;;44333:4;44326:11;;;;;43597:748:::0;;;:::o;16106:181::-;16164:7;16184:9;16200:1;16196;:5;;;;:::i;:::-;16184:17;;16225:1;16220;:6;;16212:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16278:1;16271:8;;;16106:181;;;;:::o;1215:98::-;1268:7;1295:10;1288:17;;1215:98;:::o;14728:380::-;14881:1;14864:19;;:5;:19;;;;14856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14962:1;14943:21;;:7;:21;;;;14935:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15046:6;15016:11;:18;15028:5;15016:18;;;;;;;;;;;;;;;:27;15035:7;15016:27;;;;;;;;;;;;;;;:36;;;;15084:7;15068:32;;15077:5;15068:32;;;15093:6;15068:32;;;;;;:::i;:::-;;;;;;;;14728:380;;;:::o;35967:4082::-;36115:1;36099:18;;:4;:18;;;;36091:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36192:1;36178:16;;:2;:16;;;;36170:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36261:12;:18;36274:4;36261:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;36283:12;:16;36296:2;36283:16;;;;;;;;;;;;;;;;;;;;;;;;;36261:38;36257:106;;;36332:1;36322:6;:11;36314:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;36257:106;36390:1;36380:6;:11;36377:92;;;36408:28;36424:4;36430:2;36434:1;36408:15;:28::i;:::-;36451:7;;36377:92;36492:14;;;;;;;;;;;36489:1650;;;36552:7;:5;:7::i;:::-;36544:15;;:4;:15;;;;:49;;;;;36586:7;:5;:7::i;:::-;36580:13;;:2;:13;;;;36544:49;:86;;;;;36628:1;36614:16;;:2;:16;;;;36544:86;:128;;;;;36665:6;36651:21;;:2;:21;;;;36544:128;:158;;;;;36694:8;;;;;;;;;;;36693:9;36544:158;36522:1606;;;36740:13;;;;;;;;;;;36736:148;;36785:19;:25;36805:4;36785:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36814:19;:23;36834:2;36814:23;;;;;;;;;;;;;;;;;;;;;;;;;36785:52;36777:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36736:148;36908:20;;;;;;;;;;;36904:423;;;36962:7;:5;:7::i;:::-;36956:13;;:2;:13;;;;:47;;;;;36987:15;36973:30;;:2;:30;;;;36956:47;:79;;;;;37021:13;37007:28;;:2;:28;;;;36956:79;36952:356;;;37113:12;37071:28;:39;37100:9;37071:39;;;;;;;;;;;;;;;;:54;37063:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37272:12;37230:28;:39;37259:9;37230:39;;;;;;;;;;;;;;;:54;;;;36952:356;36904:423;37368:25;:31;37394:4;37368:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37404:31;:35;37436:2;37404:35;;;;;;;;;;;;;;;;;;;;;;;;;37403:36;37368:71;37364:749;;;37486:20;;37476:6;:30;;37468:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37625:9;;37608:13;37618:2;37608:9;:13::i;:::-;37599:6;:22;;;;:::i;:::-;:35;;37591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37364:749;;;37723:25;:29;37749:2;37723:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37757:31;:37;37789:4;37757:37;;;;;;;;;;;;;;;;;;;;;;;;;37756:38;37723:71;37719:394;;;37841:20;;37831:6;:30;;37823:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37719:394;;;37967:31;:35;37999:2;37967:35;;;;;;;;;;;;;;;;;;;;;;;;;37963:150;;38060:9;;38043:13;38053:2;38043:9;:13::i;:::-;38034:6;:22;;;;:::i;:::-;:35;;38026:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37963:150;37719:394;37364:749;36522:1606;36489:1650;38173:28;38204:24;38222:4;38204:9;:24::i;:::-;38173:55;;38249:12;38288:18;;38264:20;:42;;38249:57;;38337:7;:35;;;;;38361:11;;;;;;;;;;;38337:35;:61;;;;;38390:8;;;;;;;;;;;38389:9;38337:61;:110;;;;;38416:25;:31;38442:4;38416:31;;;;;;;;;;;;;;;;;;;;;;;;;38415:32;38337:110;:153;;;;;38465:19;:25;38485:4;38465:25;;;;;;;;;;;;;;;;;;;;;;;;;38464:26;38337:153;:194;;;;;38508:19;:23;38528:2;38508:23;;;;;;;;;;;;;;;;;;;;;;;;;38507:24;38337:194;38319:338;;;38569:4;38558:8;;:15;;;;;;;;;;;;;;;;;;38602:10;:8;:10::i;:::-;38640:5;38629:8;;:16;;;;;;;;;;;;;;;;;;38319:338;38681:8;;;;;;;;;;;38680:9;:42;;;;;38693:25;:29;38719:2;38693:29;;;;;;;;;;;;;;;;;;;;;;;;;38680:42;:59;;;;;38726:13;;;;;;;;;;;38680:59;:114;;;;;38779:15;;38762:14;;:32;;;;:::i;:::-;38743:15;:51;;38680:114;:144;;;;;38799:19;:25;38819:4;38799:25;;;;;;;;;;;;;;;;;;;;;;;;;38798:26;38680:144;38677:204;;;38840:29;:27;:29::i;:::-;;38677:204;38893:12;38909:8;;;;;;;;;;;38908:9;38893:24;;38933:19;:25;38953:4;38933:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38962:19;:23;38982:2;38962:23;;;;;;;;;;;;;;;;;;;;;;;;;38933:52;38930:99;;;39012:5;39002:15;;38930:99;39049:12;39079:7;39076:920;;;39106:25;:29;39132:2;39106:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39155:1;39139:13;;:17;39106:50;39102:725;;;39183:34;39213:3;39183:25;39194:13;;39183:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39176:41;;39284:13;;39265:16;;39258:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39236:18;;:61;;;;;;;:::i;:::-;;;;;;;;39352:13;;39339:10;;39332:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39316:12;;:49;;;;;;;:::i;:::-;;;;;;;;39432:13;;39413:16;;39406:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39384:18;;:61;;;;;;;:::i;:::-;;;;;;;;39102:725;;;39483:25;:31;39509:4;39483:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39533:1;39518:12;;:16;39483:51;39480:347;;;39559:33;39588:3;39559:24;39570:12;;39559:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39552:40;;39655:12;;39637:15;;39630:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;39608:18;;:59;;;;;;;:::i;:::-;;;;;;;;39721:12;;39709:9;;39702:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;39686:12;;:47;;;;;;;:::i;:::-;;;;;;;;39799:12;;39781:15;;39774:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;39752:18;;:59;;;;;;;:::i;:::-;;;;;;;;39480:347;39102:725;39865:1;39858:4;:8;39855:93;;;39890:42;39906:4;39920;39927;39890:15;:42::i;:::-;39855:93;39980:4;39970:14;;;;;:::i;:::-;;;39076:920;40008:33;40024:4;40030:2;40034:6;40008:15;:33::i;:::-;36080:3969;;;;35967:4082;;;;:::o;17009:192::-;17095:7;17128:1;17123;:6;;17131:12;17115:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17155:9;17171:1;17167;:5;;;;:::i;:::-;17155:17;;17192:1;17185:8;;;17009:192;;;;;:::o;35364:188::-;35481:5;35447:25;:31;35473:4;35447:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35538:5;35504:40;;35532:4;35504:40;;;;;;;;;;;;35364:188;;:::o;17460:471::-;17518:7;17768:1;17763;:6;17759:47;;;17793:1;17786:8;;;;17759:47;17818:9;17834:1;17830;:5;;;;:::i;:::-;17818:17;;17863:1;17858;17854;:5;;;;:::i;:::-;:10;17846:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17922:1;17915:8;;;17460:471;;;;;:::o;18407:132::-;18465:7;18492:39;18496:1;18499;18492:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18485:46;;18407:132;;;;:::o;12301:573::-;12459:1;12441:20;;:6;:20;;;;12433:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12543:1;12522:23;;:9;:23;;;;12514:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12598:47;12619:6;12627:9;12638:6;12598:20;:47::i;:::-;12678:71;12700:6;12678:71;;;;;;;;;;;;;;;;;:9;:17;12688:6;12678:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12658:9;:17;12668:6;12658:17;;;;;;;;;;;;;;;:91;;;;12783:32;12808:6;12783:9;:20;12793:9;12783:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12760:9;:20;12770:9;12760:20;;;;;;;;;;;;;;;:55;;;;12848:9;12831:35;;12840:6;12831:35;;;12859:6;12831:35;;;;;;:::i;:::-;;;;;;;;12301:573;;;:::o;20888:81::-;20928:7;20955:6;;;;;;;;;;;20948:13;;20888:81;:::o;40927:1617::-;40966:23;40992:24;41010:4;40992:9;:24::i;:::-;40966:50;;41027:25;41097:12;;41076:18;;41055;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;41027:82;;41120:12;41175:1;41156:15;:20;:46;;;;41201:1;41180:17;:22;41156:46;41153:60;;;41205:7;;;;;41153:60;41267:2;41246:18;;:23;;;;:::i;:::-;41228:15;:41;41225:111;;;41322:2;41301:18;;:23;;;;:::i;:::-;41283:41;;41225:111;41356:23;41441:1;41421:17;41400:18;;41382:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;41356:86;;41453:26;41482:36;41502:15;41482;:19;;:36;;;;:::i;:::-;41453:65;;41539:25;41567:21;41539:49;;41601:36;41618:18;41601:16;:36::i;:::-;41659:18;41680:44;41706:17;41680:21;:25;;:44;;;;:::i;:::-;41659:65;;41745:23;41771:57;41810:17;41771:34;41786:18;;41771:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;41745:83;;41839:17;41859:51;41892:17;41859:28;41874:12;;41859:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;41839:71;;41941:23;41998:9;41980:15;41967:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;41941:66;;42059:1;42038:18;:22;;;;42092:1;42071:18;:22;;;;42119:1;42104:12;:16;;;;42162:9;;;;;;;;;;;42154:23;;42185:9;42154:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42141:58;;;;;42241:1;42223:15;:19;:42;;;;;42264:1;42246:15;:19;42223:42;42220:210;;;42281:46;42294:15;42311;42281:12;:46::i;:::-;42347:71;42362:18;42382:15;42399:18;;42347:71;;;;;;;;:::i;:::-;;;;;;;;42220:210;42481:15;;;;;;;;;;;42473:29;;42510:21;42473:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42460:76;;;;;40955:1589;;;;;;;;;;40927:1617;:::o;43015:574::-;43072:4;43115:15;43098:14;:32;;;;43151:28;43182:4;:14;;;43197:13;43182:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43151:60;;43232:20;43255:53;43302:5;43255:42;43280:16;;43255:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;43232:76;;43348:1;43333:12;:16;43329:109;;;43365:61;43381:13;43404:6;43413:12;43365:15;:61::i;:::-;43329:109;43458:19;43495:13;43458:51;;43520:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43547:12;;;;;;;;;;43577:4;43570:11;;;;;43015:574;:::o;19035:278::-;19121:7;19153:1;19149;:5;19156:12;19141:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19180:9;19196:1;19192;:5;;;;:::i;:::-;19180:17;;19304:1;19297:8;;;19035:278;;;;;:::o;15711:125::-;;;;:::o;16570:136::-;16628:7;16655:43;16659:1;16662;16655:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16648:50;;16570:136;;;;:::o;40057:487::-;40125:21;40163:1;40149:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40125:40;;40194:4;40176;40181:1;40176:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40220:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40210:4;40215:1;40210:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40255:62;40272:4;40287:15;40305:11;40255:8;:62::i;:::-;40330:15;:66;;;40411:11;40437:1;40453:4;40480;40500:15;40330:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40112:432;40057:487;:::o;40556:363::-;40637:62;40654:4;40669:15;40687:11;40637:8;:62::i;:::-;40709:15;:31;;;40748:9;40781:4;40801:11;40827:1;40843;28156:6;40885:15;40709:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40556:363;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162: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:234::-;12243:34;12239:1;12231:6;12227:14;12220:58;12312:17;12307:2;12299:6;12295:15;12288:42;12103:234;:::o;12343:366::-;12485:3;12506:67;12570:2;12565:3;12506:67;:::i;:::-;12499:74;;12582:93;12671:3;12582:93;:::i;:::-;12700:2;12695:3;12691:12;12684:19;;12343:366;;;:::o;12715:419::-;12881:4;12919:2;12908:9;12904:18;12896:26;;12968:9;12962:4;12958:20;12954:1;12943:9;12939:17;12932:47;12996:131;13122:4;12996:131;:::i;:::-;12988:139;;12715:419;;;:::o;13140:238::-;13280:34;13276:1;13268:6;13264:14;13257:58;13349:21;13344:2;13336:6;13332:15;13325:46;13140:238;:::o;13384:366::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13384:366;;;:::o;13756:419::-;13922:4;13960:2;13949:9;13945:18;13937:26;;14009:9;14003:4;13999:20;13995:1;13984:9;13980:17;13973:47;14037:131;14163:4;14037:131;:::i;:::-;14029:139;;13756:419;;;:::o;14181:235::-;14321:34;14317:1;14309:6;14305:14;14298:58;14390:18;14385:2;14377:6;14373:15;14366:43;14181:235;:::o;14422:366::-;14564:3;14585:67;14649:2;14644:3;14585:67;:::i;:::-;14578:74;;14661:93;14750:3;14661:93;:::i;:::-;14779:2;14774:3;14770:12;14763:19;;14422:366;;;:::o;14794:419::-;14960:4;14998:2;14987:9;14983:18;14975:26;;15047:9;15041:4;15037:20;15033:1;15022:9;15018:17;15011:47;15075:131;15201:4;15075:131;:::i;:::-;15067:139;;14794:419;;;:::o;15219:305::-;15259:3;15278:20;15296:1;15278:20;:::i;:::-;15273:25;;15312:20;15330:1;15312:20;:::i;:::-;15307:25;;15466:1;15398:66;15394:74;15391:1;15388:81;15385:107;;;15472:18;;:::i;:::-;15385:107;15516:1;15513;15509:9;15502:16;;15219:305;;;;:::o;15530:179::-;15670:31;15666:1;15658:6;15654:14;15647:55;15530:179;:::o;15715:366::-;15857:3;15878:67;15942:2;15937:3;15878:67;:::i;:::-;15871:74;;15954:93;16043:3;15954:93;:::i;:::-;16072:2;16067:3;16063:12;16056:19;;15715:366;;;:::o;16087:419::-;16253:4;16291:2;16280:9;16276:18;16268:26;;16340:9;16334:4;16330:20;16326:1;16315:9;16311:17;16304:47;16368:131;16494:4;16368:131;:::i;:::-;16360:139;;16087:419;;;:::o;16512:244::-;16652:34;16648:1;16640:6;16636:14;16629:58;16721:27;16716:2;16708:6;16704:15;16697:52;16512:244;:::o;16762:366::-;16904:3;16925:67;16989:2;16984:3;16925:67;:::i;:::-;16918:74;;17001:93;17090:3;17001:93;:::i;:::-;17119:2;17114:3;17110:12;17103:19;;16762:366;;;:::o;17134:419::-;17300:4;17338:2;17327:9;17323:18;17315:26;;17387:9;17381:4;17377:20;17373:1;17362:9;17358:17;17351:47;17415:131;17541:4;17415:131;:::i;:::-;17407:139;;17134:419;;;:::o;17559:179::-;17699:31;17695:1;17687:6;17683:14;17676:55;17559:179;:::o;17744:366::-;17886:3;17907:67;17971:2;17966:3;17907:67;:::i;:::-;17900:74;;17983:93;18072:3;17983:93;:::i;:::-;18101:2;18096:3;18092:12;18085:19;;17744:366;;;:::o;18116:419::-;18282:4;18320:2;18309:9;18305:18;18297:26;;18369:9;18363:4;18359:20;18355:1;18344:9;18340:17;18333:47;18397:131;18523:4;18397:131;:::i;:::-;18389:139;;18116:419;;;:::o;18541:223::-;18681:34;18677:1;18669:6;18665:14;18658:58;18750:6;18745:2;18737:6;18733:15;18726:31;18541:223;:::o;18770:366::-;18912:3;18933:67;18997:2;18992:3;18933:67;:::i;:::-;18926:74;;19009:93;19098:3;19009:93;:::i;:::-;19127:2;19122:3;19118:12;19111:19;;18770:366;;;:::o;19142:419::-;19308:4;19346:2;19335:9;19331:18;19323:26;;19395:9;19389:4;19385:20;19381:1;19370:9;19366:17;19359:47;19423:131;19549:4;19423:131;:::i;:::-;19415:139;;19142:419;;;:::o;19567:240::-;19707:34;19703:1;19695:6;19691:14;19684:58;19776:23;19771:2;19763:6;19759:15;19752:48;19567:240;:::o;19813:366::-;19955:3;19976:67;20040:2;20035:3;19976:67;:::i;:::-;19969:74;;20052:93;20141:3;20052:93;:::i;:::-;20170:2;20165:3;20161:12;20154:19;;19813:366;;;:::o;20185:419::-;20351:4;20389:2;20378:9;20374:18;20366:26;;20438:9;20432:4;20428:20;20424:1;20413:9;20409:17;20402:47;20466:131;20592:4;20466:131;:::i;:::-;20458:139;;20185:419;;;:::o;20610:239::-;20750:34;20746:1;20738:6;20734:14;20727:58;20819:22;20814:2;20806:6;20802:15;20795:47;20610:239;:::o;20855:366::-;20997:3;21018:67;21082:2;21077:3;21018:67;:::i;:::-;21011:74;;21094:93;21183:3;21094:93;:::i;:::-;21212:2;21207:3;21203:12;21196:19;;20855:366;;;:::o;21227:419::-;21393:4;21431:2;21420:9;21416:18;21408:26;;21480:9;21474:4;21470:20;21466:1;21455:9;21451:17;21444:47;21508:131;21634:4;21508:131;:::i;:::-;21500:139;;21227:419;;;:::o;21652:182::-;21792:34;21788:1;21780:6;21776:14;21769:58;21652:182;:::o;21840:366::-;21982:3;22003:67;22067:2;22062:3;22003:67;:::i;:::-;21996:74;;22079:93;22168:3;22079:93;:::i;:::-;22197:2;22192:3;22188:12;22181:19;;21840:366;;;:::o;22212:419::-;22378:4;22416:2;22405:9;22401:18;22393:26;;22465:9;22459:4;22455:20;22451:1;22440:9;22436:17;22429:47;22493:131;22619:4;22493:131;:::i;:::-;22485:139;;22212:419;;;:::o;22637:229::-;22777:34;22773:1;22765:6;22761:14;22754:58;22846:12;22841:2;22833:6;22829:15;22822:37;22637:229;:::o;22872:366::-;23014:3;23035:67;23099:2;23094:3;23035:67;:::i;:::-;23028:74;;23111:93;23200:3;23111:93;:::i;:::-;23229:2;23224:3;23220:12;23213:19;;22872:366;;;:::o;23244:419::-;23410:4;23448:2;23437:9;23433:18;23425:26;;23497:9;23491:4;23487:20;23483:1;23472:9;23468:17;23461:47;23525:131;23651:4;23525:131;:::i;:::-;23517:139;;23244:419;;;:::o;23669:143::-;23726:5;23757:6;23751:13;23742:22;;23773:33;23800:5;23773:33;:::i;:::-;23669:143;;;;:::o;23818:351::-;23888:6;23937:2;23925:9;23916:7;23912:23;23908:32;23905:119;;;23943:79;;:::i;:::-;23905:119;24063:1;24088:64;24144:7;24135:6;24124:9;24120:22;24088:64;:::i;:::-;24078:74;;24034:128;23818:351;;;;:::o;24175:177::-;24315:29;24311:1;24303:6;24299:14;24292:53;24175:177;:::o;24358:366::-;24500:3;24521:67;24585:2;24580:3;24521:67;:::i;:::-;24514:74;;24597:93;24686:3;24597:93;:::i;:::-;24715:2;24710:3;24706:12;24699:19;;24358:366;;;:::o;24730:419::-;24896:4;24934:2;24923:9;24919:18;24911:26;;24983:9;24977:4;24973:20;24969:1;24958:9;24954:17;24947:47;25011:131;25137:4;25011:131;:::i;:::-;25003:139;;24730:419;;;:::o;25155:223::-;25295:34;25291:1;25283:6;25279:14;25272:58;25364:6;25359:2;25351:6;25347:15;25340:31;25155:223;:::o;25384:366::-;25526:3;25547:67;25611:2;25606:3;25547:67;:::i;:::-;25540:74;;25623:93;25712:3;25623:93;:::i;:::-;25741:2;25736:3;25732:12;25725:19;;25384:366;;;:::o;25756:419::-;25922:4;25960:2;25949:9;25945:18;25937:26;;26009:9;26003:4;25999:20;25995:1;25984:9;25980:17;25973:47;26037:131;26163:4;26037:131;:::i;:::-;26029:139;;25756:419;;;:::o;26181:221::-;26321:34;26317:1;26309:6;26305:14;26298:58;26390:4;26385:2;26377:6;26373:15;26366:29;26181:221;:::o;26408:366::-;26550:3;26571:67;26635:2;26630:3;26571:67;:::i;:::-;26564:74;;26647:93;26736:3;26647:93;:::i;:::-;26765:2;26760:3;26756:12;26749:19;;26408:366;;;:::o;26780:419::-;26946:4;26984:2;26973:9;26969:18;26961:26;;27033:9;27027:4;27023:20;27019:1;27008:9;27004:17;26997:47;27061:131;27187:4;27061:131;:::i;:::-;27053:139;;26780:419;;;:::o;27205:224::-;27345:34;27341:1;27333:6;27329:14;27322:58;27414:7;27409:2;27401:6;27397:15;27390:32;27205:224;:::o;27435:366::-;27577:3;27598:67;27662:2;27657:3;27598:67;:::i;:::-;27591:74;;27674:93;27763:3;27674:93;:::i;:::-;27792:2;27787:3;27783:12;27776:19;;27435:366;;;:::o;27807:419::-;27973:4;28011:2;28000:9;27996:18;27988:26;;28060:9;28054:4;28050:20;28046:1;28035:9;28031:17;28024:47;28088:131;28214:4;28088:131;:::i;:::-;28080:139;;27807:419;;;:::o;28232:222::-;28372:34;28368:1;28360:6;28356:14;28349:58;28441:5;28436:2;28428:6;28424:15;28417:30;28232:222;:::o;28460:366::-;28602:3;28623:67;28687:2;28682:3;28623:67;:::i;:::-;28616:74;;28699:93;28788:3;28699:93;:::i;:::-;28817:2;28812:3;28808:12;28801:19;;28460:366;;;:::o;28832:419::-;28998:4;29036:2;29025:9;29021:18;29013:26;;29085:9;29079:4;29075:20;29071:1;29060:9;29056:17;29049:47;29113:131;29239:4;29113:131;:::i;:::-;29105:139;;28832:419;;;:::o;29257:175::-;29397:27;29393:1;29385:6;29381:14;29374:51;29257:175;:::o;29438:366::-;29580:3;29601:67;29665:2;29660:3;29601:67;:::i;:::-;29594:74;;29677:93;29766:3;29677:93;:::i;:::-;29795:2;29790:3;29786:12;29779:19;;29438:366;;;:::o;29810:419::-;29976:4;30014:2;30003:9;29999:18;29991:26;;30063:9;30057:4;30053:20;30049:1;30038:9;30034:17;30027:47;30091:131;30217:4;30091:131;:::i;:::-;30083:139;;29810:419;;;:::o;30235:172::-;30375:24;30371:1;30363:6;30359:14;30352:48;30235:172;:::o;30413:366::-;30555:3;30576:67;30640:2;30635:3;30576:67;:::i;:::-;30569:74;;30652:93;30741:3;30652:93;:::i;:::-;30770:2;30765:3;30761:12;30754:19;;30413:366;;;:::o;30785:419::-;30951:4;30989:2;30978:9;30974:18;30966:26;;31038:9;31032:4;31028:20;31024:1;31013:9;31009:17;31002:47;31066:131;31192:4;31066:131;:::i;:::-;31058:139;;30785:419;;;:::o;31210:297::-;31350:34;31346:1;31338:6;31334:14;31327:58;31419:34;31414:2;31406:6;31402:15;31395:59;31488:11;31483:2;31475:6;31471:15;31464:36;31210:297;:::o;31513:366::-;31655:3;31676:67;31740:2;31735:3;31676:67;:::i;:::-;31669:74;;31752:93;31841:3;31752:93;:::i;:::-;31870:2;31865:3;31861:12;31854:19;;31513:366;;;:::o;31885:419::-;32051:4;32089:2;32078:9;32074:18;32066:26;;32138:9;32132:4;32128:20;32124:1;32113:9;32109:17;32102:47;32166:131;32292:4;32166:131;:::i;:::-;32158:139;;31885:419;;;:::o;32310:240::-;32450:34;32446:1;32438:6;32434:14;32427:58;32519:23;32514:2;32506:6;32502:15;32495:48;32310:240;:::o;32556:366::-;32698:3;32719:67;32783:2;32778:3;32719:67;:::i;:::-;32712:74;;32795:93;32884:3;32795:93;:::i;:::-;32913:2;32908:3;32904:12;32897:19;;32556:366;;;:::o;32928:419::-;33094:4;33132:2;33121:9;33117:18;33109:26;;33181:9;33175:4;33171:20;33167:1;33156:9;33152:17;33145:47;33209:131;33335:4;33209:131;:::i;:::-;33201:139;;32928:419;;;:::o;33353:169::-;33493:21;33489:1;33481:6;33477:14;33470:45;33353:169;:::o;33528:366::-;33670:3;33691:67;33755:2;33750:3;33691:67;:::i;:::-;33684:74;;33767:93;33856:3;33767:93;:::i;:::-;33885:2;33880:3;33876:12;33869:19;;33528:366;;;:::o;33900:419::-;34066:4;34104:2;34093:9;34089:18;34081:26;;34153:9;34147:4;34143:20;34139:1;34128:9;34124:17;34117:47;34181:131;34307:4;34181:131;:::i;:::-;34173:139;;33900:419;;;:::o;34325:241::-;34465:34;34461:1;34453:6;34449:14;34442:58;34534:24;34529:2;34521:6;34517:15;34510:49;34325:241;:::o;34572:366::-;34714:3;34735:67;34799:2;34794:3;34735:67;:::i;:::-;34728:74;;34811:93;34900:3;34811:93;:::i;:::-;34929:2;34924:3;34920:12;34913:19;;34572:366;;;:::o;34944:419::-;35110:4;35148:2;35137:9;35133:18;35125:26;;35197:9;35191:4;35187:20;35183:1;35172:9;35168:17;35161:47;35225:131;35351:4;35225:131;:::i;:::-;35217:139;;34944:419;;;:::o;35369:191::-;35409:4;35429:20;35447:1;35429:20;:::i;:::-;35424:25;;35463:20;35481:1;35463:20;:::i;:::-;35458:25;;35502:1;35499;35496:8;35493:34;;;35507:18;;:::i;:::-;35493:34;35552:1;35549;35545:9;35537:17;;35369:191;;;;:::o;35566:220::-;35706:34;35702:1;35694:6;35690:14;35683:58;35775:3;35770:2;35762:6;35758:15;35751:28;35566:220;:::o;35792:366::-;35934:3;35955:67;36019:2;36014:3;35955:67;:::i;:::-;35948:74;;36031:93;36120:3;36031:93;:::i;:::-;36149:2;36144:3;36140:12;36133:19;;35792:366;;;:::o;36164:419::-;36330:4;36368:2;36357:9;36353:18;36345:26;;36417:9;36411:4;36407:20;36403:1;36392:9;36388:17;36381:47;36445:131;36571:4;36445:131;:::i;:::-;36437:139;;36164:419;;;:::o;36589:147::-;36690:11;36727:3;36712:18;;36589:147;;;;:::o;36742:114::-;;:::o;36862:398::-;37021:3;37042:83;37123:1;37118:3;37042:83;:::i;:::-;37035:90;;37134:93;37223:3;37134:93;:::i;:::-;37252:1;37247:3;37243:11;37236:18;;36862:398;;;:::o;37266:379::-;37450:3;37472:147;37615:3;37472:147;:::i;:::-;37465:154;;37636:3;37629:10;;37266:379;;;:::o;37651:442::-;37800:4;37838:2;37827:9;37823:18;37815:26;;37851:71;37919:1;37908:9;37904:17;37895:6;37851:71;:::i;:::-;37932:72;38000:2;37989:9;37985:18;37976:6;37932:72;:::i;:::-;38014;38082:2;38071:9;38067:18;38058:6;38014:72;:::i;:::-;37651:442;;;;;;:::o;38099:180::-;38147:77;38144:1;38137:88;38244:4;38241:1;38234:15;38268:4;38265:1;38258:15;38285:180;38333:77;38330:1;38323:88;38430:4;38427:1;38420:15;38454:4;38451:1;38444:15;38471:143;38528:5;38559:6;38553:13;38544:22;;38575:33;38602:5;38575:33;:::i;:::-;38471:143;;;;:::o;38620:351::-;38690:6;38739:2;38727:9;38718:7;38714:23;38710:32;38707:119;;;38745:79;;:::i;:::-;38707:119;38865:1;38890:64;38946:7;38937:6;38926:9;38922:22;38890:64;:::i;:::-;38880:74;;38836:128;38620:351;;;;:::o;38977:85::-;39022:7;39051:5;39040:16;;38977:85;;;:::o;39068:158::-;39126:9;39159:61;39177:42;39186:32;39212:5;39186:32;:::i;:::-;39177:42;:::i;:::-;39159:61;:::i;:::-;39146:74;;39068:158;;;:::o;39232:147::-;39327:45;39366:5;39327:45;:::i;:::-;39322:3;39315:58;39232:147;;:::o;39385:114::-;39452:6;39486:5;39480:12;39470:22;;39385:114;;;:::o;39505:184::-;39604:11;39638:6;39633:3;39626:19;39678:4;39673:3;39669:14;39654:29;;39505:184;;;;:::o;39695:132::-;39762:4;39785:3;39777:11;;39815:4;39810:3;39806:14;39798:22;;39695:132;;;:::o;39833:108::-;39910:24;39928:5;39910:24;:::i;:::-;39905:3;39898:37;39833:108;;:::o;39947:179::-;40016:10;40037:46;40079:3;40071:6;40037:46;:::i;:::-;40115:4;40110:3;40106:14;40092:28;;39947:179;;;;:::o;40132:113::-;40202:4;40234;40229:3;40225:14;40217:22;;40132:113;;;:::o;40281:732::-;40400:3;40429:54;40477:5;40429:54;:::i;:::-;40499:86;40578:6;40573:3;40499:86;:::i;:::-;40492:93;;40609:56;40659:5;40609:56;:::i;:::-;40688:7;40719:1;40704:284;40729:6;40726:1;40723:13;40704:284;;;40805:6;40799:13;40832:63;40891:3;40876:13;40832:63;:::i;:::-;40825:70;;40918:60;40971:6;40918:60;:::i;:::-;40908:70;;40764:224;40751:1;40748;40744:9;40739:14;;40704:284;;;40708:14;41004:3;40997:10;;40405:608;;;40281:732;;;;:::o;41019:831::-;41282:4;41320:3;41309:9;41305:19;41297:27;;41334:71;41402:1;41391:9;41387:17;41378:6;41334:71;:::i;:::-;41415:80;41491:2;41480:9;41476:18;41467:6;41415:80;:::i;:::-;41542:9;41536:4;41532:20;41527:2;41516:9;41512:18;41505:48;41570:108;41673:4;41664:6;41570:108;:::i;:::-;41562:116;;41688:72;41756:2;41745:9;41741:18;41732:6;41688:72;:::i;:::-;41770:73;41838:3;41827:9;41823:19;41814:6;41770:73;:::i;:::-;41019:831;;;;;;;;:::o;41856:807::-;42105:4;42143:3;42132:9;42128:19;42120:27;;42157:71;42225:1;42214:9;42210:17;42201:6;42157:71;:::i;:::-;42238:72;42306:2;42295:9;42291:18;42282:6;42238:72;:::i;:::-;42320:80;42396:2;42385:9;42381:18;42372:6;42320:80;:::i;:::-;42410;42486:2;42475:9;42471:18;42462:6;42410:80;:::i;:::-;42500:73;42568:3;42557:9;42553:19;42544:6;42500:73;:::i;:::-;42583;42651:3;42640:9;42636:19;42627:6;42583:73;:::i;:::-;41856:807;;;;;;;;;:::o;42669:663::-;42757:6;42765;42773;42822:2;42810:9;42801:7;42797:23;42793:32;42790:119;;;42828:79;;:::i;:::-;42790:119;42948:1;42973:64;43029:7;43020:6;43009:9;43005:22;42973:64;:::i;:::-;42963:74;;42919:128;43086:2;43112:64;43168:7;43159:6;43148:9;43144:22;43112:64;:::i;:::-;43102:74;;43057:129;43225:2;43251:64;43307:7;43298:6;43287:9;43283:22;43251:64;:::i;:::-;43241:74;;43196:129;42669:663;;;;;:::o

Swarm Source

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