ETH Price: $3,480.28 (+0.91%)
Gas: 6.82 Gwei

Token

Pepe (Jr)
 

Overview

Max Total Supply

1,000,000,000 Jr

Holders

53

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.587331328783025637 Jr

Value
$0.00
0x9dcaa27d32c8d3160eebd57c78a85f53df79c527
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:
PepeJr

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**


Telegram: : https://t.me/jrpepeerc

Twitter: https://twitter.com/jrpepeerc

 */
// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;
 
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 Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
  
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract PepeJr is ERC20, Ownable {
    
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private marketingWallet=0xeCdD34aa61EF293b290201dE439F451C719Aee7f;
    address private DEVWallet=0xeCdD34aa61EF293b290201dE439F451C719Aee7f;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWalletAmount;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = true;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
   
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    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;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event DEVWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    constructor() ERC20("Pepe", "Jr") { 
 
        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 = 29;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDEVFee = 0;

        uint256 _sellMarketingFee = 29;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDEVFee = 0;
 
        uint256 totalSupply = 1 * 10 ** 9 * 10 ** decimals(); // 1 Billion Supply
 
        maxTransactionAmount = 2 * 10 ** 7 * 10 ** decimals(); // 20 Million maxTransaction
        maxWalletAmount = 2 * 10 ** 7 * 10 ** decimals(); // 20 Million  maxWallet
        swapTokensAtAmount = 1 * 10 ** 7 * 10 ** decimals(); 
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDEVFee = _buyDEVFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDEVFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDEVFee = _sellDEVFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDEVFee;
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    function SetTrading(bool EnableTrade, bool _swap) external onlyOwner {
        tradingActive = EnableTrade;
        swapEnabled = _swap;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum;
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWalletAmount lower than 0.5%");
        maxWalletAmount = newNum;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
   
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _DEVFee_) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDEVFee = _DEVFee_;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDEVFee;
        require(sellTotalFees <= 40, "Must keep fees at 40% or less");
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _DEVFee_) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDEVFee = _DEVFee_;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDEVFee;
        require(buyTotalFees <= 60, "Must keep fees at 40% 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 AddBots(address[] memory bots_) public onlyOwner {
for (uint i = 0; i < bots_.length; i++) {
            _blacklist[bots_[i]] = true;
        
}
    }

function Del(address[] memory notbot) public onlyOwner {
      for (uint i = 0; i < notbot.length; i++) {
          _blacklist[notbot[i]] = false;
      }
    }

    function check(address wallet) public view returns (bool){
      return _blacklist[wallet];
    }



 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
    function updateDEVWallet(address newWallet) external onlyOwner {
        emit DEVWalletUpdated(newWallet, DEVWallet);
        DEVWallet = newWallet;
    }
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }



  function Airdrop(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 2000, "Wallets list length must be <= 2000");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }

 
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 0) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDEV += fees * sellDEVFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDEV += fees * buyDEVFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDEV;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDEV = ethBalance.mul(tokensForDEV).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDEV;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDEV = 0;
 
        (success,) = address(DEVWallet).call{value: ethForDEV}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
  
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DEVWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"AddBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"notbot","type":"address[]"}],"name":"Del","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"EnableTrade","type":"bool"},{"internalType":"bool","name":"_swap","type":"bool"}],"name":"SetTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[{"internalType":"address","name":"wallet","type":"address"}],"name":"check","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDEVFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDEV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DEVFee_","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDEVWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DEVFee_","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273ecdd34aa61ef293b290201de439f451c719aee7f600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ecdd34aa61ef293b290201de439f451c719aee7f600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200012757600080fd5b506040518060400160405280600481526020017f50657065000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4a720000000000000000000000000000000000000000000000000000000000008152508160039081620001a5919062000e52565b508060049081620001b7919062000e52565b5050506000620001cc6200069c60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000297816001620006a460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000317573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033d919062000fa3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb919062000fa3565b6040518363ffffffff1660e01b8152600401620003ea92919062000fe6565b6020604051808303816000875af11580156200040a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000430919062000fa3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200047860a0516001620006a460201b60201c565b6200048d60a0516001620007a160201b60201c565b6000601d90506000806000601d90506000806000620004b16200084260201b60201c565b600a620004bf9190620011a3565b633b9aca00620004d09190620011f4565b9050620004e26200084260201b60201c565b600a620004f09190620011a3565b6301312d00620005019190620011f4565b600881905550620005176200084260201b60201c565b600a620005259190620011a3565b6301312d00620005369190620011f4565b600a819055506200054c6200084260201b60201c565b600a6200055a9190620011a3565b629896806200056a9190620011f4565b6009819055508660108190555085601181905550846012819055506012546011546010546200059a91906200123f565b620005a691906200123f565b600f81905550836014819055508260158190555081601681905550601654601554601454620005d691906200123f565b620005e291906200123f565b6013819055506200060a620005fc6200084b60201b60201c565b60016200087560201b60201c565b6200061d3060016200087560201b60201c565b6200063261dead60016200087560201b60201c565b62000654620006466200084b60201b60201c565b6001620006a460201b60201c565b62000667306001620006a460201b60201c565b6200067c61dead6001620006a460201b60201c565b6200068e3382620009c260201b60201c565b505050505050505062001449565b600033905090565b620006b46200069c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000746576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200073d90620012db565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008856200069c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000917576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090e90620012db565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009b691906200131a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2b9062001387565b60405180910390fd5b62000a486000838362000b7060201b60201c565b62000a648160025462000b7560201b620028e21790919060201c565b60028190555062000ac2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b7560201b620028e21790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b649190620013ba565b60405180910390a35050565b505050565b600080828462000b8691906200123f565b90508381101562000bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bc59062001427565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c5a57607f821691505b60208210810362000c705762000c6f62000c12565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cda7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c9b565b62000ce6868362000c9b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d3362000d2d62000d278462000cfe565b62000d08565b62000cfe565b9050919050565b6000819050919050565b62000d4f8362000d12565b62000d6762000d5e8262000d3a565b84845462000ca8565b825550505050565b600090565b62000d7e62000d6f565b62000d8b81848462000d44565b505050565b5b8181101562000db35762000da760008262000d74565b60018101905062000d91565b5050565b601f82111562000e025762000dcc8162000c76565b62000dd78462000c8b565b8101602085101562000de7578190505b62000dff62000df68562000c8b565b83018262000d90565b50505b505050565b600082821c905092915050565b600062000e276000198460080262000e07565b1980831691505092915050565b600062000e42838362000e14565b9150826002028217905092915050565b62000e5d8262000bd8565b67ffffffffffffffff81111562000e795762000e7862000be3565b5b62000e85825462000c41565b62000e9282828562000db7565b600060209050601f83116001811462000eca576000841562000eb5578287015190505b62000ec1858262000e34565b86555062000f31565b601f19841662000eda8662000c76565b60005b8281101562000f045784890151825560018201915060208501945060208101905062000edd565b8683101562000f24578489015162000f20601f89168262000e14565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f6b8262000f3e565b9050919050565b62000f7d8162000f5e565b811462000f8957600080fd5b50565b60008151905062000f9d8162000f72565b92915050565b60006020828403121562000fbc5762000fbb62000f39565b5b600062000fcc8482850162000f8c565b91505092915050565b62000fe08162000f5e565b82525050565b600060408201905062000ffd600083018562000fd5565b6200100c602083018462000fd5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620010a15780860481111562001079576200107862001013565b5b6001851615620010895780820291505b8081029050620010998562001042565b945062001059565b94509492505050565b600082620010bc57600190506200118f565b81620010cc57600090506200118f565b8160018114620010e55760028114620010f05762001126565b60019150506200118f565b60ff84111562001105576200110462001013565b5b8360020a9150848211156200111f576200111e62001013565b5b506200118f565b5060208310610133831016604e8410600b8410161715620011605782820a9050838111156200115a576200115962001013565b5b6200118f565b6200116f84848460016200104f565b9250905081840481111562001189576200118862001013565b5b81810290505b9392505050565b600060ff82169050919050565b6000620011b08262000cfe565b9150620011bd8362001196565b9250620011ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620010aa565b905092915050565b6000620012018262000cfe565b91506200120e8362000cfe565b92508282026200121e8162000cfe565b9150828204841483151762001238576200123762001013565b5b5092915050565b60006200124c8262000cfe565b9150620012598362000cfe565b925082820190508082111562001274576200127362001013565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012c36020836200127a565b9150620012d0826200128b565b602082019050919050565b60006020820190508181036000830152620012f681620012b4565b9050919050565b60008115159050919050565b6200131481620012fd565b82525050565b600060208201905062001331600083018462001309565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200136f601f836200127a565b91506200137c8262001337565b602082019050919050565b60006020820190508181036000830152620013a28162001360565b9050919050565b620013b48162000cfe565b82525050565b6000602082019050620013d16000830184620013a9565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200140f601b836200127a565b91506200141c82620013d7565b602082019050919050565b60006020820190508181036000830152620014428162001400565b9050919050565b60805160a051615d9a620014ae600039600081816111e90152818161185b01528181612fa901526133c9015260008181610efd01528181612f51015281816141d0015281816142b1015281816142d801528181614374015261439b0152615d9a6000f3fe6080604052600436106103395760003560e01c806395d89b41116101ab578063c18bc195116100f7578063dd62ed3e11610095578063ed09924f1161006f578063ed09924f14610c57578063f11a24d314610c80578063f2fde38b14610cab578063f637434214610cd457610340565b8063dd62ed3e14610bc4578063e2f4560514610c01578063e884f26014610c2c57610340565b8063c876d0b9116100d1578063c876d0b914610b06578063c8c8ebe414610b31578063d257b34f14610b5c578063d85ba06314610b9957610340565b8063c18bc19514610a77578063c23697a814610aa0578063c558ae6b14610add57610340565b8063aa4bde2811610164578063b62496f51161013e578063b62496f5146109bd578063bbc0c742146109fa578063c024666814610a25578063c17b5b8c14610a4e57610340565b8063aa4bde281461093e578063aacebbe314610969578063b51ac2c61461099257610340565b806395d89b411461081e5780639a7a23d614610849578063a457c2d714610872578063a841ebad146108af578063a9059cbb146108d8578063a910a4c01461091557610340565b806349bd5a5e11610285578063715018a6116102235780637bce5a04116101fd5780637bce5a04146107745780638095d5641461079f5780638da5cb5b146107c857806392136913146107f357610340565b8063715018a614610709578063751039fc146107205780637571336a1461074b57610340565b8063663f95c71161025f578063663f95c71461064b5780636a486a8e146106765780636ddd1713146106a157806370a08231146106cc57610340565b806349bd5a5e146105b85780634a62bb65146105e35780634fbee1931461060e57610340565b80631a8145bb116102f257806323b872dd116102cc57806323b872dd146104e85780632b14bbff14610525578063313ce56714610550578063395093511461057b57610340565b80631a8145bb146104695780631f3fed8f14610494578063203e727e146104bf57610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad578063146368c8146103ea5780631694505e1461041357806318160ddd1461043e57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cff565b604051610367919061453b565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190614605565b610d91565b6040516103a49190614660565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf919061467b565b610daf565b6040516103e19190614660565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c91906147f0565b610dcf565b005b34801561041f57600080fd5b50610428610efb565b6040516104359190614898565b60405180910390f35b34801561044a57600080fd5b50610453610f1f565b60405161046091906148c2565b60405180910390f35b34801561047557600080fd5b5061047e610f29565b60405161048b91906148c2565b60405180910390f35b3480156104a057600080fd5b506104a9610f2f565b6040516104b691906148c2565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e191906148dd565b610f35565b005b3480156104f457600080fd5b5061050f600480360381019061050a919061490a565b61104c565b60405161051c9190614660565b60405180910390f35b34801561053157600080fd5b5061053a611125565b60405161054791906148c2565b60405180910390f35b34801561055c57600080fd5b5061056561112b565b6040516105729190614979565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190614605565b611134565b6040516105af9190614660565b60405180910390f35b3480156105c457600080fd5b506105cd6111e7565b6040516105da91906149a3565b60405180910390f35b3480156105ef57600080fd5b506105f861120b565b6040516106059190614660565b60405180910390f35b34801561061a57600080fd5b506106356004803603810190610630919061467b565b61121e565b6040516106429190614660565b60405180910390f35b34801561065757600080fd5b50610660611274565b60405161066d91906148c2565b60405180910390f35b34801561068257600080fd5b5061068b61127a565b60405161069891906148c2565b60405180910390f35b3480156106ad57600080fd5b506106b6611280565b6040516106c39190614660565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee919061467b565b611293565b60405161070091906148c2565b60405180910390f35b34801561071557600080fd5b5061071e6112db565b005b34801561072c57600080fd5b50610735611433565b6040516107429190614660565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d91906149ea565b6114ee565b005b34801561078057600080fd5b506107896115e0565b60405161079691906148c2565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c19190614a2a565b6115e6565b005b3480156107d457600080fd5b506107dd611700565b6040516107ea91906149a3565b60405180910390f35b3480156107ff57600080fd5b5061080861172a565b60405161081591906148c2565b60405180910390f35b34801561082a57600080fd5b50610833611730565b604051610840919061453b565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b91906149ea565b6117c2565b005b34801561087e57600080fd5b5061089960048036038101906108949190614605565b6118f5565b6040516108a69190614660565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d1919061467b565b6119c2565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190614605565b611b19565b60405161090c9190614660565b60405180910390f35b34801561092157600080fd5b5061093c600480360381019061093791906147f0565b611b37565b005b34801561094a57600080fd5b50610953611c63565b60405161096091906148c2565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b919061467b565b611c69565b005b34801561099e57600080fd5b506109a7611dc0565b6040516109b491906148c2565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df919061467b565b611dc6565b6040516109f19190614660565b60405180910390f35b348015610a0657600080fd5b50610a0f611de6565b604051610a1c9190614660565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a4791906149ea565b611df9565b005b348015610a5a57600080fd5b50610a756004803603810190610a709190614a2a565b611f39565b005b348015610a8357600080fd5b50610a9e6004803603810190610a9991906148dd565b612053565b005b348015610aac57600080fd5b50610ac76004803603810190610ac2919061467b565b61216a565b604051610ad49190614660565b60405180910390f35b348015610ae957600080fd5b50610b046004803603810190610aff9190614b40565b6121c0565b005b348015610b1257600080fd5b50610b1b612363565b604051610b289190614660565b60405180910390f35b348015610b3d57600080fd5b50610b46612376565b604051610b5391906148c2565b60405180910390f35b348015610b6857600080fd5b50610b836004803603810190610b7e91906148dd565b61237c565b604051610b909190614660565b60405180910390f35b348015610ba557600080fd5b50610bae6124ec565b604051610bbb91906148c2565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190614bb8565b6124f2565b604051610bf891906148c2565b60405180910390f35b348015610c0d57600080fd5b50610c16612579565b604051610c2391906148c2565b60405180910390f35b348015610c3857600080fd5b50610c4161257f565b604051610c4e9190614660565b60405180910390f35b348015610c6357600080fd5b50610c7e6004803603810190610c799190614bf8565b61263a565b005b348015610c8c57600080fd5b50610c95612710565b604051610ca291906148c2565b60405180910390f35b348015610cb757600080fd5b50610cd26004803603810190610ccd919061467b565b612716565b005b348015610ce057600080fd5b50610ce96128dc565b604051610cf691906148c2565b60405180910390f35b606060038054610d0e90614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a90614c67565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b5050505050905090565b6000610da5610d9e612940565b8484612948565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b610dd7612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90614ce4565b60405180910390fd5b60005b8151811015610ef7576001600d6000848481518110610e8b57610e8a614d04565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610eef90614d62565b915050610e69565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60185481565b60175481565b610f3d612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390614ce4565b60405180910390fd5b670de0b6b3a76400006103e86001610fe2610f1f565b610fec9190614daa565b610ff69190614e1b565b6110009190614e1b565b811015611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990614ebe565b60405180910390fd5b8060088190555050565b6000611059848484612b11565b61111a84611065612940565b61111585604051806060016040528060288152602001615d1860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110cb612940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f9092919063ffffffff16565b612948565b600190509392505050565b60165481565b60006012905090565b60006111dd611141612940565b846111d88560016000611152612940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e290919063ffffffff16565b612948565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112e3612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136990614ce4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061143d612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c390614ce4565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114f6612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c90614ce4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b6115ee612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490614ce4565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546116a59190614ede565b6116af9190614ede565b600f81905550603c600f5411156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290614f5e565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b60606004805461173f90614c67565b80601f016020809104026020016040519081016040528092919081815260200182805461176b90614c67565b80156117b85780601f1061178d576101008083540402835291602001916117b8565b820191906000526020600020905b81548152906001019060200180831161179b57829003601f168201915b5050505050905090565b6117ca612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090614ce4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90614ff0565b60405180910390fd5b6118f18282613a03565b5050565b60006119b8611902612940565b846119b385604051806060016040528060258152602001615d40602591396001600061192c612940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f9092919063ffffffff16565b612948565b6001905092915050565b6119ca612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5090614ce4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3730fd66e78d337e704adc3d944ecab92473364caed366d375e16a5372ac485760405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611b2d611b26612940565b8484612b11565b6001905092915050565b611b3f612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc590614ce4565b60405180910390fd5b60005b8151811015611c5f576000600d6000848481518110611bf357611bf2614d04565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c5790614d62565b915050611bd1565b5050565b600a5481565b611c71612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf790614ce4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b601d6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611e01612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790614ce4565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f2d9190614660565b60405180910390a25050565b611f41612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790614ce4565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611ff89190614ede565b6120029190614ede565b6013819055506028601354111561204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204590614f5e565b60405180910390fd5b505050565b61205b612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e190614ce4565b60405180910390fd5b670de0b6b3a76400006103e86005612100610f1f565b61210a9190614daa565b6121149190614e1b565b61211e9190614e1b565b811015612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790615082565b60405180910390fd5b80600a8190555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6121c8612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614ce4565b60405180910390fd5b805182511461229b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612292906150ee565b60405180910390fd5b6107d0825111156122e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d890615180565b60405180910390fd5b60005b825181101561235e57600083828151811061230257612301614d04565b5b602002602001015190506000670de0b6b3a764000084848151811061232a57612329614d04565b5b602002602001015161233c9190614daa565b9050612349338383613aa4565b5050808061235690614d62565b9150506122e4565b505050565b600e60009054906101000a900460ff1681565b60085481565b6000612386612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c90614ce4565b60405180910390fd5b620186a06001612423610f1f565b61242d9190614daa565b6124379190614e1b565b821015612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090615212565b60405180910390fd5b6103e86005612486610f1f565b6124909190614daa565b61249a9190614e1b565b8211156124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d3906152a4565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612589612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260f90614ce4565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b612642612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c890614ce4565b60405180910390fd5b81600b60016101000a81548160ff02191690831515021790555080600b60026101000a81548160ff02191690831515021790555043601a819055505050565b60115481565b61271e612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490614ce4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390615336565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60008082846128f19190614ede565b905083811015612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292d906153a2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae90615434565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1d906154c6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b0491906148c2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7790615558565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be6906155ea565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c935750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc99061567c565b60405180910390fd5b60008103612ceb57612ce683836000613aa4565b61399a565b600b60009054906101000a900460ff16156133ae57612d08611700565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d765750612d46611700565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612daf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612de9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e025750600560149054906101000a900460ff16155b156133ad57600b60019054906101000a900460ff16612efc57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ebc5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef2906156e8565b60405180910390fd5b5b600e60009054906101000a900460ff16156130c457612f19611700565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fa057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ff857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130c35743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061307e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613075906157a0565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131675750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561320e576008548111156131b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a890615832565b60405180910390fd5b600a546131bd83611293565b826131c89190614ede565b1115613209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132009061589e565b60405180910390fd5b6133ac565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b15750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613300576008548111156132fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f290615930565b60405180910390fd5b6133ab565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133aa57600a5461335d83611293565b826133689190614ede565b11156133a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a09061589e565b60405180910390fd5b5b5b5b5b5b6000601a546133bd9190614ede565b431115801561341857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156134645750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156134c2576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60006134cd30611293565b9050600060095482101590508080156134f25750600b60029054906101000a900460ff165b801561350b5750600560149054906101000a900460ff16155b80156135615750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135b75750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561360d5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613651576001600560146101000a81548160ff021916908315150217905550613635613d37565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137075750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561371157600090505b6000811561398a57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561377457506000601354115b15613841576137a160646137936013548861401e90919063ffffffff16565b61409890919063ffffffff16565b9050601354601554826137b49190614daa565b6137be9190614e1b565b601860008282546137cf9190614ede565b92505081905550601354601654826137e79190614daa565b6137f19190614e1b565b601960008282546138029190614ede565b925050819055506013546014548261381a9190614daa565b6138249190614e1b565b601760008282546138359190614ede565b92505081905550613966565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561389c57506000600f54115b15613965576138c960646138bb600f548861401e90919063ffffffff16565b61409890919063ffffffff16565b9050600f54601154826138dc9190614daa565b6138e69190614e1b565b601860008282546138f79190614ede565b92505081905550600f546012548261390f9190614daa565b6139199190614e1b565b6019600082825461392a9190614ede565b92505081905550600f54601054826139429190614daa565b61394c9190614e1b565b6017600082825461395d9190614ede565b925050819055505b5b600081111561397b5761397a873083613aa4565b5b80856139879190615950565b94505b613995878787613aa4565b505050505b505050565b60008383111582906139e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139de919061453b565b60405180910390fd5b50600083856139f69190615950565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0a90615558565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b79906155ea565b60405180910390fd5b613b8d8383836140e2565b613bf881604051806060016040528060268152602001615cf2602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d2a91906148c2565b60405180910390a3505050565b6000613d4230611293565b90506000601954601754601854613d599190614ede565b613d639190614ede565b9050600080831480613d755750600082145b15613d825750505061401c565b6014600954613d919190614daa565b831115613daa576014600954613da79190614daa565b92505b600060028360185486613dbd9190614daa565b613dc79190614e1b565b613dd19190614e1b565b90506000613de882866140e790919063ffffffff16565b90506000479050613df882614131565b6000613e0d82476140e790919063ffffffff16565b90506000613e3887613e2a6017548561401e90919063ffffffff16565b61409890919063ffffffff16565b90506000613e6388613e556019548661401e90919063ffffffff16565b61409890919063ffffffff16565b90506000818385613e749190615950565b613e7e9190615950565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ede906159b5565b60006040518083038185875af1925050503d8060008114613f1b576040519150601f19603f3d011682016040523d82523d6000602084013e613f20565b606091505b505080985050600087118015613f365750600081115b15613f8357613f45878261436e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613f7a939291906159ca565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fc9906159b5565b60006040518083038185875af1925050503d8060008114614006576040519150601f19603f3d011682016040523d82523d6000602084013e61400b565b606091505b505080985050505050505050505050505b565b60008083036140305760009050614092565b6000828461403e9190614daa565b905082848261404d9190614e1b565b1461408d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161408490615a73565b60405180910390fd5b809150505b92915050565b60006140da83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614448565b905092915050565b505050565b600061412983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061399f565b905092915050565b6000600267ffffffffffffffff81111561414e5761414d6146ad565b5b60405190808252806020026020018201604052801561417c5781602001602082028036833780820191505090505b509050308160008151811061419457614193614d04565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425d9190615aa8565b8160018151811061427157614270614d04565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142d6307f000000000000000000000000000000000000000000000000000000000000000084612948565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614338959493929190615bce565b600060405180830381600087803b15801561435257600080fd5b505af1158015614366573d6000803e3d6000fd5b505050505050565b614399307f000000000000000000000000000000000000000000000000000000000000000084612948565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016143fe96959493929190615c28565b60606040518083038185885af115801561441c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144419190615c9e565b5050505050565b6000808311829061448f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614486919061453b565b60405180910390fd5b506000838561449e9190614e1b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144e55780820151818401526020810190506144ca565b60008484015250505050565b6000601f19601f8301169050919050565b600061450d826144ab565b61451781856144b6565b93506145278185602086016144c7565b614530816144f1565b840191505092915050565b600060208201905081810360008301526145558184614502565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061459c82614571565b9050919050565b6145ac81614591565b81146145b757600080fd5b50565b6000813590506145c9816145a3565b92915050565b6000819050919050565b6145e2816145cf565b81146145ed57600080fd5b50565b6000813590506145ff816145d9565b92915050565b6000806040838503121561461c5761461b614567565b5b600061462a858286016145ba565b925050602061463b858286016145f0565b9150509250929050565b60008115159050919050565b61465a81614645565b82525050565b60006020820190506146756000830184614651565b92915050565b60006020828403121561469157614690614567565b5b600061469f848285016145ba565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6146e5826144f1565b810181811067ffffffffffffffff82111715614704576147036146ad565b5b80604052505050565b600061471761455d565b905061472382826146dc565b919050565b600067ffffffffffffffff821115614743576147426146ad565b5b602082029050602081019050919050565b600080fd5b600061476c61476784614728565b61470d565b9050808382526020820190506020840283018581111561478f5761478e614754565b5b835b818110156147b857806147a488826145ba565b845260208401935050602081019050614791565b5050509392505050565b600082601f8301126147d7576147d66146a8565b5b81356147e7848260208601614759565b91505092915050565b60006020828403121561480657614805614567565b5b600082013567ffffffffffffffff8111156148245761482361456c565b5b614830848285016147c2565b91505092915050565b6000819050919050565b600061485e61485961485484614571565b614839565b614571565b9050919050565b600061487082614843565b9050919050565b600061488282614865565b9050919050565b61489281614877565b82525050565b60006020820190506148ad6000830184614889565b92915050565b6148bc816145cf565b82525050565b60006020820190506148d760008301846148b3565b92915050565b6000602082840312156148f3576148f2614567565b5b6000614901848285016145f0565b91505092915050565b60008060006060848603121561492357614922614567565b5b6000614931868287016145ba565b9350506020614942868287016145ba565b9250506040614953868287016145f0565b9150509250925092565b600060ff82169050919050565b6149738161495d565b82525050565b600060208201905061498e600083018461496a565b92915050565b61499d81614591565b82525050565b60006020820190506149b86000830184614994565b92915050565b6149c781614645565b81146149d257600080fd5b50565b6000813590506149e4816149be565b92915050565b60008060408385031215614a0157614a00614567565b5b6000614a0f858286016145ba565b9250506020614a20858286016149d5565b9150509250929050565b600080600060608486031215614a4357614a42614567565b5b6000614a51868287016145f0565b9350506020614a62868287016145f0565b9250506040614a73868287016145f0565b9150509250925092565b600067ffffffffffffffff821115614a9857614a976146ad565b5b602082029050602081019050919050565b6000614abc614ab784614a7d565b61470d565b90508083825260208201905060208402830185811115614adf57614ade614754565b5b835b81811015614b085780614af488826145f0565b845260208401935050602081019050614ae1565b5050509392505050565b600082601f830112614b2757614b266146a8565b5b8135614b37848260208601614aa9565b91505092915050565b60008060408385031215614b5757614b56614567565b5b600083013567ffffffffffffffff811115614b7557614b7461456c565b5b614b81858286016147c2565b925050602083013567ffffffffffffffff811115614ba257614ba161456c565b5b614bae85828601614b12565b9150509250929050565b60008060408385031215614bcf57614bce614567565b5b6000614bdd858286016145ba565b9250506020614bee858286016145ba565b9150509250929050565b60008060408385031215614c0f57614c0e614567565b5b6000614c1d858286016149d5565b9250506020614c2e858286016149d5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b602082108103614c9257614c91614c38565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cce6020836144b6565b9150614cd982614c98565b602082019050919050565b60006020820190508181036000830152614cfd81614cc1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d6d826145cf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d9f57614d9e614d33565b5b600182019050919050565b6000614db5826145cf565b9150614dc0836145cf565b9250828202614dce816145cf565b91508282048414831517614de557614de4614d33565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e26826145cf565b9150614e31836145cf565b925082614e4157614e40614dec565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614ea8602f836144b6565b9150614eb382614e4c565b604082019050919050565b60006020820190508181036000830152614ed781614e9b565b9050919050565b6000614ee9826145cf565b9150614ef4836145cf565b9250828201905080821115614f0c57614f0b614d33565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000614f48601d836144b6565b9150614f5382614f12565b602082019050919050565b60006020820190508181036000830152614f7781614f3b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fda6039836144b6565b9150614fe582614f7e565b604082019050919050565b6000602082019050818103600083015261500981614fcd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574416d6f756e74206c6f77657260008201527f207468616e20302e352500000000000000000000000000000000000000000000602082015250565b600061506c602a836144b6565b915061507782615010565b604082019050919050565b6000602082019050818103600083015261509b8161505f565b9050919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b60006150d8601e836144b6565b91506150e3826150a2565b602082019050919050565b60006020820190508181036000830152615107816150cb565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030300000000000000000000000000000000000000000000000000000000000602082015250565b600061516a6023836144b6565b91506151758261510e565b604082019050919050565b600060208201905081810360008301526151998161515d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006151fc6035836144b6565b9150615207826151a0565b604082019050919050565b6000602082019050818103600083015261522b816151ef565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061528e6034836144b6565b915061529982615232565b604082019050919050565b600060208201905081810360008301526152bd81615281565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153206026836144b6565b915061532b826152c4565b604082019050919050565b6000602082019050818103600083015261534f81615313565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061538c601b836144b6565b915061539782615356565b602082019050919050565b600060208201905081810360008301526153bb8161537f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061541e6024836144b6565b9150615429826153c2565b604082019050919050565b6000602082019050818103600083015261544d81615411565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154b06022836144b6565b91506154bb82615454565b604082019050919050565b600060208201905081810360008301526154df816154a3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155426025836144b6565b915061554d826154e6565b604082019050919050565b6000602082019050818103600083015261557181615535565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155d46023836144b6565b91506155df82615578565b604082019050919050565b60006020820190508181036000830152615603816155c7565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006156666031836144b6565b91506156718261560a565b604082019050919050565b6000602082019050818103600083015261569581615659565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156d26016836144b6565b91506156dd8261569c565b602082019050919050565b60006020820190508181036000830152615701816156c5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061578a6049836144b6565b915061579582615708565b606082019050919050565b600060208201905081810360008301526157b98161577d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061581c6035836144b6565b9150615827826157c0565b604082019050919050565b6000602082019050818103600083015261584b8161580f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006158886013836144b6565b915061589382615852565b602082019050919050565b600060208201905081810360008301526158b78161587b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061591a6036836144b6565b9150615925826158be565b604082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b826145cf565b9150615966836145cf565b925082820390508181111561597e5761597d614d33565b5b92915050565b600081905092915050565b50565b600061599f600083615984565b91506159aa8261598f565b600082019050919050565b60006159c082615992565b9150819050919050565b60006060820190506159df60008301866148b3565b6159ec60208301856148b3565b6159f960408301846148b3565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a5d6021836144b6565b9150615a6882615a01565b604082019050919050565b60006020820190508181036000830152615a8c81615a50565b9050919050565b600081519050615aa2816145a3565b92915050565b600060208284031215615abe57615abd614567565b5b6000615acc84828501615a93565b91505092915050565b6000819050919050565b6000615afa615af5615af084615ad5565b614839565b6145cf565b9050919050565b615b0a81615adf565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b4581614591565b82525050565b6000615b578383615b3c565b60208301905092915050565b6000602082019050919050565b6000615b7b82615b10565b615b858185615b1b565b9350615b9083615b2c565b8060005b83811015615bc1578151615ba88882615b4b565b9750615bb383615b63565b925050600181019050615b94565b5085935050505092915050565b600060a082019050615be360008301886148b3565b615bf06020830187615b01565b8181036040830152615c028186615b70565b9050615c116060830185614994565b615c1e60808301846148b3565b9695505050505050565b600060c082019050615c3d6000830189614994565b615c4a60208301886148b3565b615c576040830187615b01565b615c646060830186615b01565b615c716080830185614994565b615c7e60a08301846148b3565b979650505050505050565b600081519050615c98816145d9565b92915050565b600080600060608486031215615cb757615cb6614567565b5b6000615cc586828701615c89565b9350506020615cd686828701615c89565b9250506040615ce786828701615c89565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ee99cd1da328f4e87c7a3600f6c9fc44cb8b59f17064a5ce7becfd0229a6ae8464736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103395760003560e01c806395d89b41116101ab578063c18bc195116100f7578063dd62ed3e11610095578063ed09924f1161006f578063ed09924f14610c57578063f11a24d314610c80578063f2fde38b14610cab578063f637434214610cd457610340565b8063dd62ed3e14610bc4578063e2f4560514610c01578063e884f26014610c2c57610340565b8063c876d0b9116100d1578063c876d0b914610b06578063c8c8ebe414610b31578063d257b34f14610b5c578063d85ba06314610b9957610340565b8063c18bc19514610a77578063c23697a814610aa0578063c558ae6b14610add57610340565b8063aa4bde2811610164578063b62496f51161013e578063b62496f5146109bd578063bbc0c742146109fa578063c024666814610a25578063c17b5b8c14610a4e57610340565b8063aa4bde281461093e578063aacebbe314610969578063b51ac2c61461099257610340565b806395d89b411461081e5780639a7a23d614610849578063a457c2d714610872578063a841ebad146108af578063a9059cbb146108d8578063a910a4c01461091557610340565b806349bd5a5e11610285578063715018a6116102235780637bce5a04116101fd5780637bce5a04146107745780638095d5641461079f5780638da5cb5b146107c857806392136913146107f357610340565b8063715018a614610709578063751039fc146107205780637571336a1461074b57610340565b8063663f95c71161025f578063663f95c71461064b5780636a486a8e146106765780636ddd1713146106a157806370a08231146106cc57610340565b806349bd5a5e146105b85780634a62bb65146105e35780634fbee1931461060e57610340565b80631a8145bb116102f257806323b872dd116102cc57806323b872dd146104e85780632b14bbff14610525578063313ce56714610550578063395093511461057b57610340565b80631a8145bb146104695780631f3fed8f14610494578063203e727e146104bf57610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad578063146368c8146103ea5780631694505e1461041357806318160ddd1461043e57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cff565b604051610367919061453b565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190614605565b610d91565b6040516103a49190614660565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf919061467b565b610daf565b6040516103e19190614660565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c91906147f0565b610dcf565b005b34801561041f57600080fd5b50610428610efb565b6040516104359190614898565b60405180910390f35b34801561044a57600080fd5b50610453610f1f565b60405161046091906148c2565b60405180910390f35b34801561047557600080fd5b5061047e610f29565b60405161048b91906148c2565b60405180910390f35b3480156104a057600080fd5b506104a9610f2f565b6040516104b691906148c2565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e191906148dd565b610f35565b005b3480156104f457600080fd5b5061050f600480360381019061050a919061490a565b61104c565b60405161051c9190614660565b60405180910390f35b34801561053157600080fd5b5061053a611125565b60405161054791906148c2565b60405180910390f35b34801561055c57600080fd5b5061056561112b565b6040516105729190614979565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190614605565b611134565b6040516105af9190614660565b60405180910390f35b3480156105c457600080fd5b506105cd6111e7565b6040516105da91906149a3565b60405180910390f35b3480156105ef57600080fd5b506105f861120b565b6040516106059190614660565b60405180910390f35b34801561061a57600080fd5b506106356004803603810190610630919061467b565b61121e565b6040516106429190614660565b60405180910390f35b34801561065757600080fd5b50610660611274565b60405161066d91906148c2565b60405180910390f35b34801561068257600080fd5b5061068b61127a565b60405161069891906148c2565b60405180910390f35b3480156106ad57600080fd5b506106b6611280565b6040516106c39190614660565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee919061467b565b611293565b60405161070091906148c2565b60405180910390f35b34801561071557600080fd5b5061071e6112db565b005b34801561072c57600080fd5b50610735611433565b6040516107429190614660565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d91906149ea565b6114ee565b005b34801561078057600080fd5b506107896115e0565b60405161079691906148c2565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c19190614a2a565b6115e6565b005b3480156107d457600080fd5b506107dd611700565b6040516107ea91906149a3565b60405180910390f35b3480156107ff57600080fd5b5061080861172a565b60405161081591906148c2565b60405180910390f35b34801561082a57600080fd5b50610833611730565b604051610840919061453b565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b91906149ea565b6117c2565b005b34801561087e57600080fd5b5061089960048036038101906108949190614605565b6118f5565b6040516108a69190614660565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d1919061467b565b6119c2565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190614605565b611b19565b60405161090c9190614660565b60405180910390f35b34801561092157600080fd5b5061093c600480360381019061093791906147f0565b611b37565b005b34801561094a57600080fd5b50610953611c63565b60405161096091906148c2565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b919061467b565b611c69565b005b34801561099e57600080fd5b506109a7611dc0565b6040516109b491906148c2565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df919061467b565b611dc6565b6040516109f19190614660565b60405180910390f35b348015610a0657600080fd5b50610a0f611de6565b604051610a1c9190614660565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a4791906149ea565b611df9565b005b348015610a5a57600080fd5b50610a756004803603810190610a709190614a2a565b611f39565b005b348015610a8357600080fd5b50610a9e6004803603810190610a9991906148dd565b612053565b005b348015610aac57600080fd5b50610ac76004803603810190610ac2919061467b565b61216a565b604051610ad49190614660565b60405180910390f35b348015610ae957600080fd5b50610b046004803603810190610aff9190614b40565b6121c0565b005b348015610b1257600080fd5b50610b1b612363565b604051610b289190614660565b60405180910390f35b348015610b3d57600080fd5b50610b46612376565b604051610b5391906148c2565b60405180910390f35b348015610b6857600080fd5b50610b836004803603810190610b7e91906148dd565b61237c565b604051610b909190614660565b60405180910390f35b348015610ba557600080fd5b50610bae6124ec565b604051610bbb91906148c2565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190614bb8565b6124f2565b604051610bf891906148c2565b60405180910390f35b348015610c0d57600080fd5b50610c16612579565b604051610c2391906148c2565b60405180910390f35b348015610c3857600080fd5b50610c4161257f565b604051610c4e9190614660565b60405180910390f35b348015610c6357600080fd5b50610c7e6004803603810190610c799190614bf8565b61263a565b005b348015610c8c57600080fd5b50610c95612710565b604051610ca291906148c2565b60405180910390f35b348015610cb757600080fd5b50610cd26004803603810190610ccd919061467b565b612716565b005b348015610ce057600080fd5b50610ce96128dc565b604051610cf691906148c2565b60405180910390f35b606060038054610d0e90614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a90614c67565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b5050505050905090565b6000610da5610d9e612940565b8484612948565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b610dd7612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90614ce4565b60405180910390fd5b60005b8151811015610ef7576001600d6000848481518110610e8b57610e8a614d04565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610eef90614d62565b915050610e69565b5050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60185481565b60175481565b610f3d612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390614ce4565b60405180910390fd5b670de0b6b3a76400006103e86001610fe2610f1f565b610fec9190614daa565b610ff69190614e1b565b6110009190614e1b565b811015611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990614ebe565b60405180910390fd5b8060088190555050565b6000611059848484612b11565b61111a84611065612940565b61111585604051806060016040528060288152602001615d1860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110cb612940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f9092919063ffffffff16565b612948565b600190509392505050565b60165481565b60006012905090565b60006111dd611141612940565b846111d88560016000611152612940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e290919063ffffffff16565b612948565b6001905092915050565b7f0000000000000000000000007e18841a035e7831eb6fb07ddb1845ed91c5c4fd81565b600b60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112e3612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136990614ce4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061143d612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c390614ce4565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114f6612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c90614ce4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b6115ee612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490614ce4565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546116a59190614ede565b6116af9190614ede565b600f81905550603c600f5411156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290614f5e565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b60606004805461173f90614c67565b80601f016020809104026020016040519081016040528092919081815260200182805461176b90614c67565b80156117b85780601f1061178d576101008083540402835291602001916117b8565b820191906000526020600020905b81548152906001019060200180831161179b57829003601f168201915b5050505050905090565b6117ca612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090614ce4565b60405180910390fd5b7f0000000000000000000000007e18841a035e7831eb6fb07ddb1845ed91c5c4fd73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90614ff0565b60405180910390fd5b6118f18282613a03565b5050565b60006119b8611902612940565b846119b385604051806060016040528060258152602001615d40602591396001600061192c612940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f9092919063ffffffff16565b612948565b6001905092915050565b6119ca612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5090614ce4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3730fd66e78d337e704adc3d944ecab92473364caed366d375e16a5372ac485760405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611b2d611b26612940565b8484612b11565b6001905092915050565b611b3f612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc590614ce4565b60405180910390fd5b60005b8151811015611c5f576000600d6000848481518110611bf357611bf2614d04565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c5790614d62565b915050611bd1565b5050565b600a5481565b611c71612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf790614ce4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b601d6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611e01612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790614ce4565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f2d9190614660565b60405180910390a25050565b611f41612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790614ce4565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611ff89190614ede565b6120029190614ede565b6013819055506028601354111561204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204590614f5e565b60405180910390fd5b505050565b61205b612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e190614ce4565b60405180910390fd5b670de0b6b3a76400006103e86005612100610f1f565b61210a9190614daa565b6121149190614e1b565b61211e9190614e1b565b811015612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790615082565b60405180910390fd5b80600a8190555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6121c8612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614ce4565b60405180910390fd5b805182511461229b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612292906150ee565b60405180910390fd5b6107d0825111156122e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d890615180565b60405180910390fd5b60005b825181101561235e57600083828151811061230257612301614d04565b5b602002602001015190506000670de0b6b3a764000084848151811061232a57612329614d04565b5b602002602001015161233c9190614daa565b9050612349338383613aa4565b5050808061235690614d62565b9150506122e4565b505050565b600e60009054906101000a900460ff1681565b60085481565b6000612386612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c90614ce4565b60405180910390fd5b620186a06001612423610f1f565b61242d9190614daa565b6124379190614e1b565b821015612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090615212565b60405180910390fd5b6103e86005612486610f1f565b6124909190614daa565b61249a9190614e1b565b8211156124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d3906152a4565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612589612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260f90614ce4565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b612642612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c890614ce4565b60405180910390fd5b81600b60016101000a81548160ff02191690831515021790555080600b60026101000a81548160ff02191690831515021790555043601a819055505050565b60115481565b61271e612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490614ce4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390615336565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60008082846128f19190614ede565b905083811015612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292d906153a2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae90615434565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1d906154c6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b0491906148c2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7790615558565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be6906155ea565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c935750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc99061567c565b60405180910390fd5b60008103612ceb57612ce683836000613aa4565b61399a565b600b60009054906101000a900460ff16156133ae57612d08611700565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d765750612d46611700565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612daf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612de9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e025750600560149054906101000a900460ff16155b156133ad57600b60019054906101000a900460ff16612efc57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ebc5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef2906156e8565b60405180910390fd5b5b600e60009054906101000a900460ff16156130c457612f19611700565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fa057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ff857507f0000000000000000000000007e18841a035e7831eb6fb07ddb1845ed91c5c4fd73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130c35743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061307e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613075906157a0565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131675750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561320e576008548111156131b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a890615832565b60405180910390fd5b600a546131bd83611293565b826131c89190614ede565b1115613209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132009061589e565b60405180910390fd5b6133ac565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b15750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613300576008548111156132fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f290615930565b60405180910390fd5b6133ab565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133aa57600a5461335d83611293565b826133689190614ede565b11156133a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a09061589e565b60405180910390fd5b5b5b5b5b5b6000601a546133bd9190614ede565b431115801561341857507f0000000000000000000000007e18841a035e7831eb6fb07ddb1845ed91c5c4fd73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156134645750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156134c2576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60006134cd30611293565b9050600060095482101590508080156134f25750600b60029054906101000a900460ff165b801561350b5750600560149054906101000a900460ff16155b80156135615750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135b75750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561360d5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613651576001600560146101000a81548160ff021916908315150217905550613635613d37565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137075750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561371157600090505b6000811561398a57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561377457506000601354115b15613841576137a160646137936013548861401e90919063ffffffff16565b61409890919063ffffffff16565b9050601354601554826137b49190614daa565b6137be9190614e1b565b601860008282546137cf9190614ede565b92505081905550601354601654826137e79190614daa565b6137f19190614e1b565b601960008282546138029190614ede565b925050819055506013546014548261381a9190614daa565b6138249190614e1b565b601760008282546138359190614ede565b92505081905550613966565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561389c57506000600f54115b15613965576138c960646138bb600f548861401e90919063ffffffff16565b61409890919063ffffffff16565b9050600f54601154826138dc9190614daa565b6138e69190614e1b565b601860008282546138f79190614ede565b92505081905550600f546012548261390f9190614daa565b6139199190614e1b565b6019600082825461392a9190614ede565b92505081905550600f54601054826139429190614daa565b61394c9190614e1b565b6017600082825461395d9190614ede565b925050819055505b5b600081111561397b5761397a873083613aa4565b5b80856139879190615950565b94505b613995878787613aa4565b505050505b505050565b60008383111582906139e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139de919061453b565b60405180910390fd5b50600083856139f69190615950565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0a90615558565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b79906155ea565b60405180910390fd5b613b8d8383836140e2565b613bf881604051806060016040528060268152602001615cf2602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d2a91906148c2565b60405180910390a3505050565b6000613d4230611293565b90506000601954601754601854613d599190614ede565b613d639190614ede565b9050600080831480613d755750600082145b15613d825750505061401c565b6014600954613d919190614daa565b831115613daa576014600954613da79190614daa565b92505b600060028360185486613dbd9190614daa565b613dc79190614e1b565b613dd19190614e1b565b90506000613de882866140e790919063ffffffff16565b90506000479050613df882614131565b6000613e0d82476140e790919063ffffffff16565b90506000613e3887613e2a6017548561401e90919063ffffffff16565b61409890919063ffffffff16565b90506000613e6388613e556019548661401e90919063ffffffff16565b61409890919063ffffffff16565b90506000818385613e749190615950565b613e7e9190615950565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ede906159b5565b60006040518083038185875af1925050503d8060008114613f1b576040519150601f19603f3d011682016040523d82523d6000602084013e613f20565b606091505b505080985050600087118015613f365750600081115b15613f8357613f45878261436e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613f7a939291906159ca565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fc9906159b5565b60006040518083038185875af1925050503d8060008114614006576040519150601f19603f3d011682016040523d82523d6000602084013e61400b565b606091505b505080985050505050505050505050505b565b60008083036140305760009050614092565b6000828461403e9190614daa565b905082848261404d9190614e1b565b1461408d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161408490615a73565b60405180910390fd5b809150505b92915050565b60006140da83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614448565b905092915050565b505050565b600061412983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061399f565b905092915050565b6000600267ffffffffffffffff81111561414e5761414d6146ad565b5b60405190808252806020026020018201604052801561417c5781602001602082028036833780820191505090505b509050308160008151811061419457614193614d04565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425d9190615aa8565b8160018151811061427157614270614d04565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142d6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612948565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614338959493929190615bce565b600060405180830381600087803b15801561435257600080fd5b505af1158015614366573d6000803e3d6000fd5b505050505050565b614399307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612948565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016143fe96959493929190615c28565b60606040518083038185885af115801561441c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144419190615c9e565b5050505050565b6000808311829061448f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614486919061453b565b60405180910390fd5b506000838561449e9190614e1b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144e55780820151818401526020810190506144ca565b60008484015250505050565b6000601f19601f8301169050919050565b600061450d826144ab565b61451781856144b6565b93506145278185602086016144c7565b614530816144f1565b840191505092915050565b600060208201905081810360008301526145558184614502565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061459c82614571565b9050919050565b6145ac81614591565b81146145b757600080fd5b50565b6000813590506145c9816145a3565b92915050565b6000819050919050565b6145e2816145cf565b81146145ed57600080fd5b50565b6000813590506145ff816145d9565b92915050565b6000806040838503121561461c5761461b614567565b5b600061462a858286016145ba565b925050602061463b858286016145f0565b9150509250929050565b60008115159050919050565b61465a81614645565b82525050565b60006020820190506146756000830184614651565b92915050565b60006020828403121561469157614690614567565b5b600061469f848285016145ba565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6146e5826144f1565b810181811067ffffffffffffffff82111715614704576147036146ad565b5b80604052505050565b600061471761455d565b905061472382826146dc565b919050565b600067ffffffffffffffff821115614743576147426146ad565b5b602082029050602081019050919050565b600080fd5b600061476c61476784614728565b61470d565b9050808382526020820190506020840283018581111561478f5761478e614754565b5b835b818110156147b857806147a488826145ba565b845260208401935050602081019050614791565b5050509392505050565b600082601f8301126147d7576147d66146a8565b5b81356147e7848260208601614759565b91505092915050565b60006020828403121561480657614805614567565b5b600082013567ffffffffffffffff8111156148245761482361456c565b5b614830848285016147c2565b91505092915050565b6000819050919050565b600061485e61485961485484614571565b614839565b614571565b9050919050565b600061487082614843565b9050919050565b600061488282614865565b9050919050565b61489281614877565b82525050565b60006020820190506148ad6000830184614889565b92915050565b6148bc816145cf565b82525050565b60006020820190506148d760008301846148b3565b92915050565b6000602082840312156148f3576148f2614567565b5b6000614901848285016145f0565b91505092915050565b60008060006060848603121561492357614922614567565b5b6000614931868287016145ba565b9350506020614942868287016145ba565b9250506040614953868287016145f0565b9150509250925092565b600060ff82169050919050565b6149738161495d565b82525050565b600060208201905061498e600083018461496a565b92915050565b61499d81614591565b82525050565b60006020820190506149b86000830184614994565b92915050565b6149c781614645565b81146149d257600080fd5b50565b6000813590506149e4816149be565b92915050565b60008060408385031215614a0157614a00614567565b5b6000614a0f858286016145ba565b9250506020614a20858286016149d5565b9150509250929050565b600080600060608486031215614a4357614a42614567565b5b6000614a51868287016145f0565b9350506020614a62868287016145f0565b9250506040614a73868287016145f0565b9150509250925092565b600067ffffffffffffffff821115614a9857614a976146ad565b5b602082029050602081019050919050565b6000614abc614ab784614a7d565b61470d565b90508083825260208201905060208402830185811115614adf57614ade614754565b5b835b81811015614b085780614af488826145f0565b845260208401935050602081019050614ae1565b5050509392505050565b600082601f830112614b2757614b266146a8565b5b8135614b37848260208601614aa9565b91505092915050565b60008060408385031215614b5757614b56614567565b5b600083013567ffffffffffffffff811115614b7557614b7461456c565b5b614b81858286016147c2565b925050602083013567ffffffffffffffff811115614ba257614ba161456c565b5b614bae85828601614b12565b9150509250929050565b60008060408385031215614bcf57614bce614567565b5b6000614bdd858286016145ba565b9250506020614bee858286016145ba565b9150509250929050565b60008060408385031215614c0f57614c0e614567565b5b6000614c1d858286016149d5565b9250506020614c2e858286016149d5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b602082108103614c9257614c91614c38565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cce6020836144b6565b9150614cd982614c98565b602082019050919050565b60006020820190508181036000830152614cfd81614cc1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d6d826145cf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d9f57614d9e614d33565b5b600182019050919050565b6000614db5826145cf565b9150614dc0836145cf565b9250828202614dce816145cf565b91508282048414831517614de557614de4614d33565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e26826145cf565b9150614e31836145cf565b925082614e4157614e40614dec565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614ea8602f836144b6565b9150614eb382614e4c565b604082019050919050565b60006020820190508181036000830152614ed781614e9b565b9050919050565b6000614ee9826145cf565b9150614ef4836145cf565b9250828201905080821115614f0c57614f0b614d33565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000614f48601d836144b6565b9150614f5382614f12565b602082019050919050565b60006020820190508181036000830152614f7781614f3b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fda6039836144b6565b9150614fe582614f7e565b604082019050919050565b6000602082019050818103600083015261500981614fcd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574416d6f756e74206c6f77657260008201527f207468616e20302e352500000000000000000000000000000000000000000000602082015250565b600061506c602a836144b6565b915061507782615010565b604082019050919050565b6000602082019050818103600083015261509b8161505f565b9050919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b60006150d8601e836144b6565b91506150e3826150a2565b602082019050919050565b60006020820190508181036000830152615107816150cb565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030300000000000000000000000000000000000000000000000000000000000602082015250565b600061516a6023836144b6565b91506151758261510e565b604082019050919050565b600060208201905081810360008301526151998161515d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006151fc6035836144b6565b9150615207826151a0565b604082019050919050565b6000602082019050818103600083015261522b816151ef565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061528e6034836144b6565b915061529982615232565b604082019050919050565b600060208201905081810360008301526152bd81615281565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153206026836144b6565b915061532b826152c4565b604082019050919050565b6000602082019050818103600083015261534f81615313565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061538c601b836144b6565b915061539782615356565b602082019050919050565b600060208201905081810360008301526153bb8161537f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061541e6024836144b6565b9150615429826153c2565b604082019050919050565b6000602082019050818103600083015261544d81615411565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154b06022836144b6565b91506154bb82615454565b604082019050919050565b600060208201905081810360008301526154df816154a3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155426025836144b6565b915061554d826154e6565b604082019050919050565b6000602082019050818103600083015261557181615535565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155d46023836144b6565b91506155df82615578565b604082019050919050565b60006020820190508181036000830152615603816155c7565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006156666031836144b6565b91506156718261560a565b604082019050919050565b6000602082019050818103600083015261569581615659565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156d26016836144b6565b91506156dd8261569c565b602082019050919050565b60006020820190508181036000830152615701816156c5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061578a6049836144b6565b915061579582615708565b606082019050919050565b600060208201905081810360008301526157b98161577d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061581c6035836144b6565b9150615827826157c0565b604082019050919050565b6000602082019050818103600083015261584b8161580f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006158886013836144b6565b915061589382615852565b602082019050919050565b600060208201905081810360008301526158b78161587b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061591a6036836144b6565b9150615925826158be565b604082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b826145cf565b9150615966836145cf565b925082820390508181111561597e5761597d614d33565b5b92915050565b600081905092915050565b50565b600061599f600083615984565b91506159aa8261598f565b600082019050919050565b60006159c082615992565b9150819050919050565b60006060820190506159df60008301866148b3565b6159ec60208301856148b3565b6159f960408301846148b3565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a5d6021836144b6565b9150615a6882615a01565b604082019050919050565b60006020820190508181036000830152615a8c81615a50565b9050919050565b600081519050615aa2816145a3565b92915050565b600060208284031215615abe57615abd614567565b5b6000615acc84828501615a93565b91505092915050565b6000819050919050565b6000615afa615af5615af084615ad5565b614839565b6145cf565b9050919050565b615b0a81615adf565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b4581614591565b82525050565b6000615b578383615b3c565b60208301905092915050565b6000602082019050919050565b6000615b7b82615b10565b615b858185615b1b565b9350615b9083615b2c565b8060005b83811015615bc1578151615ba88882615b4b565b9750615bb383615b63565b925050600181019050615b94565b5085935050505092915050565b600060a082019050615be360008301886148b3565b615bf06020830187615b01565b8181036040830152615c028186615b70565b9050615c116060830185614994565b615c1e60808301846148b3565b9695505050505050565b600060c082019050615c3d6000830189614994565b615c4a60208301886148b3565b615c576040830187615b01565b615c646060830186615b01565b615c716080830185614994565b615c7e60a08301846148b3565b979650505050505050565b600081519050615c98816145d9565b92915050565b600080600060608486031215615cb757615cb6614567565b5b6000615cc586828701615c89565b9350506020615cd686828701615c89565b9250506040615ce786828701615c89565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ee99cd1da328f4e87c7a3600f6c9fc44cb8b59f17064a5ce7becfd0229a6ae8464736f6c63430008110033

Deployed Bytecode Sourcemap

29394:16276:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7498:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9672:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30941:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36987:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29477:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8621:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30655:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30615;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34956:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10324:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30580:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8462:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11089:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29535:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29895:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37824:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30695:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30469:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29975:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8793:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22002:148;;;;;;;;;;;;;:::i;:::-;;34173:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35413:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30361:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35960:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21358:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30504:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7718:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36532:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11811:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37658:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9134:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37155:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29855:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37441:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30435:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31164:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29935:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36341:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35571:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35188:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37327:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37959:554;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30278:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29773:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34561:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30327:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9373:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29815:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34355:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33939:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30398:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22306:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30542:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7498:100;7552:13;7585:5;7578:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7498:100;:::o;9672:169::-;9755:4;9772:39;9781:12;:10;:12::i;:::-;9795:7;9804:6;9772:8;:39::i;:::-;9829:4;9822:11;;9672:169;;;;:::o;30941:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;36987:164::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37053:6:::1;37048:96;37069:5;:12;37065:1;:16;37048:96;;;37126:4;37103:10;:20;37114:5;37120:1;37114:8;;;;;;;;:::i;:::-;;;;;;;;37103:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;37083:3;;;;;:::i;:::-;;;;37048:96;;;;36987:164:::0;:::o;29477:51::-;;;:::o;8621:108::-;8682:7;8709:12;;8702:19;;8621:108;:::o;30655:33::-;;;;:::o;30615:::-;;;;:::o;34956:223::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35075:4:::1;35069;35065:1;35049:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35048:31;;;;:::i;:::-;35038:6;:41;;35030:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35165:6;35142:20;:29;;;;34956:223:::0;:::o;10324:355::-;10464:4;10481:36;10491:6;10499:9;10510:6;10481:9;:36::i;:::-;10528:121;10537:6;10545:12;:10;:12::i;:::-;10559:89;10597:6;10559:89;;;;;;;;;;;;;;;;;:11;:19;10571:6;10559:19;;;;;;;;;;;;;;;:33;10579:12;:10;:12::i;:::-;10559:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10528:8;:121::i;:::-;10667:4;10660:11;;10324:355;;;;;:::o;30580:25::-;;;;:::o;8462:93::-;8520:5;8545:2;8538:9;;8462:93;:::o;11089:218::-;11177:4;11194:83;11203:12;:10;:12::i;:::-;11217:7;11226:50;11265:10;11226:11;:25;11238:12;:10;:12::i;:::-;11226:25;;;;;;;;;;;;;;;:34;11252:7;11226:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11194:8;:83::i;:::-;11295:4;11288:11;;11089:218;;;;:::o;29535:38::-;;;:::o;29895:33::-;;;;;;;;;;;;;:::o;37824:125::-;37889:4;37913:19;:28;37933:7;37913:28;;;;;;;;;;;;;;;;;;;;;;;;;37906:35;;37824:125;;;:::o;30695:27::-;;;;:::o;30469:28::-;;;;:::o;29975:30::-;;;;;;;;;;;;;:::o;8793:127::-;8867:7;8894:9;:18;8904:7;8894:18;;;;;;;;;;;;;;;;8887:25;;8793:127;;;:::o;22002:148::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22109:1:::1;22072:40;;22093:6;;;;;;;;;;;22072:40;;;;;;;;;;;;22140:1;22123:6;;:19;;;;;;;;;;;;;;;;;;22002:148::o:0;34173:120::-;34225:4;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34258:5:::1;34241:14;;:22;;;;;;;;;;;;;;;;;;34281:4;34274:11;;34173:120:::0;:::o;35413:144::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35545:4:::1;35503:31;:39;35535:6;35503:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35413:144:::0;;:::o;30361:30::-;;;;:::o;35960:371::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36095:13:::1;36077:15;:31;;;;36137:13;36119:15;:31;;;;36173:8;36161:9;:20;;;;36243:9;;36225:15;;36207;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36192:12;:60;;;;36287:2;36271:12;;:18;;36263:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35960:371:::0;;;:::o;21358:79::-;21396:7;21423:6;;;;;;;;;;;21416:13;;21358:79;:::o;30504:31::-;;;;:::o;7718:104::-;7774:13;7807:7;7800:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7718:104;:::o;36532:245::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36639:13:::1;36631:21;;:4;:21;;::::0;36623:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36728:41;36757:4;36763:5;36728:28;:41::i;:::-;36532:245:::0;;:::o;11811:269::-;11904:4;11921:129;11930:12;:10;:12::i;:::-;11944:7;11953:96;11992:15;11953:96;;;;;;;;;;;;;;;;;:11;:25;11965:12;:10;:12::i;:::-;11953:25;;;;;;;;;;;;;;;:34;11979:7;11953:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11921:8;:129::i;:::-;12068:4;12061:11;;11811:269;;;;:::o;37658:157::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37765:9:::1;;;;;;;;;;;37737:38;;37754:9;37737:38;;;;;;;;;;;;37798:9;37786;;:21;;;;;;;;;;;;;;;;;;37658:157:::0;:::o;9134:175::-;9220:4;9237:42;9247:12;:10;:12::i;:::-;9261:9;9272:6;9237:9;:42::i;:::-;9297:4;9290:11;;9134:175;;;;:::o;37155:164::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37224:6:::1;37219:93;37240:6;:13;37236:1;:17;37219:93;;;37297:5;37273:10;:21;37284:6;37291:1;37284:9;;;;;;;;:::i;:::-;;;;;;;;37273:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37255:3;;;;;:::i;:::-;;;;37219:93;;;;37155:164:::0;:::o;29855:30::-;;;;:::o;37441:208::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37578:15:::1;;;;;;;;;;;37535:59;;37558:18;37535:59;;;;;;;;;;;;37623:18;37605:15;;:36;;;;;;;;;;;;;;;;;;37441:208:::0;:::o;30435:24::-;;;;:::o;31164:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29935:33::-;;;;;;;;;;;;;:::o;36341:182::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36457:8:::1;36426:19;:28;36446:7;36426:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36497:7;36481:34;;;36506:8;36481:34;;;;;;:::i;:::-;;;;;;;;36341:182:::0;;:::o;35571:380::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35708:13:::1;35689:16;:32;;;;35751:13;35732:16;:32;;;;35788:8;35775:10;:21;;;;35861:10;;35842:16;;35823;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;35807:13;:64;;;;35907:2;35890:13;;:19;;35882:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35571:380:::0;;;:::o;35188:216::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35310:4:::1;35304;35300:1;35284:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35283:31;;;;:::i;:::-;35273:6;:41;;35265:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;35390:6;35372:15;:24;;;;35188:216:::0;:::o;37327:99::-;37379:4;37400:10;:18;37411:6;37400:18;;;;;;;;;;;;;;;;;;;;;;;;;37393:25;;37327:99;;;:::o;37959:554::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38122:6:::1;:13;38097:14;:21;:38;38089:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38214:4;38189:14;:21;:29;;38181:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;38274:9;38269:237;38293:14;:21;38289:1;:25;38269:237;;;38336:14;38353;38368:1;38353:17;;;;;;;;:::i;:::-;;;;;;;;38336:34;;38385:21;38422:6;38409;38416:1;38409:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;38385:44;;38444:50;38460:10;38472:6;38480:13;38444:15;:50::i;:::-;38321:185;;38316:3;;;;;:::i;:::-;;;;38269:237;;;;37959:554:::0;;:::o;30278:39::-;;;;;;;;;;;;;:::o;29773:35::-;;;;:::o;34561:386::-;34642:4;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34699:6:::1;34695:1;34679:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34666:9;:39;;34658:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34815:4;34811:1;34795:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34782:9;:37;;34774:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34908:9;34887:18;:30;;;;34935:4;34928:11;;34561:386:::0;;;:::o;30327:27::-;;;;:::o;9373:151::-;9462:7;9489:11;:18;9501:5;9489:18;;;;;;;;;;;;;;;:27;9508:7;9489:27;;;;;;;;;;;;;;;;9482:34;;9373:151;;;;:::o;29815:33::-;;;;:::o;34355:134::-;34415:4;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34454:5:::1;34431:20;;:28;;;;;;;;;;;;;;;;;;34477:4;34470:11;;34355:134:::0;:::o;33939:181::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34035:11:::1;34019:13;;:27;;;;;;;;;;;;;;;;;;34071:5;34057:11;;:19;;;;;;;;;;;;;;;;;;34100:12;34087:10;:25;;;;33939:181:::0;;:::o;30398:30::-;;;;:::o;22306:244::-;21581:12;:10;:12::i;:::-;21571:22;;:6;;;;;;;;;;;:22;;;21563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22415:1:::1;22395:22;;:8;:22;;::::0;22387:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22505:8;22476:38;;22497:6;;;;;;;;;;;22476:38;;;;;;;;;;;;22534:8;22525:6;;:17;;;;;;;;;;;;;;;;;;22306:244:::0;:::o;30542:31::-;;;;:::o;16388:182::-;16446:7;16466:9;16482:1;16478;:5;;;;:::i;:::-;16466:17;;16507:1;16502;:6;;16494:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16561:1;16554:8;;;16388:182;;;;:::o;190:98::-;243:7;270:10;263:17;;190:98;:::o;15007:381::-;15160:1;15143:19;;:5;:19;;;15135:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15241:1;15222:21;;:7;:21;;;15214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15326:6;15296:11;:18;15308:5;15296:18;;;;;;;;;;;;;;;:27;15315:7;15296:27;;;;;;;;;;;;;;;:36;;;;15364:7;15348:32;;15357:5;15348:32;;;15373:6;15348:32;;;;;;:::i;:::-;;;;;;;;15007:381;;;:::o;38527:4418::-;38675:1;38659:18;;:4;:18;;;38651:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38752:1;38738:16;;:2;:16;;;38730:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38814:10;:14;38825:2;38814:14;;;;;;;;;;;;;;;;;;;;;;;;;38813:15;:36;;;;;38833:10;:16;38844:4;38833:16;;;;;;;;;;;;;;;;;;;;;;;;;38832:17;38813:36;38805:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38928:1;38918:6;:11;38915:92;;38946:28;38962:4;38968:2;38972:1;38946:15;:28::i;:::-;38989:7;;38915:92;39023:14;;;;;;;;;;;39020:1823;;;39083:7;:5;:7::i;:::-;39075:15;;:4;:15;;;;:49;;;;;39117:7;:5;:7::i;:::-;39111:13;;:2;:13;;;;39075:49;:86;;;;;39159:1;39145:16;;:2;:16;;;;39075:86;:128;;;;;39196:6;39182:21;;:2;:21;;;;39075:128;:158;;;;;39225:8;;;;;;;;;;;39224:9;39075:158;39053:1779;;;39271:13;;;;;;;;;;;39267:148;;39316:19;:25;39336:4;39316:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39345:19;:23;39365:2;39345:23;;;;;;;;;;;;;;;;;;;;;;;;;39316:52;39308:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39267:148;39574:20;;;;;;;;;;;39570:423;;;39628:7;:5;:7::i;:::-;39622:13;;:2;:13;;;;:47;;;;;39653:15;39639:30;;:2;:30;;;;39622:47;:79;;;;;39687:13;39673:28;;:2;:28;;;;39622:79;39618:356;;;39779:12;39737:28;:39;39766:9;39737:39;;;;;;;;;;;;;;;;:54;39729:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39938:12;39896:28;:39;39925:9;39896:39;;;;;;;;;;;;;;;:54;;;;39618:356;39570:423;40046:25;:31;40072:4;40046:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40082:31;:35;40114:2;40082:35;;;;;;;;;;;;;;;;;;;;;;;;;40081:36;40046:71;40042:775;;;40164:20;;40154:6;:30;;40146:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40303:15;;40286:13;40296:2;40286:9;:13::i;:::-;40277:6;:22;;;;:::i;:::-;:41;;40269:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40042:775;;;40421:25;:29;40447:2;40421:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40455:31;:37;40487:4;40455:37;;;;;;;;;;;;;;;;;;;;;;;;;40454:38;40421:71;40417:400;;;40539:20;;40529:6;:30;;40521:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40417:400;;;40665:31;:35;40697:2;40665:35;;;;;;;;;;;;;;;;;;;;;;;;;40661:156;;40758:15;;40741:13;40751:2;40741:9;:13::i;:::-;40732:6;:22;;;;:::i;:::-;:41;;40724:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40661:156;40417:400;40042:775;39053:1779;39020:1823;40917:1;40904:10;;:14;;;;:::i;:::-;40887:12;:32;;:73;;;;;40947:13;40941:19;;:2;:19;;;;40887:73;:152;;;;;40996:42;40982:57;;:2;:57;;;;40887:152;40883:221;;;41088:4;41071:10;:14;41082:2;41071:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40883:221;41117:28;41148:24;41166:4;41148:9;:24::i;:::-;41117:55;;41186:12;41225:18;;41201:20;:42;;41186:57;;41275:7;:35;;;;;41299:11;;;;;;;;;;;41275:35;:61;;;;;41328:8;;;;;;;;;;;41327:9;41275:61;:110;;;;;41354:25;:31;41380:4;41354:31;;;;;;;;;;;;;;;;;;;;;;;;;41353:32;41275:110;:153;;;;;41403:19;:25;41423:4;41403:25;;;;;;;;;;;;;;;;;;;;;;;;;41402:26;41275:153;:194;;;;;41446:19;:23;41466:2;41446:23;;;;;;;;;;;;;;;;;;;;;;;;;41445:24;41275:194;41257:328;;;41507:4;41496:8;;:15;;;;;;;;;;;;;;;;;;41529:10;:8;:10::i;:::-;41568:5;41557:8;;:16;;;;;;;;;;;;;;;;;;41257:328;41598:12;41614:8;;;;;;;;;;;41613:9;41598:24;;41724:19;:25;41744:4;41724:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41753:19;:23;41773:2;41753:23;;;;;;;;;;;;;;;;;;;;;;;;;41724:52;41721:99;;;41803:5;41793:15;;41721:99;41833:12;41937:7;41934:957;;;41988:25;:29;42014:2;41988:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42037:1;42021:13;;:17;41988:50;41984:754;;;42065:34;42095:3;42065:25;42076:13;;42065:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42058:41;;42166:13;;42147:16;;42140:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42118:18;;:61;;;;;;;:::i;:::-;;;;;;;;42234:13;;42221:10;;42214:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;42198:12;;:49;;;;;;;:::i;:::-;;;;;;;;42314:13;;42295:16;;42288:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42266:18;;:61;;;;;;;:::i;:::-;;;;;;;;41984:754;;;42388:25;:31;42414:4;42388:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42438:1;42423:12;;:16;42388:51;42385:353;;;42467:33;42496:3;42467:24;42478:12;;42467:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42460:40;;42566:12;;42548:15;;42541:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42519:18;;:59;;;;;;;:::i;:::-;;;;;;;;42632:12;;42620:9;;42613:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;42597:12;;:47;;;;;;;:::i;:::-;;;;;;;;42710:12;;42692:15;;42685:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42663:18;;:59;;;;;;;:::i;:::-;;;;;;;;42385:353;41984:754;42765:1;42758:4;:8;42755:93;;;42790:42;42806:4;42820;42827;42790:15;:42::i;:::-;42755:93;42875:4;42865:14;;;;;:::i;:::-;;;41934:957;42904:33;42920:4;42926:2;42930:6;42904:15;:33::i;:::-;38640:4305;;;;38527:4418;;;;:::o;17294:193::-;17380:7;17413:1;17408;:6;;17416:12;17400:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17440:9;17456:1;17452;:5;;;;:::i;:::-;17440:17;;17478:1;17471:8;;;17294:193;;;;;:::o;36786:189::-;36903:5;36869:25;:31;36895:4;36869:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36961:5;36927:40;;36955:4;36927:40;;;;;;;;;;;;36786:189;;:::o;12571:575::-;12729:1;12711:20;;:6;:20;;;12703:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12813:1;12792:23;;:9;:23;;;12784:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12869:47;12890:6;12898:9;12909:6;12869:20;:47::i;:::-;12950:71;12972:6;12950:71;;;;;;;;;;;;;;;;;:9;:17;12960:6;12950:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12930:9;:17;12940:6;12930:17;;;;;;;;;;;;;;;:91;;;;13055:32;13080:6;13055:9;:20;13065:9;13055:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13032:9;:20;13042:9;13032:20;;;;;;;;;;;;;;;:55;;;;13120:9;13103:35;;13112:6;13103:35;;;13131:6;13103:35;;;;;;:::i;:::-;;;;;;;;12571:575;;;:::o;44089:1568::-;44128:23;44154:24;44172:4;44154:9;:24::i;:::-;44128:50;;44189:25;44259:12;;44238:18;;44217;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;44189:82;;44282:12;44330:1;44311:15;:20;:46;;;;44356:1;44335:17;:22;44311:46;44308:60;;;44360:7;;;;;44308:60;44423:2;44402:18;;:23;;;;:::i;:::-;44384:15;:41;44381:111;;;44478:2;44457:18;;:23;;;;:::i;:::-;44439:41;;44381:111;44554:23;44639:1;44619:17;44598:18;;44580:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44554:86;;44651:26;44680:36;44700:15;44680;:19;;:36;;;;:::i;:::-;44651:65;;44730:25;44758:21;44730:49;;44793:36;44810:18;44793:16;:36::i;:::-;44844:18;44865:44;44891:17;44865:21;:25;;:44;;;;:::i;:::-;44844:65;;44923:23;44949:57;44988:17;44949:34;44964:18;;44949:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44923:83;;45017:17;45037:51;45070:17;45037:28;45052:12;;45037:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;45017:71;;45099:23;45156:9;45138:15;45125:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;45099:66;;45203:1;45182:18;:22;;;;45236:1;45215:18;:22;;;;45263:1;45248:12;:16;;;;45299:9;;;;;;;;;;;45291:23;;45322:9;45291:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45278:58;;;;;45371:1;45353:15;:19;:42;;;;;45394:1;45376:15;:19;45353:42;45350:210;;;45411:46;45424:15;45441;45411:12;:46::i;:::-;45477:71;45492:18;45512:15;45529:18;;45477:71;;;;;;;;:::i;:::-;;;;;;;;45350:210;45594:15;;;;;;;;;;;45586:29;;45623:21;45586:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45573:76;;;;;44117:1540;;;;;;;;;;44089:1568;:::o;17747:473::-;17805:7;18055:1;18050;:6;18046:47;;18080:1;18073:8;;;;18046:47;18106:9;18122:1;18118;:5;;;;:::i;:::-;18106:17;;18151:1;18146;18142;:5;;;;:::i;:::-;:10;18134:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18211:1;18204:8;;;17747:473;;;;;:::o;18697:132::-;18755:7;18782:39;18786:1;18789;18782:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18775:46;;18697:132;;;;:::o;15992:125::-;;;;:::o;16854:136::-;16912:7;16939:43;16943:1;16946;16939:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16932:50;;16854:136;;;;:::o;42954:597::-;43083:21;43121:1;43107:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43083:40;;43152:4;43134;43139:1;43134:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43178:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43168:4;43173:1;43168:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43214:62;43231:4;43246:15;43264:11;43214:8;:62::i;:::-;43316:15;:66;;;43397:11;43423:1;43467:4;43494;43514:15;43316:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43009:542;42954:597;:::o;43560:520::-;43708:62;43725:4;43740:15;43758:11;43708:8;:62::i;:::-;43814:15;:31;;;43853:9;43886:4;43906:11;43932:1;43975;44026:4;44046:15;43814:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43560:520;;:::o;19326:279::-;19412:7;19444:1;19440;:5;19447:12;19432:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19471:9;19487:1;19483;:5;;;;:::i;:::-;19471:17;;19596:1;19589:8;;;19326:279;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:117::-;3890:1;3887;3880:12;3904:180;3952:77;3949:1;3942:88;4049:4;4046:1;4039:15;4073:4;4070:1;4063:15;4090:281;4173:27;4195:4;4173:27;:::i;:::-;4165:6;4161:40;4303:6;4291:10;4288:22;4267:18;4255:10;4252:34;4249:62;4246:88;;;4314:18;;:::i;:::-;4246:88;4354:10;4350:2;4343:22;4133:238;4090:281;;:::o;4377:129::-;4411:6;4438:20;;:::i;:::-;4428:30;;4467:33;4495:4;4487:6;4467:33;:::i;:::-;4377:129;;;:::o;4512:311::-;4589:4;4679:18;4671:6;4668:30;4665:56;;;4701:18;;:::i;:::-;4665:56;4751:4;4743:6;4739:17;4731:25;;4811:4;4805;4801:15;4793:23;;4512:311;;;:::o;4829:117::-;4938:1;4935;4928:12;4969:710;5065:5;5090:81;5106:64;5163:6;5106:64;:::i;:::-;5090:81;:::i;:::-;5081:90;;5191:5;5220:6;5213:5;5206:21;5254:4;5247:5;5243:16;5236:23;;5307:4;5299:6;5295:17;5287:6;5283:30;5336:3;5328:6;5325:15;5322:122;;;5355:79;;:::i;:::-;5322:122;5470:6;5453:220;5487:6;5482:3;5479:15;5453:220;;;5562:3;5591:37;5624:3;5612:10;5591:37;:::i;:::-;5586:3;5579:50;5658:4;5653:3;5649:14;5642:21;;5529:144;5513:4;5508:3;5504:14;5497:21;;5453:220;;;5457:21;5071:608;;4969:710;;;;;:::o;5702:370::-;5773:5;5822:3;5815:4;5807:6;5803:17;5799:27;5789:122;;5830:79;;:::i;:::-;5789:122;5947:6;5934:20;5972:94;6062:3;6054:6;6047:4;6039:6;6035:17;5972:94;:::i;:::-;5963:103;;5779:293;5702:370;;;;:::o;6078:539::-;6162:6;6211:2;6199:9;6190:7;6186:23;6182:32;6179:119;;;6217:79;;:::i;:::-;6179:119;6365:1;6354:9;6350:17;6337:31;6395:18;6387:6;6384:30;6381:117;;;6417:79;;:::i;:::-;6381:117;6522:78;6592:7;6583:6;6572:9;6568:22;6522:78;:::i;:::-;6512:88;;6308:302;6078:539;;;;:::o;6623:60::-;6651:3;6672:5;6665:12;;6623:60;;;:::o;6689:142::-;6739:9;6772:53;6790:34;6799:24;6817:5;6799:24;:::i;:::-;6790:34;:::i;:::-;6772:53;:::i;:::-;6759:66;;6689:142;;;:::o;6837:126::-;6887:9;6920:37;6951:5;6920:37;:::i;:::-;6907:50;;6837:126;;;:::o;6969:153::-;7046:9;7079:37;7110:5;7079:37;:::i;:::-;7066:50;;6969:153;;;:::o;7128:185::-;7242:64;7300:5;7242:64;:::i;:::-;7237:3;7230:77;7128:185;;:::o;7319:276::-;7439:4;7477:2;7466:9;7462:18;7454:26;;7490:98;7585:1;7574:9;7570:17;7561:6;7490:98;:::i;:::-;7319:276;;;;:::o;7601:118::-;7688:24;7706:5;7688:24;:::i;:::-;7683:3;7676:37;7601:118;;:::o;7725:222::-;7818:4;7856:2;7845:9;7841:18;7833:26;;7869:71;7937:1;7926:9;7922:17;7913:6;7869:71;:::i;:::-;7725:222;;;;:::o;7953:329::-;8012:6;8061:2;8049:9;8040:7;8036:23;8032:32;8029:119;;;8067:79;;:::i;:::-;8029:119;8187:1;8212:53;8257:7;8248:6;8237:9;8233:22;8212:53;:::i;:::-;8202:63;;8158:117;7953:329;;;;:::o;8288:619::-;8365:6;8373;8381;8430:2;8418:9;8409:7;8405:23;8401:32;8398:119;;;8436:79;;:::i;:::-;8398:119;8556:1;8581:53;8626:7;8617:6;8606:9;8602:22;8581:53;:::i;:::-;8571:63;;8527:117;8683:2;8709:53;8754:7;8745:6;8734:9;8730:22;8709:53;:::i;:::-;8699:63;;8654:118;8811:2;8837:53;8882:7;8873:6;8862:9;8858:22;8837:53;:::i;:::-;8827:63;;8782:118;8288:619;;;;;:::o;8913:86::-;8948:7;8988:4;8981:5;8977:16;8966:27;;8913:86;;;:::o;9005:112::-;9088:22;9104:5;9088:22;:::i;:::-;9083:3;9076:35;9005:112;;:::o;9123:214::-;9212:4;9250:2;9239:9;9235:18;9227:26;;9263:67;9327:1;9316:9;9312:17;9303:6;9263:67;:::i;:::-;9123:214;;;;:::o;9343:118::-;9430:24;9448:5;9430:24;:::i;:::-;9425:3;9418:37;9343:118;;:::o;9467:222::-;9560:4;9598:2;9587:9;9583:18;9575:26;;9611:71;9679:1;9668:9;9664:17;9655:6;9611:71;:::i;:::-;9467:222;;;;:::o;9695:116::-;9765:21;9780:5;9765:21;:::i;:::-;9758:5;9755:32;9745:60;;9801:1;9798;9791:12;9745:60;9695:116;:::o;9817:133::-;9860:5;9898:6;9885:20;9876:29;;9914:30;9938:5;9914:30;:::i;:::-;9817:133;;;;:::o;9956:468::-;10021:6;10029;10078:2;10066:9;10057:7;10053:23;10049:32;10046:119;;;10084:79;;:::i;:::-;10046:119;10204:1;10229:53;10274:7;10265:6;10254:9;10250:22;10229:53;:::i;:::-;10219:63;;10175:117;10331:2;10357:50;10399:7;10390:6;10379:9;10375:22;10357:50;:::i;:::-;10347:60;;10302:115;9956:468;;;;;:::o;10430:619::-;10507:6;10515;10523;10572:2;10560:9;10551:7;10547:23;10543:32;10540:119;;;10578:79;;:::i;:::-;10540:119;10698:1;10723:53;10768:7;10759:6;10748:9;10744:22;10723:53;:::i;:::-;10713:63;;10669:117;10825:2;10851:53;10896:7;10887:6;10876:9;10872:22;10851:53;:::i;:::-;10841:63;;10796:118;10953:2;10979:53;11024:7;11015:6;11004:9;11000:22;10979:53;:::i;:::-;10969:63;;10924:118;10430:619;;;;;:::o;11055:311::-;11132:4;11222:18;11214:6;11211:30;11208:56;;;11244:18;;:::i;:::-;11208:56;11294:4;11286:6;11282:17;11274:25;;11354:4;11348;11344:15;11336:23;;11055:311;;;:::o;11389:710::-;11485:5;11510:81;11526:64;11583:6;11526:64;:::i;:::-;11510:81;:::i;:::-;11501:90;;11611:5;11640:6;11633:5;11626:21;11674:4;11667:5;11663:16;11656:23;;11727:4;11719:6;11715:17;11707:6;11703:30;11756:3;11748:6;11745:15;11742:122;;;11775:79;;:::i;:::-;11742:122;11890:6;11873:220;11907:6;11902:3;11899:15;11873:220;;;11982:3;12011:37;12044:3;12032:10;12011:37;:::i;:::-;12006:3;11999:50;12078:4;12073:3;12069:14;12062:21;;11949:144;11933:4;11928:3;11924:14;11917:21;;11873:220;;;11877:21;11491:608;;11389:710;;;;;:::o;12122:370::-;12193:5;12242:3;12235:4;12227:6;12223:17;12219:27;12209:122;;12250:79;;:::i;:::-;12209:122;12367:6;12354:20;12392:94;12482:3;12474:6;12467:4;12459:6;12455:17;12392:94;:::i;:::-;12383:103;;12199:293;12122:370;;;;:::o;12498:894::-;12616:6;12624;12673:2;12661:9;12652:7;12648:23;12644:32;12641:119;;;12679:79;;:::i;:::-;12641:119;12827:1;12816:9;12812:17;12799:31;12857:18;12849:6;12846:30;12843:117;;;12879:79;;:::i;:::-;12843:117;12984:78;13054:7;13045:6;13034:9;13030:22;12984:78;:::i;:::-;12974:88;;12770:302;13139:2;13128:9;13124:18;13111:32;13170:18;13162:6;13159:30;13156:117;;;13192:79;;:::i;:::-;13156:117;13297:78;13367:7;13358:6;13347:9;13343:22;13297:78;:::i;:::-;13287:88;;13082:303;12498:894;;;;;:::o;13398:474::-;13466:6;13474;13523:2;13511:9;13502:7;13498:23;13494:32;13491:119;;;13529:79;;:::i;:::-;13491:119;13649:1;13674:53;13719:7;13710:6;13699:9;13695:22;13674:53;:::i;:::-;13664:63;;13620:117;13776:2;13802:53;13847:7;13838:6;13827:9;13823:22;13802:53;:::i;:::-;13792:63;;13747:118;13398:474;;;;;:::o;13878:462::-;13940:6;13948;13997:2;13985:9;13976:7;13972:23;13968:32;13965:119;;;14003:79;;:::i;:::-;13965:119;14123:1;14148:50;14190:7;14181:6;14170:9;14166:22;14148:50;:::i;:::-;14138:60;;14094:114;14247:2;14273:50;14315:7;14306:6;14295:9;14291:22;14273:50;:::i;:::-;14263:60;;14218:115;13878:462;;;;;:::o;14346:180::-;14394:77;14391:1;14384:88;14491:4;14488:1;14481:15;14515:4;14512:1;14505:15;14532:320;14576:6;14613:1;14607:4;14603:12;14593:22;;14660:1;14654:4;14650:12;14681:18;14671:81;;14737:4;14729:6;14725:17;14715:27;;14671:81;14799:2;14791:6;14788:14;14768:18;14765:38;14762:84;;14818:18;;:::i;:::-;14762:84;14583:269;14532:320;;;:::o;14858:182::-;14998:34;14994:1;14986:6;14982:14;14975:58;14858:182;:::o;15046:366::-;15188:3;15209:67;15273:2;15268:3;15209:67;:::i;:::-;15202:74;;15285:93;15374:3;15285:93;:::i;:::-;15403:2;15398:3;15394:12;15387:19;;15046:366;;;:::o;15418:419::-;15584:4;15622:2;15611:9;15607:18;15599:26;;15671:9;15665:4;15661:20;15657:1;15646:9;15642:17;15635:47;15699:131;15825:4;15699:131;:::i;:::-;15691:139;;15418:419;;;:::o;15843:180::-;15891:77;15888:1;15881:88;15988:4;15985:1;15978:15;16012:4;16009:1;16002:15;16029:180;16077:77;16074:1;16067:88;16174:4;16171:1;16164:15;16198:4;16195:1;16188:15;16215:233;16254:3;16277:24;16295:5;16277:24;:::i;:::-;16268:33;;16323:66;16316:5;16313:77;16310:103;;16393:18;;:::i;:::-;16310:103;16440:1;16433:5;16429:13;16422:20;;16215:233;;;:::o;16454:410::-;16494:7;16517:20;16535:1;16517:20;:::i;:::-;16512:25;;16551:20;16569:1;16551:20;:::i;:::-;16546:25;;16606:1;16603;16599:9;16628:30;16646:11;16628:30;:::i;:::-;16617:41;;16807:1;16798:7;16794:15;16791:1;16788:22;16768:1;16761:9;16741:83;16718:139;;16837:18;;:::i;:::-;16718:139;16502:362;16454:410;;;;:::o;16870:180::-;16918:77;16915:1;16908:88;17015:4;17012:1;17005:15;17039:4;17036:1;17029:15;17056:185;17096:1;17113:20;17131:1;17113:20;:::i;:::-;17108:25;;17147:20;17165:1;17147:20;:::i;:::-;17142:25;;17186:1;17176:35;;17191:18;;:::i;:::-;17176:35;17233:1;17230;17226:9;17221:14;;17056:185;;;;:::o;17247:234::-;17387:34;17383:1;17375:6;17371:14;17364:58;17456:17;17451:2;17443:6;17439:15;17432:42;17247:234;:::o;17487:366::-;17629:3;17650:67;17714:2;17709:3;17650:67;:::i;:::-;17643:74;;17726:93;17815:3;17726:93;:::i;:::-;17844:2;17839:3;17835:12;17828:19;;17487:366;;;:::o;17859:419::-;18025:4;18063:2;18052:9;18048:18;18040:26;;18112:9;18106:4;18102:20;18098:1;18087:9;18083:17;18076:47;18140:131;18266:4;18140:131;:::i;:::-;18132:139;;17859:419;;;:::o;18284:191::-;18324:3;18343:20;18361:1;18343:20;:::i;:::-;18338:25;;18377:20;18395:1;18377:20;:::i;:::-;18372:25;;18420:1;18417;18413:9;18406:16;;18441:3;18438:1;18435:10;18432:36;;;18448:18;;:::i;:::-;18432:36;18284:191;;;;:::o;18481:179::-;18621:31;18617:1;18609:6;18605:14;18598:55;18481:179;:::o;18666:366::-;18808:3;18829:67;18893:2;18888:3;18829:67;:::i;:::-;18822:74;;18905:93;18994:3;18905:93;:::i;:::-;19023:2;19018:3;19014:12;19007:19;;18666:366;;;:::o;19038:419::-;19204:4;19242:2;19231:9;19227:18;19219:26;;19291:9;19285:4;19281:20;19277:1;19266:9;19262:17;19255:47;19319:131;19445:4;19319:131;:::i;:::-;19311:139;;19038:419;;;:::o;19463:244::-;19603:34;19599:1;19591:6;19587:14;19580:58;19672:27;19667:2;19659:6;19655:15;19648:52;19463:244;:::o;19713:366::-;19855:3;19876:67;19940:2;19935:3;19876:67;:::i;:::-;19869:74;;19952:93;20041:3;19952:93;:::i;:::-;20070:2;20065:3;20061:12;20054:19;;19713:366;;;:::o;20085:419::-;20251:4;20289:2;20278:9;20274:18;20266:26;;20338:9;20332:4;20328:20;20324:1;20313:9;20309:17;20302:47;20366:131;20492:4;20366:131;:::i;:::-;20358:139;;20085:419;;;:::o;20510:229::-;20650:34;20646:1;20638:6;20634:14;20627:58;20719:12;20714:2;20706:6;20702:15;20695:37;20510:229;:::o;20745:366::-;20887:3;20908:67;20972:2;20967:3;20908:67;:::i;:::-;20901:74;;20984:93;21073:3;20984:93;:::i;:::-;21102:2;21097:3;21093:12;21086:19;;20745:366;;;:::o;21117:419::-;21283:4;21321:2;21310:9;21306:18;21298:26;;21370:9;21364:4;21360:20;21356:1;21345:9;21341:17;21334:47;21398:131;21524:4;21398:131;:::i;:::-;21390:139;;21117:419;;;:::o;21542:180::-;21682:32;21678:1;21670:6;21666:14;21659:56;21542:180;:::o;21728:366::-;21870:3;21891:67;21955:2;21950:3;21891:67;:::i;:::-;21884:74;;21967:93;22056:3;21967:93;:::i;:::-;22085:2;22080:3;22076:12;22069:19;;21728:366;;;:::o;22100:419::-;22266:4;22304:2;22293:9;22289:18;22281:26;;22353:9;22347:4;22343:20;22339:1;22328:9;22324:17;22317:47;22381:131;22507:4;22381:131;:::i;:::-;22373:139;;22100:419;;;:::o;22525:222::-;22665:34;22661:1;22653:6;22649:14;22642:58;22734:5;22729:2;22721:6;22717:15;22710:30;22525:222;:::o;22753:366::-;22895:3;22916:67;22980:2;22975:3;22916:67;:::i;:::-;22909:74;;22992:93;23081:3;22992:93;:::i;:::-;23110:2;23105:3;23101:12;23094:19;;22753:366;;;:::o;23125:419::-;23291:4;23329:2;23318:9;23314:18;23306:26;;23378:9;23372:4;23368:20;23364:1;23353:9;23349:17;23342:47;23406:131;23532:4;23406:131;:::i;:::-;23398:139;;23125:419;;;:::o;23550:240::-;23690:34;23686:1;23678:6;23674:14;23667:58;23759:23;23754:2;23746:6;23742:15;23735:48;23550:240;:::o;23796:366::-;23938:3;23959:67;24023:2;24018:3;23959:67;:::i;:::-;23952:74;;24035:93;24124:3;24035:93;:::i;:::-;24153:2;24148:3;24144:12;24137:19;;23796:366;;;:::o;24168:419::-;24334:4;24372:2;24361:9;24357:18;24349:26;;24421:9;24415:4;24411:20;24407:1;24396:9;24392:17;24385:47;24449:131;24575:4;24449:131;:::i;:::-;24441:139;;24168:419;;;:::o;24593:239::-;24733:34;24729:1;24721:6;24717:14;24710:58;24802:22;24797:2;24789:6;24785:15;24778:47;24593:239;:::o;24838:366::-;24980:3;25001:67;25065:2;25060:3;25001:67;:::i;:::-;24994:74;;25077:93;25166:3;25077:93;:::i;:::-;25195:2;25190:3;25186:12;25179:19;;24838:366;;;:::o;25210:419::-;25376:4;25414:2;25403:9;25399:18;25391:26;;25463:9;25457:4;25453:20;25449:1;25438:9;25434:17;25427:47;25491:131;25617:4;25491:131;:::i;:::-;25483:139;;25210:419;;;:::o;25635:225::-;25775:34;25771:1;25763:6;25759:14;25752:58;25844:8;25839:2;25831:6;25827:15;25820:33;25635:225;:::o;25866:366::-;26008:3;26029:67;26093:2;26088:3;26029:67;:::i;:::-;26022:74;;26105:93;26194:3;26105:93;:::i;:::-;26223:2;26218:3;26214:12;26207:19;;25866:366;;;:::o;26238:419::-;26404:4;26442:2;26431:9;26427:18;26419:26;;26491:9;26485:4;26481:20;26477:1;26466:9;26462:17;26455:47;26519:131;26645:4;26519:131;:::i;:::-;26511:139;;26238:419;;;:::o;26663:177::-;26803:29;26799:1;26791:6;26787:14;26780:53;26663:177;:::o;26846:366::-;26988:3;27009:67;27073:2;27068:3;27009:67;:::i;:::-;27002:74;;27085:93;27174:3;27085:93;:::i;:::-;27203:2;27198:3;27194:12;27187:19;;26846:366;;;:::o;27218:419::-;27384:4;27422:2;27411:9;27407:18;27399:26;;27471:9;27465:4;27461:20;27457:1;27446:9;27442:17;27435:47;27499:131;27625:4;27499:131;:::i;:::-;27491:139;;27218:419;;;:::o;27643:223::-;27783:34;27779:1;27771:6;27767:14;27760:58;27852:6;27847:2;27839:6;27835:15;27828:31;27643:223;:::o;27872:366::-;28014:3;28035:67;28099:2;28094:3;28035:67;:::i;:::-;28028:74;;28111:93;28200:3;28111:93;:::i;:::-;28229:2;28224:3;28220:12;28213:19;;27872:366;;;:::o;28244:419::-;28410:4;28448:2;28437:9;28433:18;28425:26;;28497:9;28491:4;28487:20;28483:1;28472:9;28468:17;28461:47;28525:131;28651:4;28525:131;:::i;:::-;28517:139;;28244:419;;;:::o;28669:221::-;28809:34;28805:1;28797:6;28793:14;28786:58;28878:4;28873:2;28865:6;28861:15;28854:29;28669:221;:::o;28896:366::-;29038:3;29059:67;29123:2;29118:3;29059:67;:::i;:::-;29052:74;;29135:93;29224:3;29135:93;:::i;:::-;29253:2;29248:3;29244:12;29237:19;;28896:366;;;:::o;29268:419::-;29434:4;29472:2;29461:9;29457:18;29449:26;;29521:9;29515:4;29511:20;29507:1;29496:9;29492:17;29485:47;29549:131;29675:4;29549:131;:::i;:::-;29541:139;;29268:419;;;:::o;29693:224::-;29833:34;29829:1;29821:6;29817:14;29810:58;29902:7;29897:2;29889:6;29885:15;29878:32;29693:224;:::o;29923:366::-;30065:3;30086:67;30150:2;30145:3;30086:67;:::i;:::-;30079:74;;30162:93;30251:3;30162:93;:::i;:::-;30280:2;30275:3;30271:12;30264:19;;29923:366;;;:::o;30295:419::-;30461:4;30499:2;30488:9;30484:18;30476:26;;30548:9;30542:4;30538:20;30534:1;30523:9;30519:17;30512:47;30576:131;30702:4;30576:131;:::i;:::-;30568:139;;30295:419;;;:::o;30720:222::-;30860:34;30856:1;30848:6;30844:14;30837:58;30929:5;30924:2;30916:6;30912:15;30905:30;30720:222;:::o;30948:366::-;31090:3;31111:67;31175:2;31170:3;31111:67;:::i;:::-;31104:74;;31187:93;31276:3;31187:93;:::i;:::-;31305:2;31300:3;31296:12;31289:19;;30948:366;;;:::o;31320:419::-;31486:4;31524:2;31513:9;31509:18;31501:26;;31573:9;31567:4;31563:20;31559:1;31548:9;31544:17;31537:47;31601:131;31727:4;31601:131;:::i;:::-;31593:139;;31320:419;;;:::o;31745:236::-;31885:34;31881:1;31873:6;31869:14;31862:58;31954:19;31949:2;31941:6;31937:15;31930:44;31745:236;:::o;31987:366::-;32129:3;32150:67;32214:2;32209:3;32150:67;:::i;:::-;32143:74;;32226:93;32315:3;32226:93;:::i;:::-;32344:2;32339:3;32335:12;32328:19;;31987:366;;;:::o;32359:419::-;32525:4;32563:2;32552:9;32548:18;32540:26;;32612:9;32606:4;32602:20;32598:1;32587:9;32583:17;32576:47;32640:131;32766:4;32640:131;:::i;:::-;32632:139;;32359:419;;;:::o;32784:172::-;32924:24;32920:1;32912:6;32908:14;32901:48;32784:172;:::o;32962:366::-;33104:3;33125:67;33189:2;33184:3;33125:67;:::i;:::-;33118:74;;33201:93;33290:3;33201:93;:::i;:::-;33319:2;33314:3;33310:12;33303:19;;32962:366;;;:::o;33334:419::-;33500:4;33538:2;33527:9;33523:18;33515:26;;33587:9;33581:4;33577:20;33573:1;33562:9;33558:17;33551:47;33615:131;33741:4;33615:131;:::i;:::-;33607:139;;33334:419;;;:::o;33759:297::-;33899:34;33895:1;33887:6;33883:14;33876:58;33968:34;33963:2;33955:6;33951:15;33944:59;34037:11;34032:2;34024:6;34020:15;34013:36;33759:297;:::o;34062:366::-;34204:3;34225:67;34289:2;34284:3;34225:67;:::i;:::-;34218:74;;34301:93;34390:3;34301:93;:::i;:::-;34419:2;34414:3;34410:12;34403:19;;34062:366;;;:::o;34434:419::-;34600:4;34638:2;34627:9;34623:18;34615:26;;34687:9;34681:4;34677:20;34673:1;34662:9;34658:17;34651:47;34715:131;34841:4;34715:131;:::i;:::-;34707:139;;34434:419;;;:::o;34859:240::-;34999:34;34995:1;34987:6;34983:14;34976:58;35068:23;35063:2;35055:6;35051:15;35044:48;34859:240;:::o;35105:366::-;35247:3;35268:67;35332:2;35327:3;35268:67;:::i;:::-;35261:74;;35344:93;35433:3;35344:93;:::i;:::-;35462:2;35457:3;35453:12;35446:19;;35105:366;;;:::o;35477:419::-;35643:4;35681:2;35670:9;35666:18;35658:26;;35730:9;35724:4;35720:20;35716:1;35705:9;35701:17;35694:47;35758:131;35884:4;35758:131;:::i;:::-;35750:139;;35477:419;;;:::o;35902:169::-;36042:21;36038:1;36030:6;36026:14;36019:45;35902:169;:::o;36077:366::-;36219:3;36240:67;36304:2;36299:3;36240:67;:::i;:::-;36233:74;;36316:93;36405:3;36316:93;:::i;:::-;36434:2;36429:3;36425:12;36418:19;;36077:366;;;:::o;36449:419::-;36615:4;36653:2;36642:9;36638:18;36630:26;;36702:9;36696:4;36692:20;36688:1;36677:9;36673:17;36666:47;36730:131;36856:4;36730:131;:::i;:::-;36722:139;;36449:419;;;:::o;36874:241::-;37014:34;37010:1;37002:6;36998:14;36991:58;37083:24;37078:2;37070:6;37066:15;37059:49;36874:241;:::o;37121:366::-;37263:3;37284:67;37348:2;37343:3;37284:67;:::i;:::-;37277:74;;37360:93;37449:3;37360:93;:::i;:::-;37478:2;37473:3;37469:12;37462:19;;37121:366;;;:::o;37493:419::-;37659:4;37697:2;37686:9;37682:18;37674:26;;37746:9;37740:4;37736:20;37732:1;37721:9;37717:17;37710:47;37774:131;37900:4;37774:131;:::i;:::-;37766:139;;37493:419;;;:::o;37918:194::-;37958:4;37978:20;37996:1;37978:20;:::i;:::-;37973:25;;38012:20;38030:1;38012:20;:::i;:::-;38007:25;;38056:1;38053;38049:9;38041:17;;38080:1;38074:4;38071:11;38068:37;;;38085:18;;:::i;:::-;38068:37;37918:194;;;;:::o;38118:147::-;38219:11;38256:3;38241:18;;38118:147;;;;:::o;38271:114::-;;:::o;38391:398::-;38550:3;38571:83;38652:1;38647:3;38571:83;:::i;:::-;38564:90;;38663:93;38752:3;38663:93;:::i;:::-;38781:1;38776:3;38772:11;38765:18;;38391:398;;;:::o;38795:379::-;38979:3;39001:147;39144:3;39001:147;:::i;:::-;38994:154;;39165:3;39158:10;;38795:379;;;:::o;39180:442::-;39329:4;39367:2;39356:9;39352:18;39344:26;;39380:71;39448:1;39437:9;39433:17;39424:6;39380:71;:::i;:::-;39461:72;39529:2;39518:9;39514:18;39505:6;39461:72;:::i;:::-;39543;39611:2;39600:9;39596:18;39587:6;39543:72;:::i;:::-;39180:442;;;;;;:::o;39628:220::-;39768:34;39764:1;39756:6;39752:14;39745:58;39837:3;39832:2;39824:6;39820:15;39813:28;39628:220;:::o;39854:366::-;39996:3;40017:67;40081:2;40076:3;40017:67;:::i;:::-;40010:74;;40093:93;40182:3;40093:93;:::i;:::-;40211:2;40206:3;40202:12;40195:19;;39854:366;;;:::o;40226:419::-;40392:4;40430:2;40419:9;40415:18;40407:26;;40479:9;40473:4;40469:20;40465:1;40454:9;40450:17;40443:47;40507:131;40633:4;40507:131;:::i;:::-;40499:139;;40226:419;;;:::o;40651:143::-;40708:5;40739:6;40733:13;40724:22;;40755:33;40782:5;40755:33;:::i;:::-;40651:143;;;;:::o;40800:351::-;40870:6;40919:2;40907:9;40898:7;40894:23;40890:32;40887:119;;;40925:79;;:::i;:::-;40887:119;41045:1;41070:64;41126:7;41117:6;41106:9;41102:22;41070:64;:::i;:::-;41060:74;;41016:128;40800:351;;;;:::o;41157:85::-;41202:7;41231:5;41220:16;;41157:85;;;:::o;41248:158::-;41306:9;41339:61;41357:42;41366:32;41392:5;41366:32;:::i;:::-;41357:42;:::i;:::-;41339:61;:::i;:::-;41326:74;;41248:158;;;:::o;41412:147::-;41507:45;41546:5;41507:45;:::i;:::-;41502:3;41495:58;41412:147;;:::o;41565:114::-;41632:6;41666:5;41660:12;41650:22;;41565:114;;;:::o;41685:184::-;41784:11;41818:6;41813:3;41806:19;41858:4;41853:3;41849:14;41834:29;;41685:184;;;;:::o;41875:132::-;41942:4;41965:3;41957:11;;41995:4;41990:3;41986:14;41978:22;;41875:132;;;:::o;42013:108::-;42090:24;42108:5;42090:24;:::i;:::-;42085:3;42078:37;42013:108;;:::o;42127:179::-;42196:10;42217:46;42259:3;42251:6;42217:46;:::i;:::-;42295:4;42290:3;42286:14;42272:28;;42127:179;;;;:::o;42312:113::-;42382:4;42414;42409:3;42405:14;42397:22;;42312:113;;;:::o;42461:732::-;42580:3;42609:54;42657:5;42609:54;:::i;:::-;42679:86;42758:6;42753:3;42679:86;:::i;:::-;42672:93;;42789:56;42839:5;42789:56;:::i;:::-;42868:7;42899:1;42884:284;42909:6;42906:1;42903:13;42884:284;;;42985:6;42979:13;43012:63;43071:3;43056:13;43012:63;:::i;:::-;43005:70;;43098:60;43151:6;43098:60;:::i;:::-;43088:70;;42944:224;42931:1;42928;42924:9;42919:14;;42884:284;;;42888:14;43184:3;43177:10;;42585:608;;;42461:732;;;;:::o;43199:831::-;43462:4;43500:3;43489:9;43485:19;43477:27;;43514:71;43582:1;43571:9;43567:17;43558:6;43514:71;:::i;:::-;43595:80;43671:2;43660:9;43656:18;43647:6;43595:80;:::i;:::-;43722:9;43716:4;43712:20;43707:2;43696:9;43692:18;43685:48;43750:108;43853:4;43844:6;43750:108;:::i;:::-;43742:116;;43868:72;43936:2;43925:9;43921:18;43912:6;43868:72;:::i;:::-;43950:73;44018:3;44007:9;44003:19;43994:6;43950:73;:::i;:::-;43199:831;;;;;;;;:::o;44036:807::-;44285:4;44323:3;44312:9;44308:19;44300:27;;44337:71;44405:1;44394:9;44390:17;44381:6;44337:71;:::i;:::-;44418:72;44486:2;44475:9;44471:18;44462:6;44418:72;:::i;:::-;44500:80;44576:2;44565:9;44561:18;44552:6;44500:80;:::i;:::-;44590;44666:2;44655:9;44651:18;44642:6;44590:80;:::i;:::-;44680:73;44748:3;44737:9;44733:19;44724:6;44680:73;:::i;:::-;44763;44831:3;44820:9;44816:19;44807:6;44763:73;:::i;:::-;44036:807;;;;;;;;;:::o;44849:143::-;44906:5;44937:6;44931:13;44922:22;;44953:33;44980:5;44953:33;:::i;:::-;44849:143;;;;:::o;44998:663::-;45086:6;45094;45102;45151:2;45139:9;45130:7;45126:23;45122:32;45119:119;;;45157:79;;:::i;:::-;45119:119;45277:1;45302:64;45358:7;45349:6;45338:9;45334:22;45302:64;:::i;:::-;45292:74;;45248:128;45415:2;45441:64;45497:7;45488:6;45477:9;45473:22;45441:64;:::i;:::-;45431:74;;45386:129;45554:2;45580:64;45636:7;45627:6;45616:9;45612:22;45580:64;:::i;:::-;45570:74;;45525:129;44998:663;;;;;:::o

Swarm Source

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